{
    "script": "var SwiperModule=(()=>{var ue=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Qe=Object.prototype.hasOwnProperty;var Je=(s,e)=>{for(var t in e)ue(s,t,{get:e[t],enumerable:!0})},et=(s,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let a of Ze(e))!Qe.call(s,a)&&a!==t&&ue(s,a,{get:()=>e[a],enumerable:!(i=Ke(e,a))||i.enumerable});return s};var tt=s=>et(ue({},\"__esModule\",{value:!0}),s);var gs={};Je(gs,{default:()=>hs});function ze(s){return s!==null&&typeof s==\"object\"&&\"constructor\"in s&&s.constructor===Object}function pe(s,e){s===void 0&&(s={}),e===void 0&&(e={});let t=[\"__proto__\",\"constructor\",\"prototype\"];Object.keys(e).filter(i=>t.indexOf(i)<0).forEach(i=>{typeof s[i]==\"undefined\"?s[i]=e[i]:ze(e[i])&&ze(s[i])&&Object.keys(e[i]).length>0&&pe(s[i],e[i])})}var Oe={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:\"\"},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:\"\",host:\"\",hostname:\"\",href:\"\",origin:\"\",pathname:\"\",protocol:\"\",search:\"\"}};function B(){let s=typeof document!=\"undefined\"?document:{};return pe(s,Oe),s}var st={document:Oe,navigator:{userAgent:\"\"},location:{hash:\"\",host:\"\",hostname:\"\",href:\"\",origin:\"\",pathname:\"\",protocol:\"\",search:\"\"},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return\"\"}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(s){return typeof setTimeout==\"undefined\"?(s(),null):setTimeout(s,0)},cancelAnimationFrame(s){typeof setTimeout!=\"undefined\"&&clearTimeout(s)}};function H(){let s=typeof window!=\"undefined\"?window:{};return pe(s,st),s}function De(s){return s===void 0&&(s=\"\"),s.trim().split(\" \").filter(e=>!!e.trim())}function $e(s){let e=s;Object.keys(e).forEach(t=>{try{e[t]=null}catch(i){}try{delete e[t]}catch(i){}})}function J(s,e){return e===void 0&&(e=0),setTimeout(s,e)}function K(){return Date.now()}function it(s){let e=H(),t;return e.getComputedStyle&&(t=e.getComputedStyle(s,null)),!t&&s.currentStyle&&(t=s.currentStyle),t||(t=s.style),t}function me(s,e){e===void 0&&(e=\"x\");let t=H(),i,a,r,l=it(s);return t.WebKitCSSMatrix?(a=l.transform||l.webkitTransform,a.split(\",\").length>6&&(a=a.split(\", \").map(n=>n.replace(\",\",\".\")).join(\", \")),r=new t.WebKitCSSMatrix(a===\"none\"?\"\":a)):(r=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue(\"transform\").replace(\"translate(\",\"matrix(1, 0, 0, 1,\"),i=r.toString().split(\",\")),e===\"x\"&&(t.WebKitCSSMatrix?a=r.m41:i.length===16?a=parseFloat(i[12]):a=parseFloat(i[4])),e===\"y\"&&(t.WebKitCSSMatrix?a=r.m42:i.length===16?a=parseFloat(i[13]):a=parseFloat(i[5])),a||0}function ie(s){return typeof s==\"object\"&&s!==null&&s.constructor&&Object.prototype.toString.call(s).slice(8,-1)===\"Object\"}function rt(s){return typeof window!=\"undefined\"&&typeof window.HTMLElement!=\"undefined\"?s instanceof HTMLElement:s&&(s.nodeType===1||s.nodeType===11)}function Y(){let s=Object(arguments.length<=0?void 0:arguments[0]),e=[\"__proto__\",\"constructor\",\"prototype\"];for(let t=1;t<arguments.length;t+=1){let i=t<0||arguments.length<=t?void 0:arguments[t];if(i!=null&&!rt(i)){let a=Object.keys(Object(i)).filter(r=>e.indexOf(r)<0);for(let r=0,l=a.length;r<l;r+=1){let n=a[r],d=Object.getOwnPropertyDescriptor(i,n);d!==void 0&&d.enumerable&&(ie(s[n])&&ie(i[n])?i[n].__swiper__?s[n]=i[n]:Y(s[n],i[n]):!ie(s[n])&&ie(i[n])?(s[n]={},i[n].__swiper__?s[n]=i[n]:Y(s[n],i[n])):s[n]=i[n])}}}return s}function ee(s,e,t){s.style.setProperty(e,t)}function he(s){let{swiper:e,targetPosition:t,side:i}=s,a=H(),r=-e.translate,l=null,n,d=e.params.speed;e.wrapperEl.style.scrollSnapType=\"none\",a.cancelAnimationFrame(e.cssModeFrameID);let o=t>r?\"next\":\"prev\",u=(g,y)=>o===\"next\"&&g>=y||o===\"prev\"&&g<=y,p=()=>{n=new Date().getTime(),l===null&&(l=n);let g=Math.max(Math.min((n-l)\/d,1),0),y=.5-Math.cos(g*Math.PI)\/2,m=r+y*(t-r);if(u(m,t)&&(m=t),e.wrapperEl.scrollTo({[i]:m}),u(m,t)){e.wrapperEl.style.overflow=\"hidden\",e.wrapperEl.style.scrollSnapType=\"\",setTimeout(()=>{e.wrapperEl.style.overflow=\"\",e.wrapperEl.scrollTo({[i]:m})}),a.cancelAnimationFrame(e.cssModeFrameID);return}e.cssModeFrameID=a.requestAnimationFrame(p)};p()}function F(s){return s.querySelector(\".swiper-slide-transform\")||s.shadowRoot&&s.shadowRoot.querySelector(\".swiper-slide-transform\")||s}function R(s,e){e===void 0&&(e=\"\");let t=H(),i=[...s.children];return t.HTMLSlotElement&&s instanceof HTMLSlotElement&&i.push(...s.assignedElements()),e?i.filter(a=>a.matches(e)):i}function at(s,e){let t=[e];for(;t.length>0;){let i=t.shift();if(s===i)return!0;t.push(...i.children,...i.shadowRoot?i.shadowRoot.children:[],...i.assignedElements?i.assignedElements():[])}}function ke(s,e){let t=H(),i=e.contains(s);return!i&&t.HTMLSlotElement&&e instanceof HTMLSlotElement&&(i=[...e.assignedElements()].includes(s),i||(i=at(s,e))),i}function re(s){try{console.warn(s);return}catch(e){}}function V(s,e){e===void 0&&(e=[]);let t=document.createElement(s);return t.classList.add(...Array.isArray(e)?e:De(e)),t}function Ge(s,e){let t=[];for(;s.previousElementSibling;){let i=s.previousElementSibling;e?i.matches(e)&&t.push(i):t.push(i),s=i}return t}function He(s,e){let t=[];for(;s.nextElementSibling;){let i=s.nextElementSibling;e?i.matches(e)&&t.push(i):t.push(i),s=i}return t}function W(s,e){return H().getComputedStyle(s,null).getPropertyValue(e)}function U(s){let e=s,t;if(e){for(t=0;(e=e.previousSibling)!==null;)e.nodeType===1&&(t+=1);return t}}function te(s,e){let t=[],i=s.parentElement;for(;i;)e?i.matches(e)&&t.push(i):t.push(i),i=i.parentElement;return t}function ce(s,e){function t(i){i.target===s&&(e.call(s,i),s.removeEventListener(\"transitionend\",t))}e&&s.addEventListener(\"transitionend\",t)}function ae(s,e,t){let i=H();return t?s[e===\"width\"?\"offsetWidth\":\"offsetHeight\"]+parseFloat(i.getComputedStyle(s,null).getPropertyValue(e===\"width\"?\"margin-right\":\"margin-top\"))+parseFloat(i.getComputedStyle(s,null).getPropertyValue(e===\"width\"?\"margin-left\":\"margin-bottom\")):s.offsetWidth}function D(s){return(Array.isArray(s)?s:[s]).filter(e=>!!e)}function Z(s,e){e===void 0&&(e=\"\"),typeof trustedTypes!=\"undefined\"?s.innerHTML=trustedTypes.createPolicy(\"html\",{createHTML:t=>t}).createHTML(e):s.innerHTML=e}var ge;function nt(){let s=H(),e=B();return{smoothScroll:e.documentElement&&e.documentElement.style&&\"scrollBehavior\"in e.documentElement.style,touch:!!(\"ontouchstart\"in s||s.DocumentTouch&&e instanceof s.DocumentTouch)}}function Ne(){return ge||(ge=nt()),ge}var ve;function lt(s){let{userAgent:e}=s===void 0?{}:s,t=Ne(),i=H(),a=i.navigator.platform,r=e||i.navigator.userAgent,l={ios:!1,android:!1},n=i.screen.width,d=i.screen.height,o=r.match(\/(Android);?[\\s\\\/]+([\\d.]+)?\/),u=r.match(\/(iPad).*OS\\s([\\d_]+)\/),p=r.match(\/(iPod)(.*OS\\s([\\d_]+))?\/),g=!u&&r.match(\/(iPhone\\sOS|iOS)\\s([\\d_]+)\/),y=a===\"Win32\",m=a===\"MacIntel\",h=[\"1024x1366\",\"1366x1024\",\"834x1194\",\"1194x834\",\"834x1112\",\"1112x834\",\"768x1024\",\"1024x768\",\"820x1180\",\"1180x820\",\"810x1080\",\"1080x810\"];return!u&&m&&t.touch&&h.indexOf(`${n}x${d}`)>=0&&(u=r.match(\/(Version)\\\/([\\d.]+)\/),u||(u=[0,1,\"13_0_0\"]),m=!1),o&&!y&&(l.os=\"android\",l.android=!0),(u||g||p)&&(l.os=\"ios\",l.ios=!0),l}function Fe(s){return s===void 0&&(s={}),ve||(ve=lt(s)),ve}var we;function ot(){let s=H(),e=Fe(),t=!1;function i(){let n=s.navigator.userAgent.toLowerCase();return n.indexOf(\"safari\")>=0&&n.indexOf(\"chrome\")<0&&n.indexOf(\"android\")<0}if(i()){let n=String(s.navigator.userAgent);if(n.includes(\"Version\/\")){let[d,o]=n.split(\"Version\/\")[1].split(\" \")[0].split(\".\").map(u=>Number(u));t=d<16||d===16&&o<2}}let a=\/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)\/i.test(s.navigator.userAgent),r=i(),l=r||a&&e.ios;return{isSafari:t||r,needPerspectiveFix:t,need3dFix:l,isWebView:a}}function We(){return we||(we=ot()),we}function dt(s){let{swiper:e,on:t,emit:i}=s,a=H(),r=null,l=null,n=()=>{!e||e.destroyed||!e.initialized||(i(\"beforeResize\"),i(\"resize\"))},d=()=>{!e||e.destroyed||!e.initialized||(r=new ResizeObserver(p=>{l=a.requestAnimationFrame(()=>{let{width:g,height:y}=e,m=g,h=y;p.forEach(x=>{let{contentBoxSize:b,contentRect:c,target:f}=x;f&&f!==e.el||(m=c?c.width:(b[0]||b).inlineSize,h=c?c.height:(b[0]||b).blockSize)}),(m!==g||h!==y)&&n()})}),r.observe(e.el))},o=()=>{l&&a.cancelAnimationFrame(l),r&&r.unobserve&&e.el&&(r.unobserve(e.el),r=null)},u=()=>{!e||e.destroyed||!e.initialized||i(\"orientationchange\")};t(\"init\",()=>{if(e.params.resizeObserver&&typeof a.ResizeObserver!=\"undefined\"){d();return}a.addEventListener(\"resize\",n),a.addEventListener(\"orientationchange\",u)}),t(\"destroy\",()=>{o(),a.removeEventListener(\"resize\",n),a.removeEventListener(\"orientationchange\",u)})}function ct(s){let{swiper:e,extendParams:t,on:i,emit:a}=s,r=[],l=H(),n=function(u,p){p===void 0&&(p={});let g=l.MutationObserver||l.WebkitMutationObserver,y=new g(m=>{if(e.__preventObserver__)return;if(m.length===1){a(\"observerUpdate\",m[0]);return}let h=function(){a(\"observerUpdate\",m[0])};l.requestAnimationFrame?l.requestAnimationFrame(h):l.setTimeout(h,0)});y.observe(u,{attributes:typeof p.attributes==\"undefined\"?!0:p.attributes,childList:e.isElement||(typeof p.childList==\"undefined\"?!0:p).childList,characterData:typeof p.characterData==\"undefined\"?!0:p.characterData}),r.push(y)},d=()=>{if(e.params.observer){if(e.params.observeParents){let u=te(e.hostEl);for(let p=0;p<u.length;p+=1)n(u[p])}n(e.hostEl,{childList:e.params.observeSlideChildren}),n(e.wrapperEl,{attributes:!1})}},o=()=>{r.forEach(u=>{u.disconnect()}),r.splice(0,r.length)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),i(\"init\",d),i(\"destroy\",o)}var ft={on(s,e,t){let i=this;if(!i.eventsListeners||i.destroyed||typeof e!=\"function\")return i;let a=t?\"unshift\":\"push\";return s.split(\" \").forEach(r=>{i.eventsListeners[r]||(i.eventsListeners[r]=[]),i.eventsListeners[r][a](e)}),i},once(s,e,t){let i=this;if(!i.eventsListeners||i.destroyed||typeof e!=\"function\")return i;function a(){i.off(s,a),a.__emitterProxy&&delete a.__emitterProxy;for(var r=arguments.length,l=new Array(r),n=0;n<r;n++)l[n]=arguments[n];e.apply(i,l)}return a.__emitterProxy=e,i.on(s,a,t)},onAny(s,e){let t=this;if(!t.eventsListeners||t.destroyed||typeof s!=\"function\")return t;let i=e?\"unshift\":\"push\";return t.eventsAnyListeners.indexOf(s)<0&&t.eventsAnyListeners[i](s),t},offAny(s){let e=this;if(!e.eventsListeners||e.destroyed||!e.eventsAnyListeners)return e;let t=e.eventsAnyListeners.indexOf(s);return t>=0&&e.eventsAnyListeners.splice(t,1),e},off(s,e){let t=this;return!t.eventsListeners||t.destroyed||!t.eventsListeners||s.split(\" \").forEach(i=>{typeof e==\"undefined\"?t.eventsListeners[i]=[]:t.eventsListeners[i]&&t.eventsListeners[i].forEach((a,r)=>{(a===e||a.__emitterProxy&&a.__emitterProxy===e)&&t.eventsListeners[i].splice(r,1)})}),t},emit(){let s=this;if(!s.eventsListeners||s.destroyed||!s.eventsListeners)return s;let e,t,i;for(var a=arguments.length,r=new Array(a),l=0;l<a;l++)r[l]=arguments[l];return typeof r[0]==\"string\"||Array.isArray(r[0])?(e=r[0],t=r.slice(1,r.length),i=s):(e=r[0].events,t=r[0].data,i=r[0].context||s),t.unshift(i),(Array.isArray(e)?e:e.split(\" \")).forEach(d=>{s.eventsAnyListeners&&s.eventsAnyListeners.length&&s.eventsAnyListeners.forEach(o=>{o.apply(i,[d,...t])}),s.eventsListeners&&s.eventsListeners[d]&&s.eventsListeners[d].forEach(o=>{o.apply(i,t)})}),s}};function ut(){let s=this,e,t,i=s.el;typeof s.params.width!=\"undefined\"&&s.params.width!==null?e=s.params.width:e=i.clientWidth,typeof s.params.height!=\"undefined\"&&s.params.height!==null?t=s.params.height:t=i.clientHeight,!(e===0&&s.isHorizontal()||t===0&&s.isVertical())&&(e=e-parseInt(W(i,\"padding-left\")||0,10)-parseInt(W(i,\"padding-right\")||0,10),t=t-parseInt(W(i,\"padding-top\")||0,10)-parseInt(W(i,\"padding-bottom\")||0,10),Number.isNaN(e)&&(e=0),Number.isNaN(t)&&(t=0),Object.assign(s,{width:e,height:t,size:s.isHorizontal()?e:t}))}function pt(){let s=this;function e(T,M){return parseFloat(T.getPropertyValue(s.getDirectionLabel(M))||0)}let t=s.params,{wrapperEl:i,slidesEl:a,size:r,rtlTranslate:l,wrongRTL:n}=s,d=s.virtual&&t.virtual.enabled,o=d?s.virtual.slides.length:s.slides.length,u=R(a,`.${s.params.slideClass}, swiper-slide`),p=d?s.virtual.slides.length:u.length,g=[],y=[],m=[],h=t.slidesOffsetBefore;typeof h==\"function\"&&(h=t.slidesOffsetBefore.call(s));let x=t.slidesOffsetAfter;typeof x==\"function\"&&(x=t.slidesOffsetAfter.call(s));let b=s.snapGrid.length,c=s.slidesGrid.length,f=t.spaceBetween,v=-h,S=0,C=0;if(typeof r==\"undefined\")return;typeof f==\"string\"&&f.indexOf(\"%\")>=0?f=parseFloat(f.replace(\"%\",\"\"))\/100*r:typeof f==\"string\"&&(f=parseFloat(f)),s.virtualSize=-f,u.forEach(T=>{l?T.style.marginLeft=\"\":T.style.marginRight=\"\",T.style.marginBottom=\"\",T.style.marginTop=\"\"}),t.centeredSlides&&t.cssMode&&(ee(i,\"--swiper-centered-offset-before\",\"\"),ee(i,\"--swiper-centered-offset-after\",\"\"));let I=t.grid&&t.grid.rows>1&&s.grid;I?s.grid.initSlides(u):s.grid&&s.grid.unsetSlides();let P,L=t.slidesPerView===\"auto\"&&t.breakpoints&&Object.keys(t.breakpoints).filter(T=>typeof t.breakpoints[T].slidesPerView!=\"undefined\").length>0;for(let T=0;T<p;T+=1){P=0;let M;if(u[T]&&(M=u[T]),I&&s.grid.updateSlide(T,M,u),!(u[T]&&W(M,\"display\")===\"none\")){if(t.slidesPerView===\"auto\"){L&&(u[T].style[s.getDirectionLabel(\"width\")]=\"\");let A=getComputedStyle(M),O=M.style.transform,k=M.style.webkitTransform;if(O&&(M.style.transform=\"none\"),k&&(M.style.webkitTransform=\"none\"),t.roundLengths)P=s.isHorizontal()?ae(M,\"width\",!0):ae(M,\"height\",!0);else{let G=e(A,\"width\"),z=e(A,\"padding-left\"),w=e(A,\"padding-right\"),E=e(A,\"margin-left\"),$=e(A,\"margin-right\"),X=A.getPropertyValue(\"box-sizing\");if(X&&X===\"border-box\")P=G+E+$;else{let{clientWidth:q,offsetWidth:j}=M;P=G+z+w+E+$+(j-q)}}O&&(M.style.transform=O),k&&(M.style.webkitTransform=k),t.roundLengths&&(P=Math.floor(P))}else P=(r-(t.slidesPerView-1)*f)\/t.slidesPerView,t.roundLengths&&(P=Math.floor(P)),u[T]&&(u[T].style[s.getDirectionLabel(\"width\")]=`${P}px`);u[T]&&(u[T].swiperSlideSize=P),m.push(P),t.centeredSlides?(v=v+P\/2+S\/2+f,S===0&&T!==0&&(v=v-r\/2-f),T===0&&(v=v-r\/2-f),Math.abs(v)<1\/1e3&&(v=0),t.roundLengths&&(v=Math.floor(v)),C%t.slidesPerGroup===0&&g.push(v),y.push(v)):(t.roundLengths&&(v=Math.floor(v)),(C-Math.min(s.params.slidesPerGroupSkip,C))%s.params.slidesPerGroup===0&&g.push(v),y.push(v),v=v+P+f),s.virtualSize+=P+f,S=P,C+=1}}if(s.virtualSize=Math.max(s.virtualSize,r)+x,l&&n&&(t.effect===\"slide\"||t.effect===\"coverflow\")&&(i.style.width=`${s.virtualSize+f}px`),t.setWrapperSize&&(i.style[s.getDirectionLabel(\"width\")]=`${s.virtualSize+f}px`),I&&s.grid.updateWrapperSize(P,g),!t.centeredSlides){let T=[];for(let M=0;M<g.length;M+=1){let A=g[M];t.roundLengths&&(A=Math.floor(A)),g[M]<=s.virtualSize-r&&T.push(A)}g=T,Math.floor(s.virtualSize-r)-Math.floor(g[g.length-1])>1&&g.push(s.virtualSize-r)}if(d&&t.loop){let T=m[0]+f;if(t.slidesPerGroup>1){let M=Math.ceil((s.virtual.slidesBefore+s.virtual.slidesAfter)\/t.slidesPerGroup),A=T*t.slidesPerGroup;for(let O=0;O<M;O+=1)g.push(g[g.length-1]+A)}for(let M=0;M<s.virtual.slidesBefore+s.virtual.slidesAfter;M+=1)t.slidesPerGroup===1&&g.push(g[g.length-1]+T),y.push(y[y.length-1]+T),s.virtualSize+=T}if(g.length===0&&(g=[0]),f!==0){let T=s.isHorizontal()&&l?\"marginLeft\":s.getDirectionLabel(\"marginRight\");u.filter((M,A)=>!t.cssMode||t.loop?!0:A!==u.length-1).forEach(M=>{M.style[T]=`${f}px`})}if(t.centeredSlides&&t.centeredSlidesBounds){let T=0;m.forEach(A=>{T+=A+(f||0)}),T-=f;let M=T>r?T-r:0;g=g.map(A=>A<=0?-h:A>M?M+x:A)}if(t.centerInsufficientSlides){let T=0;m.forEach(A=>{T+=A+(f||0)}),T-=f;let M=(t.slidesOffsetBefore||0)+(t.slidesOffsetAfter||0);if(T+M<r){let A=(r-T-M)\/2;g.forEach((O,k)=>{g[k]=O-A}),y.forEach((O,k)=>{y[k]=O+A})}}if(Object.assign(s,{slides:u,snapGrid:g,slidesGrid:y,slidesSizesGrid:m}),t.centeredSlides&&t.cssMode&&!t.centeredSlidesBounds){ee(i,\"--swiper-centered-offset-before\",`${-g[0]}px`),ee(i,\"--swiper-centered-offset-after\",`${s.size\/2-m[m.length-1]\/2}px`);let T=-s.snapGrid[0],M=-s.slidesGrid[0];s.snapGrid=s.snapGrid.map(A=>A+T),s.slidesGrid=s.slidesGrid.map(A=>A+M)}if(p!==o&&s.emit(\"slidesLengthChange\"),g.length!==b&&(s.params.watchOverflow&&s.checkOverflow(),s.emit(\"snapGridLengthChange\")),y.length!==c&&s.emit(\"slidesGridLengthChange\"),t.watchSlidesProgress&&s.updateSlidesOffset(),s.emit(\"slidesUpdated\"),!d&&!t.cssMode&&(t.effect===\"slide\"||t.effect===\"fade\")){let T=`${t.containerModifierClass}backface-hidden`,M=s.el.classList.contains(T);p<=t.maxBackfaceHiddenSlides?M||s.el.classList.add(T):M&&s.el.classList.remove(T)}}function mt(s){let e=this,t=[],i=e.virtual&&e.params.virtual.enabled,a=0,r;typeof s==\"number\"?e.setTransition(s):s===!0&&e.setTransition(e.params.speed);let l=n=>i?e.slides[e.getSlideIndexByData(n)]:e.slides[n];if(e.params.slidesPerView!==\"auto\"&&e.params.slidesPerView>1)if(e.params.centeredSlides)(e.visibleSlides||[]).forEach(n=>{t.push(n)});else for(r=0;r<Math.ceil(e.params.slidesPerView);r+=1){let n=e.activeIndex+r;if(n>e.slides.length&&!i)break;t.push(l(n))}else t.push(l(e.activeIndex));for(r=0;r<t.length;r+=1)if(typeof t[r]!=\"undefined\"){let n=t[r].offsetHeight;a=n>a?n:a}(a||a===0)&&(e.wrapperEl.style.height=`${a}px`)}function ht(){let s=this,e=s.slides,t=s.isElement?s.isHorizontal()?s.wrapperEl.offsetLeft:s.wrapperEl.offsetTop:0;for(let i=0;i<e.length;i+=1)e[i].swiperSlideOffset=(s.isHorizontal()?e[i].offsetLeft:e[i].offsetTop)-t-s.cssOverflowAdjustment()}var Be=(s,e,t)=>{e&&!s.classList.contains(t)?s.classList.add(t):!e&&s.classList.contains(t)&&s.classList.remove(t)};function gt(s){s===void 0&&(s=this&&this.translate||0);let e=this,t=e.params,{slides:i,rtlTranslate:a,snapGrid:r}=e;if(i.length===0)return;typeof i[0].swiperSlideOffset==\"undefined\"&&e.updateSlidesOffset();let l=-s;a&&(l=s),e.visibleSlidesIndexes=[],e.visibleSlides=[];let n=t.spaceBetween;typeof n==\"string\"&&n.indexOf(\"%\")>=0?n=parseFloat(n.replace(\"%\",\"\"))\/100*e.size:typeof n==\"string\"&&(n=parseFloat(n));for(let d=0;d<i.length;d+=1){let o=i[d],u=o.swiperSlideOffset;t.cssMode&&t.centeredSlides&&(u-=i[0].swiperSlideOffset);let p=(l+(t.centeredSlides?e.minTranslate():0)-u)\/(o.swiperSlideSize+n),g=(l-r[0]+(t.centeredSlides?e.minTranslate():0)-u)\/(o.swiperSlideSize+n),y=-(l-u),m=y+e.slidesSizesGrid[d],h=y>=0&&y<=e.size-e.slidesSizesGrid[d],x=y>=0&&y<e.size-1||m>1&&m<=e.size||y<=0&&m>=e.size;x&&(e.visibleSlides.push(o),e.visibleSlidesIndexes.push(d)),Be(o,x,t.slideVisibleClass),Be(o,h,t.slideFullyVisibleClass),o.progress=a?-p:p,o.originalProgress=a?-g:g}}function vt(s){let e=this;if(typeof s==\"undefined\"){let u=e.rtlTranslate?-1:1;s=e&&e.translate&&e.translate*u||0}let t=e.params,i=e.maxTranslate()-e.minTranslate(),{progress:a,isBeginning:r,isEnd:l,progressLoop:n}=e,d=r,o=l;if(i===0)a=0,r=!0,l=!0;else{a=(s-e.minTranslate())\/i;let u=Math.abs(s-e.minTranslate())<1,p=Math.abs(s-e.maxTranslate())<1;r=u||a<=0,l=p||a>=1,u&&(a=0),p&&(a=1)}if(t.loop){let u=e.getSlideIndexByData(0),p=e.getSlideIndexByData(e.slides.length-1),g=e.slidesGrid[u],y=e.slidesGrid[p],m=e.slidesGrid[e.slidesGrid.length-1],h=Math.abs(s);h>=g?n=(h-g)\/m:n=(h+m-y)\/m,n>1&&(n-=1)}Object.assign(e,{progress:a,progressLoop:n,isBeginning:r,isEnd:l}),(t.watchSlidesProgress||t.centeredSlides&&t.autoHeight)&&e.updateSlidesProgress(s),r&&!d&&e.emit(\"reachBeginning toEdge\"),l&&!o&&e.emit(\"reachEnd toEdge\"),(d&&!r||o&&!l)&&e.emit(\"fromEdge\"),e.emit(\"progress\",a)}var ye=(s,e,t)=>{e&&!s.classList.contains(t)?s.classList.add(t):!e&&s.classList.contains(t)&&s.classList.remove(t)};function wt(){let s=this,{slides:e,params:t,slidesEl:i,activeIndex:a}=s,r=s.virtual&&t.virtual.enabled,l=s.grid&&t.grid&&t.grid.rows>1,n=p=>R(i,`.${t.slideClass}${p}, swiper-slide${p}`)[0],d,o,u;if(r)if(t.loop){let p=a-s.virtual.slidesBefore;p<0&&(p=s.virtual.slides.length+p),p>=s.virtual.slides.length&&(p-=s.virtual.slides.length),d=n(`[data-swiper-slide-index=\"${p}\"]`)}else d=n(`[data-swiper-slide-index=\"${a}\"]`);else l?(d=e.find(p=>p.column===a),u=e.find(p=>p.column===a+1),o=e.find(p=>p.column===a-1)):d=e[a];d&&(l||(u=He(d,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!u&&(u=e[0]),o=Ge(d,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!o===0&&(o=e[e.length-1]))),e.forEach(p=>{ye(p,p===d,t.slideActiveClass),ye(p,p===u,t.slideNextClass),ye(p,p===o,t.slidePrevClass)}),s.emitSlidesClasses()}var fe=(s,e)=>{if(!s||s.destroyed||!s.params)return;let t=()=>s.isElement?\"swiper-slide\":`.${s.params.slideClass}`,i=e.closest(t());if(i){let a=i.querySelector(`.${s.params.lazyPreloaderClass}`);!a&&s.isElement&&(i.shadowRoot?a=i.shadowRoot.querySelector(`.${s.params.lazyPreloaderClass}`):requestAnimationFrame(()=>{i.shadowRoot&&(a=i.shadowRoot.querySelector(`.${s.params.lazyPreloaderClass}`),a&&a.remove())})),a&&a.remove()}},be=(s,e)=>{if(!s.slides[e])return;let t=s.slides[e].querySelector('[loading=\"lazy\"]');t&&t.removeAttribute(\"loading\")},Ee=s=>{if(!s||s.destroyed||!s.params)return;let e=s.params.lazyPreloadPrevNext,t=s.slides.length;if(!t||!e||e<0)return;e=Math.min(e,t);let i=s.params.slidesPerView===\"auto\"?s.slidesPerViewDynamic():Math.ceil(s.params.slidesPerView),a=s.activeIndex;if(s.params.grid&&s.params.grid.rows>1){let l=a,n=[l-e];n.push(...Array.from({length:e}).map((d,o)=>l+i+o)),s.slides.forEach((d,o)=>{n.includes(d.column)&&be(s,o)});return}let r=a+i-1;if(s.params.rewind||s.params.loop)for(let l=a-e;l<=r+e;l+=1){let n=(l%t+t)%t;(n<a||n>r)&&be(s,n)}else for(let l=Math.max(a-e,0);l<=Math.min(r+e,t-1);l+=1)l!==a&&(l>r||l<a)&&be(s,l)};function yt(s){let{slidesGrid:e,params:t}=s,i=s.rtlTranslate?s.translate:-s.translate,a;for(let r=0;r<e.length;r+=1)typeof e[r+1]!=\"undefined\"?i>=e[r]&&i<e[r+1]-(e[r+1]-e[r])\/2?a=r:i>=e[r]&&i<e[r+1]&&(a=r+1):i>=e[r]&&(a=r);return t.normalizeSlideIndex&&(a<0||typeof a==\"undefined\")&&(a=0),a}function bt(s){let e=this,t=e.rtlTranslate?e.translate:-e.translate,{snapGrid:i,params:a,activeIndex:r,realIndex:l,snapIndex:n}=e,d=s,o,u=y=>{let m=y-e.virtual.slidesBefore;return m<0&&(m=e.virtual.slides.length+m),m>=e.virtual.slides.length&&(m-=e.virtual.slides.length),m};if(typeof d==\"undefined\"&&(d=yt(e)),i.indexOf(t)>=0)o=i.indexOf(t);else{let y=Math.min(a.slidesPerGroupSkip,d);o=y+Math.floor((d-y)\/a.slidesPerGroup)}if(o>=i.length&&(o=i.length-1),d===r&&!e.params.loop){o!==n&&(e.snapIndex=o,e.emit(\"snapIndexChange\"));return}if(d===r&&e.params.loop&&e.virtual&&e.params.virtual.enabled){e.realIndex=u(d);return}let p=e.grid&&a.grid&&a.grid.rows>1,g;if(e.virtual&&a.virtual.enabled&&a.loop)g=u(d);else if(p){let y=e.slides.find(h=>h.column===d),m=parseInt(y.getAttribute(\"data-swiper-slide-index\"),10);Number.isNaN(m)&&(m=Math.max(e.slides.indexOf(y),0)),g=Math.floor(m\/a.grid.rows)}else if(e.slides[d]){let y=e.slides[d].getAttribute(\"data-swiper-slide-index\");y?g=parseInt(y,10):g=d}else g=d;Object.assign(e,{previousSnapIndex:n,snapIndex:o,previousRealIndex:l,realIndex:g,previousIndex:r,activeIndex:d}),e.initialized&&Ee(e),e.emit(\"activeIndexChange\"),e.emit(\"snapIndexChange\"),(e.initialized||e.params.runCallbacksOnInit)&&(l!==g&&e.emit(\"realIndexChange\"),e.emit(\"slideChange\"))}function St(s,e){let t=this,i=t.params,a=s.closest(`.${i.slideClass}, swiper-slide`);!a&&t.isElement&&e&&e.length>1&&e.includes(s)&&[...e.slice(e.indexOf(s)+1,e.length)].forEach(n=>{!a&&n.matches&&n.matches(`.${i.slideClass}, swiper-slide`)&&(a=n)});let r=!1,l;if(a){for(let n=0;n<t.slides.length;n+=1)if(t.slides[n]===a){r=!0,l=n;break}}if(a&&r)t.clickedSlide=a,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(a.getAttribute(\"data-swiper-slide-index\"),10):t.clickedIndex=l;else{t.clickedSlide=void 0,t.clickedIndex=void 0;return}i.slideToClickedSlide&&t.clickedIndex!==void 0&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}var xt={updateSize:ut,updateSlides:pt,updateAutoHeight:mt,updateSlidesOffset:ht,updateSlidesProgress:gt,updateProgress:vt,updateSlidesClasses:wt,updateActiveIndex:bt,updateClickedSlide:St};function Et(s){s===void 0&&(s=this.isHorizontal()?\"x\":\"y\");let e=this,{params:t,rtlTranslate:i,translate:a,wrapperEl:r}=e;if(t.virtualTranslate)return i?-a:a;if(t.cssMode)return a;let l=me(r,s);return l+=e.cssOverflowAdjustment(),i&&(l=-l),l||0}function Tt(s,e){let t=this,{rtlTranslate:i,params:a,wrapperEl:r,progress:l}=t,n=0,d=0,o=0;t.isHorizontal()?n=i?-s:s:d=s,a.roundLengths&&(n=Math.floor(n),d=Math.floor(d)),t.previousTranslate=t.translate,t.translate=t.isHorizontal()?n:d,a.cssMode?r[t.isHorizontal()?\"scrollLeft\":\"scrollTop\"]=t.isHorizontal()?-n:-d:a.virtualTranslate||(t.isHorizontal()?n-=t.cssOverflowAdjustment():d-=t.cssOverflowAdjustment(),r.style.transform=`translate3d(${n}px, ${d}px, ${o}px)`);let u,p=t.maxTranslate()-t.minTranslate();p===0?u=0:u=(s-t.minTranslate())\/p,u!==l&&t.updateProgress(s),t.emit(\"setTranslate\",t.translate,e)}function Mt(){return-this.snapGrid[0]}function Ct(){return-this.snapGrid[this.snapGrid.length-1]}function Pt(s,e,t,i,a){s===void 0&&(s=0),e===void 0&&(e=this.params.speed),t===void 0&&(t=!0),i===void 0&&(i=!0);let r=this,{params:l,wrapperEl:n}=r;if(r.animating&&l.preventInteractionOnTransition)return!1;let d=r.minTranslate(),o=r.maxTranslate(),u;if(i&&s>d?u=d:i&&s<o?u=o:u=s,r.updateProgress(u),l.cssMode){let p=r.isHorizontal();if(e===0)n[p?\"scrollLeft\":\"scrollTop\"]=-u;else{if(!r.support.smoothScroll)return he({swiper:r,targetPosition:-u,side:p?\"left\":\"top\"}),!0;n.scrollTo({[p?\"left\":\"top\"]:-u,behavior:\"smooth\"})}return!0}return e===0?(r.setTransition(0),r.setTranslate(u),t&&(r.emit(\"beforeTransitionStart\",e,a),r.emit(\"transitionEnd\"))):(r.setTransition(e),r.setTranslate(u),t&&(r.emit(\"beforeTransitionStart\",e,a),r.emit(\"transitionStart\")),r.animating||(r.animating=!0,r.onTranslateToWrapperTransitionEnd||(r.onTranslateToWrapperTransitionEnd=function(g){!r||r.destroyed||g.target===this&&(r.wrapperEl.removeEventListener(\"transitionend\",r.onTranslateToWrapperTransitionEnd),r.onTranslateToWrapperTransitionEnd=null,delete r.onTranslateToWrapperTransitionEnd,r.animating=!1,t&&r.emit(\"transitionEnd\"))}),r.wrapperEl.addEventListener(\"transitionend\",r.onTranslateToWrapperTransitionEnd))),!0}var Lt={getTranslate:Et,setTranslate:Tt,minTranslate:Mt,maxTranslate:Ct,translateTo:Pt};function It(s,e){let t=this;t.params.cssMode||(t.wrapperEl.style.transitionDuration=`${s}ms`,t.wrapperEl.style.transitionDelay=s===0?\"0ms\":\"\"),t.emit(\"setTransition\",s,e)}function _e(s){let{swiper:e,runCallbacks:t,direction:i,step:a}=s,{activeIndex:r,previousIndex:l}=e,n=i;n||(r>l?n=\"next\":r<l?n=\"prev\":n=\"reset\"),e.emit(`transition${a}`),t&&n===\"reset\"?e.emit(`slideResetTransition${a}`):t&&r!==l&&(e.emit(`slideChangeTransition${a}`),n===\"next\"?e.emit(`slideNextTransition${a}`):e.emit(`slidePrevTransition${a}`))}function At(s,e){s===void 0&&(s=!0);let t=this,{params:i}=t;i.cssMode||(i.autoHeight&&t.updateAutoHeight(),_e({swiper:t,runCallbacks:s,direction:e,step:\"Start\"}))}function zt(s,e){s===void 0&&(s=!0);let t=this,{params:i}=t;t.animating=!1,!i.cssMode&&(t.setTransition(0),_e({swiper:t,runCallbacks:s,direction:e,step:\"End\"}))}var Ot={setTransition:It,transitionStart:At,transitionEnd:zt};function Dt(s,e,t,i,a){s===void 0&&(s=0),t===void 0&&(t=!0),typeof s==\"string\"&&(s=parseInt(s,10));let r=this,l=s;l<0&&(l=0);let{params:n,snapGrid:d,slidesGrid:o,previousIndex:u,activeIndex:p,rtlTranslate:g,wrapperEl:y,enabled:m}=r;if(!m&&!i&&!a||r.destroyed||r.animating&&n.preventInteractionOnTransition)return!1;typeof e==\"undefined\"&&(e=r.params.speed);let h=Math.min(r.params.slidesPerGroupSkip,l),x=h+Math.floor((l-h)\/r.params.slidesPerGroup);x>=d.length&&(x=d.length-1);let b=-d[x];if(n.normalizeSlideIndex)for(let I=0;I<o.length;I+=1){let P=-Math.floor(b*100),L=Math.floor(o[I]*100),T=Math.floor(o[I+1]*100);typeof o[I+1]!=\"undefined\"?P>=L&&P<T-(T-L)\/2?l=I:P>=L&&P<T&&(l=I+1):P>=L&&(l=I)}if(r.initialized&&l!==p&&(!r.allowSlideNext&&(g?b>r.translate&&b>r.minTranslate():b<r.translate&&b<r.minTranslate())||!r.allowSlidePrev&&b>r.translate&&b>r.maxTranslate()&&(p||0)!==l))return!1;l!==(u||0)&&t&&r.emit(\"beforeSlideChangeStart\"),r.updateProgress(b);let c;l>p?c=\"next\":l<p?c=\"prev\":c=\"reset\";let f=r.virtual&&r.params.virtual.enabled;if(!(f&&a)&&(g&&-b===r.translate||!g&&b===r.translate))return r.updateActiveIndex(l),n.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),n.effect!==\"slide\"&&r.setTranslate(b),c!==\"reset\"&&(r.transitionStart(t,c),r.transitionEnd(t,c)),!1;if(n.cssMode){let I=r.isHorizontal(),P=g?b:-b;if(e===0)f&&(r.wrapperEl.style.scrollSnapType=\"none\",r._immediateVirtual=!0),f&&!r._cssModeVirtualInitialSet&&r.params.initialSlide>0?(r._cssModeVirtualInitialSet=!0,requestAnimationFrame(()=>{y[I?\"scrollLeft\":\"scrollTop\"]=P})):y[I?\"scrollLeft\":\"scrollTop\"]=P,f&&requestAnimationFrame(()=>{r.wrapperEl.style.scrollSnapType=\"\",r._immediateVirtual=!1});else{if(!r.support.smoothScroll)return he({swiper:r,targetPosition:P,side:I?\"left\":\"top\"}),!0;y.scrollTo({[I?\"left\":\"top\"]:P,behavior:\"smooth\"})}return!0}let C=We().isSafari;return f&&!a&&C&&r.isElement&&r.virtual.update(!1,!1,l),r.setTransition(e),r.setTranslate(b),r.updateActiveIndex(l),r.updateSlidesClasses(),r.emit(\"beforeTransitionStart\",e,i),r.transitionStart(t,c),e===0?r.transitionEnd(t,c):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(P){!r||r.destroyed||P.target===this&&(r.wrapperEl.removeEventListener(\"transitionend\",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(t,c))}),r.wrapperEl.addEventListener(\"transitionend\",r.onSlideToWrapperTransitionEnd)),!0}function $t(s,e,t,i){s===void 0&&(s=0),t===void 0&&(t=!0),typeof s==\"string\"&&(s=parseInt(s,10));let a=this;if(a.destroyed)return;typeof e==\"undefined\"&&(e=a.params.speed);let r=a.grid&&a.params.grid&&a.params.grid.rows>1,l=s;if(a.params.loop)if(a.virtual&&a.params.virtual.enabled)l=l+a.virtual.slidesBefore;else{let n;if(r){let g=l*a.params.grid.rows;n=a.slides.find(y=>y.getAttribute(\"data-swiper-slide-index\")*1===g).column}else n=a.getSlideIndexByData(l);let d=r?Math.ceil(a.slides.length\/a.params.grid.rows):a.slides.length,{centeredSlides:o}=a.params,u=a.params.slidesPerView;u===\"auto\"?u=a.slidesPerViewDynamic():(u=Math.ceil(parseFloat(a.params.slidesPerView,10)),o&&u%2===0&&(u=u+1));let p=d-n<u;if(o&&(p=p||n<Math.ceil(u\/2)),i&&o&&a.params.slidesPerView!==\"auto\"&&!r&&(p=!1),p){let g=o?n<a.activeIndex?\"prev\":\"next\":n-a.activeIndex-1<a.params.slidesPerView?\"next\":\"prev\";a.loopFix({direction:g,slideTo:!0,activeSlideIndex:g===\"next\"?n+1:n-d+1,slideRealIndex:g===\"next\"?a.realIndex:void 0})}if(r){let g=l*a.params.grid.rows;l=a.slides.find(y=>y.getAttribute(\"data-swiper-slide-index\")*1===g).column}else l=a.getSlideIndexByData(l)}return requestAnimationFrame(()=>{a.slideTo(l,e,t,i)}),a}function kt(s,e,t){e===void 0&&(e=!0);let i=this,{enabled:a,params:r,animating:l}=i;if(!a||i.destroyed)return i;typeof s==\"undefined\"&&(s=i.params.speed);let n=r.slidesPerGroup;r.slidesPerView===\"auto\"&&r.slidesPerGroup===1&&r.slidesPerGroupAuto&&(n=Math.max(i.slidesPerViewDynamic(\"current\",!0),1));let d=i.activeIndex<r.slidesPerGroupSkip?1:n,o=i.virtual&&r.virtual.enabled;if(r.loop){if(l&&!o&&r.loopPreventsSliding)return!1;if(i.loopFix({direction:\"next\"}),i._clientLeft=i.wrapperEl.clientLeft,i.activeIndex===i.slides.length-1&&r.cssMode)return requestAnimationFrame(()=>{i.slideTo(i.activeIndex+d,s,e,t)}),!0}return r.rewind&&i.isEnd?i.slideTo(0,s,e,t):i.slideTo(i.activeIndex+d,s,e,t)}function Gt(s,e,t){e===void 0&&(e=!0);let i=this,{params:a,snapGrid:r,slidesGrid:l,rtlTranslate:n,enabled:d,animating:o}=i;if(!d||i.destroyed)return i;typeof s==\"undefined\"&&(s=i.params.speed);let u=i.virtual&&a.virtual.enabled;if(a.loop){if(o&&!u&&a.loopPreventsSliding)return!1;i.loopFix({direction:\"prev\"}),i._clientLeft=i.wrapperEl.clientLeft}let p=n?i.translate:-i.translate;function g(c){return c<0?-Math.floor(Math.abs(c)):Math.floor(c)}let y=g(p),m=r.map(c=>g(c)),h=a.freeMode&&a.freeMode.enabled,x=r[m.indexOf(y)-1];if(typeof x==\"undefined\"&&(a.cssMode||h)){let c;r.forEach((f,v)=>{y>=f&&(c=v)}),typeof c!=\"undefined\"&&(x=h?r[c]:r[c>0?c-1:c])}let b=0;if(typeof x!=\"undefined\"&&(b=l.indexOf(x),b<0&&(b=i.activeIndex-1),a.slidesPerView===\"auto\"&&a.slidesPerGroup===1&&a.slidesPerGroupAuto&&(b=b-i.slidesPerViewDynamic(\"previous\",!0)+1,b=Math.max(b,0))),a.rewind&&i.isBeginning){let c=i.params.virtual&&i.params.virtual.enabled&&i.virtual?i.virtual.slides.length-1:i.slides.length-1;return i.slideTo(c,s,e,t)}else if(a.loop&&i.activeIndex===0&&a.cssMode)return requestAnimationFrame(()=>{i.slideTo(b,s,e,t)}),!0;return i.slideTo(b,s,e,t)}function Ht(s,e,t){e===void 0&&(e=!0);let i=this;if(!i.destroyed)return typeof s==\"undefined\"&&(s=i.params.speed),i.slideTo(i.activeIndex,s,e,t)}function Bt(s,e,t,i){e===void 0&&(e=!0),i===void 0&&(i=.5);let a=this;if(a.destroyed)return;typeof s==\"undefined\"&&(s=a.params.speed);let r=a.activeIndex,l=Math.min(a.params.slidesPerGroupSkip,r),n=l+Math.floor((r-l)\/a.params.slidesPerGroup),d=a.rtlTranslate?a.translate:-a.translate;if(d>=a.snapGrid[n]){let o=a.snapGrid[n],u=a.snapGrid[n+1];d-o>(u-o)*i&&(r+=a.params.slidesPerGroup)}else{let o=a.snapGrid[n-1],u=a.snapGrid[n];d-o<=(u-o)*i&&(r-=a.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,a.slidesGrid.length-1),a.slideTo(r,s,e,t)}function Xt(){let s=this;if(s.destroyed)return;let{params:e,slidesEl:t}=s,i=e.slidesPerView===\"auto\"?s.slidesPerViewDynamic():e.slidesPerView,a=s.getSlideIndexWhenGrid(s.clickedIndex),r,l=s.isElement?\"swiper-slide\":`.${e.slideClass}`,n=s.grid&&s.params.grid&&s.params.grid.rows>1;if(e.loop){if(s.animating)return;r=parseInt(s.clickedSlide.getAttribute(\"data-swiper-slide-index\"),10),e.centeredSlides?s.slideToLoop(r):a>(n?(s.slides.length-i)\/2-(s.params.grid.rows-1):s.slides.length-i)?(s.loopFix(),a=s.getSlideIndex(R(t,`${l}[data-swiper-slide-index=\"${r}\"]`)[0]),J(()=>{s.slideTo(a)})):s.slideTo(a)}else s.slideTo(a)}var Rt={slideTo:Dt,slideToLoop:$t,slideNext:kt,slidePrev:Gt,slideReset:Ht,slideToClosest:Bt,slideToClickedSlide:Xt};function Yt(s,e){let t=this,{params:i,slidesEl:a}=t;if(!i.loop||t.virtual&&t.params.virtual.enabled)return;let r=()=>{R(a,`.${i.slideClass}, swiper-slide`).forEach((y,m)=>{y.setAttribute(\"data-swiper-slide-index\",m)})},l=()=>{let g=R(a,`.${i.slideBlankClass}`);g.forEach(y=>{y.remove()}),g.length>0&&(t.recalcSlides(),t.updateSlides())},n=t.grid&&i.grid&&i.grid.rows>1;i.loopAddBlankSlides&&(i.slidesPerGroup>1||n)&&l();let d=i.slidesPerGroup*(n?i.grid.rows:1),o=t.slides.length%d!==0,u=n&&t.slides.length%i.grid.rows!==0,p=g=>{for(let y=0;y<g;y+=1){let m=t.isElement?V(\"swiper-slide\",[i.slideBlankClass]):V(\"div\",[i.slideClass,i.slideBlankClass]);t.slidesEl.append(m)}};if(o){if(i.loopAddBlankSlides){let g=d-t.slides.length%d;p(g),t.recalcSlides(),t.updateSlides()}else re(\"Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)\");r()}else if(u){if(i.loopAddBlankSlides){let g=i.grid.rows-t.slides.length%i.grid.rows;p(g),t.recalcSlides(),t.updateSlides()}else re(\"Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)\");r()}else r();t.loopFix({slideRealIndex:s,direction:i.centeredSlides?void 0:\"next\",initial:e})}function Vt(s){let{slideRealIndex:e,slideTo:t=!0,direction:i,setTranslate:a,activeSlideIndex:r,initial:l,byController:n,byMousewheel:d}=s===void 0?{}:s,o=this;if(!o.params.loop)return;o.emit(\"beforeLoopFix\");let{slides:u,allowSlidePrev:p,allowSlideNext:g,slidesEl:y,params:m}=o,{centeredSlides:h,initialSlide:x}=m;if(o.allowSlidePrev=!0,o.allowSlideNext=!0,o.virtual&&m.virtual.enabled){t&&(!m.centeredSlides&&o.snapIndex===0?o.slideTo(o.virtual.slides.length,0,!1,!0):m.centeredSlides&&o.snapIndex<m.slidesPerView?o.slideTo(o.virtual.slides.length+o.snapIndex,0,!1,!0):o.snapIndex===o.snapGrid.length-1&&o.slideTo(o.virtual.slidesBefore,0,!1,!0)),o.allowSlidePrev=p,o.allowSlideNext=g,o.emit(\"loopFix\");return}let b=m.slidesPerView;b===\"auto\"?b=o.slidesPerViewDynamic():(b=Math.ceil(parseFloat(m.slidesPerView,10)),h&&b%2===0&&(b=b+1));let c=m.slidesPerGroupAuto?b:m.slidesPerGroup,f=h?Math.max(c,Math.ceil(b\/2)):c;f%c!==0&&(f+=c-f%c),f+=m.loopAdditionalSlides,o.loopedSlides=f;let v=o.grid&&m.grid&&m.grid.rows>1;u.length<b+f||o.params.effect===\"cards\"&&u.length<b+f*2?re(\"Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters\"):v&&m.grid.fill===\"row\"&&re(\"Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`\");let S=[],C=[],I=v?Math.ceil(u.length\/m.grid.rows):u.length,P=l&&I-x<b&&!h,L=P?x:o.activeIndex;typeof r==\"undefined\"?r=o.getSlideIndex(u.find(z=>z.classList.contains(m.slideActiveClass))):L=r;let T=i===\"next\"||!i,M=i===\"prev\"||!i,A=0,O=0,G=(v?u[r].column:r)+(h&&typeof a==\"undefined\"?-b\/2+.5:0);if(G<f){A=Math.max(f-G,c);for(let z=0;z<f-G;z+=1){let w=z-Math.floor(z\/I)*I;if(v){let E=I-w-1;for(let $=u.length-1;$>=0;$-=1)u[$].column===E&&S.push($)}else S.push(I-w-1)}}else if(G+b>I-f){O=Math.max(G-(I-f*2),c),P&&(O=Math.max(O,b-I+x+1));for(let z=0;z<O;z+=1){let w=z-Math.floor(z\/I)*I;v?u.forEach((E,$)=>{E.column===w&&C.push($)}):C.push(w)}}if(o.__preventObserver__=!0,requestAnimationFrame(()=>{o.__preventObserver__=!1}),o.params.effect===\"cards\"&&u.length<b+f*2&&(C.includes(r)&&C.splice(C.indexOf(r),1),S.includes(r)&&S.splice(S.indexOf(r),1)),M&&S.forEach(z=>{u[z].swiperLoopMoveDOM=!0,y.prepend(u[z]),u[z].swiperLoopMoveDOM=!1}),T&&C.forEach(z=>{u[z].swiperLoopMoveDOM=!0,y.append(u[z]),u[z].swiperLoopMoveDOM=!1}),o.recalcSlides(),m.slidesPerView===\"auto\"?o.updateSlides():v&&(S.length>0&&M||C.length>0&&T)&&o.slides.forEach((z,w)=>{o.grid.updateSlide(w,z,o.slides)}),m.watchSlidesProgress&&o.updateSlidesOffset(),t){if(S.length>0&&M){if(typeof e==\"undefined\"){let z=o.slidesGrid[L],E=o.slidesGrid[L+A]-z;d?o.setTranslate(o.translate-E):(o.slideTo(L+Math.ceil(A),0,!1,!0),a&&(o.touchEventsData.startTranslate=o.touchEventsData.startTranslate-E,o.touchEventsData.currentTranslate=o.touchEventsData.currentTranslate-E))}else if(a){let z=v?S.length\/m.grid.rows:S.length;o.slideTo(o.activeIndex+z,0,!1,!0),o.touchEventsData.currentTranslate=o.translate}}else if(C.length>0&&T)if(typeof e==\"undefined\"){let z=o.slidesGrid[L],E=o.slidesGrid[L-O]-z;d?o.setTranslate(o.translate-E):(o.slideTo(L-O,0,!1,!0),a&&(o.touchEventsData.startTranslate=o.touchEventsData.startTranslate-E,o.touchEventsData.currentTranslate=o.touchEventsData.currentTranslate-E))}else{let z=v?C.length\/m.grid.rows:C.length;o.slideTo(o.activeIndex-z,0,!1,!0)}}if(o.allowSlidePrev=p,o.allowSlideNext=g,o.controller&&o.controller.control&&!n){let z={slideRealIndex:e,direction:i,setTranslate:a,activeSlideIndex:r,byController:!0};Array.isArray(o.controller.control)?o.controller.control.forEach(w=>{!w.destroyed&&w.params.loop&&w.loopFix({...z,slideTo:w.params.slidesPerView===m.slidesPerView?t:!1})}):o.controller.control instanceof o.constructor&&o.controller.control.params.loop&&o.controller.control.loopFix({...z,slideTo:o.controller.control.params.slidesPerView===m.slidesPerView?t:!1})}o.emit(\"loopFix\")}function Nt(){let s=this,{params:e,slidesEl:t}=s;if(!e.loop||!t||s.virtual&&s.params.virtual.enabled)return;s.recalcSlides();let i=[];s.slides.forEach(a=>{let r=typeof a.swiperSlideIndex==\"undefined\"?a.getAttribute(\"data-swiper-slide-index\")*1:a.swiperSlideIndex;i[r]=a}),s.slides.forEach(a=>{a.removeAttribute(\"data-swiper-slide-index\")}),i.forEach(a=>{t.append(a)}),s.recalcSlides(),s.slideTo(s.realIndex,0)}var Ft={loopCreate:Yt,loopFix:Vt,loopDestroy:Nt};function Wt(s){let e=this;if(!e.params.simulateTouch||e.params.watchOverflow&&e.isLocked||e.params.cssMode)return;let t=e.params.touchEventsTarget===\"container\"?e.el:e.wrapperEl;e.isElement&&(e.__preventObserver__=!0),t.style.cursor=\"move\",t.style.cursor=s?\"grabbing\":\"grab\",e.isElement&&requestAnimationFrame(()=>{e.__preventObserver__=!1})}function _t(){let s=this;s.params.watchOverflow&&s.isLocked||s.params.cssMode||(s.isElement&&(s.__preventObserver__=!0),s[s.params.touchEventsTarget===\"container\"?\"el\":\"wrapperEl\"].style.cursor=\"\",s.isElement&&requestAnimationFrame(()=>{s.__preventObserver__=!1}))}var qt={setGrabCursor:Wt,unsetGrabCursor:_t};function jt(s,e){e===void 0&&(e=this);function t(i){if(!i||i===B()||i===H())return null;i.assignedSlot&&(i=i.assignedSlot);let a=i.closest(s);return!a&&!i.getRootNode?null:a||t(i.getRootNode().host)}return t(e)}function Xe(s,e,t){let i=H(),{params:a}=s,r=a.edgeSwipeDetection,l=a.edgeSwipeThreshold;return r&&(t<=l||t>=i.innerWidth-l)?r===\"prevent\"?(e.preventDefault(),!0):!1:!0}function Ut(s){let e=this,t=B(),i=s;i.originalEvent&&(i=i.originalEvent);let a=e.touchEventsData;if(i.type===\"pointerdown\"){if(a.pointerId!==null&&a.pointerId!==i.pointerId)return;a.pointerId=i.pointerId}else i.type===\"touchstart\"&&i.targetTouches.length===1&&(a.touchId=i.targetTouches[0].identifier);if(i.type===\"touchstart\"){Xe(e,i,i.targetTouches[0].pageX);return}let{params:r,touches:l,enabled:n}=e;if(!n||!r.simulateTouch&&i.pointerType===\"mouse\"||e.animating&&r.preventInteractionOnTransition)return;!e.animating&&r.cssMode&&r.loop&&e.loopFix();let d=i.target;if(r.touchEventsTarget===\"wrapper\"&&!ke(d,e.wrapperEl)||\"which\"in i&&i.which===3||\"button\"in i&&i.button>0||a.isTouched&&a.isMoved)return;let o=!!r.noSwipingClass&&r.noSwipingClass!==\"\",u=i.composedPath?i.composedPath():i.path;o&&i.target&&i.target.shadowRoot&&u&&(d=u[0]);let p=r.noSwipingSelector?r.noSwipingSelector:`.${r.noSwipingClass}`,g=!!(i.target&&i.target.shadowRoot);if(r.noSwiping&&(g?jt(p,d):d.closest(p))){e.allowClick=!0;return}if(r.swipeHandler&&!d.closest(r.swipeHandler))return;l.currentX=i.pageX,l.currentY=i.pageY;let y=l.currentX,m=l.currentY;if(!Xe(e,i,y))return;Object.assign(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),l.startX=y,l.startY=m,a.touchStartTime=K(),e.allowClick=!0,e.updateSize(),e.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1);let h=!0;d.matches(a.focusableElements)&&(h=!1,d.nodeName===\"SELECT\"&&(a.isTouched=!1)),t.activeElement&&t.activeElement.matches(a.focusableElements)&&t.activeElement!==d&&(i.pointerType===\"mouse\"||i.pointerType!==\"mouse\"&&!d.matches(a.focusableElements))&&t.activeElement.blur();let x=h&&e.allowTouchMove&&r.touchStartPreventDefault;(r.touchStartForcePreventDefault||x)&&!d.isContentEditable&&i.preventDefault(),r.freeMode&&r.freeMode.enabled&&e.freeMode&&e.animating&&!r.cssMode&&e.freeMode.onTouchStart(),e.emit(\"touchStart\",i)}function Kt(s){let e=B(),t=this,i=t.touchEventsData,{params:a,touches:r,rtlTranslate:l,enabled:n}=t;if(!n||!a.simulateTouch&&s.pointerType===\"mouse\")return;let d=s;if(d.originalEvent&&(d=d.originalEvent),d.type===\"pointermove\"&&(i.touchId!==null||d.pointerId!==i.pointerId))return;let o;if(d.type===\"touchmove\"){if(o=[...d.changedTouches].find(C=>C.identifier===i.touchId),!o||o.identifier!==i.touchId)return}else o=d;if(!i.isTouched){i.startMoving&&i.isScrolling&&t.emit(\"touchMoveOpposite\",d);return}let u=o.pageX,p=o.pageY;if(d.preventedByNestedSwiper){r.startX=u,r.startY=p;return}if(!t.allowTouchMove){d.target.matches(i.focusableElements)||(t.allowClick=!1),i.isTouched&&(Object.assign(r,{startX:u,startY:p,currentX:u,currentY:p}),i.touchStartTime=K());return}if(a.touchReleaseOnEdges&&!a.loop)if(t.isVertical()){if(p<r.startY&&t.translate<=t.maxTranslate()||p>r.startY&&t.translate>=t.minTranslate()){i.isTouched=!1,i.isMoved=!1;return}}else{if(l&&(u>r.startX&&-t.translate<=t.maxTranslate()||u<r.startX&&-t.translate>=t.minTranslate()))return;if(!l&&(u<r.startX&&t.translate<=t.maxTranslate()||u>r.startX&&t.translate>=t.minTranslate()))return}if(e.activeElement&&e.activeElement.matches(i.focusableElements)&&e.activeElement!==d.target&&d.pointerType!==\"mouse\"&&e.activeElement.blur(),e.activeElement&&d.target===e.activeElement&&d.target.matches(i.focusableElements)){i.isMoved=!0,t.allowClick=!1;return}i.allowTouchCallbacks&&t.emit(\"touchMove\",d),r.previousX=r.currentX,r.previousY=r.currentY,r.currentX=u,r.currentY=p;let g=r.currentX-r.startX,y=r.currentY-r.startY;if(t.params.threshold&&Math.sqrt(g**2+y**2)<t.params.threshold)return;if(typeof i.isScrolling==\"undefined\"){let C;t.isHorizontal()&&r.currentY===r.startY||t.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:g*g+y*y>=25&&(C=Math.atan2(Math.abs(y),Math.abs(g))*180\/Math.PI,i.isScrolling=t.isHorizontal()?C>a.touchAngle:90-C>a.touchAngle)}if(i.isScrolling&&t.emit(\"touchMoveOpposite\",d),typeof i.startMoving==\"undefined\"&&(r.currentX!==r.startX||r.currentY!==r.startY)&&(i.startMoving=!0),i.isScrolling||d.type===\"touchmove\"&&i.preventTouchMoveFromPointerMove){i.isTouched=!1;return}if(!i.startMoving)return;t.allowClick=!1,!a.cssMode&&d.cancelable&&d.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&d.stopPropagation();let m=t.isHorizontal()?g:y,h=t.isHorizontal()?r.currentX-r.previousX:r.currentY-r.previousY;a.oneWayMovement&&(m=Math.abs(m)*(l?1:-1),h=Math.abs(h)*(l?1:-1)),r.diff=m,m*=a.touchRatio,l&&(m=-m,h=-h);let x=t.touchesDirection;t.swipeDirection=m>0?\"prev\":\"next\",t.touchesDirection=h>0?\"prev\":\"next\";let b=t.params.loop&&!a.cssMode,c=t.touchesDirection===\"next\"&&t.allowSlideNext||t.touchesDirection===\"prev\"&&t.allowSlidePrev;if(!i.isMoved){if(b&&c&&t.loopFix({direction:t.swipeDirection}),i.startTranslate=t.getTranslate(),t.setTransition(0),t.animating){let C=new window.CustomEvent(\"transitionend\",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});t.wrapperEl.dispatchEvent(C)}i.allowMomentumBounce=!1,a.grabCursor&&(t.allowSlideNext===!0||t.allowSlidePrev===!0)&&t.setGrabCursor(!0),t.emit(\"sliderFirstMove\",d)}let f;if(new Date().getTime(),a._loopSwapReset!==!1&&i.isMoved&&i.allowThresholdMove&&x!==t.touchesDirection&&b&&c&&Math.abs(m)>=1){Object.assign(r,{startX:u,startY:p,currentX:u,currentY:p,startTranslate:i.currentTranslate}),i.loopSwapReset=!0,i.startTranslate=i.currentTranslate;return}t.emit(\"sliderMove\",d),i.isMoved=!0,i.currentTranslate=m+i.startTranslate;let v=!0,S=a.resistanceRatio;if(a.touchReleaseOnEdges&&(S=0),m>0?(b&&c&&!f&&i.allowThresholdMove&&i.currentTranslate>(a.centeredSlides?t.minTranslate()-t.slidesSizesGrid[t.activeIndex+1]-(a.slidesPerView!==\"auto\"&&t.slides.length-a.slidesPerView>=2?t.slidesSizesGrid[t.activeIndex+1]+t.params.spaceBetween:0)-t.params.spaceBetween:t.minTranslate())&&t.loopFix({direction:\"prev\",setTranslate:!0,activeSlideIndex:0}),i.currentTranslate>t.minTranslate()&&(v=!1,a.resistance&&(i.currentTranslate=t.minTranslate()-1+(-t.minTranslate()+i.startTranslate+m)**S))):m<0&&(b&&c&&!f&&i.allowThresholdMove&&i.currentTranslate<(a.centeredSlides?t.maxTranslate()+t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween+(a.slidesPerView!==\"auto\"&&t.slides.length-a.slidesPerView>=2?t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween:0):t.maxTranslate())&&t.loopFix({direction:\"next\",setTranslate:!0,activeSlideIndex:t.slides.length-(a.slidesPerView===\"auto\"?t.slidesPerViewDynamic():Math.ceil(parseFloat(a.slidesPerView,10)))}),i.currentTranslate<t.maxTranslate()&&(v=!1,a.resistance&&(i.currentTranslate=t.maxTranslate()+1-(t.maxTranslate()-i.startTranslate-m)**S))),v&&(d.preventedByNestedSwiper=!0),!t.allowSlideNext&&t.swipeDirection===\"next\"&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!t.allowSlidePrev&&t.swipeDirection===\"prev\"&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),!t.allowSlidePrev&&!t.allowSlideNext&&(i.currentTranslate=i.startTranslate),a.threshold>0)if(Math.abs(m)>a.threshold||i.allowThresholdMove){if(!i.allowThresholdMove){i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,r.diff=t.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY;return}}else{i.currentTranslate=i.startTranslate;return}!a.followFinger||a.cssMode||((a.freeMode&&a.freeMode.enabled&&t.freeMode||a.watchSlidesProgress)&&(t.updateActiveIndex(),t.updateSlidesClasses()),a.freeMode&&a.freeMode.enabled&&t.freeMode&&t.freeMode.onTouchMove(),t.updateProgress(i.currentTranslate),t.setTranslate(i.currentTranslate))}function Zt(s){let e=this,t=e.touchEventsData,i=s;i.originalEvent&&(i=i.originalEvent);let a;if(i.type===\"touchend\"||i.type===\"touchcancel\"){if(a=[...i.changedTouches].find(S=>S.identifier===t.touchId),!a||a.identifier!==t.touchId)return}else{if(t.touchId!==null||i.pointerId!==t.pointerId)return;a=i}if([\"pointercancel\",\"pointerout\",\"pointerleave\",\"contextmenu\"].includes(i.type)&&!([\"pointercancel\",\"contextmenu\"].includes(i.type)&&(e.browser.isSafari||e.browser.isWebView)))return;t.pointerId=null,t.touchId=null;let{params:l,touches:n,rtlTranslate:d,slidesGrid:o,enabled:u}=e;if(!u||!l.simulateTouch&&i.pointerType===\"mouse\")return;if(t.allowTouchCallbacks&&e.emit(\"touchEnd\",i),t.allowTouchCallbacks=!1,!t.isTouched){t.isMoved&&l.grabCursor&&e.setGrabCursor(!1),t.isMoved=!1,t.startMoving=!1;return}l.grabCursor&&t.isMoved&&t.isTouched&&(e.allowSlideNext===!0||e.allowSlidePrev===!0)&&e.setGrabCursor(!1);let p=K(),g=p-t.touchStartTime;if(e.allowClick){let S=i.path||i.composedPath&&i.composedPath();e.updateClickedSlide(S&&S[0]||i.target,S),e.emit(\"tap click\",i),g<300&&p-t.lastClickTime<300&&e.emit(\"doubleTap doubleClick\",i)}if(t.lastClickTime=K(),J(()=>{e.destroyed||(e.allowClick=!0)}),!t.isTouched||!t.isMoved||!e.swipeDirection||n.diff===0&&!t.loopSwapReset||t.currentTranslate===t.startTranslate&&!t.loopSwapReset){t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;return}t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;let y;if(l.followFinger?y=d?e.translate:-e.translate:y=-t.currentTranslate,l.cssMode)return;if(l.freeMode&&l.freeMode.enabled){e.freeMode.onTouchEnd({currentPos:y});return}let m=y>=-e.maxTranslate()&&!e.params.loop,h=0,x=e.slidesSizesGrid[0];for(let S=0;S<o.length;S+=S<l.slidesPerGroupSkip?1:l.slidesPerGroup){let C=S<l.slidesPerGroupSkip-1?1:l.slidesPerGroup;typeof o[S+C]!=\"undefined\"?(m||y>=o[S]&&y<o[S+C])&&(h=S,x=o[S+C]-o[S]):(m||y>=o[S])&&(h=S,x=o[o.length-1]-o[o.length-2])}let b=null,c=null;l.rewind&&(e.isBeginning?c=l.virtual&&l.virtual.enabled&&e.virtual?e.virtual.slides.length-1:e.slides.length-1:e.isEnd&&(b=0));let f=(y-o[h])\/x,v=h<l.slidesPerGroupSkip-1?1:l.slidesPerGroup;if(g>l.longSwipesMs){if(!l.longSwipes){e.slideTo(e.activeIndex);return}e.swipeDirection===\"next\"&&(f>=l.longSwipesRatio?e.slideTo(l.rewind&&e.isEnd?b:h+v):e.slideTo(h)),e.swipeDirection===\"prev\"&&(f>1-l.longSwipesRatio?e.slideTo(h+v):c!==null&&f<0&&Math.abs(f)>l.longSwipesRatio?e.slideTo(c):e.slideTo(h))}else{if(!l.shortSwipes){e.slideTo(e.activeIndex);return}e.navigation&&(i.target===e.navigation.nextEl||i.target===e.navigation.prevEl)?i.target===e.navigation.nextEl?e.slideTo(h+v):e.slideTo(h):(e.swipeDirection===\"next\"&&e.slideTo(b!==null?b:h+v),e.swipeDirection===\"prev\"&&e.slideTo(c!==null?c:h))}}function Re(){let s=this,{params:e,el:t}=s;if(t&&t.offsetWidth===0)return;e.breakpoints&&s.setBreakpoint();let{allowSlideNext:i,allowSlidePrev:a,snapGrid:r}=s,l=s.virtual&&s.params.virtual.enabled;s.allowSlideNext=!0,s.allowSlidePrev=!0,s.updateSize(),s.updateSlides(),s.updateSlidesClasses();let n=l&&e.loop;(e.slidesPerView===\"auto\"||e.slidesPerView>1)&&s.isEnd&&!s.isBeginning&&!s.params.centeredSlides&&!n?s.slideTo(s.slides.length-1,0,!1,!0):s.params.loop&&!l?s.slideToLoop(s.realIndex,0,!1,!0):s.slideTo(s.activeIndex,0,!1,!0),s.autoplay&&s.autoplay.running&&s.autoplay.paused&&(clearTimeout(s.autoplay.resizeTimeout),s.autoplay.resizeTimeout=setTimeout(()=>{s.autoplay&&s.autoplay.running&&s.autoplay.paused&&s.autoplay.resume()},500)),s.allowSlidePrev=a,s.allowSlideNext=i,s.params.watchOverflow&&r!==s.snapGrid&&s.checkOverflow()}function Qt(s){let e=this;e.enabled&&(e.allowClick||(e.params.preventClicks&&s.preventDefault(),e.params.preventClicksPropagation&&e.animating&&(s.stopPropagation(),s.stopImmediatePropagation())))}function Jt(){let s=this,{wrapperEl:e,rtlTranslate:t,enabled:i}=s;if(!i)return;s.previousTranslate=s.translate,s.isHorizontal()?s.translate=-e.scrollLeft:s.translate=-e.scrollTop,s.translate===0&&(s.translate=0),s.updateActiveIndex(),s.updateSlidesClasses();let a,r=s.maxTranslate()-s.minTranslate();r===0?a=0:a=(s.translate-s.minTranslate())\/r,a!==s.progress&&s.updateProgress(t?-s.translate:s.translate),s.emit(\"setTranslate\",s.translate,!1)}function es(s){let e=this;fe(e,s.target),!(e.params.cssMode||e.params.slidesPerView!==\"auto\"&&!e.params.autoHeight)&&e.update()}function ts(){let s=this;s.documentTouchHandlerProceeded||(s.documentTouchHandlerProceeded=!0,s.params.touchReleaseOnEdges&&(s.el.style.touchAction=\"auto\"))}var qe=(s,e)=>{let t=B(),{params:i,el:a,wrapperEl:r,device:l}=s,n=!!i.nested,d=e===\"on\"?\"addEventListener\":\"removeEventListener\",o=e;!a||typeof a==\"string\"||(t[d](\"touchstart\",s.onDocumentTouchStart,{passive:!1,capture:n}),a[d](\"touchstart\",s.onTouchStart,{passive:!1}),a[d](\"pointerdown\",s.onTouchStart,{passive:!1}),t[d](\"touchmove\",s.onTouchMove,{passive:!1,capture:n}),t[d](\"pointermove\",s.onTouchMove,{passive:!1,capture:n}),t[d](\"touchend\",s.onTouchEnd,{passive:!0}),t[d](\"pointerup\",s.onTouchEnd,{passive:!0}),t[d](\"pointercancel\",s.onTouchEnd,{passive:!0}),t[d](\"touchcancel\",s.onTouchEnd,{passive:!0}),t[d](\"pointerout\",s.onTouchEnd,{passive:!0}),t[d](\"pointerleave\",s.onTouchEnd,{passive:!0}),t[d](\"contextmenu\",s.onTouchEnd,{passive:!0}),(i.preventClicks||i.preventClicksPropagation)&&a[d](\"click\",s.onClick,!0),i.cssMode&&r[d](\"scroll\",s.onScroll),i.updateOnWindowResize?s[o](l.ios||l.android?\"resize orientationchange observerUpdate\":\"resize observerUpdate\",Re,!0):s[o](\"observerUpdate\",Re,!0),a[d](\"load\",s.onLoad,{capture:!0}))};function ss(){let s=this,{params:e}=s;s.onTouchStart=Ut.bind(s),s.onTouchMove=Kt.bind(s),s.onTouchEnd=Zt.bind(s),s.onDocumentTouchStart=ts.bind(s),e.cssMode&&(s.onScroll=Jt.bind(s)),s.onClick=Qt.bind(s),s.onLoad=es.bind(s),qe(s,\"on\")}function is(){qe(this,\"off\")}var rs={attachEvents:ss,detachEvents:is},Ye=(s,e)=>s.grid&&e.grid&&e.grid.rows>1;function as(){let s=this,{realIndex:e,initialized:t,params:i,el:a}=s,r=i.breakpoints;if(!r||r&&Object.keys(r).length===0)return;let l=B(),n=i.breakpointsBase===\"window\"||!i.breakpointsBase?i.breakpointsBase:\"container\",d=[\"window\",\"container\"].includes(i.breakpointsBase)||!i.breakpointsBase?s.el:l.querySelector(i.breakpointsBase),o=s.getBreakpoint(r,n,d);if(!o||s.currentBreakpoint===o)return;let p=(o in r?r[o]:void 0)||s.originalParams,g=Ye(s,i),y=Ye(s,p),m=s.params.grabCursor,h=p.grabCursor,x=i.enabled;g&&!y?(a.classList.remove(`${i.containerModifierClass}grid`,`${i.containerModifierClass}grid-column`),s.emitContainerClasses()):!g&&y&&(a.classList.add(`${i.containerModifierClass}grid`),(p.grid.fill&&p.grid.fill===\"column\"||!p.grid.fill&&i.grid.fill===\"column\")&&a.classList.add(`${i.containerModifierClass}grid-column`),s.emitContainerClasses()),m&&!h?s.unsetGrabCursor():!m&&h&&s.setGrabCursor(),[\"navigation\",\"pagination\",\"scrollbar\"].forEach(C=>{if(typeof p[C]==\"undefined\")return;let I=i[C]&&i[C].enabled,P=p[C]&&p[C].enabled;I&&!P&&s[C].disable(),!I&&P&&s[C].enable()});let b=p.direction&&p.direction!==i.direction,c=i.loop&&(p.slidesPerView!==i.slidesPerView||b),f=i.loop;b&&t&&s.changeDirection(),Y(s.params,p);let v=s.params.enabled,S=s.params.loop;Object.assign(s,{allowTouchMove:s.params.allowTouchMove,allowSlideNext:s.params.allowSlideNext,allowSlidePrev:s.params.allowSlidePrev}),x&&!v?s.disable():!x&&v&&s.enable(),s.currentBreakpoint=o,s.emit(\"_beforeBreakpoint\",p),t&&(c?(s.loopDestroy(),s.loopCreate(e),s.updateSlides()):!f&&S?(s.loopCreate(e),s.updateSlides()):f&&!S&&s.loopDestroy()),s.emit(\"breakpoint\",p)}function ns(s,e,t){if(e===void 0&&(e=\"window\"),!s||e===\"container\"&&!t)return;let i=!1,a=H(),r=e===\"window\"?a.innerHeight:t.clientHeight,l=Object.keys(s).map(n=>{if(typeof n==\"string\"&&n.indexOf(\"@\")===0){let d=parseFloat(n.substr(1));return{value:r*d,point:n}}return{value:n,point:n}});l.sort((n,d)=>parseInt(n.value,10)-parseInt(d.value,10));for(let n=0;n<l.length;n+=1){let{point:d,value:o}=l[n];e===\"window\"?a.matchMedia(`(min-width: ${o}px)`).matches&&(i=d):o<=t.clientWidth&&(i=d)}return i||\"max\"}var ls={setBreakpoint:as,getBreakpoint:ns};function os(s,e){let t=[];return s.forEach(i=>{typeof i==\"object\"?Object.keys(i).forEach(a=>{i[a]&&t.push(e+a)}):typeof i==\"string\"&&t.push(e+i)}),t}function ds(){let s=this,{classNames:e,params:t,rtl:i,el:a,device:r}=s,l=os([\"initialized\",t.direction,{\"free-mode\":s.params.freeMode&&t.freeMode.enabled},{autoheight:t.autoHeight},{rtl:i},{grid:t.grid&&t.grid.rows>1},{\"grid-column\":t.grid&&t.grid.rows>1&&t.grid.fill===\"column\"},{android:r.android},{ios:r.ios},{\"css-mode\":t.cssMode},{centered:t.cssMode&&t.centeredSlides},{\"watch-progress\":t.watchSlidesProgress}],t.containerModifierClass);e.push(...l),a.classList.add(...e),s.emitContainerClasses()}function cs(){let s=this,{el:e,classNames:t}=s;!e||typeof e==\"string\"||(e.classList.remove(...t),s.emitContainerClasses())}var fs={addClasses:ds,removeClasses:cs};function us(){let s=this,{isLocked:e,params:t}=s,{slidesOffsetBefore:i}=t;if(i){let a=s.slides.length-1,r=s.slidesGrid[a]+s.slidesSizesGrid[a]+i*2;s.isLocked=s.size>r}else s.isLocked=s.snapGrid.length===1;t.allowSlideNext===!0&&(s.allowSlideNext=!s.isLocked),t.allowSlidePrev===!0&&(s.allowSlidePrev=!s.isLocked),e&&e!==s.isLocked&&(s.isEnd=!1),e!==s.isLocked&&s.emit(s.isLocked?\"lock\":\"unlock\")}var ps={checkOverflow:us},Ve={init:!0,direction:\"horizontal\",oneWayMovement:!1,swiperElementNodeName:\"SWIPER-CONTAINER\",touchEventsTarget:\"wrapper\",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:\"swiper\",enabled:!0,focusableElements:\"input, select, option, textarea, button, video, label\",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:\"slide\",breakpoints:void 0,breakpointsBase:\"window\",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:\"swiper-no-swiping\",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:\"swiper-\",slideClass:\"swiper-slide\",slideBlankClass:\"swiper-slide-blank\",slideActiveClass:\"swiper-slide-active\",slideVisibleClass:\"swiper-slide-visible\",slideFullyVisibleClass:\"swiper-slide-fully-visible\",slideNextClass:\"swiper-slide-next\",slidePrevClass:\"swiper-slide-prev\",wrapperClass:\"swiper-wrapper\",lazyPreloaderClass:\"swiper-lazy-preloader\",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function ms(s,e){return function(i){i===void 0&&(i={});let a=Object.keys(i)[0],r=i[a];if(typeof r!=\"object\"||r===null){Y(e,i);return}if(s[a]===!0&&(s[a]={enabled:!0}),a===\"navigation\"&&s[a]&&s[a].enabled&&!s[a].prevEl&&!s[a].nextEl&&(s[a].auto=!0),[\"pagination\",\"scrollbar\"].indexOf(a)>=0&&s[a]&&s[a].enabled&&!s[a].el&&(s[a].auto=!0),!(a in s&&\"enabled\"in r)){Y(e,i);return}typeof s[a]==\"object\"&&!(\"enabled\"in s[a])&&(s[a].enabled=!0),s[a]||(s[a]={enabled:!1}),Y(e,i)}}var Se={eventsEmitter:ft,update:xt,translate:Lt,transition:Ot,slide:Rt,loop:Ft,grabCursor:qt,events:rs,breakpoints:ls,checkOverflow:ps,classes:fs},xe={},_=class s{constructor(){let e,t;for(var i=arguments.length,a=new Array(i),r=0;r<i;r++)a[r]=arguments[r];a.length===1&&a[0].constructor&&Object.prototype.toString.call(a[0]).slice(8,-1)===\"Object\"?t=a[0]:[e,t]=a,t||(t={}),t=Y({},t),e&&!t.el&&(t.el=e);let l=B();if(t.el&&typeof t.el==\"string\"&&l.querySelectorAll(t.el).length>1){let u=[];return l.querySelectorAll(t.el).forEach(p=>{let g=Y({},t,{el:p});u.push(new s(g))}),u}let n=this;n.__swiper__=!0,n.support=Ne(),n.device=Fe({userAgent:t.userAgent}),n.browser=We(),n.eventsListeners={},n.eventsAnyListeners=[],n.modules=[...n.__modules__],t.modules&&Array.isArray(t.modules)&&n.modules.push(...t.modules);let d={};n.modules.forEach(u=>{u({params:t,swiper:n,extendParams:ms(t,d),on:n.on.bind(n),once:n.once.bind(n),off:n.off.bind(n),emit:n.emit.bind(n)})});let o=Y({},Ve,d);return n.params=Y({},o,xe,t),n.originalParams=Y({},n.params),n.passedParams=Y({},t),n.params&&n.params.on&&Object.keys(n.params.on).forEach(u=>{n.on(u,n.params.on[u])}),n.params&&n.params.onAny&&n.onAny(n.params.onAny),Object.assign(n,{enabled:n.params.enabled,el:e,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return n.params.direction===\"horizontal\"},isVertical(){return n.params.direction===\"vertical\"},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate\/2**23)*2**23},allowSlideNext:n.params.allowSlideNext,allowSlidePrev:n.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:n.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:n.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),n.emit(\"_swiper\"),n.params.init&&n.init(),n}getDirectionLabel(e){return this.isHorizontal()?e:{width:\"height\",\"margin-top\":\"margin-left\",\"margin-bottom \":\"margin-right\",\"margin-left\":\"margin-top\",\"margin-right\":\"margin-bottom\",\"padding-left\":\"padding-top\",\"padding-right\":\"padding-bottom\",marginRight:\"marginBottom\"}[e]}getSlideIndex(e){let{slidesEl:t,params:i}=this,a=R(t,`.${i.slideClass}, swiper-slide`),r=U(a[0]);return U(e)-r}getSlideIndexByData(e){return this.getSlideIndex(this.slides.find(t=>t.getAttribute(\"data-swiper-slide-index\")*1===e))}getSlideIndexWhenGrid(e){return this.grid&&this.params.grid&&this.params.grid.rows>1&&(this.params.grid.fill===\"column\"?e=Math.floor(e\/this.params.grid.rows):this.params.grid.fill===\"row\"&&(e=e%Math.ceil(this.slides.length\/this.params.grid.rows))),e}recalcSlides(){let e=this,{slidesEl:t,params:i}=e;e.slides=R(t,`.${i.slideClass}, swiper-slide`)}enable(){let e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit(\"enable\"))}disable(){let e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit(\"disable\"))}setProgress(e,t){let i=this;e=Math.min(Math.max(e,0),1);let a=i.minTranslate(),l=(i.maxTranslate()-a)*e+a;i.translateTo(l,typeof t==\"undefined\"?0:t),i.updateActiveIndex(),i.updateSlidesClasses()}emitContainerClasses(){let e=this;if(!e.params._emitClasses||!e.el)return;let t=e.el.className.split(\" \").filter(i=>i.indexOf(\"swiper\")===0||i.indexOf(e.params.containerModifierClass)===0);e.emit(\"_containerClasses\",t.join(\" \"))}getSlideClasses(e){let t=this;return t.destroyed?\"\":e.className.split(\" \").filter(i=>i.indexOf(\"swiper-slide\")===0||i.indexOf(t.params.slideClass)===0).join(\" \")}emitSlidesClasses(){let e=this;if(!e.params._emitClasses||!e.el)return;let t=[];e.slides.forEach(i=>{let a=e.getSlideClasses(i);t.push({slideEl:i,classNames:a}),e.emit(\"_slideClass\",i,a)}),e.emit(\"_slideClasses\",t)}slidesPerViewDynamic(e,t){e===void 0&&(e=\"current\"),t===void 0&&(t=!1);let i=this,{params:a,slides:r,slidesGrid:l,slidesSizesGrid:n,size:d,activeIndex:o}=i,u=1;if(typeof a.slidesPerView==\"number\")return a.slidesPerView;if(a.centeredSlides){let p=r[o]?Math.ceil(r[o].swiperSlideSize):0,g;for(let y=o+1;y<r.length;y+=1)r[y]&&!g&&(p+=Math.ceil(r[y].swiperSlideSize),u+=1,p>d&&(g=!0));for(let y=o-1;y>=0;y-=1)r[y]&&!g&&(p+=r[y].swiperSlideSize,u+=1,p>d&&(g=!0))}else if(e===\"current\")for(let p=o+1;p<r.length;p+=1)(t?l[p]+n[p]-l[o]<d:l[p]-l[o]<d)&&(u+=1);else for(let p=o-1;p>=0;p-=1)l[o]-l[p]<d&&(u+=1);return u}update(){let e=this;if(!e||e.destroyed)return;let{snapGrid:t,params:i}=e;i.breakpoints&&e.setBreakpoint(),[...e.el.querySelectorAll('[loading=\"lazy\"]')].forEach(l=>{l.complete&&fe(e,l)}),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses();function a(){let l=e.rtlTranslate?e.translate*-1:e.translate,n=Math.min(Math.max(l,e.maxTranslate()),e.minTranslate());e.setTranslate(n),e.updateActiveIndex(),e.updateSlidesClasses()}let r;if(i.freeMode&&i.freeMode.enabled&&!i.cssMode)a(),i.autoHeight&&e.updateAutoHeight();else{if((i.slidesPerView===\"auto\"||i.slidesPerView>1)&&e.isEnd&&!i.centeredSlides){let l=e.virtual&&i.virtual.enabled?e.virtual.slides:e.slides;r=e.slideTo(l.length-1,0,!1,!0)}else r=e.slideTo(e.activeIndex,0,!1,!0);r||a()}i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit(\"update\")}changeDirection(e,t){t===void 0&&(t=!0);let i=this,a=i.params.direction;return e||(e=a===\"horizontal\"?\"vertical\":\"horizontal\"),e===a||e!==\"horizontal\"&&e!==\"vertical\"||(i.el.classList.remove(`${i.params.containerModifierClass}${a}`),i.el.classList.add(`${i.params.containerModifierClass}${e}`),i.emitContainerClasses(),i.params.direction=e,i.slides.forEach(r=>{e===\"vertical\"?r.style.width=\"\":r.style.height=\"\"}),i.emit(\"changeDirection\"),t&&i.update()),i}changeLanguageDirection(e){let t=this;t.rtl&&e===\"rtl\"||!t.rtl&&e===\"ltr\"||(t.rtl=e===\"rtl\",t.rtlTranslate=t.params.direction===\"horizontal\"&&t.rtl,t.rtl?(t.el.classList.add(`${t.params.containerModifierClass}rtl`),t.el.dir=\"rtl\"):(t.el.classList.remove(`${t.params.containerModifierClass}rtl`),t.el.dir=\"ltr\"),t.update())}mount(e){let t=this;if(t.mounted)return!0;let i=e||t.params.el;if(typeof i==\"string\"&&(i=document.querySelector(i)),!i)return!1;i.swiper=t,i.parentNode&&i.parentNode.host&&i.parentNode.host.nodeName===t.params.swiperElementNodeName.toUpperCase()&&(t.isElement=!0);let a=()=>`.${(t.params.wrapperClass||\"\").trim().split(\" \").join(\".\")}`,l=i&&i.shadowRoot&&i.shadowRoot.querySelector?i.shadowRoot.querySelector(a()):R(i,a())[0];return!l&&t.params.createElements&&(l=V(\"div\",t.params.wrapperClass),i.append(l),R(i,`.${t.params.slideClass}`).forEach(n=>{l.append(n)})),Object.assign(t,{el:i,wrapperEl:l,slidesEl:t.isElement&&!i.parentNode.host.slideSlots?i.parentNode.host:l,hostEl:t.isElement?i.parentNode.host:i,mounted:!0,rtl:i.dir.toLowerCase()===\"rtl\"||W(i,\"direction\")===\"rtl\",rtlTranslate:t.params.direction===\"horizontal\"&&(i.dir.toLowerCase()===\"rtl\"||W(i,\"direction\")===\"rtl\"),wrongRTL:W(l,\"display\")===\"-webkit-box\"}),!0}init(e){let t=this;if(t.initialized||t.mount(e)===!1)return t;t.emit(\"beforeInit\"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.loop&&t.virtual&&t.params.virtual.enabled?t.slideTo(t.params.initialSlide+t.virtual.slidesBefore,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.params.loop&&t.loopCreate(void 0,!0),t.attachEvents();let a=[...t.el.querySelectorAll('[loading=\"lazy\"]')];return t.isElement&&a.push(...t.hostEl.querySelectorAll('[loading=\"lazy\"]')),a.forEach(r=>{r.complete?fe(t,r):r.addEventListener(\"load\",l=>{fe(t,l.target)})}),Ee(t),t.initialized=!0,Ee(t),t.emit(\"init\"),t.emit(\"afterInit\"),t}destroy(e,t){e===void 0&&(e=!0),t===void 0&&(t=!0);let i=this,{params:a,el:r,wrapperEl:l,slides:n}=i;return typeof i.params==\"undefined\"||i.destroyed||(i.emit(\"beforeDestroy\"),i.initialized=!1,i.detachEvents(),a.loop&&i.loopDestroy(),t&&(i.removeClasses(),r&&typeof r!=\"string\"&&r.removeAttribute(\"style\"),l&&l.removeAttribute(\"style\"),n&&n.length&&n.forEach(d=>{d.classList.remove(a.slideVisibleClass,a.slideFullyVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass),d.removeAttribute(\"style\"),d.removeAttribute(\"data-swiper-slide-index\")})),i.emit(\"destroy\"),Object.keys(i.eventsListeners).forEach(d=>{i.off(d)}),e!==!1&&(i.el&&typeof i.el!=\"string\"&&(i.el.swiper=null),$e(i)),i.destroyed=!0),null}static extendDefaults(e){Y(xe,e)}static get extendedDefaults(){return xe}static get defaults(){return Ve}static installModule(e){s.prototype.__modules__||(s.prototype.__modules__=[]);let t=s.prototype.__modules__;typeof e==\"function\"&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach(t=>s.installModule(t)),s):(s.installModule(e),s)}};Object.keys(Se).forEach(s=>{Object.keys(Se[s]).forEach(e=>{_.prototype[e]=Se[s][e]})});_.use([dt,ct]);function ne(s,e,t,i){return s.params.createElements&&Object.keys(i).forEach(a=>{if(!t[a]&&t.auto===!0){let r=R(s.el,`.${i[a]}`)[0];r||(r=V(\"div\",i[a]),r.className=i[a],s.el.append(r)),t[a]=r,e[a]=r}}),t}function Te(s){let{swiper:e,extendParams:t,on:i,emit:a}=s;t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:\"swiper-button-disabled\",hiddenClass:\"swiper-button-hidden\",lockClass:\"swiper-button-lock\",navigationDisabledClass:\"swiper-navigation-disabled\"}}),e.navigation={nextEl:null,prevEl:null};function r(m){let h;return m&&typeof m==\"string\"&&e.isElement&&(h=e.el.querySelector(m)||e.hostEl.querySelector(m),h)?h:(m&&(typeof m==\"string\"&&(h=[...document.querySelectorAll(m)]),e.params.uniqueNavElements&&typeof m==\"string\"&&h&&h.length>1&&e.el.querySelectorAll(m).length===1?h=e.el.querySelector(m):h&&h.length===1&&(h=h[0])),m&&!h?m:h)}function l(m,h){let x=e.params.navigation;m=D(m),m.forEach(b=>{b&&(b.classList[h?\"add\":\"remove\"](...x.disabledClass.split(\" \")),b.tagName===\"BUTTON\"&&(b.disabled=h),e.params.watchOverflow&&e.enabled&&b.classList[e.isLocked?\"add\":\"remove\"](x.lockClass))})}function n(){let{nextEl:m,prevEl:h}=e.navigation;if(e.params.loop){l(h,!1),l(m,!1);return}l(h,e.isBeginning&&!e.params.rewind),l(m,e.isEnd&&!e.params.rewind)}function d(m){m.preventDefault(),!(e.isBeginning&&!e.params.loop&&!e.params.rewind)&&(e.slidePrev(),a(\"navigationPrev\"))}function o(m){m.preventDefault(),!(e.isEnd&&!e.params.loop&&!e.params.rewind)&&(e.slideNext(),a(\"navigationNext\"))}function u(){let m=e.params.navigation;if(e.params.navigation=ne(e,e.originalParams.navigation,e.params.navigation,{nextEl:\"swiper-button-next\",prevEl:\"swiper-button-prev\"}),!(m.nextEl||m.prevEl))return;let h=r(m.nextEl),x=r(m.prevEl);Object.assign(e.navigation,{nextEl:h,prevEl:x}),h=D(h),x=D(x);let b=(c,f)=>{c&&c.addEventListener(\"click\",f===\"next\"?o:d),!e.enabled&&c&&c.classList.add(...m.lockClass.split(\" \"))};h.forEach(c=>b(c,\"next\")),x.forEach(c=>b(c,\"prev\"))}function p(){let{nextEl:m,prevEl:h}=e.navigation;m=D(m),h=D(h);let x=(b,c)=>{b.removeEventListener(\"click\",c===\"next\"?o:d),b.classList.remove(...e.params.navigation.disabledClass.split(\" \"))};m.forEach(b=>x(b,\"next\")),h.forEach(b=>x(b,\"prev\"))}i(\"init\",()=>{e.params.navigation.enabled===!1?y():(u(),n())}),i(\"toEdge fromEdge lock unlock\",()=>{n()}),i(\"destroy\",()=>{p()}),i(\"enable disable\",()=>{let{nextEl:m,prevEl:h}=e.navigation;if(m=D(m),h=D(h),e.enabled){n();return}[...m,...h].filter(x=>!!x).forEach(x=>x.classList.add(e.params.navigation.lockClass))}),i(\"click\",(m,h)=>{let{nextEl:x,prevEl:b}=e.navigation;x=D(x),b=D(b);let c=h.target,f=b.includes(c)||x.includes(c);if(e.isElement&&!f){let v=h.path||h.composedPath&&h.composedPath();v&&(f=v.find(S=>x.includes(S)||b.includes(S)))}if(e.params.navigation.hideOnClick&&!f){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===c||e.pagination.el.contains(c)))return;let v;x.length?v=x[0].classList.contains(e.params.navigation.hiddenClass):b.length&&(v=b[0].classList.contains(e.params.navigation.hiddenClass)),a(v===!0?\"navigationShow\":\"navigationHide\"),[...x,...b].filter(S=>!!S).forEach(S=>S.classList.toggle(e.params.navigation.hiddenClass))}});let g=()=>{e.el.classList.remove(...e.params.navigation.navigationDisabledClass.split(\" \")),u(),n()},y=()=>{e.el.classList.add(...e.params.navigation.navigationDisabledClass.split(\" \")),p()};Object.assign(e.navigation,{enable:g,disable:y,update:n,init:u,destroy:p})}function N(s){return s===void 0&&(s=\"\"),`.${s.trim().replace(\/([\\.:!+\\\/()[\\]])\/g,\"\\\\$1\").replace(\/ \/g,\".\")}`}function Me(s){let{swiper:e,extendParams:t,on:i,emit:a}=s,r=\"swiper-pagination\";t({pagination:{el:null,bulletElement:\"span\",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:\"bullets\",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:c=>c,formatFractionTotal:c=>c,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`,paginationDisabledClass:`${r}-disabled`}}),e.pagination={el:null,bullets:[]};let l,n=0;function d(){return!e.params.pagination.el||!e.pagination.el||Array.isArray(e.pagination.el)&&e.pagination.el.length===0}function o(c,f){let{bulletActiveClass:v}=e.params.pagination;c&&(c=c[`${f===\"prev\"?\"previous\":\"next\"}ElementSibling`],c&&(c.classList.add(`${v}-${f}`),c=c[`${f===\"prev\"?\"previous\":\"next\"}ElementSibling`],c&&c.classList.add(`${v}-${f}-${f}`)))}function u(c,f,v){if(c=c%v,f=f%v,f===c+1)return\"next\";if(f===c-1)return\"previous\"}function p(c){let f=c.target.closest(N(e.params.pagination.bulletClass));if(!f)return;c.preventDefault();let v=U(f)*e.params.slidesPerGroup;if(e.params.loop){if(e.realIndex===v)return;let S=u(e.realIndex,v,e.slides.length);S===\"next\"?e.slideNext():S===\"previous\"?e.slidePrev():e.slideToLoop(v)}else e.slideTo(v)}function g(){let c=e.rtl,f=e.params.pagination;if(d())return;let v=e.pagination.el;v=D(v);let S,C,I=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,P=e.params.loop?Math.ceil(I\/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(C=e.previousRealIndex||0,S=e.params.slidesPerGroup>1?Math.floor(e.realIndex\/e.params.slidesPerGroup):e.realIndex):typeof e.snapIndex!=\"undefined\"?(S=e.snapIndex,C=e.previousSnapIndex):(C=e.previousIndex||0,S=e.activeIndex||0),f.type===\"bullets\"&&e.pagination.bullets&&e.pagination.bullets.length>0){let L=e.pagination.bullets,T,M,A;if(f.dynamicBullets&&(l=ae(L[0],e.isHorizontal()?\"width\":\"height\",!0),v.forEach(O=>{O.style[e.isHorizontal()?\"width\":\"height\"]=`${l*(f.dynamicMainBullets+4)}px`}),f.dynamicMainBullets>1&&C!==void 0&&(n+=S-(C||0),n>f.dynamicMainBullets-1?n=f.dynamicMainBullets-1:n<0&&(n=0)),T=Math.max(S-n,0),M=T+(Math.min(L.length,f.dynamicMainBullets)-1),A=(M+T)\/2),L.forEach(O=>{let k=[...[\"\",\"-next\",\"-next-next\",\"-prev\",\"-prev-prev\",\"-main\"].map(G=>`${f.bulletActiveClass}${G}`)].map(G=>typeof G==\"string\"&&G.includes(\" \")?G.split(\" \"):G).flat();O.classList.remove(...k)}),v.length>1)L.forEach(O=>{let k=U(O);k===S?O.classList.add(...f.bulletActiveClass.split(\" \")):e.isElement&&O.setAttribute(\"part\",\"bullet\"),f.dynamicBullets&&(k>=T&&k<=M&&O.classList.add(...`${f.bulletActiveClass}-main`.split(\" \")),k===T&&o(O,\"prev\"),k===M&&o(O,\"next\"))});else{let O=L[S];if(O&&O.classList.add(...f.bulletActiveClass.split(\" \")),e.isElement&&L.forEach((k,G)=>{k.setAttribute(\"part\",G===S?\"bullet-active\":\"bullet\")}),f.dynamicBullets){let k=L[T],G=L[M];for(let z=T;z<=M;z+=1)L[z]&&L[z].classList.add(...`${f.bulletActiveClass}-main`.split(\" \"));o(k,\"prev\"),o(G,\"next\")}}if(f.dynamicBullets){let O=Math.min(L.length,f.dynamicMainBullets+4),k=(l*O-l)\/2-A*l,G=c?\"right\":\"left\";L.forEach(z=>{z.style[e.isHorizontal()?G:\"top\"]=`${k}px`})}}v.forEach((L,T)=>{if(f.type===\"fraction\"&&(L.querySelectorAll(N(f.currentClass)).forEach(M=>{M.textContent=f.formatFractionCurrent(S+1)}),L.querySelectorAll(N(f.totalClass)).forEach(M=>{M.textContent=f.formatFractionTotal(P)})),f.type===\"progressbar\"){let M;f.progressbarOpposite?M=e.isHorizontal()?\"vertical\":\"horizontal\":M=e.isHorizontal()?\"horizontal\":\"vertical\";let A=(S+1)\/P,O=1,k=1;M===\"horizontal\"?O=A:k=A,L.querySelectorAll(N(f.progressbarFillClass)).forEach(G=>{G.style.transform=`translate3d(0,0,0) scaleX(${O}) scaleY(${k})`,G.style.transitionDuration=`${e.params.speed}ms`})}f.type===\"custom\"&&f.renderCustom?(Z(L,f.renderCustom(e,S+1,P)),T===0&&a(\"paginationRender\",L)):(T===0&&a(\"paginationRender\",L),a(\"paginationUpdate\",L)),e.params.watchOverflow&&e.enabled&&L.classList[e.isLocked?\"add\":\"remove\"](f.lockClass)})}function y(){let c=e.params.pagination;if(d())return;let f=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.grid&&e.params.grid.rows>1?e.slides.length\/Math.ceil(e.params.grid.rows):e.slides.length,v=e.pagination.el;v=D(v);let S=\"\";if(c.type===\"bullets\"){let C=e.params.loop?Math.ceil(f\/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&C>f&&(C=f);for(let I=0;I<C;I+=1)c.renderBullet?S+=c.renderBullet.call(e,I,c.bulletClass):S+=`<${c.bulletElement} ${e.isElement?'part=\"bullet\"':\"\"} class=\"${c.bulletClass}\"><\/${c.bulletElement}>`}c.type===\"fraction\"&&(c.renderFraction?S=c.renderFraction.call(e,c.currentClass,c.totalClass):S=`<span class=\"${c.currentClass}\"><\/span> \/ <span class=\"${c.totalClass}\"><\/span>`),c.type===\"progressbar\"&&(c.renderProgressbar?S=c.renderProgressbar.call(e,c.progressbarFillClass):S=`<span class=\"${c.progressbarFillClass}\"><\/span>`),e.pagination.bullets=[],v.forEach(C=>{c.type!==\"custom\"&&Z(C,S||\"\"),c.type===\"bullets\"&&e.pagination.bullets.push(...C.querySelectorAll(N(c.bulletClass)))}),c.type!==\"custom\"&&a(\"paginationRender\",v[0])}function m(){e.params.pagination=ne(e,e.originalParams.pagination,e.params.pagination,{el:\"swiper-pagination\"});let c=e.params.pagination;if(!c.el)return;let f;typeof c.el==\"string\"&&e.isElement&&(f=e.el.querySelector(c.el)),!f&&typeof c.el==\"string\"&&(f=[...document.querySelectorAll(c.el)]),f||(f=c.el),!(!f||f.length===0)&&(e.params.uniqueNavElements&&typeof c.el==\"string\"&&Array.isArray(f)&&f.length>1&&(f=[...e.el.querySelectorAll(c.el)],f.length>1&&(f=f.find(v=>te(v,\".swiper\")[0]===e.el))),Array.isArray(f)&&f.length===1&&(f=f[0]),Object.assign(e.pagination,{el:f}),f=D(f),f.forEach(v=>{c.type===\"bullets\"&&c.clickable&&v.classList.add(...(c.clickableClass||\"\").split(\" \")),v.classList.add(c.modifierClass+c.type),v.classList.add(e.isHorizontal()?c.horizontalClass:c.verticalClass),c.type===\"bullets\"&&c.dynamicBullets&&(v.classList.add(`${c.modifierClass}${c.type}-dynamic`),n=0,c.dynamicMainBullets<1&&(c.dynamicMainBullets=1)),c.type===\"progressbar\"&&c.progressbarOpposite&&v.classList.add(c.progressbarOppositeClass),c.clickable&&v.addEventListener(\"click\",p),e.enabled||v.classList.add(c.lockClass)}))}function h(){let c=e.params.pagination;if(d())return;let f=e.pagination.el;f&&(f=D(f),f.forEach(v=>{v.classList.remove(c.hiddenClass),v.classList.remove(c.modifierClass+c.type),v.classList.remove(e.isHorizontal()?c.horizontalClass:c.verticalClass),c.clickable&&(v.classList.remove(...(c.clickableClass||\"\").split(\" \")),v.removeEventListener(\"click\",p))})),e.pagination.bullets&&e.pagination.bullets.forEach(v=>v.classList.remove(...c.bulletActiveClass.split(\" \")))}i(\"changeDirection\",()=>{if(!e.pagination||!e.pagination.el)return;let c=e.params.pagination,{el:f}=e.pagination;f=D(f),f.forEach(v=>{v.classList.remove(c.horizontalClass,c.verticalClass),v.classList.add(e.isHorizontal()?c.horizontalClass:c.verticalClass)})}),i(\"init\",()=>{e.params.pagination.enabled===!1?b():(m(),y(),g())}),i(\"activeIndexChange\",()=>{typeof e.snapIndex==\"undefined\"&&g()}),i(\"snapIndexChange\",()=>{g()}),i(\"snapGridLengthChange\",()=>{y(),g()}),i(\"destroy\",()=>{h()}),i(\"enable disable\",()=>{let{el:c}=e.pagination;c&&(c=D(c),c.forEach(f=>f.classList[e.enabled?\"remove\":\"add\"](e.params.pagination.lockClass)))}),i(\"lock unlock\",()=>{g()}),i(\"click\",(c,f)=>{let v=f.target,S=D(e.pagination.el);if(e.params.pagination.el&&e.params.pagination.hideOnClick&&S&&S.length>0&&!v.classList.contains(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&v===e.navigation.nextEl||e.navigation.prevEl&&v===e.navigation.prevEl))return;let C=S[0].classList.contains(e.params.pagination.hiddenClass);a(C===!0?\"paginationShow\":\"paginationHide\"),S.forEach(I=>I.classList.toggle(e.params.pagination.hiddenClass))}});let x=()=>{e.el.classList.remove(e.params.pagination.paginationDisabledClass);let{el:c}=e.pagination;c&&(c=D(c),c.forEach(f=>f.classList.remove(e.params.pagination.paginationDisabledClass))),m(),y(),g()},b=()=>{e.el.classList.add(e.params.pagination.paginationDisabledClass);let{el:c}=e.pagination;c&&(c=D(c),c.forEach(f=>f.classList.add(e.params.pagination.paginationDisabledClass))),h()};Object.assign(e.pagination,{enable:x,disable:b,render:y,update:g,init:m,destroy:h})}function Ce(s){let{swiper:e,extendParams:t,on:i}=s;t({a11y:{enabled:!0,notificationClass:\"swiper-notification\",prevSlideMessage:\"Previous slide\",nextSlideMessage:\"Next slide\",firstSlideMessage:\"This is the first slide\",lastSlideMessage:\"This is the last slide\",paginationBulletMessage:\"Go to slide {{index}}\",slideLabelMessage:\"{{index}} \/ {{slidesLength}}\",containerMessage:null,containerRoleDescriptionMessage:null,containerRole:null,itemRoleDescriptionMessage:null,slideRole:\"group\",id:null,scrollOnFocus:!0}}),e.a11y={clicked:!1};let a=null,r,l,n=new Date().getTime();function d(w){let E=a;E.length!==0&&Z(E,w)}function o(w){w===void 0&&(w=16);let E=()=>Math.round(16*Math.random()).toString(16);return\"x\".repeat(w).replace(\/x\/g,E)}function u(w){w=D(w),w.forEach(E=>{E.setAttribute(\"tabIndex\",\"0\")})}function p(w){w=D(w),w.forEach(E=>{E.setAttribute(\"tabIndex\",\"-1\")})}function g(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"role\",E)})}function y(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-roledescription\",E)})}function m(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-controls\",E)})}function h(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-label\",E)})}function x(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"id\",E)})}function b(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-live\",E)})}function c(w){w=D(w),w.forEach(E=>{E.setAttribute(\"aria-disabled\",!0)})}function f(w){w=D(w),w.forEach(E=>{E.setAttribute(\"aria-disabled\",!1)})}function v(w){if(w.keyCode!==13&&w.keyCode!==32)return;let E=e.params.a11y,$=w.target;if(!(e.pagination&&e.pagination.el&&($===e.pagination.el||e.pagination.el.contains(w.target))&&!w.target.matches(N(e.params.pagination.bulletClass)))){if(e.navigation&&e.navigation.prevEl&&e.navigation.nextEl){let X=D(e.navigation.prevEl);D(e.navigation.nextEl).includes($)&&(e.isEnd&&!e.params.loop||e.slideNext(),e.isEnd?d(E.lastSlideMessage):d(E.nextSlideMessage)),X.includes($)&&(e.isBeginning&&!e.params.loop||e.slidePrev(),e.isBeginning?d(E.firstSlideMessage):d(E.prevSlideMessage))}e.pagination&&$.matches(N(e.params.pagination.bulletClass))&&$.click()}}function S(){if(e.params.loop||e.params.rewind||!e.navigation)return;let{nextEl:w,prevEl:E}=e.navigation;E&&(e.isBeginning?(c(E),p(E)):(f(E),u(E))),w&&(e.isEnd?(c(w),p(w)):(f(w),u(w)))}function C(){return e.pagination&&e.pagination.bullets&&e.pagination.bullets.length}function I(){return C()&&e.params.pagination.clickable}function P(){let w=e.params.a11y;C()&&e.pagination.bullets.forEach(E=>{e.params.pagination.clickable&&(u(E),e.params.pagination.renderBullet||(g(E,\"button\"),h(E,w.paginationBulletMessage.replace(\/\\{\\{index\\}\\}\/,U(E)+1)))),E.matches(N(e.params.pagination.bulletActiveClass))?E.setAttribute(\"aria-current\",\"true\"):E.removeAttribute(\"aria-current\")})}let L=(w,E,$)=>{u(w),w.tagName!==\"BUTTON\"&&(g(w,\"button\"),w.addEventListener(\"keydown\",v)),h(w,$),m(w,E)},T=w=>{l&&l!==w.target&&!l.contains(w.target)&&(r=!0),e.a11y.clicked=!0},M=()=>{r=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.destroyed||(e.a11y.clicked=!1)})})},A=w=>{n=new Date().getTime()},O=w=>{if(e.a11y.clicked||!e.params.a11y.scrollOnFocus||new Date().getTime()-n<100)return;let E=w.target.closest(`.${e.params.slideClass}, swiper-slide`);if(!E||!e.slides.includes(E))return;l=E;let $=e.slides.indexOf(E)===e.activeIndex,X=e.params.watchSlidesProgress&&e.visibleSlides&&e.visibleSlides.includes(E);$||X||w.sourceCapabilities&&w.sourceCapabilities.firesTouchEvents||(e.isHorizontal()?e.el.scrollLeft=0:e.el.scrollTop=0,requestAnimationFrame(()=>{r||(e.params.loop?e.slideToLoop(e.getSlideIndexWhenGrid(parseInt(E.getAttribute(\"data-swiper-slide-index\"))),0):e.slideTo(e.getSlideIndexWhenGrid(e.slides.indexOf(E)),0),r=!1)}))},k=()=>{let w=e.params.a11y;w.itemRoleDescriptionMessage&&y(e.slides,w.itemRoleDescriptionMessage),w.slideRole&&g(e.slides,w.slideRole);let E=e.slides.length;w.slideLabelMessage&&e.slides.forEach(($,X)=>{let q=e.params.loop?parseInt($.getAttribute(\"data-swiper-slide-index\"),10):X,j=w.slideLabelMessage.replace(\/\\{\\{index\\}\\}\/,q+1).replace(\/\\{\\{slidesLength\\}\\}\/,E);h($,j)})},G=()=>{let w=e.params.a11y;e.el.append(a);let E=e.el;w.containerRoleDescriptionMessage&&y(E,w.containerRoleDescriptionMessage),w.containerMessage&&h(E,w.containerMessage),w.containerRole&&g(E,w.containerRole);let $=e.wrapperEl,X=w.id||$.getAttribute(\"id\")||`swiper-wrapper-${o(16)}`,q=e.params.autoplay&&e.params.autoplay.enabled?\"off\":\"polite\";x($,X),b($,q),k();let{nextEl:j,prevEl:oe}=e.navigation?e.navigation:{};j=D(j),oe=D(oe),j&&j.forEach(de=>L(de,X,w.nextSlideMessage)),oe&&oe.forEach(de=>L(de,X,w.prevSlideMessage)),I()&&D(e.pagination.el).forEach(Ue=>{Ue.addEventListener(\"keydown\",v)}),B().addEventListener(\"visibilitychange\",A),e.el.addEventListener(\"focus\",O,!0),e.el.addEventListener(\"focus\",O,!0),e.el.addEventListener(\"pointerdown\",T,!0),e.el.addEventListener(\"pointerup\",M,!0)};function z(){a&&a.remove();let{nextEl:w,prevEl:E}=e.navigation?e.navigation:{};w=D(w),E=D(E),w&&w.forEach(X=>X.removeEventListener(\"keydown\",v)),E&&E.forEach(X=>X.removeEventListener(\"keydown\",v)),I()&&D(e.pagination.el).forEach(q=>{q.removeEventListener(\"keydown\",v)}),B().removeEventListener(\"visibilitychange\",A),e.el&&typeof e.el!=\"string\"&&(e.el.removeEventListener(\"focus\",O,!0),e.el.removeEventListener(\"pointerdown\",T,!0),e.el.removeEventListener(\"pointerup\",M,!0))}i(\"beforeInit\",()=>{a=V(\"span\",e.params.a11y.notificationClass),a.setAttribute(\"aria-live\",\"assertive\"),a.setAttribute(\"aria-atomic\",\"true\")}),i(\"afterInit\",()=>{e.params.a11y.enabled&&G()}),i(\"slidesLengthChange snapGridLengthChange slidesGridLengthChange\",()=>{e.params.a11y.enabled&&k()}),i(\"fromEdge toEdge afterInit lock unlock\",()=>{e.params.a11y.enabled&&S()}),i(\"paginationUpdate\",()=>{e.params.a11y.enabled&&P()}),i(\"destroy\",()=>{e.params.a11y.enabled&&z()})}function Pe(s){let{swiper:e,extendParams:t,on:i}=s;t({grid:{rows:1,fill:\"column\"}});let a,r,l,n,d=()=>{let h=e.params.spaceBetween;return typeof h==\"string\"&&h.indexOf(\"%\")>=0?h=parseFloat(h.replace(\"%\",\"\"))\/100*e.size:typeof h==\"string\"&&(h=parseFloat(h)),h},o=h=>{let{slidesPerView:x}=e.params,{rows:b,fill:c}=e.params.grid,f=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:h.length;l=Math.floor(f\/b),Math.floor(f\/b)===f\/b?a=f:a=Math.ceil(f\/b)*b,x!==\"auto\"&&c===\"row\"&&(a=Math.max(a,x*b)),r=a\/b},u=()=>{e.slides&&e.slides.forEach(h=>{h.swiperSlideGridSet&&(h.style.height=\"\",h.style[e.getDirectionLabel(\"margin-top\")]=\"\")})},p=(h,x,b)=>{let{slidesPerGroup:c}=e.params,f=d(),{rows:v,fill:S}=e.params.grid,C=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:b.length,I,P,L;if(S===\"row\"&&c>1){let T=Math.floor(h\/(c*v)),M=h-v*c*T,A=T===0?c:Math.min(Math.ceil((C-T*v*c)\/v),c);L=Math.floor(M\/A),P=M-L*A+T*c,I=P+L*a\/v,x.style.order=I}else S===\"column\"?(P=Math.floor(h\/v),L=h-P*v,(P>l||P===l&&L===v-1)&&(L+=1,L>=v&&(L=0,P+=1))):(L=Math.floor(h\/r),P=h-L*r);x.row=L,x.column=P,x.style.height=`calc((100% - ${(v-1)*f}px) \/ ${v})`,x.style[e.getDirectionLabel(\"margin-top\")]=L!==0?f&&`${f}px`:\"\",x.swiperSlideGridSet=!0},g=(h,x)=>{let{centeredSlides:b,roundLengths:c}=e.params,f=d(),{rows:v}=e.params.grid;if(e.virtualSize=(h+f)*a,e.virtualSize=Math.ceil(e.virtualSize\/v)-f,e.params.cssMode||(e.wrapperEl.style[e.getDirectionLabel(\"width\")]=`${e.virtualSize+f}px`),b){let S=[];for(let C=0;C<x.length;C+=1){let I=x[C];c&&(I=Math.floor(I)),x[C]<e.virtualSize+x[0]&&S.push(I)}x.splice(0,x.length),x.push(...S)}},y=()=>{n=e.params.grid&&e.params.grid.rows>1},m=()=>{let{params:h,el:x}=e,b=h.grid&&h.grid.rows>1;n&&!b?(x.classList.remove(`${h.containerModifierClass}grid`,`${h.containerModifierClass}grid-column`),l=1,e.emitContainerClasses()):!n&&b&&(x.classList.add(`${h.containerModifierClass}grid`),h.grid.fill===\"column\"&&x.classList.add(`${h.containerModifierClass}grid-column`),e.emitContainerClasses()),n=b};i(\"init\",y),i(\"update\",m),e.grid={initSlides:o,unsetSlides:u,updateSlide:p,updateWrapperSize:g}}function Q(s){let{effect:e,swiper:t,on:i,setTranslate:a,setTransition:r,overwriteParams:l,perspective:n,recreateShadows:d,getEffectParams:o}=s;i(\"beforeInit\",()=>{if(t.params.effect!==e)return;t.classNames.push(`${t.params.containerModifierClass}${e}`),n&&n()&&t.classNames.push(`${t.params.containerModifierClass}3d`);let p=l?l():{};Object.assign(t.params,p),Object.assign(t.originalParams,p)}),i(\"setTranslate _virtualUpdated\",()=>{t.params.effect===e&&a()}),i(\"setTransition\",(p,g)=>{t.params.effect===e&&r(g)}),i(\"transitionEnd\",()=>{if(t.params.effect===e&&d){if(!o||!o().slideShadows)return;t.slides.forEach(p=>{p.querySelectorAll(\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\").forEach(g=>g.remove())}),d()}});let u;i(\"virtualUpdate\",()=>{t.params.effect===e&&(t.slides.length||(u=!0),requestAnimationFrame(()=>{u&&t.slides&&t.slides.length&&(a(),u=!1)}))})}function se(s,e){let t=F(e);return t!==e&&(t.style.backfaceVisibility=\"hidden\",t.style[\"-webkit-backface-visibility\"]=\"hidden\"),t}function le(s){let{swiper:e,duration:t,transformElements:i,allSlides:a}=s,{activeIndex:r}=e,l=n=>n.parentElement?n.parentElement:e.slides.find(o=>o.shadowRoot&&o.shadowRoot===n.parentNode);if(e.params.virtualTranslate&&t!==0){let n=!1,d;a?d=i:d=i.filter(o=>{let u=o.classList.contains(\"swiper-slide-transform\")?l(o):o;return e.getSlideIndex(u)===r}),d.forEach(o=>{ce(o,()=>{if(n||!e||e.destroyed)return;n=!0,e.animating=!1;let u=new window.CustomEvent(\"transitionend\",{bubbles:!0,cancelable:!0});e.wrapperEl.dispatchEvent(u)})})}}function Le(s){let{swiper:e,extendParams:t,on:i}=s;t({fadeEffect:{crossFade:!1}}),Q({effect:\"fade\",swiper:e,on:i,setTranslate:()=>{let{slides:l}=e,n=e.params.fadeEffect;for(let d=0;d<l.length;d+=1){let o=e.slides[d],p=-o.swiperSlideOffset;e.params.virtualTranslate||(p-=e.translate);let g=0;e.isHorizontal()||(g=p,p=0);let y=e.params.fadeEffect.crossFade?Math.max(1-Math.abs(o.progress),0):1+Math.min(Math.max(o.progress,-1),0),m=se(n,o);m.style.opacity=y,m.style.transform=`translate3d(${p}px, ${g}px, 0px)`}},setTransition:l=>{let n=e.slides.map(d=>F(d));n.forEach(d=>{d.style.transitionDuration=`${l}ms`}),le({swiper:e,duration:l,transformElements:n,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})}_.use([Te,Me,Ce,Le,Pe]);var hs=_;return tt(gs);})();\nvar Swiper=typeof SwiperModule!=\"undefined\"&&(SwiperModule.default||SwiperModule);\n(function initLazyInit() {\n var DEFAULT_ROOT_MARGIN = '200px 0px';\n function parseRootMarginBottom(rootMargin) {\n var parts = String(rootMargin || DEFAULT_ROOT_MARGIN).trim().split(\/\\s+\/);\n var bottom = parts[2] || parts[0] || '0px';\n var value = parseFloat(bottom);\n if (Number.isNaN(value)) return 0;\n return bottom.indexOf('vh') !== -1 ? (window.innerHeight * value) \/ 100 : value;\n }\n function isInViewport(el, rootMargin) {\n if (!el || !el.getBoundingClientRect) return false;\n var rect = el.getBoundingClientRect();\n var margin = parseRootMarginBottom(rootMargin);\n return rect.top < window.innerHeight + margin && rect.bottom > 0;\n }\n function whenVisible(element, callback, options) {\n options = options || {};\n var rootMargin = options.rootMargin || DEFAULT_ROOT_MARGIN;\n var once = options.once !== false;\n if (!element || typeof callback !== 'function') {\n return function () {};\n }\n if (isInViewport(element, rootMargin)) {\n callback();\n return function () {};\n }\n if (!('IntersectionObserver' in window)) {\n callback();\n return function () {};\n }\n var observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (!entry.isIntersecting) return;\n callback();\n if (once) observer.unobserve(entry.target);\n });\n }, {\n root: options.root || null,\n rootMargin: rootMargin,\n threshold: options.threshold != null ? options.threshold : 0,\n });\n observer.observe(element);\n return function () {\n observer.unobserve(element);\n };\n }\n window.LazyInit = {\n whenVisible: whenVisible,\n isInViewport: isInViewport,\n };\n})();\nwindow.__LOADED_SECTIONS = window.__LOADED_SECTIONS || [];\n(function initAccessibleWysiwygTables() {\n var tableCounter = 0;\n var resizeObserver = typeof ResizeObserver === 'function'\n ? new ResizeObserver(function (entries) {\n entries.forEach(function (entry) {\n syncScrollableRegion(entry.target);\n });\n })\n : null;\n function tableLabel(table) {\n var caption = table.querySelector('caption');\n if (caption && caption.textContent.trim()) return caption.textContent.trim();\n var owner = table.closest('article, section');\n var heading = owner ? owner.querySelector('h1, h2, h3, h4, h5, h6') : null;\n if (heading && heading.textContent.trim()) return heading.textContent.trim();\n tableCounter += 1;\n return tableCounter === 1 ? 'Таблица данных' : 'Таблица данных ' + tableCounter;\n }\n function syncScrollableRegion(wrapper) {\n var isScrollable = wrapper.scrollWidth > wrapper.clientWidth + 1;\n if (isScrollable) {\n wrapper.tabIndex = 0;\n wrapper.setAttribute('role', 'region');\n wrapper.setAttribute('aria-label', wrapper.dataset.tableLabel);\n return;\n }\n wrapper.removeAttribute('tabindex');\n wrapper.removeAttribute('role');\n wrapper.removeAttribute('aria-label');\n }\n function normalizeTableStructure(table) {\n Array.prototype.forEach.call(table.tBodies, function (tbody) {\n if (!tbody.querySelector('th, td') && !tbody.textContent.trim()) tbody.remove();\n });\n var head = table.tHead;\n if (head) {\n Array.prototype.forEach.call(head.querySelectorAll('th:not([scope])'), function (cell) {\n cell.setAttribute('scope', 'col');\n });\n var reference = Array.prototype.find.call(table.children, function (child) {\n return child.tagName !== 'CAPTION' && child.tagName !== 'COLGROUP';\n });\n if (reference && reference !== head) table.insertBefore(head, reference);\n }\n Array.prototype.forEach.call(table.querySelectorAll('tbody th:not([scope])'), function (cell) {\n cell.setAttribute('scope', 'row');\n });\n }\n function enhanceTable(table) {\n if (!table || table.dataset.accessibleTableReady === 'true') return;\n table.dataset.accessibleTableReady = 'true';\n normalizeTableStructure(table);\n var wrapper = document.createElement('div');\n wrapper.className = 'wysiwyg-table-scroll';\n wrapper.dataset.tableLabel = 'Прокручиваемая таблица: ' + tableLabel(table);\n table.parentNode.insertBefore(wrapper, table);\n wrapper.appendChild(table);\n syncScrollableRegion(wrapper);\n if (resizeObserver) resizeObserver.observe(wrapper);\n }\n function enhanceTables(root) {\n if (!root) return;\n if (root.nodeType === 1 && root.matches && root.matches('.wysiwyg table')) enhanceTable(root);\n if (root.querySelectorAll) root.querySelectorAll('.wysiwyg table').forEach(enhanceTable);\n }\n enhanceTables(document);\n if ('MutationObserver' in window && document.body) {\n new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(enhanceTables);\n });\n }).observe(document.body, { childList: true, subtree: true });\n }\n})();\n(function initPopups() {\n var POPUP_CLOSE_MS = 340;\n var activePopup = null; \/\/ текущий .popup[data-popup]\n var lastFocus = null; \/\/ элемент, на который вернуть фокус при закрытии\n var loadingTriggerBtn = null; \/\/ кнопка, открывшая remote-форму\n var LOADING_POPUP_NAME = '__loading';\n var scrollLocked = false;\n var closeTimer = null; \/\/ fallback, если transitionend не сработал\n var hasStableGutter = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('scrollbar-gutter', 'stable');\n var supportsInert = typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\n var FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n function isFocusableElement(el) {\n if (!el || el.disabled || el.getAttribute('aria-hidden') === 'true') return false;\n if (!el.matches(FOCUSABLE_SELECTOR)) return false;\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n }\n function getDialogFocusableElements(dialog) {\n if (!dialog) return [];\n return Array.prototype.filter.call(\n dialog.querySelectorAll(FOCUSABLE_SELECTOR),\n isFocusableElement\n );\n }\n function getInitialFocusTarget(popup) {\n var okBtn = popup.querySelector('.popup-form-result__ok');\n if (okBtn) return okBtn;\n var form = popup.querySelector('form[data-popup-form], form.popup-form');\n if (form) {\n var field = form.querySelector(\n 'input:not([type=\"hidden\"]):not([disabled]), select:not([disabled]), textarea:not([disabled])'\n );\n if (field) return field;\n }\n return popup.querySelector('.popup__close');\n }\n function setPageInert(inert) {\n if (!supportsInert) return;\n var popupsRoot = document.querySelector('.popups, [data-popups-root]');\n Array.prototype.forEach.call(document.body.children, function (child) {\n if (popupsRoot && child === popupsRoot) return;\n child.inert = inert;\n });\n }\n function handlePopupKeydown(event) {\n if (!activePopup) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n closePopup();\n return;\n }\n if (event.key !== 'Tab') return;\n var dialog = activePopup.querySelector('.popup__dialog');\n if (!dialog) return;\n var focusable = getDialogFocusableElements(dialog);\n if (!focusable.length) {\n event.preventDefault();\n restoreFocus(dialog);\n return;\n }\n var first = focusable[0];\n var last = focusable[focusable.length - 1];\n var active = document.activeElement;\n if (event.shiftKey) {\n if (active === first || !dialog.contains(active)) {\n event.preventDefault();\n restoreFocus(last);\n }\n return;\n }\n if (active === last || !dialog.contains(active)) {\n event.preventDefault();\n restoreFocus(first);\n }\n }\n function getScrollbarWidth() {\n return window.innerWidth - document.documentElement.clientWidth;\n }\n function lockScroll() {\n if (scrollLocked) return;\n scrollLocked = true;\n if (!hasStableGutter) {\n var sbw = getScrollbarWidth();\n if (sbw > 0) {\n document.documentElement.style.setProperty('--popup-scrollbar-width', sbw + 'px');\n document.documentElement.style.paddingRight = 'var(--popup-scrollbar-width)';\n }\n }\n document.documentElement.classList.add('is-popup-open');\n setPageInert(true);\n }\n function unlockScroll() {\n if (!scrollLocked) return;\n document.documentElement.classList.remove('is-popup-open');\n if (!hasStableGutter) {\n document.documentElement.style.paddingRight = '';\n document.documentElement.style.removeProperty('--popup-scrollbar-width');\n }\n scrollLocked = false;\n setPageInert(false);\n }\n function restoreFocus(target) {\n if (target && typeof target.focus === 'function') {\n target.focus({ preventScroll: true });\n }\n }\n function clearCloseTimer() {\n if (closeTimer) {\n clearTimeout(closeTimer);\n closeTimer = null;\n }\n }\n function findPopup(name) {\n return document.querySelector('.popup[data-popup=\"' + name + '\"]');\n }\n function getFormsFragmentUrl(customUrl) {\n if (customUrl) return customUrl;\n var url = new URL(window.location.href);\n url.searchParams.set('form', '1');\n return url.toString();\n }\n function ensurePopupsRoot() {\n var root = document.querySelector('.popups');\n if (!root) {\n root = document.createElement('div');\n root.className = 'popups';\n root.setAttribute('aria-live', 'polite');\n root.setAttribute('data-popups-root', '');\n document.body.appendChild(root);\n }\n return root;\n }\n function mountPopupNode(popupNode) {\n var name = popupNode.getAttribute('data-popup');\n var root = ensurePopupsRoot();\n var existing = root.querySelector('.popup[data-popup=\"' + name + '\"]');\n if (existing) {\n existing.replaceWith(popupNode);\n } else {\n root.appendChild(popupNode);\n }\n if (window.FormUi) window.FormUi.init(popupNode);\n return popupNode;\n }\n function clearPopupLoadingTrigger() {\n if (!loadingTriggerBtn) return;\n loadingTriggerBtn.removeAttribute('aria-busy');\n delete loadingTriggerBtn.dataset.popupLoading;\n loadingTriggerBtn = null;\n }\n function ensureLoadingPopup() {\n var root = ensurePopupsRoot();\n var popup = root.querySelector('.popup[data-popup=\"' + LOADING_POPUP_NAME + '\"]');\n if (popup) return popup;\n popup = document.createElement('div');\n popup.className = 'popup popup--form-loading';\n popup.setAttribute('data-popup', LOADING_POPUP_NAME);\n popup.setAttribute('role', 'presentation');\n popup.setAttribute('aria-busy', 'true');\n popup.hidden = true;\n popup.innerHTML =\n '<div class=\"popup-form-loading\" data-popup-close role=\"status\" aria-live=\"polite\" aria-label=\"Загрузка формы\">' +\n '<span class=\"ui-preloader\" aria-hidden=\"true\"><\/span>' +\n '<\/div>';\n root.appendChild(popup);\n return popup;\n }\n function openPopupLoading(triggerBtn) {\n closePopup(true);\n var popup = ensureLoadingPopup();\n if (triggerBtn) {\n loadingTriggerBtn = triggerBtn;\n triggerBtn.setAttribute('aria-busy', 'true');\n triggerBtn.dataset.popupLoading = '1';\n }\n lockScroll();\n lastFocus = document.activeElement;\n popup.hidden = false;\n activePopup = popup;\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n if (activePopup !== popup) return;\n popup.classList.add('is-open');\n });\n });\n }\n function closePopupLoading() {\n var popup = document.querySelector('.popup[data-popup=\"' + LOADING_POPUP_NAME + '\"]');\n clearPopupLoadingTrigger();\n if (!popup || popup.hidden) return;\n if (activePopup === popup) {\n activePopup = null;\n lastFocus = null;\n }\n popup.classList.remove('is-open');\n popup.hidden = true;\n popup.removeAttribute('aria-busy');\n unlockScroll();\n }\n function fetchAndMountPopup(name, url, options) {\n options = options || {};\n return fetch(url, {\n credentials: 'same-origin',\n headers: { Accept: 'text\/html' },\n signal: options.signal,\n })\n .then(function (res) {\n if (!res.ok) throw new Error('HTTP ' + res.status);\n return res.text();\n })\n .then(function (html) {\n var doc = new DOMParser().parseFromString(html, 'text\/html');\n var popup = doc.querySelector('.popup[data-popup=\"' + name + '\"]');\n if (!popup) throw new Error('popup \"' + name + '\" not found in fragment');\n return mountPopupNode(document.importNode(popup, true));\n });\n }\n function renderMedia(slot, options) {\n slot.innerHTML = '';\n var src = options.src || '';\n var kind = options.kind || 'image';\n if (!src) return;\n if (kind === 'video') {\n if (\/youtube\\.com|youtu\\.be|vimeo\\.com\/.test(src)) {\n var iframe = document.createElement('iframe');\n iframe.src = src;\n iframe.title = options.title || 'Видео';\n iframe.allow = 'autoplay; fullscreen; picture-in-picture';\n iframe.allowFullscreen = true;\n slot.appendChild(iframe);\n return;\n }\n var video = document.createElement('video');\n video.src = src;\n video.controls = true;\n video.autoplay = true;\n video.playsInline = true;\n if (options.poster) video.poster = options.poster;\n slot.appendChild(video);\n var playPromise = video.play();\n if (playPromise && typeof playPromise.catch === 'function') {\n playPromise.catch(function () {\n video.muted = true;\n video.play();\n });\n }\n return;\n }\n var img = document.createElement('img');\n img.src = src;\n img.alt = options.alt || '';\n slot.appendChild(img);\n }\n function renderStarsRating(rating, size) {\n size = size || 'sm';\n rating = Math.max(0, Math.min(5, parseFloat(rating) || 0));\n var wrap = document.createElement('span');\n wrap.className = 'stars-rating stars-rating--' + size;\n wrap.style.setProperty('--stars-rating-value', String(rating));\n wrap.setAttribute('aria-hidden', 'true');\n ['empty', 'fill'].forEach(function (layer) {\n var layerEl = document.createElement('span');\n layerEl.className = 'stars-rating__layer stars-rating__layer--' + layer;\n for (var i = 0; i < 5; i++) {\n var svg = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n svg.setAttribute('class', 'icon stars-rating__icon');\n svg.setAttribute('aria-hidden', 'true');\n var use = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n use.setAttribute('href', '#icon-star');\n svg.appendChild(use);\n layerEl.appendChild(svg);\n }\n wrap.appendChild(layerEl);\n });\n return wrap;\n }\n function renderMediaMeta(popup, options) {\n var meta = popup.querySelector('[data-popup-media-meta]');\n if (!meta) return;\n var author = options.author || '';\n var service = options.service || '';\n var rating = Math.max(0, Math.min(5, parseFloat(options.rating) || 0));\n var authorEl = meta.querySelector('[data-popup-media-author]');\n var starsEl = meta.querySelector('[data-popup-media-stars]');\n var serviceRow = meta.querySelector('[data-popup-media-service]');\n var serviceValueEl = meta.querySelector('[data-popup-media-service-value]');\n if (!author && !service && !rating) {\n meta.hidden = true;\n if (authorEl) authorEl.textContent = '';\n if (starsEl) starsEl.innerHTML = '';\n if (serviceRow) serviceRow.hidden = true;\n if (serviceValueEl) serviceValueEl.textContent = '';\n return;\n }\n meta.hidden = false;\n if (authorEl) {\n authorEl.textContent = author;\n authorEl.hidden = !author;\n }\n if (starsEl) {\n starsEl.innerHTML = '';\n if (rating > 0) {\n starsEl.appendChild(renderStarsRating(rating, 'sm'));\n starsEl.hidden = false;\n } else {\n starsEl.hidden = true;\n }\n }\n if (serviceRow && serviceValueEl) {\n if (service) {\n serviceValueEl.textContent = service;\n serviceRow.hidden = false;\n } else {\n serviceValueEl.textContent = '';\n serviceRow.hidden = true;\n }\n }\n }\n function clearMediaMeta(popup) {\n renderMediaMeta(popup, {});\n }\n function finishClosePopup(popup) {\n if (popup.hidden) return;\n popup.hidden = true;\n popup.classList.remove('is-open');\n if (popup.dataset.popup === 'media') {\n var slot = popup.querySelector('[data-popup-media-slot]');\n if (slot) slot.innerHTML = '';\n clearMediaMeta(popup);\n }\n if (popup.dataset.popup === 'review') {\n var reviewSlot = popup.querySelector('[data-popup-review-slot]');\n if (reviewSlot) reviewSlot.innerHTML = '';\n }\n if (popup.dataset.popup === LOADING_POPUP_NAME) {\n clearPopupLoadingTrigger();\n popup.removeAttribute('aria-busy');\n document.dispatchEvent(new CustomEvent('popup:loading-closed'));\n }\n }\n function closePopup(instant) {\n if (!activePopup) return;\n var popup = activePopup;\n var focusTarget = lastFocus;\n clearCloseTimer();\n if (instant) {\n activePopup = null;\n lastFocus = null;\n finishClosePopup(popup);\n unlockScroll();\n restoreFocus(focusTarget);\n return;\n }\n popup.classList.remove('is-open');\n var closed = false;\n function completeClose() {\n if (closed || popup.hidden) return;\n closed = true;\n clearCloseTimer();\n if (activePopup === popup) {\n activePopup = null;\n lastFocus = null;\n }\n finishClosePopup(popup);\n unlockScroll();\n if (!activePopup) {\n restoreFocus(focusTarget);\n }\n }\n var dialog = popup.querySelector('.popup__dialog');\n if (dialog) {\n dialog.addEventListener('transitionend', function onClose(event) {\n if (event.target !== dialog || event.propertyName !== 'transform') return;\n dialog.removeEventListener('transitionend', onClose);\n completeClose();\n });\n }\n closeTimer = setTimeout(function () {\n closeTimer = null;\n completeClose();\n }, POPUP_CLOSE_MS);\n }\n function openPopup(name, options) {\n options = options || {};\n var popup = findPopup(name);\n if (!popup) {\n console.warn('[popup] не найден:', name);\n return;\n }\n closePopup(true);\n if (name === 'media') {\n var slot = popup.querySelector('[data-popup-media-slot]');\n if (slot) renderMedia(slot, options);\n renderMediaMeta(popup, options);\n }\n if (name === 'review') {\n var reviewSlot = popup.querySelector('[data-popup-review-slot]');\n if (reviewSlot) reviewSlot.innerHTML = options.html || '';\n }\n lockScroll();\n lastFocus = document.activeElement;\n popup.hidden = false;\n activePopup = popup;\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n if (activePopup !== popup) return;\n popup.classList.add('is-open');\n restoreFocus(getInitialFocusTarget(popup));\n });\n });\n }\n window.Popup = {\n open: openPopup,\n close: closePopup,\n openLoading: openPopupLoading,\n closeLoading: closePopupLoading,\n fetchAndMount: fetchAndMountPopup,\n getFormsFragmentUrl: getFormsFragmentUrl,\n };\n document.addEventListener('click', function (event) {\n var openBtn = event.target.closest('[data-popup-open]');\n if (openBtn) {\n event.preventDefault();\n var popupName = openBtn.dataset.popupOpen;\n var popupOptions = {\n src: openBtn.dataset.popupSrc || '',\n kind: openBtn.dataset.popupKind || 'image',\n alt: openBtn.dataset.popupAlt || '',\n poster: openBtn.dataset.popupPoster || '',\n title: openBtn.dataset.popupTitle || '',\n author: openBtn.dataset.popupAuthor || '',\n service: openBtn.dataset.popupService || '',\n rating: openBtn.dataset.popupRating || '',\n };\n if (window.PopupForms && window.PopupForms.handleOpenButton && window.PopupForms.handleOpenButton(openBtn, popupOptions)) {\n } else {\n openPopup(popupName, popupOptions);\n }\n openBtn.classList.add('is-pressed');\n setTimeout(function () { openBtn.classList.remove('is-pressed'); }, 160);\n return;\n }\n if (event.target.closest('[data-popup-close]')) {\n event.preventDefault();\n closePopup();\n }\n });\n document.addEventListener('keydown', handlePopupKeydown);\n})();\n(function initPhoneMasks() {\n var PREFIX = '+7 (';\n function extractDigits(value) {\n var digits = (value || '').replace(\/\\D\/g, '');\n if (digits.charAt(0) === '7' || digits.charAt(0) === '8') digits = digits.slice(1);\n return digits.slice(0, 10);\n }\n function formatDigits(digits) {\n if (!digits.length) return '';\n var out = '+7 (' + digits.slice(0, 3);\n if (digits.length <= 3) return out;\n out += ')-' + digits.slice(3, 6);\n if (digits.length <= 6) return out;\n out += '-' + digits.slice(6, 8);\n if (digits.length <= 8) return out;\n return out + '-' + digits.slice(8, 10);\n }\n function countDigitsBefore(value, pos) {\n var count = 0;\n for (var i = 0; i < pos && i < value.length; i++) {\n if (\/\\d\/.test(value.charAt(i))) count++;\n }\n return count;\n }\n function cursorAfterDigits(formatted, digitCount) {\n if (digitCount <= 0) {\n var open = formatted.indexOf('(');\n return open >= 0 ? open + 1 : 0;\n }\n var seen = 0;\n for (var i = 0; i < formatted.length; i++) {\n if (\/\\d\/.test(formatted.charAt(i))) {\n seen++;\n if (seen === digitCount) return i + 1;\n }\n }\n return formatted.length;\n }\n function syncPhoneInput(input, caretDigitCount) {\n var digits = extractDigits(input.value);\n var focused = document.activeElement === input;\n if (!digits.length) {\n input.value = focused ? PREFIX : '';\n if (focused && typeof caretDigitCount !== 'number' && input.setSelectionRange) {\n input.setSelectionRange(input.value.length, input.value.length);\n }\n return;\n }\n var formatted = formatDigits(digits);\n input.value = formatted;\n if (typeof caretDigitCount === 'number' && input.setSelectionRange) {\n var pos = cursorAfterDigits(formatted, caretDigitCount);\n input.setSelectionRange(pos, pos);\n }\n }\n function normalizeRequiredPhone(input) {\n if (!input.hasAttribute('required')) return;\n if (extractDigits(input.value).length < 10) input.value = '';\n }\n function preparePhoneForValidation(input) {\n if (!input.hasAttribute('required')) return;\n var digits = extractDigits(input.value).length;\n if (digits === 0) {\n normalizeRequiredPhone(input);\n input.setCustomValidity('');\n return;\n }\n if (digits < 10) {\n input.setCustomValidity('Введите номер телефона полностью');\n return;\n }\n input.setCustomValidity('');\n }\n function bindPhoneInput(input) {\n if (input.dataset.phoneMaskBound) return;\n input.dataset.phoneMaskBound = '1';\n input.setAttribute('inputmode', 'tel');\n if (input.hasAttribute('required')) {\n input.addEventListener('invalid', function () {\n normalizeRequiredPhone(input);\n });\n }\n input.addEventListener('focus', function () {\n syncPhoneInput(input);\n });\n input.addEventListener('blur', function () {\n syncPhoneInput(input);\n });\n input.addEventListener('input', function () {\n input.setCustomValidity('');\n var caretDigitCount = countDigitsBefore(input.value, input.selectionStart || 0);\n syncPhoneInput(input, caretDigitCount);\n });\n input.addEventListener('keydown', function (event) {\n if (event.key !== 'Backspace') return;\n var start = input.selectionStart || 0;\n var end = input.selectionEnd || 0;\n if (start !== end) return;\n if (start <= PREFIX.length) {\n event.preventDefault();\n input.value = '';\n }\n });\n input.addEventListener('paste', function (event) {\n event.preventDefault();\n var text = (event.clipboardData || window.clipboardData).getData('text') || '';\n var start = input.selectionStart || 0;\n var end = input.selectionEnd || 0;\n var before = countDigitsBefore(input.value, start);\n var next = input.value.slice(0, start) + text + input.value.slice(end);\n input.value = next;\n syncPhoneInput(input, before + extractDigits(text).length);\n });\n }\n function init(root) {\n (root || document).querySelectorAll('input[type=\"tel\"]').forEach(bindPhoneInput);\n }\n window.PhoneMask = {\n init: init,\n normalizeRequired: normalizeRequiredPhone,\n prepareForValidation: preparePhoneForValidation,\n };\n init();\n})();\n(function initCharCounters() {\n function syncCounter(field) {\n var wrap = field.closest('.field__textarea-wrap');\n if (!wrap) return;\n var counter = wrap.querySelector('[data-char-counter]');\n if (!counter) return;\n var max = parseInt(field.getAttribute('maxlength'), 10) || 1500;\n var length = (field.value || '').length;\n counter.textContent = length + '\/' + max;\n }\n function bindCharCounter(field) {\n if (field.dataset.charCounterBound) return;\n field.dataset.charCounterBound = '1';\n field.addEventListener('input', function () {\n syncCounter(field);\n });\n syncCounter(field);\n }\n function init(root) {\n (root || document).querySelectorAll('[data-char-counter-field]').forEach(bindCharCounter);\n }\n window.CharCounter = { init: init };\n init();\n})();\n(function initBviLoader() {\n var loaderScript = document.currentScript || document.querySelector('script[data-bvi-js]');\n var cssUrl = loaderScript ? loaderScript.getAttribute('data-bvi-css') : '';\n var jsUrl = loaderScript ? loaderScript.getAttribute('data-bvi-js') : '';\n var loadPromise = null;\n function hasLibrary() {\n return typeof window.isvek !== 'undefined' && typeof window.isvek.Bvi === 'function';\n }\n function boot() {\n if (!hasLibrary()) return null;\n if (window.__bviInstance) return window.__bviInstance;\n window.__bviInstance = new window.isvek.Bvi({\n target: '.bvi-open',\n fontSize: 16,\n theme: 'white',\n speech: true,\n lang: 'ru-RU',\n });\n return window.__bviInstance;\n }\n function loadStyle(url) {\n var current = document.querySelector('link[data-bvi-resource=\"style\"]');\n if (current) {\n return current.sheet\n ? Promise.resolve()\n : new Promise(function (resolve, reject) {\n current.addEventListener('load', resolve, { once: true });\n current.addEventListener('error', reject, { once: true });\n });\n }\n return new Promise(function (resolve, reject) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n link.setAttribute('data-bvi-resource', 'style');\n link.addEventListener('load', resolve, { once: true });\n link.addEventListener('error', function () {\n link.remove();\n reject(new Error('BVI stylesheet failed to load'));\n }, { once: true });\n document.head.appendChild(link);\n });\n }\n function loadScript(url) {\n var current = document.querySelector('script[data-bvi-resource=\"script\"]');\n if (current) {\n return hasLibrary()\n ? Promise.resolve()\n : new Promise(function (resolve, reject) {\n current.addEventListener('load', resolve, { once: true });\n current.addEventListener('error', reject, { once: true });\n });\n }\n return new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.setAttribute('data-bvi-resource', 'script');\n script.addEventListener('load', resolve, { once: true });\n script.addEventListener('error', function () {\n script.remove();\n reject(new Error('BVI script failed to load'));\n }, { once: true });\n document.head.appendChild(script);\n });\n }\n function ensureLoaded() {\n if (window.__bviInstance) return Promise.resolve(window.__bviInstance);\n if (loadPromise) return loadPromise;\n if (!cssUrl || !jsUrl) {\n return hasLibrary()\n ? Promise.resolve(boot())\n : Promise.reject(new Error('BVI assets are unavailable'));\n }\n loadPromise = Promise.all([loadStyle(cssUrl), loadScript(jsUrl)])\n .then(function () {\n if (!hasLibrary()) throw new Error('BVI library did not initialize');\n return boot();\n })\n .catch(function (error) {\n loadPromise = null;\n throw error;\n });\n return loadPromise;\n }\n function findTrigger(target) {\n return target && typeof target.closest === 'function' ? target.closest('.bvi-open') : null;\n }\n function preloadOnIntent(event) {\n if (!findTrigger(event.target) || window.__bviInstance) return;\n ensureLoaded().catch(function () {\n });\n }\n document.addEventListener('pointerover', preloadOnIntent);\n document.addEventListener('focusin', preloadOnIntent);\n document.addEventListener('click', function (event) {\n var trigger = findTrigger(event.target);\n if (!trigger || window.__bviInstance) return;\n event.preventDefault();\n ensureLoaded()\n .then(function () {\n trigger.click();\n })\n .catch(function (error) {\n console.error('Не удалось загрузить версию для слабовидящих:', error);\n });\n });\n if (\/(?:^|;\\s*)bvi_panelActive=true(?:;|$)\/.test(document.cookie)) {\n ensureLoaded().catch(function (error) {\n console.error('Не удалось восстановить версию для слабовидящих:', error);\n });\n }\n})();\n(function initSectionReveal() {\n var REVEAL_TRANSITION = 'transform .4s ease';\n function isSectionInViewport(el) {\n var rect = el.getBoundingClientRect();\n return rect.top < window.innerHeight && rect.bottom > 0;\n }\n function revealSection(el) {\n el.style.transition = REVEAL_TRANSITION;\n el.style.transform = 'none';\n }\n function prepareHiddenSection(el) {\n el.style.transform = 'translateY(8px)';\n }\n document.addEventListener('DOMContentLoaded', function () {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n var sections = document.querySelectorAll('.page > section');\n if (!sections.length) return;\n if (!('IntersectionObserver' in window)) return;\n var observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (!entry.isIntersecting) return;\n revealSection(entry.target);\n observer.unobserve(entry.target);\n });\n }, {\n root: null,\n rootMargin: '0px 0px -5% 0px',\n threshold: 0.05,\n });\n sections.forEach(function (el) {\n if (isSectionInViewport(el)) {\n return;\n }\n prepareHiddenSection(el);\n observer.observe(el);\n });\n });\n})();\n(function initSwiperSlideImagesPatch() {\n if (typeof Swiper === 'undefined') return;\n var SwiperOriginal = Swiper;\n var DEFAULT_PRELOAD = 1;\n function resolveElement(el) {\n if (!el) return null;\n if (typeof el === 'string') return document.querySelector(el);\n return el;\n }\n function resolveSlidesPerView(options) {\n var spv = options.slidesPerView;\n if (options.breakpoints && typeof options.breakpoints === 'object') {\n var width = window.innerWidth;\n var points = Object.keys(options.breakpoints)\n .map(Number)\n .filter(function (n) { return !Number.isNaN(n); })\n .sort(function (a, b) { return a - b; });\n var matched = null;\n points.forEach(function (bp) {\n if (width >= bp) matched = bp;\n });\n if (matched !== null && options.breakpoints[matched] && options.breakpoints[matched].slidesPerView != null) {\n spv = options.breakpoints[matched].slidesPerView;\n }\n }\n if (spv === 'auto') return 1;\n if (typeof spv === 'number' && spv > 0) return Math.ceil(spv);\n return 1;\n }\n function getInitiallyVisibleSlideIndices(slideCount, options) {\n var start = typeof options.initialSlide === 'number' ? options.initialSlide : 0;\n if (start < 0) start = 0;\n var visible = resolveSlidesPerView(options);\n var indices = [];\n for (var i = 0; i < visible && start + i < slideCount; i++) {\n indices.push(start + i);\n }\n return indices;\n }\n function shouldKeepImageSrc(img) {\n if (!img || img.getAttribute('data-swiper-lazy-skip') !== null) return true;\n if (img.getAttribute('fetchpriority') === 'high') return true;\n return false;\n }\n function loadSlideImages(slide) {\n if (!slide) return;\n slide.querySelectorAll('img[data-src], img[src]').forEach(function (img) {\n img.setAttribute('loading', img.getAttribute('fetchpriority') === 'high' ? 'eager' : 'lazy');\n if (!img.getAttribute('src')) {\n var src = img.getAttribute('data-src');\n if (!src) return;\n img.setAttribute('src', src);\n img.removeAttribute('data-src');\n var srcset = img.getAttribute('data-srcset');\n if (srcset) {\n img.setAttribute('srcset', srcset);\n img.removeAttribute('data-srcset');\n }\n }\n if (!img.getAttribute('decoding')) {\n img.setAttribute('decoding', 'async');\n }\n });\n }\n function getActuallyVisibleSlides(swiper) {\n var visible = [];\n if (!swiper || !swiper.el || !swiper.slides) return visible;\n var viewport = swiper.el.getBoundingClientRect();\n Array.prototype.forEach.call(swiper.slides, function (slide) {\n if (!slide || !slide.getClientRects().length) return;\n var rect = slide.getBoundingClientRect();\n var horizontal = rect.right > viewport.left + 1 && rect.left < viewport.right - 1;\n var vertical = rect.bottom > viewport.top + 1 && rect.top < viewport.bottom - 1;\n if (rect.width > 0 && rect.height > 0 && horizontal && vertical) {\n visible.push(slide);\n }\n });\n return visible;\n }\n function loadVisibleSlideImages(swiper, amount) {\n if (!swiper || !swiper.slides || !swiper.slides.length) return;\n var spv = swiper.params.slidesPerView === 'auto'\n ? swiper.slidesPerViewDynamic()\n : Math.ceil(swiper.params.slidesPerView) || 1;\n var start = swiper.activeIndex;\n var end = start + spv - 1;\n var len = swiper.slides.length;\n var visibleSlides = getActuallyVisibleSlides(swiper);\n if (!visibleSlides.length) {\n for (var visibleIndex = start; visibleIndex <= Math.min(len - 1, end); visibleIndex++) {\n visibleSlides.push(swiper.slides[visibleIndex]);\n }\n }\n for (var activeIndex = start; activeIndex <= Math.min(len - 1, end); activeIndex++) {\n if (visibleSlides.indexOf(swiper.slides[activeIndex]) === -1) {\n visibleSlides.push(swiper.slides[activeIndex]);\n }\n }\n visibleSlides.forEach(function (slide) {\n loadSlideImages(slide);\n });\n for (var i = Math.max(0, start - amount); i <= Math.min(len - 1, end + amount); i++) {\n if (visibleSlides.indexOf(swiper.slides[i]) !== -1) continue;\n loadSlideImages(swiper.slides[i]);\n }\n }\n function prepareSlides(el, options) {\n if (!el) return;\n var slides = el.querySelectorAll('.swiper-slide');\n if (!slides.length) return;\n var initiallyVisible = getInitiallyVisibleSlideIndices(slides.length, options || {});\n var initiallyVisibleSet = {};\n initiallyVisible.forEach(function (index) {\n initiallyVisibleSet[index] = true;\n });\n slides.forEach(function (slide, index) {\n if (initiallyVisibleSet[index]) return;\n slide.querySelectorAll('img[src]').forEach(function (img) {\n if (shouldKeepImageSrc(img)) return;\n if (img.getAttribute('data-src')) return;\n var src = img.getAttribute('src');\n if (!src) return;\n img.setAttribute('data-src', src);\n img.removeAttribute('src');\n img.setAttribute('loading', 'lazy');\n img.removeAttribute('fetchpriority');\n var srcset = img.getAttribute('srcset');\n if (srcset) {\n img.setAttribute('data-srcset', srcset);\n img.removeAttribute('srcset');\n }\n if (!img.getAttribute('decoding')) {\n img.setAttribute('decoding', 'async');\n }\n });\n });\n el.dataset.swiperLazyPrepared = '1';\n }\n function appendSwiperHook(options, eventName, handler) {\n if (!options.on) {\n options.on = {};\n } else if (!Array.isArray(options.on)) {\n options.on = Object.assign({}, options.on);\n } else {\n options.on = options.on.slice();\n }\n if (Array.isArray(options.on)) {\n var hook = {};\n hook[eventName] = handler;\n options.on.push(hook);\n return;\n }\n var prev = options.on[eventName];\n options.on[eventName] = function () {\n handler.apply(this, arguments);\n if (typeof prev === 'function') {\n prev.apply(this, arguments);\n }\n };\n }\n function mergeSlideImageOptions(params) {\n var options = params ? Object.assign({}, params) : {};\n var preloadAmount = typeof options.lazyPreloadPrevNext === 'number'\n ? Math.max(0, options.lazyPreloadPrevNext)\n : DEFAULT_PRELOAD;\n options.lazyPreloadPrevNext = 0;\n function loadImages(swiper) {\n loadVisibleSlideImages(swiper, preloadAmount);\n }\n appendSwiperHook(options, 'init', loadImages);\n appendSwiperHook(options, 'slideChangeTransitionStart', loadImages);\n appendSwiperHook(options, 'breakpoint', loadImages);\n appendSwiperHook(options, 'resize', loadImages);\n return options;\n }\n function SwiperPatched(el, params) {\n var options = mergeSlideImageOptions(params);\n var element = resolveElement(el);\n if (element) prepareSlides(element, options);\n return new SwiperOriginal(el, options);\n }\n SwiperPatched.prototype = SwiperOriginal.prototype;\n Object.getOwnPropertyNames(SwiperOriginal).forEach(function (key) {\n if (key === 'prototype' || key === 'length' || key === 'name') return;\n try {\n SwiperPatched[key] = SwiperOriginal[key];\n } catch (e) { }\n });\n window.Swiper = SwiperPatched;\n})();\n(function initPopupForms() {\n function isRemoteOpenButton(openBtn) {\n return !!openBtn && openBtn.getAttribute('data-remote') === '1';\n }\n function isLeadFormPopup(popup) {\n if (!popup) return false;\n return !!popup.querySelector('form[data-popup-form], form.popup-form');\n }\n function getFormsFragmentUrl(openBtn) {\n var customUrl = openBtn && openBtn.getAttribute('data-popup-remote-url');\n if (customUrl) return customUrl;\n if (window.Popup && window.Popup.getFormsFragmentUrl) return window.Popup.getFormsFragmentUrl();\n var url = new URL(window.location.href);\n url.searchParams.set('form', '1');\n return url.toString();\n }\n function openRemotePopup(name, options, openBtn) {\n if (!window.Popup || !window.Popup.fetchAndMount || !window.Popup.open) return;\n var cancelled = false;\n var controller = typeof AbortController !== 'undefined' ? new AbortController() : null;\n function onLoadingClosed() {\n cancelled = true;\n if (controller) controller.abort();\n }\n document.addEventListener('popup:loading-closed', onLoadingClosed);\n if (window.Popup.openLoading) {\n window.Popup.openLoading(openBtn);\n }\n window.Popup.fetchAndMount(name, getFormsFragmentUrl(openBtn), {\n signal: controller ? controller.signal : undefined,\n })\n .then(function () {\n document.removeEventListener('popup:loading-closed', onLoadingClosed);\n if (cancelled) return;\n window.Popup.open(name, options);\n })\n .catch(function (err) {\n document.removeEventListener('popup:loading-closed', onLoadingClosed);\n if (cancelled || (err && err.name === 'AbortError')) return;\n console.warn('[popup-remote]', err);\n if (window.Popup.closeLoading) window.Popup.closeLoading();\n window.Popup.open(name, options);\n });\n }\n function setFormResultMessage(popup, message) {\n var textEl = popup.querySelector('[data-form-result-text]');\n if (!textEl) return;\n if (message) {\n textEl.textContent = message;\n return;\n }\n if (textEl.dataset.defaultText) {\n textEl.textContent = textEl.dataset.defaultText;\n }\n }\n function showFormResult(type, options) {\n options = options || {};\n var resultName = type === 'error' ? 'form-error' : 'form-success';\n var sourcePopup = document.querySelector('.popup.is-open');\n if (sourcePopup && isLeadFormPopup(sourcePopup) && window.Popup && window.Popup.close) {\n window.Popup.close(true);\n }\n if (window.Popup && window.Popup.open) {\n window.Popup.open(resultName);\n }\n var openedPopup = document.querySelector('.popup[data-popup=\"' + resultName + '\"]');\n if (openedPopup) setFormResultMessage(openedPopup, options.message || '');\n }\n function isLeadForm(form) {\n if (!form || form.tagName !== 'FORM') return false;\n if (form.method && form.method.toLowerCase() === 'get') return false;\n if (form.hasAttribute('data-form-no-result')) return false;\n if (form.hasAttribute('data-reviews-v5-filters-form')) return false;\n if (form.hasAttribute('data-quiz-v1-form') && form.getAttribute('data-quiz-v1-form') !== '4') return false;\n return true;\n }\n function preparePhoneFieldsForValidation(form) {\n form.querySelectorAll('input[type=\"tel\"][required]').forEach(function (input) {\n if (window.PhoneMask && window.PhoneMask.prepareForValidation) {\n window.PhoneMask.prepareForValidation(input);\n return;\n }\n if (window.PhoneMask && window.PhoneMask.normalizeRequired) {\n window.PhoneMask.normalizeRequired(input);\n }\n });\n }\n function validateLeadForm(form) {\n preparePhoneFieldsForValidation(form);\n if (!form.checkValidity()) {\n form.classList.add('popup-form--submit-attempted');\n form.reportValidity();\n return false;\n }\n form.classList.remove('popup-form--submit-attempted');\n return true;\n }\n function collectQuizPayload(leadForm) {\n var root = leadForm.closest('.quiz-v1');\n if (!root) return new FormData(leadForm);\n var payload = new FormData();\n root.querySelectorAll('[data-quiz-v1-form]').forEach(function (stepForm) {\n new FormData(stepForm).forEach(function (value, key) {\n payload.append(key, value);\n });\n });\n return payload;\n }\n function resetFormAfterSubmit(form) {\n form.querySelectorAll('input[type=\"checkbox\"][name=\"consent\"]').forEach(function (el) {\n el.checked = false;\n });\n form.classList.remove('popup-form--submit-attempted');\n syncConsentGatingVisual(form);\n var quizSubmit = form.querySelector('[data-quiz-v1-submit]');\n if (quizSubmit) quizSubmit.disabled = true;\n form.querySelectorAll('[data-char-counter-field]').forEach(function (field) {\n var wrap = field.closest('.field__textarea-wrap');\n var counter = wrap && wrap.querySelector('[data-char-counter]');\n if (!counter) return;\n var max = parseInt(field.getAttribute('maxlength'), 10) || 1500;\n counter.textContent = '0\/' + max;\n });\n }\n function setFormPending(form, isPending) {\n var dialog = form.closest('.popup__dialog');\n if (!dialog) return;\n var overlay = dialog.querySelector('[data-form-pending]');\n if (isPending) {\n dialog.setAttribute('aria-busy', 'true');\n if (!overlay) {\n overlay = document.createElement('div');\n overlay.className = 'ui-preloader-overlay';\n overlay.setAttribute('data-form-pending', '1');\n overlay.setAttribute('aria-hidden', 'true');\n overlay.innerHTML = '<span class=\"ui-preloader ui-preloader--lg\"><\/span>';\n dialog.appendChild(overlay);\n }\n return;\n }\n dialog.removeAttribute('aria-busy');\n if (overlay) overlay.remove();\n }\n function getLeadSubmitButton(form) {\n return form.querySelector('.popup-form__submit, [data-quiz-v1-submit], button[type=\"submit\"]');\n }\n function isAjaxForm(form) {\n if (form.hasAttribute('data-form-ajax')) return true;\n var action = (form.getAttribute('action') || '').trim();\n return action !== '' && action !== '#' && action.indexOf('javascript:') !== 0;\n }\n function submitLeadFormAjax(form, isQuizLead, payload) {\n var submitBtn = getLeadSubmitButton(form);\n if (submitBtn) submitBtn.disabled = true;\n setFormPending(form, true);\n var headers = {\n Accept: 'application\/json',\n 'X-Requested-With': 'XMLHttpRequest',\n };\n var csrf = document.querySelector('meta[name=\"csrf-token\"]');\n if (csrf && csrf.getAttribute('content')) {\n headers['X-CSRF-Token'] = csrf.getAttribute('content');\n }\n fetch(form.action, {\n method: (form.getAttribute('method') || 'POST').toUpperCase(),\n body: payload,\n credentials: 'same-origin',\n headers: headers,\n })\n .then(function (res) {\n return res.json().then(function (data) {\n return { ok: res.ok, data: data };\n }).catch(function () {\n return { ok: res.ok, data: {} };\n });\n })\n .then(function (result) {\n if (submitBtn) submitBtn.disabled = false;\n setFormPending(form, false);\n var data = result.data || {};\n var success = result.ok && (data.ok === true || data.success === true);\n if (success) {\n form.reset();\n resetFormAfterSubmit(form);\n if (isQuizLead) {\n var quizRoot = form.closest('.quiz-v1');\n if (quizRoot) {\n quizRoot.dispatchEvent(new CustomEvent('quiz-v1:submitted', { bubbles: false }));\n }\n }\n showFormResult('success', {\n message: data.message || form.getAttribute('data-form-success-message') || '',\n });\n return;\n }\n showFormResult('error', {\n message: data.message || data.error || '',\n });\n })\n .catch(function (err) {\n if (submitBtn) submitBtn.disabled = false;\n setFormPending(form, false);\n console.error('[form]', err);\n showFormResult('error');\n });\n }\n function handleLeadFormSubmit(form) {\n var isQuizLead = form.getAttribute('data-quiz-v1-form') === '4';\n var payload = isQuizLead ? collectQuizPayload(form) : new FormData(form);\n if (isAjaxForm(form)) {\n submitLeadFormAjax(form, isQuizLead, payload);\n return;\n }\n console.log(\n '[form] отправка:',\n form.className || form.getAttribute('data-popup-form') || (isQuizLead ? 'quiz-v1' : 'form'),\n payload\n );\n var quizSubmit = form.querySelector('[data-quiz-v1-submit]');\n if (quizSubmit) {\n quizSubmit.classList.add('is-pressed');\n setTimeout(function () { quizSubmit.classList.remove('is-pressed'); }, 160);\n }\n form.reset();\n resetFormAfterSubmit(form);\n if (isQuizLead) {\n var quizRoot = form.closest('.quiz-v1');\n if (quizRoot) {\n quizRoot.dispatchEvent(new CustomEvent('quiz-v1:submitted', { bubbles: false }));\n }\n }\n showFormResult('success', {\n message: form.getAttribute('data-form-success-message') || '',\n });\n }\n function resetConsent(root) {\n (root || document).querySelectorAll('input[type=\"checkbox\"][name=\"consent\"]').forEach(function (el) {\n el.checked = false;\n });\n }\n function syncConsentGatingVisual(form) {\n if (!form || !form.classList.contains('popup-form--consent-gated')) return;\n var consent = form.querySelector('input[name=\"consent\"]');\n var submit = getLeadSubmitButton(form);\n if (!consent || !submit) return;\n var ready = consent.checked;\n form.classList.toggle('is-consent-ready', ready);\n submit.classList.toggle('is-consent-pending', !ready);\n submit.disabled = false;\n }\n function initConsentGating(root) {\n (root || document).querySelectorAll('.popup-form--consent-gated').forEach(function (form) {\n if (form.dataset.consentGatedBound) return;\n form.dataset.consentGatedBound = '1';\n var consent = form.querySelector('input[name=\"consent\"]');\n if (!consent) return;\n consent.addEventListener('change', function () {\n syncConsentGatingVisual(form);\n });\n form.addEventListener('input', function () {\n if (form.classList.contains('popup-form--submit-attempted') && form.checkValidity()) {\n form.classList.remove('popup-form--submit-attempted');\n }\n });\n syncConsentGatingVisual(form);\n });\n }\n function initFormUi(root) {\n resetConsent(root);\n initConsentGating(root);\n if (window.PhoneMask) window.PhoneMask.init(root);\n if (window.CharCounter) window.CharCounter.init(root);\n }\n window.FormUi = { init: initFormUi };\n window.FormResult = {\n showSuccess: function (options) { showFormResult('success', options || {}); },\n showError: function (options) { showFormResult('error', options || {}); },\n };\n window.PopupForms = {\n isRemoteOpenButton: isRemoteOpenButton,\n handleOpenButton: function (openBtn, popupOptions) {\n var popupName = openBtn.dataset.popupOpen;\n if (!isRemoteOpenButton(openBtn)) return false;\n openRemotePopup(popupName, popupOptions || {}, openBtn);\n return true;\n }\n };\n document.addEventListener('submit', function (event) {\n var form = event.target;\n if (!isLeadForm(form)) return;\n event.preventDefault();\n if (!validateLeadForm(form)) return;\n handleLeadFormSubmit(form);\n });\n document.addEventListener('DOMContentLoaded', function () {\n initFormUi(document);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.hero-v2').forEach(function (root) {\n if (root.dataset.heroV2Ready === 'true') return;\n var rootRect = root.getBoundingClientRect();\n var supportsVisibilityObserver = 'IntersectionObserver' in window;\n var isSectionVisible = !supportsVisibilityObserver || (rootRect.bottom > 0 && rootRect.top < window.innerHeight);\n var motionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n function reduceMotion() {\n return motionQuery.matches;\n }\n function saveDataEnabled() {\n return !!(connection && connection.saveData);\n }\n function shouldSkipAutoplay() {\n return reduceMotion() || saveDataEnabled();\n }\n function prepareVideoEl(video) {\n video.muted = true;\n video.defaultMuted = true;\n video.playsInline = true;\n video.setAttribute('playsinline', '');\n video.setAttribute('webkit-playsinline', '');\n video.setAttribute('preload', 'none');\n }\n function unloadVideo(video) {\n if (!video) return;\n video.pause();\n var source = video.querySelector('source');\n if (!source) return;\n var href = source.getAttribute('src') || source.getAttribute('data-src');\n if (href) source.setAttribute('data-src', href);\n source.removeAttribute('src');\n video.removeAttribute('src');\n try { video.load(); } catch (err) {}\n }\n function ensureVideoSource(video) {\n var source = video.querySelector('source[data-src]');\n if (!source || !source.dataset.src) return;\n if (source.getAttribute('src') === source.dataset.src) return;\n source.src = source.dataset.src;\n video.load();\n }\n function freezeVideo(video) {\n if (!video) return;\n video.classList.add('is-frozen');\n unloadVideo(video);\n }\n function playSlideVideo(video) {\n if (!video) return;\n prepareVideoEl(video);\n if (!isSectionVisible || document.hidden || shouldSkipAutoplay()) {\n freezeVideo(video);\n return;\n }\n video.classList.remove('is-frozen');\n ensureVideoSource(video);\n try { video.currentTime = 0; } catch (err) {}\n var playPromise = video.play();\n if (playPromise && typeof playPromise.catch === 'function') {\n playPromise.catch(function () {\n freezeVideo(video);\n });\n }\n }\n function pauseInactiveVideo(video) {\n if (!video) return;\n video.classList.remove('is-frozen');\n unloadVideo(video);\n }\n function stopAllSlideVideos() {\n root.querySelectorAll('.hero-v2__slide-video').forEach(freezeVideo);\n }\n function syncSlideVideos() {\n var videos = root.querySelectorAll('.hero-v2__slide-video');\n var activeSlide = root.querySelector('.swiper-slide-active') || root.querySelector('.swiper-slide');\n Array.prototype.forEach.call(videos, function (video) {\n var slide = video.closest('.swiper-slide');\n var isActive = !slide || slide === activeSlide;\n if (isActive) playSlideVideo(video);\n else pauseInactiveVideo(video);\n });\n }\n function syncPlaybackAvailability() {\n if (root.dataset.heroV2Ready !== 'true') return;\n if (!isSectionVisible || document.hidden || shouldSkipAutoplay()) {\n stopAllSlideVideos();\n return;\n }\n syncSlideVideos();\n }\n function initHero() {\n if (root.dataset.heroV2Ready === 'true') return;\n root.dataset.heroV2Ready = 'true';\n var sliderEl = root.querySelector('.hero-v2__card.swiper');\n if (!sliderEl) return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2 || typeof Swiper === 'undefined') {\n syncSlideVideos();\n return;\n }\n var paginationEl = root.querySelector('.hero-v2__slider-pagination');\n var isMobile = window.matchMedia('(max-width: 768px)').matches;\n function syncHeroPagination(swiper) {\n if (!swiper.pagination || !paginationEl) return;\n var mobile = window.matchMedia('(max-width: 768px)').matches;\n if (mobile) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: 1,\n speed: 300,\n loop: !isMobile,\n autoHeight: isMobile,\n navigation: {\n nextEl: root.querySelector('.hero-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.hero-v2__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) {\n syncHeroPagination(swiper);\n syncSlideVideos();\n },\n slideChangeTransitionStart: stopAllSlideVideos,\n slideChangeTransitionEnd: syncSlideVideos,\n resize: syncHeroPagination,\n breakpoint: syncHeroPagination,\n },\n });\n root.querySelectorAll('.hero-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (supportsVisibilityObserver) {\n var visibilityObserver = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (entry.target !== root) return;\n isSectionVisible = entry.isIntersecting;\n syncPlaybackAvailability();\n });\n }, { threshold: 0 });\n visibilityObserver.observe(root);\n }\n document.addEventListener('visibilitychange', syncPlaybackAvailability);\n if (motionQuery.addEventListener) {\n motionQuery.addEventListener('change', syncPlaybackAvailability);\n } else if (motionQuery.addListener) {\n motionQuery.addListener(syncPlaybackAvailability);\n }\n if (connection && connection.addEventListener) {\n connection.addEventListener('change', syncPlaybackAvailability);\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initHero);\n } else {\n initHero();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('benefits\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('our-approach\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('services\/variant-3');\n function initRoot(root) {\n if (root.dataset.servicesV3Ready === 'true') return;\n root.dataset.servicesV3Ready = 'true';\n var items = root.querySelectorAll('.services-v3__item');\n if (!items.length) return;\n var list = root.querySelector('.services-v3__list');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 350;\n var activeDesktopIndex = 0;\n function isDesktop() {\n return desktopMq.matches;\n }\n function shouldAnimateAccordion() {\n return !isDesktop() && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!list) return;\n if (!isDesktop()) {\n list.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-services-v3-panel].is-active');\n if (!activePanel) {\n list.style.minHeight = '';\n return;\n }\n list.style.minHeight = '';\n var tabsHeight = list.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n list.style.minHeight = Math.max(tabsHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function deactivateTab(tab) {\n if (!tab) return;\n tab.classList.remove('is-active');\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n }\n function deactivateAccordionTabVisual(item) {\n deactivateTab(item.querySelector('[data-services-v3-tab]'));\n }\n function finalizeAccordionClose(item) {\n var panel = item.querySelector('[data-services-v3-panel]');\n deactivateAccordionTabVisual(item);\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n }\n }\n function activateDesktop(index) {\n activeDesktopIndex = index;\n root.querySelectorAll('[data-services-v3-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-services-v3-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n root.querySelectorAll('[data-services-v3-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-services-v3-index'), 10);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, instantVisual) {\n var panel = item.querySelector('[data-services-v3-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n panel.setAttribute('aria-hidden', 'true');\n if (instantVisual) {\n deactivateAccordionTabVisual(item);\n }\n if (!shouldAnimateAccordion()) {\n finalizeAccordionClose(item);\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n finalizeAccordionClose(item);\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var tab = item.querySelector('[data-services-v3-tab]');\n var panel = item.querySelector('[data-services-v3-panel]');\n if (!panel) return;\n var index = parseInt(panel.getAttribute('data-services-v3-index'), 10);\n if (!isNaN(index)) {\n activeDesktopIndex = index;\n }\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-selected', 'true');\n tab.tabIndex = 0;\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n if (shouldAnimateAccordion()) {\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n return;\n }\n item.classList.add('is-open');\n }\n function resetMobileAccordion() {\n items.forEach(function (item) {\n item.classList.remove('is-open');\n deactivateAccordionTabVisual(item);\n var panel = item.querySelector('[data-services-v3-panel]');\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n panel.setAttribute('aria-hidden', 'true');\n }\n });\n }\n function syncLayout() {\n if (isDesktop()) {\n activateDesktop(activeDesktopIndex);\n syncStageHeight();\n return;\n }\n if (list) {\n list.style.minHeight = '';\n }\n resetMobileAccordion();\n }\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-services-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-services-v3-index'), 10);\n if (isNaN(index)) return;\n if (isDesktop()) {\n activateDesktop(index);\n return;\n }\n var item = tab.closest('.services-v3__item');\n if (!item) return;\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n });\n root.addEventListener('keydown', function (event) {\n var tab = event.target.closest('[data-services-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-services-v3-tab]'));\n var index = tabs.indexOf(tab);\n if (index === -1) return;\n var nextIndex = index;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (index + 1) % tabs.length;\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextIndex = (index - 1 + tabs.length) % tabs.length;\n } else {\n return;\n }\n event.preventDefault();\n var nextTab = tabs[nextIndex];\n var nextItemIndex = parseInt(nextTab.getAttribute('data-services-v3-index'), 10);\n if (isDesktop()) {\n activateDesktop(nextItemIndex);\n nextTab.focus();\n return;\n }\n var item = nextTab.closest('.services-v3__item');\n if (!item) return;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n nextTab.focus();\n });\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', syncLayout);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(syncLayout);\n }\n root.querySelectorAll('.services-v3__media-img').forEach(function (img) {\n if (img.complete) return;\n img.addEventListener('load', syncStageHeight, { once: true });\n });\n window.addEventListener('resize', scheduleStageHeight);\n syncLayout();\n }\n function boot() {\n document.querySelectorAll('.services-v3').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v1').forEach(function (root) {\n if (root.dataset.casesV1Ready === 'true') return;\n root.dataset.casesV1Ready = 'true';\n var sliderEl = root.querySelector('.cases-v1__slider.swiper');\n if (!sliderEl) return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n var paginationEl = root.querySelector('.cases-v1__pagination');\n var paginationHost = root.querySelector('.cases-v1__slider-foot .slider-pagination-host');\n var navPrev = root.querySelector('.cases-v1__slider-nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.cases-v1__slider-nav .slider-nav__btn--next');\n var canSlide = slides.length > 1;\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n var stackMetricsObserver = null;\n var stackMetricsFrame = null;\n function syncStackMetrics() {\n if (mobileMq.matches) {\n root.style.removeProperty('--cases-v1-panel-h');\n root.style.removeProperty('--cases-v1-stack-tail');\n return;\n }\n var panelHeight = 0;\n root.querySelectorAll('.cases-v1__panel').forEach(function (panel) {\n panelHeight = Math.max(panelHeight, panel.offsetHeight);\n });\n if (panelHeight > 0) {\n root.style.setProperty('--cases-v1-panel-h', panelHeight + 'px');\n root.style.setProperty('--cases-v1-stack-tail', canSlide ? '64px' : '0px');\n }\n }\n function scheduleStackMetrics() {\n if (stackMetricsFrame !== null) return;\n stackMetricsFrame = window.requestAnimationFrame(function () {\n stackMetricsFrame = null;\n syncStackMetrics();\n });\n }\n function observeStackMetrics() {\n if (typeof ResizeObserver !== 'function' || stackMetricsObserver) return;\n stackMetricsObserver = new ResizeObserver(scheduleStackMetrics);\n root.querySelectorAll('.cases-v1__panel').forEach(function (panel) {\n stackMetricsObserver.observe(panel);\n });\n }\n function syncDotsPagination(swiper, options) {\n if (!swiper || !swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n }\n function destroyMobileSwiper() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n sliderEl.classList.remove('is-settled');\n }\n function initMobileSwiper() {\n if (!mobileMq.matches || !canSlide || swiperInstance || typeof Swiper === 'undefined') return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 400,\n loop: false,\n rewind: true,\n allowTouchMove: true,\n roundLengths: true,\n watchOverflow: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n on: {\n init: function (swiper) {\n swiper.el.classList.add('is-settled');\n swiper.update();\n syncDotsPagination(swiper);\n },\n resize: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper);\n },\n slideChange: function (swiper) {\n syncDotsPagination(swiper, { forceRender: false });\n },\n touchStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n slideChangeTransitionStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n transitionEnd: function (swiper) {\n swiper.el.classList.add('is-settled');\n },\n },\n });\n root.querySelectorAll('.cases-v1__slider-nav .slider-nav__btn').forEach(function (btn) {\n if (btn.dataset.casesV1NavReady === 'true') return;\n btn.dataset.casesV1NavReady = 'true';\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n function syncViewportMode() {\n if (mobileMq.matches) {\n initMobileSwiper();\n return;\n }\n destroyMobileSwiper();\n if (paginationHost) paginationHost.hidden = true;\n syncStackMetrics();\n }\n if (canSlide) {\n function bootSwiper() {\n syncViewportMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncViewportMode);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncViewportMode);\n }\n observeStackMetrics();\n if (typeof ResizeObserver !== 'function') {\n window.addEventListener('resize', scheduleStackMetrics);\n }\n window.addEventListener('load', scheduleStackMetrics);\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(scheduleStackMetrics);\n }\n } else {\n sliderEl.classList.add('cases-v1__slider--static');\n observeStackMetrics();\n syncStackMetrics();\n if (typeof ResizeObserver !== 'function') {\n window.addEventListener('resize', scheduleStackMetrics);\n }\n window.addEventListener('load', scheduleStackMetrics);\n }\n initBeforeAfterSliders();\n scheduleStackMetrics();\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v1__media').forEach(function (media) {\n if (media.dataset.casesV1BeforeAfterReady === 'true') return;\n media.dataset.casesV1BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v1__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV1BlurTimer) {\n clearTimeout(media.__casesV1BlurTimer);\n media.__casesV1BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV1BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV1BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v1-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n if (swiperInstance && mobileMq.matches) event.stopPropagation();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var step = 2;\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v1-reveal') || '50').replace('%', '')) || 50;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - step);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + step);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('doctors\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.doctors-v4').forEach(function (root) {\n if (root.dataset.doctorsV4Ready === 'true') return;\n root.dataset.doctorsV4Ready = 'true';\n if (typeof Swiper === 'undefined') return;\n var featuredHost = root.querySelector('[data-doctors-v4-featured-host]');\n var sliderEl = root.querySelector('.doctors-v4__slider.swiper');\n var listTrack = root.querySelector('[data-doctors-v4-list-track]');\n var mobileFeaturedEl = root.querySelector('.doctors-v4__featured-mobile.swiper');\n var mobileTrack = root.querySelector('[data-doctors-v4-mobile-track]');\n var doctors = Array.prototype.slice.call(root.querySelectorAll('[data-doctors-v4-doctor]'));\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var desktopSwiper = null;\n var mobileSwiper = null;\n var activeDoctorIndex = 0;\n function getListGap() {\n var raw = getComputedStyle(root).getPropertyValue('--doctors-v4-list-gap').trim();\n var parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? 24 : parsed;\n }\n function getListBottomAir() {\n return parseFloat(getComputedStyle(root).getPropertyValue('--doctors-v4-list-bottom-air')) || 12;\n }\n function setDoctorMode(doctor, mode) {\n var isList = mode === 'list';\n doctor.classList.toggle('doctors-v4__card', isList);\n doctor.classList.add('swiper-slide');\n doctor.classList.toggle('is-active', isList && parseInt(doctor.dataset.doctorIndex, 10) === activeDoctorIndex);\n doctor.toggleAttribute('data-doctors-v4-card', isList);\n doctor.setAttribute('data-doctors-v4-slide', '');\n }\n function renderFeaturedDoctor() {\n if (!featuredHost || !doctors[activeDoctorIndex]) return;\n var featuredDoctor = doctors[activeDoctorIndex].cloneNode(true);\n featuredDoctor.classList.remove(\n 'doctors-v4__card',\n 'swiper-slide',\n 'swiper-slide-active',\n 'swiper-slide-next',\n 'swiper-slide-prev',\n 'is-active'\n );\n featuredDoctor.classList.add('doctors-v4__featured--desktop');\n featuredDoctor.removeAttribute('data-doctors-v4-doctor');\n featuredDoctor.removeAttribute('data-doctors-v4-card');\n featuredDoctor.removeAttribute('data-doctors-v4-slide');\n featuredDoctor.removeAttribute('data-doctor-index');\n featuredDoctor.removeAttribute('style');\n featuredHost.replaceChildren(featuredDoctor);\n }\n function updateActiveDoctor() {\n doctors.forEach(function (doctor, index) {\n doctor.classList.toggle('is-active', index === activeDoctorIndex);\n });\n }\n function mountDesktopDoctors() {\n if (!featuredHost || !listTrack) return;\n doctors.forEach(function (doctor) {\n setDoctorMode(doctor, 'list');\n listTrack.appendChild(doctor);\n });\n updateActiveDoctor();\n renderFeaturedDoctor();\n }\n function mountMobileDoctors() {\n if (!mobileTrack) return;\n if (featuredHost) featuredHost.replaceChildren();\n doctors.forEach(function (doctor) {\n setDoctorMode(doctor, 'mobile');\n doctor.classList.remove('is-active');\n mobileTrack.appendChild(doctor);\n });\n }\n function goToDoctor(index) {\n if (mobileMq.matches || index < 0 || index >= doctors.length || index === activeDoctorIndex) return;\n activeDoctorIndex = index;\n updateActiveDoctor();\n renderFeaturedDoctor();\n if (desktopSwiper) {\n desktopSwiper.slideTo(index);\n fixPaginationForHorizontalLayout(desktopSwiper, getDesktopPaginationEl());\n }\n updateDesktopNavState();\n }\n if (sliderEl) {\n sliderEl.addEventListener('click', function (event) {\n if (mobileMq.matches) return;\n var doctor = event.target.closest('[data-doctors-v4-doctor]');\n if (!doctor || !sliderEl.contains(doctor)) return;\n goToDoctor(parseInt(doctor.dataset.doctorIndex, 10));\n });\n }\n root.addEventListener('click', function (event) {\n if (mobileMq.matches) return;\n if (event.target.closest('.doctors-v4__controls--desktop .doctors-v4__nav-btn--prev')) {\n goToDoctor(activeDoctorIndex - 1);\n }\n if (event.target.closest('.doctors-v4__controls--desktop .doctors-v4__nav-btn--next')) {\n goToDoctor(activeDoctorIndex + 1);\n }\n });\n function getDesktopControls() {\n return root.querySelector('.doctors-v4__controls--desktop');\n }\n function getMobileControls() {\n return root.querySelector('.doctors-v4__controls--mobile');\n }\n function getDesktopPaginationEl() {\n var controls = getDesktopControls();\n return controls ? controls.querySelector('.doctors-v4__pagination') : null;\n }\n function getMobilePaginationEl() {\n var controls = getMobileControls();\n return controls ? controls.querySelector('.doctors-v4__pagination') : null;\n }\n function updateDesktopNavState() {\n var controls = getDesktopControls();\n if (!controls) return;\n var prevBtn = controls.querySelector('.doctors-v4__nav-btn--prev');\n var nextBtn = controls.querySelector('.doctors-v4__nav-btn--next');\n var atStart = activeDoctorIndex <= 0;\n var atEnd = activeDoctorIndex >= doctors.length - 1;\n if (prevBtn) {\n prevBtn.disabled = atStart;\n prevBtn.classList.toggle('swiper-button-disabled', atStart);\n prevBtn.setAttribute('aria-disabled', atStart ? 'true' : 'false');\n }\n if (nextBtn) {\n nextBtn.disabled = atEnd;\n nextBtn.classList.toggle('swiper-button-disabled', atEnd);\n nextBtn.setAttribute('aria-disabled', atEnd ? 'true' : 'false');\n }\n }\n function fixPaginationForHorizontalLayout(sw, paginationEl) {\n if (!paginationEl) return;\n paginationEl.style.top = 'auto';\n paginationEl.style.bottom = 'auto';\n if (!sw.isHorizontal() && paginationEl.style.height) {\n paginationEl.style.width = paginationEl.style.height;\n paginationEl.style.height = '';\n }\n var inlineTransform = paginationEl.style.transform;\n if (inlineTransform) {\n paginationEl.style.transform = inlineTransform\n .replace(\/translate3d\\(\\s*([^,]+),\\s*([^,]+),\\s*([^)]+)\\)\/, function (_, x, _y, z) {\n return 'translate3d(' + x.trim() + ', 0px, ' + z.trim() + ')';\n })\n .replace(\/translateY\\([^)]+\\)\/g, 'translateY(0)');\n }\n paginationEl.querySelectorAll('.swiper-pagination-bullet').forEach(function (bullet) {\n if (!bullet.style.top) return;\n bullet.style.left = bullet.style.top;\n bullet.style.top = 'auto';\n });\n }\n function syncPagination(sw, paginationEl) {\n if (!sw.pagination || !paginationEl) return;\n sw.pagination.render();\n sw.pagination.update();\n fixPaginationForHorizontalLayout(sw, paginationEl);\n }\n function updateSlidesEndSpace(sw) {\n var gap = getListGap();\n var offsetAfter = gap + getListBottomAir();\n if (sw.params.slidesOffsetAfter === offsetAfter && sw.params.spaceBetween === gap) return;\n sw.params.slidesOffsetAfter = offsetAfter;\n sw.params.spaceBetween = gap;\n sw.update();\n }\n function toggleControls(controls, hidden) {\n if (!controls) return;\n controls.style.display = hidden ? 'none' : '';\n }\n function destroyDesktop() {\n if (!desktopSwiper) return;\n desktopSwiper.destroy(true, true);\n desktopSwiper = null;\n }\n function destroyMobile() {\n if (!mobileSwiper) return;\n mobileSwiper.destroy(true, true);\n mobileSwiper = null;\n }\n function initDesktop() {\n if (!sliderEl) return;\n var controls = getDesktopControls();\n var paginationEl = getDesktopPaginationEl();\n var listSlides = listTrack ? listTrack.querySelectorAll('[data-doctors-v4-slide]') : [];\n updateDesktopNavState();\n if (listSlides.length < 2) {\n toggleControls(controls, true);\n return;\n }\n desktopSwiper = new Swiper(sliderEl, {\n direction: 'vertical',\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: getListGap(),\n speed: 320,\n loop: false,\n rewind: false,\n initialSlide: activeDoctorIndex,\n slidesOffsetAfter: getListGap() + getListBottomAir(),\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (sw) {\n updateSlidesEndSpace(sw);\n syncPagination(sw, paginationEl);\n updateDesktopNavState();\n toggleControls(controls, sw.isLocked);\n },\n resize: function (sw) {\n updateSlidesEndSpace(sw);\n syncPagination(sw, paginationEl);\n },\n breakpoint: function (sw) {\n syncPagination(sw, paginationEl);\n },\n slideChange: function (sw) {\n activeDoctorIndex = sw.activeIndex;\n updateActiveDoctor();\n renderFeaturedDoctor();\n updateDesktopNavState();\n fixPaginationForHorizontalLayout(sw, paginationEl);\n },\n },\n });\n }\n function initMobile() {\n if (!mobileFeaturedEl || !doctors.length) return;\n var controls = getMobileControls();\n var paginationEl = getMobilePaginationEl();\n var prevBtn = controls ? controls.querySelector('.doctors-v4__nav-btn--prev') : null;\n var nextBtn = controls ? controls.querySelector('.doctors-v4__nav-btn--next') : null;\n mobileSwiper = new Swiper(mobileFeaturedEl, {\n direction: 'horizontal',\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 16,\n speed: 320,\n loop: false,\n rewind: false,\n initialSlide: activeDoctorIndex,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n navigation: {\n prevEl: prevBtn,\n nextEl: nextBtn,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (sw) {\n toggleControls(controls, sw.isLocked);\n },\n slideChange: function (sw) {\n var doctor = sw.slides[sw.activeIndex];\n var index = doctor ? parseInt(doctor.dataset.doctorIndex, 10) : -1;\n if (!Number.isNaN(index)) activeDoctorIndex = index;\n },\n },\n });\n }\n function setup() {\n [getDesktopControls(), getMobileControls()].forEach(function (controls) {\n if (controls) controls.style.display = '';\n });\n if (mobileMq.matches) {\n destroyDesktop();\n mountMobileDoctors();\n initMobile();\n } else {\n destroyMobile();\n mountDesktopDoctors();\n initDesktop();\n }\n }\n function bootSwiper() {\n setup();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n mobileMq.addEventListener('change', setup);\n root.querySelectorAll('.doctors-v4__nav-btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('quiz\/variant-1');\n document.querySelectorAll('.quiz-v1').forEach(function (root) {\n if (root.dataset.quizV1Ready === 'true') return;\n root.dataset.quizV1Ready = 'true';\n var totalSteps = parseInt(root.dataset.quizV1Total, 10) || 4;\n var stepLabelEl = root.querySelector('[data-quiz-v1-step-label]');\n var panels = root.querySelectorAll('[data-quiz-v1-step-panel]');\n var forms = root.querySelectorAll('[data-quiz-v1-form]');\n if (!panels.length || !forms.length) return;\n var currentStep = parseInt(root.dataset.quizV1Step, 10) || 1;\n function getPanel(step) {\n return root.querySelector('[data-quiz-v1-step-panel=\"' + step + '\"]');\n }\n function getForm(step) {\n return root.querySelector('[data-quiz-v1-form=\"' + step + '\"]');\n }\n function updateStepLabel(step) {\n if (!stepLabelEl) return;\n stepLabelEl.textContent = 'Шаг ' + step + ' из ' + totalSteps;\n }\n function syncStepState(step) {\n var form = getForm(step);\n var panel = getPanel(step);\n if (!form || !panel) return;\n var continueBtn = panel.querySelector('[data-quiz-v1-continue]');\n if (continueBtn) {\n var hasSelection = !!form.querySelector('[data-quiz-v1-option]:checked');\n continueBtn.disabled = !hasSelection;\n }\n var submitBtn = panel.querySelector('[data-quiz-v1-submit]');\n if (submitBtn) {\n var nameInput = form.querySelector('[name=\"name\"]');\n var phoneInput = form.querySelector('[name=\"phone\"]');\n var consentInput = form.querySelector('[data-quiz-v1-consent]');\n var isValid = !!(\n nameInput && nameInput.value.trim()\n && phoneInput && phoneInput.value.trim()\n && consentInput && consentInput.checked\n );\n submitBtn.disabled = !isValid;\n }\n }\n function updateIntroState(step) {\n var isFinal = step === totalSteps;\n root.classList.toggle('is-step-4', isFinal);\n root.querySelectorAll('[data-quiz-v1-intro-part=\"default\"]').forEach(function (el) {\n el.hidden = isFinal;\n });\n root.querySelectorAll('[data-quiz-v1-intro-part=\"final\"]').forEach(function (el) {\n el.hidden = !isFinal;\n });\n }\n function goToStep(step) {\n if (step < 1) return;\n var targetPanel = getPanel(step);\n if (!targetPanel) return;\n panels.forEach(function (panel) {\n var panelStep = parseInt(panel.dataset.quizV1StepPanel, 10);\n panel.hidden = panelStep !== step;\n });\n currentStep = step;\n root.dataset.quizV1Step = String(step);\n updateStepLabel(step);\n updateIntroState(step);\n syncStepState(step);\n }\n forms.forEach(function (form) {\n var step = parseInt(form.dataset.quizV1Form, 10);\n var panel = getPanel(step);\n if (!panel) return;\n var continueBtn = panel.querySelector('[data-quiz-v1-continue]');\n var backBtn = panel.querySelector('[data-quiz-v1-back]');\n var submitBtn = panel.querySelector('[data-quiz-v1-submit]');\n var options = form.querySelectorAll('[data-quiz-v1-option]');\n var fields = form.querySelectorAll('[data-quiz-v1-field]');\n var consentInput = form.querySelector('[data-quiz-v1-consent]');\n options.forEach(function (input) {\n input.addEventListener('change', function () {\n syncStepState(step);\n });\n });\n fields.forEach(function (input) {\n input.addEventListener('input', function () {\n syncStepState(step);\n });\n });\n if (consentInput) {\n consentInput.addEventListener('change', function () {\n syncStepState(step);\n });\n }\n if (continueBtn) {\n continueBtn.addEventListener('click', function () {\n if (continueBtn.disabled) return;\n continueBtn.classList.add('is-pressed');\n setTimeout(function () { continueBtn.classList.remove('is-pressed'); }, 160);\n if (getPanel(step + 1)) {\n goToStep(step + 1);\n }\n });\n }\n if (backBtn) {\n backBtn.addEventListener('click', function () {\n if (step <= 1) return;\n goToStep(step - 1);\n });\n }\n syncStepState(step);\n });\n root.addEventListener('quiz-v1:submitted', function () {\n forms.forEach(function (quizForm) {\n quizForm.reset();\n quizForm.querySelectorAll('[data-quiz-v1-option]').forEach(function (option) {\n option.checked = false;\n });\n });\n goToStep(1);\n });\n goToStep(currentStep);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('choosing-teeth\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.choosing-teeth-v1').forEach(function (root) {\n if (root.dataset.choosingTeethV1Ready === 'true') return;\n root.dataset.choosingTeethV1Ready = 'true';\n var stepLabelEl = root.querySelector('[data-choosing-teeth-v1-step-label]');\n var panel1 = root.querySelector('[data-choosing-teeth-v1-panel=\"1\"]');\n var panel2 = root.querySelector('[data-choosing-teeth-v1-panel=\"2\"]');\n var panel3 = root.querySelector('[data-choosing-teeth-v1-panel=\"3\"]');\n var bottom1 = root.querySelector('[data-choosing-teeth-v1-bottom=\"1\"]');\n var bottom2 = root.querySelector('[data-choosing-teeth-v1-bottom=\"2\"]');\n var bottom3 = root.querySelector('[data-choosing-teeth-v1-bottom=\"3\"]');\n var errorEls = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-error]'));\n var next1 = root.querySelector('[data-choosing-teeth-v1-next]');\n var back = root.querySelector('[data-choosing-teeth-v1-back]');\n var next2 = root.querySelector('[data-choosing-teeth-v1-next-step2]');\n var back3 = root.querySelector('[data-choosing-teeth-v1-back-step3]');\n var submitMobile = root.querySelector('[data-choosing-teeth-v1-submit]');\n var formScrim = root.querySelector('[data-choosing-teeth-v1-form-scrim]');\n var rightCol = root.querySelector('.choosing-teeth-v1__right');\n var gridEl = root.querySelector('.choosing-teeth-v1__grid');\n var instruction = root.querySelector('[data-choosing-teeth-v1-instruction]');\n var instructionDesktopHost = root.querySelector('[data-choosing-teeth-v1-instruction-desktop]');\n var instructionMobileHost = root.querySelector('[data-choosing-teeth-v1-instruction-mobile]');\n var formSheetTimer = null;\n var right12 = root.querySelector('[data-choosing-teeth-v1-right=\"12\"]');\n var right3 = root.querySelector('[data-choosing-teeth-v1-right=\"3\"]');\n var concerns = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-concern]'));\n var step3TeethEl = root.querySelector('[data-choosing-teeth-v1-summary-teeth]');\n var step3ConcernsEl = root.querySelector('[data-choosing-teeth-v1-summary-concerns]');\n var step3Form = root.querySelector('.choosing-teeth-v1__form');\n var countEls = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-count]'));\n var jawTabs = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-jaw]'));\n var teeth = Array.prototype.slice.call(root.querySelectorAll('.choosing-teeth-v1__tooth[data-tooth]'));\n if (!teeth.length) return;\n var STORAGE_KEY = 'choosing-teeth-v1:selected';\n var CONCERNS_KEY = 'choosing-teeth-v1:concerns';\n var selected = new Set();\n var step1Label = String(root.dataset.step1Label || 'Шаг 1 из 3');\n var step2Label = String(root.dataset.step2Label || 'Шаг 2 из 3');\n var step3Label = String(root.dataset.step3Label || 'Шаг 3 из 3');\n var errorPickTooth = String(root.dataset.errorPickTooth || 'Выберите хотя бы один зуб');\n var errorPickConcern = String(root.dataset.errorPickConcern || 'Выберите, что вас беспокоит');\n function setHidden(el, isHidden) {\n if (!el) return;\n if (isHidden) el.setAttribute('hidden', '');\n else el.removeAttribute('hidden');\n }\n function showError(text) {\n errorEls.forEach(function (el) {\n if (!el) return;\n el.textContent = String(text || '');\n el.removeAttribute('hidden');\n });\n }\n function hideError() {\n errorEls.forEach(function (el) {\n if (!el) return;\n el.setAttribute('hidden', '');\n });\n }\n function readConcerns() {\n try {\n var raw = sessionStorage.getItem(CONCERNS_KEY) || '';\n if (!raw) return [];\n return raw.split(',').map(function (s) { return String(s).trim(); }).filter(Boolean);\n } catch (e) {\n return [];\n }\n }\n function writeConcerns(values) {\n try {\n sessionStorage.setItem(CONCERNS_KEY, values.join(','));\n } catch (e) {}\n }\n function pluralRu(n, one, few, many) {\n var num = Math.abs(Number(n) || 0);\n var mod10 = num % 10;\n var mod100 = num % 100;\n if (mod10 === 1 && mod100 !== 11) return one;\n if (mod10 >= 2 && mod10 <= 4 && !(mod100 >= 12 && mod100 <= 14)) return few;\n return many;\n }\n function syncStep3Summary() {\n if (step3TeethEl) step3TeethEl.textContent = String(selected.size);\n if (step3ConcernsEl) {\n var c = concerns.filter(function (el) { return el && el.checked; }).length;\n step3ConcernsEl.textContent = c + ' ' + pluralRu(c, 'проблема', 'проблемы', 'проблем');\n }\n }\n function restoreSheetHome() {\n if (!formScrim || !rightCol) return;\n formScrim.classList.remove('is-open', 'is-mobile-sheet');\n rightCol.classList.remove('is-open', 'is-mobile-sheet');\n setHidden(formScrim, true);\n if (gridEl) gridEl.appendChild(rightCol);\n root.appendChild(formScrim);\n if (!document.querySelector('.popup:not([hidden])')) {\n document.documentElement.classList.remove('is-popup-open');\n }\n document.body.style.overflow = '';\n }\n function resetQuiz() {\n selected.clear();\n concerns.forEach(function (el) {\n if (el) el.checked = false;\n });\n writeConcerns([]);\n hideError();\n root.classList.remove('is-jaw-lower');\n jawTabs.forEach(function (tab) {\n var isActive = String(tab.getAttribute('data-choosing-teeth-v1-jaw') || 'upper') === 'upper';\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n syncUi();\n syncStep2Next();\n setStep(1);\n }\n function setFormOpen(open, options) {\n var isOpen = !!open;\n var instant = !!(options && options.instant);\n var isSheet = rightCol && rightCol.classList.contains('is-mobile-sheet');\n root.classList.toggle('is-form-open', isOpen);\n if (!formScrim || !rightCol) {\n setHidden(formScrim, !isOpen);\n return;\n }\n if (formSheetTimer) {\n clearTimeout(formSheetTimer);\n formSheetTimer = null;\n }\n if (isOpen) {\n document.body.appendChild(formScrim);\n document.body.appendChild(rightCol);\n formScrim.classList.add('is-mobile-sheet');\n rightCol.classList.add('is-mobile-sheet');\n setHidden(formScrim, false);\n document.documentElement.classList.add('is-popup-open');\n document.body.style.overflow = 'hidden';\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n formScrim.classList.add('is-open');\n rightCol.classList.add('is-open');\n });\n });\n return;\n }\n if (!isSheet) {\n setHidden(formScrim, true);\n document.body.style.overflow = '';\n return;\n }\n if (instant) {\n restoreSheetHome();\n return;\n }\n formScrim.classList.remove('is-open');\n rightCol.classList.remove('is-open');\n formSheetTimer = setTimeout(function () {\n formSheetTimer = null;\n restoreSheetHome();\n }, 280);\n }\n function setStep(n) {\n var step = Number(n) || 1;\n root.classList.toggle('is-step-2', step === 2);\n root.classList.toggle('is-step-3', step === 3);\n if (step !== 3) setFormOpen(false);\n setHidden(panel1, step !== 1);\n setHidden(panel2, step !== 2);\n setHidden(panel3, step !== 3);\n setHidden(bottom1, step !== 1);\n setHidden(bottom2, step !== 2);\n setHidden(bottom3, step !== 3);\n setHidden(right12, step === 3);\n setHidden(right3, step !== 3);\n if (stepLabelEl) stepLabelEl.textContent = step === 3 ? step3Label : (step === 2 ? step2Label : step1Label);\n if (step !== 2) hideError();\n if (step === 3) syncStep3Summary();\n if (step === 2) syncStep2Next();\n }\n function readStored() {\n try {\n var raw = sessionStorage.getItem(STORAGE_KEY) || '';\n if (!raw) return [];\n return raw.split(',').map(function (s) { return String(s).trim(); }).filter(Boolean);\n } catch (e) {\n return [];\n }\n }\n function writeStored(values) {\n try {\n sessionStorage.setItem(STORAGE_KEY, values.join(','));\n } catch (e) {}\n }\n function syncUi() {\n teeth.forEach(function (btn) {\n var id = String(btn.dataset.tooth || '');\n var isSelected = id && selected.has(id);\n btn.setAttribute('aria-pressed', isSelected ? 'true' : 'false');\n btn.classList.toggle('is-selected', isSelected);\n });\n countEls.forEach(function (el) { el.textContent = String(selected.size); });\n root.classList.toggle('is-has-selection', selected.size > 0);\n if (next1) next1.disabled = selected.size === 0;\n writeStored(Array.from(selected).sort());\n }\n function countConcerns() {\n return concerns.filter(function (el) { return el && el.checked; }).length;\n }\n var desktopQuizMq = window.matchMedia('(min-width: 1281px)');\n var instructionMobileMq = window.matchMedia('(max-width: 768px)');\n function isDesktopQuiz() {\n return desktopQuizMq.matches;\n }\n function syncInstructionPlacement() {\n if (!instruction || !instructionDesktopHost || !instructionMobileHost) return;\n var target = instructionMobileMq.matches ? instructionMobileHost : instructionDesktopHost;\n if (instruction.parentElement !== target) target.appendChild(instruction);\n }\n function syncStep2Next() {\n if (!next2) return;\n var locked = countConcerns() === 0;\n next2.classList.toggle('is-locked', locked);\n next2.setAttribute('aria-disabled', locked ? 'true' : 'false');\n next2.disabled = locked && !isDesktopQuiz();\n if (!locked) hideError();\n }\n function toggleTooth(btn) {\n var id = String(btn.dataset.tooth || '');\n if (!id) return;\n if (selected.has(id)) selected.delete(id);\n else selected.add(id);\n if (selected.size > 0) hideError();\n syncUi();\n }\n readStored().forEach(function (id) { selected.add(String(id)); });\n var storedConcerns = new Set(readConcerns().map(String));\n concerns.forEach(function (el) {\n var v = String(el.value || '');\n if (v && storedConcerns.has(v)) el.checked = true;\n el.addEventListener('change', function () {\n writeConcerns(concerns.filter(function (x) { return x && x.checked; }).map(function (x) { return String(x.value || ''); }).filter(Boolean));\n syncStep2Next();\n });\n el.addEventListener('click', function () {\n syncStep2Next();\n });\n });\n var optionsBox = root.querySelector('.choosing-teeth-v1__options');\n if (optionsBox) {\n optionsBox.addEventListener('click', function () {\n setTimeout(syncStep2Next, 0);\n });\n }\n syncStep2Next();\n syncInstructionPlacement();\n jawTabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n var jaw = String(tab.getAttribute('data-choosing-teeth-v1-jaw') || 'upper');\n root.classList.toggle('is-jaw-lower', jaw === 'lower');\n jawTabs.forEach(function (item) {\n var isActive = item === tab;\n item.classList.toggle('is-active', isActive);\n item.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n });\n });\n teeth.forEach(function (btn) {\n if (!btn.hasAttribute('aria-pressed')) btn.setAttribute('aria-pressed', 'false');\n btn.addEventListener('click', function () {\n toggleTooth(btn);\n });\n btn.addEventListener('keydown', function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggleTooth(btn);\n }\n });\n });\n syncUi();\n setStep(1);\n if (next1) {\n next1.addEventListener('click', function () {\n if (selected.size < 1) {\n showError(errorPickTooth);\n return;\n }\n hideError();\n setStep(2);\n });\n }\n if (back) {\n back.addEventListener('click', function () {\n hideError();\n setStep(1);\n });\n }\n if (next2) {\n next2.addEventListener('click', function () {\n if (countConcerns() < 1) {\n showError(errorPickConcern);\n return;\n }\n hideError();\n writeConcerns(concerns.filter(function (x) { return x && x.checked; }).map(function (x) { return String(x.value || ''); }).filter(Boolean));\n setStep(3);\n });\n }\n if (typeof desktopQuizMq.addEventListener === 'function') {\n desktopQuizMq.addEventListener('change', syncStep2Next);\n } else if (typeof desktopQuizMq.addListener === 'function') {\n desktopQuizMq.addListener(syncStep2Next);\n }\n if (typeof instructionMobileMq.addEventListener === 'function') {\n instructionMobileMq.addEventListener('change', syncInstructionPlacement);\n } else if (typeof instructionMobileMq.addListener === 'function') {\n instructionMobileMq.addListener(syncInstructionPlacement);\n }\n if (back3) {\n back3.addEventListener('click', function () {\n if (root.classList.contains('is-form-open')) {\n setFormOpen(false);\n return;\n }\n setStep(2);\n });\n }\n if (formScrim) {\n formScrim.addEventListener('click', function () {\n setFormOpen(false);\n });\n }\n document.addEventListener('keydown', function (event) {\n if (event.key === 'Escape' && root.classList.contains('is-form-open')) {\n setFormOpen(false);\n }\n });\n if (submitMobile) {\n submitMobile.addEventListener('click', function () {\n setFormOpen(true);\n });\n }\n if (step3Form) {\n step3Form.addEventListener('submit', function () {\n setTimeout(function () {\n var success = document.querySelector('.popup[data-popup=\"form-success\"]:not([hidden])');\n if (success) {\n setFormOpen(false, { instant: true });\n resetQuiz();\n }\n }, 0);\n });\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v1').forEach(function (root) {\n if (root.dataset.reviewsV1Ready === 'true') return;\n root.dataset.reviewsV1Ready = 'true';\n function updateTextCardOverflow(card) {\n var quote = card.querySelector('.reviews-v1__quote');\n var readMore = card.querySelector('[data-reviews-v1-read-full]');\n var quoteBlock = card.querySelector('.reviews-v1__quote-block');\n if (!quote || !readMore || !quoteBlock) return;\n card.classList.remove('is-overflow');\n readMore.hidden = true;\n quote.style.removeProperty('-webkit-line-clamp');\n var styles = getComputedStyle(root);\n var maxLines = parseInt(styles.getPropertyValue('--reviews-v1-quote-lines'), 10) || 4;\n var lineCount = maxLines;\n var quoteBlockStyles = getComputedStyle(quoteBlock);\n var quoteInnerHeight = quoteBlock.clientHeight - (parseFloat(quoteBlockStyles.paddingBottom) || 0);\n quote.style.display = '-webkit-box';\n quote.style.webkitBoxOrient = 'vertical';\n quote.style.overflow = 'hidden';\n readMore.hidden = false;\n while (lineCount > 1) {\n quote.style.webkitLineClamp = String(lineCount);\n var blockHeight = quote.offsetHeight + readMore.offsetHeight + 8;\n if (blockHeight <= quoteInnerHeight + 1) {\n break;\n }\n lineCount -= 1;\n }\n quote.style.webkitLineClamp = String(lineCount);\n readMore.hidden = true;\n if (quote.scrollHeight > quote.clientHeight + 1) {\n card.classList.add('is-overflow');\n readMore.hidden = false;\n }\n }\n root.querySelectorAll('.reviews-v1__card--text').forEach(function (card) {\n updateTextCardOverflow(card);\n });\n root.addEventListener('click', function (event) {\n var readBtn = event.target.closest('[data-reviews-v1-read-full]');\n if (!readBtn || !root.contains(readBtn)) return;\n event.preventDefault();\n var card = readBtn.closest('.reviews-v1__card--text');\n var template = card ? card.querySelector('.reviews-v1__full-template') : null;\n var quote = card ? card.querySelector('.reviews-v1__quote') : null;\n if (!template || !quote || !window.Popup) return;\n var content = template.content.cloneNode(true);\n var quoteSlot = content.querySelector('[data-reviews-v1-popup-quote]');\n if (!quoteSlot) return;\n var popupQuote = quote.cloneNode(true);\n popupQuote.className = 'popup__review-text';\n popupQuote.style.removeProperty('-webkit-line-clamp');\n quoteSlot.appendChild(popupQuote);\n var popupContent = document.createElement('div');\n popupContent.appendChild(content);\n window.Popup.open('review', { html: popupContent.innerHTML });\n });\n function initSwiper() {\n if (root.dataset.reviewsV1SwiperReady === 'true') return;\n var sliderEl = root.querySelector('.reviews-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n root.dataset.reviewsV1SwiperReady = 'true';\n var carouselEl = root.querySelector('.reviews-v1__carousel');\n if (!carouselEl) return;\n var styles = getComputedStyle(root);\n var mobileSlidesPerView = parseFloat(styles.getPropertyValue('--reviews-v1-mobile-slides-per-view')) || 1.15;\n var paginationEl = root.querySelector('.reviews-v1__pagination');\n function syncDotsPagination(swiper) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n function getCarouselSettings(width) {\n var spaceBetween = width >= 769 ? 40 : 16;\n if (width >= 769) {\n return {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: spaceBetween,\n };\n }\n return {\n slidesPerView: mobileSlidesPerView,\n slidesPerGroup: 1,\n spaceBetween: spaceBetween,\n };\n }\n function applyCarouselSettings(swiper, width) {\n var next = getCarouselSettings(width);\n if (\n swiper.params.slidesPerView === next.slidesPerView &&\n swiper.params.slidesPerGroup === next.slidesPerGroup &&\n swiper.params.spaceBetween === next.spaceBetween\n ) {\n return;\n }\n swiper.params.slidesPerView = next.slidesPerView;\n swiper.params.slidesPerGroup = next.slidesPerGroup;\n swiper.params.spaceBetween = next.spaceBetween;\n swiper.update();\n }\n var initial = getCarouselSettings(carouselEl.clientWidth);\n var swiper = new Swiper(sliderEl, {\n slidesPerView: initial.slidesPerView,\n slidesPerGroup: initial.slidesPerGroup,\n spaceBetween: initial.spaceBetween,\n speed: 320,\n watchOverflow: true,\n loop: false,\n rewind: true,\n navigation: {\n nextEl: root.querySelector('.reviews-v1__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.reviews-v1__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) {\n syncDotsPagination(swiper);\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n },\n resize: function (swiper) {\n syncDotsPagination(swiper);\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n },\n breakpoint: syncDotsPagination,\n },\n });\n requestAnimationFrame(function () {\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n });\n if (typeof ResizeObserver !== 'undefined') {\n var resizeObserver = new ResizeObserver(function () {\n applyCarouselSettings(swiper, carouselEl.clientWidth);\n syncDotsPagination(swiper);\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n });\n resizeObserver.observe(carouselEl);\n }\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-plans\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.treatment-plans-v1').forEach(function (root) {\n if (root.dataset.treatmentPlansV1Ready === 'true') return;\n root.dataset.treatmentPlansV1Ready = 'true';\n var sliderEl = root.querySelector('.treatment-plans-v1__slider.swiper');\n var paginationEl = root.querySelector('.treatment-plans-v1__pagination');\n var navRoot = root.querySelector('.treatment-plans-v1__slider-nav');\n var toolbarEl = root.querySelector('.treatment-plans-v1__slider-toolbar');\n var planCount = parseInt(root.dataset.planCount, 10) || 0;\n function getMobileMediaQuery() {\n var bp = getComputedStyle(document.documentElement).getPropertyValue('--bp-md').trim() || '768px';\n return window.matchMedia('(max-width: ' + bp + ')');\n }\n var mobileMq = getMobileMediaQuery();\n var swiperInstance = null;\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (mobileMq.matches) {\n swiper.pagination.disable();\n return;\n }\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n }\n function syncSliderNav(swiper) {\n if (!toolbarEl) return;\n var needsNav = !mobileMq.matches && (planCount > 3 || !swiper.isLocked);\n toolbarEl.classList.toggle('is-visible', needsNav);\n }\n function destroySlider() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function initSlider() {\n if (mobileMq.matches || swiperInstance || !sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 1) return;\n var pageStyles = getComputedStyle(document.documentElement);\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 16,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 769: {\n slidesPerView: 'auto',\n spaceBetween: 40,\n slidesOffsetAfter: 0,\n },\n },\n navigation: navRoot ? {\n nextEl: navRoot.querySelector('.slider-nav__btn--next'),\n prevEl: navRoot.querySelector('.slider-nav__btn--prev'),\n } : false,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (instance) {\n instance.update();\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n resize: function (instance) {\n instance.update();\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n },\n breakpoint: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n update: syncSliderNav,\n lock: syncSliderNav,\n unlock: syncSliderNav,\n },\n });\n syncSliderNav(swiperInstance);\n if (navRoot) {\n navRoot.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n }\n function syncSliderMode() {\n destroySlider();\n syncAccordionVisibility();\n if (mobileMq.matches) return;\n requestAnimationFrame(function () {\n requestAnimationFrame(initSlider);\n });\n }\n var accordionItems = root.querySelectorAll('.treatment-plans-v1__card');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n function shouldAnimateAccordion() {\n return mobileMq.matches && !reduceMotionMq.matches;\n }\n function syncAccordionVisibility() {\n accordionItems.forEach(function (item) {\n var trigger = item.querySelector('[data-treatment-plans-v1-trigger]');\n var panel = item.querySelector('.treatment-plans-v1__plan-panel');\n if (!panel) return;\n if (!mobileMq.matches) {\n panel.hidden = false;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n return;\n }\n if (!item.classList.contains('is-open')) {\n panel.hidden = true;\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n }\n });\n }\n function scrollOpenedAccordionItem(item) {\n if (!mobileMq.matches) return;\n var trigger = item.querySelector('[data-treatment-plans-v1-trigger]');\n if (!trigger) return;\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n var margin = 16;\n var rect = trigger.getBoundingClientRect();\n var offset = 0;\n if (rect.top < margin) {\n offset = rect.top - margin;\n } else if (rect.bottom > window.innerHeight - margin) {\n offset = rect.bottom - window.innerHeight + margin;\n }\n if (offset !== 0) {\n window.scrollBy({ top: offset, behavior: 'smooth' });\n }\n });\n });\n }\n function closeAccordionItem(entry) {\n var entryTrigger = entry.querySelector('[data-treatment-plans-v1-trigger]');\n var entryPanel = entry.querySelector('.treatment-plans-v1__plan-panel');\n if (!entryPanel || !entry.classList.contains('is-open')) {\n return;\n }\n entry.classList.remove('is-open');\n if (entryTrigger) entryTrigger.setAttribute('aria-expanded', 'false');\n if (!shouldAnimateAccordion()) {\n entryPanel.hidden = true;\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n entryPanel.removeEventListener('transitionend', onEnd);\n entryPanel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== entryPanel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n entryPanel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var trigger = item.querySelector('[data-treatment-plans-v1-trigger]');\n var panel = item.querySelector('.treatment-plans-v1__plan-panel');\n if (!panel) return;\n panel.hidden = false;\n if (shouldAnimateAccordion()) {\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n scrollOpenedAccordionItem(item);\n });\n });\n return;\n }\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n scrollOpenedAccordionItem(item);\n }\n root.querySelectorAll('[data-treatment-plans-v1-trigger]').forEach(function (trigger) {\n trigger.addEventListener('click', function () {\n if (!mobileMq.matches) return;\n var item = trigger.closest('.treatment-plans-v1__card');\n if (!item) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeAccordionItem(item);\n return;\n }\n accordionItems.forEach(function (entry) {\n if (entry !== item) {\n closeAccordionItem(entry);\n }\n });\n openAccordionItem(item);\n });\n });\n function bootSwiper() {\n syncSliderMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n mobileMq.addEventListener('change', syncSliderMode);\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('brands\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.brands-v2').forEach(function (root) {\n if (root.dataset.brandsV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.brandsV2Ready === 'true') return;\n root.dataset.brandsV2Ready = 'true';\n var sliderEl = root.querySelector('.brands-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.brands-v2__pagination');\n var navPrev = root.querySelector('.brands-v2__controls .slider-nav__btn--prev');\n var navNext = root.querySelector('.brands-v2__controls .slider-nav__btn--next');\n new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n loop: true,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n });\n root.querySelectorAll('.brands-v2__controls .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('utp-in-numbers\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('gallery\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.gallery-v1').forEach(function (root) {\n if (root.dataset.galleryV1Ready === 'true') return;\n root.dataset.galleryV1Ready = 'true';\n if (typeof Swiper === 'undefined') return;\n var heroEl = root.querySelector('.gallery-v1__hero.swiper');\n if (!heroEl) return;\n var heroSlides = heroEl.querySelectorAll('.swiper-slide');\n if (heroSlides.length < 2) return;\n var heroLoader = root.querySelector('[data-gallery-v1-hero-loader]');\n var paginationEl = root.querySelector('.gallery-v1__pagination');\n var navPrev = root.querySelector('.slider-nav__btn--prev');\n var navNext = root.querySelector('.slider-nav__btn--next');\n var heroLoadId = 0;\n var heroTouchMq = window.matchMedia('(max-width: 1360px)');\n function isHeroTouchEnabled() {\n return heroTouchMq.matches;\n }\n function isMobile() {\n return window.matchMedia('(max-width: 768px)').matches;\n }\n function setHeroLoading(loading) {\n heroEl.classList.toggle('is-loading', !!loading);\n if (!heroLoader) return;\n if (loading) {\n heroLoader.classList.remove('is-hidden');\n } else {\n heroLoader.classList.add('is-hidden');\n }\n }\n function getActiveHeroImg(heroSwiper) {\n var slide = heroSwiper && heroSwiper.slides ? heroSwiper.slides[heroSwiper.activeIndex] : null;\n return slide ? slide.querySelector('img') : null;\n }\n function setActiveByIndex(index) {\n var thumbs = root.querySelectorAll('[data-gallery-v1-thumb]');\n thumbs.forEach(function (btn) {\n var btnIndex = parseInt(btn.dataset.galleryV1Index || '0', 10);\n var active = btnIndex === index;\n btn.classList.toggle('is-active', active);\n if (active) {\n btn.setAttribute('aria-current', 'true');\n } else {\n btn.removeAttribute('aria-current');\n }\n });\n }\n function initSwiper() {\n if (root.dataset.galleryV1SwiperReady === 'true') return;\n if (typeof Swiper === 'undefined') return;\n var heroSwiper = new Swiper(heroEl, {\n initialSlide: 0,\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n loop: true,\n watchOverflow: true,\n roundLengths: true,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n allowTouchMove: isHeroTouchEnabled(),\n on: {\n init: function (s) {\n setActiveByIndex(s.realIndex || 0);\n watchActiveHeroImage(s);\n },\n slideChange: function (s) {\n var index = s.realIndex || 0;\n setActiveByIndex(index);\n watchActiveHeroImage(s);\n },\n },\n });\n function watchActiveHeroImage(swiper) {\n var img = getActiveHeroImg(swiper);\n heroLoadId += 1;\n var reqId = heroLoadId;\n if (!img) {\n setHeroLoading(false);\n return;\n }\n if (img.complete && img.naturalWidth > 0) {\n setHeroLoading(false);\n return;\n }\n setHeroLoading(true);\n function done() {\n if (reqId !== heroLoadId) return;\n setHeroLoading(false);\n }\n img.addEventListener('load', done, { once: true });\n img.addEventListener('error', done, { once: true });\n }\n watchActiveHeroImage(heroSwiper);\n function syncHeroTouchMode() {\n heroSwiper.allowTouchMove = isHeroTouchEnabled();\n }\n if (typeof heroTouchMq.addEventListener === 'function') {\n heroTouchMq.addEventListener('change', syncHeroTouchMode);\n } else if (typeof heroTouchMq.addListener === 'function') {\n heroTouchMq.addListener(syncHeroTouchMode);\n }\n var thumbsEl = root.querySelector('.gallery-v1__slider.swiper');\n var thumbsSwiper = null;\n if (thumbsEl) {\n var thumbSlides = thumbsEl.querySelectorAll('.swiper-slide');\n if (thumbSlides.length > 1) {\n thumbsSwiper = new Swiper(thumbsEl, {\n initialSlide: 0,\n slidesPerView: 'auto',\n spaceBetween: 16,\n speed: 320,\n loop: true,\n watchOverflow: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n breakpoints: {\n 0: { spaceBetween: 12 },\n 1200: { spaceBetween: 16 },\n },\n on: {\n init: function (s) {\n if (isMobile()) return;\n if (typeof heroSwiper.slideToLoop === 'function') heroSwiper.slideToLoop(s.realIndex || 0, 0);\n setActiveByIndex(s.realIndex || 0);\n watchActiveHeroImage(heroSwiper);\n },\n slideChange: function (s) {\n if (isMobile()) return;\n if (typeof heroSwiper.slideToLoop === 'function') heroSwiper.slideToLoop(s.realIndex || 0, 0);\n setActiveByIndex(s.realIndex || 0);\n watchActiveHeroImage(heroSwiper);\n },\n },\n });\n }\n }\n root.addEventListener('click', function (event) {\n var btn = event.target.closest('[data-gallery-v1-thumb]');\n if (!btn || !root.contains(btn)) return;\n event.preventDefault();\n var index = parseInt(btn.dataset.galleryV1Index || '0', 10) || 0;\n var thumbsCount = root.querySelectorAll('[data-gallery-v1-thumb]').length || 0;\n if (thumbsSwiper && thumbsSwiper.params && thumbsSwiper.params.loop && thumbsCount > 1) {\n var current = thumbsSwiper.realIndex || 0;\n var n = thumbsCount;\n var forward = (index - current + n) % n;\n var backward = (current - index + n) % n;\n if (forward !== 0) {\n if (backward < forward) {\n if (typeof thumbsSwiper.slideToLoop === 'function') thumbsSwiper.slideToLoop(index, 0);\n } else {\n thumbsSwiper.slideTo(thumbsSwiper.activeIndex + forward, thumbsSwiper.params.speed || 320);\n }\n }\n } else if (thumbsSwiper) {\n thumbsSwiper.slideTo(index, thumbsSwiper.params.speed || 320);\n }\n if (typeof heroSwiper.slideToLoop === 'function') {\n heroSwiper.slideToLoop(index, 0);\n } else {\n heroSwiper.slideTo(index, 0);\n }\n setActiveByIndex(index);\n watchActiveHeroImage(heroSwiper);\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n root.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n root.dataset.galleryV1SwiperReady = 'true';\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('about\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.about-v1').forEach(function (root) {\n if (root.dataset.aboutV1Ready === 'true') return;\n root.dataset.aboutV1Ready = 'true';\n var scrollRoot = root.querySelector('.about-v1__scroll');\n var viewport = root.querySelector('.about-v1__copy-viewport');\n var track = root.querySelector('.about-v1__scrollbar');\n var thumb = root.querySelector('.about-v1__scrollbar-thumb');\n var toggleBtn = root.querySelector('[data-about-v1-toggle]');\n var toggleLabel = root.querySelector('[data-about-v1-toggle-label]');\n if (!scrollRoot || !viewport || !track || !thumb) return;\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var mobileMq = window.matchMedia('(max-width: 1200px)');\n function getToggleLabels() {\n if (!toggleBtn) return { expand: '', collapse: '' };\n return {\n expand: toggleBtn.getAttribute('data-expand-label') || '',\n collapse: toggleBtn.getAttribute('data-collapse-label') || ''\n };\n }\n function updateToggleUi() {\n if (!toggleBtn || !toggleLabel) return;\n var labels = getToggleLabels();\n var isExpanded = scrollRoot.classList.contains('is-expanded');\n toggleLabel.textContent = isExpanded ? labels.collapse : labels.expand;\n toggleBtn.setAttribute('aria-expanded', isExpanded ? 'true' : 'false');\n }\n function measureLineHeight(el) {\n var styles = getComputedStyle(el);\n var lineHeight = parseFloat(styles.lineHeight);\n if (!isNaN(lineHeight)) return lineHeight;\n return parseFloat(styles.fontSize) * 1.43;\n }\n function blockOffsetTop(block, container) {\n return block.getBoundingClientRect().top - container.getBoundingClientRect().top;\n }\n function blockOffsetBottom(block, container) {\n return block.getBoundingClientRect().bottom - container.getBoundingClientRect().top;\n }\n function computeCollapsedHeight(copyBody, targetMax) {\n var blocks = copyBody.querySelectorAll('.about-v1__lead, .about-v1__text p, .about-v1__closing');\n if (!blocks.length) return targetMax;\n var snapped = 0;\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n var top = blockOffsetTop(block, copyBody);\n var bottom = blockOffsetBottom(block, copyBody);\n if (bottom <= targetMax + 0.5) {\n snapped = bottom;\n continue;\n }\n if (top >= targetMax) break;\n var lineHeight = measureLineHeight(block);\n var lines = Math.max(1, Math.floor((targetMax - top) \/ lineHeight));\n snapped = top + lines * lineHeight;\n break;\n }\n if (snapped <= 0 && blocks[0]) {\n snapped = blockOffsetTop(blocks[0], copyBody) + measureLineHeight(blocks[0]);\n }\n return Math.ceil(snapped);\n }\n function applyMobileCollapse() {\n if (!mobileMq.matches) {\n scrollRoot.classList.remove('is-collapsible', 'is-collapsed', 'is-expanded');\n scrollRoot.style.removeProperty('--about-v1-mobile-collapsed-max');\n if (toggleBtn) toggleBtn.hidden = true;\n return;\n }\n var copyBody = root.querySelector('.about-v1__copy-body');\n if (!copyBody) return;\n var targetMax = parseFloat(getComputedStyle(root).getPropertyValue('--about-v1-mobile-collapse-target')) || 320;\n scrollRoot.classList.remove('is-collapsed', 'is-expanded');\n scrollRoot.style.removeProperty('--about-v1-mobile-collapsed-max');\n scrollRoot.style.removeProperty('max-height');\n var fullHeight = copyBody.scrollHeight;\n var collapsedHeight = computeCollapsedHeight(copyBody, targetMax);\n if (fullHeight <= collapsedHeight + 1) {\n scrollRoot.classList.remove('is-collapsible');\n if (toggleBtn) toggleBtn.hidden = true;\n return;\n }\n scrollRoot.style.setProperty('--about-v1-mobile-collapsed-max', collapsedHeight + 'px');\n scrollRoot.classList.add('is-collapsible');\n scrollRoot.classList.add('is-collapsed');\n if (toggleBtn) toggleBtn.hidden = true;\n }\n function applyScrollCap() {\n if (!desktopMq.matches) {\n root.style.removeProperty('--about-v1-scroll-max');\n scrollRoot.style.removeProperty('height');\n scrollRoot.style.removeProperty('max-height');\n applyMobileCollapse();\n return;\n }\n scrollRoot.classList.remove('is-collapsible', 'is-collapsed', 'is-expanded');\n if (toggleBtn) toggleBtn.hidden = true;\n var profile = root.querySelector('.about-v1__profile');\n var copyHead = root.querySelector('.about-v1__copy-head');\n var moreLink = root.querySelector('.about-v1__more');\n var main = root.querySelector('.about-v1__main');\n if (!profile || !copyHead || !main) return;\n var mainGap = parseFloat(getComputedStyle(main).rowGap || getComputedStyle(main).gap) || 0;\n var moreHeight = moreLink ? moreLink.getBoundingClientRect().height : 0;\n var scrollMax = Math.round(\n profile.getBoundingClientRect().height\n - copyHead.getBoundingClientRect().height\n - moreHeight\n - mainGap * 2\n );\n if (scrollMax > 0) {\n root.style.setProperty('--about-v1-scroll-max', scrollMax + 'px');\n }\n }\n function syncScrollUi() {\n if (!desktopMq.matches) return;\n var maxScroll = viewport.scrollHeight - viewport.clientHeight;\n if (maxScroll <= 1) {\n scrollRoot.classList.add('is-static');\n scrollRoot.classList.add('is-at-bottom');\n thumb.style.height = '';\n thumb.style.transform = '';\n return;\n }\n scrollRoot.classList.remove('is-static');\n scrollRoot.classList.toggle('is-at-bottom', viewport.scrollTop >= maxScroll - 1);\n var trackHeight = track.clientHeight;\n var thumbHeight = Math.max(48, (viewport.clientHeight \/ viewport.scrollHeight) * trackHeight);\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var thumbOffset = maxScroll > 0 ? (viewport.scrollTop \/ maxScroll) * maxThumbOffset : 0;\n thumb.style.height = thumbHeight + 'px';\n thumb.style.transform = 'translateY(' + thumbOffset + 'px)';\n }\n function scrollFromTrackPointer(clientY) {\n if (!desktopMq.matches) return;\n var maxScroll = viewport.scrollHeight - viewport.clientHeight;\n var trackHeight = track.clientHeight;\n var thumbHeight = thumb.offsetHeight;\n if (maxScroll <= 1 || trackHeight <= 0) return;\n var rect = track.getBoundingClientRect();\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var pointerOffset = clientY - rect.top - thumbHeight \/ 2;\n var thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerOffset));\n var ratio = maxThumbOffset > 0 ? thumbOffset \/ maxThumbOffset : 0;\n viewport.scrollTop = ratio * maxScroll;\n }\n var activePointerId = null;\n function onPointerMove(event) {\n if (event.pointerId !== activePointerId) return;\n event.preventDefault();\n scrollFromTrackPointer(event.clientY);\n }\n function stopPointerDrag(event) {\n if (event && activePointerId !== null && event.pointerId !== activePointerId) return;\n activePointerId = null;\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', stopPointerDrag);\n document.removeEventListener('pointercancel', stopPointerDrag);\n }\n function startPointerDrag(event) {\n if (!desktopMq.matches) return;\n activePointerId = event.pointerId;\n event.preventDefault();\n scrollFromTrackPointer(event.clientY);\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', stopPointerDrag);\n document.addEventListener('pointercancel', stopPointerDrag);\n }\n var syncFrame = null;\n function scheduleSyncAll() {\n if (syncFrame !== null) return;\n syncFrame = window.requestAnimationFrame(function () {\n syncFrame = null;\n syncAll();\n });\n }\n if (window.ResizeObserver) {\n var copyBody = root.querySelector('.about-v1__copy-body');\n var profile = root.querySelector('.about-v1__profile');\n var copyHead = root.querySelector('.about-v1__copy-head');\n var resizeObserver = new ResizeObserver(scheduleSyncAll);\n if (copyBody) resizeObserver.observe(copyBody);\n if (profile) resizeObserver.observe(profile);\n if (copyHead) resizeObserver.observe(copyHead);\n resizeObserver.observe(viewport);\n } else {\n window.addEventListener('resize', scheduleSyncAll);\n }\n if (toggleBtn) {\n toggleBtn.addEventListener('click', function () {\n if (mobileMq.matches) return;\n var willExpand = scrollRoot.classList.contains('is-collapsed');\n scrollRoot.classList.toggle('is-collapsed', !willExpand);\n scrollRoot.classList.toggle('is-expanded', willExpand);\n updateToggleUi();\n });\n }\n function syncAll() {\n applyScrollCap();\n syncScrollUi();\n }\n viewport.addEventListener('scroll', syncScrollUi, { passive: true });\n track.addEventListener('pointerdown', startPointerDrag);\n thumb.addEventListener('pointerdown', startPointerDrag);\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', scheduleSyncAll);\n mobileMq.addEventListener('change', scheduleSyncAll);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(scheduleSyncAll);\n mobileMq.addListener(scheduleSyncAll);\n }\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(scheduleSyncAll);\n }\n syncAll();\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v2').forEach(function (root) {\n if (root.dataset.newsV2Ready === 'true') return;\n root.dataset.newsV2Ready = 'true';\n var sliderEl = root.querySelector('.news-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.news-v2__pagination');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function destroySlider() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function initSlider() {\n if (!mobileMq.matches || swiperInstance) return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n });\n }\n function syncSliderMode() {\n if (mobileMq.matches) {\n initSlider();\n } else {\n destroySlider();\n }\n }\n function bootSwiper() {\n syncSliderMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncSliderMode);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncSliderMode);\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.promo-v2').forEach(function (root) {\n if (root.dataset.promoV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.promoV2Ready === 'true') return;\n root.dataset.promoV2Ready = 'true';\n var sliderEl = root.querySelector('.promo-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.promo-v2__pagination');\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 0,\n speed: 360,\n autoHeight: false,\n loop: slides.length > 1,\n navigation: {\n nextEl: root.querySelector('.promo-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.promo-v2__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) { syncDotsPagination(swiper, true); },\n resize: function (swiper) { syncDotsPagination(swiper, false); },\n breakpoint: function (swiper) { syncDotsPagination(swiper, true); },\n },\n });\n root.querySelectorAll('.promo-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-1');\n document.addEventListener('click', function (event) {\n var btn = event.target.closest('.cta-v1 .btn');\n if (!btn) return;\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('navigation\/variant-1');\n document.querySelectorAll('[data-navigation-v1]').forEach(function (root) {\n if (root.dataset.navigationV1Ready === 'true') return;\n root.dataset.navigationV1Ready = 'true';\n var links = Array.prototype.slice.call(root.querySelectorAll('[data-navigation-v1-link]'));\n var scrollEl = root.querySelector('[data-navigation-v1-scroll]');\n var prevBtn = root.querySelector('[data-navigation-v1-prev]');\n var nextBtn = root.querySelector('[data-navigation-v1-next]');\n var mobileTrigger = root.querySelector('[data-navigation-v1-mobile-trigger]');\n var mobilePanel = root.querySelector('[data-navigation-v1-mobile-panel]');\n var mobileTriggerTitle = root.querySelector('[data-navigation-v1-mobile-trigger-title]');\n var mobileTriggerIcon = root.querySelector('[data-navigation-v1-mobile-trigger-icon]');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var sections = [];\n var scrollSpyLock = false;\n var scrollSpyTimer = 0;\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n function parseHash(href) {\n try {\n return new URL(href, window.location.href).hash.replace(\/^#\/, '');\n } catch (e) {\n return '';\n }\n }\n function collectSections() {\n sections = [];\n var seenIds = {};\n links.forEach(function (link) {\n var id = parseHash(link.getAttribute('href') || '');\n if (!id || seenIds[id]) return;\n var el = document.getElementById(id);\n if (!el) return;\n seenIds[id] = true;\n sections.push({ id: id, el: el, link: link });\n });\n }\n function stickyTopOffset() {\n var styles = getComputedStyle(document.documentElement);\n var navH = parseFloat(styles.getPropertyValue('--site-nav-h')) || 0;\n var sticky = parseFloat(styles.getPropertyValue('--site-sticky-offset')) || 0;\n return Math.max(navH, sticky);\n }\n function scrollOffset() {\n var space = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--space-24')) || 24;\n return stickyTopOffset() + root.getBoundingClientRect().height + space;\n }\n function publishPageNavOffset() {\n document.documentElement.style.setProperty('--page-nav-offset', root.getBoundingClientRect().height + 'px');\n }\n function applyScrollMargins() {\n var offset = scrollOffset();\n sections.forEach(function (entry) {\n entry.el.style.scrollMarginTop = offset + 'px';\n });\n }\n function syncOverflowState() {\n root.classList.remove('navigation-v1--overflowing');\n root.classList.remove('navigation-v1--at-start');\n root.classList.remove('navigation-v1--at-end');\n if (mobileMq.matches) {\n syncOverflowControls();\n return;\n }\n if (!scrollEl) return;\n if (scrollEl.scrollWidth > scrollEl.clientWidth + 1) {\n root.classList.add('navigation-v1--overflowing');\n }\n syncOverflowControls();\n }\n function setMobileOpen(open) {\n if (!mobileTrigger || !mobilePanel) return;\n root.classList.toggle('navigation-v1--mobile-open', open);\n mobileTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n mobilePanel.hidden = !open;\n }\n function closeMobilePanel() {\n setMobileOpen(false);\n }\n function syncMobileTrigger() {\n if (!mobileTriggerTitle || !mobileMq.matches) return;\n var activeLink = null;\n links.some(function (link) {\n if (link.classList.contains('is-active')) {\n activeLink = link;\n return true;\n }\n return false;\n });\n if (!activeLink && links.length) {\n activeLink = links[0];\n }\n if (!activeLink) return;\n var titleNode = activeLink.querySelector('.navigation-v1__title');\n if (titleNode) {\n mobileTriggerTitle.textContent = titleNode.textContent || '';\n }\n if (mobileTriggerIcon) {\n var iconNode = activeLink.querySelector('.navigation-v1__icon-img');\n var iconSrc = iconNode ? (iconNode.getAttribute('src') || '') : '';\n if (iconSrc) {\n mobileTriggerIcon.src = iconSrc;\n mobileTriggerIcon.hidden = false;\n } else {\n mobileTriggerIcon.removeAttribute('src');\n mobileTriggerIcon.hidden = true;\n }\n }\n }\n function syncOverflowControls() {\n if (!scrollEl) return;\n if (mobileMq.matches) {\n root.classList.remove('navigation-v1--overflowing');\n root.classList.remove('navigation-v1--at-start');\n root.classList.remove('navigation-v1--at-end');\n if (prevBtn) prevBtn.hidden = true;\n if (nextBtn) nextBtn.hidden = true;\n return;\n }\n var canScroll = scrollEl.scrollWidth > scrollEl.clientWidth + 1;\n var isAtStart = !canScroll || scrollEl.scrollLeft <= 2;\n var isAtEnd = !canScroll || (scrollEl.scrollLeft + scrollEl.clientWidth >= scrollEl.scrollWidth - 2);\n root.classList.toggle('navigation-v1--overflowing', canScroll);\n root.classList.toggle('navigation-v1--at-start', isAtStart);\n root.classList.toggle('navigation-v1--at-end', isAtEnd);\n if (prevBtn) {\n prevBtn.hidden = !canScroll || isAtStart;\n }\n if (nextBtn) {\n nextBtn.hidden = !canScroll || isAtEnd;\n }\n }\n function setActiveLink(id) {\n links.forEach(function (link) {\n var active = parseHash(link.getAttribute('href') || '') === id;\n link.classList.toggle('is-active', active);\n var item = link.closest('.navigation-v1__item');\n if (item) {\n item.classList.toggle('is-active', active);\n }\n if (active) {\n link.setAttribute('aria-current', 'location');\n } else {\n link.removeAttribute('aria-current');\n }\n });\n syncMobileTrigger();\n }\n function scrollToEl(el) {\n if (!el) return;\n scrollSpyLock = true;\n window.clearTimeout(scrollSpyTimer);\n var top = el.getBoundingClientRect().top + window.pageYOffset - scrollOffset();\n top = Math.max(0, top);\n if (reduceMotionMq.matches) {\n (document.scrollingElement || document.documentElement).scrollTop = top;\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 50);\n return;\n }\n window.scrollTo({ top: top, behavior: 'smooth' });\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 700);\n }\n function scrollToHash(hash, updateHistory) {\n hash = (hash || '').replace(\/^#\/, '');\n if (!hash) return;\n var el = document.getElementById(hash);\n if (!el) return;\n if (updateHistory && history.replaceState) {\n history.replaceState(null, '', '#' + hash);\n }\n setActiveLink(hash);\n requestAnimationFrame(function () {\n scrollToEl(el);\n });\n }\n function initActiveFromHash() {\n var hash = (window.location.hash || '').replace(\/^#\/, '');\n if (hash && document.getElementById(hash)) {\n setActiveLink(hash);\n return;\n }\n if (sections.length) {\n setActiveLink(sections[0].id);\n }\n }\n collectSections();\n syncOverflowState();\n publishPageNavOffset();\n applyScrollMargins();\n initActiveFromHash();\n syncMobileTrigger();\n if (mobileTrigger && mobilePanel) {\n mobileTrigger.addEventListener('click', function () {\n if (!mobileMq.matches) return;\n setMobileOpen(mobilePanel.hidden);\n });\n document.addEventListener('click', function (event) {\n if (!mobileMq.matches || mobilePanel.hidden) return;\n if (root.contains(event.target)) return;\n closeMobilePanel();\n });\n document.addEventListener('keydown', function (event) {\n if (event.key === 'Escape') {\n closeMobilePanel();\n }\n });\n mobileMq.addEventListener('change', function () {\n closeMobilePanel();\n syncOverflowState();\n syncMobileTrigger();\n publishPageNavOffset();\n });\n }\n if (prevBtn && scrollEl) {\n prevBtn.addEventListener('click', function () {\n var delta = Math.max(scrollEl.clientWidth * 0.8, 240);\n scrollEl.scrollBy({\n left: -delta,\n behavior: reduceMotionMq.matches ? 'auto' : 'smooth'\n });\n });\n }\n if (nextBtn && scrollEl) {\n nextBtn.addEventListener('click', function () {\n var delta = Math.max(scrollEl.clientWidth * 0.8, 240);\n scrollEl.scrollBy({\n left: delta,\n behavior: reduceMotionMq.matches ? 'auto' : 'smooth'\n });\n });\n }\n if (scrollEl) {\n scrollEl.addEventListener('scroll', syncOverflowControls, { passive: true });\n }\n links.forEach(function (link) {\n link.addEventListener('click', function (event) {\n var url;\n try {\n url = new URL(link.href, window.location.href);\n } catch (e) {\n return;\n }\n if (url.pathname !== window.location.pathname) return;\n var el = document.getElementById(url.hash.replace(\/^#\/, ''));\n if (!el) return;\n event.preventDefault();\n closeMobilePanel();\n scrollToHash(url.hash, true);\n });\n });\n if ('IntersectionObserver' in window && sections.length) {\n var observer = new IntersectionObserver(function (entries) {\n if (scrollSpyLock) return;\n var visible = entries\n .filter(function (entry) { return entry.isIntersecting; })\n .sort(function (a, b) { return b.intersectionRatio - a.intersectionRatio; });\n if (!visible.length) return;\n var id = visible[0].target.id;\n if (!id) return;\n setActiveLink(id);\n }, {\n root: null,\n rootMargin: '-' + scrollOffset() + 'px 0px -55% 0px',\n threshold: [0, 0.1, 0.25, 0.5, 0.75]\n });\n sections.forEach(function (entry) {\n observer.observe(entry.el);\n });\n }\n function onResize() {\n syncOverflowState();\n publishPageNavOffset();\n applyScrollMargins();\n syncMobileTrigger();\n if (!mobileMq.matches) {\n closeMobilePanel();\n }\n }\n window.addEventListener('resize', onResize);\n window.addEventListener('hashchange', function () {\n scrollToHash(window.location.hash, false);\n });\n function scheduleHashScroll() {\n if (!(window.location.hash || '').replace(\/^#\/, '')) return;\n var run = function () {\n scrollToHash(window.location.hash, false);\n requestAnimationFrame(function () {\n scrollToHash(window.location.hash, false);\n });\n };\n run();\n window.setTimeout(run, 150);\n }\n if (document.readyState === 'complete') {\n scheduleHashScroll();\n } else {\n window.addEventListener('load', scheduleHashScroll);\n }\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('services\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.services-v4').forEach(function (root) {\n if (root.dataset.servicesV4Ready === 'true') return;\n root.dataset.servicesV4Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-services-v4-item]'));\n var emptyEl = root.querySelector('[data-services-v4-empty]');\n var chips = root.querySelectorAll('[data-services-v4-filter]');\n var select = root.querySelector('[data-services-v4-select]');\n var moreBtn = root.querySelector('[data-services-v4-more]');\n var searchInput = root.querySelector('[data-services-v4-search]');\n var mobileLimit = parseInt(root.dataset.servicesV4MobileLimit || '8', 10) || 8;\n var desktopRows = parseInt(root.dataset.servicesV4DesktopRows || '2', 10) || 2;\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var tabletMq = window.matchMedia('(max-width: 1360px)');\n var activeKey = 'all';\n var searchQuery = '';\n var expanded = false;\n function getVisibleLimit() {\n if (mobileMq.matches) {\n return mobileLimit;\n }\n var cols = parseInt(getComputedStyle(root).getPropertyValue('--services-v4-grid-cols'), 10) || 4;\n return cols * desktopRows;\n }\n function matchesFilter(item) {\n var itemFilters = (item.dataset.servicesV4Filters || '')\n .split(',')\n .map(function (value) { return value.trim(); })\n .filter(Boolean);\n return activeKey === 'all' || itemFilters.indexOf(activeKey) !== -1;\n }\n function matchesSearch(item) {\n if (!searchQuery) return true;\n var haystack = (item.getAttribute('data-services-v4-search-item') || '').toLowerCase();\n return haystack.indexOf(searchQuery) !== -1;\n }\n function matchesItem(item) {\n return matchesFilter(item) && matchesSearch(item);\n }\n function syncMoreButton(matchedCount) {\n if (!moreBtn) return;\n var limit = getVisibleLimit();\n moreBtn.hidden = expanded || matchedCount <= limit;\n }\n function syncEmpty(matchedCount) {\n if (!emptyEl) return;\n emptyEl.hidden = matchedCount > 0;\n var message = searchQuery\n ? (emptyEl.getAttribute('data-services-v4-empty-search') || '')\n : (emptyEl.getAttribute('data-services-v4-empty-filter') || '');\n if (message) {\n emptyEl.textContent = message;\n }\n }\n function syncVisibility() {\n var limit = getVisibleLimit();\n var matchedCount = 0;\n var visibleIndex = 0;\n items.forEach(function (item) {\n if (matchesItem(item)) {\n matchedCount += 1;\n }\n });\n items.forEach(function (item) {\n if (!matchesItem(item)) {\n item.hidden = true;\n item.classList.add('is-collapsed');\n return;\n }\n var collapsed = !expanded && visibleIndex >= limit;\n item.hidden = collapsed;\n item.classList.toggle('is-collapsed', collapsed);\n if (!collapsed) {\n visibleIndex += 1;\n }\n });\n syncEmpty(matchedCount);\n syncMoreButton(matchedCount);\n }\n function setActiveFilter(key) {\n activeKey = key || 'all';\n expanded = searchQuery !== '';\n chips.forEach(function (btn) {\n var isActive = (btn.dataset.servicesV4Filter || 'all') === activeKey;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n if (select && select.value !== activeKey) {\n select.value = activeKey;\n }\n syncVisibility();\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n setActiveFilter(chip.dataset.servicesV4Filter || 'all');\n });\n });\n if (select) {\n select.addEventListener('change', function () {\n setActiveFilter(select.value || 'all');\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n searchQuery = (searchInput.value || '').trim().toLowerCase();\n expanded = searchQuery !== '';\n syncVisibility();\n });\n }\n function bindMq(mq) {\n if (typeof mq.addEventListener === 'function') {\n mq.addEventListener('change', function () {\n if (expanded) return;\n syncVisibility();\n });\n } else if (typeof mq.addListener === 'function') {\n mq.addListener(function () {\n if (expanded) return;\n syncVisibility();\n });\n }\n }\n bindMq(mobileMq);\n bindMq(tabletMq);\n setActiveFilter('all');\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.promo-v1').forEach(function (root) {\n if (root.dataset.promoV1Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.promoV1Ready === 'true') return;\n root.dataset.promoV1Ready = 'true';\n var sliderEl = root.querySelector('.promo-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.promo-v1__pagination');\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: 1,\n slidesPerGroup: 2,\n spaceBetween: 16,\n speed: 320,\n autoHeight: false,\n loop: false,\n grid: {\n rows: 2,\n fill: 'row',\n },\n breakpoints: {\n 769: {\n slidesPerView: 2,\n slidesPerGroup: 2,\n spaceBetween: 40,\n grid: {\n rows: 1,\n },\n loop: slides.length > 2,\n },\n },\n navigation: {\n nextEl: root.querySelector('.promo-v1__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.promo-v1__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) { syncDotsPagination(swiper, true); },\n resize: function (swiper) { syncDotsPagination(swiper, false); },\n breakpoint: function (swiper) { syncDotsPagination(swiper, true); },\n },\n });\n root.querySelectorAll('.promo-v1__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-1');\n var root = document.querySelector('[data-text-v1]');\n if (!root) return;\n var btn = root.querySelector('[data-text-v1-toggle]');\n var spoiler = root.querySelector('[data-text-v1-spoiler]');\n if (!btn || !spoiler) return;\n btn.addEventListener('click', function () {\n var isHidden = spoiler.hasAttribute('hidden');\n if (isHidden) spoiler.removeAttribute('hidden');\n else spoiler.setAttribute('hidden', '');\n var expanded = !spoiler.hasAttribute('hidden');\n btn.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n btn.textContent = expanded ? \"\\u0421\\u043a\\u0440\\u044b\\u0442\\u044c\" : \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u0430\\u0442\\u044c \\u0435\\u0449\\u0435\";\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-6');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('progression-stages\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('progression-stages\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.progression-stages-v2').forEach(function (root) {\n if (root.dataset.progressionStagesV2Ready === 'true') return;\n root.dataset.progressionStagesV2Ready = 'true';\n if (typeof window.Swiper !== 'function') return;\n function bootProgressionStagesV2() {\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-progression-stages-v2-tab]'));\n var panels = Array.prototype.slice.call(root.querySelectorAll('[data-progression-stages-v2-panel]'));\n var tabsScroller = root.querySelector('[data-progression-stages-v2-tabs]');\n var tabsThumb = root.querySelector('[data-progression-stages-v2-tabs-thumb]');\n var swipers = [];\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var tabsProgressFrame = 0;\n function getPanelIndex(panel) {\n return parseInt(panel.getAttribute('data-index'), 10) || 0;\n }\n function updateTabsProgress() {\n tabsProgressFrame = 0;\n if (!tabsScroller || !tabsThumb) return;\n var track = tabsThumb.parentElement;\n var trackWidth = track ? track.clientWidth : 0;\n if (!trackWidth) return;\n var scrollWidth = tabsScroller.scrollWidth;\n var clientWidth = tabsScroller.clientWidth;\n if (scrollWidth <= clientWidth) {\n tabsThumb.style.transform = 'translate3d(0, 0, 0) scaleX(1)';\n return;\n }\n var thumbRatio = clientWidth \/ scrollWidth;\n var maxScroll = scrollWidth - clientWidth;\n var offsetRatio = tabsScroller.scrollLeft \/ maxScroll;\n var thumbWidth = trackWidth * thumbRatio;\n var maxOffset = Math.max(0, trackWidth - thumbWidth);\n var offset = offsetRatio * maxOffset;\n var scale = thumbWidth \/ trackWidth;\n tabsThumb.style.transform = 'translate3d(' + offset + 'px, 0, 0) scaleX(' + scale + ')';\n }\n function scheduleTabsProgress() {\n if (tabsProgressFrame) return;\n tabsProgressFrame = window.requestAnimationFrame(updateTabsProgress);\n }\n function scrollTabIntoView(tab) {\n if (!tabsScroller || !tab || !mobileMq.matches) return;\n var scrollerRect = tabsScroller.getBoundingClientRect();\n var tabRect = tab.getBoundingClientRect();\n var edge = 8;\n if (tabRect.left >= scrollerRect.left + edge && tabRect.right <= scrollerRect.right - edge) {\n return;\n }\n var target = tab.offsetLeft - (tabsScroller.clientWidth - tab.offsetWidth) \/ 2;\n var maxScroll = Math.max(0, tabsScroller.scrollWidth - tabsScroller.clientWidth);\n tabsScroller.scrollLeft = Math.max(0, Math.min(target, maxScroll));\n scheduleTabsProgress();\n }\n function syncDotsPagination(swiper, pagination, paginationHost, options) {\n if (!swiper.pagination || !pagination) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n if (mobileMq.matches) {\n swiper.pagination.enable();\n pagination.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = pagination.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n function initSwiper(panel) {\n var slider = panel.querySelector('[data-progression-stages-v2-slider]');\n var pagination = panel.querySelector('[data-progression-stages-v2-pagination]');\n var paginationHost = panel.querySelector('.progression-stages-v2__pagination-host');\n if (!slider) return null;\n return new window.Swiper(slider, {\n slidesPerView: 5,\n spaceBetween: 16,\n watchOverflow: true,\n pagination: pagination\n ? {\n el: pagination,\n clickable: true,\n type: 'bullets',\n dynamicBullets: true,\n }\n : undefined,\n breakpoints: {\n 0: {\n slidesPerView: 'auto',\n spaceBetween: 16,\n },\n 769: {\n slidesPerView: 5,\n spaceBetween: 16,\n },\n },\n on: {\n init: function (swiper) {\n syncDotsPagination(swiper, pagination, paginationHost, { forceRender: true });\n },\n resize: function (swiper) {\n syncDotsPagination(swiper, pagination, paginationHost, { forceRender: false });\n },\n breakpoint: function (swiper) {\n syncDotsPagination(swiper, pagination, paginationHost, { forceRender: true });\n },\n },\n });\n }\n function ensureSwiper(index) {\n if (swipers[index]) return swipers[index];\n var panel = null;\n for (var i = 0; i < panels.length; i++) {\n if (getPanelIndex(panels[i]) === index) {\n panel = panels[i];\n break;\n }\n }\n if (!panel) return null;\n swipers[index] = initSwiper(panel);\n return swipers[index];\n }\n function activate(index) {\n tabs.forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-index'), 10) || 0;\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n panels.forEach(function (panel) {\n var panelIndex = getPanelIndex(panel);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n if (isActive) {\n panel.removeAttribute('hidden');\n } else {\n panel.setAttribute('hidden', '');\n }\n });\n var activeSwiper = ensureSwiper(index);\n if (activeSwiper) {\n activeSwiper.update();\n var activePagination = activeSwiper.pagination && activeSwiper.pagination.el;\n var activePaginationHost = activePagination && activePagination.closest('.progression-stages-v2__pagination-host');\n syncDotsPagination(activeSwiper, activePagination, activePaginationHost, { forceRender: true });\n if (typeof activeSwiper.slideTo === 'function') {\n activeSwiper.slideTo(0, 0);\n }\n }\n if (mobileMq.matches) {\n scrollTabIntoView(tabs[index]);\n }\n }\n var initialIndex = 0;\n tabs.some(function (tab) {\n if (!tab.classList.contains('is-active')) return false;\n initialIndex = parseInt(tab.getAttribute('data-index'), 10) || 0;\n return true;\n });\n ensureSwiper(initialIndex);\n tabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n var index = parseInt(tab.getAttribute('data-index'), 10) || 0;\n activate(index);\n });\n tab.addEventListener('keydown', function (event) {\n var current = parseInt(tab.getAttribute('data-index'), 10) || 0;\n var next = current;\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n next = (current + 1) % tabs.length;\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n next = (current - 1 + tabs.length) % tabs.length;\n } else if (event.key === 'Home') {\n next = 0;\n } else if (event.key === 'End') {\n next = tabs.length - 1;\n } else {\n return;\n }\n event.preventDefault();\n activate(next);\n tabs[next].focus();\n });\n });\n if (tabsScroller) {\n tabsScroller.addEventListener('scroll', scheduleTabsProgress, { passive: true });\n }\n function onBreakpointChange() {\n swipers.forEach(function (instance) {\n if (!instance) return;\n instance.update();\n var pagination = instance.pagination && instance.pagination.el;\n var paginationHost = pagination && pagination.closest('.progression-stages-v2__pagination-host');\n syncDotsPagination(instance, pagination, paginationHost, { forceRender: true });\n });\n scheduleTabsProgress();\n }\n updateTabsProgress();\n window.addEventListener('resize', scheduleTabsProgress);\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', onBreakpointChange);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(onBreakpointChange);\n }\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootProgressionStagesV2);\n } else {\n bootProgressionStagesV2();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('prices\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.prices-v2--slider').forEach(function (root) {\n if (root.dataset.pricesV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.pricesV2Ready === 'true') return;\n root.dataset.pricesV2Ready = 'true';\n var sliderEl = root.querySelector('.prices-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n new Swiper(sliderEl, {\n slidesPerView: 1.08,\n slidesPerGroup: 1,\n spaceBetween: 16,\n speed: 320,\n autoHeight: false,\n loop: slides.length > 4,\n breakpoints: {\n 769: {\n slidesPerView: 2,\n slidesPerGroup: 1,\n spaceBetween: 24,\n },\n 1201: {\n slidesPerView: 3,\n slidesPerGroup: 1,\n spaceBetween: 32,\n },\n 1441: {\n slidesPerView: 4,\n slidesPerGroup: 1,\n spaceBetween: 40,\n },\n },\n navigation: {\n nextEl: root.querySelector('.prices-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.prices-v2__slider-nav .slider-nav__btn--prev'),\n },\n });\n root.querySelectorAll('.prices-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('linking-services\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.linking-services-v2').forEach(function (root) {\n if (root.dataset.linkingServicesV2Ready === 'true') return;\n root.dataset.linkingServicesV2Ready = 'true';\n var sliderEl = root.querySelector('[data-linking-services-v2-slider]');\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-linking-services-v2-item]'));\n var pages = Array.prototype.slice.call(root.querySelectorAll('.linking-services-v2__page'));\n var moreBtn = root.querySelector('[data-linking-services-v2-more]');\n var navPrev = root.querySelector('.linking-services-v2__nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.linking-services-v2__nav .slider-nav__btn--next');\n var mobileLimit = parseInt(root.dataset.linkingServicesV2MobileLimit || '6', 10) || 6;\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiper = null;\n var mobileVisible = mobileLimit;\n var wasMobile = mobileMq.matches;\n function syncMobilePages() {\n pages.forEach(function (page) {\n var visibleItems = page.querySelectorAll('[data-linking-services-v2-item]:not([hidden])');\n page.hidden = visibleItems.length === 0;\n });\n }\n function syncMobileVisibility() {\n if (!mobileMq.matches) {\n items.forEach(function (item) {\n item.hidden = false;\n });\n pages.forEach(function (page) {\n page.hidden = false;\n });\n if (moreBtn) {\n moreBtn.hidden = true;\n }\n return;\n }\n items.forEach(function (item, index) {\n item.hidden = index >= mobileVisible;\n });\n syncMobilePages();\n if (moreBtn) {\n moreBtn.hidden = mobileVisible >= items.length;\n }\n }\n function destroySlider() {\n if (!swiper) return;\n swiper.destroy(true, true);\n swiper = null;\n if (sliderEl) {\n sliderEl.classList.remove('is-ready');\n }\n }\n function initSlider() {\n if (!sliderEl || typeof Swiper === 'undefined') return;\n if (mobileMq.matches || !root.classList.contains('linking-services-v2--has-slider')) {\n destroySlider();\n return;\n }\n if (swiper) {\n swiper.update();\n return;\n }\n swiper = new Swiper(sliderEl, {\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 0,\n speed: 320,\n loop: false,\n watchOverflow: true,\n autoHeight: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n });\n sliderEl.classList.add('is-ready');\n }\n function syncLayout() {\n if (mobileMq.matches && !wasMobile) {\n mobileVisible = mobileLimit;\n }\n wasMobile = mobileMq.matches;\n syncMobileVisibility();\n initSlider();\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n mobileVisible = Math.min(items.length, mobileVisible + mobileLimit);\n syncMobileVisibility();\n });\n }\n root.querySelectorAll('.linking-services-v2__nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncLayout);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncLayout);\n }\n function bootSwiper() {\n syncLayout();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v2').forEach(function (root) {\n if (root.dataset.casesV2Ready === 'true') return;\n root.dataset.casesV2Ready = 'true';\n var sliderEl = root.querySelector('.cases-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n var paginationEl = root.querySelector('.cases-v2__pagination');\n var paginationHost = root.querySelector('.cases-v2__pagination-host');\n var navPrev = root.querySelector('.cases-v2__aside-nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.cases-v2__aside-nav .slider-nav__btn--next');\n var canSlide = slides.length > 1;\n function syncDotsPagination(swiper, options) {\n if (!swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n var isMobile = window.matchMedia('(max-width: 992px)').matches;\n if (isMobile) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n function initSwiper() {\n if (root.dataset.casesV2SwiperReady === 'true') return;\n if (canSlide) {\n new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 400,\n loop: false,\n rewind: true,\n allowTouchMove: true,\n roundLengths: true,\n watchOverflow: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n on: {\n init: function (swiper) {\n swiper.el.classList.add('is-settled');\n swiper.update();\n syncDotsPagination(swiper);\n },\n resize: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper);\n },\n breakpoint: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper);\n },\n slideChange: function (swiper) {\n syncDotsPagination(swiper, { forceRender: false });\n },\n touchStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n slideChangeTransitionStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n transitionEnd: function (swiper) {\n swiper.el.classList.add('is-settled');\n },\n },\n });\n root.querySelectorAll('.cases-v2__aside-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n } else {\n sliderEl.classList.add('cases-v2__slider--static');\n }\n root.dataset.casesV2SwiperReady = 'true';\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v2__media').forEach(function (media) {\n if (media.dataset.casesV2BeforeAfterReady === 'true') return;\n media.dataset.casesV2BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v2__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV2BlurTimer) {\n clearTimeout(media.__casesV2BlurTimer);\n media.__casesV2BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV2BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV2BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v2-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n if (canSlide) event.stopPropagation();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var step = 2;\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v2-reveal') || '50').replace('%', '')) || 50;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - step);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + step);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n initBeforeAfterSliders();\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('doctors\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.doctors-v1').forEach(function (root) {\n if (root.dataset.doctorsV1Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.doctorsV1Ready === 'true') return;\n root.dataset.doctorsV1Ready = 'true';\n var sliderEl = root.querySelector('.doctors-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 2) return;\n var styles = getComputedStyle(root);\n var pageStyles = getComputedStyle(document.documentElement);\n var mobileSlides = parseFloat(styles.getPropertyValue('--doctors-v1-mobile-slides-per-view')) || 1.15;\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n var paginationEl = root.querySelector('.doctors-v1__pagination');\n function syncDotsPagination(swiper) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: mobileSlides,\n slidesPerGroup: 1,\n spaceBetween: parseFloat(styles.getPropertyValue('--doctors-v1-track-gap')) || 16,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 769: {\n slidesPerView: 'auto',\n spaceBetween: 24,\n slidesOffsetAfter: 0,\n },\n },\n navigation: {\n nextEl: root.querySelector('.doctors-v1__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.doctors-v1__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: syncDotsPagination,\n resize: syncDotsPagination,\n breakpoint: syncDotsPagination,\n },\n });\n root.querySelectorAll('.doctors-v1__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v2').forEach(function (root) {\n if (root.dataset.reviewsV2Ready === 'true') return;\n root.dataset.reviewsV2Ready = 'true';\n var sliderEl = root.querySelector('.reviews-v2__slider.swiper');\n var listViewport = root.querySelector('.reviews-v2__list-viewport');\n var listEl = root.querySelector('.reviews-v2__list');\n var listItems = root.querySelectorAll('.reviews-v2__list-item');\n var canSlide = sliderEl && sliderEl.querySelectorAll('.swiper-slide').length > 1;\n var paginationEl = root.querySelector('.reviews-v2__pagination');\n var swiperInstance = null;\n var layoutSyncFrame = null;\n var currentActiveIndex = 0;\n function getListVisibleCount() {\n var fromData = parseInt(root.dataset.reviewsListVisible || '', 10);\n if (!Number.isNaN(fromData) && fromData > 0) {\n return fromData;\n }\n var fromCss = parseInt(getComputedStyle(root).getPropertyValue('--reviews-v2-list-visible'), 10);\n return !Number.isNaN(fromCss) && fromCss > 0 ? fromCss : 3;\n }\n function getListWindowStart(index) {\n var visibleCount = getListVisibleCount();\n var maxStart = Math.max(0, listItems.length - visibleCount);\n return Math.min(Math.max(0, index), maxStart);\n }\n function syncListViewportHeight() {\n if (!listViewport || !listEl || !listItems.length) return;\n if (!isDesktopMainLayout()) {\n listViewport.style.height = '';\n listEl.style.transform = '';\n return;\n }\n var visibleCount = getListVisibleCount();\n if (listItems.length <= visibleCount) {\n listViewport.style.height = '';\n listEl.style.transform = '';\n return;\n }\n var listStyles = getComputedStyle(listEl);\n var gap = parseFloat(listStyles.rowGap || listStyles.gap) || 0;\n var height = 0;\n for (var i = 0; i < visibleCount; i++) {\n height += listItems[i].offsetHeight;\n if (i < visibleCount - 1) {\n height += gap;\n }\n }\n listViewport.style.height = height + 'px';\n }\n function scrollListToActive(index) {\n if (!listViewport || !listEl || !listItems.length) return;\n currentActiveIndex = index;\n if (!isDesktopMainLayout()) {\n listEl.style.transform = '';\n listViewport.style.height = '';\n return;\n }\n syncListViewportHeight();\n var visibleCount = getListVisibleCount();\n if (listItems.length <= visibleCount) {\n listEl.style.transform = '';\n return;\n }\n var startIndex = getListWindowStart(index);\n var targetItem = listItems[startIndex];\n if (!targetItem) return;\n listEl.style.transform = 'translateY(-' + targetItem.offsetTop + 'px)';\n }\n function isDesktopMainLayout() {\n return window.matchMedia('(min-width: 1201px)').matches;\n }\n function syncFeaturedColumnHeight() {\n var styles = getComputedStyle(root);\n var heightOffset = parseFloat(styles.getPropertyValue('--reviews-v2-featured-height-offset')) || 0;\n var baseHeight = parseFloat(styles.getPropertyValue('--reviews-v2-featured-base-h')) || 474;\n if (!isDesktopMainLayout()) {\n root.style.setProperty('--reviews-v2-featured-min-h', Math.max(0, baseHeight - heightOffset) + 'px');\n updateAllFeaturedOverflow();\n return;\n }\n var listViewportEl = root.querySelector('.reviews-v2__list-viewport');\n var featuredCol = root.querySelector('.reviews-v2__featured-col');\n var controls = root.querySelector('.reviews-v2__controls');\n if (!listViewportEl || !featuredCol) return;\n var listHeight = listViewportEl.offsetHeight;\n if (listHeight <= 0) return;\n var colGap = parseFloat(getComputedStyle(featuredCol).gap) || 0;\n var controlsHeight = controls ? controls.offsetHeight : 0;\n var cardHeight = listHeight - controlsHeight - (controls ? colGap : 0) - heightOffset;\n if (cardHeight > 0) {\n root.style.setProperty('--reviews-v2-featured-min-h', cardHeight + 'px');\n }\n updateAllFeaturedOverflow();\n }\n function scheduleFeaturedColumnHeight() {\n if (layoutSyncFrame !== null) return;\n layoutSyncFrame = requestAnimationFrame(function () {\n layoutSyncFrame = null;\n syncListViewportHeight();\n scrollListToActive(currentActiveIndex);\n syncFeaturedColumnHeight();\n });\n }\n function updateFeaturedOverflow(card) {\n var quote = card.querySelector('.reviews-v2__quote');\n var readMore = card.querySelector('[data-reviews-v2-read-full]');\n if (!quote || !readMore) return;\n card.classList.remove('is-overflow');\n readMore.hidden = true;\n quote.style.removeProperty('-webkit-line-clamp');\n var styles = getComputedStyle(root);\n var maxLines = parseInt(styles.getPropertyValue('--reviews-v2-quote-lines'), 10) || 10;\n quote.style.display = '-webkit-box';\n quote.style.webkitBoxOrient = 'vertical';\n quote.style.overflow = 'hidden';\n quote.style.webkitLineClamp = String(maxLines);\n if (quote.scrollHeight > quote.clientHeight + 1) {\n card.classList.add('is-overflow');\n readMore.hidden = false;\n }\n }\n function updateAllFeaturedOverflow() {\n root.querySelectorAll('.reviews-v2__card--featured').forEach(updateFeaturedOverflow);\n }\n root.addEventListener('click', function (event) {\n var readBtn = event.target.closest('[data-reviews-v2-read-full]');\n if (!readBtn || !root.contains(readBtn)) return;\n event.preventDefault();\n var card = readBtn.closest('.reviews-v2__card--featured');\n var template = card ? card.querySelector('.reviews-v2__full-template') : null;\n var quote = card ? card.querySelector('.reviews-v2__quote') : null;\n if (!template || !quote || !window.Popup) return;\n var content = template.content.cloneNode(true);\n var quoteSlot = content.querySelector('[data-reviews-v2-popup-quote]');\n if (!quoteSlot) return;\n var popupQuote = quote.cloneNode(true);\n popupQuote.className = 'popup__review-text wysiwyg bodytext-md';\n popupQuote.style.removeProperty('-webkit-line-clamp');\n quoteSlot.appendChild(popupQuote);\n var popupContent = document.createElement('div');\n popupContent.appendChild(content);\n window.Popup.open('review', { html: popupContent.innerHTML });\n });\n function setActiveListItem(index) {\n listItems.forEach(function (item) {\n var isActive = parseInt(item.dataset.reviewsV2Index, 10) === index;\n item.classList.toggle('is-active', isActive);\n item.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n scrollListToActive(index);\n }\n function syncDotsPagination(swiper) {\n if (!swiper || !swiper.pagination || !paginationEl) return;\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n }\n function initSwiper() {\n if (root.dataset.reviewsV2SwiperReady === 'true') return;\n if (sliderEl && typeof Swiper !== 'undefined') {\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length > 1) {\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n watchOverflow: true,\n loop: false,\n rewind: true,\n navigation: {\n nextEl: root.querySelector('.reviews-v2__controls .slider-nav__btn--next'),\n prevEl: root.querySelector('.reviews-v2__controls .slider-nav__btn--prev'),\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n on: {\n init: function (swiper) {\n setActiveListItem(swiper.activeIndex);\n syncDotsPagination(swiper);\n scheduleFeaturedColumnHeight();\n },\n slideChange: function (swiper) {\n setActiveListItem(swiper.activeIndex);\n syncDotsPagination(swiper);\n updateAllFeaturedOverflow();\n },\n },\n });\n } else if (slides.length === 1) {\n setActiveListItem(0);\n scheduleFeaturedColumnHeight();\n }\n } else {\n scheduleFeaturedColumnHeight();\n }\n listItems.forEach(function (item) {\n item.addEventListener('click', function () {\n var index = parseInt(item.dataset.reviewsV2Index, 10);\n if (!swiperInstance || Number.isNaN(index)) return;\n swiperInstance.slideTo(index);\n });\n });\n root.querySelectorAll('.reviews-v2__controls .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n root.dataset.reviewsV2SwiperReady = 'true';\n }\n scheduleFeaturedColumnHeight();\n if (typeof ResizeObserver !== 'undefined') {\n if (listViewport) {\n var listObserver = new ResizeObserver(function () {\n scheduleFeaturedColumnHeight();\n });\n listObserver.observe(listViewport);\n }\n if (listEl) {\n var listItemsObserver = new ResizeObserver(function () {\n scheduleFeaturedColumnHeight();\n });\n listItemsObserver.observe(listEl);\n }\n var featuredObserver = new ResizeObserver(function () {\n updateAllFeaturedOverflow();\n });\n root.querySelectorAll('.reviews-v2__card--featured').forEach(function (card) {\n featuredObserver.observe(card);\n });\n }\n window.addEventListener('resize', scheduleFeaturedColumnHeight);\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(scheduleFeaturedColumnHeight);\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('linking-services\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.linking-services-v1').forEach(function (root) {\n if (root.dataset.linkingServicesV1Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.linkingServicesV1Ready === 'true') return;\n root.dataset.linkingServicesV1Ready = 'true';\n var sliderEl = root.querySelector('.linking-services-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var navPrev = root.querySelector('.linking-services-v1__nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.linking-services-v1__nav .slider-nav__btn--next');\n var paginationEl = root.querySelector('.linking-services-v1__pagination');\n var paginationHost = root.querySelector('.linking-services-v1__slider-foot .slider-pagination-host');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n function getSlideGap() {\n var styles = getComputedStyle(root);\n var gap = parseFloat(styles.getPropertyValue('--linking-services-v1-slide-gap'));\n return Number.isFinite(gap) ? gap : 40;\n }\n function syncDotsPagination(swiper, options) {\n if (!swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n if (mobileMq.matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n var swiper = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n spaceBetween: getSlideGap(),\n speed: 320,\n loop: false,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n breakpoints: {\n 0: {\n spaceBetween: 16,\n },\n 769: {\n spaceBetween: getSlideGap(),\n },\n },\n on: {\n init: function (s) {\n syncDotsPagination(s);\n },\n resize: function (s) {\n syncDotsPagination(s);\n },\n breakpoint: function (s) {\n syncDotsPagination(s);\n },\n slideChange: function (s) {\n syncDotsPagination(s, { forceRender: false });\n },\n },\n });\n root.querySelectorAll('.linking-services-v1__nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('expert-advice\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.promo-v3').forEach(function (root) {\n if (root.dataset.promoV3Ready === 'true') return;\n root.dataset.promoV3Ready = 'true';\n var sliderEl = root.querySelector('.promo-v3__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n var paginationEl = root.querySelector('.promo-v3__pagination');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function isMobile() {\n return mobileMq.matches;\n }\n function shouldUseSlider() {\n return slides.length > 3 && !isMobile();\n }\n function destroySwiper() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function applySlidesLimit() {\n var limit = parseInt(root.dataset.promoV3MobileLimit || '3', 10);\n if (!limit || limit < 1) limit = 3;\n slides.forEach(function (slide, index) {\n slide.hidden = isMobile() && index >= limit;\n });\n }\n function mountSlider() {\n destroySwiper();\n applySlidesLimit();\n if (!shouldUseSlider()) {\n sliderEl.classList.add('promo-v3__slider--static');\n return;\n }\n sliderEl.classList.remove('promo-v3__slider--static');\n swiperInstance = new Swiper(sliderEl, {\n direction: 'vertical',\n slidesPerView: 3,\n slidesPerGroup: 1,\n spaceBetween: 24,\n speed: 360,\n autoHeight: false,\n loop: slides.length > 5,\n watchOverflow: true,\n navigation: {\n nextEl: root.querySelector('.promo-v3__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.promo-v3__slider-nav .slider-nav__btn--prev'),\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n });\n }\n function bootSwiper() {\n mountSlider();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', mountSlider);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(mountSlider);\n }\n root.querySelectorAll('.promo-v3__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('faq\/variant-1');\n function initRoot(root) {\n if (root.dataset.faqV1Ready === 'true') return;\n root.dataset.faqV1Ready = 'true';\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var items = Array.prototype.slice.call(root.querySelectorAll('.faq-v1__item'));\n var moreBtn = root.querySelector('[data-faq-v1-more]');\n var configEl = root.querySelector('.faq-v1__grid') || root;\n var initial = parseInt(configEl.getAttribute('data-faq-v1-initial'), 10) || 0;\n var step = parseInt(configEl.getAttribute('data-faq-v1-step'), 10) || 0;\n function shouldAnimate() {\n return !reduceMotionMq.matches;\n }\n function updateMoreButton() {\n if (!moreBtn) return;\n var hasHidden = items.some(function (item) { return item.hidden; });\n moreBtn.hidden = !hasHidden;\n }\n function revealNextBatch() {\n if (!step) return;\n var shown = 0;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].hidden) continue;\n items[i].hidden = false;\n shown += 1;\n if (shown >= step) break;\n }\n updateMoreButton();\n }\n if (initial && items.length > initial) {\n items.forEach(function (item, idx) {\n if (idx >= initial) item.hidden = true;\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', revealNextBatch);\n updateMoreButton();\n }\n function closeItem(item) {\n var trigger = item.querySelector('.faq-v1__trigger');\n var panel = item.querySelector('.faq-v1__panel');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n panel.hidden = true;\n }\n function openItem(item) {\n var trigger = item.querySelector('.faq-v1__trigger');\n var panel = item.querySelector('.faq-v1__panel');\n if (!panel) return;\n panel.hidden = false;\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n if (!shouldAnimate()) {\n item.classList.add('is-open');\n return;\n }\n item.classList.remove('is-open');\n void panel.offsetHeight;\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n }\n root.addEventListener('click', function (event) {\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v1__trigger');\n if (!trigger || !root.contains(trigger)) return;\n var item = trigger.closest('.faq-v1__item');\n if (!item) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeItem(entry);\n });\n openItem(item);\n });\n root.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v1__trigger');\n if (!trigger || !root.contains(trigger)) return;\n event.preventDefault();\n trigger.click();\n });\n }\n function boot() {\n document.querySelectorAll('.faq-v1').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-5');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('benefits\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patient-errors\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('content-strip-link\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-technologies\/variant-1');\n function initRoot(root) {\n if (root.dataset.treatmentTechnologiesV1Ready === 'true') return;\n root.dataset.treatmentTechnologiesV1Ready = 'true';\n var items = root.querySelectorAll('.treatment-technologies-v1__item');\n if (!items.length) return;\n var list = root.querySelector('.treatment-technologies-v1__list');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 350;\n var activeDesktopIndex = 0;\n function isDesktop() {\n return desktopMq.matches;\n }\n function shouldAnimateAccordion() {\n return !isDesktop() && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!list) return;\n if (!isDesktop()) {\n list.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-treatment-technologies-panel].is-active');\n if (!activePanel) {\n list.style.minHeight = '';\n return;\n }\n list.style.minHeight = '';\n var tabsHeight = list.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n list.style.minHeight = Math.max(tabsHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function deactivateTab(tab) {\n if (!tab) return;\n tab.classList.remove('is-active');\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n }\n function deactivateAccordionTabVisual(item) {\n deactivateTab(item.querySelector('[data-treatment-technologies-tab]'));\n }\n function finalizeAccordionClose(item) {\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n deactivateAccordionTabVisual(item);\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n }\n }\n function activateDesktop(index) {\n activeDesktopIndex = index;\n root.querySelectorAll('[data-treatment-technologies-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-treatment-technologies-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n root.querySelectorAll('[data-treatment-technologies-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-treatment-technologies-index'), 10);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, instantVisual) {\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n panel.setAttribute('aria-hidden', 'true');\n if (instantVisual) {\n deactivateAccordionTabVisual(item);\n }\n if (!shouldAnimateAccordion()) {\n finalizeAccordionClose(item);\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n finalizeAccordionClose(item);\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var tab = item.querySelector('[data-treatment-technologies-tab]');\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n if (!panel) return;\n var index = parseInt(panel.getAttribute('data-treatment-technologies-index'), 10);\n if (!isNaN(index)) {\n activeDesktopIndex = index;\n }\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-selected', 'true');\n tab.tabIndex = 0;\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n if (shouldAnimateAccordion()) {\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n return;\n }\n item.classList.add('is-open');\n }\n function resetMobileAccordion() {\n items.forEach(function (item) {\n item.classList.remove('is-open');\n deactivateAccordionTabVisual(item);\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n panel.setAttribute('aria-hidden', 'true');\n }\n });\n }\n function syncLayout() {\n if (isDesktop()) {\n activateDesktop(activeDesktopIndex);\n syncStageHeight();\n return;\n }\n if (list) {\n list.style.minHeight = '';\n }\n resetMobileAccordion();\n }\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-treatment-technologies-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-treatment-technologies-index'), 10);\n if (isNaN(index)) return;\n if (isDesktop()) {\n activateDesktop(index);\n return;\n }\n var item = tab.closest('.treatment-technologies-v1__item');\n if (!item) return;\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n });\n root.addEventListener('keydown', function (event) {\n var tab = event.target.closest('[data-treatment-technologies-tab]');\n if (!tab || !root.contains(tab)) return;\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-treatment-technologies-tab]'));\n var index = tabs.indexOf(tab);\n if (index === -1) return;\n var nextIndex = index;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (index + 1) % tabs.length;\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextIndex = (index - 1 + tabs.length) % tabs.length;\n } else {\n return;\n }\n event.preventDefault();\n var nextTab = tabs[nextIndex];\n var nextItemIndex = parseInt(nextTab.getAttribute('data-treatment-technologies-index'), 10);\n if (isDesktop()) {\n activateDesktop(nextItemIndex);\n nextTab.focus();\n return;\n }\n var item = nextTab.closest('.treatment-technologies-v1__item');\n if (!item) return;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n nextTab.focus();\n });\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', syncLayout);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(syncLayout);\n }\n root.querySelectorAll('.treatment-technologies-v1__media-img').forEach(function (img) {\n if (img.complete) return;\n img.addEventListener('load', syncStageHeight, { once: true });\n });\n window.addEventListener('resize', scheduleStageHeight);\n syncLayout();\n }\n function boot() {\n document.querySelectorAll('.treatment-technologies-v1').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('doctors\/variant-6');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.doctors-v6').forEach(function (root) {\n if (root.dataset.doctorsV6Ready === 'true') return;\n root.dataset.doctorsV6Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-doctors-v6-item]'));\n var moreBtn = root.querySelector('[data-doctors-v6-more]');\n var countEl = root.querySelector('[data-doctors-v6-count]');\n var emptyEl = root.querySelector('[data-doctors-v6-empty]');\n var footEl = root.querySelector('.doctors-v6__foot');\n var bannerItem = root.querySelector('.doctors-v6__banner-item');\n var searchInput = root.querySelector('[data-doctors-v6-search]');\n var searchPhEl = root.querySelector('[data-doctors-v6-search-ph]');\n var specialtySelect = root.querySelector('[data-doctors-v6-specialty]');\n var directionSelect = root.querySelector('[data-doctors-v6-direction]');\n var genderSelect = root.querySelector('[data-doctors-v6-gender]');\n var experienceSelect = root.querySelector('[data-doctors-v6-experience]');\n var extraEl = root.querySelector('[data-doctors-v6-extra]');\n var filtersEl = root.querySelector('[data-doctors-v6-filters]');\n var moreParamsBtn = root.querySelector('[data-doctors-v6-more-params]');\n var moreParamsLabel = root.querySelector('[data-doctors-v6-more-params-label]');\n var metaEl = root.querySelector('[data-doctors-v6-meta]');\n var foundEl = root.querySelector('[data-doctors-v6-found]');\n var resetBtn = root.querySelector('[data-doctors-v6-reset]');\n var mobileLimit = parseInt(root.dataset.doctorsV6MobileLimit || '4', 10) || 4;\n var desktopRows = parseInt(root.dataset.doctorsV6DesktopRows || '4', 10) || 4;\n var hasBanner = !!bannerItem;\n var mobileMq = window.matchMedia('(max-width: 600px)');\n var tabletMq = window.matchMedia('(max-width: 1360px)');\n var expanded = false;\n var extraOpen = false;\n var specialtyKey = 'all';\n var directionKey = 'all';\n var genderKey = 'all';\n var experienceMin = 0;\n var searchQuery = '';\n var onlineOnly = false;\n var todayOnly = false;\n var pediatricOnly = false;\n function isDefaultFilters() {\n return specialtyKey === 'all'\n && directionKey === 'all'\n && genderKey === 'all'\n && experienceMin <= 0\n && !searchQuery\n && !onlineOnly\n && !todayOnly\n && !pediatricOnly;\n }\n function getVisibleLimit() {\n if (mobileMq.matches) {\n return mobileLimit;\n }\n var cols = parseInt(getComputedStyle(root).getPropertyValue('--doctors-v6-grid-cols'), 10) || 4;\n var limit = cols * desktopRows;\n if (hasBanner && isDefaultFilters()) {\n limit -= 2;\n }\n return Math.max(0, limit);\n }\n function matchesItem(item) {\n if (specialtyKey !== 'all' && (item.getAttribute('data-doctors-v6-specialty-key') || '') !== specialtyKey) {\n return false;\n }\n if (directionKey !== 'all' && (item.getAttribute('data-doctors-v6-direction-key') || '') !== directionKey) {\n return false;\n }\n if (genderKey !== 'all' && (item.getAttribute('data-doctors-v6-gender') || '') !== genderKey) {\n return false;\n }\n if (experienceMin > 0) {\n var years = parseInt(item.getAttribute('data-doctors-v6-experience') || '0', 10) || 0;\n if (years < experienceMin) {\n return false;\n }\n }\n if (onlineOnly && item.getAttribute('data-doctors-v6-online') !== '1') {\n return false;\n }\n if (todayOnly && item.getAttribute('data-doctors-v6-today') !== '1') {\n return false;\n }\n if (pediatricOnly && item.getAttribute('data-doctors-v6-pediatric') !== '1') {\n return false;\n }\n if (!searchQuery) {\n return true;\n }\n var haystack = (item.getAttribute('data-doctors-v6-search-item') || '').toLowerCase();\n return haystack.indexOf(searchQuery) !== -1;\n }\n function syncCount(visibleCount, matchedCount) {\n if (!countEl) return;\n var before = countEl.getAttribute('data-doctors-v6-count-before') || '';\n var mid = countEl.getAttribute('data-doctors-v6-count-mid') || '';\n var after = countEl.getAttribute('data-doctors-v6-count-after') || '';\n countEl.textContent = before + ' ' + visibleCount + ' ' + mid + ' ' + matchedCount + ' ' + after;\n }\n function syncEmpty(matchedCount) {\n if (!emptyEl) return;\n emptyEl.hidden = matchedCount > 0;\n var message = searchQuery\n ? (emptyEl.getAttribute('data-doctors-v6-empty-search') || '')\n : (emptyEl.getAttribute('data-doctors-v6-empty-filter') || '');\n if (message) {\n emptyEl.textContent = message;\n }\n }\n function syncVisibility() {\n var limit = getVisibleLimit();\n var matchedCount = 0;\n var visibleCount = 0;\n var visibleIndex = 0;\n var showBanner = hasBanner && isDefaultFilters();\n if (bannerItem) {\n bannerItem.hidden = !showBanner;\n }\n items.forEach(function (item) {\n if (!matchesItem(item)) {\n item.hidden = true;\n return;\n }\n matchedCount += 1;\n var collapsed = !expanded && visibleIndex >= limit;\n item.hidden = collapsed;\n if (!collapsed) {\n visibleCount += 1;\n }\n visibleIndex += 1;\n });\n if (moreBtn) {\n moreBtn.hidden = expanded || matchedCount <= limit;\n }\n if (footEl) {\n footEl.hidden = matchedCount === 0;\n }\n syncEmpty(matchedCount);\n syncCount(visibleCount, matchedCount);\n syncFilterChrome(matchedCount);\n syncCardActions();\n }\n function syncCardActions() {\n root.querySelectorAll('.doctors-v6__actions').forEach(function (actions) {\n if (mobileMq.matches) {\n actions.classList.remove('is-actions-stacked');\n return;\n }\n var book = actions.querySelector('.doctors-v6__book');\n var more = actions.querySelector('.doctors-v6__more-link');\n if (!book || !more) {\n actions.classList.remove('is-actions-stacked');\n return;\n }\n var stacked = more.offsetTop > book.offsetTop + (book.offsetHeight \/ 2);\n actions.classList.toggle('is-actions-stacked', stacked);\n });\n }\n function syncSelectClear(select) {\n if (!select) return;\n var wrap = select.closest('.doctors-v6__select-wrap');\n if (!wrap) return;\n var filled = (select.value || 'all') !== 'all';\n wrap.classList.toggle('is-filled', filled);\n var clearBtn = wrap.querySelector('[data-doctors-v6-clear]');\n if (clearBtn) {\n clearBtn.hidden = !filled;\n }\n }\n function ruCountWord(n, one, few, many) {\n var abs = Math.abs(n) | 0;\n var n10 = abs % 10;\n var n100 = abs % 100;\n if (n10 === 1 && n100 !== 11) return one;\n if (n10 >= 2 && n10 <= 4 && (n100 < 12 || n100 > 14)) return few;\n return many;\n }\n function syncFilterChrome(matchedCount) {\n var filtered = !isDefaultFilters();\n if (metaEl) {\n metaEl.hidden = !filtered;\n }\n if (foundEl && filtered) {\n var prefix = foundEl.getAttribute('data-doctors-v6-found-prefix') || '';\n var one = foundEl.getAttribute('data-doctors-v6-found-one') || '';\n var few = foundEl.getAttribute('data-doctors-v6-found-few') || '';\n var many = foundEl.getAttribute('data-doctors-v6-found-many') || '';\n foundEl.textContent = prefix + ' ' + matchedCount + ' ' + ruCountWord(matchedCount, one, few, many);\n }\n syncSelectClear(specialtySelect);\n syncSelectClear(directionSelect);\n syncSelectClear(genderSelect);\n syncSelectClear(experienceSelect);\n }\n function measurePlaceholderText(input, text) {\n var canvas = input._doctorsV6PhCanvas;\n if (!canvas) {\n canvas = document.createElement('canvas');\n input._doctorsV6PhCanvas = canvas;\n }\n var ctx = canvas.getContext('2d');\n var cs = window.getComputedStyle(searchPhEl || input);\n var size = cs.fontSize || '16px';\n var family = cs.fontFamily || 'sans-serif';\n var weight = cs.fontWeight || '400';\n var style = cs.fontStyle || 'normal';\n ctx.font = style + ' ' + weight + ' ' + size + ' ' + family;\n return ctx.measureText(text).width;\n }\n function placeholderMaxWidth() {\n if (searchPhEl && searchPhEl.clientWidth > 0) {\n return searchPhEl.clientWidth;\n }\n if (!searchInput) return 0;\n var cs = window.getComputedStyle(searchInput);\n var inputRect = searchInput.getBoundingClientRect();\n var left = inputRect.left\n + (parseFloat(cs.borderLeftWidth) || 0)\n + (parseFloat(cs.paddingLeft) || 0);\n var icon = searchInput.parentNode && searchInput.parentNode.querySelector('.doctors-v6__search-icon');\n var right = icon\n ? icon.getBoundingClientRect().left\n : (inputRect.right - (parseFloat(cs.borderRightWidth) || 0) - (parseFloat(cs.paddingRight) || 0));\n return Math.max(0, right - left - 16);\n }\n function placeholderWidthFits(input, text) {\n return measurePlaceholderText(input || searchInput, text) <= placeholderMaxWidth();\n }\n function fitPlaceholderText(input, full) {\n if (placeholderWidthFits(input, full)) {\n return full;\n }\n var suffix = '..';\n var lo = 0;\n var hi = full.length;\n while (lo < hi) {\n var mid = (lo + hi + 1) >> 1;\n var candidate = full.slice(0, mid).replace(\/\\s+$\/, '') + suffix;\n if (placeholderWidthFits(input, candidate)) {\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n var result = lo > 0 ? full.slice(0, lo).replace(\/\\s+$\/, '') + suffix : suffix;\n while (result.length > suffix.length && !placeholderWidthFits(input, result)) {\n result = result.slice(0, result.length - suffix.length - 1).replace(\/\\s+$\/, '') + suffix;\n }\n return result;\n }\n function syncSearchPlaceholder() {\n if (!searchInput) return;\n var desktopPh = searchInput.getAttribute('data-doctors-v6-search-placeholder') || '';\n var mobilePh = searchInput.getAttribute('data-doctors-v6-search-placeholder-mobile') || desktopPh;\n var full = mobileMq.matches ? mobilePh : desktopPh;\n searchInput.setAttribute('aria-label', full);\n searchInput.placeholder = '';\n var fitted = fitPlaceholderText(searchInput, full);\n if (searchPhEl) {\n searchPhEl.textContent = fitted;\n }\n if (searchInput.parentNode) {\n searchInput.parentNode.classList.toggle('is-typed', !!(searchInput.value || '').length);\n }\n }\n function syncExtraPanel() {\n if (filtersEl) {\n filtersEl.classList.toggle('is-extra-open', extraOpen);\n }\n if (extraEl) {\n extraEl.hidden = !extraOpen;\n }\n if (moreParamsBtn) {\n moreParamsBtn.setAttribute('aria-expanded', extraOpen ? 'true' : 'false');\n var openLabel = moreParamsBtn.getAttribute('data-doctors-v6-more-params-open') || '';\n var mobileLabel = moreParamsBtn.getAttribute('data-doctors-v6-more-params-mobile') || openLabel;\n var closeLabel = moreParamsBtn.getAttribute('data-doctors-v6-more-params-close') || '';\n var closedLabel = mobileMq.matches ? mobileLabel : openLabel;\n if (moreParamsLabel) {\n moreParamsLabel.textContent = extraOpen ? closeLabel : closedLabel;\n }\n }\n }\n function resetFilters() {\n specialtyKey = 'all';\n directionKey = 'all';\n genderKey = 'all';\n experienceMin = 0;\n searchQuery = '';\n onlineOnly = false;\n todayOnly = false;\n pediatricOnly = false;\n if (specialtySelect) specialtySelect.value = 'all';\n if (directionSelect) directionSelect.value = 'all';\n if (genderSelect) genderSelect.value = 'all';\n if (experienceSelect) experienceSelect.value = 'all';\n if (searchInput) searchInput.value = '';\n if (searchInput && searchInput.parentNode) {\n searchInput.parentNode.classList.remove('is-typed');\n }\n root.querySelectorAll('[data-doctors-v6-toggle]').forEach(function (input) {\n input.checked = false;\n });\n onFiltersChange();\n syncSearchPlaceholder();\n }\n function onFiltersChange() {\n expanded = false;\n syncVisibility();\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n searchQuery = (searchInput.value || '').trim().toLowerCase();\n if (searchInput.parentNode) {\n searchInput.parentNode.classList.toggle('is-typed', !!(searchInput.value || '').length);\n }\n onFiltersChange();\n });\n }\n if (specialtySelect) {\n specialtySelect.addEventListener('change', function () {\n specialtyKey = specialtySelect.value || 'all';\n onFiltersChange();\n });\n }\n if (directionSelect) {\n directionSelect.addEventListener('change', function () {\n directionKey = directionSelect.value || 'all';\n onFiltersChange();\n });\n }\n if (genderSelect) {\n genderSelect.addEventListener('change', function () {\n genderKey = genderSelect.value || 'all';\n onFiltersChange();\n });\n }\n if (experienceSelect) {\n experienceSelect.addEventListener('change', function () {\n var value = experienceSelect.value || 'all';\n experienceMin = value === 'all' ? 0 : (parseInt(value, 10) || 0);\n onFiltersChange();\n });\n }\n root.querySelectorAll('[data-doctors-v6-toggle]').forEach(function (input) {\n input.addEventListener('change', function () {\n var kind = input.getAttribute('data-doctors-v6-toggle');\n var on = !!input.checked;\n if (kind === 'online') onlineOnly = on;\n if (kind === 'today') todayOnly = on;\n if (kind === 'pediatric') pediatricOnly = on;\n onFiltersChange();\n });\n });\n if (moreParamsBtn) {\n moreParamsBtn.addEventListener('click', function () {\n extraOpen = !extraOpen;\n syncExtraPanel();\n });\n }\n if (resetBtn) {\n resetBtn.addEventListener('click', function () {\n resetFilters();\n });\n }\n root.querySelectorAll('[data-doctors-v6-clear]').forEach(function (btn) {\n btn.addEventListener('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n var kind = btn.getAttribute('data-doctors-v6-clear');\n if (kind === 'specialty' && specialtySelect) {\n specialtySelect.value = 'all';\n specialtyKey = 'all';\n }\n if (kind === 'direction' && directionSelect) {\n directionSelect.value = 'all';\n directionKey = 'all';\n }\n if (kind === 'gender' && genderSelect) {\n genderSelect.value = 'all';\n genderKey = 'all';\n }\n if (kind === 'experience' && experienceSelect) {\n experienceSelect.value = 'all';\n experienceMin = 0;\n }\n onFiltersChange();\n });\n });\n function bindMq(mq) {\n if (typeof mq.addEventListener === 'function') {\n mq.addEventListener('change', function () {\n syncSearchPlaceholder();\n syncExtraPanel();\n syncCardActions();\n if (expanded) return;\n syncVisibility();\n });\n } else if (typeof mq.addListener === 'function') {\n mq.addListener(function () {\n syncSearchPlaceholder();\n syncExtraPanel();\n syncCardActions();\n if (expanded) return;\n syncVisibility();\n });\n }\n }\n bindMq(mobileMq);\n bindMq(tabletMq);\n if (typeof ResizeObserver === 'function') {\n var actionsRo = new ResizeObserver(function () {\n syncCardActions();\n });\n root.querySelectorAll('.doctors-v6__actions').forEach(function (actions) {\n actionsRo.observe(actions);\n });\n } else {\n window.addEventListener('resize', syncCardActions);\n }\n if (searchInput && typeof ResizeObserver === 'function') {\n var searchRo = new ResizeObserver(function () {\n syncSearchPlaceholder();\n });\n searchRo.observe(searchPhEl || searchInput);\n } else {\n window.addEventListener('resize', syncSearchPlaceholder);\n }\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(function () {\n syncSearchPlaceholder();\n syncCardActions();\n });\n }\n syncSearchPlaceholder();\n syncExtraPanel();\n syncVisibility();\n requestAnimationFrame(syncCardActions);\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('prices\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.prices-v3').forEach(function (root) {\n if (root.dataset.pricesV3Ready === 'true') return;\n root.dataset.pricesV3Ready = 'true';\n var tabs = root.querySelectorAll('[data-prices-v3-tab]');\n var panels = root.querySelectorAll('[data-prices-v3-panel]');\n var searchInput = root.querySelector('[data-prices-v3-search]');\n var categorySelect = root.querySelector('[data-prices-v3-select]');\n function getActivePanel() {\n return root.querySelector('.prices-v3__panel.is-active');\n }\n function activateTab(key) {\n tabs.forEach(function (tab) {\n var isActive = tab.getAttribute('data-prices-v3-tab') === key;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n panels.forEach(function (panel) {\n var isActive = panel.getAttribute('data-prices-v3-panel') === key;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n });\n if (categorySelect && categorySelect.value !== key) {\n categorySelect.value = key;\n }\n if (searchInput) {\n searchInput.value = '';\n filterActivePanel('');\n }\n }\n function filterActivePanel(query) {\n var panel = getActivePanel();\n if (!panel) return;\n var normalized = (query || '').trim().toLowerCase();\n panel.querySelectorAll('[data-prices-v3-search-item]').forEach(function (item) {\n var haystack = (item.getAttribute('data-prices-v3-search-item') || '').toLowerCase();\n var match = normalized === '' || haystack.indexOf(normalized) !== -1;\n item.classList.toggle('is-hidden', !match);\n });\n }\n tabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n activateTab(tab.getAttribute('data-prices-v3-tab'));\n });\n });\n if (categorySelect) {\n categorySelect.addEventListener('change', function () {\n activateTab(categorySelect.value);\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n filterActivePanel(searchInput.value);\n });\n }\n root.querySelectorAll('[data-prices-v3-group]:not(.prices-v3__item--group-static)').forEach(function (group) {\n var trigger = group.querySelector('[data-prices-v3-group-trigger]');\n var panel = group.querySelector('[data-prices-v3-group-panel]');\n if (!trigger || !panel) return;\n trigger.addEventListener('click', function () {\n var willOpen = !group.classList.contains('is-open');\n if (willOpen) {\n group.classList.add('is-open');\n trigger.setAttribute('aria-expanded', 'true');\n panel.hidden = false;\n } else {\n group.classList.remove('is-open');\n trigger.setAttribute('aria-expanded', 'false');\n panel.hidden = true;\n }\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo-banners\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-7');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('prices\/variant-4');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v3').forEach(function (root) {\n if (root.dataset.casesV3Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.casesV3Ready === 'true') return;\n root.dataset.casesV3Ready = 'true';\n var sliderEl = root.querySelector('.cases-v3__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.cases-v3__pagination');\n var navPrev = root.querySelector('.cases-v3__slider-nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.cases-v3__slider-nav .slider-nav__btn--next');\n var carouselEl = root.querySelector('.cases-v3__carousel');\n var configuredSlides = parseInt(root.dataset.casesV3DesktopSlides, 10) || 3;\n function syncDesktopSlideWidth() {\n if (!carouselEl) return;\n if (!window.matchMedia('(min-width: 1201px)').matches || configuredSlides !== 4) {\n root.style.removeProperty('--cases-v3-slide-width');\n return;\n }\n var styles = getComputedStyle(root);\n var minWidth = parseFloat(styles.getPropertyValue('--cases-v3-slide-min')) || 373;\n var gap = parseFloat(styles.getPropertyValue('--cases-v3-slide-gap')) || 40;\n var width = carouselEl.clientWidth;\n if (!width) return;\n var maxFit = Math.floor((width + gap) \/ (minWidth + gap));\n if (maxFit < 1) maxFit = 1;\n var visibleSlides = Math.min(configuredSlides, maxFit);\n var slideWidth = (width - (visibleSlides - 1) * gap) \/ visibleSlides;\n root.style.setProperty('--cases-v3-slide-width', slideWidth.toFixed(2) + 'px');\n }\n var paginationHost = root.querySelector('.cases-v3__slider-foot .slider-pagination-host');\n function syncDotsPagination(swiper, options) {\n if (!swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n var isMobile = window.matchMedia('(max-width: 768px)').matches;\n if (isMobile) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n syncDesktopSlideWidth();\n var swiper = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n spaceBetween: 40,\n speed: 320,\n loop: false,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n breakpoints: {\n 0: { spaceBetween: 24 },\n 1200: { spaceBetween: 40 },\n },\n on: {\n init: function (s) {\n syncDesktopSlideWidth();\n s.update();\n syncDotsPagination(s);\n },\n resize: function (s) {\n syncDesktopSlideWidth();\n s.update();\n syncDotsPagination(s);\n },\n breakpoint: function (s) {\n syncDesktopSlideWidth();\n s.update();\n syncDotsPagination(s);\n },\n slideChange: function (s) {\n syncDotsPagination(s, { forceRender: false });\n },\n },\n });\n function setNavEnabled(enabled) {\n if (navPrev) navPrev.disabled = !enabled;\n if (navNext) navNext.disabled = !enabled;\n }\n var wrapperEl = sliderEl.querySelector('.swiper-wrapper');\n var allSlides = Array.prototype.slice.call(root.querySelectorAll('.cases-v3__slide'));\n function resetBeforeAfterInVisibleSlides() {\n root.querySelectorAll('.cases-v3__slide:not([hidden]) .cases-v3__media').forEach(function (media) {\n media.style.setProperty('--cases-v3-reveal', '50%');\n media.classList.add('is-blurred');\n var handle = media.querySelector('.cases-v3__handle');\n if (handle) handle.setAttribute('aria-valuenow', '50');\n });\n }\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v3__media').forEach(function (media) {\n if (media.dataset.casesV3BeforeAfterReady === 'true') return;\n media.dataset.casesV3BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v3__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV3BlurTimer) {\n clearTimeout(media.__casesV3BlurTimer);\n media.__casesV3BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV3BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV3BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v3-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n event.stopPropagation();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var step = 2;\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v3-reveal') || '50').replace('%', '')) || 50;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - step);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + step);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n function setSlidesForFilter(key) {\n var list;\n if (key === 'all') {\n list = allSlides.slice();\n } else {\n list = allSlides.filter(function (slide) {\n return (slide.dataset.caseCategory || '') === key;\n });\n }\n allSlides.forEach(function (slide) {\n slide.hidden = list.indexOf(slide) === -1;\n });\n if (wrapperEl) {\n wrapperEl.innerHTML = '';\n list.forEach(function (slide) { wrapperEl.appendChild(slide); });\n }\n syncDesktopSlideWidth();\n swiper.update();\n swiper.slideTo(0, 0);\n setNavEnabled(list.length > 1);\n syncDotsPagination(swiper);\n initBeforeAfterSliders();\n resetBeforeAfterInVisibleSlides();\n }\n function applyFilter(key) {\n setSlidesForFilter(key);\n }\n var filtersEl = root.querySelector('.cases-v3__filters');\n var chips = root.querySelectorAll('[data-cases-v3-filter]');\n function revealSelectedChip(chip) {\n if (!filtersEl || !chip || filtersEl.scrollWidth <= filtersEl.clientWidth) return;\n requestAnimationFrame(function () {\n var filtersRect = filtersEl.getBoundingClientRect();\n var chipRect = chip.getBoundingClientRect();\n var edgeGap = 8;\n var scrollDelta = 0;\n if (chipRect.left < filtersRect.left + edgeGap) {\n scrollDelta = chipRect.left - filtersRect.left - edgeGap;\n } else if (chipRect.right > filtersRect.right - edgeGap) {\n scrollDelta = chipRect.right - filtersRect.right + edgeGap;\n }\n if (!scrollDelta) return;\n filtersEl.scrollTo({\n left: filtersEl.scrollLeft + scrollDelta,\n behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n });\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n var key = chip.dataset.casesV3Filter || 'all';\n chips.forEach(function (btn) {\n var isActive = btn === chip;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n revealSelectedChip(chip);\n applyFilter(key);\n });\n });\n root.querySelectorAll('.cases-v3__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n initBeforeAfterSliders();\n applyFilter('all');\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-5');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-1');\n function initRoot(root) {\n if (!root || root.dataset.patientsV1Ready === 'true') return;\n root.dataset.patientsV1Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-patients-v1-item]'));\n var moreBtn = root.querySelector('[data-patients-v1-more]');\n var visibleLimit = parseInt(root.dataset.patientsV1Limit || '4', 10) || 4;\n if (visibleLimit < 1) visibleLimit = 1;\n var expanded = false;\n if (!items.length) {\n if (moreBtn) moreBtn.hidden = true;\n return;\n }\n function syncVisibility() {\n var visibleIndex = 0;\n items.forEach(function (item) {\n var collapsed = !expanded && visibleIndex >= visibleLimit;\n item.classList.toggle('is-hidden', collapsed);\n if (!collapsed) {\n visibleIndex += 1;\n }\n });\n if (moreBtn) {\n moreBtn.hidden = expanded || items.length <= visibleLimit;\n }\n }\n syncVisibility();\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n }\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.patients-v1').forEach(initRoot);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.patients-v2').forEach(function (root) {\n if (root.dataset.patientsV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.patientsV2Ready === 'true') return;\n var sliderEl = root.querySelector('.patients-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 2) {\n root.dataset.patientsV2Ready = 'true';\n root.classList.add('is-locked');\n return;\n }\n var styles = getComputedStyle(root);\n var trackGap = parseFloat(styles.getPropertyValue('--patients-v2-track-gap')) || 24;\n var paginationEl = root.querySelector('.patients-v2__pagination');\n var compactMq = window.matchMedia('(max-width: 768px)');\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (compactMq.matches && !swiper.isLocked) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n function syncSliderNav(swiper) {\n root.classList.toggle('is-locked', compactMq.matches || !!swiper.isLocked);\n }\n root.dataset.patientsV2Ready = 'true';\n var swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: trackGap,\n speed: 320,\n watchOverflow: true,\n observer: true,\n observeParents: true,\n roundLengths: false,\n navigation: {\n nextEl: root.querySelector('.patients-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.patients-v2__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper, true);\n syncSliderNav(swiper);\n },\n resize: function (swiper) {\n syncDotsPagination(swiper, false);\n syncSliderNav(swiper);\n },\n observerUpdate: function (swiper) {\n syncSliderNav(swiper);\n },\n breakpoint: function (swiper) {\n syncDotsPagination(swiper, true);\n syncSliderNav(swiper);\n },\n lock: function (swiper) {\n syncDotsPagination(swiper, false);\n syncSliderNav(swiper);\n },\n unlock: function (swiper) {\n syncDotsPagination(swiper, true);\n syncSliderNav(swiper);\n },\n },\n });\n if (typeof compactMq.addEventListener === 'function') {\n compactMq.addEventListener('change', function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n });\n } else if (typeof compactMq.addListener === 'function') {\n compactMq.addListener(function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n });\n }\n root.querySelectorAll('.patients-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-3');\n document.addEventListener('click', function (event) {\n var btn = event.target.closest('.cta-v3 .btn');\n if (!btn) return;\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-3');\n function initRoot(root) {\n if (root.dataset.patientsV3Ready === 'true') return;\n root.dataset.patientsV3Ready = 'true';\n var items = root.querySelectorAll('.patients-v3__item');\n if (!items.length) return;\n var list = root.querySelector('.patients-v3__list');\n var accordionMq = window.matchMedia('(max-width: 1200px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n var activeIndex = 0;\n function isDesktop() {\n return !accordionMq.matches;\n }\n function shouldAnimateAccordion() {\n return accordionMq.matches && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!list) return;\n if (!isDesktop()) {\n list.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-patients-v3-panel].is-active');\n if (!activePanel) {\n list.style.minHeight = '';\n return;\n }\n list.style.minHeight = '';\n var tabsHeight = list.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n list.style.minHeight = Math.max(tabsHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function activateDesktop(index) {\n activeIndex = index;\n root.querySelectorAll('[data-patients-v3-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-patients-v3-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n root.querySelectorAll('[data-patients-v3-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-patients-v3-index'), 10);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, options) {\n var tab = item.querySelector('[data-patients-v3-tab]');\n var panel = item.querySelector('[data-patients-v3-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n var instant = !!(options && options.instant);\n if (instant) {\n panel.style.transition = 'none';\n }\n item.classList.remove('is-open');\n if (tab) {\n tab.classList.remove('is-active');\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n }\n panel.classList.remove('is-active');\n panel.setAttribute('aria-hidden', 'true');\n if (instant || !shouldAnimateAccordion()) {\n panel.hidden = true;\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item, index, options) {\n var tab = item.querySelector('[data-patients-v3-tab]');\n var panel = item.querySelector('[data-patients-v3-panel]');\n if (!panel) return;\n var instant = !!(options && options.instant);\n if (instant) {\n panel.style.transition = 'none';\n }\n activeIndex = index;\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-selected', 'true');\n tab.tabIndex = 0;\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n root.querySelectorAll('[data-patients-v3-tab]').forEach(function (otherTab) {\n if (otherTab === tab) return;\n otherTab.classList.remove('is-active');\n otherTab.setAttribute('aria-selected', 'false');\n otherTab.tabIndex = -1;\n });\n root.querySelectorAll('[data-patients-v3-panel]').forEach(function (otherPanel) {\n if (otherPanel === panel) return;\n otherPanel.classList.remove('is-active');\n otherPanel.hidden = true;\n otherPanel.setAttribute('aria-hidden', 'true');\n });\n if (instant || !shouldAnimateAccordion()) {\n item.classList.add('is-open');\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n }\n function restoreTabViewport(tab, viewportTop) {\n if (!tab) return;\n var nextY = window.pageYOffset + tab.getBoundingClientRect().top - viewportTop;\n if (!isFinite(nextY)) return;\n nextY = Math.max(0, nextY);\n var rootEl = document.documentElement;\n var prevBehavior = rootEl.style.scrollBehavior;\n rootEl.style.scrollBehavior = 'auto';\n (document.scrollingElement || rootEl).scrollTop = nextY;\n rootEl.style.scrollBehavior = prevBehavior;\n }\n function switchAccordionItem(item, tab, index) {\n var viewportTop = tab.getBoundingClientRect().top;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, { instant: true });\n });\n restoreTabViewport(tab, viewportTop);\n openAccordionItem(item, index, { instant: true });\n restoreTabViewport(tab, viewportTop);\n if (typeof tab.focus === 'function') {\n tab.focus({ preventScroll: true });\n }\n restoreTabViewport(tab, viewportTop);\n window.requestAnimationFrame(function () {\n restoreTabViewport(tab, viewportTop);\n });\n window.setTimeout(function () {\n restoreTabViewport(tab, viewportTop);\n }, 0);\n }\n function syncMode(options) {\n var instant = !!(options && options.instant);\n if (accordionMq.matches) {\n if (list) list.style.minHeight = '';\n items.forEach(function (item) {\n closeAccordionItem(item, { instant: true });\n });\n return;\n }\n activateDesktop(activeIndex);\n if (instant) {\n root.querySelectorAll('[data-patients-v3-panel]').forEach(function (panel) {\n panel.style.transition = '';\n });\n }\n }\n window.addEventListener('resize', scheduleStageHeight);\n function getVisibleTabs() {\n return Array.prototype.slice.call(root.querySelectorAll('[data-patients-v3-tab]'));\n }\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-patients-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-patients-v3-index'), 10);\n if (isNaN(index)) return;\n var item = tab.closest('.patients-v3__item');\n if (!item) return;\n if (accordionMq.matches) {\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n switchAccordionItem(item, tab, index);\n return;\n }\n activateDesktop(index);\n });\n root.addEventListener('keydown', function (event) {\n var tab = event.target.closest('[data-patients-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var visibleTabs = getVisibleTabs();\n var index = visibleTabs.indexOf(tab);\n if (index === -1) return;\n var nextIndex = index;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (index + 1) % visibleTabs.length;\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextIndex = (index - 1 + visibleTabs.length) % visibleTabs.length;\n } else {\n return;\n }\n event.preventDefault();\n var nextTab = visibleTabs[nextIndex];\n var nextItemIndex = parseInt(nextTab.getAttribute('data-patients-v3-index'), 10);\n var item = nextTab.closest('.patients-v3__item');\n if (!item) return;\n if (accordionMq.matches) {\n if (item.classList.contains('is-open')) {\n nextTab.focus({ preventScroll: true });\n return;\n }\n switchAccordionItem(item, nextTab, nextItemIndex);\n return;\n }\n activateDesktop(nextItemIndex);\n nextTab.focus({ preventScroll: true });\n });\n function onBreakpointChange() {\n syncMode({ instant: true });\n }\n if (typeof accordionMq.addEventListener === 'function') {\n accordionMq.addEventListener('change', onBreakpointChange);\n } else if (typeof accordionMq.addListener === 'function') {\n accordionMq.addListener(onBreakpointChange);\n }\n syncMode({ instant: true });\n }\n function boot() {\n document.querySelectorAll('.patients-v3').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-4');\n function initRoot(root) {\n if (root.dataset.patientsV4Ready === 'true') return;\n root.dataset.patientsV4Ready = 'true';\n var navButtons = root.querySelectorAll('[data-patients-v4-nav]');\n var sections = root.querySelectorAll('[data-patients-v4-section]');\n var accordionItems = root.querySelectorAll('.patients-v4__item');\n var main = root.querySelector('[data-patients-v4-main]');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n var scrollSpyLock = false;\n var scrollSpyTimer = null;\n function shouldAnimateAccordion() {\n return !desktopMq.matches && !reduceMotionMq.matches;\n }\n function mountDesktopPanels() {\n if (!main) return;\n var panels = Array.prototype.slice.call(root.querySelectorAll('[data-patients-v4-panel]'));\n panels.sort(function (a, b) {\n return parseInt(a.getAttribute('data-patients-v4-index'), 10) - parseInt(b.getAttribute('data-patients-v4-index'), 10);\n });\n panels.forEach(function (panel) {\n main.appendChild(panel);\n });\n }\n function unmountDesktopPanels() {\n accordionItems.forEach(function (item) {\n var index = item.getAttribute('data-patients-v4-index');\n var panel = root.querySelector('[data-patients-v4-panel][data-patients-v4-index=\"' + index + '\"]');\n if (panel) item.appendChild(panel);\n });\n }\n function getScrollOffset() {\n var navH = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--site-nav-h')) || 0;\n var space24 = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--space-24')) || 24;\n return navH + space24 + 8;\n }\n function setActiveNav(sectionId) {\n navButtons.forEach(function (btn) {\n var isActive = btn.getAttribute('data-patients-v4-nav') === sectionId;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-current', isActive ? 'true' : 'false');\n });\n }\n function scrollToSection(sectionId) {\n var section = root.querySelector('[data-patients-v4-section=\"' + sectionId + '\"]');\n if (!section) return;\n scrollSpyLock = true;\n window.clearTimeout(scrollSpyTimer);\n var top = section.getBoundingClientRect().top + window.pageYOffset - getScrollOffset();\n top = Math.max(0, top);\n setActiveNav(sectionId);\n if (reduceMotionMq.matches) {\n (document.scrollingElement || document.documentElement).scrollTop = top;\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 50);\n return;\n }\n window.scrollTo({ top: top, behavior: 'smooth' });\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 700);\n }\n function activateDesktop() {\n accordionItems.forEach(function (item) {\n item.classList.remove('is-open');\n });\n sections.forEach(function (section) {\n section.hidden = false;\n section.setAttribute('aria-hidden', 'false');\n section.style.transition = '';\n });\n navButtons.forEach(function (btn, index) {\n btn.setAttribute('aria-expanded', 'true');\n if (!btn.classList.contains('is-active') && index === 0) {\n var anyActive = false;\n navButtons.forEach(function (entry) {\n if (entry.classList.contains('is-active')) anyActive = true;\n });\n if (!anyActive) {\n btn.classList.add('is-active');\n btn.setAttribute('aria-current', 'true');\n }\n }\n });\n }\n function closeAccordionItem(item, options) {\n var tab = item.querySelector('[data-patients-v4-accordion-tab]');\n var panel = item.querySelector('[data-patients-v4-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n var instant = !!(options && options.instant);\n if (instant) panel.style.transition = 'none';\n item.classList.remove('is-open');\n if (tab) {\n tab.classList.remove('is-active');\n tab.setAttribute('aria-expanded', 'false');\n tab.setAttribute('aria-current', 'false');\n }\n panel.setAttribute('aria-hidden', 'true');\n if (instant || !shouldAnimateAccordion()) {\n panel.hidden = true;\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var tab = item.querySelector('[data-patients-v4-accordion-tab]');\n var panel = item.querySelector('[data-patients-v4-panel]');\n if (!panel) return;\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-expanded', 'true');\n tab.setAttribute('aria-current', 'true');\n }\n panel.setAttribute('aria-hidden', 'false');\n if (!shouldAnimateAccordion()) {\n item.classList.add('is-open');\n return;\n }\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n }\n function restoreTabViewport(tab, viewportTop) {\n if (!tab) return;\n var nextY = window.pageYOffset + tab.getBoundingClientRect().top - viewportTop;\n if (!isFinite(nextY)) return;\n nextY = Math.max(0, nextY);\n var rootEl = document.documentElement;\n var prevBehavior = rootEl.style.scrollBehavior;\n rootEl.style.scrollBehavior = 'auto';\n (document.scrollingElement || rootEl).scrollTop = nextY;\n rootEl.style.scrollBehavior = prevBehavior;\n }\n function switchAccordionItem(item, tab) {\n var viewportTop = tab.getBoundingClientRect().top;\n accordionItems.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, { instant: true });\n });\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n restoreTabViewport(tab, viewportTop);\n return;\n }\n openAccordionItem(item);\n restoreTabViewport(tab, viewportTop);\n }\n function syncMode() {\n if (desktopMq.matches) {\n mountDesktopPanels();\n activateDesktop();\n return;\n }\n unmountDesktopPanels();\n accordionItems.forEach(function (item) {\n closeAccordionItem(item, { instant: true });\n });\n }\n navButtons.forEach(function (btn) {\n btn.addEventListener('click', function () {\n if (desktopMq.matches) {\n scrollToSection(btn.getAttribute('data-patients-v4-nav'));\n return;\n }\n var item = btn.closest('.patients-v4__item');\n if (!item) return;\n switchAccordionItem(item, btn);\n });\n });\n if ('IntersectionObserver' in window && sections.length) {\n var observer = new IntersectionObserver(function (entries) {\n if (!desktopMq.matches || scrollSpyLock) return;\n var visible = entries\n .filter(function (entry) { return entry.isIntersecting; })\n .sort(function (a, b) { return b.intersectionRatio - a.intersectionRatio; });\n if (!visible.length) return;\n setActiveNav(visible[0].target.getAttribute('data-patients-v4-section'));\n }, {\n root: null,\n rootMargin: '-' + getScrollOffset() + 'px 0px -55% 0px',\n threshold: [0, 0.15, 0.35, 0.55, 0.75, 1]\n });\n sections.forEach(function (section) {\n observer.observe(section);\n });\n }\n function onBreakpointChange() {\n syncMode();\n }\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', onBreakpointChange);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(onBreakpointChange);\n }\n syncMode();\n }\n function boot() {\n document.querySelectorAll('.patients-v4').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-5');\n function initList(root) {\n if (!root || root.dataset.patientsV5ListReady === 'true') return;\n root.dataset.patientsV5ListReady = 'true';\n var moreBtn = root.querySelector('[data-patients-v5-more]');\n if (!moreBtn) return;\n moreBtn.addEventListener('click', function () {\n root.querySelectorAll('[data-patients-v5-doc-item].is-hidden').forEach(function (item) {\n item.classList.remove('is-hidden');\n });\n moreBtn.hidden = true;\n });\n }\n function initRoot(root) {\n if (root.dataset.patientsV5Ready === 'true') return;\n root.dataset.patientsV5Ready = 'true';\n root.querySelectorAll('[data-patients-v5-list]').forEach(initList);\n var items = root.querySelectorAll('.patients-v5__item');\n if (!items.length) return;\n var body = root.querySelector('.patients-v5__body');\n var main = root.querySelector('[data-patients-v5-main]');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n var activeIndex = 0;\n function isDesktop() {\n return desktopMq.matches;\n }\n function shouldAnimateAccordion() {\n return !desktopMq.matches && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!body) return;\n if (!isDesktop()) {\n body.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-patients-v5-panel].is-active');\n if (!activePanel) {\n body.style.minHeight = '';\n return;\n }\n body.style.minHeight = '';\n var contentHeight = body.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n body.style.minHeight = Math.max(contentHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function activateDesktop(index) {\n activeIndex = index;\n root.querySelectorAll('[data-patients-v5-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-patients-v5-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-current', isActive ? 'true' : 'false');\n tab.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-patients-v5-index'), 10);\n var isActive = panelIndex === index;\n var owner = items[panelIndex];\n if (isActive && main) {\n main.appendChild(panel);\n } else if (owner && panel.parentElement !== owner) {\n owner.appendChild(panel);\n }\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, options) {\n var tab = item.querySelector('[data-patients-v5-tab]');\n var panel = item.querySelector('[data-patients-v5-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n var instant = !!(options && options.instant);\n if (instant) panel.style.transition = 'none';\n item.classList.remove('is-open');\n if (tab) {\n tab.classList.remove('is-active');\n tab.setAttribute('aria-expanded', 'false');\n tab.setAttribute('aria-current', 'false');\n }\n panel.classList.remove('is-active');\n panel.setAttribute('aria-hidden', 'true');\n if (instant || !shouldAnimateAccordion()) {\n panel.hidden = true;\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item, index, options) {\n var tab = item.querySelector('[data-patients-v5-tab]');\n var panel = item.querySelector('[data-patients-v5-panel]');\n if (!panel) return;\n var instant = !!(options && options.instant);\n if (instant) panel.style.transition = 'none';\n activeIndex = index;\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-expanded', 'true');\n tab.setAttribute('aria-current', 'true');\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n root.querySelectorAll('[data-patients-v5-tab]').forEach(function (otherTab) {\n if (otherTab === tab) return;\n otherTab.classList.remove('is-active');\n otherTab.setAttribute('aria-expanded', 'false');\n otherTab.setAttribute('aria-current', 'false');\n });\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (otherPanel) {\n if (otherPanel === panel) return;\n otherPanel.classList.remove('is-active');\n otherPanel.hidden = true;\n otherPanel.setAttribute('aria-hidden', 'true');\n });\n if (instant || !shouldAnimateAccordion()) {\n item.classList.add('is-open');\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n }\n function restoreTabViewport(tab, viewportTop) {\n if (!tab) return;\n var nextY = window.pageYOffset + tab.getBoundingClientRect().top - viewportTop;\n if (!isFinite(nextY)) return;\n nextY = Math.max(0, nextY);\n var rootEl = document.documentElement;\n var prevBehavior = rootEl.style.scrollBehavior;\n rootEl.style.scrollBehavior = 'auto';\n (document.scrollingElement || rootEl).scrollTop = nextY;\n rootEl.style.scrollBehavior = prevBehavior;\n }\n function switchAccordionItem(item, tab, index) {\n var viewportTop = tab.getBoundingClientRect().top;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, { instant: true });\n });\n restoreTabViewport(tab, viewportTop);\n openAccordionItem(item, index, { instant: true });\n restoreTabViewport(tab, viewportTop);\n if (typeof tab.focus === 'function') {\n tab.focus({ preventScroll: true });\n }\n restoreTabViewport(tab, viewportTop);\n window.requestAnimationFrame(function () {\n restoreTabViewport(tab, viewportTop);\n });\n window.setTimeout(function () {\n restoreTabViewport(tab, viewportTop);\n }, 0);\n }\n function mountPanelsInItems() {\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-patients-v5-index'), 10);\n var owner = items[panelIndex];\n if (owner && panel.parentElement !== owner) owner.appendChild(panel);\n });\n }\n function syncMode(options) {\n var instant = !!(options && options.instant);\n if (!desktopMq.matches) {\n if (body) body.style.minHeight = '';\n mountPanelsInItems();\n var openIndex = activeIndex;\n items.forEach(function (item) {\n closeAccordionItem(item, { instant: true });\n });\n if (items[openIndex]) {\n openAccordionItem(items[openIndex], openIndex, { instant: true });\n }\n return;\n }\n activateDesktop(activeIndex);\n if (instant) {\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (panel) {\n panel.style.transition = '';\n });\n }\n }\n root.addEventListener('click', function (event) {\n if (!event.target.closest('[data-patients-v5-more]')) return;\n window.requestAnimationFrame(function () {\n scheduleStageHeight();\n });\n });\n window.addEventListener('resize', scheduleStageHeight);\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-patients-v5-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-patients-v5-index'), 10);\n if (isNaN(index)) return;\n var item = tab.closest('.patients-v5__item');\n if (!item) return;\n if (!desktopMq.matches) {\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n switchAccordionItem(item, tab, index);\n return;\n }\n activateDesktop(index);\n });\n function onBreakpointChange() {\n syncMode({ instant: true });\n }\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', onBreakpointChange);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(onBreakpointChange);\n }\n syncMode({ instant: true });\n }\n function boot() {\n document.querySelectorAll('.patients-v5').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-8');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('benefits\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('expert-advice\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-technologies\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.treatment-technologies-v2').forEach(function (root) {\n if (root.dataset.treatmentTechnologiesV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.treatmentTechnologiesV2Ready === 'true') return;\n root.dataset.treatmentTechnologiesV2Ready = 'true';\n var sliderEl = root.querySelector('.treatment-technologies-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var paginationEl = root.querySelector('.treatment-technologies-v2__pagination');\n var navPrev = root.querySelector('.treatment-technologies-v2__controls .slider-nav__btn--prev');\n var navNext = root.querySelector('.treatment-technologies-v2__controls .slider-nav__btn--next');\n var slideCount = sliderEl.querySelectorAll('.swiper-slide').length;\n var swiperConfig = {\n initialSlide: 0,\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n autoHeight: true,\n };\n if (slideCount > 1) {\n swiperConfig.loop = true;\n swiperConfig.navigation = {\n nextEl: navNext,\n prevEl: navPrev,\n };\n swiperConfig.pagination = {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n };\n }\n new Swiper(sliderEl, swiperConfig);\n if (!navPrev || !navNext) return;\n root.querySelectorAll('.treatment-technologies-v2__controls .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-technologies\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v4').forEach(function (root) {\n if (root.dataset.reviewsV4Ready === 'true') return;\n root.dataset.reviewsV4Ready = 'true';\n root.querySelectorAll('[data-reviews-v4-filter]').forEach(function (chip) {\n chip.addEventListener('click', function () {\n var filter = chip.dataset.reviewsV4Filter;\n if (!filter) return;\n root.querySelectorAll('[data-reviews-v4-filter]').forEach(function (item) {\n var isActive = item === chip;\n item.classList.toggle('is-active', isActive);\n item.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n root.querySelectorAll('[data-reviews-v4-group]').forEach(function (group) {\n var groupKey = group.dataset.reviewsV4Group;\n var isVisible = filter === 'negative' ? groupKey === 'negative' : groupKey === 'positive';\n group.classList.toggle('is-hidden', !isVisible);\n });\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.certificates-v2').forEach(function (root) {\n if (root.dataset.certificatesV2Ready === 'true') return;\n root.dataset.certificatesV2Ready = 'true';\n var sliderEl = root.querySelector('.certificates-v2__slider.swiper');\n var paginationEl = root.querySelector('.certificates-v2__pagination');\n var navRoot = root.querySelector('.certificates-v2__slider-nav');\n var toolbarEl = root.querySelector('.certificates-v2__slider-toolbar');\n var compactMq = window.matchMedia('(max-width: 1200px)');\n var swiperInstance = null;\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (compactMq.matches && !swiper.isLocked) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n return;\n }\n swiper.pagination.disable();\n }\n function syncSliderNav(swiper) {\n if (!toolbarEl) return;\n toolbarEl.classList.toggle('is-visible', !compactMq.matches && !swiper.isLocked);\n }\n function syncLockedLayout(swiper) {\n root.classList.toggle('certificates-v2--locked', swiper.isLocked);\n }\n function initSlider() {\n if (swiperInstance || !sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 1) return;\n var pageStyles = getComputedStyle(document.documentElement);\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 24,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 1201: {\n spaceBetween: 40,\n slidesOffsetAfter: 0,\n },\n },\n navigation: navRoot ? {\n nextEl: navRoot.querySelector('.slider-nav__btn--next'),\n prevEl: navRoot.querySelector('.slider-nav__btn--prev'),\n } : false,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (instance) {\n instance.update();\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n resize: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n breakpoint: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n lock: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n unlock: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n update: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n },\n });\n if (navRoot) {\n navRoot.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n }\n function bootSwiper() {\n requestAnimationFrame(function () {\n requestAnimationFrame(initSlider);\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n compactMq.addEventListener('change', function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n syncLockedLayout(swiperInstance);\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('faq\/variant-2');\n function initAccordion(panel) {\n if (panel.dataset.faqV2AccordionReady === 'true') return;\n panel.dataset.faqV2AccordionReady = 'true';\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var items = Array.prototype.slice.call(panel.querySelectorAll('.faq-v2__item'));\n var moreBtn = panel.querySelector('[data-faq-v2-more]');\n var initial = parseInt(panel.getAttribute('data-faq-v2-initial'), 10) || 0;\n var step = parseInt(panel.getAttribute('data-faq-v2-step'), 10) || 0;\n function shouldAnimate() {\n return !reduceMotionMq.matches;\n }\n function updateMoreButton() {\n if (!moreBtn) return;\n var hasHidden = items.some(function (item) { return item.hidden; });\n moreBtn.hidden = !hasHidden;\n }\n function revealNextBatch() {\n if (!step) return;\n var shown = 0;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].hidden) continue;\n items[i].hidden = false;\n shown += 1;\n if (shown >= step) break;\n }\n updateMoreButton();\n }\n if (initial && items.length > initial) {\n items.forEach(function (item, idx) {\n if (idx >= initial) item.hidden = true;\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', revealNextBatch);\n updateMoreButton();\n }\n function closeItem(item) {\n var trigger = item.querySelector('.faq-v2__trigger');\n var itemPanel = item.querySelector('.faq-v2__item-panel');\n if (!itemPanel || (!item.classList.contains('is-open') && itemPanel.hidden)) return;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n itemPanel.hidden = true;\n }\n function openItem(item) {\n var trigger = item.querySelector('.faq-v2__trigger');\n var itemPanel = item.querySelector('.faq-v2__item-panel');\n if (!itemPanel) return;\n itemPanel.hidden = false;\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n if (!shouldAnimate()) {\n item.classList.add('is-open');\n return;\n }\n item.classList.remove('is-open');\n void itemPanel.offsetHeight;\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n }\n function closeAllItems() {\n items.forEach(function (item) {\n closeItem(item);\n });\n }\n panel.addEventListener('click', function (event) {\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v2__trigger');\n if (!trigger || !panel.contains(trigger)) return;\n var item = trigger.closest('.faq-v2__item');\n if (!item || item.hidden) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeItem(entry);\n });\n openItem(item);\n });\n panel.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v2__trigger');\n if (!trigger || !panel.contains(trigger)) return;\n event.preventDefault();\n trigger.click();\n });\n panel._faqV2CloseAll = closeAllItems;\n }\n function initRoot(root) {\n if (root.dataset.faqV2Ready === 'true') return;\n root.dataset.faqV2Ready = 'true';\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-faq-v2-tab]'));\n var panels = Array.prototype.slice.call(root.querySelectorAll('[data-faq-v2-tabpanel]'));\n panels.forEach(initAccordion);\n function activateTab(key) {\n tabs.forEach(function (tab) {\n var isActive = tab.getAttribute('data-faq-v2-tab') === key;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n panels.forEach(function (panel) {\n var isActive = panel.getAttribute('data-faq-v2-tabpanel') === key;\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n if (!isActive && typeof panel._faqV2CloseAll === 'function') {\n panel._faqV2CloseAll();\n }\n });\n }\n tabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n activateTab(tab.getAttribute('data-faq-v2-tab'));\n });\n });\n }\n function boot() {\n document.querySelectorAll('.faq-v2').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('vacancies\/variant-1');\n document.querySelectorAll('[data-vacancies-v1-list]').forEach(function (list) {\n if (list.dataset.vacanciesV1Ready === 'true') return;\n list.dataset.vacanciesV1Ready = 'true';\n var getPanel = function (item, btn) {\n var panelId = btn.getAttribute('aria-controls');\n if (!panelId) return null;\n try {\n return item.querySelector('#' + CSS.escape(panelId));\n } catch (e) {\n return item.querySelector('#' + panelId);\n }\n };\n var clearTransitionEnd = function (panel) {\n if (!panel || !panel.__vacanciesV1OnEnd) return;\n panel.removeEventListener('transitionend', panel.__vacanciesV1OnEnd);\n panel.__vacanciesV1OnEnd = null;\n };\n var closeItem = function (btn, panel) {\n if (!btn || !panel) return;\n if (btn.getAttribute('aria-expanded') !== 'true') return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'false');\n panel.style.height = panel.scrollHeight + 'px';\n panel.offsetHeight; \/\/ force reflow\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.__vacanciesV1OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.hidden = true;\n panel.style.height = '';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV1OnEnd);\n };\n var openItem = function (btn, panel) {\n if (!btn || !panel) return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'true');\n panel.hidden = false;\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.offsetHeight; \/\/ force reflow\n panel.classList.add('is-open');\n panel.style.height = panel.scrollHeight + 'px';\n panel.__vacanciesV1OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.style.height = 'auto';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV1OnEnd);\n };\n list.addEventListener('click', function (event) {\n var btn = event.target.closest('[data-vacancies-v1-trigger]');\n if (!btn || btn.disabled) return;\n var item = btn.closest('.vacancies-v1__item');\n if (!item) return;\n var panel = getPanel(item, btn);\n if (!panel) return;\n var isOpen = btn.getAttribute('aria-expanded') === 'true';\n if (isOpen) {\n closeItem(btn, panel);\n return;\n }\n list.querySelectorAll('[data-vacancies-v1-trigger][aria-expanded=\\\"true\\\"]').forEach(function (otherBtn) {\n if (otherBtn === btn) return;\n var otherItem = otherBtn.closest('.vacancies-v1__item');\n if (!otherItem) return;\n var otherPanel = getPanel(otherItem, otherBtn);\n if (!otherPanel) return;\n closeItem(otherBtn, otherPanel);\n });\n openItem(btn, panel);\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.certificates-v4').forEach(function (root) {\n if (root.dataset.certificatesV4Ready === 'true') return;\n root.dataset.certificatesV4Ready = 'true';\n var sliderEl = root.querySelector('.certificates-v4__slider.swiper');\n var paginationEl = root.querySelector('.certificates-v4__pagination');\n var navWrap = root.querySelector('.certificates-v4__nav-wrap');\n var navRoot = root.querySelector('.certificates-v4__nav');\n var compactMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (compactMq.matches && !swiper.isLocked) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n return;\n }\n swiper.pagination.disable();\n }\n function syncSliderNav(swiper) {\n if (!navWrap) return;\n navWrap.classList.toggle('is-visible', !compactMq.matches && !swiper.isLocked);\n }\n function syncLockedLayout(swiper) {\n root.classList.toggle('certificates-v4--locked', swiper.isLocked);\n }\n function initSlider() {\n if (swiperInstance || !sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 2) return;\n var pageStyles = getComputedStyle(document.documentElement);\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 16,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 769: {\n spaceBetween: 24,\n slidesOffsetAfter: 0,\n },\n 1201: {\n spaceBetween: 32,\n slidesOffsetAfter: 0,\n },\n },\n navigation: navRoot ? {\n nextEl: navRoot.querySelector('.slider-nav__btn--next'),\n prevEl: navRoot.querySelector('.slider-nav__btn--prev'),\n } : false,\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : false,\n on: {\n init: function (instance) {\n instance.update();\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n resize: function (instance) {\n instance.update();\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n breakpoint: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n lock: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n unlock: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n },\n });\n if (navRoot) {\n navRoot.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (typeof compactMq.addEventListener === 'function') {\n compactMq.addEventListener('change', function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n syncLockedLayout(swiperInstance);\n });\n } else if (typeof compactMq.addListener === 'function') {\n compactMq.addListener(function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n syncLockedLayout(swiperInstance);\n });\n }\n }\n function bootSwiper() {\n initSlider();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.certificates-v3').forEach(function (root) {\n if (root.dataset.certificatesV3Ready === 'true') return;\n root.dataset.certificatesV3Ready = 'true';\n var filters = root.querySelectorAll('[data-certificates-v3-filter]');\n var select = root.querySelector('[data-certificates-v3-select]');\n var items = root.querySelectorAll('[data-certificates-v3-item]');\n var searchInput = root.querySelector('[data-certificates-v3-search]');\n var moreBtn = root.querySelector('[data-certificates-v3-more]');\n var initialLimit = parseInt(root.dataset.certificatesV3Limit || '4', 10) || 4;\n var activeFilter = 'all';\n var expanded = false;\n var searchQuery = '';\n function setActiveFilter(key) {\n activeFilter = key || 'all';\n expanded = false;\n filters.forEach(function (btn) {\n var on = (btn.dataset.certificatesV3Filter || '') === activeFilter;\n btn.classList.toggle('is-active', on);\n btn.setAttribute('aria-pressed', on ? 'true' : 'false');\n });\n if (select && select.value !== activeFilter) {\n select.value = activeFilter;\n }\n syncVisibility();\n }\n function matchesFilter(item) {\n if (activeFilter === 'all') return true;\n return (item.dataset.certificatesV3Category || '') === activeFilter;\n }\n function matchesSearch(item) {\n if (!searchQuery) return true;\n var haystack = item.dataset.certificatesV3SearchItem || '';\n return haystack.indexOf(searchQuery) !== -1;\n }\n function countMatched() {\n var matched = 0;\n items.forEach(function (item) {\n if (matchesFilter(item) && matchesSearch(item)) matched += 1;\n });\n return matched;\n }\n function syncMoreButton(matched) {\n if (!moreBtn) return;\n var hasMore = !expanded && matched > initialLimit;\n moreBtn.hidden = !hasMore;\n }\n function syncVisibility() {\n var visibleIndex = 0;\n items.forEach(function (item) {\n var match = matchesFilter(item) && matchesSearch(item);\n item.classList.toggle('is-filtered-out', !match);\n if (!match) {\n item.classList.add('is-hidden');\n item.hidden = true;\n return;\n }\n item.classList.remove('is-filtered-out');\n var collapsed = !expanded && visibleIndex >= initialLimit;\n if (collapsed) {\n item.classList.add('is-collapsed', 'is-hidden');\n item.hidden = true;\n } else {\n item.classList.remove('is-collapsed', 'is-hidden');\n item.hidden = false;\n visibleIndex += 1;\n }\n });\n syncMoreButton(countMatched());\n }\n filters.forEach(function (btn) {\n btn.addEventListener('click', function () {\n setActiveFilter(btn.dataset.certificatesV3Filter || 'all');\n });\n });\n if (select) {\n select.addEventListener('change', function () {\n setActiveFilter(select.value || 'all');\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n searchQuery = (searchInput.value || '').trim().toLowerCase();\n expanded = false;\n syncVisibility();\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n syncVisibility();\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('vacancies\/variant-3');\n document.querySelectorAll('[data-vacancies-v3-list]').forEach(function (list) {\n if (list.dataset.vacanciesV3Ready === 'true') return;\n list.dataset.vacanciesV3Ready = 'true';\n var getPanel = function (item, btn) {\n var panelId = btn.getAttribute('aria-controls');\n if (!panelId) return null;\n try {\n return item.querySelector('#' + CSS.escape(panelId));\n } catch (e) {\n return item.querySelector('#' + panelId);\n }\n };\n var clearTransitionEnd = function (panel) {\n if (!panel || !panel.__vacanciesV3OnEnd) return;\n panel.removeEventListener('transitionend', panel.__vacanciesV3OnEnd);\n panel.__vacanciesV3OnEnd = null;\n };\n var closeItem = function (item, btn, panel) {\n if (!btn || !panel) return;\n if (btn.getAttribute('aria-expanded') !== 'true') return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'false');\n item.classList.remove('is-open');\n panel.style.height = panel.scrollHeight + 'px';\n panel.offsetHeight;\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.__vacanciesV3OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.hidden = true;\n panel.style.height = '';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV3OnEnd);\n };\n var openItem = function (item, btn, panel) {\n if (!btn || !panel) return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'true');\n item.classList.add('is-open');\n panel.hidden = false;\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.offsetHeight;\n panel.classList.add('is-open');\n panel.style.height = panel.scrollHeight + 'px';\n panel.__vacanciesV3OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.style.height = 'auto';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV3OnEnd);\n };\n list.addEventListener('click', function (event) {\n var btn = event.target.closest('[data-vacancies-v3-trigger]');\n if (!btn || btn.disabled) return;\n var item = btn.closest('.vacancies-v3__item');\n if (!item) return;\n var panel = getPanel(item, btn);\n if (!panel) return;\n var isOpen = btn.getAttribute('aria-expanded') === 'true';\n if (isOpen) {\n closeItem(item, btn, panel);\n return;\n }\n list.querySelectorAll('[data-vacancies-v3-trigger][aria-expanded=\"true\"]').forEach(function (otherBtn) {\n if (otherBtn === btn) return;\n var otherItem = otherBtn.closest('.vacancies-v3__item');\n if (!otherItem) return;\n var otherPanel = getPanel(otherItem, otherBtn);\n if (!otherPanel) return;\n closeItem(otherItem, otherBtn, otherPanel);\n });\n openItem(item, btn, panel);\n });\n });\n function vacanciesV3HashTitle() {\n var hash = (window.location.hash || '').replace(\/^#\/, '');\n if (!hash) return null;\n var el = document.getElementById(hash);\n if (!el || !el.classList.contains('vacancies-v3__title')) return null;\n return el;\n }\n function vacanciesV3ScrollOffset() {\n var styles = getComputedStyle(document.documentElement);\n var navH = parseFloat(styles.getPropertyValue('--site-nav-h')) || 0;\n var sticky = parseFloat(styles.getPropertyValue('--site-sticky-offset')) || 0;\n var space = parseFloat(styles.getPropertyValue('--space-32')) || 32;\n return Math.max(navH, sticky) + space;\n }\n function vacanciesV3ScrollToHash() {\n var el = vacanciesV3HashTitle();\n if (!el) return;\n var delta = el.getBoundingClientRect().top - vacanciesV3ScrollOffset();\n if (Math.abs(delta) < 2) return;\n window.scrollBy(0, delta);\n }\n function vacanciesV3ScheduleHashScroll() {\n if (!vacanciesV3HashTitle()) return;\n var run = function () {\n vacanciesV3ScrollToHash();\n requestAnimationFrame(vacanciesV3ScrollToHash);\n };\n run();\n window.setTimeout(run, 150);\n }\n if (document.readyState === 'complete') {\n vacanciesV3ScheduleHashScroll();\n } else {\n window.addEventListener('load', vacanciesV3ScheduleHashScroll);\n }\n window.addEventListener('hashchange', vacanciesV3ScheduleHashScroll);\n window.addEventListener('pageshow', function (event) {\n if (event.persisted) vacanciesV3ScheduleHashScroll();\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-5');\n document.querySelectorAll('.cta-v5').forEach(function (root) {\n root.querySelectorAll('.cta-v5__file').forEach(function (field) {\n var input = field.querySelector('.cta-v5__file-input');\n var label = field.querySelector('[data-cta-v5-file-label]');\n if (!input || !label) return;\n var fallback = label.textContent;\n input.addEventListener('change', function () {\n var file = input.files && input.files[0];\n label.textContent = file ? file.name : fallback;\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v4').forEach(function (root) {\n if (root.dataset.casesV4Ready === 'true') return;\n function init() {\n if (root.dataset.casesV4Ready === 'true') return;\n root.dataset.casesV4Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('.cases-v4__item'));\n var moreBtn = root.querySelector('[data-cases-v4-more]');\n var filtersEl = root.querySelector('.cases-v4__filters');\n var chips = root.querySelectorAll('[data-cases-v4-filter]');\n var pageSize = parseInt(root.getAttribute('data-cases-v4-page'), 10) || 9;\n var currentFilter = 'all';\n var visibleLimit = pageSize;\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v4__media').forEach(function (media) {\n if (media.dataset.casesV4BeforeAfterReady === 'true') return;\n media.dataset.casesV4BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v4__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV4BlurTimer) {\n clearTimeout(media.__casesV4BlurTimer);\n media.__casesV4BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV4BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV4BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v4-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v4-reveal') || '50').replace('%', '')) || 50;\n var stepKey = 2;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - stepKey);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + stepKey);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n function resetBeforeAfterInVisibleItems() {\n root.querySelectorAll('.cases-v4__item:not([hidden]) .cases-v4__media').forEach(function (media) {\n media.style.setProperty('--cases-v4-reveal', '50%');\n media.classList.add('is-blurred');\n var handle = media.querySelector('.cases-v4__handle');\n if (handle) handle.setAttribute('aria-valuenow', '50');\n });\n }\n function matchesFilter(item) {\n return currentFilter === 'all' || (item.dataset.caseCategory || '') === currentFilter;\n }\n function updateMoreButton(matchingCount) {\n if (!moreBtn) return;\n moreBtn.hidden = matchingCount <= visibleLimit;\n }\n function applyVisibility() {\n var shown = 0;\n var matchingCount = 0;\n items.forEach(function (item) {\n if (!matchesFilter(item)) {\n item.hidden = true;\n return;\n }\n matchingCount += 1;\n shown += 1;\n item.hidden = shown > visibleLimit;\n });\n updateMoreButton(matchingCount);\n resetBeforeAfterInVisibleItems();\n }\n function revealSelectedChip(chip) {\n if (!filtersEl || !chip || filtersEl.scrollWidth <= filtersEl.clientWidth) return;\n requestAnimationFrame(function () {\n var filtersRect = filtersEl.getBoundingClientRect();\n var chipRect = chip.getBoundingClientRect();\n var edgeGap = 8;\n var scrollDelta = 0;\n if (chipRect.left < filtersRect.left + edgeGap) {\n scrollDelta = chipRect.left - filtersRect.left - edgeGap;\n } else if (chipRect.right > filtersRect.right - edgeGap) {\n scrollDelta = chipRect.right - filtersRect.right + edgeGap;\n }\n if (!scrollDelta) return;\n filtersEl.scrollTo({\n left: filtersEl.scrollLeft + scrollDelta,\n behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n });\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n var key = chip.dataset.casesV4Filter || 'all';\n currentFilter = key;\n visibleLimit = pageSize;\n chips.forEach(function (btn) {\n var isActive = btn === chip;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n revealSelectedChip(chip);\n applyVisibility();\n });\n });\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n visibleLimit += pageSize;\n applyVisibility();\n });\n }\n initBeforeAfterSliders();\n applyVisibility();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, init);\n } else {\n init();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-2');\n document.addEventListener('click', function (event) {\n var btn = event.target.closest('.cta-v2 .btn');\n if (!btn) return;\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n})();\n(function () {\n document.querySelectorAll('.news-article-v1').forEach(function (root) {\n function initSwiper() {\n if (root.dataset.newsArticleV1SwiperReady === 'true') return;\n var gallery = root.querySelector('.news-article-v1__gallery');\n if (!gallery || typeof Swiper === 'undefined') return;\n var pagination = root.querySelector('.news-article-v1__gallery-pagination');\n var prev = root.querySelector('.news-article-v1__gallery-prev');\n var next = root.querySelector('.news-article-v1__gallery-next');\n new Swiper(gallery, {\n slidesPerView: 1.15,\n spaceBetween: 16,\n watchOverflow: true,\n autoHeight: false,\n pagination: pagination ? {\n el: pagination,\n clickable: true,\n type: 'bullets'\n } : undefined,\n navigation: (prev && next) ? { prevEl: prev, nextEl: next } : undefined,\n breakpoints: {\n 769: {\n slidesPerView: 2,\n spaceBetween: 40\n }\n }\n });\n root.dataset.newsArticleV1SwiperReady = 'true';\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n window.__LOADED_SECTIONS.push('news-article\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS = window.__LOADED_SECTIONS || [];\n window.__LOADED_SECTIONS.push('contacts\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.contacts-v1').forEach(function (root) {\n if (root.dataset.contactsV1Ready === 'true') return;\n root.dataset.contactsV1Ready = 'true';\n var branchCount = parseInt(root.getAttribute('data-contacts-v1-count') || '1', 10);\n var branchButtons = root.querySelectorAll('[data-contacts-v1-branch]');\n var panel = root.querySelector('[data-contacts-v1-panel]');\n var dataEl = root.querySelector('.contacts-v1__data');\n var branchesData = [];\n if (dataEl) {\n try {\n branchesData = JSON.parse(dataEl.textContent || '[]');\n } catch (error) {\n branchesData = [];\n }\n }\n var infoPanels = root.querySelectorAll('[data-contacts-v1-info-index]');\n var mapPhotoEl = root.querySelector('[data-contacts-v1-map-photo]');\n var mapTextWrap = root.querySelector('[data-contacts-v1-map-text-wrap]');\n var mapTextViewport = root.querySelector('[data-contacts-v1-map-text-viewport]');\n var mapTextTrack = root.querySelector('[data-contacts-v1-map-text-scrollbar]');\n var mapTextThumb = root.querySelector('[data-contacts-v1-map-text-thumb]');\n var mapTextEl = root.querySelector('[data-contacts-v1-map-text]');\n var mapCardEl = root.querySelector('[data-contacts-v1-map-card]');\n var mapCanvasEl = root.querySelector('[data-contacts-v1-map-canvas]');\n var mapHeight = parseInt(root.getAttribute('data-contacts-v1-map-height') || '635', 10);\n var mapZoom = parseInt(root.getAttribute('data-contacts-v1-map-zoom') || '16', 10);\n var mapFocusZoom = parseInt(root.getAttribute('data-contacts-v1-map-focus-zoom') || '', 10);\n if (Number.isNaN(mapFocusZoom)) {\n mapFocusZoom = mapZoom + 2;\n }\n var ymapsApiKey = root.getAttribute('data-contacts-v1-map-api-key') || '';\n var siteLogoSrc = root.getAttribute('data-contacts-v1-site-logo') || '';\n if (!siteLogoSrc) {\n var headerLogoEl = document.querySelector('.site-header__logo');\n if (headerLogoEl) {\n siteLogoSrc = headerLogoEl.getAttribute('src') || '';\n }\n }\n var mapInstance = null;\n var mapSchemeLayer = null;\n var placemarkInstances = [];\n var mapRenderToken = 0;\n var activeBranchIndex = 0;\n var mapShowsOverview = false;\n var mapLayoutCompact = null;\n var mapResizeTimer = null;\n var mapBehaviors = ['drag', 'scrollZoom', 'pinchZoom', 'dblClick'];\n var mapFitMarginLeft = 340;\n var mapCompactMedia = window.matchMedia('(max-width: 1200px)');\n function syncMapTextScrollUi() {\n if (!mapTextWrap || !mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n if (maxScroll <= 1) {\n mapTextWrap.classList.add('is-static');\n mapTextThumb.style.height = '';\n mapTextThumb.style.transform = '';\n return;\n }\n mapTextWrap.classList.remove('is-static');\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = Math.max(48, (mapTextViewport.clientHeight \/ mapTextViewport.scrollHeight) * trackHeight);\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var thumbOffset = maxScroll > 0 ? (mapTextViewport.scrollTop \/ maxScroll) * maxThumbOffset : 0;\n mapTextThumb.style.height = thumbHeight + 'px';\n mapTextThumb.style.transform = 'translateY(' + thumbOffset + 'px)';\n }\n function scrollMapTextFromPointer(clientY) {\n if (!mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = mapTextThumb.offsetHeight;\n if (maxScroll <= 1 || trackHeight <= 0) {\n return;\n }\n var rect = mapTextTrack.getBoundingClientRect();\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var pointerOffset = clientY - rect.top - thumbHeight \/ 2;\n var thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerOffset));\n var ratio = maxThumbOffset > 0 ? thumbOffset \/ maxThumbOffset : 0;\n mapTextViewport.scrollTop = ratio * maxScroll;\n }\n var activeMapTextPointerId = null;\n function onMapTextPointerMove(event) {\n if (event.pointerId !== activeMapTextPointerId) return;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n }\n function stopMapTextPointerDrag(event) {\n if (event && activeMapTextPointerId !== null && event.pointerId !== activeMapTextPointerId) return;\n activeMapTextPointerId = null;\n document.removeEventListener('pointermove', onMapTextPointerMove);\n document.removeEventListener('pointerup', stopMapTextPointerDrag);\n document.removeEventListener('pointercancel', stopMapTextPointerDrag);\n }\n function startMapTextPointerDrag(event) {\n if (!mapTextWrap || mapTextWrap.hidden) return;\n activeMapTextPointerId = event.pointerId;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n document.addEventListener('pointermove', onMapTextPointerMove);\n document.addEventListener('pointerup', stopMapTextPointerDrag);\n document.addEventListener('pointercancel', stopMapTextPointerDrag);\n }\n if (mapTextViewport) {\n mapTextViewport.addEventListener('scroll', syncMapTextScrollUi, { passive: true });\n }\n if (mapTextTrack) {\n mapTextTrack.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (mapTextThumb) {\n mapTextThumb.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (window.ResizeObserver && mapTextViewport) {\n var mapTextResizeObserver = new ResizeObserver(syncMapTextScrollUi);\n mapTextResizeObserver.observe(mapTextViewport);\n if (mapTextEl) {\n mapTextResizeObserver.observe(mapTextEl);\n }\n if (mapCardEl) {\n mapTextResizeObserver.observe(mapCardEl);\n }\n } else {\n window.addEventListener('resize', syncMapTextScrollUi);\n }\n window.requestAnimationFrame(syncMapTextScrollUi);\n function isMapCompactLayout() {\n return mapCompactMedia.matches;\n }\n function isTouchLikeDevice() {\n if (window.matchMedia && window.matchMedia('(pointer: coarse)').matches) return true;\n return 'ontouchstart' in window || (navigator.maxTouchPoints || 0) > 0;\n }\n function destroyMapInstance() {\n if (mapInstance && typeof mapInstance.destroy === 'function') {\n try {\n mapInstance.destroy();\n } catch (error) {\n }\n }\n mapInstance = null;\n mapSchemeLayer = null;\n placemarkInstances = [];\n if (mapCanvasEl) {\n mapCanvasEl.innerHTML = '';\n mapCanvasEl.classList.remove('is-jsapi');\n }\n }\n function scheduleMapLayoutRefresh() {\n clearTimeout(mapResizeTimer);\n mapResizeTimer = setTimeout(function () {\n var compact = isMapCompactLayout();\n if (compact === mapLayoutCompact) return;\n mapLayoutCompact = compact;\n destroyMapInstance();\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n renderBranchMap(activeBranchIndex);\n });\n });\n }, 200);\n }\n function whenMapCanvasReady(callback) {\n function check() {\n if (!mapCanvasEl) return;\n if (mapCanvasEl.offsetWidth > 0 && mapCanvasEl.offsetHeight > 0) {\n callback();\n return;\n }\n requestAnimationFrame(check);\n }\n check();\n }\n mapLayoutCompact = isMapCompactLayout();\n if (typeof mapCompactMedia.addEventListener === 'function') {\n mapCompactMedia.addEventListener('change', scheduleMapLayoutRefresh);\n } else if (typeof mapCompactMedia.addListener === 'function') {\n mapCompactMedia.addListener(scheduleMapLayoutRefresh);\n }\n window.addEventListener('resize', scheduleMapLayoutRefresh);\n window.addEventListener('orientationchange', function () {\n setTimeout(scheduleMapLayoutRefresh, 300);\n });\n function toLngLat(coords) {\n if (!Array.isArray(coords) || coords.length < 2) return [0, 0];\n return [coords[1], coords[0]];\n }\n function getBranchPlacemarkCoords(branch) {\n var map = branch && branch.map ? branch.map : {};\n if (Array.isArray(map.placemark) && map.placemark.length >= 2) {\n return toLngLat(map.placemark);\n }\n return null;\n }\n function getAllPlacemarkCoords() {\n return branchesData\n .map(function (branch) {\n return getBranchPlacemarkCoords(branch);\n })\n .filter(function (coords) {\n return Array.isArray(coords) && coords.length >= 2;\n });\n }\n function getCoordsBounds(coordsList) {\n var minLng = Infinity;\n var minLat = Infinity;\n var maxLng = -Infinity;\n var maxLat = -Infinity;\n coordsList.forEach(function (coords) {\n var lng = coords[0];\n var lat = coords[1];\n if (lng < minLng) minLng = lng;\n if (lng > maxLng) maxLng = lng;\n if (lat < minLat) minLat = lat;\n if (lat > maxLat) maxLat = lat;\n });\n return [\n [minLng, minLat],\n [maxLng, maxLat],\n ];\n }\n function expandBounds(bounds, paddingRatio) {\n paddingRatio = typeof paddingRatio === 'number' ? paddingRatio : 0.2;\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var lngSpan = maxLng - minLng;\n var latSpan = maxLat - minLat;\n var padLng = lngSpan > 0 ? lngSpan * paddingRatio : 0.01;\n var padLat = latSpan > 0 ? latSpan * paddingRatio : 0.01;\n return [\n [minLng - padLng, minLat - padLat],\n [maxLng + padLng, maxLat + padLat],\n ];\n }\n function getBoundsSpanKm(bounds) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLat = (minLat + maxLat) \/ 2;\n var latKm = Math.abs(maxLat - minLat) * 111;\n var lngKm = Math.abs(maxLng - minLng) * 111 * Math.cos((centerLat * Math.PI) \/ 180);\n return Math.sqrt((latKm * latKm) + (lngKm * lngKm));\n }\n function ensureMinBoundsSpan(bounds, minHalfSpanDeg) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLng = (minLng + maxLng) \/ 2;\n var centerLat = (minLat + maxLat) \/ 2;\n var halfLng = Math.max((maxLng - minLng) \/ 2, minHalfSpanDeg);\n var halfLat = Math.max((maxLat - minLat) \/ 2, minHalfSpanDeg);\n return [\n [centerLng - halfLng, centerLat - halfLat],\n [centerLng + halfLng, centerLat + halfLat],\n ];\n }\n function getAdaptiveBoundsFit(spanKm) {\n if (spanKm < 2) {\n return { paddingRatio: 0.28, minHalfSpanDeg: 0.007 };\n }\n if (spanKm < 12) {\n return { paddingRatio: 0.2, minHalfSpanDeg: 0.005 };\n }\n if (spanKm < 50) {\n return { paddingRatio: 0.24, minHalfSpanDeg: null };\n }\n if (spanKm < 250) {\n return { paddingRatio: 0.34, minHalfSpanDeg: null };\n }\n return { paddingRatio: 0.42, minHalfSpanDeg: null };\n }\n function buildOverviewBounds(coords) {\n var bounds = getCoordsBounds(coords);\n var spanKm = getBoundsSpanKm(bounds);\n var fit = getAdaptiveBoundsFit(spanKm);\n var paddingRatio = fit.paddingRatio;\n if (isMapCompactLayout()) {\n paddingRatio += 0.22;\n }\n if (fit.minHalfSpanDeg) {\n bounds = ensureMinBoundsSpan(bounds, fit.minHalfSpanDeg);\n }\n return expandBounds(bounds, paddingRatio);\n }\n function getCompactMapMargins(isOverview) {\n if (isOverview) {\n return [64, 36, 52, 36];\n }\n return [52, 36, 44, 36];\n }\n function getMapOverviewMargin(coords) {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(true);\n }\n var topBottom = 56;\n var right = 32;\n if (coords && coords.length > 1) {\n var spanKm = getBoundsSpanKm(getCoordsBounds(coords));\n if (spanKm > 50) {\n topBottom = 80;\n }\n }\n return [topBottom, right, topBottom, mapFitMarginLeft];\n }\n function getMapBranchFocusMargin() {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(false);\n }\n return [32, 32, 32, mapFitMarginLeft];\n }\n function getMapMarginForLocation(location, coords) {\n if (location && location.bounds) {\n return getMapOverviewMargin(coords);\n }\n return getMapBranchFocusMargin();\n }\n function applyMapMarginForLocation(location, coords) {\n if (!mapInstance || typeof mapInstance.setMargin !== 'function') return;\n mapInstance.setMargin(getMapMarginForLocation(location, coords));\n }\n function getAllMarkersMapLocation() {\n var coords = getAllPlacemarkCoords();\n if (!coords.length) return null;\n if (coords.length === 1) {\n return {\n center: coords[0],\n zoom: mapZoom,\n };\n }\n return {\n bounds: buildOverviewBounds(coords),\n };\n }\n function getBranchFocusMapLocation(branch) {\n var center = getBranchPlacemarkCoords(branch);\n if (!center) return null;\n return {\n center: center,\n zoom: mapFocusZoom,\n duration: 300,\n };\n }\n function createMapMarkerElement(branchIndex, branch, isActive) {\n var map = branch.map || {};\n var markerEl = document.createElement('div');\n markerEl.className = 'contacts-v1__map-marker' + (isActive ? ' is-active' : '');\n markerEl.dataset.branchIndex = String(branchIndex);\n var pinEl = document.createElement('button');\n pinEl.type = 'button';\n pinEl.className = 'contacts-v1__map-pin';\n pinEl.title = map.balloon || branch.title || '';\n pinEl.setAttribute('aria-label', map.balloon || branch.title || ('Филиал ' + (branchIndex + 1)));\n var iconEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n iconEl.setAttribute('class', 'contacts-v1__map-pin-icon');\n iconEl.setAttribute('viewBox', '0 0 31 45');\n iconEl.setAttribute('fill', 'none');\n iconEl.setAttribute('aria-hidden', 'true');\n var useEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n useEl.setAttributeNS('http:\/\/www.w3.org\/1999\/xlink', 'href', '#icon-contacts-map-pin');\n useEl.setAttribute('href', '#icon-contacts-map-pin');\n iconEl.appendChild(useEl);\n pinEl.appendChild(iconEl);\n pinEl.addEventListener('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n var markerIndex = parseInt(markerEl.dataset.branchIndex, 10);\n activateBranchFromMapPin(markerIndex);\n });\n var badgeEl = document.createElement('div');\n badgeEl.className = 'contacts-v1__map-pin-badge';\n badgeEl.setAttribute('aria-hidden', 'true');\n if (siteLogoSrc) {\n var logoEl = document.createElement('img');\n logoEl.className = 'contacts-v1__map-pin-badge-logo';\n logoEl.src = siteLogoSrc;\n logoEl.alt = '';\n logoEl.decoding = 'async';\n badgeEl.appendChild(logoEl);\n }\n markerEl.appendChild(pinEl);\n markerEl.appendChild(badgeEl);\n return markerEl;\n }\n function setMapViewState(location) {\n mapShowsOverview = !!(location && location.bounds);\n }\n function syncMapMarkers(activeIndex) {\n placemarkInstances.forEach(function (entry) {\n if (!entry || !entry.marker || !entry.marker.element) return;\n var markerEl = entry.marker.element;\n var isActive = entry.branchIndex === activeIndex;\n markerEl.classList.toggle('is-active', isActive);\n markerEl.classList.toggle('is-overview', mapShowsOverview);\n });\n }\n function ensureAllMapMarkers(ymaps3, activeIndex) {\n if (!mapInstance || !ymaps3 || !ymaps3.YMapMarker) return;\n var YMapMarker = ymaps3.YMapMarker;\n branchesData.forEach(function (branch, branchIndex) {\n if (placemarkInstances[branchIndex]) return;\n var coords = getBranchPlacemarkCoords(branch);\n if (!coords) return;\n var markerEl = createMapMarkerElement(branchIndex, branch, branchIndex === activeIndex);\n var marker = new YMapMarker({\n coordinates: coords,\n blockBehaviors: true,\n properties: {\n branchIndex: branchIndex,\n },\n }, markerEl);\n mapInstance.addChild(marker);\n placemarkInstances[branchIndex] = {\n marker: marker,\n branchIndex: branchIndex,\n };\n });\n }\n function renderBranchMapJsapi(index, branch, token) {\n if (!branch || !ymapsApiKey) return;\n loadYmaps3().then(function (ymaps3) {\n if (token !== mapRenderToken) return;\n whenMapCanvasReady(function () {\n if (token !== mapRenderToken) return;\n var overviewCoords = getAllPlacemarkCoords();\n var location = mapInstance\n ? getBranchFocusMapLocation(branch)\n : getAllMarkersMapLocation();\n if (!location) return;\n setMapViewState(location);\n var YMap = ymaps3.YMap;\n var YMapDefaultSchemeLayer = ymaps3.YMapDefaultSchemeLayer;\n var YMapDefaultFeaturesLayer = ymaps3.YMapDefaultFeaturesLayer;\n if (!mapInstance) {\n destroyMapInstance();\n mapCanvasEl.classList.add('is-jsapi');\n mapInstance = new YMap(mapCanvasEl, {\n location: location,\n behaviors: mapBehaviors,\n margin: getMapMarginForLocation(location, overviewCoords),\n });\n mapSchemeLayer = new YMapDefaultSchemeLayer({});\n mapInstance.addChild(mapSchemeLayer);\n if (typeof YMapDefaultFeaturesLayer === 'function') {\n mapInstance.addChild(new YMapDefaultFeaturesLayer({}));\n }\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n ensureAllMapMarkers(ymaps3, index);\n syncMapMarkers(index);\n if (isTouchLikeDevice()) {\n requestAnimationFrame(function () {\n if (!mapInstance || typeof mapInstance.setBehaviors !== 'function') return;\n mapInstance.setBehaviors(mapBehaviors);\n });\n }\n return;\n }\n applyMapMarginForLocation(location, overviewCoords);\n mapInstance.setLocation(location);\n syncMapMarkers(index);\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n });\n }).catch(function (error) {\n console.warn(\n '[contacts-v1] Yandex Maps API unavailable:',\n error && error.message ? error.message : error\n );\n });\n }\n function loadYmaps3() {\n if (!ymapsApiKey) {\n return Promise.reject(new Error('Yandex Maps API key is missing'));\n }\n if (window.ymaps3) {\n return window.ymaps3.ready.then(function () {\n return window.ymaps3;\n });\n }\n if (!window.__gorYmaps3Promise) {\n window.__gorYmaps3Promise = new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.src = 'https:\/\/api-maps.yandex.ru\/v3\/?apikey=' +\n encodeURIComponent(ymapsApiKey) +\n '&lang=ru_RU';\n script.async = true;\n script.onload = function () {\n if (!window.ymaps3) {\n reject(new Error('Yandex Maps API v3 failed to load'));\n return;\n }\n window.ymaps3.ready.then(function () {\n resolve(window.ymaps3);\n }).catch(reject);\n };\n script.onerror = function () {\n reject(new Error('Yandex Maps API v3 failed to load'));\n };\n document.head.appendChild(script);\n }).catch(function (error) {\n window.__gorYmaps3Promise = null;\n throw error;\n });\n }\n return window.__gorYmaps3Promise;\n }\n function renderBranchMap(index) {\n var branch = branchesData[index];\n if (!branch || !mapCanvasEl) return;\n var map = branch.map || {};\n var token = ++mapRenderToken;\n var photo = String(map.photo || '').trim();\n var text = String(map.entrance_text || '').trim();\n if (mapPhotoEl) {\n if (photo) {\n mapPhotoEl.src = photo;\n mapPhotoEl.alt = map.photo_alt || '';\n mapPhotoEl.hidden = false;\n } else {\n mapPhotoEl.removeAttribute('src');\n mapPhotoEl.alt = '';\n mapPhotoEl.hidden = true;\n }\n }\n if (mapTextEl) {\n mapTextEl.textContent = text;\n }\n if (mapTextWrap) {\n mapTextWrap.hidden = !text;\n mapTextViewport.scrollTop = 0;\n window.requestAnimationFrame(syncMapTextScrollUi);\n }\n if (mapCardEl) {\n mapCardEl.hidden = !photo && !text;\n }\n renderBranchMapJsapi(index, branch, token);\n }\n function renderBranchInfo(index) {\n infoPanels.forEach(function (item) {\n item.hidden = Number(item.getAttribute('data-contacts-v1-info-index')) !== index\n || item.getAttribute('data-contacts-v1-empty') === 'true';\n });\n }\n var branchesSwiper = null;\n var suppressSwiperBranchSync = false;\n var branchesSliderEl = root.querySelector('.contacts-v1__branches-slider.swiper');\n var branchesGridEl = root.querySelector('.contacts-v1__branches-grid');\n function getBranchIndexFromSwiperSlide(swiper, slideIndex) {\n if (!swiper || !swiper.slides || !swiper.slides[slideIndex]) return slideIndex;\n var tab = swiper.slides[slideIndex].querySelector('[data-contacts-v1-branch]');\n if (!tab) return slideIndex;\n var index = parseInt(tab.getAttribute('data-contacts-v1-branch'), 10);\n return Number.isNaN(index) ? slideIndex : index;\n }\n function syncBranchesSwiperToBranch(index, animate) {\n if (!branchesSwiper) return;\n var activeTab = root.querySelector('[data-contacts-v1-branch=\"' + index + '\"]');\n if (!activeTab) return;\n var slideEl = activeTab.closest('.swiper-slide');\n var speed = animate === false ? 0 : 300;\n suppressSwiperBranchSync = true;\n if (!slideEl) {\n branchesSwiper.slideTo(index, speed, false);\n window.setTimeout(function () {\n suppressSwiperBranchSync = false;\n }, speed + 50);\n return;\n }\n var slideIndex = Array.prototype.indexOf.call(branchesSwiper.slides, slideEl);\n if (slideIndex < 0) slideIndex = index;\n branchesSwiper.slideTo(slideIndex, speed, false);\n if (branchesSliderEl) {\n var sliderStyles = getComputedStyle(branchesSliderEl);\n var gutter = parseFloat(sliderStyles.paddingLeft || sliderStyles.scrollPaddingLeft) || 0;\n var desiredTranslate = -(slideEl.offsetLeft - gutter);\n var minTranslate = branchesSwiper.maxTranslate();\n var maxTranslate = branchesSwiper.minTranslate();\n if (desiredTranslate < minTranslate) desiredTranslate = minTranslate;\n if (desiredTranslate > maxTranslate) desiredTranslate = maxTranslate;\n if (Math.abs(branchesSwiper.translate - desiredTranslate) > 1) {\n if (speed > 0) {\n branchesSwiper.setTransition(speed);\n }\n branchesSwiper.setTranslate(desiredTranslate);\n branchesSwiper.updateActiveIndex();\n branchesSwiper.updateSlidesClasses();\n }\n }\n window.setTimeout(function () {\n suppressSwiperBranchSync = false;\n }, speed + 50);\n }\n function scrollBranchTabIntoView(index) {\n var activeTab = root.querySelector('[data-contacts-v1-branch=\"' + index + '\"]');\n if (!activeTab) return;\n if (branchesSwiper) {\n syncBranchesSwiperToBranch(index, true);\n return;\n }\n if (!branchesGridEl) return;\n requestAnimationFrame(function () {\n var styles = getComputedStyle(branchesGridEl);\n var gutter = parseFloat(styles.scrollPaddingLeft || styles.paddingLeft) || 0;\n var targetLeft = activeTab.offsetLeft - gutter;\n if (targetLeft < 0) targetLeft = 0;\n branchesGridEl.scrollTo({\n left: targetLeft,\n behavior: 'smooth',\n });\n });\n }\n function activateBranchFromMapPin(index) {\n if (Number.isNaN(index) || !branchesData[index]) return;\n if (index === activeBranchIndex && !mapShowsOverview) return;\n setActiveBranch(index);\n }\n function setActiveBranch(index, options) {\n options = options || {};\n activeBranchIndex = index;\n branchButtons.forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-contacts-v1-branch'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n var selectButton = tab.querySelector('[data-contacts-v1-branch-select]');\n if (selectButton) selectButton.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n if (panel) {\n panel.setAttribute('aria-labelledby', 'contacts-v1-branch-' + index);\n }\n renderBranchInfo(index);\n renderBranchMap(index);\n if (options.scrollTab !== false) {\n scrollBranchTabIntoView(index);\n }\n }\n if (window.LazyInit && mapCanvasEl) {\n window.LazyInit.whenVisible(mapCanvasEl, function () {\n renderBranchMap(activeBranchIndex);\n });\n } else {\n renderBranchMap(activeBranchIndex);\n }\n branchButtons.forEach(function (tab) {\n tab.addEventListener('click', function (event) {\n if (event.target.closest('.contacts-v1__branch-action')) return;\n var index = parseInt(tab.getAttribute('data-contacts-v1-branch'), 10);\n if (Number.isNaN(index)) return;\n setActiveBranch(index);\n });\n });\n function initBranchesSwiper() {\n if (branchesSwiper || branchCount <= 2) return;\n if (!branchesSliderEl || typeof Swiper === 'undefined') return;\n var slides = branchesSliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.contacts-v1__branches-pagination');\n branchesSwiper = new Swiper(branchesSliderEl, {\n slidesPerView: 'auto',\n spaceBetween: 12,\n watchOverflow: true,\n navigation: {\n nextEl: root.querySelector('.contacts-v1__branches-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.contacts-v1__branches-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n breakpoints: {\n 769: {\n slidesPerView: 2,\n spaceBetween: 38,\n },\n },\n on: {\n slideChange: function (swiper) {\n if (suppressSwiperBranchSync) return;\n var index = getBranchIndexFromSwiperSlide(swiper, swiper.activeIndex);\n if (index === activeBranchIndex) return;\n setActiveBranch(index, { scrollTab: false });\n },\n },\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initBranchesSwiper);\n } else {\n initBranchesSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS = window.__LOADED_SECTIONS || [];\n window.__LOADED_SECTIONS.push('contacts\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.contacts-v2').forEach(function (root) {\n if (root.dataset.contactsV2Ready === 'true') return;\n root.dataset.contactsV2Ready = 'true';\n var branchCount = parseInt(root.getAttribute('data-contacts-v2-count') || '1', 10);\n var branchButtons = root.querySelectorAll('[data-contacts-v2-branch]');\n var panel = root.querySelector('[data-contacts-v2-panel]');\n var dataEl = root.querySelector('.contacts-v2__data');\n var branchesData = [];\n if (dataEl) {\n try {\n branchesData = JSON.parse(dataEl.textContent || '[]');\n } catch (error) {\n branchesData = [];\n }\n }\n var infoPanels = root.querySelectorAll('[data-contacts-v2-info-index]');\n var mapPhotoEl = root.querySelector('[data-contacts-v2-map-photo]');\n var mapTextWrap = root.querySelector('[data-contacts-v2-map-text-wrap]');\n var mapTextViewport = root.querySelector('[data-contacts-v2-map-text-viewport]');\n var mapTextTrack = root.querySelector('[data-contacts-v2-map-text-scrollbar]');\n var mapTextThumb = root.querySelector('[data-contacts-v2-map-text-thumb]');\n var mapTextEl = root.querySelector('[data-contacts-v2-map-text]');\n var mapCardEl = root.querySelector('[data-contacts-v2-map-card]');\n var mapCanvasEl = root.querySelector('[data-contacts-v2-map-canvas]');\n var mapHeight = parseInt(root.getAttribute('data-contacts-v2-map-height') || '635', 10);\n var mapZoom = parseInt(root.getAttribute('data-contacts-v2-map-zoom') || '16', 10);\n var mapFocusZoom = parseInt(root.getAttribute('data-contacts-v2-map-focus-zoom') || '', 10);\n if (Number.isNaN(mapFocusZoom)) {\n mapFocusZoom = mapZoom + 2;\n }\n var ymapsApiKey = root.getAttribute('data-contacts-v2-map-api-key') || '';\n var siteLogoSrc = root.getAttribute('data-contacts-v2-site-logo') || '';\n if (!siteLogoSrc) {\n var headerLogoEl = document.querySelector('.site-header__logo');\n if (headerLogoEl) {\n siteLogoSrc = headerLogoEl.getAttribute('src') || '';\n }\n }\n var mapInstance = null;\n var mapSchemeLayer = null;\n var placemarkInstances = [];\n var mapRenderToken = 0;\n var activeBranchIndex = 0;\n var mapShowsOverview = false;\n var mapLayoutCompact = null;\n var mapResizeTimer = null;\n var mapBehaviors = ['drag', 'scrollZoom', 'pinchZoom', 'dblClick'];\n var mapFitMarginLeft = 280;\n var mapCompactMedia = window.matchMedia('(max-width: 1200px)');\n function syncMapTextScrollUi() {\n if (!mapTextWrap || !mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n if (maxScroll <= 1) {\n mapTextWrap.classList.add('is-static');\n mapTextThumb.style.height = '';\n mapTextThumb.style.transform = '';\n return;\n }\n mapTextWrap.classList.remove('is-static');\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = Math.max(48, (mapTextViewport.clientHeight \/ mapTextViewport.scrollHeight) * trackHeight);\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var thumbOffset = maxScroll > 0 ? (mapTextViewport.scrollTop \/ maxScroll) * maxThumbOffset : 0;\n mapTextThumb.style.height = thumbHeight + 'px';\n mapTextThumb.style.transform = 'translateY(' + thumbOffset + 'px)';\n }\n function scrollMapTextFromPointer(clientY) {\n if (!mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = mapTextThumb.offsetHeight;\n if (maxScroll <= 1 || trackHeight <= 0) {\n return;\n }\n var rect = mapTextTrack.getBoundingClientRect();\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var pointerOffset = clientY - rect.top - thumbHeight \/ 2;\n var thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerOffset));\n var ratio = maxThumbOffset > 0 ? thumbOffset \/ maxThumbOffset : 0;\n mapTextViewport.scrollTop = ratio * maxScroll;\n }\n var activeMapTextPointerId = null;\n function onMapTextPointerMove(event) {\n if (event.pointerId !== activeMapTextPointerId) return;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n }\n function stopMapTextPointerDrag(event) {\n if (event && activeMapTextPointerId !== null && event.pointerId !== activeMapTextPointerId) return;\n activeMapTextPointerId = null;\n document.removeEventListener('pointermove', onMapTextPointerMove);\n document.removeEventListener('pointerup', stopMapTextPointerDrag);\n document.removeEventListener('pointercancel', stopMapTextPointerDrag);\n }\n function startMapTextPointerDrag(event) {\n if (!mapTextWrap || mapTextWrap.hidden) return;\n activeMapTextPointerId = event.pointerId;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n document.addEventListener('pointermove', onMapTextPointerMove);\n document.addEventListener('pointerup', stopMapTextPointerDrag);\n document.addEventListener('pointercancel', stopMapTextPointerDrag);\n }\n if (mapTextViewport) {\n mapTextViewport.addEventListener('scroll', syncMapTextScrollUi, { passive: true });\n }\n if (mapTextTrack) {\n mapTextTrack.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (mapTextThumb) {\n mapTextThumb.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (window.ResizeObserver && mapTextViewport) {\n var mapTextResizeObserver = new ResizeObserver(syncMapTextScrollUi);\n mapTextResizeObserver.observe(mapTextViewport);\n if (mapTextEl) {\n mapTextResizeObserver.observe(mapTextEl);\n }\n if (mapCardEl) {\n mapTextResizeObserver.observe(mapCardEl);\n }\n } else {\n window.addEventListener('resize', syncMapTextScrollUi);\n }\n window.requestAnimationFrame(syncMapTextScrollUi);\n function isMapCompactLayout() {\n return mapCompactMedia.matches;\n }\n function isTouchLikeDevice() {\n if (window.matchMedia && window.matchMedia('(pointer: coarse)').matches) return true;\n return 'ontouchstart' in window || (navigator.maxTouchPoints || 0) > 0;\n }\n function destroyMapInstance() {\n if (mapInstance && typeof mapInstance.destroy === 'function') {\n try {\n mapInstance.destroy();\n } catch (error) {\n }\n }\n mapInstance = null;\n mapSchemeLayer = null;\n placemarkInstances = [];\n if (mapCanvasEl) {\n mapCanvasEl.innerHTML = '';\n mapCanvasEl.classList.remove('is-jsapi');\n }\n }\n function scheduleMapLayoutRefresh() {\n clearTimeout(mapResizeTimer);\n mapResizeTimer = setTimeout(function () {\n var compact = isMapCompactLayout();\n if (compact === mapLayoutCompact) return;\n mapLayoutCompact = compact;\n destroyMapInstance();\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n renderBranchMap(activeBranchIndex);\n });\n });\n }, 200);\n }\n function whenMapCanvasReady(callback) {\n function check() {\n if (!mapCanvasEl) return;\n if (mapCanvasEl.offsetWidth > 0 && mapCanvasEl.offsetHeight > 0) {\n callback();\n return;\n }\n requestAnimationFrame(check);\n }\n check();\n }\n mapLayoutCompact = isMapCompactLayout();\n if (typeof mapCompactMedia.addEventListener === 'function') {\n mapCompactMedia.addEventListener('change', scheduleMapLayoutRefresh);\n } else if (typeof mapCompactMedia.addListener === 'function') {\n mapCompactMedia.addListener(scheduleMapLayoutRefresh);\n }\n window.addEventListener('resize', scheduleMapLayoutRefresh);\n window.addEventListener('orientationchange', function () {\n setTimeout(scheduleMapLayoutRefresh, 300);\n });\n function toLngLat(coords) {\n if (!Array.isArray(coords) || coords.length < 2) return [0, 0];\n return [coords[1], coords[0]];\n }\n function getBranchPlacemarkCoords(branch) {\n var map = branch && branch.map ? branch.map : {};\n if (Array.isArray(map.placemark) && map.placemark.length >= 2) {\n return toLngLat(map.placemark);\n }\n return null;\n }\n function getAllPlacemarkCoords() {\n return branchesData\n .map(function (branch) {\n return getBranchPlacemarkCoords(branch);\n })\n .filter(function (coords) {\n return Array.isArray(coords) && coords.length >= 2;\n });\n }\n function getCoordsBounds(coordsList) {\n var minLng = Infinity;\n var minLat = Infinity;\n var maxLng = -Infinity;\n var maxLat = -Infinity;\n coordsList.forEach(function (coords) {\n var lng = coords[0];\n var lat = coords[1];\n if (lng < minLng) minLng = lng;\n if (lng > maxLng) maxLng = lng;\n if (lat < minLat) minLat = lat;\n if (lat > maxLat) maxLat = lat;\n });\n return [\n [minLng, minLat],\n [maxLng, maxLat],\n ];\n }\n function expandBounds(bounds, paddingRatio) {\n paddingRatio = typeof paddingRatio === 'number' ? paddingRatio : 0.2;\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var lngSpan = maxLng - minLng;\n var latSpan = maxLat - minLat;\n var padLng = lngSpan > 0 ? lngSpan * paddingRatio : 0.01;\n var padLat = latSpan > 0 ? latSpan * paddingRatio : 0.01;\n return [\n [minLng - padLng, minLat - padLat],\n [maxLng + padLng, maxLat + padLat],\n ];\n }\n function getBoundsSpanKm(bounds) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLat = (minLat + maxLat) \/ 2;\n var latKm = Math.abs(maxLat - minLat) * 111;\n var lngKm = Math.abs(maxLng - minLng) * 111 * Math.cos((centerLat * Math.PI) \/ 180);\n return Math.sqrt((latKm * latKm) + (lngKm * lngKm));\n }\n function ensureMinBoundsSpan(bounds, minHalfSpanDeg) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLng = (minLng + maxLng) \/ 2;\n var centerLat = (minLat + maxLat) \/ 2;\n var halfLng = Math.max((maxLng - minLng) \/ 2, minHalfSpanDeg);\n var halfLat = Math.max((maxLat - minLat) \/ 2, minHalfSpanDeg);\n return [\n [centerLng - halfLng, centerLat - halfLat],\n [centerLng + halfLng, centerLat + halfLat],\n ];\n }\n function getAdaptiveBoundsFit(spanKm) {\n if (spanKm < 2) {\n return { paddingRatio: 0.28, minHalfSpanDeg: 0.007 };\n }\n if (spanKm < 12) {\n return { paddingRatio: 0.2, minHalfSpanDeg: 0.005 };\n }\n if (spanKm < 50) {\n return { paddingRatio: 0.24, minHalfSpanDeg: null };\n }\n if (spanKm < 250) {\n return { paddingRatio: 0.34, minHalfSpanDeg: null };\n }\n return { paddingRatio: 0.42, minHalfSpanDeg: null };\n }\n function buildOverviewBounds(coords) {\n var bounds = getCoordsBounds(coords);\n var spanKm = getBoundsSpanKm(bounds);\n var fit = getAdaptiveBoundsFit(spanKm);\n var paddingRatio = fit.paddingRatio;\n if (isMapCompactLayout()) {\n paddingRatio += 0.22;\n }\n if (fit.minHalfSpanDeg) {\n bounds = ensureMinBoundsSpan(bounds, fit.minHalfSpanDeg);\n }\n return expandBounds(bounds, paddingRatio);\n }\n function getCompactMapMargins(isOverview) {\n if (isOverview) {\n return [64, 36, 52, 36];\n }\n return [52, 36, 44, 36];\n }\n function getMapOverviewMargin(coords) {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(true);\n }\n var topBottom = 56;\n var right = 32;\n if (coords && coords.length > 1) {\n var spanKm = getBoundsSpanKm(getCoordsBounds(coords));\n if (spanKm > 50) {\n topBottom = 80;\n }\n }\n return [topBottom, right, topBottom, mapFitMarginLeft];\n }\n function getMapBranchFocusMargin() {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(false);\n }\n return [32, 32, 32, mapFitMarginLeft];\n }\n function getMapMarginForLocation(location, coords) {\n if (location && location.bounds) {\n return getMapOverviewMargin(coords);\n }\n return getMapBranchFocusMargin();\n }\n function applyMapMarginForLocation(location, coords) {\n if (!mapInstance || typeof mapInstance.setMargin !== 'function') return;\n mapInstance.setMargin(getMapMarginForLocation(location, coords));\n }\n function getAllMarkersMapLocation() {\n var coords = getAllPlacemarkCoords();\n if (!coords.length) return null;\n if (coords.length === 1) {\n return {\n center: coords[0],\n zoom: mapZoom,\n };\n }\n return {\n bounds: buildOverviewBounds(coords),\n };\n }\n function getBranchFocusMapLocation(branch) {\n var center = getBranchPlacemarkCoords(branch);\n if (!center) return null;\n return {\n center: center,\n zoom: mapFocusZoom,\n duration: 300,\n };\n }\n function createMapMarkerElement(branchIndex, branch, isActive) {\n var map = branch.map || {};\n var markerEl = document.createElement('div');\n markerEl.className = 'contacts-v2__map-marker' + (isActive ? ' is-active' : '');\n markerEl.dataset.branchIndex = String(branchIndex);\n var pinEl = document.createElement('button');\n pinEl.type = 'button';\n pinEl.className = 'contacts-v2__map-pin';\n pinEl.title = map.balloon || branch.title || '';\n pinEl.setAttribute('aria-label', map.balloon || branch.title || ('Филиал ' + (branchIndex + 1)));\n var iconEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n iconEl.setAttribute('class', 'contacts-v2__map-pin-icon');\n iconEl.setAttribute('viewBox', '0 0 31 45');\n iconEl.setAttribute('fill', 'none');\n iconEl.setAttribute('aria-hidden', 'true');\n var useEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n useEl.setAttributeNS('http:\/\/www.w3.org\/1999\/xlink', 'href', '#icon-contacts-map-pin');\n useEl.setAttribute('href', '#icon-contacts-map-pin');\n iconEl.appendChild(useEl);\n pinEl.appendChild(iconEl);\n pinEl.addEventListener('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n var markerIndex = parseInt(markerEl.dataset.branchIndex, 10);\n activateBranchFromMapPin(markerIndex);\n });\n var badgeEl = document.createElement('div');\n badgeEl.className = 'contacts-v2__map-pin-badge';\n badgeEl.setAttribute('aria-hidden', 'true');\n if (siteLogoSrc) {\n var logoEl = document.createElement('img');\n logoEl.className = 'contacts-v2__map-pin-badge-logo';\n logoEl.src = siteLogoSrc;\n logoEl.alt = '';\n logoEl.decoding = 'async';\n badgeEl.appendChild(logoEl);\n }\n markerEl.appendChild(pinEl);\n markerEl.appendChild(badgeEl);\n return markerEl;\n }\n function setMapViewState(location) {\n mapShowsOverview = !!(location && location.bounds);\n }\n function syncMapMarkers(activeIndex) {\n placemarkInstances.forEach(function (entry) {\n if (!entry || !entry.marker || !entry.marker.element) return;\n var markerEl = entry.marker.element;\n var isActive = entry.branchIndex === activeIndex;\n markerEl.classList.toggle('is-active', isActive);\n markerEl.classList.toggle('is-overview', mapShowsOverview);\n });\n }\n function ensureAllMapMarkers(ymaps3, activeIndex) {\n if (!mapInstance || !ymaps3 || !ymaps3.YMapMarker) return;\n var YMapMarker = ymaps3.YMapMarker;\n branchesData.forEach(function (branch, branchIndex) {\n if (placemarkInstances[branchIndex]) return;\n var coords = getBranchPlacemarkCoords(branch);\n if (!coords) return;\n var markerEl = createMapMarkerElement(branchIndex, branch, branchIndex === activeIndex);\n var marker = new YMapMarker({\n coordinates: coords,\n blockBehaviors: true,\n properties: {\n branchIndex: branchIndex,\n },\n }, markerEl);\n mapInstance.addChild(marker);\n placemarkInstances[branchIndex] = {\n marker: marker,\n branchIndex: branchIndex,\n };\n });\n }\n function renderBranchMapJsapi(index, branch, token) {\n if (!branch || !ymapsApiKey) return;\n loadYmaps3().then(function (ymaps3) {\n if (token !== mapRenderToken) return;\n whenMapCanvasReady(function () {\n if (token !== mapRenderToken) return;\n var overviewCoords = getAllPlacemarkCoords();\n var location = mapInstance\n ? getBranchFocusMapLocation(branch)\n : getAllMarkersMapLocation();\n if (!location) return;\n setMapViewState(location);\n var YMap = ymaps3.YMap;\n var YMapDefaultSchemeLayer = ymaps3.YMapDefaultSchemeLayer;\n var YMapDefaultFeaturesLayer = ymaps3.YMapDefaultFeaturesLayer;\n if (!mapInstance) {\n destroyMapInstance();\n mapCanvasEl.classList.add('is-jsapi');\n mapInstance = new YMap(mapCanvasEl, {\n location: location,\n behaviors: mapBehaviors,\n margin: getMapMarginForLocation(location, overviewCoords),\n });\n mapSchemeLayer = new YMapDefaultSchemeLayer({});\n mapInstance.addChild(mapSchemeLayer);\n if (typeof YMapDefaultFeaturesLayer === 'function') {\n mapInstance.addChild(new YMapDefaultFeaturesLayer({}));\n }\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n ensureAllMapMarkers(ymaps3, index);\n syncMapMarkers(index);\n if (isTouchLikeDevice()) {\n requestAnimationFrame(function () {\n if (!mapInstance || typeof mapInstance.setBehaviors !== 'function') return;\n mapInstance.setBehaviors(mapBehaviors);\n });\n }\n return;\n }\n applyMapMarginForLocation(location, overviewCoords);\n mapInstance.setLocation(location);\n syncMapMarkers(index);\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n });\n }).catch(function (error) {\n console.warn(\n '[contacts-v2] Yandex Maps API unavailable:',\n error && error.message ? error.message : error\n );\n });\n }\n function loadYmaps3() {\n if (!ymapsApiKey) {\n return Promise.reject(new Error('Yandex Maps API key is missing'));\n }\n if (window.ymaps3) {\n return window.ymaps3.ready.then(function () {\n return window.ymaps3;\n });\n }\n if (!window.__gorYmaps3Promise) {\n window.__gorYmaps3Promise = new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.src = 'https:\/\/api-maps.yandex.ru\/v3\/?apikey=' +\n encodeURIComponent(ymapsApiKey) +\n '&lang=ru_RU';\n script.async = true;\n script.onload = function () {\n if (!window.ymaps3) {\n reject(new Error('Yandex Maps API v3 failed to load'));\n return;\n }\n window.ymaps3.ready.then(function () {\n resolve(window.ymaps3);\n }).catch(reject);\n };\n script.onerror = function () {\n reject(new Error('Yandex Maps API v3 failed to load'));\n };\n document.head.appendChild(script);\n }).catch(function (error) {\n window.__gorYmaps3Promise = null;\n throw error;\n });\n }\n return window.__gorYmaps3Promise;\n }\n function renderBranchMap(index) {\n var branch = branchesData[index];\n if (!branch || !mapCanvasEl) return;\n var map = branch.map || {};\n var token = ++mapRenderToken;\n var photo = String(map.photo || '').trim();\n var text = String(map.entrance_text || '').trim();\n if (mapPhotoEl) {\n if (photo) {\n mapPhotoEl.src = photo;\n mapPhotoEl.alt = map.photo_alt || '';\n mapPhotoEl.hidden = false;\n } else {\n mapPhotoEl.removeAttribute('src');\n mapPhotoEl.alt = '';\n mapPhotoEl.hidden = true;\n }\n }\n if (mapTextEl) {\n mapTextEl.textContent = text;\n }\n if (mapTextWrap) {\n mapTextWrap.hidden = !text;\n mapTextViewport.scrollTop = 0;\n window.requestAnimationFrame(syncMapTextScrollUi);\n }\n if (mapCardEl) {\n mapCardEl.hidden = !photo && !text;\n }\n renderBranchMapJsapi(index, branch, token);\n }\n function renderBranchInfo(index) {\n infoPanels.forEach(function (item) {\n item.hidden = Number(item.getAttribute('data-contacts-v2-info-index')) !== index\n || item.getAttribute('data-contacts-v2-empty') === 'true';\n });\n }\n var sidebarListEl = root.querySelector('[data-contacts-v2-sidebar-list]');\n function scrollBranchTabIntoView(index) {\n var activeTab = root.querySelector('[data-contacts-v2-branch=\"' + index + '\"]');\n if (!activeTab || !sidebarListEl) return;\n requestAnimationFrame(function () {\n if (window.matchMedia('(max-width: 1200px)').matches) {\n var targetLeft = activeTab.offsetLeft - sidebarListEl.offsetLeft;\n sidebarListEl.scrollTo({\n left: Math.max(0, targetLeft - 16),\n behavior: 'smooth',\n });\n return;\n }\n activeTab.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n });\n }\n function activateBranchFromMapPin(index) {\n if (Number.isNaN(index) || !branchesData[index]) return;\n if (index === activeBranchIndex && !mapShowsOverview) return;\n setActiveBranch(index);\n }\n function setActiveBranch(index, options) {\n options = options || {};\n activeBranchIndex = index;\n branchButtons.forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-contacts-v2-branch'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n if (panel) {\n panel.setAttribute('aria-labelledby', 'contacts-v2-branch-' + index);\n }\n renderBranchInfo(index);\n renderBranchMap(index);\n if (options.scrollTab !== false) {\n scrollBranchTabIntoView(index);\n }\n }\n renderBranchInfo(0);\n if (window.LazyInit && mapCanvasEl) {\n window.LazyInit.whenVisible(mapCanvasEl, function () {\n renderBranchMap(activeBranchIndex);\n });\n } else {\n renderBranchMap(activeBranchIndex);\n }\n branchButtons.forEach(function (tab) {\n tab.addEventListener('click', function () {\n var index = parseInt(tab.getAttribute('data-contacts-v2-branch'), 10);\n if (Number.isNaN(index)) return;\n setActiveBranch(index);\n });\n tab.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n var index = parseInt(tab.getAttribute('data-contacts-v2-branch'), 10);\n if (Number.isNaN(index)) return;\n setActiveBranch(index);\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v3').forEach(function (root) {\n if (root.dataset.newsV3Ready === 'true') return;\n root.dataset.newsV3Ready = 'true';\n var sliderEl = root.querySelector('.news-v3__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.news-v3__pagination');\n var carouselMq = window.matchMedia('(max-width: 991px)');\n var swiperInstance = null;\n function destroyCarousel() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n root.classList.remove('is-carousel');\n }\n function initCarousel() {\n if (swiperInstance || !carouselMq.matches) return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n dynamicBullets: true,\n },\n });\n root.classList.add('is-carousel');\n }\n function syncCarousel() {\n if (carouselMq.matches) {\n initCarousel();\n } else {\n destroyCarousel();\n }\n }\n function bootSwiper() {\n syncCarousel();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof carouselMq.addEventListener === 'function') {\n carouselMq.addEventListener('change', syncCarousel);\n } else if (typeof carouselMq.addListener === 'function') {\n carouselMq.addListener(syncCarousel);\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v4').forEach(function (root) {\n if (root.dataset.newsV4Ready === 'true') return;\n root.dataset.newsV4Ready = 'true';\n var chips = root.querySelectorAll('[data-news-v4-filter]');\n var items = root.querySelectorAll('[data-news-v4-item]');\n var moreBtn = root.querySelector('[data-news-v4-more]');\n var initialLimit = parseInt(root.dataset.newsV4Limit || '6', 10) || 6;\n var activeFilter = 'all';\n var expanded = false;\n function matchesFilter(item) {\n if (activeFilter === 'all') return true;\n return (item.dataset.newsV4Type || '') === activeFilter;\n }\n function syncVisibility() {\n var visibleIndex = 0;\n items.forEach(function (item) {\n var match = matchesFilter(item);\n if (!match) {\n item.classList.add('is-filtered-out');\n item.hidden = true;\n return;\n }\n item.classList.remove('is-filtered-out');\n var collapsed = !expanded && visibleIndex >= initialLimit;\n if (collapsed) {\n item.classList.add('is-collapsed');\n item.hidden = true;\n } else {\n item.classList.remove('is-collapsed');\n item.hidden = false;\n visibleIndex += 1;\n }\n });\n if (moreBtn) {\n var matched = 0;\n items.forEach(function (item) {\n if (matchesFilter(item)) matched += 1;\n });\n moreBtn.hidden = !(!expanded && matched > initialLimit);\n }\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n activeFilter = chip.dataset.newsV4Filter || 'all';\n expanded = false;\n chips.forEach(function (btn) {\n var on = btn === chip;\n btn.classList.toggle('is-active', on);\n btn.setAttribute('aria-pressed', on ? 'true' : 'false');\n });\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n syncVisibility();\n });\n });\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n moreBtn.hidden = true;\n });\n }\n var submitBtn = root.querySelector('.news-v4__submit');\n if (submitBtn) {\n submitBtn.addEventListener('click', function () {\n submitBtn.classList.add('is-pressed');\n setTimeout(function () { submitBtn.classList.remove('is-pressed'); }, 160);\n });\n }\n syncVisibility();\n });\n });\n})();\n(function () {\n document.querySelectorAll('.knowledge-v1').forEach(function (root) {\n if (root.dataset.knowledgeV1Ready === '1') return;\n root.dataset.knowledgeV1Ready = '1';\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var panelMotionMs = 360;\n var form = root.querySelector('[data-knowledge-v1-search]');\n var searchInput = root.querySelector('[data-knowledge-v1-input]');\n var searchMode = (root.getAttribute('data-knowledge-v1-search-mode') || 'client').trim();\n var isClientSearch = searchMode === 'client';\n var browseSections = Array.prototype.slice.call(root.querySelectorAll('[data-knowledge-v1-browse]'));\n var resultsRoot = root.querySelector('[data-knowledge-v1-results]');\n var resultsSummary = root.querySelector('[data-knowledge-v1-results-summary]');\n var resultsFilters = root.querySelector('[data-knowledge-v1-results-filters]');\n var resultsEmpty = root.querySelector('[data-knowledge-v1-results-empty]');\n var resultsList = root.querySelector('[data-knowledge-v1-results-list]');\n var resultsReset = root.querySelector('[data-knowledge-v1-results-reset]');\n var resultFilterButtons = resultsFilters\n ? Array.prototype.slice.call(resultsFilters.querySelectorAll('[data-knowledge-v1-results-filter]'))\n : [];\n var indexNode = root.querySelector('[data-knowledge-v1-index]');\n var searchIndex = [];\n var currentSearchQuery = '';\n var currentSearchResults = [];\n var activeResultsFilter = 'all';\n var resultsPageSize = parseInt(root.getAttribute('data-knowledge-v1-results-page'), 10) || 6;\n if (resultsPageSize < 1) {\n resultsPageSize = 6;\n }\n var resultsVisibleLimit = resultsPageSize;\n if (indexNode && indexNode.textContent) {\n try {\n searchIndex = JSON.parse(indexNode.textContent);\n } catch (error) {\n searchIndex = [];\n }\n }\n if (!Array.isArray(searchIndex)) {\n searchIndex = [];\n }\n function normalizeQuery(value) {\n return (value || '').trim().toLowerCase();\n }\n function formatMaterialsCount(count) {\n var mod10 = count % 10;\n var mod100 = count % 100;\n if (mod10 === 1 && mod100 !== 11) {\n return count + ' материал';\n }\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return count + ' материала';\n }\n return count + ' материалов';\n }\n function filterSearchIndex(query) {\n var normalized = normalizeQuery(query);\n if (!normalized) {\n return [];\n }\n return searchIndex.filter(function (item) {\n var title = normalizeQuery(item && item.title);\n var excerpt = normalizeQuery(item && item.excerpt);\n var category = normalizeQuery(item && item.category);\n return title.indexOf(normalized) !== -1\n || excerpt.indexOf(normalized) !== -1\n || category.indexOf(normalized) !== -1;\n });\n }\n function filterResultsByCategory(results, filterKey) {\n if (!filterKey || filterKey === 'all') {\n return results;\n }\n return results.filter(function (item) {\n return (item && item.category_id) === filterKey;\n });\n }\n function updateSearchUrl(query) {\n if (!window.history || !window.history.replaceState) {\n return;\n }\n var nextUrl;\n try {\n var url = new URL(window.location.href);\n if (query) {\n url.searchParams.set('q', query);\n } else {\n url.searchParams.delete('q');\n }\n nextUrl = url.pathname + url.search + url.hash;\n } catch (error) {\n return;\n }\n window.history.replaceState({}, '', nextUrl);\n }\n function readSearchQueryFromUrl() {\n try {\n return new URL(window.location.href).searchParams.get('q') || '';\n } catch (error) {\n return '';\n }\n }\n function setBrowseVisible(isVisible) {\n browseSections.forEach(function (section) {\n if (isVisible) {\n section.removeAttribute('hidden');\n } else {\n section.setAttribute('hidden', 'hidden');\n }\n });\n }\n function updateResultsFilters(results) {\n if (!resultsFilters) {\n return;\n }\n var available = {};\n results.forEach(function (item) {\n if (item && item.category_id) {\n available[item.category_id] = true;\n }\n });\n var visibleCount = 0;\n resultFilterButtons.forEach(function (button) {\n var filterKey = button.getAttribute('data-knowledge-v1-results-filter') || '';\n var isAll = filterKey === 'all';\n var hasItems = isAll || !!available[filterKey];\n button.hidden = !hasItems;\n if (hasItems) {\n visibleCount += 1;\n }\n });\n resultsFilters.hidden = visibleCount <= 1;\n if (activeResultsFilter !== 'all' && !available[activeResultsFilter]) {\n activeResultsFilter = 'all';\n }\n resultFilterButtons.forEach(function (button) {\n var filterKey = button.getAttribute('data-knowledge-v1-results-filter') || '';\n var isActive = filterKey === activeResultsFilter;\n button.classList.toggle('is-active', isActive);\n button.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n }\n function renderResultCard(item) {\n var card = document.createElement('article');\n card.className = 'knowledge-v1__result-card';\n var link = document.createElement('a');\n link.className = 'knowledge-v1__result-card-link';\n link.href = (item && item.url) ? item.url : '#';\n var top = document.createElement('div');\n top.className = 'knowledge-v1__result-card-top';\n var copy = document.createElement('div');\n copy.className = 'knowledge-v1__result-card-copy';\n var title = document.createElement('p');\n title.className = 'knowledge-v1__result-card-title titletext-sm';\n title.textContent = (item && item.title) ? item.title : '';\n copy.appendChild(title);\n if (item && item.excerpt) {\n var excerpt = document.createElement('p');\n excerpt.className = 'knowledge-v1__result-card-excerpt bodytext-lg';\n excerpt.textContent = item.excerpt;\n copy.appendChild(excerpt);\n }\n top.appendChild(copy);\n if (item && item.category) {\n var tag = document.createElement('span');\n tag.className = 'knowledge-v1__result-card-tag bodytext';\n tag.textContent = item.category;\n top.appendChild(tag);\n }\n link.appendChild(top);\n var meta = document.createElement('div');\n meta.className = 'knowledge-v1__result-card-meta bodytext';\n if (item && item.date) {\n var date = document.createElement('time');\n date.className = 'knowledge-v1__result-card-date';\n date.dateTime = item.datetime || '';\n date.textContent = item.date;\n meta.appendChild(date);\n }\n if (item && item.read_time) {\n var dot = document.createElement('span');\n dot.className = 'knowledge-v1__result-card-dot';\n dot.setAttribute('aria-hidden', 'true');\n meta.appendChild(dot);\n var read = document.createElement('span');\n read.className = 'knowledge-v1__result-card-read';\n var clock = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n clock.setAttribute('class', 'icon knowledge-v1__result-card-clock');\n clock.setAttribute('width', '24');\n clock.setAttribute('height', '24');\n clock.setAttribute('aria-hidden', 'true');\n var use = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n use.setAttribute('href', '#icon-clock');\n clock.appendChild(use);\n read.appendChild(clock);\n var readLabel = document.createElement('span');\n readLabel.textContent = item.read_time;\n read.appendChild(readLabel);\n meta.appendChild(read);\n }\n link.appendChild(meta);\n card.appendChild(link);\n return card;\n }\n function renderSearchResultsView() {\n if (!resultsRoot || !resultsList || !resultsEmpty || !resultsSummary || !resultsReset) {\n return;\n }\n var filtered = filterResultsByCategory(currentSearchResults, activeResultsFilter);\n updateResultsFilters(currentSearchResults);\n resultsList.innerHTML = '';\n resultsSummary.textContent = 'По запросу «' + currentSearchQuery + '» найдено ' + formatMaterialsCount(currentSearchResults.length);\n if (currentSearchResults.length === 0) {\n resultsEmpty.hidden = false;\n resultsList.hidden = true;\n resultsReset.hidden = true;\n return;\n }\n if (filtered.length === 0) {\n resultsEmpty.hidden = false;\n resultsList.hidden = true;\n resultsReset.hidden = true;\n return;\n }\n filtered.forEach(function (item, index) {\n var card = renderResultCard(item);\n if (index >= resultsVisibleLimit) {\n card.hidden = true;\n }\n resultsList.appendChild(card);\n });\n resultsEmpty.hidden = true;\n resultsList.hidden = false;\n resultsReset.hidden = filtered.length <= resultsVisibleLimit;\n }\n function applySearchState(query, options) {\n var opts = options || {};\n var trimmed = (query || '').trim();\n var isSearchState = trimmed !== '';\n if (searchInput && opts.syncInput !== false) {\n searchInput.value = trimmed;\n }\n if (!isSearchState) {\n currentSearchQuery = '';\n currentSearchResults = [];\n activeResultsFilter = 'all';\n root.classList.remove('knowledge-v1--search');\n setBrowseVisible(true);\n if (resultsRoot) {\n resultsRoot.hidden = true;\n }\n if (opts.syncUrl !== false) {\n updateSearchUrl('');\n }\n return;\n }\n currentSearchQuery = trimmed;\n currentSearchResults = filterSearchIndex(trimmed);\n activeResultsFilter = 'all';\n resultsVisibleLimit = resultsPageSize;\n root.classList.add('knowledge-v1--search');\n setBrowseVisible(false);\n if (resultsRoot) {\n resultsRoot.hidden = false;\n }\n renderSearchResultsView();\n if (opts.syncUrl !== false) {\n updateSearchUrl(trimmed);\n }\n }\n if (resultsFilters) {\n resultsFilters.addEventListener('click', function (event) {\n var button = event.target.closest('[data-knowledge-v1-results-filter]');\n if (!button || button.hidden) {\n return;\n }\n activeResultsFilter = button.getAttribute('data-knowledge-v1-results-filter') || 'all';\n resultsVisibleLimit = resultsPageSize;\n button.classList.add('is-pressed');\n window.setTimeout(function () {\n button.classList.remove('is-pressed');\n }, 160);\n renderSearchResultsView();\n });\n }\n if (form) {\n var action = (form.getAttribute('action') || '').trim();\n var isStubAction = action === '' || action === '#';\n form.addEventListener('submit', function (event) {\n if (!isClientSearch && !isStubAction) {\n return;\n }\n event.preventDefault();\n applySearchState(searchInput ? searchInput.value : '');\n });\n }\n if (resultsReset) {\n resultsReset.addEventListener('click', function () {\n resultsVisibleLimit += resultsPageSize;\n renderSearchResultsView();\n });\n }\n if (isClientSearch) {\n var initialQuery = readSearchQueryFromUrl();\n if (initialQuery) {\n applySearchState(initialQuery, { syncUrl: false });\n }\n }\n var alphabet = root.querySelector('[data-knowledge-v1-alphabet]');\n if (alphabet) {\n var letterButtons = Array.prototype.slice.call(\n alphabet.querySelectorAll('[data-knowledge-v1-alphabet-letter]')\n );\n var letterPanels = Array.prototype.slice.call(\n alphabet.querySelectorAll('[data-knowledge-v1-alphabet-panel]')\n );\n function activateAlphabetLetter(letter) {\n if (!letter) return;\n letterButtons.forEach(function (button) {\n var isActive = button.getAttribute('data-knowledge-v1-alphabet-letter') === letter;\n button.classList.toggle('is-active', isActive);\n button.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n letterPanels.forEach(function (panel) {\n var isActive = panel.getAttribute('data-knowledge-v1-alphabet-panel') === letter;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n });\n }\n alphabet.addEventListener('click', function (event) {\n var button = event.target.closest('[data-knowledge-v1-alphabet-letter]');\n if (!button || button.disabled || !alphabet.contains(button)) return;\n activateAlphabetLetter(button.getAttribute('data-knowledge-v1-alphabet-letter') || '');\n });\n }\n var catalog = root.querySelector('[data-knowledge-v1-catalog]');\n var catalogItems = catalog\n ? Array.prototype.slice.call(root.querySelectorAll('.knowledge-v1__catalog-item'))\n : [];\n function shouldAnimate() {\n return !reduceMotionMq.matches;\n }\n function closeCatalogItem(item, animate) {\n var trigger = item.querySelector('[data-knowledge-v1-catalog-trigger]');\n var panel = item.querySelector('.knowledge-v1__catalog-panel');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n if (!shouldAnimate() || animate === false) {\n panel.hidden = true;\n return;\n }\n void panel.offsetHeight;\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, panelMotionMs + 20);\n }\n function openCatalogItem(item) {\n var trigger = item.querySelector('[data-knowledge-v1-catalog-trigger]');\n var panel = item.querySelector('.knowledge-v1__catalog-panel');\n if (!panel) return;\n panel.hidden = false;\n if (shouldAnimate()) {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n });\n return;\n }\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n }\n function openCatalogByTopicId(topicId) {\n if (!topicId) return;\n var item = root.querySelector('[data-knowledge-v1-catalog-id=\"' + topicId + '\"]');\n if (!item) return;\n catalogItems.forEach(function (entry) {\n if (entry !== item) closeCatalogItem(entry, false);\n });\n openCatalogItem(item);\n }\n if (catalog) {\n root.addEventListener('click', function (event) {\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('[data-knowledge-v1-catalog-trigger]');\n if (!trigger || !root.contains(trigger)) return;\n var item = trigger.closest('.knowledge-v1__catalog-item');\n if (!item) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeCatalogItem(item, true);\n return;\n }\n catalogItems.forEach(function (entry) {\n if (entry !== item) closeCatalogItem(entry, false);\n });\n openCatalogItem(item);\n });\n root.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('[data-knowledge-v1-catalog-trigger]');\n if (!trigger || !root.contains(trigger)) return;\n event.preventDefault();\n trigger.click();\n });\n root.addEventListener('knowledge-v1:open-topic', function (event) {\n var topicId = event.detail && event.detail.topicId;\n if (!topicId && event.target && event.target.getAttribute) {\n topicId = event.target.getAttribute('data-knowledge-v1-catalog-id') || '';\n }\n openCatalogByTopicId(topicId);\n });\n }\n root.querySelectorAll('[data-knowledge-v1-topic]').forEach(function (link) {\n link.addEventListener('click', function (event) {\n var href = (link.getAttribute('href') || '').trim();\n if (href === '' || href.charAt(0) !== '#') return;\n var target = document.querySelector(href);\n if (!target) return;\n event.preventDefault();\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n target.dispatchEvent(new CustomEvent('knowledge-v1:open-topic', {\n bubbles: true,\n detail: { topicId: link.getAttribute('data-knowledge-v1-topic') || '' },\n }));\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-10');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v1').forEach(function (root) {\n if (root.dataset.newsV1Ready === 'true') return;\n root.dataset.newsV1Ready = 'true';\n var sliderEl = root.querySelector('.news-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.news-v1__pagination');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function destroySlider() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function initSlider() {\n if (!mobileMq.matches || swiperInstance) return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n });\n }\n function syncSliderMode() {\n if (mobileMq.matches) {\n initSlider();\n } else {\n destroySlider();\n }\n }\n function bootSwiper() {\n syncSliderMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncSliderMode);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncSliderMode);\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-12');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-6');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-5');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v5').forEach(function (root) {\n if (root.dataset.reviewsV5Ready === 'true') return;\n root.dataset.reviewsV5Ready = 'true';\n function syncMoreButton() {\n var moreWrap = root.querySelector('.reviews-v5__more-wrap');\n var moreBtn = root.querySelector('[data-reviews-v5-more]');\n if (!moreWrap || !moreBtn) return;\n var hasCollapsed = root.querySelector('[data-reviews-v5-item]:not([hidden]).is-collapsed') !== null;\n var hasMore = root.dataset.reviewsV5HasMore === '1';\n moreWrap.hidden = !hasCollapsed && !hasMore;\n moreBtn.hidden = !hasCollapsed && !hasMore;\n }\n function getActiveFilters() {\n var filters = {};\n if (!filterForm) return filters;\n filterForm.querySelectorAll('[data-reviews-v5-filter]').forEach(function (select) {\n var key = select.dataset.reviewsV5Filter;\n if (!key) return;\n filters[key] = select.value || 'all';\n });\n return filters;\n }\n function itemMatchesFilters(item, filters) {\n if (filters.source && filters.source !== 'all' && item.dataset.reviewsV5Source !== filters.source) {\n return false;\n }\n if (filters.service && filters.service !== 'all' && item.dataset.reviewsV5Service !== filters.service) {\n return false;\n }\n if (filters.doctor && filters.doctor !== 'all' && item.dataset.reviewsV5Doctor !== filters.doctor) {\n return false;\n }\n if (filters.rating && filters.rating !== 'all' && String(item.dataset.reviewsV5Rating) !== filters.rating) {\n return false;\n }\n return true;\n }\n function applyClientPagination() {\n var limit = parseInt(root.dataset.reviewsV5Limit, 10) || 6;\n var visibleIndex = 0;\n root.querySelectorAll('[data-reviews-v5-item]').forEach(function (item) {\n if (item.hidden) {\n item.classList.remove('is-collapsed');\n return;\n }\n if (visibleIndex >= limit) {\n item.classList.add('is-collapsed');\n } else {\n item.classList.remove('is-collapsed');\n var card = item.querySelector('.reviews-v5__card');\n if (card) updateCardOverflow(card);\n }\n visibleIndex += 1;\n });\n var totalVisible = root.querySelectorAll('[data-reviews-v5-item]:not([hidden])').length;\n root.dataset.reviewsV5Total = String(totalVisible);\n root.dataset.reviewsV5HasMore = totalVisible > limit ? '1' : '0';\n }\n function applyClientFilters() {\n var filters = getActiveFilters();\n var emptyState = root.querySelector('[data-reviews-v5-empty]');\n var list = root.querySelector('[data-reviews-v5-list]');\n var matched = 0;\n root.querySelectorAll('[data-reviews-v5-item]').forEach(function (item) {\n var isMatch = itemMatchesFilters(item, filters);\n item.hidden = !isMatch;\n if (isMatch) matched += 1;\n });\n if (emptyState) {\n emptyState.hidden = matched > 0;\n }\n if (list) {\n list.hidden = matched === 0;\n }\n root.dataset.reviewsV5Page = '1';\n var pageField = root.querySelector('[data-reviews-v5-page-field]');\n if (pageField) pageField.value = '1';\n applyClientPagination();\n syncMoreButton();\n }\n function updateCardOverflow(card) {\n var quote = card.querySelector('.reviews-v5__quote');\n var readMore = card.querySelector('[data-reviews-v5-read-full]');\n if (!quote || !readMore) return;\n card.classList.remove('is-overflow');\n readMore.hidden = true;\n quote.style.removeProperty('-webkit-line-clamp');\n if (quote.scrollHeight <= quote.clientHeight + 1) {\n return;\n }\n card.classList.add('is-overflow');\n readMore.hidden = false;\n }\n root.querySelectorAll('.reviews-v5__card').forEach(updateCardOverflow);\n syncMoreButton();\n var filtersPanel = root.querySelector('[data-reviews-v5-filters-panel]');\n var filtersToggle = root.querySelector('[data-reviews-v5-filters-toggle]');\n var mobileFiltersQuery = window.matchMedia('(max-width: 1200px)');\n function syncFiltersPanelState() {\n if (!filtersPanel || !filtersToggle) return;\n if (!mobileFiltersQuery.matches) {\n filtersPanel.classList.remove('is-collapsed');\n filtersToggle.setAttribute('aria-expanded', 'true');\n return;\n }\n var isCollapsed = filtersPanel.classList.contains('is-collapsed');\n filtersToggle.setAttribute('aria-expanded', isCollapsed ? 'false' : 'true');\n }\n if (filtersPanel && filtersToggle) {\n syncFiltersPanelState();\n filtersToggle.addEventListener('click', function () {\n if (!mobileFiltersQuery.matches) return;\n var willCollapse = !filtersPanel.classList.contains('is-collapsed');\n filtersPanel.classList.toggle('is-collapsed', willCollapse);\n filtersToggle.setAttribute('aria-expanded', willCollapse ? 'false' : 'true');\n });\n if (typeof mobileFiltersQuery.addEventListener === 'function') {\n mobileFiltersQuery.addEventListener('change', syncFiltersPanelState);\n } else if (typeof mobileFiltersQuery.addListener === 'function') {\n mobileFiltersQuery.addListener(syncFiltersPanelState);\n }\n }\n root.addEventListener('click', function (event) {\n var readBtn = event.target.closest('[data-reviews-v5-read-full]');\n if (readBtn && root.contains(readBtn)) {\n event.preventDefault();\n var card = readBtn.closest('.reviews-v5__card');\n var template = card ? card.querySelector('.reviews-v5__full-template') : null;\n var quote = card ? card.querySelector('.reviews-v5__quote') : null;\n if (!template || !quote || !window.Popup) return;\n var content = template.content.cloneNode(true);\n var quoteSlot = content.querySelector('[data-reviews-v5-popup-quote]');\n if (!quoteSlot) return;\n var popupQuote = quote.cloneNode(true);\n popupQuote.className = 'popup__review-text';\n popupQuote.style.removeProperty('-webkit-line-clamp');\n quoteSlot.appendChild(popupQuote);\n var popupContent = document.createElement('div');\n popupContent.appendChild(content);\n window.Popup.open('review', { html: popupContent.innerHTML });\n return;\n }\n var moreBtn = event.target.closest('[data-reviews-v5-more]');\n if (moreBtn && root.contains(moreBtn)) {\n root.querySelectorAll('[data-reviews-v5-item]:not([hidden]).is-collapsed').forEach(function (item) {\n item.classList.remove('is-collapsed');\n var card = item.querySelector('.reviews-v5__card');\n if (card) updateCardOverflow(card);\n });\n syncMoreButton();\n }\n });\n var filterForm = root.querySelector('[data-reviews-v5-filters-form]');\n var filterMode = root.dataset.reviewsV5Mode || 'client';\n if (filterForm) {\n filterForm.addEventListener('change', function () {\n var submit = root.querySelector('[data-reviews-v5-filter-submit]');\n if (!submit || filterMode !== 'client') return;\n var hasValue = false;\n filterForm.querySelectorAll('[data-reviews-v5-filter]').forEach(function (select) {\n if (select.value && select.value !== 'all') {\n hasValue = true;\n }\n });\n submit.disabled = !hasValue;\n });\n filterForm.addEventListener('submit', function (event) {\n if (filterMode === 'client') {\n event.preventDefault();\n applyClientFilters();\n return;\n }\n var apiUrl = root.dataset.reviewsV5ApiUrl;\n if (apiUrl) {\n event.preventDefault();\n }\n });\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-9');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('progression-stages\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('education\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-1');\n})();\n(function () {\n document.querySelectorAll('[data-header-root]').forEach(function (root) {\n var toggle = root.querySelector('[data-header-toggle]');\n var panel = root.querySelector('[data-header-panel]');\n var navWrap = root.querySelector('.site-header__nav-wrap');\n if (!toggle || !panel) {\n return;\n }\n var navTopY = null;\n var lastSticky = null;\n var setHeaderHeight = function () {\n var topEl = root.querySelector('.site-header__top');\n var topH = topEl ? (topEl.offsetHeight || 0) : 0;\n var isMobile = window.innerWidth <= 1280;\n var h = isMobile ? topH : (root.offsetHeight || topH || 0);\n document.documentElement.style.setProperty('--site-header-h', h + 'px');\n document.documentElement.style.setProperty('--site-header-top-h', topH + 'px');\n if (navWrap) {\n var navH = navWrap.offsetHeight || 0;\n document.documentElement.style.setProperty('--site-nav-h', navH + 'px');\n var isNavFixed = document.documentElement.classList.contains('is-nav-fixed');\n var stickyOffset = 0;\n if (isMobile) {\n stickyOffset = topH;\n } else if (isNavFixed) {\n stickyOffset = navH;\n }\n document.documentElement.style.setProperty('--site-sticky-offset', stickyOffset + 'px');\n if (window.scrollY <= 0) {\n document.documentElement.classList.remove('is-nav-fixed');\n lastSticky = false;\n }\n if (!document.documentElement.classList.contains('is-nav-fixed')) {\n navTopY = navWrap.getBoundingClientRect().top + window.scrollY;\n }\n }\n root.querySelectorAll('.site-header__mega-pointer, .site-header__wide-default-pointer, .site-header__dropdown-pointer').forEach(function (pointer) {\n if (isMobile) {\n pointer.style.setProperty('display', 'none', 'important');\n } else {\n pointer.style.removeProperty('display');\n pointer.style.display = 'block';\n }\n });\n if (isMobile) {\n var stickyMenuEl = root.classList.contains('is-menu-open')\n ? root.querySelector('.site-header__shell > .container')\n : null;\n var stickyMenuH = stickyMenuEl ? stickyMenuEl.offsetHeight : topH;\n document.documentElement.style.setProperty('--site-mobile-menu-sticky-h', stickyMenuH + 'px');\n }\n };\n var closeMenu = function () {\n root.classList.remove('is-menu-open');\n document.documentElement.classList.remove('is-menu-open');\n toggle.setAttribute('aria-expanded', 'false');\n toggle.setAttribute('aria-label', 'Открыть меню');\n setHeaderHeight();\n };\n var openMenu = function () {\n root.classList.add('is-menu-open');\n document.documentElement.classList.add('is-menu-open');\n toggle.setAttribute('aria-expanded', 'true');\n toggle.setAttribute('aria-label', 'Закрыть меню');\n setHeaderHeight();\n };\n toggle.addEventListener('click', function () {\n if (root.classList.contains('is-menu-open')) {\n closeMenu();\n } else {\n openMenu();\n }\n });\n var dropdownItems = root.querySelectorAll('[data-dropdown]');\n var positionDropdownPointer = function (trigger, referenceEl, pointer) {\n if (window.innerWidth <= 1280) {\n pointer.style.setProperty('display', 'none', 'important');\n return;\n }\n var triggerRect = trigger.getBoundingClientRect();\n var referenceRect = referenceEl.getBoundingClientRect();\n var pointerHalf = 18.5;\n var pointerLeft = triggerRect.left + (triggerRect.width \/ 2) - referenceRect.left;\n var minLeft = pointerHalf + 8;\n var maxLeft = referenceRect.width - pointerHalf - 8;\n pointer.style.removeProperty('display');\n pointer.style.display = 'block';\n pointer.style.left = Math.max(minLeft, Math.min(maxLeft, pointerLeft)) + 'px';\n };\n var syncMegaPointer = function (dropdownItem) {\n if (!dropdownItem) {\n return;\n }\n var trigger = dropdownItem.querySelector('[data-dropdown-toggle]');\n if (!trigger) {\n return;\n }\n var megaDropdown = dropdownItem.querySelector('.site-header__dropdown--mega, .site-header__dropdown--wide-default');\n if (megaDropdown) {\n var container = megaDropdown.querySelector('.container');\n var megaPointer = megaDropdown.querySelector('.site-header__mega-pointer, .site-header__wide-default-pointer');\n if (container && megaPointer) {\n positionDropdownPointer(trigger, container, megaPointer);\n }\n }\n var smallDropdown = dropdownItem.querySelector('.site-header__dropdown--small');\n if (smallDropdown) {\n var smallPointer = smallDropdown.querySelector('.site-header__dropdown-pointer');\n if (smallPointer) {\n positionDropdownPointer(trigger, smallDropdown, smallPointer);\n }\n }\n };\n var closeAllDropdowns = function () {\n dropdownItems.forEach(function (li) {\n li.classList.remove('is-open');\n var btn = li.querySelector('[data-dropdown-toggle]');\n if (btn) btn.setAttribute('aria-expanded', 'false');\n });\n };\n dropdownItems.forEach(function (li) {\n var btn = li.querySelector('[data-dropdown-toggle]');\n if (!btn) return;\n btn.addEventListener('click', function (e) {\n e.preventDefault();\n var isOpen = li.classList.contains('is-open');\n closeAllDropdowns();\n if (!isOpen) {\n li.classList.add('is-open');\n btn.setAttribute('aria-expanded', 'true');\n if (window.innerWidth <= 1280) {\n var megaMenu = li.querySelector('[data-mega-menu]');\n collapseMegaMenuMobile(megaMenu);\n setHeaderHeight();\n scrollMobileMenuIntoView(btn);\n }\n syncMegaPointer(li);\n window.requestAnimationFrame(function () {\n syncMegaPointer(li);\n });\n }\n });\n });\n root.querySelectorAll('[data-dropdown-close]').forEach(function (btn) {\n btn.addEventListener('click', function () {\n closeAllDropdowns();\n var toggleBtn = root.querySelector('[data-dropdown-toggle][aria-expanded=\"true\"]');\n if (toggleBtn) {\n toggleBtn.focus();\n }\n });\n });\n var megaMenus = root.querySelectorAll('[data-mega-menu]');\n var syncMegaPanelMount = function () {\n var isDesktop = window.innerWidth > 1280;\n megaMenus.forEach(function (menu) {\n var host = menu.querySelector('[data-mega-panels-host]');\n if (!host) {\n return;\n }\n host.hidden = !isDesktop;\n host.setAttribute('aria-hidden', isDesktop ? 'false' : 'true');\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (block) {\n var button = block.querySelector('[data-mega-category]');\n if (!button) {\n return;\n }\n var panelId = button.getAttribute('aria-controls');\n if (!panelId) {\n return;\n }\n var panel = menu.querySelector('#' + panelId);\n if (!panel) {\n return;\n }\n if (isDesktop) {\n if (panel.parentElement !== host) {\n host.appendChild(panel);\n }\n } else if (panel.parentElement !== block) {\n block.appendChild(panel);\n }\n });\n });\n };\n var setMegaCategory = function (menu, nextButton) {\n if (!menu || !nextButton) {\n return;\n }\n var nextPanelId = nextButton.getAttribute('aria-controls');\n if (!nextPanelId) {\n return;\n }\n menu.querySelectorAll('[data-mega-category]').forEach(function (button) {\n var isActive = button === nextButton;\n button.classList.toggle('is-active', isActive);\n button.setAttribute('aria-selected', isActive ? 'true' : 'false');\n button.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (block) {\n var blockButton = block.querySelector('[data-mega-category]');\n block.classList.toggle('is-open', blockButton === nextButton);\n });\n menu.querySelectorAll('[data-mega-panel]').forEach(function (panelEl) {\n var isActive = panelEl.id === nextPanelId;\n panelEl.classList.toggle('is-active', isActive);\n panelEl.hidden = !isActive;\n });\n if (window.innerWidth <= 1280) {\n setHeaderHeight();\n }\n };\n var collapseMegaMenuMobile = function (menu) {\n if (!menu) {\n return;\n }\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (block) {\n block.classList.remove('is-open');\n });\n menu.querySelectorAll('[data-mega-category]').forEach(function (btn) {\n btn.classList.remove('is-active');\n btn.setAttribute('aria-selected', 'false');\n btn.setAttribute('aria-expanded', 'false');\n });\n menu.querySelectorAll('[data-mega-panel]').forEach(function (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n });\n };\n var mobileMenuScrollAnim = null;\n var scrollMobileMenuIntoView = function (targetEl) {\n if (!targetEl || window.innerWidth > 1280 || !root.classList.contains('is-menu-open')) {\n return;\n }\n var stickyEl = root.querySelector('.site-header__shell > .container');\n var run = function () {\n var scrollRect = root.getBoundingClientRect();\n var targetRect = targetEl.getBoundingClientRect();\n var marginTop = 8;\n var marginBottom = 24;\n var stickyBottom = stickyEl\n ? stickyEl.getBoundingClientRect().bottom\n : scrollRect.top + (parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--site-header-top-h')) || 0);\n var viewTop = stickyBottom + marginTop;\n var viewBottom = scrollRect.bottom - marginBottom;\n var delta = 0;\n if (targetRect.top < viewTop) {\n delta = targetRect.top - viewTop;\n } else if (targetRect.bottom > viewBottom) {\n delta = targetRect.bottom - viewBottom;\n if (targetRect.top - delta < viewTop) {\n delta = targetRect.top - viewTop;\n }\n }\n if (delta === 0) {\n return;\n }\n if (mobileMenuScrollAnim !== null) {\n window.cancelAnimationFrame(mobileMenuScrollAnim);\n mobileMenuScrollAnim = null;\n }\n var startTop = root.scrollTop;\n var distance = Math.abs(delta);\n var duration = Math.min(560, Math.max(380, distance * 0.55));\n var startTime = null;\n var easeInOutCubic = function (t) {\n return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) \/ 2;\n };\n var step = function (timestamp) {\n if (startTime === null) {\n startTime = timestamp;\n }\n var progress = Math.min(1, (timestamp - startTime) \/ duration);\n root.scrollTop = startTop + delta * easeInOutCubic(progress);\n if (progress < 1) {\n mobileMenuScrollAnim = window.requestAnimationFrame(step);\n } else {\n mobileMenuScrollAnim = null;\n }\n };\n mobileMenuScrollAnim = window.requestAnimationFrame(step);\n };\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(run);\n });\n };\n var resetMegaCategories = function () {\n syncMegaPanelMount();\n megaMenus.forEach(function (menu) {\n if (window.innerWidth <= 1280) {\n collapseMegaMenuMobile(menu);\n return;\n }\n var defaultButton = menu.querySelector('[data-mega-category].is-active') || menu.querySelector('[data-mega-category]');\n if (defaultButton) {\n setMegaCategory(menu, defaultButton);\n }\n });\n };\n megaMenus.forEach(function (menu) {\n menu.querySelectorAll('[data-mega-category]').forEach(function (button) {\n button.addEventListener('mouseenter', function () {\n if (window.innerWidth > 1280) {\n setMegaCategory(menu, button);\n }\n });\n button.addEventListener('focus', function () {\n if (window.innerWidth > 1280) {\n setMegaCategory(menu, button);\n }\n });\n button.addEventListener('click', function (e) {\n e.preventDefault();\n if (window.innerWidth <= 1280) {\n var block = button.closest('[data-mega-category-block]');\n if (!block) {\n return;\n }\n var willOpen = !block.classList.contains('is-open');\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (itemBlock) {\n itemBlock.classList.remove('is-open');\n });\n menu.querySelectorAll('[data-mega-category]').forEach(function (categoryButton) {\n categoryButton.classList.remove('is-active');\n categoryButton.setAttribute('aria-selected', 'false');\n categoryButton.setAttribute('aria-expanded', 'false');\n });\n menu.querySelectorAll('[data-mega-panel]').forEach(function (panelEl) {\n panelEl.classList.remove('is-active');\n panelEl.hidden = true;\n });\n if (willOpen) {\n setMegaCategory(menu, button);\n }\n setHeaderHeight();\n if (willOpen) {\n scrollMobileMenuIntoView(block);\n }\n return;\n }\n setMegaCategory(menu, button);\n });\n });\n });\n resetMegaCategories();\n document.addEventListener('click', function (e) {\n if (!root.contains(e.target)) return;\n var insideDropdown = e.target.closest('[data-dropdown]');\n if (!insideDropdown) {\n closeAllDropdowns();\n }\n });\n panel.querySelectorAll('a').forEach(function (link) {\n link.addEventListener('click', function () {\n if (window.innerWidth <= 1280) {\n closeMenu();\n }\n });\n });\n var onScroll = function () {\n if (window.innerWidth <= 1280 || !navWrap || navTopY === null) {\n if (document.documentElement.classList.contains('is-nav-fixed')) {\n document.documentElement.classList.remove('is-nav-fixed');\n }\n return;\n }\n var isFixed = document.documentElement.classList.contains('is-nav-fixed');\n if (!isFixed) {\n navTopY = navWrap.getBoundingClientRect().top + window.scrollY;\n }\n if (!isFixed) {\n var shouldFix = window.scrollY > 0 && navWrap.getBoundingClientRect().top <= 0;\n if (shouldFix && shouldFix !== lastSticky) {\n document.documentElement.classList.add('is-nav-fixed');\n lastSticky = true;\n setHeaderHeight();\n }\n return;\n }\n var shouldUnfix =\n window.scrollY <= 0 ||\n window.scrollY < (navTopY - 1) ||\n navWrap.getBoundingClientRect().top > 1;\n if (shouldUnfix) {\n document.documentElement.classList.remove('is-nav-fixed');\n lastSticky = false;\n setHeaderHeight();\n }\n };\n var syncNavLayout = function () {\n setHeaderHeight();\n onScroll();\n };\n var resizeFrame = null;\n var resizeActionsPending = false;\n function scheduleNavLayout(runResizeActions) {\n if (runResizeActions) resizeActionsPending = true;\n if (resizeFrame !== null) return;\n resizeFrame = window.requestAnimationFrame(function () {\n resizeFrame = null;\n syncNavLayout();\n if (resizeActionsPending) {\n resizeActionsPending = false;\n if (window.innerWidth > 1280) {\n closeMenu();\n }\n closeAllDropdowns();\n resetMegaCategories();\n }\n root.querySelectorAll('.site-header__menu-item.is-open').forEach(function (item) {\n syncMegaPointer(item);\n });\n });\n }\n window.addEventListener('resize', function () {\n scheduleNavLayout(true);\n });\n document.addEventListener('keydown', function (event) {\n if (event.key === 'Escape') {\n closeMenu();\n closeAllDropdowns();\n resetMegaCategories();\n }\n });\n var logoImg = root.querySelector('.site-header__logo');\n if (logoImg && !logoImg.complete) {\n logoImg.addEventListener('load', syncNavLayout, { once: true });\n }\n window.addEventListener('load', syncNavLayout, { once: true });\n window.addEventListener('pageshow', syncNavLayout);\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(syncNavLayout);\n }\n if (window.ResizeObserver && navWrap) {\n var headerTopEl = root.querySelector('.site-header__top');\n var headerResizeObserver = new ResizeObserver(function () {\n scheduleNavLayout(false);\n });\n if (headerTopEl) {\n headerResizeObserver.observe(headerTopEl);\n }\n headerResizeObserver.observe(navWrap);\n }\n syncNavLayout();\n window.addEventListener('scroll', onScroll, { passive: true });\n });\n})();\n(function () {\n document.querySelectorAll('[data-back-to-top]').forEach(function (btn) {\n var threshold = 500;\n var update = function () {\n var visible = window.scrollY > threshold;\n btn.hidden = !visible;\n btn.classList.toggle('is-visible', visible);\n };\n btn.addEventListener('click', function () {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n });\n update();\n window.addEventListener('scroll', update, { passive: true });\n });\n})();",
    "script_core": "(function initLazyInit() {\n var DEFAULT_ROOT_MARGIN = '200px 0px';\n function parseRootMarginBottom(rootMargin) {\n var parts = String(rootMargin || DEFAULT_ROOT_MARGIN).trim().split(\/\\s+\/);\n var bottom = parts[2] || parts[0] || '0px';\n var value = parseFloat(bottom);\n if (Number.isNaN(value)) return 0;\n return bottom.indexOf('vh') !== -1 ? (window.innerHeight * value) \/ 100 : value;\n }\n function isInViewport(el, rootMargin) {\n if (!el || !el.getBoundingClientRect) return false;\n var rect = el.getBoundingClientRect();\n var margin = parseRootMarginBottom(rootMargin);\n return rect.top < window.innerHeight + margin && rect.bottom > 0;\n }\n function whenVisible(element, callback, options) {\n options = options || {};\n var rootMargin = options.rootMargin || DEFAULT_ROOT_MARGIN;\n var once = options.once !== false;\n if (!element || typeof callback !== 'function') {\n return function () {};\n }\n if (isInViewport(element, rootMargin)) {\n callback();\n return function () {};\n }\n if (!('IntersectionObserver' in window)) {\n callback();\n return function () {};\n }\n var observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (!entry.isIntersecting) return;\n callback();\n if (once) observer.unobserve(entry.target);\n });\n }, {\n root: options.root || null,\n rootMargin: rootMargin,\n threshold: options.threshold != null ? options.threshold : 0,\n });\n observer.observe(element);\n return function () {\n observer.unobserve(element);\n };\n }\n window.LazyInit = {\n whenVisible: whenVisible,\n isInViewport: isInViewport,\n };\n})();\nwindow.__LOADED_SECTIONS = window.__LOADED_SECTIONS || [];\n(function initAccessibleWysiwygTables() {\n var tableCounter = 0;\n var resizeObserver = typeof ResizeObserver === 'function'\n ? new ResizeObserver(function (entries) {\n entries.forEach(function (entry) {\n syncScrollableRegion(entry.target);\n });\n })\n : null;\n function tableLabel(table) {\n var caption = table.querySelector('caption');\n if (caption && caption.textContent.trim()) return caption.textContent.trim();\n var owner = table.closest('article, section');\n var heading = owner ? owner.querySelector('h1, h2, h3, h4, h5, h6') : null;\n if (heading && heading.textContent.trim()) return heading.textContent.trim();\n tableCounter += 1;\n return tableCounter === 1 ? 'Таблица данных' : 'Таблица данных ' + tableCounter;\n }\n function syncScrollableRegion(wrapper) {\n var isScrollable = wrapper.scrollWidth > wrapper.clientWidth + 1;\n if (isScrollable) {\n wrapper.tabIndex = 0;\n wrapper.setAttribute('role', 'region');\n wrapper.setAttribute('aria-label', wrapper.dataset.tableLabel);\n return;\n }\n wrapper.removeAttribute('tabindex');\n wrapper.removeAttribute('role');\n wrapper.removeAttribute('aria-label');\n }\n function normalizeTableStructure(table) {\n Array.prototype.forEach.call(table.tBodies, function (tbody) {\n if (!tbody.querySelector('th, td') && !tbody.textContent.trim()) tbody.remove();\n });\n var head = table.tHead;\n if (head) {\n Array.prototype.forEach.call(head.querySelectorAll('th:not([scope])'), function (cell) {\n cell.setAttribute('scope', 'col');\n });\n var reference = Array.prototype.find.call(table.children, function (child) {\n return child.tagName !== 'CAPTION' && child.tagName !== 'COLGROUP';\n });\n if (reference && reference !== head) table.insertBefore(head, reference);\n }\n Array.prototype.forEach.call(table.querySelectorAll('tbody th:not([scope])'), function (cell) {\n cell.setAttribute('scope', 'row');\n });\n }\n function enhanceTable(table) {\n if (!table || table.dataset.accessibleTableReady === 'true') return;\n table.dataset.accessibleTableReady = 'true';\n normalizeTableStructure(table);\n var wrapper = document.createElement('div');\n wrapper.className = 'wysiwyg-table-scroll';\n wrapper.dataset.tableLabel = 'Прокручиваемая таблица: ' + tableLabel(table);\n table.parentNode.insertBefore(wrapper, table);\n wrapper.appendChild(table);\n syncScrollableRegion(wrapper);\n if (resizeObserver) resizeObserver.observe(wrapper);\n }\n function enhanceTables(root) {\n if (!root) return;\n if (root.nodeType === 1 && root.matches && root.matches('.wysiwyg table')) enhanceTable(root);\n if (root.querySelectorAll) root.querySelectorAll('.wysiwyg table').forEach(enhanceTable);\n }\n enhanceTables(document);\n if ('MutationObserver' in window && document.body) {\n new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(enhanceTables);\n });\n }).observe(document.body, { childList: true, subtree: true });\n }\n})();\n(function initPopups() {\n var POPUP_CLOSE_MS = 340;\n var activePopup = null; \/\/ текущий .popup[data-popup]\n var lastFocus = null; \/\/ элемент, на который вернуть фокус при закрытии\n var loadingTriggerBtn = null; \/\/ кнопка, открывшая remote-форму\n var LOADING_POPUP_NAME = '__loading';\n var scrollLocked = false;\n var closeTimer = null; \/\/ fallback, если transitionend не сработал\n var hasStableGutter = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('scrollbar-gutter', 'stable');\n var supportsInert = typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\n var FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n function isFocusableElement(el) {\n if (!el || el.disabled || el.getAttribute('aria-hidden') === 'true') return false;\n if (!el.matches(FOCUSABLE_SELECTOR)) return false;\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n }\n function getDialogFocusableElements(dialog) {\n if (!dialog) return [];\n return Array.prototype.filter.call(\n dialog.querySelectorAll(FOCUSABLE_SELECTOR),\n isFocusableElement\n );\n }\n function getInitialFocusTarget(popup) {\n var okBtn = popup.querySelector('.popup-form-result__ok');\n if (okBtn) return okBtn;\n var form = popup.querySelector('form[data-popup-form], form.popup-form');\n if (form) {\n var field = form.querySelector(\n 'input:not([type=\"hidden\"]):not([disabled]), select:not([disabled]), textarea:not([disabled])'\n );\n if (field) return field;\n }\n return popup.querySelector('.popup__close');\n }\n function setPageInert(inert) {\n if (!supportsInert) return;\n var popupsRoot = document.querySelector('.popups, [data-popups-root]');\n Array.prototype.forEach.call(document.body.children, function (child) {\n if (popupsRoot && child === popupsRoot) return;\n child.inert = inert;\n });\n }\n function handlePopupKeydown(event) {\n if (!activePopup) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n closePopup();\n return;\n }\n if (event.key !== 'Tab') return;\n var dialog = activePopup.querySelector('.popup__dialog');\n if (!dialog) return;\n var focusable = getDialogFocusableElements(dialog);\n if (!focusable.length) {\n event.preventDefault();\n restoreFocus(dialog);\n return;\n }\n var first = focusable[0];\n var last = focusable[focusable.length - 1];\n var active = document.activeElement;\n if (event.shiftKey) {\n if (active === first || !dialog.contains(active)) {\n event.preventDefault();\n restoreFocus(last);\n }\n return;\n }\n if (active === last || !dialog.contains(active)) {\n event.preventDefault();\n restoreFocus(first);\n }\n }\n function getScrollbarWidth() {\n return window.innerWidth - document.documentElement.clientWidth;\n }\n function lockScroll() {\n if (scrollLocked) return;\n scrollLocked = true;\n if (!hasStableGutter) {\n var sbw = getScrollbarWidth();\n if (sbw > 0) {\n document.documentElement.style.setProperty('--popup-scrollbar-width', sbw + 'px');\n document.documentElement.style.paddingRight = 'var(--popup-scrollbar-width)';\n }\n }\n document.documentElement.classList.add('is-popup-open');\n setPageInert(true);\n }\n function unlockScroll() {\n if (!scrollLocked) return;\n document.documentElement.classList.remove('is-popup-open');\n if (!hasStableGutter) {\n document.documentElement.style.paddingRight = '';\n document.documentElement.style.removeProperty('--popup-scrollbar-width');\n }\n scrollLocked = false;\n setPageInert(false);\n }\n function restoreFocus(target) {\n if (target && typeof target.focus === 'function') {\n target.focus({ preventScroll: true });\n }\n }\n function clearCloseTimer() {\n if (closeTimer) {\n clearTimeout(closeTimer);\n closeTimer = null;\n }\n }\n function findPopup(name) {\n return document.querySelector('.popup[data-popup=\"' + name + '\"]');\n }\n function getFormsFragmentUrl(customUrl) {\n if (customUrl) return customUrl;\n var url = new URL(window.location.href);\n url.searchParams.set('form', '1');\n return url.toString();\n }\n function ensurePopupsRoot() {\n var root = document.querySelector('.popups');\n if (!root) {\n root = document.createElement('div');\n root.className = 'popups';\n root.setAttribute('aria-live', 'polite');\n root.setAttribute('data-popups-root', '');\n document.body.appendChild(root);\n }\n return root;\n }\n function mountPopupNode(popupNode) {\n var name = popupNode.getAttribute('data-popup');\n var root = ensurePopupsRoot();\n var existing = root.querySelector('.popup[data-popup=\"' + name + '\"]');\n if (existing) {\n existing.replaceWith(popupNode);\n } else {\n root.appendChild(popupNode);\n }\n if (window.FormUi) window.FormUi.init(popupNode);\n return popupNode;\n }\n function clearPopupLoadingTrigger() {\n if (!loadingTriggerBtn) return;\n loadingTriggerBtn.removeAttribute('aria-busy');\n delete loadingTriggerBtn.dataset.popupLoading;\n loadingTriggerBtn = null;\n }\n function ensureLoadingPopup() {\n var root = ensurePopupsRoot();\n var popup = root.querySelector('.popup[data-popup=\"' + LOADING_POPUP_NAME + '\"]');\n if (popup) return popup;\n popup = document.createElement('div');\n popup.className = 'popup popup--form-loading';\n popup.setAttribute('data-popup', LOADING_POPUP_NAME);\n popup.setAttribute('role', 'presentation');\n popup.setAttribute('aria-busy', 'true');\n popup.hidden = true;\n popup.innerHTML =\n '<div class=\"popup-form-loading\" data-popup-close role=\"status\" aria-live=\"polite\" aria-label=\"Загрузка формы\">' +\n '<span class=\"ui-preloader\" aria-hidden=\"true\"><\/span>' +\n '<\/div>';\n root.appendChild(popup);\n return popup;\n }\n function openPopupLoading(triggerBtn) {\n closePopup(true);\n var popup = ensureLoadingPopup();\n if (triggerBtn) {\n loadingTriggerBtn = triggerBtn;\n triggerBtn.setAttribute('aria-busy', 'true');\n triggerBtn.dataset.popupLoading = '1';\n }\n lockScroll();\n lastFocus = document.activeElement;\n popup.hidden = false;\n activePopup = popup;\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n if (activePopup !== popup) return;\n popup.classList.add('is-open');\n });\n });\n }\n function closePopupLoading() {\n var popup = document.querySelector('.popup[data-popup=\"' + LOADING_POPUP_NAME + '\"]');\n clearPopupLoadingTrigger();\n if (!popup || popup.hidden) return;\n if (activePopup === popup) {\n activePopup = null;\n lastFocus = null;\n }\n popup.classList.remove('is-open');\n popup.hidden = true;\n popup.removeAttribute('aria-busy');\n unlockScroll();\n }\n function fetchAndMountPopup(name, url, options) {\n options = options || {};\n return fetch(url, {\n credentials: 'same-origin',\n headers: { Accept: 'text\/html' },\n signal: options.signal,\n })\n .then(function (res) {\n if (!res.ok) throw new Error('HTTP ' + res.status);\n return res.text();\n })\n .then(function (html) {\n var doc = new DOMParser().parseFromString(html, 'text\/html');\n var popup = doc.querySelector('.popup[data-popup=\"' + name + '\"]');\n if (!popup) throw new Error('popup \"' + name + '\" not found in fragment');\n return mountPopupNode(document.importNode(popup, true));\n });\n }\n function renderMedia(slot, options) {\n slot.innerHTML = '';\n var src = options.src || '';\n var kind = options.kind || 'image';\n if (!src) return;\n if (kind === 'video') {\n if (\/youtube\\.com|youtu\\.be|vimeo\\.com\/.test(src)) {\n var iframe = document.createElement('iframe');\n iframe.src = src;\n iframe.title = options.title || 'Видео';\n iframe.allow = 'autoplay; fullscreen; picture-in-picture';\n iframe.allowFullscreen = true;\n slot.appendChild(iframe);\n return;\n }\n var video = document.createElement('video');\n video.src = src;\n video.controls = true;\n video.autoplay = true;\n video.playsInline = true;\n if (options.poster) video.poster = options.poster;\n slot.appendChild(video);\n var playPromise = video.play();\n if (playPromise && typeof playPromise.catch === 'function') {\n playPromise.catch(function () {\n video.muted = true;\n video.play();\n });\n }\n return;\n }\n var img = document.createElement('img');\n img.src = src;\n img.alt = options.alt || '';\n slot.appendChild(img);\n }\n function renderStarsRating(rating, size) {\n size = size || 'sm';\n rating = Math.max(0, Math.min(5, parseFloat(rating) || 0));\n var wrap = document.createElement('span');\n wrap.className = 'stars-rating stars-rating--' + size;\n wrap.style.setProperty('--stars-rating-value', String(rating));\n wrap.setAttribute('aria-hidden', 'true');\n ['empty', 'fill'].forEach(function (layer) {\n var layerEl = document.createElement('span');\n layerEl.className = 'stars-rating__layer stars-rating__layer--' + layer;\n for (var i = 0; i < 5; i++) {\n var svg = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n svg.setAttribute('class', 'icon stars-rating__icon');\n svg.setAttribute('aria-hidden', 'true');\n var use = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n use.setAttribute('href', '#icon-star');\n svg.appendChild(use);\n layerEl.appendChild(svg);\n }\n wrap.appendChild(layerEl);\n });\n return wrap;\n }\n function renderMediaMeta(popup, options) {\n var meta = popup.querySelector('[data-popup-media-meta]');\n if (!meta) return;\n var author = options.author || '';\n var service = options.service || '';\n var rating = Math.max(0, Math.min(5, parseFloat(options.rating) || 0));\n var authorEl = meta.querySelector('[data-popup-media-author]');\n var starsEl = meta.querySelector('[data-popup-media-stars]');\n var serviceRow = meta.querySelector('[data-popup-media-service]');\n var serviceValueEl = meta.querySelector('[data-popup-media-service-value]');\n if (!author && !service && !rating) {\n meta.hidden = true;\n if (authorEl) authorEl.textContent = '';\n if (starsEl) starsEl.innerHTML = '';\n if (serviceRow) serviceRow.hidden = true;\n if (serviceValueEl) serviceValueEl.textContent = '';\n return;\n }\n meta.hidden = false;\n if (authorEl) {\n authorEl.textContent = author;\n authorEl.hidden = !author;\n }\n if (starsEl) {\n starsEl.innerHTML = '';\n if (rating > 0) {\n starsEl.appendChild(renderStarsRating(rating, 'sm'));\n starsEl.hidden = false;\n } else {\n starsEl.hidden = true;\n }\n }\n if (serviceRow && serviceValueEl) {\n if (service) {\n serviceValueEl.textContent = service;\n serviceRow.hidden = false;\n } else {\n serviceValueEl.textContent = '';\n serviceRow.hidden = true;\n }\n }\n }\n function clearMediaMeta(popup) {\n renderMediaMeta(popup, {});\n }\n function finishClosePopup(popup) {\n if (popup.hidden) return;\n popup.hidden = true;\n popup.classList.remove('is-open');\n if (popup.dataset.popup === 'media') {\n var slot = popup.querySelector('[data-popup-media-slot]');\n if (slot) slot.innerHTML = '';\n clearMediaMeta(popup);\n }\n if (popup.dataset.popup === 'review') {\n var reviewSlot = popup.querySelector('[data-popup-review-slot]');\n if (reviewSlot) reviewSlot.innerHTML = '';\n }\n if (popup.dataset.popup === LOADING_POPUP_NAME) {\n clearPopupLoadingTrigger();\n popup.removeAttribute('aria-busy');\n document.dispatchEvent(new CustomEvent('popup:loading-closed'));\n }\n }\n function closePopup(instant) {\n if (!activePopup) return;\n var popup = activePopup;\n var focusTarget = lastFocus;\n clearCloseTimer();\n if (instant) {\n activePopup = null;\n lastFocus = null;\n finishClosePopup(popup);\n unlockScroll();\n restoreFocus(focusTarget);\n return;\n }\n popup.classList.remove('is-open');\n var closed = false;\n function completeClose() {\n if (closed || popup.hidden) return;\n closed = true;\n clearCloseTimer();\n if (activePopup === popup) {\n activePopup = null;\n lastFocus = null;\n }\n finishClosePopup(popup);\n unlockScroll();\n if (!activePopup) {\n restoreFocus(focusTarget);\n }\n }\n var dialog = popup.querySelector('.popup__dialog');\n if (dialog) {\n dialog.addEventListener('transitionend', function onClose(event) {\n if (event.target !== dialog || event.propertyName !== 'transform') return;\n dialog.removeEventListener('transitionend', onClose);\n completeClose();\n });\n }\n closeTimer = setTimeout(function () {\n closeTimer = null;\n completeClose();\n }, POPUP_CLOSE_MS);\n }\n function openPopup(name, options) {\n options = options || {};\n var popup = findPopup(name);\n if (!popup) {\n console.warn('[popup] не найден:', name);\n return;\n }\n closePopup(true);\n if (name === 'media') {\n var slot = popup.querySelector('[data-popup-media-slot]');\n if (slot) renderMedia(slot, options);\n renderMediaMeta(popup, options);\n }\n if (name === 'review') {\n var reviewSlot = popup.querySelector('[data-popup-review-slot]');\n if (reviewSlot) reviewSlot.innerHTML = options.html || '';\n }\n lockScroll();\n lastFocus = document.activeElement;\n popup.hidden = false;\n activePopup = popup;\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n if (activePopup !== popup) return;\n popup.classList.add('is-open');\n restoreFocus(getInitialFocusTarget(popup));\n });\n });\n }\n window.Popup = {\n open: openPopup,\n close: closePopup,\n openLoading: openPopupLoading,\n closeLoading: closePopupLoading,\n fetchAndMount: fetchAndMountPopup,\n getFormsFragmentUrl: getFormsFragmentUrl,\n };\n document.addEventListener('click', function (event) {\n var openBtn = event.target.closest('[data-popup-open]');\n if (openBtn) {\n event.preventDefault();\n var popupName = openBtn.dataset.popupOpen;\n var popupOptions = {\n src: openBtn.dataset.popupSrc || '',\n kind: openBtn.dataset.popupKind || 'image',\n alt: openBtn.dataset.popupAlt || '',\n poster: openBtn.dataset.popupPoster || '',\n title: openBtn.dataset.popupTitle || '',\n author: openBtn.dataset.popupAuthor || '',\n service: openBtn.dataset.popupService || '',\n rating: openBtn.dataset.popupRating || '',\n };\n if (window.PopupForms && window.PopupForms.handleOpenButton && window.PopupForms.handleOpenButton(openBtn, popupOptions)) {\n } else {\n openPopup(popupName, popupOptions);\n }\n openBtn.classList.add('is-pressed');\n setTimeout(function () { openBtn.classList.remove('is-pressed'); }, 160);\n return;\n }\n if (event.target.closest('[data-popup-close]')) {\n event.preventDefault();\n closePopup();\n }\n });\n document.addEventListener('keydown', handlePopupKeydown);\n})();\n(function initPhoneMasks() {\n var PREFIX = '+7 (';\n function extractDigits(value) {\n var digits = (value || '').replace(\/\\D\/g, '');\n if (digits.charAt(0) === '7' || digits.charAt(0) === '8') digits = digits.slice(1);\n return digits.slice(0, 10);\n }\n function formatDigits(digits) {\n if (!digits.length) return '';\n var out = '+7 (' + digits.slice(0, 3);\n if (digits.length <= 3) return out;\n out += ')-' + digits.slice(3, 6);\n if (digits.length <= 6) return out;\n out += '-' + digits.slice(6, 8);\n if (digits.length <= 8) return out;\n return out + '-' + digits.slice(8, 10);\n }\n function countDigitsBefore(value, pos) {\n var count = 0;\n for (var i = 0; i < pos && i < value.length; i++) {\n if (\/\\d\/.test(value.charAt(i))) count++;\n }\n return count;\n }\n function cursorAfterDigits(formatted, digitCount) {\n if (digitCount <= 0) {\n var open = formatted.indexOf('(');\n return open >= 0 ? open + 1 : 0;\n }\n var seen = 0;\n for (var i = 0; i < formatted.length; i++) {\n if (\/\\d\/.test(formatted.charAt(i))) {\n seen++;\n if (seen === digitCount) return i + 1;\n }\n }\n return formatted.length;\n }\n function syncPhoneInput(input, caretDigitCount) {\n var digits = extractDigits(input.value);\n var focused = document.activeElement === input;\n if (!digits.length) {\n input.value = focused ? PREFIX : '';\n if (focused && typeof caretDigitCount !== 'number' && input.setSelectionRange) {\n input.setSelectionRange(input.value.length, input.value.length);\n }\n return;\n }\n var formatted = formatDigits(digits);\n input.value = formatted;\n if (typeof caretDigitCount === 'number' && input.setSelectionRange) {\n var pos = cursorAfterDigits(formatted, caretDigitCount);\n input.setSelectionRange(pos, pos);\n }\n }\n function normalizeRequiredPhone(input) {\n if (!input.hasAttribute('required')) return;\n if (extractDigits(input.value).length < 10) input.value = '';\n }\n function preparePhoneForValidation(input) {\n if (!input.hasAttribute('required')) return;\n var digits = extractDigits(input.value).length;\n if (digits === 0) {\n normalizeRequiredPhone(input);\n input.setCustomValidity('');\n return;\n }\n if (digits < 10) {\n input.setCustomValidity('Введите номер телефона полностью');\n return;\n }\n input.setCustomValidity('');\n }\n function bindPhoneInput(input) {\n if (input.dataset.phoneMaskBound) return;\n input.dataset.phoneMaskBound = '1';\n input.setAttribute('inputmode', 'tel');\n if (input.hasAttribute('required')) {\n input.addEventListener('invalid', function () {\n normalizeRequiredPhone(input);\n });\n }\n input.addEventListener('focus', function () {\n syncPhoneInput(input);\n });\n input.addEventListener('blur', function () {\n syncPhoneInput(input);\n });\n input.addEventListener('input', function () {\n input.setCustomValidity('');\n var caretDigitCount = countDigitsBefore(input.value, input.selectionStart || 0);\n syncPhoneInput(input, caretDigitCount);\n });\n input.addEventListener('keydown', function (event) {\n if (event.key !== 'Backspace') return;\n var start = input.selectionStart || 0;\n var end = input.selectionEnd || 0;\n if (start !== end) return;\n if (start <= PREFIX.length) {\n event.preventDefault();\n input.value = '';\n }\n });\n input.addEventListener('paste', function (event) {\n event.preventDefault();\n var text = (event.clipboardData || window.clipboardData).getData('text') || '';\n var start = input.selectionStart || 0;\n var end = input.selectionEnd || 0;\n var before = countDigitsBefore(input.value, start);\n var next = input.value.slice(0, start) + text + input.value.slice(end);\n input.value = next;\n syncPhoneInput(input, before + extractDigits(text).length);\n });\n }\n function init(root) {\n (root || document).querySelectorAll('input[type=\"tel\"]').forEach(bindPhoneInput);\n }\n window.PhoneMask = {\n init: init,\n normalizeRequired: normalizeRequiredPhone,\n prepareForValidation: preparePhoneForValidation,\n };\n init();\n})();\n(function initCharCounters() {\n function syncCounter(field) {\n var wrap = field.closest('.field__textarea-wrap');\n if (!wrap) return;\n var counter = wrap.querySelector('[data-char-counter]');\n if (!counter) return;\n var max = parseInt(field.getAttribute('maxlength'), 10) || 1500;\n var length = (field.value || '').length;\n counter.textContent = length + '\/' + max;\n }\n function bindCharCounter(field) {\n if (field.dataset.charCounterBound) return;\n field.dataset.charCounterBound = '1';\n field.addEventListener('input', function () {\n syncCounter(field);\n });\n syncCounter(field);\n }\n function init(root) {\n (root || document).querySelectorAll('[data-char-counter-field]').forEach(bindCharCounter);\n }\n window.CharCounter = { init: init };\n init();\n})();\n(function initBviLoader() {\n var loaderScript = document.currentScript || document.querySelector('script[data-bvi-js]');\n var cssUrl = loaderScript ? loaderScript.getAttribute('data-bvi-css') : '';\n var jsUrl = loaderScript ? loaderScript.getAttribute('data-bvi-js') : '';\n var loadPromise = null;\n function hasLibrary() {\n return typeof window.isvek !== 'undefined' && typeof window.isvek.Bvi === 'function';\n }\n function boot() {\n if (!hasLibrary()) return null;\n if (window.__bviInstance) return window.__bviInstance;\n window.__bviInstance = new window.isvek.Bvi({\n target: '.bvi-open',\n fontSize: 16,\n theme: 'white',\n speech: true,\n lang: 'ru-RU',\n });\n return window.__bviInstance;\n }\n function loadStyle(url) {\n var current = document.querySelector('link[data-bvi-resource=\"style\"]');\n if (current) {\n return current.sheet\n ? Promise.resolve()\n : new Promise(function (resolve, reject) {\n current.addEventListener('load', resolve, { once: true });\n current.addEventListener('error', reject, { once: true });\n });\n }\n return new Promise(function (resolve, reject) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n link.setAttribute('data-bvi-resource', 'style');\n link.addEventListener('load', resolve, { once: true });\n link.addEventListener('error', function () {\n link.remove();\n reject(new Error('BVI stylesheet failed to load'));\n }, { once: true });\n document.head.appendChild(link);\n });\n }\n function loadScript(url) {\n var current = document.querySelector('script[data-bvi-resource=\"script\"]');\n if (current) {\n return hasLibrary()\n ? Promise.resolve()\n : new Promise(function (resolve, reject) {\n current.addEventListener('load', resolve, { once: true });\n current.addEventListener('error', reject, { once: true });\n });\n }\n return new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.setAttribute('data-bvi-resource', 'script');\n script.addEventListener('load', resolve, { once: true });\n script.addEventListener('error', function () {\n script.remove();\n reject(new Error('BVI script failed to load'));\n }, { once: true });\n document.head.appendChild(script);\n });\n }\n function ensureLoaded() {\n if (window.__bviInstance) return Promise.resolve(window.__bviInstance);\n if (loadPromise) return loadPromise;\n if (!cssUrl || !jsUrl) {\n return hasLibrary()\n ? Promise.resolve(boot())\n : Promise.reject(new Error('BVI assets are unavailable'));\n }\n loadPromise = Promise.all([loadStyle(cssUrl), loadScript(jsUrl)])\n .then(function () {\n if (!hasLibrary()) throw new Error('BVI library did not initialize');\n return boot();\n })\n .catch(function (error) {\n loadPromise = null;\n throw error;\n });\n return loadPromise;\n }\n function findTrigger(target) {\n return target && typeof target.closest === 'function' ? target.closest('.bvi-open') : null;\n }\n function preloadOnIntent(event) {\n if (!findTrigger(event.target) || window.__bviInstance) return;\n ensureLoaded().catch(function () {\n });\n }\n document.addEventListener('pointerover', preloadOnIntent);\n document.addEventListener('focusin', preloadOnIntent);\n document.addEventListener('click', function (event) {\n var trigger = findTrigger(event.target);\n if (!trigger || window.__bviInstance) return;\n event.preventDefault();\n ensureLoaded()\n .then(function () {\n trigger.click();\n })\n .catch(function (error) {\n console.error('Не удалось загрузить версию для слабовидящих:', error);\n });\n });\n if (\/(?:^|;\\s*)bvi_panelActive=true(?:;|$)\/.test(document.cookie)) {\n ensureLoaded().catch(function (error) {\n console.error('Не удалось восстановить версию для слабовидящих:', error);\n });\n }\n})();\n(function initSectionReveal() {\n var REVEAL_TRANSITION = 'transform .4s ease';\n function isSectionInViewport(el) {\n var rect = el.getBoundingClientRect();\n return rect.top < window.innerHeight && rect.bottom > 0;\n }\n function revealSection(el) {\n el.style.transition = REVEAL_TRANSITION;\n el.style.transform = 'none';\n }\n function prepareHiddenSection(el) {\n el.style.transform = 'translateY(8px)';\n }\n document.addEventListener('DOMContentLoaded', function () {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n var sections = document.querySelectorAll('.page > section');\n if (!sections.length) return;\n if (!('IntersectionObserver' in window)) return;\n var observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (!entry.isIntersecting) return;\n revealSection(entry.target);\n observer.unobserve(entry.target);\n });\n }, {\n root: null,\n rootMargin: '0px 0px -5% 0px',\n threshold: 0.05,\n });\n sections.forEach(function (el) {\n if (isSectionInViewport(el)) {\n return;\n }\n prepareHiddenSection(el);\n observer.observe(el);\n });\n });\n})();\n(function initSwiperSlideImagesPatch() {\n if (typeof Swiper === 'undefined') return;\n var SwiperOriginal = Swiper;\n var DEFAULT_PRELOAD = 1;\n function resolveElement(el) {\n if (!el) return null;\n if (typeof el === 'string') return document.querySelector(el);\n return el;\n }\n function resolveSlidesPerView(options) {\n var spv = options.slidesPerView;\n if (options.breakpoints && typeof options.breakpoints === 'object') {\n var width = window.innerWidth;\n var points = Object.keys(options.breakpoints)\n .map(Number)\n .filter(function (n) { return !Number.isNaN(n); })\n .sort(function (a, b) { return a - b; });\n var matched = null;\n points.forEach(function (bp) {\n if (width >= bp) matched = bp;\n });\n if (matched !== null && options.breakpoints[matched] && options.breakpoints[matched].slidesPerView != null) {\n spv = options.breakpoints[matched].slidesPerView;\n }\n }\n if (spv === 'auto') return 1;\n if (typeof spv === 'number' && spv > 0) return Math.ceil(spv);\n return 1;\n }\n function getInitiallyVisibleSlideIndices(slideCount, options) {\n var start = typeof options.initialSlide === 'number' ? options.initialSlide : 0;\n if (start < 0) start = 0;\n var visible = resolveSlidesPerView(options);\n var indices = [];\n for (var i = 0; i < visible && start + i < slideCount; i++) {\n indices.push(start + i);\n }\n return indices;\n }\n function shouldKeepImageSrc(img) {\n if (!img || img.getAttribute('data-swiper-lazy-skip') !== null) return true;\n if (img.getAttribute('fetchpriority') === 'high') return true;\n return false;\n }\n function loadSlideImages(slide) {\n if (!slide) return;\n slide.querySelectorAll('img[data-src], img[src]').forEach(function (img) {\n img.setAttribute('loading', img.getAttribute('fetchpriority') === 'high' ? 'eager' : 'lazy');\n if (!img.getAttribute('src')) {\n var src = img.getAttribute('data-src');\n if (!src) return;\n img.setAttribute('src', src);\n img.removeAttribute('data-src');\n var srcset = img.getAttribute('data-srcset');\n if (srcset) {\n img.setAttribute('srcset', srcset);\n img.removeAttribute('data-srcset');\n }\n }\n if (!img.getAttribute('decoding')) {\n img.setAttribute('decoding', 'async');\n }\n });\n }\n function getActuallyVisibleSlides(swiper) {\n var visible = [];\n if (!swiper || !swiper.el || !swiper.slides) return visible;\n var viewport = swiper.el.getBoundingClientRect();\n Array.prototype.forEach.call(swiper.slides, function (slide) {\n if (!slide || !slide.getClientRects().length) return;\n var rect = slide.getBoundingClientRect();\n var horizontal = rect.right > viewport.left + 1 && rect.left < viewport.right - 1;\n var vertical = rect.bottom > viewport.top + 1 && rect.top < viewport.bottom - 1;\n if (rect.width > 0 && rect.height > 0 && horizontal && vertical) {\n visible.push(slide);\n }\n });\n return visible;\n }\n function loadVisibleSlideImages(swiper, amount) {\n if (!swiper || !swiper.slides || !swiper.slides.length) return;\n var spv = swiper.params.slidesPerView === 'auto'\n ? swiper.slidesPerViewDynamic()\n : Math.ceil(swiper.params.slidesPerView) || 1;\n var start = swiper.activeIndex;\n var end = start + spv - 1;\n var len = swiper.slides.length;\n var visibleSlides = getActuallyVisibleSlides(swiper);\n if (!visibleSlides.length) {\n for (var visibleIndex = start; visibleIndex <= Math.min(len - 1, end); visibleIndex++) {\n visibleSlides.push(swiper.slides[visibleIndex]);\n }\n }\n for (var activeIndex = start; activeIndex <= Math.min(len - 1, end); activeIndex++) {\n if (visibleSlides.indexOf(swiper.slides[activeIndex]) === -1) {\n visibleSlides.push(swiper.slides[activeIndex]);\n }\n }\n visibleSlides.forEach(function (slide) {\n loadSlideImages(slide);\n });\n for (var i = Math.max(0, start - amount); i <= Math.min(len - 1, end + amount); i++) {\n if (visibleSlides.indexOf(swiper.slides[i]) !== -1) continue;\n loadSlideImages(swiper.slides[i]);\n }\n }\n function prepareSlides(el, options) {\n if (!el) return;\n var slides = el.querySelectorAll('.swiper-slide');\n if (!slides.length) return;\n var initiallyVisible = getInitiallyVisibleSlideIndices(slides.length, options || {});\n var initiallyVisibleSet = {};\n initiallyVisible.forEach(function (index) {\n initiallyVisibleSet[index] = true;\n });\n slides.forEach(function (slide, index) {\n if (initiallyVisibleSet[index]) return;\n slide.querySelectorAll('img[src]').forEach(function (img) {\n if (shouldKeepImageSrc(img)) return;\n if (img.getAttribute('data-src')) return;\n var src = img.getAttribute('src');\n if (!src) return;\n img.setAttribute('data-src', src);\n img.removeAttribute('src');\n img.setAttribute('loading', 'lazy');\n img.removeAttribute('fetchpriority');\n var srcset = img.getAttribute('srcset');\n if (srcset) {\n img.setAttribute('data-srcset', srcset);\n img.removeAttribute('srcset');\n }\n if (!img.getAttribute('decoding')) {\n img.setAttribute('decoding', 'async');\n }\n });\n });\n el.dataset.swiperLazyPrepared = '1';\n }\n function appendSwiperHook(options, eventName, handler) {\n if (!options.on) {\n options.on = {};\n } else if (!Array.isArray(options.on)) {\n options.on = Object.assign({}, options.on);\n } else {\n options.on = options.on.slice();\n }\n if (Array.isArray(options.on)) {\n var hook = {};\n hook[eventName] = handler;\n options.on.push(hook);\n return;\n }\n var prev = options.on[eventName];\n options.on[eventName] = function () {\n handler.apply(this, arguments);\n if (typeof prev === 'function') {\n prev.apply(this, arguments);\n }\n };\n }\n function mergeSlideImageOptions(params) {\n var options = params ? Object.assign({}, params) : {};\n var preloadAmount = typeof options.lazyPreloadPrevNext === 'number'\n ? Math.max(0, options.lazyPreloadPrevNext)\n : DEFAULT_PRELOAD;\n options.lazyPreloadPrevNext = 0;\n function loadImages(swiper) {\n loadVisibleSlideImages(swiper, preloadAmount);\n }\n appendSwiperHook(options, 'init', loadImages);\n appendSwiperHook(options, 'slideChangeTransitionStart', loadImages);\n appendSwiperHook(options, 'breakpoint', loadImages);\n appendSwiperHook(options, 'resize', loadImages);\n return options;\n }\n function SwiperPatched(el, params) {\n var options = mergeSlideImageOptions(params);\n var element = resolveElement(el);\n if (element) prepareSlides(element, options);\n return new SwiperOriginal(el, options);\n }\n SwiperPatched.prototype = SwiperOriginal.prototype;\n Object.getOwnPropertyNames(SwiperOriginal).forEach(function (key) {\n if (key === 'prototype' || key === 'length' || key === 'name') return;\n try {\n SwiperPatched[key] = SwiperOriginal[key];\n } catch (e) { }\n });\n window.Swiper = SwiperPatched;\n})();\n(function initPopupForms() {\n function isRemoteOpenButton(openBtn) {\n return !!openBtn && openBtn.getAttribute('data-remote') === '1';\n }\n function isLeadFormPopup(popup) {\n if (!popup) return false;\n return !!popup.querySelector('form[data-popup-form], form.popup-form');\n }\n function getFormsFragmentUrl(openBtn) {\n var customUrl = openBtn && openBtn.getAttribute('data-popup-remote-url');\n if (customUrl) return customUrl;\n if (window.Popup && window.Popup.getFormsFragmentUrl) return window.Popup.getFormsFragmentUrl();\n var url = new URL(window.location.href);\n url.searchParams.set('form', '1');\n return url.toString();\n }\n function openRemotePopup(name, options, openBtn) {\n if (!window.Popup || !window.Popup.fetchAndMount || !window.Popup.open) return;\n var cancelled = false;\n var controller = typeof AbortController !== 'undefined' ? new AbortController() : null;\n function onLoadingClosed() {\n cancelled = true;\n if (controller) controller.abort();\n }\n document.addEventListener('popup:loading-closed', onLoadingClosed);\n if (window.Popup.openLoading) {\n window.Popup.openLoading(openBtn);\n }\n window.Popup.fetchAndMount(name, getFormsFragmentUrl(openBtn), {\n signal: controller ? controller.signal : undefined,\n })\n .then(function () {\n document.removeEventListener('popup:loading-closed', onLoadingClosed);\n if (cancelled) return;\n window.Popup.open(name, options);\n })\n .catch(function (err) {\n document.removeEventListener('popup:loading-closed', onLoadingClosed);\n if (cancelled || (err && err.name === 'AbortError')) return;\n console.warn('[popup-remote]', err);\n if (window.Popup.closeLoading) window.Popup.closeLoading();\n window.Popup.open(name, options);\n });\n }\n function setFormResultMessage(popup, message) {\n var textEl = popup.querySelector('[data-form-result-text]');\n if (!textEl) return;\n if (message) {\n textEl.textContent = message;\n return;\n }\n if (textEl.dataset.defaultText) {\n textEl.textContent = textEl.dataset.defaultText;\n }\n }\n function showFormResult(type, options) {\n options = options || {};\n var resultName = type === 'error' ? 'form-error' : 'form-success';\n var sourcePopup = document.querySelector('.popup.is-open');\n if (sourcePopup && isLeadFormPopup(sourcePopup) && window.Popup && window.Popup.close) {\n window.Popup.close(true);\n }\n if (window.Popup && window.Popup.open) {\n window.Popup.open(resultName);\n }\n var openedPopup = document.querySelector('.popup[data-popup=\"' + resultName + '\"]');\n if (openedPopup) setFormResultMessage(openedPopup, options.message || '');\n }\n function isLeadForm(form) {\n if (!form || form.tagName !== 'FORM') return false;\n if (form.method && form.method.toLowerCase() === 'get') return false;\n if (form.hasAttribute('data-form-no-result')) return false;\n if (form.hasAttribute('data-reviews-v5-filters-form')) return false;\n if (form.hasAttribute('data-quiz-v1-form') && form.getAttribute('data-quiz-v1-form') !== '4') return false;\n return true;\n }\n function preparePhoneFieldsForValidation(form) {\n form.querySelectorAll('input[type=\"tel\"][required]').forEach(function (input) {\n if (window.PhoneMask && window.PhoneMask.prepareForValidation) {\n window.PhoneMask.prepareForValidation(input);\n return;\n }\n if (window.PhoneMask && window.PhoneMask.normalizeRequired) {\n window.PhoneMask.normalizeRequired(input);\n }\n });\n }\n function validateLeadForm(form) {\n preparePhoneFieldsForValidation(form);\n if (!form.checkValidity()) {\n form.classList.add('popup-form--submit-attempted');\n form.reportValidity();\n return false;\n }\n form.classList.remove('popup-form--submit-attempted');\n return true;\n }\n function collectQuizPayload(leadForm) {\n var root = leadForm.closest('.quiz-v1');\n if (!root) return new FormData(leadForm);\n var payload = new FormData();\n root.querySelectorAll('[data-quiz-v1-form]').forEach(function (stepForm) {\n new FormData(stepForm).forEach(function (value, key) {\n payload.append(key, value);\n });\n });\n return payload;\n }\n function resetFormAfterSubmit(form) {\n form.querySelectorAll('input[type=\"checkbox\"][name=\"consent\"]').forEach(function (el) {\n el.checked = false;\n });\n form.classList.remove('popup-form--submit-attempted');\n syncConsentGatingVisual(form);\n var quizSubmit = form.querySelector('[data-quiz-v1-submit]');\n if (quizSubmit) quizSubmit.disabled = true;\n form.querySelectorAll('[data-char-counter-field]').forEach(function (field) {\n var wrap = field.closest('.field__textarea-wrap');\n var counter = wrap && wrap.querySelector('[data-char-counter]');\n if (!counter) return;\n var max = parseInt(field.getAttribute('maxlength'), 10) || 1500;\n counter.textContent = '0\/' + max;\n });\n }\n function setFormPending(form, isPending) {\n var dialog = form.closest('.popup__dialog');\n if (!dialog) return;\n var overlay = dialog.querySelector('[data-form-pending]');\n if (isPending) {\n dialog.setAttribute('aria-busy', 'true');\n if (!overlay) {\n overlay = document.createElement('div');\n overlay.className = 'ui-preloader-overlay';\n overlay.setAttribute('data-form-pending', '1');\n overlay.setAttribute('aria-hidden', 'true');\n overlay.innerHTML = '<span class=\"ui-preloader ui-preloader--lg\"><\/span>';\n dialog.appendChild(overlay);\n }\n return;\n }\n dialog.removeAttribute('aria-busy');\n if (overlay) overlay.remove();\n }\n function getLeadSubmitButton(form) {\n return form.querySelector('.popup-form__submit, [data-quiz-v1-submit], button[type=\"submit\"]');\n }\n function isAjaxForm(form) {\n if (form.hasAttribute('data-form-ajax')) return true;\n var action = (form.getAttribute('action') || '').trim();\n return action !== '' && action !== '#' && action.indexOf('javascript:') !== 0;\n }\n function submitLeadFormAjax(form, isQuizLead, payload) {\n var submitBtn = getLeadSubmitButton(form);\n if (submitBtn) submitBtn.disabled = true;\n setFormPending(form, true);\n var headers = {\n Accept: 'application\/json',\n 'X-Requested-With': 'XMLHttpRequest',\n };\n var csrf = document.querySelector('meta[name=\"csrf-token\"]');\n if (csrf && csrf.getAttribute('content')) {\n headers['X-CSRF-Token'] = csrf.getAttribute('content');\n }\n fetch(form.action, {\n method: (form.getAttribute('method') || 'POST').toUpperCase(),\n body: payload,\n credentials: 'same-origin',\n headers: headers,\n })\n .then(function (res) {\n return res.json().then(function (data) {\n return { ok: res.ok, data: data };\n }).catch(function () {\n return { ok: res.ok, data: {} };\n });\n })\n .then(function (result) {\n if (submitBtn) submitBtn.disabled = false;\n setFormPending(form, false);\n var data = result.data || {};\n var success = result.ok && (data.ok === true || data.success === true);\n if (success) {\n form.reset();\n resetFormAfterSubmit(form);\n if (isQuizLead) {\n var quizRoot = form.closest('.quiz-v1');\n if (quizRoot) {\n quizRoot.dispatchEvent(new CustomEvent('quiz-v1:submitted', { bubbles: false }));\n }\n }\n showFormResult('success', {\n message: data.message || form.getAttribute('data-form-success-message') || '',\n });\n return;\n }\n showFormResult('error', {\n message: data.message || data.error || '',\n });\n })\n .catch(function (err) {\n if (submitBtn) submitBtn.disabled = false;\n setFormPending(form, false);\n console.error('[form]', err);\n showFormResult('error');\n });\n }\n function handleLeadFormSubmit(form) {\n var isQuizLead = form.getAttribute('data-quiz-v1-form') === '4';\n var payload = isQuizLead ? collectQuizPayload(form) : new FormData(form);\n if (isAjaxForm(form)) {\n submitLeadFormAjax(form, isQuizLead, payload);\n return;\n }\n console.log(\n '[form] отправка:',\n form.className || form.getAttribute('data-popup-form') || (isQuizLead ? 'quiz-v1' : 'form'),\n payload\n );\n var quizSubmit = form.querySelector('[data-quiz-v1-submit]');\n if (quizSubmit) {\n quizSubmit.classList.add('is-pressed');\n setTimeout(function () { quizSubmit.classList.remove('is-pressed'); }, 160);\n }\n form.reset();\n resetFormAfterSubmit(form);\n if (isQuizLead) {\n var quizRoot = form.closest('.quiz-v1');\n if (quizRoot) {\n quizRoot.dispatchEvent(new CustomEvent('quiz-v1:submitted', { bubbles: false }));\n }\n }\n showFormResult('success', {\n message: form.getAttribute('data-form-success-message') || '',\n });\n }\n function resetConsent(root) {\n (root || document).querySelectorAll('input[type=\"checkbox\"][name=\"consent\"]').forEach(function (el) {\n el.checked = false;\n });\n }\n function syncConsentGatingVisual(form) {\n if (!form || !form.classList.contains('popup-form--consent-gated')) return;\n var consent = form.querySelector('input[name=\"consent\"]');\n var submit = getLeadSubmitButton(form);\n if (!consent || !submit) return;\n var ready = consent.checked;\n form.classList.toggle('is-consent-ready', ready);\n submit.classList.toggle('is-consent-pending', !ready);\n submit.disabled = false;\n }\n function initConsentGating(root) {\n (root || document).querySelectorAll('.popup-form--consent-gated').forEach(function (form) {\n if (form.dataset.consentGatedBound) return;\n form.dataset.consentGatedBound = '1';\n var consent = form.querySelector('input[name=\"consent\"]');\n if (!consent) return;\n consent.addEventListener('change', function () {\n syncConsentGatingVisual(form);\n });\n form.addEventListener('input', function () {\n if (form.classList.contains('popup-form--submit-attempted') && form.checkValidity()) {\n form.classList.remove('popup-form--submit-attempted');\n }\n });\n syncConsentGatingVisual(form);\n });\n }\n function initFormUi(root) {\n resetConsent(root);\n initConsentGating(root);\n if (window.PhoneMask) window.PhoneMask.init(root);\n if (window.CharCounter) window.CharCounter.init(root);\n }\n window.FormUi = { init: initFormUi };\n window.FormResult = {\n showSuccess: function (options) { showFormResult('success', options || {}); },\n showError: function (options) { showFormResult('error', options || {}); },\n };\n window.PopupForms = {\n isRemoteOpenButton: isRemoteOpenButton,\n handleOpenButton: function (openBtn, popupOptions) {\n var popupName = openBtn.dataset.popupOpen;\n if (!isRemoteOpenButton(openBtn)) return false;\n openRemotePopup(popupName, popupOptions || {}, openBtn);\n return true;\n }\n };\n document.addEventListener('submit', function (event) {\n var form = event.target;\n if (!isLeadForm(form)) return;\n event.preventDefault();\n if (!validateLeadForm(form)) return;\n handleLeadFormSubmit(form);\n });\n document.addEventListener('DOMContentLoaded', function () {\n initFormUi(document);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.hero-v2').forEach(function (root) {\n if (root.dataset.heroV2Ready === 'true') return;\n var rootRect = root.getBoundingClientRect();\n var supportsVisibilityObserver = 'IntersectionObserver' in window;\n var isSectionVisible = !supportsVisibilityObserver || (rootRect.bottom > 0 && rootRect.top < window.innerHeight);\n var motionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n function reduceMotion() {\n return motionQuery.matches;\n }\n function saveDataEnabled() {\n return !!(connection && connection.saveData);\n }\n function shouldSkipAutoplay() {\n return reduceMotion() || saveDataEnabled();\n }\n function prepareVideoEl(video) {\n video.muted = true;\n video.defaultMuted = true;\n video.playsInline = true;\n video.setAttribute('playsinline', '');\n video.setAttribute('webkit-playsinline', '');\n video.setAttribute('preload', 'none');\n }\n function unloadVideo(video) {\n if (!video) return;\n video.pause();\n var source = video.querySelector('source');\n if (!source) return;\n var href = source.getAttribute('src') || source.getAttribute('data-src');\n if (href) source.setAttribute('data-src', href);\n source.removeAttribute('src');\n video.removeAttribute('src');\n try { video.load(); } catch (err) {}\n }\n function ensureVideoSource(video) {\n var source = video.querySelector('source[data-src]');\n if (!source || !source.dataset.src) return;\n if (source.getAttribute('src') === source.dataset.src) return;\n source.src = source.dataset.src;\n video.load();\n }\n function freezeVideo(video) {\n if (!video) return;\n video.classList.add('is-frozen');\n unloadVideo(video);\n }\n function playSlideVideo(video) {\n if (!video) return;\n prepareVideoEl(video);\n if (!isSectionVisible || document.hidden || shouldSkipAutoplay()) {\n freezeVideo(video);\n return;\n }\n video.classList.remove('is-frozen');\n ensureVideoSource(video);\n try { video.currentTime = 0; } catch (err) {}\n var playPromise = video.play();\n if (playPromise && typeof playPromise.catch === 'function') {\n playPromise.catch(function () {\n freezeVideo(video);\n });\n }\n }\n function pauseInactiveVideo(video) {\n if (!video) return;\n video.classList.remove('is-frozen');\n unloadVideo(video);\n }\n function stopAllSlideVideos() {\n root.querySelectorAll('.hero-v2__slide-video').forEach(freezeVideo);\n }\n function syncSlideVideos() {\n var videos = root.querySelectorAll('.hero-v2__slide-video');\n var activeSlide = root.querySelector('.swiper-slide-active') || root.querySelector('.swiper-slide');\n Array.prototype.forEach.call(videos, function (video) {\n var slide = video.closest('.swiper-slide');\n var isActive = !slide || slide === activeSlide;\n if (isActive) playSlideVideo(video);\n else pauseInactiveVideo(video);\n });\n }\n function syncPlaybackAvailability() {\n if (root.dataset.heroV2Ready !== 'true') return;\n if (!isSectionVisible || document.hidden || shouldSkipAutoplay()) {\n stopAllSlideVideos();\n return;\n }\n syncSlideVideos();\n }\n function initHero() {\n if (root.dataset.heroV2Ready === 'true') return;\n root.dataset.heroV2Ready = 'true';\n var sliderEl = root.querySelector('.hero-v2__card.swiper');\n if (!sliderEl) return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2 || typeof Swiper === 'undefined') {\n syncSlideVideos();\n return;\n }\n var paginationEl = root.querySelector('.hero-v2__slider-pagination');\n var isMobile = window.matchMedia('(max-width: 768px)').matches;\n function syncHeroPagination(swiper) {\n if (!swiper.pagination || !paginationEl) return;\n var mobile = window.matchMedia('(max-width: 768px)').matches;\n if (mobile) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: 1,\n speed: 300,\n loop: !isMobile,\n autoHeight: isMobile,\n navigation: {\n nextEl: root.querySelector('.hero-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.hero-v2__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) {\n syncHeroPagination(swiper);\n syncSlideVideos();\n },\n slideChangeTransitionStart: stopAllSlideVideos,\n slideChangeTransitionEnd: syncSlideVideos,\n resize: syncHeroPagination,\n breakpoint: syncHeroPagination,\n },\n });\n root.querySelectorAll('.hero-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (supportsVisibilityObserver) {\n var visibilityObserver = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (entry.target !== root) return;\n isSectionVisible = entry.isIntersecting;\n syncPlaybackAvailability();\n });\n }, { threshold: 0 });\n visibilityObserver.observe(root);\n }\n document.addEventListener('visibilitychange', syncPlaybackAvailability);\n if (motionQuery.addEventListener) {\n motionQuery.addEventListener('change', syncPlaybackAvailability);\n } else if (motionQuery.addListener) {\n motionQuery.addListener(syncPlaybackAvailability);\n }\n if (connection && connection.addEventListener) {\n connection.addEventListener('change', syncPlaybackAvailability);\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initHero);\n } else {\n initHero();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('benefits\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('our-approach\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('services\/variant-3');\n function initRoot(root) {\n if (root.dataset.servicesV3Ready === 'true') return;\n root.dataset.servicesV3Ready = 'true';\n var items = root.querySelectorAll('.services-v3__item');\n if (!items.length) return;\n var list = root.querySelector('.services-v3__list');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 350;\n var activeDesktopIndex = 0;\n function isDesktop() {\n return desktopMq.matches;\n }\n function shouldAnimateAccordion() {\n return !isDesktop() && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!list) return;\n if (!isDesktop()) {\n list.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-services-v3-panel].is-active');\n if (!activePanel) {\n list.style.minHeight = '';\n return;\n }\n list.style.minHeight = '';\n var tabsHeight = list.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n list.style.minHeight = Math.max(tabsHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function deactivateTab(tab) {\n if (!tab) return;\n tab.classList.remove('is-active');\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n }\n function deactivateAccordionTabVisual(item) {\n deactivateTab(item.querySelector('[data-services-v3-tab]'));\n }\n function finalizeAccordionClose(item) {\n var panel = item.querySelector('[data-services-v3-panel]');\n deactivateAccordionTabVisual(item);\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n }\n }\n function activateDesktop(index) {\n activeDesktopIndex = index;\n root.querySelectorAll('[data-services-v3-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-services-v3-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n root.querySelectorAll('[data-services-v3-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-services-v3-index'), 10);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, instantVisual) {\n var panel = item.querySelector('[data-services-v3-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n panel.setAttribute('aria-hidden', 'true');\n if (instantVisual) {\n deactivateAccordionTabVisual(item);\n }\n if (!shouldAnimateAccordion()) {\n finalizeAccordionClose(item);\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n finalizeAccordionClose(item);\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var tab = item.querySelector('[data-services-v3-tab]');\n var panel = item.querySelector('[data-services-v3-panel]');\n if (!panel) return;\n var index = parseInt(panel.getAttribute('data-services-v3-index'), 10);\n if (!isNaN(index)) {\n activeDesktopIndex = index;\n }\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-selected', 'true');\n tab.tabIndex = 0;\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n if (shouldAnimateAccordion()) {\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n return;\n }\n item.classList.add('is-open');\n }\n function resetMobileAccordion() {\n items.forEach(function (item) {\n item.classList.remove('is-open');\n deactivateAccordionTabVisual(item);\n var panel = item.querySelector('[data-services-v3-panel]');\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n panel.setAttribute('aria-hidden', 'true');\n }\n });\n }\n function syncLayout() {\n if (isDesktop()) {\n activateDesktop(activeDesktopIndex);\n syncStageHeight();\n return;\n }\n if (list) {\n list.style.minHeight = '';\n }\n resetMobileAccordion();\n }\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-services-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-services-v3-index'), 10);\n if (isNaN(index)) return;\n if (isDesktop()) {\n activateDesktop(index);\n return;\n }\n var item = tab.closest('.services-v3__item');\n if (!item) return;\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n });\n root.addEventListener('keydown', function (event) {\n var tab = event.target.closest('[data-services-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-services-v3-tab]'));\n var index = tabs.indexOf(tab);\n if (index === -1) return;\n var nextIndex = index;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (index + 1) % tabs.length;\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextIndex = (index - 1 + tabs.length) % tabs.length;\n } else {\n return;\n }\n event.preventDefault();\n var nextTab = tabs[nextIndex];\n var nextItemIndex = parseInt(nextTab.getAttribute('data-services-v3-index'), 10);\n if (isDesktop()) {\n activateDesktop(nextItemIndex);\n nextTab.focus();\n return;\n }\n var item = nextTab.closest('.services-v3__item');\n if (!item) return;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n nextTab.focus();\n });\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', syncLayout);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(syncLayout);\n }\n root.querySelectorAll('.services-v3__media-img').forEach(function (img) {\n if (img.complete) return;\n img.addEventListener('load', syncStageHeight, { once: true });\n });\n window.addEventListener('resize', scheduleStageHeight);\n syncLayout();\n }\n function boot() {\n document.querySelectorAll('.services-v3').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v1').forEach(function (root) {\n if (root.dataset.casesV1Ready === 'true') return;\n root.dataset.casesV1Ready = 'true';\n var sliderEl = root.querySelector('.cases-v1__slider.swiper');\n if (!sliderEl) return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n var paginationEl = root.querySelector('.cases-v1__pagination');\n var paginationHost = root.querySelector('.cases-v1__slider-foot .slider-pagination-host');\n var navPrev = root.querySelector('.cases-v1__slider-nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.cases-v1__slider-nav .slider-nav__btn--next');\n var canSlide = slides.length > 1;\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n var stackMetricsObserver = null;\n var stackMetricsFrame = null;\n function syncStackMetrics() {\n if (mobileMq.matches) {\n root.style.removeProperty('--cases-v1-panel-h');\n root.style.removeProperty('--cases-v1-stack-tail');\n return;\n }\n var panelHeight = 0;\n root.querySelectorAll('.cases-v1__panel').forEach(function (panel) {\n panelHeight = Math.max(panelHeight, panel.offsetHeight);\n });\n if (panelHeight > 0) {\n root.style.setProperty('--cases-v1-panel-h', panelHeight + 'px');\n root.style.setProperty('--cases-v1-stack-tail', canSlide ? '64px' : '0px');\n }\n }\n function scheduleStackMetrics() {\n if (stackMetricsFrame !== null) return;\n stackMetricsFrame = window.requestAnimationFrame(function () {\n stackMetricsFrame = null;\n syncStackMetrics();\n });\n }\n function observeStackMetrics() {\n if (typeof ResizeObserver !== 'function' || stackMetricsObserver) return;\n stackMetricsObserver = new ResizeObserver(scheduleStackMetrics);\n root.querySelectorAll('.cases-v1__panel').forEach(function (panel) {\n stackMetricsObserver.observe(panel);\n });\n }\n function syncDotsPagination(swiper, options) {\n if (!swiper || !swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n }\n function destroyMobileSwiper() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n sliderEl.classList.remove('is-settled');\n }\n function initMobileSwiper() {\n if (!mobileMq.matches || !canSlide || swiperInstance || typeof Swiper === 'undefined') return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 400,\n loop: false,\n rewind: true,\n allowTouchMove: true,\n roundLengths: true,\n watchOverflow: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n on: {\n init: function (swiper) {\n swiper.el.classList.add('is-settled');\n swiper.update();\n syncDotsPagination(swiper);\n },\n resize: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper);\n },\n slideChange: function (swiper) {\n syncDotsPagination(swiper, { forceRender: false });\n },\n touchStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n slideChangeTransitionStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n transitionEnd: function (swiper) {\n swiper.el.classList.add('is-settled');\n },\n },\n });\n root.querySelectorAll('.cases-v1__slider-nav .slider-nav__btn').forEach(function (btn) {\n if (btn.dataset.casesV1NavReady === 'true') return;\n btn.dataset.casesV1NavReady = 'true';\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n function syncViewportMode() {\n if (mobileMq.matches) {\n initMobileSwiper();\n return;\n }\n destroyMobileSwiper();\n if (paginationHost) paginationHost.hidden = true;\n syncStackMetrics();\n }\n if (canSlide) {\n function bootSwiper() {\n syncViewportMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncViewportMode);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncViewportMode);\n }\n observeStackMetrics();\n if (typeof ResizeObserver !== 'function') {\n window.addEventListener('resize', scheduleStackMetrics);\n }\n window.addEventListener('load', scheduleStackMetrics);\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(scheduleStackMetrics);\n }\n } else {\n sliderEl.classList.add('cases-v1__slider--static');\n observeStackMetrics();\n syncStackMetrics();\n if (typeof ResizeObserver !== 'function') {\n window.addEventListener('resize', scheduleStackMetrics);\n }\n window.addEventListener('load', scheduleStackMetrics);\n }\n initBeforeAfterSliders();\n scheduleStackMetrics();\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v1__media').forEach(function (media) {\n if (media.dataset.casesV1BeforeAfterReady === 'true') return;\n media.dataset.casesV1BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v1__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV1BlurTimer) {\n clearTimeout(media.__casesV1BlurTimer);\n media.__casesV1BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV1BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV1BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v1-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n if (swiperInstance && mobileMq.matches) event.stopPropagation();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var step = 2;\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v1-reveal') || '50').replace('%', '')) || 50;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - step);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + step);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('doctors\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.doctors-v4').forEach(function (root) {\n if (root.dataset.doctorsV4Ready === 'true') return;\n root.dataset.doctorsV4Ready = 'true';\n if (typeof Swiper === 'undefined') return;\n var featuredHost = root.querySelector('[data-doctors-v4-featured-host]');\n var sliderEl = root.querySelector('.doctors-v4__slider.swiper');\n var listTrack = root.querySelector('[data-doctors-v4-list-track]');\n var mobileFeaturedEl = root.querySelector('.doctors-v4__featured-mobile.swiper');\n var mobileTrack = root.querySelector('[data-doctors-v4-mobile-track]');\n var doctors = Array.prototype.slice.call(root.querySelectorAll('[data-doctors-v4-doctor]'));\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var desktopSwiper = null;\n var mobileSwiper = null;\n var activeDoctorIndex = 0;\n function getListGap() {\n var raw = getComputedStyle(root).getPropertyValue('--doctors-v4-list-gap').trim();\n var parsed = parseFloat(raw);\n return Number.isNaN(parsed) ? 24 : parsed;\n }\n function getListBottomAir() {\n return parseFloat(getComputedStyle(root).getPropertyValue('--doctors-v4-list-bottom-air')) || 12;\n }\n function setDoctorMode(doctor, mode) {\n var isList = mode === 'list';\n doctor.classList.toggle('doctors-v4__card', isList);\n doctor.classList.add('swiper-slide');\n doctor.classList.toggle('is-active', isList && parseInt(doctor.dataset.doctorIndex, 10) === activeDoctorIndex);\n doctor.toggleAttribute('data-doctors-v4-card', isList);\n doctor.setAttribute('data-doctors-v4-slide', '');\n }\n function renderFeaturedDoctor() {\n if (!featuredHost || !doctors[activeDoctorIndex]) return;\n var featuredDoctor = doctors[activeDoctorIndex].cloneNode(true);\n featuredDoctor.classList.remove(\n 'doctors-v4__card',\n 'swiper-slide',\n 'swiper-slide-active',\n 'swiper-slide-next',\n 'swiper-slide-prev',\n 'is-active'\n );\n featuredDoctor.classList.add('doctors-v4__featured--desktop');\n featuredDoctor.removeAttribute('data-doctors-v4-doctor');\n featuredDoctor.removeAttribute('data-doctors-v4-card');\n featuredDoctor.removeAttribute('data-doctors-v4-slide');\n featuredDoctor.removeAttribute('data-doctor-index');\n featuredDoctor.removeAttribute('style');\n featuredHost.replaceChildren(featuredDoctor);\n }\n function updateActiveDoctor() {\n doctors.forEach(function (doctor, index) {\n doctor.classList.toggle('is-active', index === activeDoctorIndex);\n });\n }\n function mountDesktopDoctors() {\n if (!featuredHost || !listTrack) return;\n doctors.forEach(function (doctor) {\n setDoctorMode(doctor, 'list');\n listTrack.appendChild(doctor);\n });\n updateActiveDoctor();\n renderFeaturedDoctor();\n }\n function mountMobileDoctors() {\n if (!mobileTrack) return;\n if (featuredHost) featuredHost.replaceChildren();\n doctors.forEach(function (doctor) {\n setDoctorMode(doctor, 'mobile');\n doctor.classList.remove('is-active');\n mobileTrack.appendChild(doctor);\n });\n }\n function goToDoctor(index) {\n if (mobileMq.matches || index < 0 || index >= doctors.length || index === activeDoctorIndex) return;\n activeDoctorIndex = index;\n updateActiveDoctor();\n renderFeaturedDoctor();\n if (desktopSwiper) {\n desktopSwiper.slideTo(index);\n fixPaginationForHorizontalLayout(desktopSwiper, getDesktopPaginationEl());\n }\n updateDesktopNavState();\n }\n if (sliderEl) {\n sliderEl.addEventListener('click', function (event) {\n if (mobileMq.matches) return;\n var doctor = event.target.closest('[data-doctors-v4-doctor]');\n if (!doctor || !sliderEl.contains(doctor)) return;\n goToDoctor(parseInt(doctor.dataset.doctorIndex, 10));\n });\n }\n root.addEventListener('click', function (event) {\n if (mobileMq.matches) return;\n if (event.target.closest('.doctors-v4__controls--desktop .doctors-v4__nav-btn--prev')) {\n goToDoctor(activeDoctorIndex - 1);\n }\n if (event.target.closest('.doctors-v4__controls--desktop .doctors-v4__nav-btn--next')) {\n goToDoctor(activeDoctorIndex + 1);\n }\n });\n function getDesktopControls() {\n return root.querySelector('.doctors-v4__controls--desktop');\n }\n function getMobileControls() {\n return root.querySelector('.doctors-v4__controls--mobile');\n }\n function getDesktopPaginationEl() {\n var controls = getDesktopControls();\n return controls ? controls.querySelector('.doctors-v4__pagination') : null;\n }\n function getMobilePaginationEl() {\n var controls = getMobileControls();\n return controls ? controls.querySelector('.doctors-v4__pagination') : null;\n }\n function updateDesktopNavState() {\n var controls = getDesktopControls();\n if (!controls) return;\n var prevBtn = controls.querySelector('.doctors-v4__nav-btn--prev');\n var nextBtn = controls.querySelector('.doctors-v4__nav-btn--next');\n var atStart = activeDoctorIndex <= 0;\n var atEnd = activeDoctorIndex >= doctors.length - 1;\n if (prevBtn) {\n prevBtn.disabled = atStart;\n prevBtn.classList.toggle('swiper-button-disabled', atStart);\n prevBtn.setAttribute('aria-disabled', atStart ? 'true' : 'false');\n }\n if (nextBtn) {\n nextBtn.disabled = atEnd;\n nextBtn.classList.toggle('swiper-button-disabled', atEnd);\n nextBtn.setAttribute('aria-disabled', atEnd ? 'true' : 'false');\n }\n }\n function fixPaginationForHorizontalLayout(sw, paginationEl) {\n if (!paginationEl) return;\n paginationEl.style.top = 'auto';\n paginationEl.style.bottom = 'auto';\n if (!sw.isHorizontal() && paginationEl.style.height) {\n paginationEl.style.width = paginationEl.style.height;\n paginationEl.style.height = '';\n }\n var inlineTransform = paginationEl.style.transform;\n if (inlineTransform) {\n paginationEl.style.transform = inlineTransform\n .replace(\/translate3d\\(\\s*([^,]+),\\s*([^,]+),\\s*([^)]+)\\)\/, function (_, x, _y, z) {\n return 'translate3d(' + x.trim() + ', 0px, ' + z.trim() + ')';\n })\n .replace(\/translateY\\([^)]+\\)\/g, 'translateY(0)');\n }\n paginationEl.querySelectorAll('.swiper-pagination-bullet').forEach(function (bullet) {\n if (!bullet.style.top) return;\n bullet.style.left = bullet.style.top;\n bullet.style.top = 'auto';\n });\n }\n function syncPagination(sw, paginationEl) {\n if (!sw.pagination || !paginationEl) return;\n sw.pagination.render();\n sw.pagination.update();\n fixPaginationForHorizontalLayout(sw, paginationEl);\n }\n function updateSlidesEndSpace(sw) {\n var gap = getListGap();\n var offsetAfter = gap + getListBottomAir();\n if (sw.params.slidesOffsetAfter === offsetAfter && sw.params.spaceBetween === gap) return;\n sw.params.slidesOffsetAfter = offsetAfter;\n sw.params.spaceBetween = gap;\n sw.update();\n }\n function toggleControls(controls, hidden) {\n if (!controls) return;\n controls.style.display = hidden ? 'none' : '';\n }\n function destroyDesktop() {\n if (!desktopSwiper) return;\n desktopSwiper.destroy(true, true);\n desktopSwiper = null;\n }\n function destroyMobile() {\n if (!mobileSwiper) return;\n mobileSwiper.destroy(true, true);\n mobileSwiper = null;\n }\n function initDesktop() {\n if (!sliderEl) return;\n var controls = getDesktopControls();\n var paginationEl = getDesktopPaginationEl();\n var listSlides = listTrack ? listTrack.querySelectorAll('[data-doctors-v4-slide]') : [];\n updateDesktopNavState();\n if (listSlides.length < 2) {\n toggleControls(controls, true);\n return;\n }\n desktopSwiper = new Swiper(sliderEl, {\n direction: 'vertical',\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: getListGap(),\n speed: 320,\n loop: false,\n rewind: false,\n initialSlide: activeDoctorIndex,\n slidesOffsetAfter: getListGap() + getListBottomAir(),\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (sw) {\n updateSlidesEndSpace(sw);\n syncPagination(sw, paginationEl);\n updateDesktopNavState();\n toggleControls(controls, sw.isLocked);\n },\n resize: function (sw) {\n updateSlidesEndSpace(sw);\n syncPagination(sw, paginationEl);\n },\n breakpoint: function (sw) {\n syncPagination(sw, paginationEl);\n },\n slideChange: function (sw) {\n activeDoctorIndex = sw.activeIndex;\n updateActiveDoctor();\n renderFeaturedDoctor();\n updateDesktopNavState();\n fixPaginationForHorizontalLayout(sw, paginationEl);\n },\n },\n });\n }\n function initMobile() {\n if (!mobileFeaturedEl || !doctors.length) return;\n var controls = getMobileControls();\n var paginationEl = getMobilePaginationEl();\n var prevBtn = controls ? controls.querySelector('.doctors-v4__nav-btn--prev') : null;\n var nextBtn = controls ? controls.querySelector('.doctors-v4__nav-btn--next') : null;\n mobileSwiper = new Swiper(mobileFeaturedEl, {\n direction: 'horizontal',\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 16,\n speed: 320,\n loop: false,\n rewind: false,\n initialSlide: activeDoctorIndex,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n navigation: {\n prevEl: prevBtn,\n nextEl: nextBtn,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (sw) {\n toggleControls(controls, sw.isLocked);\n },\n slideChange: function (sw) {\n var doctor = sw.slides[sw.activeIndex];\n var index = doctor ? parseInt(doctor.dataset.doctorIndex, 10) : -1;\n if (!Number.isNaN(index)) activeDoctorIndex = index;\n },\n },\n });\n }\n function setup() {\n [getDesktopControls(), getMobileControls()].forEach(function (controls) {\n if (controls) controls.style.display = '';\n });\n if (mobileMq.matches) {\n destroyDesktop();\n mountMobileDoctors();\n initMobile();\n } else {\n destroyMobile();\n mountDesktopDoctors();\n initDesktop();\n }\n }\n function bootSwiper() {\n setup();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n mobileMq.addEventListener('change', setup);\n root.querySelectorAll('.doctors-v4__nav-btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('quiz\/variant-1');\n document.querySelectorAll('.quiz-v1').forEach(function (root) {\n if (root.dataset.quizV1Ready === 'true') return;\n root.dataset.quizV1Ready = 'true';\n var totalSteps = parseInt(root.dataset.quizV1Total, 10) || 4;\n var stepLabelEl = root.querySelector('[data-quiz-v1-step-label]');\n var panels = root.querySelectorAll('[data-quiz-v1-step-panel]');\n var forms = root.querySelectorAll('[data-quiz-v1-form]');\n if (!panels.length || !forms.length) return;\n var currentStep = parseInt(root.dataset.quizV1Step, 10) || 1;\n function getPanel(step) {\n return root.querySelector('[data-quiz-v1-step-panel=\"' + step + '\"]');\n }\n function getForm(step) {\n return root.querySelector('[data-quiz-v1-form=\"' + step + '\"]');\n }\n function updateStepLabel(step) {\n if (!stepLabelEl) return;\n stepLabelEl.textContent = 'Шаг ' + step + ' из ' + totalSteps;\n }\n function syncStepState(step) {\n var form = getForm(step);\n var panel = getPanel(step);\n if (!form || !panel) return;\n var continueBtn = panel.querySelector('[data-quiz-v1-continue]');\n if (continueBtn) {\n var hasSelection = !!form.querySelector('[data-quiz-v1-option]:checked');\n continueBtn.disabled = !hasSelection;\n }\n var submitBtn = panel.querySelector('[data-quiz-v1-submit]');\n if (submitBtn) {\n var nameInput = form.querySelector('[name=\"name\"]');\n var phoneInput = form.querySelector('[name=\"phone\"]');\n var consentInput = form.querySelector('[data-quiz-v1-consent]');\n var isValid = !!(\n nameInput && nameInput.value.trim()\n && phoneInput && phoneInput.value.trim()\n && consentInput && consentInput.checked\n );\n submitBtn.disabled = !isValid;\n }\n }\n function updateIntroState(step) {\n var isFinal = step === totalSteps;\n root.classList.toggle('is-step-4', isFinal);\n root.querySelectorAll('[data-quiz-v1-intro-part=\"default\"]').forEach(function (el) {\n el.hidden = isFinal;\n });\n root.querySelectorAll('[data-quiz-v1-intro-part=\"final\"]').forEach(function (el) {\n el.hidden = !isFinal;\n });\n }\n function goToStep(step) {\n if (step < 1) return;\n var targetPanel = getPanel(step);\n if (!targetPanel) return;\n panels.forEach(function (panel) {\n var panelStep = parseInt(panel.dataset.quizV1StepPanel, 10);\n panel.hidden = panelStep !== step;\n });\n currentStep = step;\n root.dataset.quizV1Step = String(step);\n updateStepLabel(step);\n updateIntroState(step);\n syncStepState(step);\n }\n forms.forEach(function (form) {\n var step = parseInt(form.dataset.quizV1Form, 10);\n var panel = getPanel(step);\n if (!panel) return;\n var continueBtn = panel.querySelector('[data-quiz-v1-continue]');\n var backBtn = panel.querySelector('[data-quiz-v1-back]');\n var submitBtn = panel.querySelector('[data-quiz-v1-submit]');\n var options = form.querySelectorAll('[data-quiz-v1-option]');\n var fields = form.querySelectorAll('[data-quiz-v1-field]');\n var consentInput = form.querySelector('[data-quiz-v1-consent]');\n options.forEach(function (input) {\n input.addEventListener('change', function () {\n syncStepState(step);\n });\n });\n fields.forEach(function (input) {\n input.addEventListener('input', function () {\n syncStepState(step);\n });\n });\n if (consentInput) {\n consentInput.addEventListener('change', function () {\n syncStepState(step);\n });\n }\n if (continueBtn) {\n continueBtn.addEventListener('click', function () {\n if (continueBtn.disabled) return;\n continueBtn.classList.add('is-pressed');\n setTimeout(function () { continueBtn.classList.remove('is-pressed'); }, 160);\n if (getPanel(step + 1)) {\n goToStep(step + 1);\n }\n });\n }\n if (backBtn) {\n backBtn.addEventListener('click', function () {\n if (step <= 1) return;\n goToStep(step - 1);\n });\n }\n syncStepState(step);\n });\n root.addEventListener('quiz-v1:submitted', function () {\n forms.forEach(function (quizForm) {\n quizForm.reset();\n quizForm.querySelectorAll('[data-quiz-v1-option]').forEach(function (option) {\n option.checked = false;\n });\n });\n goToStep(1);\n });\n goToStep(currentStep);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('choosing-teeth\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.choosing-teeth-v1').forEach(function (root) {\n if (root.dataset.choosingTeethV1Ready === 'true') return;\n root.dataset.choosingTeethV1Ready = 'true';\n var stepLabelEl = root.querySelector('[data-choosing-teeth-v1-step-label]');\n var panel1 = root.querySelector('[data-choosing-teeth-v1-panel=\"1\"]');\n var panel2 = root.querySelector('[data-choosing-teeth-v1-panel=\"2\"]');\n var panel3 = root.querySelector('[data-choosing-teeth-v1-panel=\"3\"]');\n var bottom1 = root.querySelector('[data-choosing-teeth-v1-bottom=\"1\"]');\n var bottom2 = root.querySelector('[data-choosing-teeth-v1-bottom=\"2\"]');\n var bottom3 = root.querySelector('[data-choosing-teeth-v1-bottom=\"3\"]');\n var errorEls = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-error]'));\n var next1 = root.querySelector('[data-choosing-teeth-v1-next]');\n var back = root.querySelector('[data-choosing-teeth-v1-back]');\n var next2 = root.querySelector('[data-choosing-teeth-v1-next-step2]');\n var back3 = root.querySelector('[data-choosing-teeth-v1-back-step3]');\n var submitMobile = root.querySelector('[data-choosing-teeth-v1-submit]');\n var formScrim = root.querySelector('[data-choosing-teeth-v1-form-scrim]');\n var rightCol = root.querySelector('.choosing-teeth-v1__right');\n var gridEl = root.querySelector('.choosing-teeth-v1__grid');\n var instruction = root.querySelector('[data-choosing-teeth-v1-instruction]');\n var instructionDesktopHost = root.querySelector('[data-choosing-teeth-v1-instruction-desktop]');\n var instructionMobileHost = root.querySelector('[data-choosing-teeth-v1-instruction-mobile]');\n var formSheetTimer = null;\n var right12 = root.querySelector('[data-choosing-teeth-v1-right=\"12\"]');\n var right3 = root.querySelector('[data-choosing-teeth-v1-right=\"3\"]');\n var concerns = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-concern]'));\n var step3TeethEl = root.querySelector('[data-choosing-teeth-v1-summary-teeth]');\n var step3ConcernsEl = root.querySelector('[data-choosing-teeth-v1-summary-concerns]');\n var step3Form = root.querySelector('.choosing-teeth-v1__form');\n var countEls = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-count]'));\n var jawTabs = Array.prototype.slice.call(root.querySelectorAll('[data-choosing-teeth-v1-jaw]'));\n var teeth = Array.prototype.slice.call(root.querySelectorAll('.choosing-teeth-v1__tooth[data-tooth]'));\n if (!teeth.length) return;\n var STORAGE_KEY = 'choosing-teeth-v1:selected';\n var CONCERNS_KEY = 'choosing-teeth-v1:concerns';\n var selected = new Set();\n var step1Label = String(root.dataset.step1Label || 'Шаг 1 из 3');\n var step2Label = String(root.dataset.step2Label || 'Шаг 2 из 3');\n var step3Label = String(root.dataset.step3Label || 'Шаг 3 из 3');\n var errorPickTooth = String(root.dataset.errorPickTooth || 'Выберите хотя бы один зуб');\n var errorPickConcern = String(root.dataset.errorPickConcern || 'Выберите, что вас беспокоит');\n function setHidden(el, isHidden) {\n if (!el) return;\n if (isHidden) el.setAttribute('hidden', '');\n else el.removeAttribute('hidden');\n }\n function showError(text) {\n errorEls.forEach(function (el) {\n if (!el) return;\n el.textContent = String(text || '');\n el.removeAttribute('hidden');\n });\n }\n function hideError() {\n errorEls.forEach(function (el) {\n if (!el) return;\n el.setAttribute('hidden', '');\n });\n }\n function readConcerns() {\n try {\n var raw = sessionStorage.getItem(CONCERNS_KEY) || '';\n if (!raw) return [];\n return raw.split(',').map(function (s) { return String(s).trim(); }).filter(Boolean);\n } catch (e) {\n return [];\n }\n }\n function writeConcerns(values) {\n try {\n sessionStorage.setItem(CONCERNS_KEY, values.join(','));\n } catch (e) {}\n }\n function pluralRu(n, one, few, many) {\n var num = Math.abs(Number(n) || 0);\n var mod10 = num % 10;\n var mod100 = num % 100;\n if (mod10 === 1 && mod100 !== 11) return one;\n if (mod10 >= 2 && mod10 <= 4 && !(mod100 >= 12 && mod100 <= 14)) return few;\n return many;\n }\n function syncStep3Summary() {\n if (step3TeethEl) step3TeethEl.textContent = String(selected.size);\n if (step3ConcernsEl) {\n var c = concerns.filter(function (el) { return el && el.checked; }).length;\n step3ConcernsEl.textContent = c + ' ' + pluralRu(c, 'проблема', 'проблемы', 'проблем');\n }\n }\n function restoreSheetHome() {\n if (!formScrim || !rightCol) return;\n formScrim.classList.remove('is-open', 'is-mobile-sheet');\n rightCol.classList.remove('is-open', 'is-mobile-sheet');\n setHidden(formScrim, true);\n if (gridEl) gridEl.appendChild(rightCol);\n root.appendChild(formScrim);\n if (!document.querySelector('.popup:not([hidden])')) {\n document.documentElement.classList.remove('is-popup-open');\n }\n document.body.style.overflow = '';\n }\n function resetQuiz() {\n selected.clear();\n concerns.forEach(function (el) {\n if (el) el.checked = false;\n });\n writeConcerns([]);\n hideError();\n root.classList.remove('is-jaw-lower');\n jawTabs.forEach(function (tab) {\n var isActive = String(tab.getAttribute('data-choosing-teeth-v1-jaw') || 'upper') === 'upper';\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n syncUi();\n syncStep2Next();\n setStep(1);\n }\n function setFormOpen(open, options) {\n var isOpen = !!open;\n var instant = !!(options && options.instant);\n var isSheet = rightCol && rightCol.classList.contains('is-mobile-sheet');\n root.classList.toggle('is-form-open', isOpen);\n if (!formScrim || !rightCol) {\n setHidden(formScrim, !isOpen);\n return;\n }\n if (formSheetTimer) {\n clearTimeout(formSheetTimer);\n formSheetTimer = null;\n }\n if (isOpen) {\n document.body.appendChild(formScrim);\n document.body.appendChild(rightCol);\n formScrim.classList.add('is-mobile-sheet');\n rightCol.classList.add('is-mobile-sheet');\n setHidden(formScrim, false);\n document.documentElement.classList.add('is-popup-open');\n document.body.style.overflow = 'hidden';\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n formScrim.classList.add('is-open');\n rightCol.classList.add('is-open');\n });\n });\n return;\n }\n if (!isSheet) {\n setHidden(formScrim, true);\n document.body.style.overflow = '';\n return;\n }\n if (instant) {\n restoreSheetHome();\n return;\n }\n formScrim.classList.remove('is-open');\n rightCol.classList.remove('is-open');\n formSheetTimer = setTimeout(function () {\n formSheetTimer = null;\n restoreSheetHome();\n }, 280);\n }\n function setStep(n) {\n var step = Number(n) || 1;\n root.classList.toggle('is-step-2', step === 2);\n root.classList.toggle('is-step-3', step === 3);\n if (step !== 3) setFormOpen(false);\n setHidden(panel1, step !== 1);\n setHidden(panel2, step !== 2);\n setHidden(panel3, step !== 3);\n setHidden(bottom1, step !== 1);\n setHidden(bottom2, step !== 2);\n setHidden(bottom3, step !== 3);\n setHidden(right12, step === 3);\n setHidden(right3, step !== 3);\n if (stepLabelEl) stepLabelEl.textContent = step === 3 ? step3Label : (step === 2 ? step2Label : step1Label);\n if (step !== 2) hideError();\n if (step === 3) syncStep3Summary();\n if (step === 2) syncStep2Next();\n }\n function readStored() {\n try {\n var raw = sessionStorage.getItem(STORAGE_KEY) || '';\n if (!raw) return [];\n return raw.split(',').map(function (s) { return String(s).trim(); }).filter(Boolean);\n } catch (e) {\n return [];\n }\n }\n function writeStored(values) {\n try {\n sessionStorage.setItem(STORAGE_KEY, values.join(','));\n } catch (e) {}\n }\n function syncUi() {\n teeth.forEach(function (btn) {\n var id = String(btn.dataset.tooth || '');\n var isSelected = id && selected.has(id);\n btn.setAttribute('aria-pressed', isSelected ? 'true' : 'false');\n btn.classList.toggle('is-selected', isSelected);\n });\n countEls.forEach(function (el) { el.textContent = String(selected.size); });\n root.classList.toggle('is-has-selection', selected.size > 0);\n if (next1) next1.disabled = selected.size === 0;\n writeStored(Array.from(selected).sort());\n }\n function countConcerns() {\n return concerns.filter(function (el) { return el && el.checked; }).length;\n }\n var desktopQuizMq = window.matchMedia('(min-width: 1281px)');\n var instructionMobileMq = window.matchMedia('(max-width: 768px)');\n function isDesktopQuiz() {\n return desktopQuizMq.matches;\n }\n function syncInstructionPlacement() {\n if (!instruction || !instructionDesktopHost || !instructionMobileHost) return;\n var target = instructionMobileMq.matches ? instructionMobileHost : instructionDesktopHost;\n if (instruction.parentElement !== target) target.appendChild(instruction);\n }\n function syncStep2Next() {\n if (!next2) return;\n var locked = countConcerns() === 0;\n next2.classList.toggle('is-locked', locked);\n next2.setAttribute('aria-disabled', locked ? 'true' : 'false');\n next2.disabled = locked && !isDesktopQuiz();\n if (!locked) hideError();\n }\n function toggleTooth(btn) {\n var id = String(btn.dataset.tooth || '');\n if (!id) return;\n if (selected.has(id)) selected.delete(id);\n else selected.add(id);\n if (selected.size > 0) hideError();\n syncUi();\n }\n readStored().forEach(function (id) { selected.add(String(id)); });\n var storedConcerns = new Set(readConcerns().map(String));\n concerns.forEach(function (el) {\n var v = String(el.value || '');\n if (v && storedConcerns.has(v)) el.checked = true;\n el.addEventListener('change', function () {\n writeConcerns(concerns.filter(function (x) { return x && x.checked; }).map(function (x) { return String(x.value || ''); }).filter(Boolean));\n syncStep2Next();\n });\n el.addEventListener('click', function () {\n syncStep2Next();\n });\n });\n var optionsBox = root.querySelector('.choosing-teeth-v1__options');\n if (optionsBox) {\n optionsBox.addEventListener('click', function () {\n setTimeout(syncStep2Next, 0);\n });\n }\n syncStep2Next();\n syncInstructionPlacement();\n jawTabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n var jaw = String(tab.getAttribute('data-choosing-teeth-v1-jaw') || 'upper');\n root.classList.toggle('is-jaw-lower', jaw === 'lower');\n jawTabs.forEach(function (item) {\n var isActive = item === tab;\n item.classList.toggle('is-active', isActive);\n item.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n });\n });\n teeth.forEach(function (btn) {\n if (!btn.hasAttribute('aria-pressed')) btn.setAttribute('aria-pressed', 'false');\n btn.addEventListener('click', function () {\n toggleTooth(btn);\n });\n btn.addEventListener('keydown', function (event) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggleTooth(btn);\n }\n });\n });\n syncUi();\n setStep(1);\n if (next1) {\n next1.addEventListener('click', function () {\n if (selected.size < 1) {\n showError(errorPickTooth);\n return;\n }\n hideError();\n setStep(2);\n });\n }\n if (back) {\n back.addEventListener('click', function () {\n hideError();\n setStep(1);\n });\n }\n if (next2) {\n next2.addEventListener('click', function () {\n if (countConcerns() < 1) {\n showError(errorPickConcern);\n return;\n }\n hideError();\n writeConcerns(concerns.filter(function (x) { return x && x.checked; }).map(function (x) { return String(x.value || ''); }).filter(Boolean));\n setStep(3);\n });\n }\n if (typeof desktopQuizMq.addEventListener === 'function') {\n desktopQuizMq.addEventListener('change', syncStep2Next);\n } else if (typeof desktopQuizMq.addListener === 'function') {\n desktopQuizMq.addListener(syncStep2Next);\n }\n if (typeof instructionMobileMq.addEventListener === 'function') {\n instructionMobileMq.addEventListener('change', syncInstructionPlacement);\n } else if (typeof instructionMobileMq.addListener === 'function') {\n instructionMobileMq.addListener(syncInstructionPlacement);\n }\n if (back3) {\n back3.addEventListener('click', function () {\n if (root.classList.contains('is-form-open')) {\n setFormOpen(false);\n return;\n }\n setStep(2);\n });\n }\n if (formScrim) {\n formScrim.addEventListener('click', function () {\n setFormOpen(false);\n });\n }\n document.addEventListener('keydown', function (event) {\n if (event.key === 'Escape' && root.classList.contains('is-form-open')) {\n setFormOpen(false);\n }\n });\n if (submitMobile) {\n submitMobile.addEventListener('click', function () {\n setFormOpen(true);\n });\n }\n if (step3Form) {\n step3Form.addEventListener('submit', function () {\n setTimeout(function () {\n var success = document.querySelector('.popup[data-popup=\"form-success\"]:not([hidden])');\n if (success) {\n setFormOpen(false, { instant: true });\n resetQuiz();\n }\n }, 0);\n });\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v1').forEach(function (root) {\n if (root.dataset.reviewsV1Ready === 'true') return;\n root.dataset.reviewsV1Ready = 'true';\n function updateTextCardOverflow(card) {\n var quote = card.querySelector('.reviews-v1__quote');\n var readMore = card.querySelector('[data-reviews-v1-read-full]');\n var quoteBlock = card.querySelector('.reviews-v1__quote-block');\n if (!quote || !readMore || !quoteBlock) return;\n card.classList.remove('is-overflow');\n readMore.hidden = true;\n quote.style.removeProperty('-webkit-line-clamp');\n var styles = getComputedStyle(root);\n var maxLines = parseInt(styles.getPropertyValue('--reviews-v1-quote-lines'), 10) || 4;\n var lineCount = maxLines;\n var quoteBlockStyles = getComputedStyle(quoteBlock);\n var quoteInnerHeight = quoteBlock.clientHeight - (parseFloat(quoteBlockStyles.paddingBottom) || 0);\n quote.style.display = '-webkit-box';\n quote.style.webkitBoxOrient = 'vertical';\n quote.style.overflow = 'hidden';\n readMore.hidden = false;\n while (lineCount > 1) {\n quote.style.webkitLineClamp = String(lineCount);\n var blockHeight = quote.offsetHeight + readMore.offsetHeight + 8;\n if (blockHeight <= quoteInnerHeight + 1) {\n break;\n }\n lineCount -= 1;\n }\n quote.style.webkitLineClamp = String(lineCount);\n readMore.hidden = true;\n if (quote.scrollHeight > quote.clientHeight + 1) {\n card.classList.add('is-overflow');\n readMore.hidden = false;\n }\n }\n root.querySelectorAll('.reviews-v1__card--text').forEach(function (card) {\n updateTextCardOverflow(card);\n });\n root.addEventListener('click', function (event) {\n var readBtn = event.target.closest('[data-reviews-v1-read-full]');\n if (!readBtn || !root.contains(readBtn)) return;\n event.preventDefault();\n var card = readBtn.closest('.reviews-v1__card--text');\n var template = card ? card.querySelector('.reviews-v1__full-template') : null;\n var quote = card ? card.querySelector('.reviews-v1__quote') : null;\n if (!template || !quote || !window.Popup) return;\n var content = template.content.cloneNode(true);\n var quoteSlot = content.querySelector('[data-reviews-v1-popup-quote]');\n if (!quoteSlot) return;\n var popupQuote = quote.cloneNode(true);\n popupQuote.className = 'popup__review-text';\n popupQuote.style.removeProperty('-webkit-line-clamp');\n quoteSlot.appendChild(popupQuote);\n var popupContent = document.createElement('div');\n popupContent.appendChild(content);\n window.Popup.open('review', { html: popupContent.innerHTML });\n });\n function initSwiper() {\n if (root.dataset.reviewsV1SwiperReady === 'true') return;\n var sliderEl = root.querySelector('.reviews-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n root.dataset.reviewsV1SwiperReady = 'true';\n var carouselEl = root.querySelector('.reviews-v1__carousel');\n if (!carouselEl) return;\n var styles = getComputedStyle(root);\n var mobileSlidesPerView = parseFloat(styles.getPropertyValue('--reviews-v1-mobile-slides-per-view')) || 1.15;\n var paginationEl = root.querySelector('.reviews-v1__pagination');\n function syncDotsPagination(swiper) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n function getCarouselSettings(width) {\n var spaceBetween = width >= 769 ? 40 : 16;\n if (width >= 769) {\n return {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: spaceBetween,\n };\n }\n return {\n slidesPerView: mobileSlidesPerView,\n slidesPerGroup: 1,\n spaceBetween: spaceBetween,\n };\n }\n function applyCarouselSettings(swiper, width) {\n var next = getCarouselSettings(width);\n if (\n swiper.params.slidesPerView === next.slidesPerView &&\n swiper.params.slidesPerGroup === next.slidesPerGroup &&\n swiper.params.spaceBetween === next.spaceBetween\n ) {\n return;\n }\n swiper.params.slidesPerView = next.slidesPerView;\n swiper.params.slidesPerGroup = next.slidesPerGroup;\n swiper.params.spaceBetween = next.spaceBetween;\n swiper.update();\n }\n var initial = getCarouselSettings(carouselEl.clientWidth);\n var swiper = new Swiper(sliderEl, {\n slidesPerView: initial.slidesPerView,\n slidesPerGroup: initial.slidesPerGroup,\n spaceBetween: initial.spaceBetween,\n speed: 320,\n watchOverflow: true,\n loop: false,\n rewind: true,\n navigation: {\n nextEl: root.querySelector('.reviews-v1__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.reviews-v1__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) {\n syncDotsPagination(swiper);\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n },\n resize: function (swiper) {\n syncDotsPagination(swiper);\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n },\n breakpoint: syncDotsPagination,\n },\n });\n requestAnimationFrame(function () {\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n });\n if (typeof ResizeObserver !== 'undefined') {\n var resizeObserver = new ResizeObserver(function () {\n applyCarouselSettings(swiper, carouselEl.clientWidth);\n syncDotsPagination(swiper);\n root.querySelectorAll('.reviews-v1__card--text').forEach(updateTextCardOverflow);\n });\n resizeObserver.observe(carouselEl);\n }\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-plans\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.treatment-plans-v1').forEach(function (root) {\n if (root.dataset.treatmentPlansV1Ready === 'true') return;\n root.dataset.treatmentPlansV1Ready = 'true';\n var sliderEl = root.querySelector('.treatment-plans-v1__slider.swiper');\n var paginationEl = root.querySelector('.treatment-plans-v1__pagination');\n var navRoot = root.querySelector('.treatment-plans-v1__slider-nav');\n var toolbarEl = root.querySelector('.treatment-plans-v1__slider-toolbar');\n var planCount = parseInt(root.dataset.planCount, 10) || 0;\n function getMobileMediaQuery() {\n var bp = getComputedStyle(document.documentElement).getPropertyValue('--bp-md').trim() || '768px';\n return window.matchMedia('(max-width: ' + bp + ')');\n }\n var mobileMq = getMobileMediaQuery();\n var swiperInstance = null;\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (mobileMq.matches) {\n swiper.pagination.disable();\n return;\n }\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n }\n function syncSliderNav(swiper) {\n if (!toolbarEl) return;\n var needsNav = !mobileMq.matches && (planCount > 3 || !swiper.isLocked);\n toolbarEl.classList.toggle('is-visible', needsNav);\n }\n function destroySlider() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function initSlider() {\n if (mobileMq.matches || swiperInstance || !sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 1) return;\n var pageStyles = getComputedStyle(document.documentElement);\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 16,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 769: {\n slidesPerView: 'auto',\n spaceBetween: 40,\n slidesOffsetAfter: 0,\n },\n },\n navigation: navRoot ? {\n nextEl: navRoot.querySelector('.slider-nav__btn--next'),\n prevEl: navRoot.querySelector('.slider-nav__btn--prev'),\n } : false,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (instance) {\n instance.update();\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n resize: function (instance) {\n instance.update();\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n },\n breakpoint: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n update: syncSliderNav,\n lock: syncSliderNav,\n unlock: syncSliderNav,\n },\n });\n syncSliderNav(swiperInstance);\n if (navRoot) {\n navRoot.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n }\n function syncSliderMode() {\n destroySlider();\n syncAccordionVisibility();\n if (mobileMq.matches) return;\n requestAnimationFrame(function () {\n requestAnimationFrame(initSlider);\n });\n }\n var accordionItems = root.querySelectorAll('.treatment-plans-v1__card');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n function shouldAnimateAccordion() {\n return mobileMq.matches && !reduceMotionMq.matches;\n }\n function syncAccordionVisibility() {\n accordionItems.forEach(function (item) {\n var trigger = item.querySelector('[data-treatment-plans-v1-trigger]');\n var panel = item.querySelector('.treatment-plans-v1__plan-panel');\n if (!panel) return;\n if (!mobileMq.matches) {\n panel.hidden = false;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n return;\n }\n if (!item.classList.contains('is-open')) {\n panel.hidden = true;\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n }\n });\n }\n function scrollOpenedAccordionItem(item) {\n if (!mobileMq.matches) return;\n var trigger = item.querySelector('[data-treatment-plans-v1-trigger]');\n if (!trigger) return;\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n var margin = 16;\n var rect = trigger.getBoundingClientRect();\n var offset = 0;\n if (rect.top < margin) {\n offset = rect.top - margin;\n } else if (rect.bottom > window.innerHeight - margin) {\n offset = rect.bottom - window.innerHeight + margin;\n }\n if (offset !== 0) {\n window.scrollBy({ top: offset, behavior: 'smooth' });\n }\n });\n });\n }\n function closeAccordionItem(entry) {\n var entryTrigger = entry.querySelector('[data-treatment-plans-v1-trigger]');\n var entryPanel = entry.querySelector('.treatment-plans-v1__plan-panel');\n if (!entryPanel || !entry.classList.contains('is-open')) {\n return;\n }\n entry.classList.remove('is-open');\n if (entryTrigger) entryTrigger.setAttribute('aria-expanded', 'false');\n if (!shouldAnimateAccordion()) {\n entryPanel.hidden = true;\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n entryPanel.removeEventListener('transitionend', onEnd);\n entryPanel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== entryPanel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n entryPanel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var trigger = item.querySelector('[data-treatment-plans-v1-trigger]');\n var panel = item.querySelector('.treatment-plans-v1__plan-panel');\n if (!panel) return;\n panel.hidden = false;\n if (shouldAnimateAccordion()) {\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n scrollOpenedAccordionItem(item);\n });\n });\n return;\n }\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n scrollOpenedAccordionItem(item);\n }\n root.querySelectorAll('[data-treatment-plans-v1-trigger]').forEach(function (trigger) {\n trigger.addEventListener('click', function () {\n if (!mobileMq.matches) return;\n var item = trigger.closest('.treatment-plans-v1__card');\n if (!item) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeAccordionItem(item);\n return;\n }\n accordionItems.forEach(function (entry) {\n if (entry !== item) {\n closeAccordionItem(entry);\n }\n });\n openAccordionItem(item);\n });\n });\n function bootSwiper() {\n syncSliderMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n mobileMq.addEventListener('change', syncSliderMode);\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('brands\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.brands-v2').forEach(function (root) {\n if (root.dataset.brandsV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.brandsV2Ready === 'true') return;\n root.dataset.brandsV2Ready = 'true';\n var sliderEl = root.querySelector('.brands-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.brands-v2__pagination');\n var navPrev = root.querySelector('.brands-v2__controls .slider-nav__btn--prev');\n var navNext = root.querySelector('.brands-v2__controls .slider-nav__btn--next');\n new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n loop: true,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n });\n root.querySelectorAll('.brands-v2__controls .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('utp-in-numbers\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('gallery\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.gallery-v1').forEach(function (root) {\n if (root.dataset.galleryV1Ready === 'true') return;\n root.dataset.galleryV1Ready = 'true';\n if (typeof Swiper === 'undefined') return;\n var heroEl = root.querySelector('.gallery-v1__hero.swiper');\n if (!heroEl) return;\n var heroSlides = heroEl.querySelectorAll('.swiper-slide');\n if (heroSlides.length < 2) return;\n var heroLoader = root.querySelector('[data-gallery-v1-hero-loader]');\n var paginationEl = root.querySelector('.gallery-v1__pagination');\n var navPrev = root.querySelector('.slider-nav__btn--prev');\n var navNext = root.querySelector('.slider-nav__btn--next');\n var heroLoadId = 0;\n var heroTouchMq = window.matchMedia('(max-width: 1360px)');\n function isHeroTouchEnabled() {\n return heroTouchMq.matches;\n }\n function isMobile() {\n return window.matchMedia('(max-width: 768px)').matches;\n }\n function setHeroLoading(loading) {\n heroEl.classList.toggle('is-loading', !!loading);\n if (!heroLoader) return;\n if (loading) {\n heroLoader.classList.remove('is-hidden');\n } else {\n heroLoader.classList.add('is-hidden');\n }\n }\n function getActiveHeroImg(heroSwiper) {\n var slide = heroSwiper && heroSwiper.slides ? heroSwiper.slides[heroSwiper.activeIndex] : null;\n return slide ? slide.querySelector('img') : null;\n }\n function setActiveByIndex(index) {\n var thumbs = root.querySelectorAll('[data-gallery-v1-thumb]');\n thumbs.forEach(function (btn) {\n var btnIndex = parseInt(btn.dataset.galleryV1Index || '0', 10);\n var active = btnIndex === index;\n btn.classList.toggle('is-active', active);\n if (active) {\n btn.setAttribute('aria-current', 'true');\n } else {\n btn.removeAttribute('aria-current');\n }\n });\n }\n function initSwiper() {\n if (root.dataset.galleryV1SwiperReady === 'true') return;\n if (typeof Swiper === 'undefined') return;\n var heroSwiper = new Swiper(heroEl, {\n initialSlide: 0,\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n loop: true,\n watchOverflow: true,\n roundLengths: true,\n effect: 'fade',\n fadeEffect: {\n crossFade: true,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n allowTouchMove: isHeroTouchEnabled(),\n on: {\n init: function (s) {\n setActiveByIndex(s.realIndex || 0);\n watchActiveHeroImage(s);\n },\n slideChange: function (s) {\n var index = s.realIndex || 0;\n setActiveByIndex(index);\n watchActiveHeroImage(s);\n },\n },\n });\n function watchActiveHeroImage(swiper) {\n var img = getActiveHeroImg(swiper);\n heroLoadId += 1;\n var reqId = heroLoadId;\n if (!img) {\n setHeroLoading(false);\n return;\n }\n if (img.complete && img.naturalWidth > 0) {\n setHeroLoading(false);\n return;\n }\n setHeroLoading(true);\n function done() {\n if (reqId !== heroLoadId) return;\n setHeroLoading(false);\n }\n img.addEventListener('load', done, { once: true });\n img.addEventListener('error', done, { once: true });\n }\n watchActiveHeroImage(heroSwiper);\n function syncHeroTouchMode() {\n heroSwiper.allowTouchMove = isHeroTouchEnabled();\n }\n if (typeof heroTouchMq.addEventListener === 'function') {\n heroTouchMq.addEventListener('change', syncHeroTouchMode);\n } else if (typeof heroTouchMq.addListener === 'function') {\n heroTouchMq.addListener(syncHeroTouchMode);\n }\n var thumbsEl = root.querySelector('.gallery-v1__slider.swiper');\n var thumbsSwiper = null;\n if (thumbsEl) {\n var thumbSlides = thumbsEl.querySelectorAll('.swiper-slide');\n if (thumbSlides.length > 1) {\n thumbsSwiper = new Swiper(thumbsEl, {\n initialSlide: 0,\n slidesPerView: 'auto',\n spaceBetween: 16,\n speed: 320,\n loop: true,\n watchOverflow: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n breakpoints: {\n 0: { spaceBetween: 12 },\n 1200: { spaceBetween: 16 },\n },\n on: {\n init: function (s) {\n if (isMobile()) return;\n if (typeof heroSwiper.slideToLoop === 'function') heroSwiper.slideToLoop(s.realIndex || 0, 0);\n setActiveByIndex(s.realIndex || 0);\n watchActiveHeroImage(heroSwiper);\n },\n slideChange: function (s) {\n if (isMobile()) return;\n if (typeof heroSwiper.slideToLoop === 'function') heroSwiper.slideToLoop(s.realIndex || 0, 0);\n setActiveByIndex(s.realIndex || 0);\n watchActiveHeroImage(heroSwiper);\n },\n },\n });\n }\n }\n root.addEventListener('click', function (event) {\n var btn = event.target.closest('[data-gallery-v1-thumb]');\n if (!btn || !root.contains(btn)) return;\n event.preventDefault();\n var index = parseInt(btn.dataset.galleryV1Index || '0', 10) || 0;\n var thumbsCount = root.querySelectorAll('[data-gallery-v1-thumb]').length || 0;\n if (thumbsSwiper && thumbsSwiper.params && thumbsSwiper.params.loop && thumbsCount > 1) {\n var current = thumbsSwiper.realIndex || 0;\n var n = thumbsCount;\n var forward = (index - current + n) % n;\n var backward = (current - index + n) % n;\n if (forward !== 0) {\n if (backward < forward) {\n if (typeof thumbsSwiper.slideToLoop === 'function') thumbsSwiper.slideToLoop(index, 0);\n } else {\n thumbsSwiper.slideTo(thumbsSwiper.activeIndex + forward, thumbsSwiper.params.speed || 320);\n }\n }\n } else if (thumbsSwiper) {\n thumbsSwiper.slideTo(index, thumbsSwiper.params.speed || 320);\n }\n if (typeof heroSwiper.slideToLoop === 'function') {\n heroSwiper.slideToLoop(index, 0);\n } else {\n heroSwiper.slideTo(index, 0);\n }\n setActiveByIndex(index);\n watchActiveHeroImage(heroSwiper);\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n root.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n root.dataset.galleryV1SwiperReady = 'true';\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('about\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.about-v1').forEach(function (root) {\n if (root.dataset.aboutV1Ready === 'true') return;\n root.dataset.aboutV1Ready = 'true';\n var scrollRoot = root.querySelector('.about-v1__scroll');\n var viewport = root.querySelector('.about-v1__copy-viewport');\n var track = root.querySelector('.about-v1__scrollbar');\n var thumb = root.querySelector('.about-v1__scrollbar-thumb');\n var toggleBtn = root.querySelector('[data-about-v1-toggle]');\n var toggleLabel = root.querySelector('[data-about-v1-toggle-label]');\n if (!scrollRoot || !viewport || !track || !thumb) return;\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var mobileMq = window.matchMedia('(max-width: 1200px)');\n function getToggleLabels() {\n if (!toggleBtn) return { expand: '', collapse: '' };\n return {\n expand: toggleBtn.getAttribute('data-expand-label') || '',\n collapse: toggleBtn.getAttribute('data-collapse-label') || ''\n };\n }\n function updateToggleUi() {\n if (!toggleBtn || !toggleLabel) return;\n var labels = getToggleLabels();\n var isExpanded = scrollRoot.classList.contains('is-expanded');\n toggleLabel.textContent = isExpanded ? labels.collapse : labels.expand;\n toggleBtn.setAttribute('aria-expanded', isExpanded ? 'true' : 'false');\n }\n function measureLineHeight(el) {\n var styles = getComputedStyle(el);\n var lineHeight = parseFloat(styles.lineHeight);\n if (!isNaN(lineHeight)) return lineHeight;\n return parseFloat(styles.fontSize) * 1.43;\n }\n function blockOffsetTop(block, container) {\n return block.getBoundingClientRect().top - container.getBoundingClientRect().top;\n }\n function blockOffsetBottom(block, container) {\n return block.getBoundingClientRect().bottom - container.getBoundingClientRect().top;\n }\n function computeCollapsedHeight(copyBody, targetMax) {\n var blocks = copyBody.querySelectorAll('.about-v1__lead, .about-v1__text p, .about-v1__closing');\n if (!blocks.length) return targetMax;\n var snapped = 0;\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n var top = blockOffsetTop(block, copyBody);\n var bottom = blockOffsetBottom(block, copyBody);\n if (bottom <= targetMax + 0.5) {\n snapped = bottom;\n continue;\n }\n if (top >= targetMax) break;\n var lineHeight = measureLineHeight(block);\n var lines = Math.max(1, Math.floor((targetMax - top) \/ lineHeight));\n snapped = top + lines * lineHeight;\n break;\n }\n if (snapped <= 0 && blocks[0]) {\n snapped = blockOffsetTop(blocks[0], copyBody) + measureLineHeight(blocks[0]);\n }\n return Math.ceil(snapped);\n }\n function applyMobileCollapse() {\n if (!mobileMq.matches) {\n scrollRoot.classList.remove('is-collapsible', 'is-collapsed', 'is-expanded');\n scrollRoot.style.removeProperty('--about-v1-mobile-collapsed-max');\n if (toggleBtn) toggleBtn.hidden = true;\n return;\n }\n var copyBody = root.querySelector('.about-v1__copy-body');\n if (!copyBody) return;\n var targetMax = parseFloat(getComputedStyle(root).getPropertyValue('--about-v1-mobile-collapse-target')) || 320;\n scrollRoot.classList.remove('is-collapsed', 'is-expanded');\n scrollRoot.style.removeProperty('--about-v1-mobile-collapsed-max');\n scrollRoot.style.removeProperty('max-height');\n var fullHeight = copyBody.scrollHeight;\n var collapsedHeight = computeCollapsedHeight(copyBody, targetMax);\n if (fullHeight <= collapsedHeight + 1) {\n scrollRoot.classList.remove('is-collapsible');\n if (toggleBtn) toggleBtn.hidden = true;\n return;\n }\n scrollRoot.style.setProperty('--about-v1-mobile-collapsed-max', collapsedHeight + 'px');\n scrollRoot.classList.add('is-collapsible');\n scrollRoot.classList.add('is-collapsed');\n if (toggleBtn) toggleBtn.hidden = true;\n }\n function applyScrollCap() {\n if (!desktopMq.matches) {\n root.style.removeProperty('--about-v1-scroll-max');\n scrollRoot.style.removeProperty('height');\n scrollRoot.style.removeProperty('max-height');\n applyMobileCollapse();\n return;\n }\n scrollRoot.classList.remove('is-collapsible', 'is-collapsed', 'is-expanded');\n if (toggleBtn) toggleBtn.hidden = true;\n var profile = root.querySelector('.about-v1__profile');\n var copyHead = root.querySelector('.about-v1__copy-head');\n var moreLink = root.querySelector('.about-v1__more');\n var main = root.querySelector('.about-v1__main');\n if (!profile || !copyHead || !main) return;\n var mainGap = parseFloat(getComputedStyle(main).rowGap || getComputedStyle(main).gap) || 0;\n var moreHeight = moreLink ? moreLink.getBoundingClientRect().height : 0;\n var scrollMax = Math.round(\n profile.getBoundingClientRect().height\n - copyHead.getBoundingClientRect().height\n - moreHeight\n - mainGap * 2\n );\n if (scrollMax > 0) {\n root.style.setProperty('--about-v1-scroll-max', scrollMax + 'px');\n }\n }\n function syncScrollUi() {\n if (!desktopMq.matches) return;\n var maxScroll = viewport.scrollHeight - viewport.clientHeight;\n if (maxScroll <= 1) {\n scrollRoot.classList.add('is-static');\n scrollRoot.classList.add('is-at-bottom');\n thumb.style.height = '';\n thumb.style.transform = '';\n return;\n }\n scrollRoot.classList.remove('is-static');\n scrollRoot.classList.toggle('is-at-bottom', viewport.scrollTop >= maxScroll - 1);\n var trackHeight = track.clientHeight;\n var thumbHeight = Math.max(48, (viewport.clientHeight \/ viewport.scrollHeight) * trackHeight);\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var thumbOffset = maxScroll > 0 ? (viewport.scrollTop \/ maxScroll) * maxThumbOffset : 0;\n thumb.style.height = thumbHeight + 'px';\n thumb.style.transform = 'translateY(' + thumbOffset + 'px)';\n }\n function scrollFromTrackPointer(clientY) {\n if (!desktopMq.matches) return;\n var maxScroll = viewport.scrollHeight - viewport.clientHeight;\n var trackHeight = track.clientHeight;\n var thumbHeight = thumb.offsetHeight;\n if (maxScroll <= 1 || trackHeight <= 0) return;\n var rect = track.getBoundingClientRect();\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var pointerOffset = clientY - rect.top - thumbHeight \/ 2;\n var thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerOffset));\n var ratio = maxThumbOffset > 0 ? thumbOffset \/ maxThumbOffset : 0;\n viewport.scrollTop = ratio * maxScroll;\n }\n var activePointerId = null;\n function onPointerMove(event) {\n if (event.pointerId !== activePointerId) return;\n event.preventDefault();\n scrollFromTrackPointer(event.clientY);\n }\n function stopPointerDrag(event) {\n if (event && activePointerId !== null && event.pointerId !== activePointerId) return;\n activePointerId = null;\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', stopPointerDrag);\n document.removeEventListener('pointercancel', stopPointerDrag);\n }\n function startPointerDrag(event) {\n if (!desktopMq.matches) return;\n activePointerId = event.pointerId;\n event.preventDefault();\n scrollFromTrackPointer(event.clientY);\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', stopPointerDrag);\n document.addEventListener('pointercancel', stopPointerDrag);\n }\n var syncFrame = null;\n function scheduleSyncAll() {\n if (syncFrame !== null) return;\n syncFrame = window.requestAnimationFrame(function () {\n syncFrame = null;\n syncAll();\n });\n }\n if (window.ResizeObserver) {\n var copyBody = root.querySelector('.about-v1__copy-body');\n var profile = root.querySelector('.about-v1__profile');\n var copyHead = root.querySelector('.about-v1__copy-head');\n var resizeObserver = new ResizeObserver(scheduleSyncAll);\n if (copyBody) resizeObserver.observe(copyBody);\n if (profile) resizeObserver.observe(profile);\n if (copyHead) resizeObserver.observe(copyHead);\n resizeObserver.observe(viewport);\n } else {\n window.addEventListener('resize', scheduleSyncAll);\n }\n if (toggleBtn) {\n toggleBtn.addEventListener('click', function () {\n if (mobileMq.matches) return;\n var willExpand = scrollRoot.classList.contains('is-collapsed');\n scrollRoot.classList.toggle('is-collapsed', !willExpand);\n scrollRoot.classList.toggle('is-expanded', willExpand);\n updateToggleUi();\n });\n }\n function syncAll() {\n applyScrollCap();\n syncScrollUi();\n }\n viewport.addEventListener('scroll', syncScrollUi, { passive: true });\n track.addEventListener('pointerdown', startPointerDrag);\n thumb.addEventListener('pointerdown', startPointerDrag);\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', scheduleSyncAll);\n mobileMq.addEventListener('change', scheduleSyncAll);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(scheduleSyncAll);\n mobileMq.addListener(scheduleSyncAll);\n }\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(scheduleSyncAll);\n }\n syncAll();\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v2').forEach(function (root) {\n if (root.dataset.newsV2Ready === 'true') return;\n root.dataset.newsV2Ready = 'true';\n var sliderEl = root.querySelector('.news-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.news-v2__pagination');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function destroySlider() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function initSlider() {\n if (!mobileMq.matches || swiperInstance) return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n });\n }\n function syncSliderMode() {\n if (mobileMq.matches) {\n initSlider();\n } else {\n destroySlider();\n }\n }\n function bootSwiper() {\n syncSliderMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncSliderMode);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncSliderMode);\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.promo-v2').forEach(function (root) {\n if (root.dataset.promoV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.promoV2Ready === 'true') return;\n root.dataset.promoV2Ready = 'true';\n var sliderEl = root.querySelector('.promo-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.promo-v2__pagination');\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 0,\n speed: 360,\n autoHeight: false,\n loop: slides.length > 1,\n navigation: {\n nextEl: root.querySelector('.promo-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.promo-v2__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) { syncDotsPagination(swiper, true); },\n resize: function (swiper) { syncDotsPagination(swiper, false); },\n breakpoint: function (swiper) { syncDotsPagination(swiper, true); },\n },\n });\n root.querySelectorAll('.promo-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-1');\n document.addEventListener('click', function (event) {\n var btn = event.target.closest('.cta-v1 .btn');\n if (!btn) return;\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('navigation\/variant-1');\n document.querySelectorAll('[data-navigation-v1]').forEach(function (root) {\n if (root.dataset.navigationV1Ready === 'true') return;\n root.dataset.navigationV1Ready = 'true';\n var links = Array.prototype.slice.call(root.querySelectorAll('[data-navigation-v1-link]'));\n var scrollEl = root.querySelector('[data-navigation-v1-scroll]');\n var prevBtn = root.querySelector('[data-navigation-v1-prev]');\n var nextBtn = root.querySelector('[data-navigation-v1-next]');\n var mobileTrigger = root.querySelector('[data-navigation-v1-mobile-trigger]');\n var mobilePanel = root.querySelector('[data-navigation-v1-mobile-panel]');\n var mobileTriggerTitle = root.querySelector('[data-navigation-v1-mobile-trigger-title]');\n var mobileTriggerIcon = root.querySelector('[data-navigation-v1-mobile-trigger-icon]');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var sections = [];\n var scrollSpyLock = false;\n var scrollSpyTimer = 0;\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n function parseHash(href) {\n try {\n return new URL(href, window.location.href).hash.replace(\/^#\/, '');\n } catch (e) {\n return '';\n }\n }\n function collectSections() {\n sections = [];\n var seenIds = {};\n links.forEach(function (link) {\n var id = parseHash(link.getAttribute('href') || '');\n if (!id || seenIds[id]) return;\n var el = document.getElementById(id);\n if (!el) return;\n seenIds[id] = true;\n sections.push({ id: id, el: el, link: link });\n });\n }\n function stickyTopOffset() {\n var styles = getComputedStyle(document.documentElement);\n var navH = parseFloat(styles.getPropertyValue('--site-nav-h')) || 0;\n var sticky = parseFloat(styles.getPropertyValue('--site-sticky-offset')) || 0;\n return Math.max(navH, sticky);\n }\n function scrollOffset() {\n var space = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--space-24')) || 24;\n return stickyTopOffset() + root.getBoundingClientRect().height + space;\n }\n function publishPageNavOffset() {\n document.documentElement.style.setProperty('--page-nav-offset', root.getBoundingClientRect().height + 'px');\n }\n function applyScrollMargins() {\n var offset = scrollOffset();\n sections.forEach(function (entry) {\n entry.el.style.scrollMarginTop = offset + 'px';\n });\n }\n function syncOverflowState() {\n root.classList.remove('navigation-v1--overflowing');\n root.classList.remove('navigation-v1--at-start');\n root.classList.remove('navigation-v1--at-end');\n if (mobileMq.matches) {\n syncOverflowControls();\n return;\n }\n if (!scrollEl) return;\n if (scrollEl.scrollWidth > scrollEl.clientWidth + 1) {\n root.classList.add('navigation-v1--overflowing');\n }\n syncOverflowControls();\n }\n function setMobileOpen(open) {\n if (!mobileTrigger || !mobilePanel) return;\n root.classList.toggle('navigation-v1--mobile-open', open);\n mobileTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');\n mobilePanel.hidden = !open;\n }\n function closeMobilePanel() {\n setMobileOpen(false);\n }\n function syncMobileTrigger() {\n if (!mobileTriggerTitle || !mobileMq.matches) return;\n var activeLink = null;\n links.some(function (link) {\n if (link.classList.contains('is-active')) {\n activeLink = link;\n return true;\n }\n return false;\n });\n if (!activeLink && links.length) {\n activeLink = links[0];\n }\n if (!activeLink) return;\n var titleNode = activeLink.querySelector('.navigation-v1__title');\n if (titleNode) {\n mobileTriggerTitle.textContent = titleNode.textContent || '';\n }\n if (mobileTriggerIcon) {\n var iconNode = activeLink.querySelector('.navigation-v1__icon-img');\n var iconSrc = iconNode ? (iconNode.getAttribute('src') || '') : '';\n if (iconSrc) {\n mobileTriggerIcon.src = iconSrc;\n mobileTriggerIcon.hidden = false;\n } else {\n mobileTriggerIcon.removeAttribute('src');\n mobileTriggerIcon.hidden = true;\n }\n }\n }\n function syncOverflowControls() {\n if (!scrollEl) return;\n if (mobileMq.matches) {\n root.classList.remove('navigation-v1--overflowing');\n root.classList.remove('navigation-v1--at-start');\n root.classList.remove('navigation-v1--at-end');\n if (prevBtn) prevBtn.hidden = true;\n if (nextBtn) nextBtn.hidden = true;\n return;\n }\n var canScroll = scrollEl.scrollWidth > scrollEl.clientWidth + 1;\n var isAtStart = !canScroll || scrollEl.scrollLeft <= 2;\n var isAtEnd = !canScroll || (scrollEl.scrollLeft + scrollEl.clientWidth >= scrollEl.scrollWidth - 2);\n root.classList.toggle('navigation-v1--overflowing', canScroll);\n root.classList.toggle('navigation-v1--at-start', isAtStart);\n root.classList.toggle('navigation-v1--at-end', isAtEnd);\n if (prevBtn) {\n prevBtn.hidden = !canScroll || isAtStart;\n }\n if (nextBtn) {\n nextBtn.hidden = !canScroll || isAtEnd;\n }\n }\n function setActiveLink(id) {\n links.forEach(function (link) {\n var active = parseHash(link.getAttribute('href') || '') === id;\n link.classList.toggle('is-active', active);\n var item = link.closest('.navigation-v1__item');\n if (item) {\n item.classList.toggle('is-active', active);\n }\n if (active) {\n link.setAttribute('aria-current', 'location');\n } else {\n link.removeAttribute('aria-current');\n }\n });\n syncMobileTrigger();\n }\n function scrollToEl(el) {\n if (!el) return;\n scrollSpyLock = true;\n window.clearTimeout(scrollSpyTimer);\n var top = el.getBoundingClientRect().top + window.pageYOffset - scrollOffset();\n top = Math.max(0, top);\n if (reduceMotionMq.matches) {\n (document.scrollingElement || document.documentElement).scrollTop = top;\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 50);\n return;\n }\n window.scrollTo({ top: top, behavior: 'smooth' });\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 700);\n }\n function scrollToHash(hash, updateHistory) {\n hash = (hash || '').replace(\/^#\/, '');\n if (!hash) return;\n var el = document.getElementById(hash);\n if (!el) return;\n if (updateHistory && history.replaceState) {\n history.replaceState(null, '', '#' + hash);\n }\n setActiveLink(hash);\n requestAnimationFrame(function () {\n scrollToEl(el);\n });\n }\n function initActiveFromHash() {\n var hash = (window.location.hash || '').replace(\/^#\/, '');\n if (hash && document.getElementById(hash)) {\n setActiveLink(hash);\n return;\n }\n if (sections.length) {\n setActiveLink(sections[0].id);\n }\n }\n collectSections();\n syncOverflowState();\n publishPageNavOffset();\n applyScrollMargins();\n initActiveFromHash();\n syncMobileTrigger();\n if (mobileTrigger && mobilePanel) {\n mobileTrigger.addEventListener('click', function () {\n if (!mobileMq.matches) return;\n setMobileOpen(mobilePanel.hidden);\n });\n document.addEventListener('click', function (event) {\n if (!mobileMq.matches || mobilePanel.hidden) return;\n if (root.contains(event.target)) return;\n closeMobilePanel();\n });\n document.addEventListener('keydown', function (event) {\n if (event.key === 'Escape') {\n closeMobilePanel();\n }\n });\n mobileMq.addEventListener('change', function () {\n closeMobilePanel();\n syncOverflowState();\n syncMobileTrigger();\n publishPageNavOffset();\n });\n }\n if (prevBtn && scrollEl) {\n prevBtn.addEventListener('click', function () {\n var delta = Math.max(scrollEl.clientWidth * 0.8, 240);\n scrollEl.scrollBy({\n left: -delta,\n behavior: reduceMotionMq.matches ? 'auto' : 'smooth'\n });\n });\n }\n if (nextBtn && scrollEl) {\n nextBtn.addEventListener('click', function () {\n var delta = Math.max(scrollEl.clientWidth * 0.8, 240);\n scrollEl.scrollBy({\n left: delta,\n behavior: reduceMotionMq.matches ? 'auto' : 'smooth'\n });\n });\n }\n if (scrollEl) {\n scrollEl.addEventListener('scroll', syncOverflowControls, { passive: true });\n }\n links.forEach(function (link) {\n link.addEventListener('click', function (event) {\n var url;\n try {\n url = new URL(link.href, window.location.href);\n } catch (e) {\n return;\n }\n if (url.pathname !== window.location.pathname) return;\n var el = document.getElementById(url.hash.replace(\/^#\/, ''));\n if (!el) return;\n event.preventDefault();\n closeMobilePanel();\n scrollToHash(url.hash, true);\n });\n });\n if ('IntersectionObserver' in window && sections.length) {\n var observer = new IntersectionObserver(function (entries) {\n if (scrollSpyLock) return;\n var visible = entries\n .filter(function (entry) { return entry.isIntersecting; })\n .sort(function (a, b) { return b.intersectionRatio - a.intersectionRatio; });\n if (!visible.length) return;\n var id = visible[0].target.id;\n if (!id) return;\n setActiveLink(id);\n }, {\n root: null,\n rootMargin: '-' + scrollOffset() + 'px 0px -55% 0px',\n threshold: [0, 0.1, 0.25, 0.5, 0.75]\n });\n sections.forEach(function (entry) {\n observer.observe(entry.el);\n });\n }\n function onResize() {\n syncOverflowState();\n publishPageNavOffset();\n applyScrollMargins();\n syncMobileTrigger();\n if (!mobileMq.matches) {\n closeMobilePanel();\n }\n }\n window.addEventListener('resize', onResize);\n window.addEventListener('hashchange', function () {\n scrollToHash(window.location.hash, false);\n });\n function scheduleHashScroll() {\n if (!(window.location.hash || '').replace(\/^#\/, '')) return;\n var run = function () {\n scrollToHash(window.location.hash, false);\n requestAnimationFrame(function () {\n scrollToHash(window.location.hash, false);\n });\n };\n run();\n window.setTimeout(run, 150);\n }\n if (document.readyState === 'complete') {\n scheduleHashScroll();\n } else {\n window.addEventListener('load', scheduleHashScroll);\n }\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('services\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.services-v4').forEach(function (root) {\n if (root.dataset.servicesV4Ready === 'true') return;\n root.dataset.servicesV4Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-services-v4-item]'));\n var emptyEl = root.querySelector('[data-services-v4-empty]');\n var chips = root.querySelectorAll('[data-services-v4-filter]');\n var select = root.querySelector('[data-services-v4-select]');\n var moreBtn = root.querySelector('[data-services-v4-more]');\n var searchInput = root.querySelector('[data-services-v4-search]');\n var mobileLimit = parseInt(root.dataset.servicesV4MobileLimit || '8', 10) || 8;\n var desktopRows = parseInt(root.dataset.servicesV4DesktopRows || '2', 10) || 2;\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var tabletMq = window.matchMedia('(max-width: 1360px)');\n var activeKey = 'all';\n var searchQuery = '';\n var expanded = false;\n function getVisibleLimit() {\n if (mobileMq.matches) {\n return mobileLimit;\n }\n var cols = parseInt(getComputedStyle(root).getPropertyValue('--services-v4-grid-cols'), 10) || 4;\n return cols * desktopRows;\n }\n function matchesFilter(item) {\n var itemFilters = (item.dataset.servicesV4Filters || '')\n .split(',')\n .map(function (value) { return value.trim(); })\n .filter(Boolean);\n return activeKey === 'all' || itemFilters.indexOf(activeKey) !== -1;\n }\n function matchesSearch(item) {\n if (!searchQuery) return true;\n var haystack = (item.getAttribute('data-services-v4-search-item') || '').toLowerCase();\n return haystack.indexOf(searchQuery) !== -1;\n }\n function matchesItem(item) {\n return matchesFilter(item) && matchesSearch(item);\n }\n function syncMoreButton(matchedCount) {\n if (!moreBtn) return;\n var limit = getVisibleLimit();\n moreBtn.hidden = expanded || matchedCount <= limit;\n }\n function syncEmpty(matchedCount) {\n if (!emptyEl) return;\n emptyEl.hidden = matchedCount > 0;\n var message = searchQuery\n ? (emptyEl.getAttribute('data-services-v4-empty-search') || '')\n : (emptyEl.getAttribute('data-services-v4-empty-filter') || '');\n if (message) {\n emptyEl.textContent = message;\n }\n }\n function syncVisibility() {\n var limit = getVisibleLimit();\n var matchedCount = 0;\n var visibleIndex = 0;\n items.forEach(function (item) {\n if (matchesItem(item)) {\n matchedCount += 1;\n }\n });\n items.forEach(function (item) {\n if (!matchesItem(item)) {\n item.hidden = true;\n item.classList.add('is-collapsed');\n return;\n }\n var collapsed = !expanded && visibleIndex >= limit;\n item.hidden = collapsed;\n item.classList.toggle('is-collapsed', collapsed);\n if (!collapsed) {\n visibleIndex += 1;\n }\n });\n syncEmpty(matchedCount);\n syncMoreButton(matchedCount);\n }\n function setActiveFilter(key) {\n activeKey = key || 'all';\n expanded = searchQuery !== '';\n chips.forEach(function (btn) {\n var isActive = (btn.dataset.servicesV4Filter || 'all') === activeKey;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n if (select && select.value !== activeKey) {\n select.value = activeKey;\n }\n syncVisibility();\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n setActiveFilter(chip.dataset.servicesV4Filter || 'all');\n });\n });\n if (select) {\n select.addEventListener('change', function () {\n setActiveFilter(select.value || 'all');\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n searchQuery = (searchInput.value || '').trim().toLowerCase();\n expanded = searchQuery !== '';\n syncVisibility();\n });\n }\n function bindMq(mq) {\n if (typeof mq.addEventListener === 'function') {\n mq.addEventListener('change', function () {\n if (expanded) return;\n syncVisibility();\n });\n } else if (typeof mq.addListener === 'function') {\n mq.addListener(function () {\n if (expanded) return;\n syncVisibility();\n });\n }\n }\n bindMq(mobileMq);\n bindMq(tabletMq);\n setActiveFilter('all');\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.promo-v1').forEach(function (root) {\n if (root.dataset.promoV1Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.promoV1Ready === 'true') return;\n root.dataset.promoV1Ready = 'true';\n var sliderEl = root.querySelector('.promo-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.promo-v1__pagination');\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: 1,\n slidesPerGroup: 2,\n spaceBetween: 16,\n speed: 320,\n autoHeight: false,\n loop: false,\n grid: {\n rows: 2,\n fill: 'row',\n },\n breakpoints: {\n 769: {\n slidesPerView: 2,\n slidesPerGroup: 2,\n spaceBetween: 40,\n grid: {\n rows: 1,\n },\n loop: slides.length > 2,\n },\n },\n navigation: {\n nextEl: root.querySelector('.promo-v1__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.promo-v1__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) { syncDotsPagination(swiper, true); },\n resize: function (swiper) { syncDotsPagination(swiper, false); },\n breakpoint: function (swiper) { syncDotsPagination(swiper, true); },\n },\n });\n root.querySelectorAll('.promo-v1__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-1');\n var root = document.querySelector('[data-text-v1]');\n if (!root) return;\n var btn = root.querySelector('[data-text-v1-toggle]');\n var spoiler = root.querySelector('[data-text-v1-spoiler]');\n if (!btn || !spoiler) return;\n btn.addEventListener('click', function () {\n var isHidden = spoiler.hasAttribute('hidden');\n if (isHidden) spoiler.removeAttribute('hidden');\n else spoiler.setAttribute('hidden', '');\n var expanded = !spoiler.hasAttribute('hidden');\n btn.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n btn.textContent = expanded ? \"\\u0421\\u043a\\u0440\\u044b\\u0442\\u044c\" : \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u0430\\u0442\\u044c \\u0435\\u0449\\u0435\";\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-6');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('progression-stages\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('progression-stages\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.progression-stages-v2').forEach(function (root) {\n if (root.dataset.progressionStagesV2Ready === 'true') return;\n root.dataset.progressionStagesV2Ready = 'true';\n if (typeof window.Swiper !== 'function') return;\n function bootProgressionStagesV2() {\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-progression-stages-v2-tab]'));\n var panels = Array.prototype.slice.call(root.querySelectorAll('[data-progression-stages-v2-panel]'));\n var tabsScroller = root.querySelector('[data-progression-stages-v2-tabs]');\n var tabsThumb = root.querySelector('[data-progression-stages-v2-tabs-thumb]');\n var swipers = [];\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var tabsProgressFrame = 0;\n function getPanelIndex(panel) {\n return parseInt(panel.getAttribute('data-index'), 10) || 0;\n }\n function updateTabsProgress() {\n tabsProgressFrame = 0;\n if (!tabsScroller || !tabsThumb) return;\n var track = tabsThumb.parentElement;\n var trackWidth = track ? track.clientWidth : 0;\n if (!trackWidth) return;\n var scrollWidth = tabsScroller.scrollWidth;\n var clientWidth = tabsScroller.clientWidth;\n if (scrollWidth <= clientWidth) {\n tabsThumb.style.transform = 'translate3d(0, 0, 0) scaleX(1)';\n return;\n }\n var thumbRatio = clientWidth \/ scrollWidth;\n var maxScroll = scrollWidth - clientWidth;\n var offsetRatio = tabsScroller.scrollLeft \/ maxScroll;\n var thumbWidth = trackWidth * thumbRatio;\n var maxOffset = Math.max(0, trackWidth - thumbWidth);\n var offset = offsetRatio * maxOffset;\n var scale = thumbWidth \/ trackWidth;\n tabsThumb.style.transform = 'translate3d(' + offset + 'px, 0, 0) scaleX(' + scale + ')';\n }\n function scheduleTabsProgress() {\n if (tabsProgressFrame) return;\n tabsProgressFrame = window.requestAnimationFrame(updateTabsProgress);\n }\n function scrollTabIntoView(tab) {\n if (!tabsScroller || !tab || !mobileMq.matches) return;\n var scrollerRect = tabsScroller.getBoundingClientRect();\n var tabRect = tab.getBoundingClientRect();\n var edge = 8;\n if (tabRect.left >= scrollerRect.left + edge && tabRect.right <= scrollerRect.right - edge) {\n return;\n }\n var target = tab.offsetLeft - (tabsScroller.clientWidth - tab.offsetWidth) \/ 2;\n var maxScroll = Math.max(0, tabsScroller.scrollWidth - tabsScroller.clientWidth);\n tabsScroller.scrollLeft = Math.max(0, Math.min(target, maxScroll));\n scheduleTabsProgress();\n }\n function syncDotsPagination(swiper, pagination, paginationHost, options) {\n if (!swiper.pagination || !pagination) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n if (mobileMq.matches) {\n swiper.pagination.enable();\n pagination.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = pagination.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n function initSwiper(panel) {\n var slider = panel.querySelector('[data-progression-stages-v2-slider]');\n var pagination = panel.querySelector('[data-progression-stages-v2-pagination]');\n var paginationHost = panel.querySelector('.progression-stages-v2__pagination-host');\n if (!slider) return null;\n return new window.Swiper(slider, {\n slidesPerView: 5,\n spaceBetween: 16,\n watchOverflow: true,\n pagination: pagination\n ? {\n el: pagination,\n clickable: true,\n type: 'bullets',\n dynamicBullets: true,\n }\n : undefined,\n breakpoints: {\n 0: {\n slidesPerView: 'auto',\n spaceBetween: 16,\n },\n 769: {\n slidesPerView: 5,\n spaceBetween: 16,\n },\n },\n on: {\n init: function (swiper) {\n syncDotsPagination(swiper, pagination, paginationHost, { forceRender: true });\n },\n resize: function (swiper) {\n syncDotsPagination(swiper, pagination, paginationHost, { forceRender: false });\n },\n breakpoint: function (swiper) {\n syncDotsPagination(swiper, pagination, paginationHost, { forceRender: true });\n },\n },\n });\n }\n function ensureSwiper(index) {\n if (swipers[index]) return swipers[index];\n var panel = null;\n for (var i = 0; i < panels.length; i++) {\n if (getPanelIndex(panels[i]) === index) {\n panel = panels[i];\n break;\n }\n }\n if (!panel) return null;\n swipers[index] = initSwiper(panel);\n return swipers[index];\n }\n function activate(index) {\n tabs.forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-index'), 10) || 0;\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n panels.forEach(function (panel) {\n var panelIndex = getPanelIndex(panel);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n if (isActive) {\n panel.removeAttribute('hidden');\n } else {\n panel.setAttribute('hidden', '');\n }\n });\n var activeSwiper = ensureSwiper(index);\n if (activeSwiper) {\n activeSwiper.update();\n var activePagination = activeSwiper.pagination && activeSwiper.pagination.el;\n var activePaginationHost = activePagination && activePagination.closest('.progression-stages-v2__pagination-host');\n syncDotsPagination(activeSwiper, activePagination, activePaginationHost, { forceRender: true });\n if (typeof activeSwiper.slideTo === 'function') {\n activeSwiper.slideTo(0, 0);\n }\n }\n if (mobileMq.matches) {\n scrollTabIntoView(tabs[index]);\n }\n }\n var initialIndex = 0;\n tabs.some(function (tab) {\n if (!tab.classList.contains('is-active')) return false;\n initialIndex = parseInt(tab.getAttribute('data-index'), 10) || 0;\n return true;\n });\n ensureSwiper(initialIndex);\n tabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n var index = parseInt(tab.getAttribute('data-index'), 10) || 0;\n activate(index);\n });\n tab.addEventListener('keydown', function (event) {\n var current = parseInt(tab.getAttribute('data-index'), 10) || 0;\n var next = current;\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n next = (current + 1) % tabs.length;\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n next = (current - 1 + tabs.length) % tabs.length;\n } else if (event.key === 'Home') {\n next = 0;\n } else if (event.key === 'End') {\n next = tabs.length - 1;\n } else {\n return;\n }\n event.preventDefault();\n activate(next);\n tabs[next].focus();\n });\n });\n if (tabsScroller) {\n tabsScroller.addEventListener('scroll', scheduleTabsProgress, { passive: true });\n }\n function onBreakpointChange() {\n swipers.forEach(function (instance) {\n if (!instance) return;\n instance.update();\n var pagination = instance.pagination && instance.pagination.el;\n var paginationHost = pagination && pagination.closest('.progression-stages-v2__pagination-host');\n syncDotsPagination(instance, pagination, paginationHost, { forceRender: true });\n });\n scheduleTabsProgress();\n }\n updateTabsProgress();\n window.addEventListener('resize', scheduleTabsProgress);\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', onBreakpointChange);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(onBreakpointChange);\n }\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootProgressionStagesV2);\n } else {\n bootProgressionStagesV2();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('prices\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.prices-v2--slider').forEach(function (root) {\n if (root.dataset.pricesV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.pricesV2Ready === 'true') return;\n root.dataset.pricesV2Ready = 'true';\n var sliderEl = root.querySelector('.prices-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n new Swiper(sliderEl, {\n slidesPerView: 1.08,\n slidesPerGroup: 1,\n spaceBetween: 16,\n speed: 320,\n autoHeight: false,\n loop: slides.length > 4,\n breakpoints: {\n 769: {\n slidesPerView: 2,\n slidesPerGroup: 1,\n spaceBetween: 24,\n },\n 1201: {\n slidesPerView: 3,\n slidesPerGroup: 1,\n spaceBetween: 32,\n },\n 1441: {\n slidesPerView: 4,\n slidesPerGroup: 1,\n spaceBetween: 40,\n },\n },\n navigation: {\n nextEl: root.querySelector('.prices-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.prices-v2__slider-nav .slider-nav__btn--prev'),\n },\n });\n root.querySelectorAll('.prices-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('linking-services\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.linking-services-v2').forEach(function (root) {\n if (root.dataset.linkingServicesV2Ready === 'true') return;\n root.dataset.linkingServicesV2Ready = 'true';\n var sliderEl = root.querySelector('[data-linking-services-v2-slider]');\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-linking-services-v2-item]'));\n var pages = Array.prototype.slice.call(root.querySelectorAll('.linking-services-v2__page'));\n var moreBtn = root.querySelector('[data-linking-services-v2-more]');\n var navPrev = root.querySelector('.linking-services-v2__nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.linking-services-v2__nav .slider-nav__btn--next');\n var mobileLimit = parseInt(root.dataset.linkingServicesV2MobileLimit || '6', 10) || 6;\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiper = null;\n var mobileVisible = mobileLimit;\n var wasMobile = mobileMq.matches;\n function syncMobilePages() {\n pages.forEach(function (page) {\n var visibleItems = page.querySelectorAll('[data-linking-services-v2-item]:not([hidden])');\n page.hidden = visibleItems.length === 0;\n });\n }\n function syncMobileVisibility() {\n if (!mobileMq.matches) {\n items.forEach(function (item) {\n item.hidden = false;\n });\n pages.forEach(function (page) {\n page.hidden = false;\n });\n if (moreBtn) {\n moreBtn.hidden = true;\n }\n return;\n }\n items.forEach(function (item, index) {\n item.hidden = index >= mobileVisible;\n });\n syncMobilePages();\n if (moreBtn) {\n moreBtn.hidden = mobileVisible >= items.length;\n }\n }\n function destroySlider() {\n if (!swiper) return;\n swiper.destroy(true, true);\n swiper = null;\n if (sliderEl) {\n sliderEl.classList.remove('is-ready');\n }\n }\n function initSlider() {\n if (!sliderEl || typeof Swiper === 'undefined') return;\n if (mobileMq.matches || !root.classList.contains('linking-services-v2--has-slider')) {\n destroySlider();\n return;\n }\n if (swiper) {\n swiper.update();\n return;\n }\n swiper = new Swiper(sliderEl, {\n slidesPerView: 1,\n slidesPerGroup: 1,\n spaceBetween: 0,\n speed: 320,\n loop: false,\n watchOverflow: true,\n autoHeight: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n });\n sliderEl.classList.add('is-ready');\n }\n function syncLayout() {\n if (mobileMq.matches && !wasMobile) {\n mobileVisible = mobileLimit;\n }\n wasMobile = mobileMq.matches;\n syncMobileVisibility();\n initSlider();\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n mobileVisible = Math.min(items.length, mobileVisible + mobileLimit);\n syncMobileVisibility();\n });\n }\n root.querySelectorAll('.linking-services-v2__nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncLayout);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncLayout);\n }\n function bootSwiper() {\n syncLayout();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v2').forEach(function (root) {\n if (root.dataset.casesV2Ready === 'true') return;\n root.dataset.casesV2Ready = 'true';\n var sliderEl = root.querySelector('.cases-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n var paginationEl = root.querySelector('.cases-v2__pagination');\n var paginationHost = root.querySelector('.cases-v2__pagination-host');\n var navPrev = root.querySelector('.cases-v2__aside-nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.cases-v2__aside-nav .slider-nav__btn--next');\n var canSlide = slides.length > 1;\n function syncDotsPagination(swiper, options) {\n if (!swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n var isMobile = window.matchMedia('(max-width: 992px)').matches;\n if (isMobile) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n function initSwiper() {\n if (root.dataset.casesV2SwiperReady === 'true') return;\n if (canSlide) {\n new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 400,\n loop: false,\n rewind: true,\n allowTouchMove: true,\n roundLengths: true,\n watchOverflow: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n on: {\n init: function (swiper) {\n swiper.el.classList.add('is-settled');\n swiper.update();\n syncDotsPagination(swiper);\n },\n resize: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper);\n },\n breakpoint: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper);\n },\n slideChange: function (swiper) {\n syncDotsPagination(swiper, { forceRender: false });\n },\n touchStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n slideChangeTransitionStart: function (swiper) {\n swiper.el.classList.remove('is-settled');\n },\n transitionEnd: function (swiper) {\n swiper.el.classList.add('is-settled');\n },\n },\n });\n root.querySelectorAll('.cases-v2__aside-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n } else {\n sliderEl.classList.add('cases-v2__slider--static');\n }\n root.dataset.casesV2SwiperReady = 'true';\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v2__media').forEach(function (media) {\n if (media.dataset.casesV2BeforeAfterReady === 'true') return;\n media.dataset.casesV2BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v2__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV2BlurTimer) {\n clearTimeout(media.__casesV2BlurTimer);\n media.__casesV2BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV2BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV2BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v2-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n if (canSlide) event.stopPropagation();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var step = 2;\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v2-reveal') || '50').replace('%', '')) || 50;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - step);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + step);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n initBeforeAfterSliders();\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('doctors\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.doctors-v1').forEach(function (root) {\n if (root.dataset.doctorsV1Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.doctorsV1Ready === 'true') return;\n root.dataset.doctorsV1Ready = 'true';\n var sliderEl = root.querySelector('.doctors-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 2) return;\n var styles = getComputedStyle(root);\n var pageStyles = getComputedStyle(document.documentElement);\n var mobileSlides = parseFloat(styles.getPropertyValue('--doctors-v1-mobile-slides-per-view')) || 1.15;\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n var paginationEl = root.querySelector('.doctors-v1__pagination');\n function syncDotsPagination(swiper) {\n if (!swiper.pagination || !paginationEl) return;\n if (window.matchMedia('(max-width: 768px)').matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n new Swiper(sliderEl, {\n slidesPerView: mobileSlides,\n slidesPerGroup: 1,\n spaceBetween: parseFloat(styles.getPropertyValue('--doctors-v1-track-gap')) || 16,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 769: {\n slidesPerView: 'auto',\n spaceBetween: 24,\n slidesOffsetAfter: 0,\n },\n },\n navigation: {\n nextEl: root.querySelector('.doctors-v1__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.doctors-v1__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: syncDotsPagination,\n resize: syncDotsPagination,\n breakpoint: syncDotsPagination,\n },\n });\n root.querySelectorAll('.doctors-v1__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v2').forEach(function (root) {\n if (root.dataset.reviewsV2Ready === 'true') return;\n root.dataset.reviewsV2Ready = 'true';\n var sliderEl = root.querySelector('.reviews-v2__slider.swiper');\n var listViewport = root.querySelector('.reviews-v2__list-viewport');\n var listEl = root.querySelector('.reviews-v2__list');\n var listItems = root.querySelectorAll('.reviews-v2__list-item');\n var canSlide = sliderEl && sliderEl.querySelectorAll('.swiper-slide').length > 1;\n var paginationEl = root.querySelector('.reviews-v2__pagination');\n var swiperInstance = null;\n var layoutSyncFrame = null;\n var currentActiveIndex = 0;\n function getListVisibleCount() {\n var fromData = parseInt(root.dataset.reviewsListVisible || '', 10);\n if (!Number.isNaN(fromData) && fromData > 0) {\n return fromData;\n }\n var fromCss = parseInt(getComputedStyle(root).getPropertyValue('--reviews-v2-list-visible'), 10);\n return !Number.isNaN(fromCss) && fromCss > 0 ? fromCss : 3;\n }\n function getListWindowStart(index) {\n var visibleCount = getListVisibleCount();\n var maxStart = Math.max(0, listItems.length - visibleCount);\n return Math.min(Math.max(0, index), maxStart);\n }\n function syncListViewportHeight() {\n if (!listViewport || !listEl || !listItems.length) return;\n if (!isDesktopMainLayout()) {\n listViewport.style.height = '';\n listEl.style.transform = '';\n return;\n }\n var visibleCount = getListVisibleCount();\n if (listItems.length <= visibleCount) {\n listViewport.style.height = '';\n listEl.style.transform = '';\n return;\n }\n var listStyles = getComputedStyle(listEl);\n var gap = parseFloat(listStyles.rowGap || listStyles.gap) || 0;\n var height = 0;\n for (var i = 0; i < visibleCount; i++) {\n height += listItems[i].offsetHeight;\n if (i < visibleCount - 1) {\n height += gap;\n }\n }\n listViewport.style.height = height + 'px';\n }\n function scrollListToActive(index) {\n if (!listViewport || !listEl || !listItems.length) return;\n currentActiveIndex = index;\n if (!isDesktopMainLayout()) {\n listEl.style.transform = '';\n listViewport.style.height = '';\n return;\n }\n syncListViewportHeight();\n var visibleCount = getListVisibleCount();\n if (listItems.length <= visibleCount) {\n listEl.style.transform = '';\n return;\n }\n var startIndex = getListWindowStart(index);\n var targetItem = listItems[startIndex];\n if (!targetItem) return;\n listEl.style.transform = 'translateY(-' + targetItem.offsetTop + 'px)';\n }\n function isDesktopMainLayout() {\n return window.matchMedia('(min-width: 1201px)').matches;\n }\n function syncFeaturedColumnHeight() {\n var styles = getComputedStyle(root);\n var heightOffset = parseFloat(styles.getPropertyValue('--reviews-v2-featured-height-offset')) || 0;\n var baseHeight = parseFloat(styles.getPropertyValue('--reviews-v2-featured-base-h')) || 474;\n if (!isDesktopMainLayout()) {\n root.style.setProperty('--reviews-v2-featured-min-h', Math.max(0, baseHeight - heightOffset) + 'px');\n updateAllFeaturedOverflow();\n return;\n }\n var listViewportEl = root.querySelector('.reviews-v2__list-viewport');\n var featuredCol = root.querySelector('.reviews-v2__featured-col');\n var controls = root.querySelector('.reviews-v2__controls');\n if (!listViewportEl || !featuredCol) return;\n var listHeight = listViewportEl.offsetHeight;\n if (listHeight <= 0) return;\n var colGap = parseFloat(getComputedStyle(featuredCol).gap) || 0;\n var controlsHeight = controls ? controls.offsetHeight : 0;\n var cardHeight = listHeight - controlsHeight - (controls ? colGap : 0) - heightOffset;\n if (cardHeight > 0) {\n root.style.setProperty('--reviews-v2-featured-min-h', cardHeight + 'px');\n }\n updateAllFeaturedOverflow();\n }\n function scheduleFeaturedColumnHeight() {\n if (layoutSyncFrame !== null) return;\n layoutSyncFrame = requestAnimationFrame(function () {\n layoutSyncFrame = null;\n syncListViewportHeight();\n scrollListToActive(currentActiveIndex);\n syncFeaturedColumnHeight();\n });\n }\n function updateFeaturedOverflow(card) {\n var quote = card.querySelector('.reviews-v2__quote');\n var readMore = card.querySelector('[data-reviews-v2-read-full]');\n if (!quote || !readMore) return;\n card.classList.remove('is-overflow');\n readMore.hidden = true;\n quote.style.removeProperty('-webkit-line-clamp');\n var styles = getComputedStyle(root);\n var maxLines = parseInt(styles.getPropertyValue('--reviews-v2-quote-lines'), 10) || 10;\n quote.style.display = '-webkit-box';\n quote.style.webkitBoxOrient = 'vertical';\n quote.style.overflow = 'hidden';\n quote.style.webkitLineClamp = String(maxLines);\n if (quote.scrollHeight > quote.clientHeight + 1) {\n card.classList.add('is-overflow');\n readMore.hidden = false;\n }\n }\n function updateAllFeaturedOverflow() {\n root.querySelectorAll('.reviews-v2__card--featured').forEach(updateFeaturedOverflow);\n }\n root.addEventListener('click', function (event) {\n var readBtn = event.target.closest('[data-reviews-v2-read-full]');\n if (!readBtn || !root.contains(readBtn)) return;\n event.preventDefault();\n var card = readBtn.closest('.reviews-v2__card--featured');\n var template = card ? card.querySelector('.reviews-v2__full-template') : null;\n var quote = card ? card.querySelector('.reviews-v2__quote') : null;\n if (!template || !quote || !window.Popup) return;\n var content = template.content.cloneNode(true);\n var quoteSlot = content.querySelector('[data-reviews-v2-popup-quote]');\n if (!quoteSlot) return;\n var popupQuote = quote.cloneNode(true);\n popupQuote.className = 'popup__review-text wysiwyg bodytext-md';\n popupQuote.style.removeProperty('-webkit-line-clamp');\n quoteSlot.appendChild(popupQuote);\n var popupContent = document.createElement('div');\n popupContent.appendChild(content);\n window.Popup.open('review', { html: popupContent.innerHTML });\n });\n function setActiveListItem(index) {\n listItems.forEach(function (item) {\n var isActive = parseInt(item.dataset.reviewsV2Index, 10) === index;\n item.classList.toggle('is-active', isActive);\n item.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n scrollListToActive(index);\n }\n function syncDotsPagination(swiper) {\n if (!swiper || !swiper.pagination || !paginationEl) return;\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n swiper.pagination.render();\n swiper.pagination.update();\n }\n function initSwiper() {\n if (root.dataset.reviewsV2SwiperReady === 'true') return;\n if (sliderEl && typeof Swiper !== 'undefined') {\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length > 1) {\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n watchOverflow: true,\n loop: false,\n rewind: true,\n navigation: {\n nextEl: root.querySelector('.reviews-v2__controls .slider-nav__btn--next'),\n prevEl: root.querySelector('.reviews-v2__controls .slider-nav__btn--prev'),\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n on: {\n init: function (swiper) {\n setActiveListItem(swiper.activeIndex);\n syncDotsPagination(swiper);\n scheduleFeaturedColumnHeight();\n },\n slideChange: function (swiper) {\n setActiveListItem(swiper.activeIndex);\n syncDotsPagination(swiper);\n updateAllFeaturedOverflow();\n },\n },\n });\n } else if (slides.length === 1) {\n setActiveListItem(0);\n scheduleFeaturedColumnHeight();\n }\n } else {\n scheduleFeaturedColumnHeight();\n }\n listItems.forEach(function (item) {\n item.addEventListener('click', function () {\n var index = parseInt(item.dataset.reviewsV2Index, 10);\n if (!swiperInstance || Number.isNaN(index)) return;\n swiperInstance.slideTo(index);\n });\n });\n root.querySelectorAll('.reviews-v2__controls .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n root.dataset.reviewsV2SwiperReady = 'true';\n }\n scheduleFeaturedColumnHeight();\n if (typeof ResizeObserver !== 'undefined') {\n if (listViewport) {\n var listObserver = new ResizeObserver(function () {\n scheduleFeaturedColumnHeight();\n });\n listObserver.observe(listViewport);\n }\n if (listEl) {\n var listItemsObserver = new ResizeObserver(function () {\n scheduleFeaturedColumnHeight();\n });\n listItemsObserver.observe(listEl);\n }\n var featuredObserver = new ResizeObserver(function () {\n updateAllFeaturedOverflow();\n });\n root.querySelectorAll('.reviews-v2__card--featured').forEach(function (card) {\n featuredObserver.observe(card);\n });\n }\n window.addEventListener('resize', scheduleFeaturedColumnHeight);\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(scheduleFeaturedColumnHeight);\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('linking-services\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.linking-services-v1').forEach(function (root) {\n if (root.dataset.linkingServicesV1Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.linkingServicesV1Ready === 'true') return;\n root.dataset.linkingServicesV1Ready = 'true';\n var sliderEl = root.querySelector('.linking-services-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var navPrev = root.querySelector('.linking-services-v1__nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.linking-services-v1__nav .slider-nav__btn--next');\n var paginationEl = root.querySelector('.linking-services-v1__pagination');\n var paginationHost = root.querySelector('.linking-services-v1__slider-foot .slider-pagination-host');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n function getSlideGap() {\n var styles = getComputedStyle(root);\n var gap = parseFloat(styles.getPropertyValue('--linking-services-v1-slide-gap'));\n return Number.isFinite(gap) ? gap : 40;\n }\n function syncDotsPagination(swiper, options) {\n if (!swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n if (mobileMq.matches) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n var swiper = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n spaceBetween: getSlideGap(),\n speed: 320,\n loop: false,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n breakpoints: {\n 0: {\n spaceBetween: 16,\n },\n 769: {\n spaceBetween: getSlideGap(),\n },\n },\n on: {\n init: function (s) {\n syncDotsPagination(s);\n },\n resize: function (s) {\n syncDotsPagination(s);\n },\n breakpoint: function (s) {\n syncDotsPagination(s);\n },\n slideChange: function (s) {\n syncDotsPagination(s, { forceRender: false });\n },\n },\n });\n root.querySelectorAll('.linking-services-v1__nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('expert-advice\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.promo-v3').forEach(function (root) {\n if (root.dataset.promoV3Ready === 'true') return;\n root.dataset.promoV3Ready = 'true';\n var sliderEl = root.querySelector('.promo-v3__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n var paginationEl = root.querySelector('.promo-v3__pagination');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function isMobile() {\n return mobileMq.matches;\n }\n function shouldUseSlider() {\n return slides.length > 3 && !isMobile();\n }\n function destroySwiper() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function applySlidesLimit() {\n var limit = parseInt(root.dataset.promoV3MobileLimit || '3', 10);\n if (!limit || limit < 1) limit = 3;\n slides.forEach(function (slide, index) {\n slide.hidden = isMobile() && index >= limit;\n });\n }\n function mountSlider() {\n destroySwiper();\n applySlidesLimit();\n if (!shouldUseSlider()) {\n sliderEl.classList.add('promo-v3__slider--static');\n return;\n }\n sliderEl.classList.remove('promo-v3__slider--static');\n swiperInstance = new Swiper(sliderEl, {\n direction: 'vertical',\n slidesPerView: 3,\n slidesPerGroup: 1,\n spaceBetween: 24,\n speed: 360,\n autoHeight: false,\n loop: slides.length > 5,\n watchOverflow: true,\n navigation: {\n nextEl: root.querySelector('.promo-v3__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.promo-v3__slider-nav .slider-nav__btn--prev'),\n },\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : undefined,\n });\n }\n function bootSwiper() {\n mountSlider();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', mountSlider);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(mountSlider);\n }\n root.querySelectorAll('.promo-v3__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('faq\/variant-1');\n function initRoot(root) {\n if (root.dataset.faqV1Ready === 'true') return;\n root.dataset.faqV1Ready = 'true';\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var items = Array.prototype.slice.call(root.querySelectorAll('.faq-v1__item'));\n var moreBtn = root.querySelector('[data-faq-v1-more]');\n var configEl = root.querySelector('.faq-v1__grid') || root;\n var initial = parseInt(configEl.getAttribute('data-faq-v1-initial'), 10) || 0;\n var step = parseInt(configEl.getAttribute('data-faq-v1-step'), 10) || 0;\n function shouldAnimate() {\n return !reduceMotionMq.matches;\n }\n function updateMoreButton() {\n if (!moreBtn) return;\n var hasHidden = items.some(function (item) { return item.hidden; });\n moreBtn.hidden = !hasHidden;\n }\n function revealNextBatch() {\n if (!step) return;\n var shown = 0;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].hidden) continue;\n items[i].hidden = false;\n shown += 1;\n if (shown >= step) break;\n }\n updateMoreButton();\n }\n if (initial && items.length > initial) {\n items.forEach(function (item, idx) {\n if (idx >= initial) item.hidden = true;\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', revealNextBatch);\n updateMoreButton();\n }\n function closeItem(item) {\n var trigger = item.querySelector('.faq-v1__trigger');\n var panel = item.querySelector('.faq-v1__panel');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n panel.hidden = true;\n }\n function openItem(item) {\n var trigger = item.querySelector('.faq-v1__trigger');\n var panel = item.querySelector('.faq-v1__panel');\n if (!panel) return;\n panel.hidden = false;\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n if (!shouldAnimate()) {\n item.classList.add('is-open');\n return;\n }\n item.classList.remove('is-open');\n void panel.offsetHeight;\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n }\n root.addEventListener('click', function (event) {\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v1__trigger');\n if (!trigger || !root.contains(trigger)) return;\n var item = trigger.closest('.faq-v1__item');\n if (!item) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeItem(entry);\n });\n openItem(item);\n });\n root.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v1__trigger');\n if (!trigger || !root.contains(trigger)) return;\n event.preventDefault();\n trigger.click();\n });\n }\n function boot() {\n document.querySelectorAll('.faq-v1').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-5');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('benefits\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patient-errors\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('content-strip-link\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-technologies\/variant-1');\n function initRoot(root) {\n if (root.dataset.treatmentTechnologiesV1Ready === 'true') return;\n root.dataset.treatmentTechnologiesV1Ready = 'true';\n var items = root.querySelectorAll('.treatment-technologies-v1__item');\n if (!items.length) return;\n var list = root.querySelector('.treatment-technologies-v1__list');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 350;\n var activeDesktopIndex = 0;\n function isDesktop() {\n return desktopMq.matches;\n }\n function shouldAnimateAccordion() {\n return !isDesktop() && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!list) return;\n if (!isDesktop()) {\n list.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-treatment-technologies-panel].is-active');\n if (!activePanel) {\n list.style.minHeight = '';\n return;\n }\n list.style.minHeight = '';\n var tabsHeight = list.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n list.style.minHeight = Math.max(tabsHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function deactivateTab(tab) {\n if (!tab) return;\n tab.classList.remove('is-active');\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n }\n function deactivateAccordionTabVisual(item) {\n deactivateTab(item.querySelector('[data-treatment-technologies-tab]'));\n }\n function finalizeAccordionClose(item) {\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n deactivateAccordionTabVisual(item);\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n }\n }\n function activateDesktop(index) {\n activeDesktopIndex = index;\n root.querySelectorAll('[data-treatment-technologies-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-treatment-technologies-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n root.querySelectorAll('[data-treatment-technologies-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-treatment-technologies-index'), 10);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, instantVisual) {\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n panel.setAttribute('aria-hidden', 'true');\n if (instantVisual) {\n deactivateAccordionTabVisual(item);\n }\n if (!shouldAnimateAccordion()) {\n finalizeAccordionClose(item);\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n finalizeAccordionClose(item);\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var tab = item.querySelector('[data-treatment-technologies-tab]');\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n if (!panel) return;\n var index = parseInt(panel.getAttribute('data-treatment-technologies-index'), 10);\n if (!isNaN(index)) {\n activeDesktopIndex = index;\n }\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-selected', 'true');\n tab.tabIndex = 0;\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n if (shouldAnimateAccordion()) {\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n return;\n }\n item.classList.add('is-open');\n }\n function resetMobileAccordion() {\n items.forEach(function (item) {\n item.classList.remove('is-open');\n deactivateAccordionTabVisual(item);\n var panel = item.querySelector('[data-treatment-technologies-panel]');\n if (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n panel.setAttribute('aria-hidden', 'true');\n }\n });\n }\n function syncLayout() {\n if (isDesktop()) {\n activateDesktop(activeDesktopIndex);\n syncStageHeight();\n return;\n }\n if (list) {\n list.style.minHeight = '';\n }\n resetMobileAccordion();\n }\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-treatment-technologies-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-treatment-technologies-index'), 10);\n if (isNaN(index)) return;\n if (isDesktop()) {\n activateDesktop(index);\n return;\n }\n var item = tab.closest('.treatment-technologies-v1__item');\n if (!item) return;\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n });\n root.addEventListener('keydown', function (event) {\n var tab = event.target.closest('[data-treatment-technologies-tab]');\n if (!tab || !root.contains(tab)) return;\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-treatment-technologies-tab]'));\n var index = tabs.indexOf(tab);\n if (index === -1) return;\n var nextIndex = index;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (index + 1) % tabs.length;\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextIndex = (index - 1 + tabs.length) % tabs.length;\n } else {\n return;\n }\n event.preventDefault();\n var nextTab = tabs[nextIndex];\n var nextItemIndex = parseInt(nextTab.getAttribute('data-treatment-technologies-index'), 10);\n if (isDesktop()) {\n activateDesktop(nextItemIndex);\n nextTab.focus();\n return;\n }\n var item = nextTab.closest('.treatment-technologies-v1__item');\n if (!item) return;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, true);\n });\n openAccordionItem(item);\n nextTab.focus();\n });\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', syncLayout);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(syncLayout);\n }\n root.querySelectorAll('.treatment-technologies-v1__media-img').forEach(function (img) {\n if (img.complete) return;\n img.addEventListener('load', syncStageHeight, { once: true });\n });\n window.addEventListener('resize', scheduleStageHeight);\n syncLayout();\n }\n function boot() {\n document.querySelectorAll('.treatment-technologies-v1').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('doctors\/variant-6');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.doctors-v6').forEach(function (root) {\n if (root.dataset.doctorsV6Ready === 'true') return;\n root.dataset.doctorsV6Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-doctors-v6-item]'));\n var moreBtn = root.querySelector('[data-doctors-v6-more]');\n var countEl = root.querySelector('[data-doctors-v6-count]');\n var emptyEl = root.querySelector('[data-doctors-v6-empty]');\n var footEl = root.querySelector('.doctors-v6__foot');\n var bannerItem = root.querySelector('.doctors-v6__banner-item');\n var searchInput = root.querySelector('[data-doctors-v6-search]');\n var searchPhEl = root.querySelector('[data-doctors-v6-search-ph]');\n var specialtySelect = root.querySelector('[data-doctors-v6-specialty]');\n var directionSelect = root.querySelector('[data-doctors-v6-direction]');\n var genderSelect = root.querySelector('[data-doctors-v6-gender]');\n var experienceSelect = root.querySelector('[data-doctors-v6-experience]');\n var extraEl = root.querySelector('[data-doctors-v6-extra]');\n var filtersEl = root.querySelector('[data-doctors-v6-filters]');\n var moreParamsBtn = root.querySelector('[data-doctors-v6-more-params]');\n var moreParamsLabel = root.querySelector('[data-doctors-v6-more-params-label]');\n var metaEl = root.querySelector('[data-doctors-v6-meta]');\n var foundEl = root.querySelector('[data-doctors-v6-found]');\n var resetBtn = root.querySelector('[data-doctors-v6-reset]');\n var mobileLimit = parseInt(root.dataset.doctorsV6MobileLimit || '4', 10) || 4;\n var desktopRows = parseInt(root.dataset.doctorsV6DesktopRows || '4', 10) || 4;\n var hasBanner = !!bannerItem;\n var mobileMq = window.matchMedia('(max-width: 600px)');\n var tabletMq = window.matchMedia('(max-width: 1360px)');\n var expanded = false;\n var extraOpen = false;\n var specialtyKey = 'all';\n var directionKey = 'all';\n var genderKey = 'all';\n var experienceMin = 0;\n var searchQuery = '';\n var onlineOnly = false;\n var todayOnly = false;\n var pediatricOnly = false;\n function isDefaultFilters() {\n return specialtyKey === 'all'\n && directionKey === 'all'\n && genderKey === 'all'\n && experienceMin <= 0\n && !searchQuery\n && !onlineOnly\n && !todayOnly\n && !pediatricOnly;\n }\n function getVisibleLimit() {\n if (mobileMq.matches) {\n return mobileLimit;\n }\n var cols = parseInt(getComputedStyle(root).getPropertyValue('--doctors-v6-grid-cols'), 10) || 4;\n var limit = cols * desktopRows;\n if (hasBanner && isDefaultFilters()) {\n limit -= 2;\n }\n return Math.max(0, limit);\n }\n function matchesItem(item) {\n if (specialtyKey !== 'all' && (item.getAttribute('data-doctors-v6-specialty-key') || '') !== specialtyKey) {\n return false;\n }\n if (directionKey !== 'all' && (item.getAttribute('data-doctors-v6-direction-key') || '') !== directionKey) {\n return false;\n }\n if (genderKey !== 'all' && (item.getAttribute('data-doctors-v6-gender') || '') !== genderKey) {\n return false;\n }\n if (experienceMin > 0) {\n var years = parseInt(item.getAttribute('data-doctors-v6-experience') || '0', 10) || 0;\n if (years < experienceMin) {\n return false;\n }\n }\n if (onlineOnly && item.getAttribute('data-doctors-v6-online') !== '1') {\n return false;\n }\n if (todayOnly && item.getAttribute('data-doctors-v6-today') !== '1') {\n return false;\n }\n if (pediatricOnly && item.getAttribute('data-doctors-v6-pediatric') !== '1') {\n return false;\n }\n if (!searchQuery) {\n return true;\n }\n var haystack = (item.getAttribute('data-doctors-v6-search-item') || '').toLowerCase();\n return haystack.indexOf(searchQuery) !== -1;\n }\n function syncCount(visibleCount, matchedCount) {\n if (!countEl) return;\n var before = countEl.getAttribute('data-doctors-v6-count-before') || '';\n var mid = countEl.getAttribute('data-doctors-v6-count-mid') || '';\n var after = countEl.getAttribute('data-doctors-v6-count-after') || '';\n countEl.textContent = before + ' ' + visibleCount + ' ' + mid + ' ' + matchedCount + ' ' + after;\n }\n function syncEmpty(matchedCount) {\n if (!emptyEl) return;\n emptyEl.hidden = matchedCount > 0;\n var message = searchQuery\n ? (emptyEl.getAttribute('data-doctors-v6-empty-search') || '')\n : (emptyEl.getAttribute('data-doctors-v6-empty-filter') || '');\n if (message) {\n emptyEl.textContent = message;\n }\n }\n function syncVisibility() {\n var limit = getVisibleLimit();\n var matchedCount = 0;\n var visibleCount = 0;\n var visibleIndex = 0;\n var showBanner = hasBanner && isDefaultFilters();\n if (bannerItem) {\n bannerItem.hidden = !showBanner;\n }\n items.forEach(function (item) {\n if (!matchesItem(item)) {\n item.hidden = true;\n return;\n }\n matchedCount += 1;\n var collapsed = !expanded && visibleIndex >= limit;\n item.hidden = collapsed;\n if (!collapsed) {\n visibleCount += 1;\n }\n visibleIndex += 1;\n });\n if (moreBtn) {\n moreBtn.hidden = expanded || matchedCount <= limit;\n }\n if (footEl) {\n footEl.hidden = matchedCount === 0;\n }\n syncEmpty(matchedCount);\n syncCount(visibleCount, matchedCount);\n syncFilterChrome(matchedCount);\n syncCardActions();\n }\n function syncCardActions() {\n root.querySelectorAll('.doctors-v6__actions').forEach(function (actions) {\n if (mobileMq.matches) {\n actions.classList.remove('is-actions-stacked');\n return;\n }\n var book = actions.querySelector('.doctors-v6__book');\n var more = actions.querySelector('.doctors-v6__more-link');\n if (!book || !more) {\n actions.classList.remove('is-actions-stacked');\n return;\n }\n var stacked = more.offsetTop > book.offsetTop + (book.offsetHeight \/ 2);\n actions.classList.toggle('is-actions-stacked', stacked);\n });\n }\n function syncSelectClear(select) {\n if (!select) return;\n var wrap = select.closest('.doctors-v6__select-wrap');\n if (!wrap) return;\n var filled = (select.value || 'all') !== 'all';\n wrap.classList.toggle('is-filled', filled);\n var clearBtn = wrap.querySelector('[data-doctors-v6-clear]');\n if (clearBtn) {\n clearBtn.hidden = !filled;\n }\n }\n function ruCountWord(n, one, few, many) {\n var abs = Math.abs(n) | 0;\n var n10 = abs % 10;\n var n100 = abs % 100;\n if (n10 === 1 && n100 !== 11) return one;\n if (n10 >= 2 && n10 <= 4 && (n100 < 12 || n100 > 14)) return few;\n return many;\n }\n function syncFilterChrome(matchedCount) {\n var filtered = !isDefaultFilters();\n if (metaEl) {\n metaEl.hidden = !filtered;\n }\n if (foundEl && filtered) {\n var prefix = foundEl.getAttribute('data-doctors-v6-found-prefix') || '';\n var one = foundEl.getAttribute('data-doctors-v6-found-one') || '';\n var few = foundEl.getAttribute('data-doctors-v6-found-few') || '';\n var many = foundEl.getAttribute('data-doctors-v6-found-many') || '';\n foundEl.textContent = prefix + ' ' + matchedCount + ' ' + ruCountWord(matchedCount, one, few, many);\n }\n syncSelectClear(specialtySelect);\n syncSelectClear(directionSelect);\n syncSelectClear(genderSelect);\n syncSelectClear(experienceSelect);\n }\n function measurePlaceholderText(input, text) {\n var canvas = input._doctorsV6PhCanvas;\n if (!canvas) {\n canvas = document.createElement('canvas');\n input._doctorsV6PhCanvas = canvas;\n }\n var ctx = canvas.getContext('2d');\n var cs = window.getComputedStyle(searchPhEl || input);\n var size = cs.fontSize || '16px';\n var family = cs.fontFamily || 'sans-serif';\n var weight = cs.fontWeight || '400';\n var style = cs.fontStyle || 'normal';\n ctx.font = style + ' ' + weight + ' ' + size + ' ' + family;\n return ctx.measureText(text).width;\n }\n function placeholderMaxWidth() {\n if (searchPhEl && searchPhEl.clientWidth > 0) {\n return searchPhEl.clientWidth;\n }\n if (!searchInput) return 0;\n var cs = window.getComputedStyle(searchInput);\n var inputRect = searchInput.getBoundingClientRect();\n var left = inputRect.left\n + (parseFloat(cs.borderLeftWidth) || 0)\n + (parseFloat(cs.paddingLeft) || 0);\n var icon = searchInput.parentNode && searchInput.parentNode.querySelector('.doctors-v6__search-icon');\n var right = icon\n ? icon.getBoundingClientRect().left\n : (inputRect.right - (parseFloat(cs.borderRightWidth) || 0) - (parseFloat(cs.paddingRight) || 0));\n return Math.max(0, right - left - 16);\n }\n function placeholderWidthFits(input, text) {\n return measurePlaceholderText(input || searchInput, text) <= placeholderMaxWidth();\n }\n function fitPlaceholderText(input, full) {\n if (placeholderWidthFits(input, full)) {\n return full;\n }\n var suffix = '..';\n var lo = 0;\n var hi = full.length;\n while (lo < hi) {\n var mid = (lo + hi + 1) >> 1;\n var candidate = full.slice(0, mid).replace(\/\\s+$\/, '') + suffix;\n if (placeholderWidthFits(input, candidate)) {\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n var result = lo > 0 ? full.slice(0, lo).replace(\/\\s+$\/, '') + suffix : suffix;\n while (result.length > suffix.length && !placeholderWidthFits(input, result)) {\n result = result.slice(0, result.length - suffix.length - 1).replace(\/\\s+$\/, '') + suffix;\n }\n return result;\n }\n function syncSearchPlaceholder() {\n if (!searchInput) return;\n var desktopPh = searchInput.getAttribute('data-doctors-v6-search-placeholder') || '';\n var mobilePh = searchInput.getAttribute('data-doctors-v6-search-placeholder-mobile') || desktopPh;\n var full = mobileMq.matches ? mobilePh : desktopPh;\n searchInput.setAttribute('aria-label', full);\n searchInput.placeholder = '';\n var fitted = fitPlaceholderText(searchInput, full);\n if (searchPhEl) {\n searchPhEl.textContent = fitted;\n }\n if (searchInput.parentNode) {\n searchInput.parentNode.classList.toggle('is-typed', !!(searchInput.value || '').length);\n }\n }\n function syncExtraPanel() {\n if (filtersEl) {\n filtersEl.classList.toggle('is-extra-open', extraOpen);\n }\n if (extraEl) {\n extraEl.hidden = !extraOpen;\n }\n if (moreParamsBtn) {\n moreParamsBtn.setAttribute('aria-expanded', extraOpen ? 'true' : 'false');\n var openLabel = moreParamsBtn.getAttribute('data-doctors-v6-more-params-open') || '';\n var mobileLabel = moreParamsBtn.getAttribute('data-doctors-v6-more-params-mobile') || openLabel;\n var closeLabel = moreParamsBtn.getAttribute('data-doctors-v6-more-params-close') || '';\n var closedLabel = mobileMq.matches ? mobileLabel : openLabel;\n if (moreParamsLabel) {\n moreParamsLabel.textContent = extraOpen ? closeLabel : closedLabel;\n }\n }\n }\n function resetFilters() {\n specialtyKey = 'all';\n directionKey = 'all';\n genderKey = 'all';\n experienceMin = 0;\n searchQuery = '';\n onlineOnly = false;\n todayOnly = false;\n pediatricOnly = false;\n if (specialtySelect) specialtySelect.value = 'all';\n if (directionSelect) directionSelect.value = 'all';\n if (genderSelect) genderSelect.value = 'all';\n if (experienceSelect) experienceSelect.value = 'all';\n if (searchInput) searchInput.value = '';\n if (searchInput && searchInput.parentNode) {\n searchInput.parentNode.classList.remove('is-typed');\n }\n root.querySelectorAll('[data-doctors-v6-toggle]').forEach(function (input) {\n input.checked = false;\n });\n onFiltersChange();\n syncSearchPlaceholder();\n }\n function onFiltersChange() {\n expanded = false;\n syncVisibility();\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n searchQuery = (searchInput.value || '').trim().toLowerCase();\n if (searchInput.parentNode) {\n searchInput.parentNode.classList.toggle('is-typed', !!(searchInput.value || '').length);\n }\n onFiltersChange();\n });\n }\n if (specialtySelect) {\n specialtySelect.addEventListener('change', function () {\n specialtyKey = specialtySelect.value || 'all';\n onFiltersChange();\n });\n }\n if (directionSelect) {\n directionSelect.addEventListener('change', function () {\n directionKey = directionSelect.value || 'all';\n onFiltersChange();\n });\n }\n if (genderSelect) {\n genderSelect.addEventListener('change', function () {\n genderKey = genderSelect.value || 'all';\n onFiltersChange();\n });\n }\n if (experienceSelect) {\n experienceSelect.addEventListener('change', function () {\n var value = experienceSelect.value || 'all';\n experienceMin = value === 'all' ? 0 : (parseInt(value, 10) || 0);\n onFiltersChange();\n });\n }\n root.querySelectorAll('[data-doctors-v6-toggle]').forEach(function (input) {\n input.addEventListener('change', function () {\n var kind = input.getAttribute('data-doctors-v6-toggle');\n var on = !!input.checked;\n if (kind === 'online') onlineOnly = on;\n if (kind === 'today') todayOnly = on;\n if (kind === 'pediatric') pediatricOnly = on;\n onFiltersChange();\n });\n });\n if (moreParamsBtn) {\n moreParamsBtn.addEventListener('click', function () {\n extraOpen = !extraOpen;\n syncExtraPanel();\n });\n }\n if (resetBtn) {\n resetBtn.addEventListener('click', function () {\n resetFilters();\n });\n }\n root.querySelectorAll('[data-doctors-v6-clear]').forEach(function (btn) {\n btn.addEventListener('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n var kind = btn.getAttribute('data-doctors-v6-clear');\n if (kind === 'specialty' && specialtySelect) {\n specialtySelect.value = 'all';\n specialtyKey = 'all';\n }\n if (kind === 'direction' && directionSelect) {\n directionSelect.value = 'all';\n directionKey = 'all';\n }\n if (kind === 'gender' && genderSelect) {\n genderSelect.value = 'all';\n genderKey = 'all';\n }\n if (kind === 'experience' && experienceSelect) {\n experienceSelect.value = 'all';\n experienceMin = 0;\n }\n onFiltersChange();\n });\n });\n function bindMq(mq) {\n if (typeof mq.addEventListener === 'function') {\n mq.addEventListener('change', function () {\n syncSearchPlaceholder();\n syncExtraPanel();\n syncCardActions();\n if (expanded) return;\n syncVisibility();\n });\n } else if (typeof mq.addListener === 'function') {\n mq.addListener(function () {\n syncSearchPlaceholder();\n syncExtraPanel();\n syncCardActions();\n if (expanded) return;\n syncVisibility();\n });\n }\n }\n bindMq(mobileMq);\n bindMq(tabletMq);\n if (typeof ResizeObserver === 'function') {\n var actionsRo = new ResizeObserver(function () {\n syncCardActions();\n });\n root.querySelectorAll('.doctors-v6__actions').forEach(function (actions) {\n actionsRo.observe(actions);\n });\n } else {\n window.addEventListener('resize', syncCardActions);\n }\n if (searchInput && typeof ResizeObserver === 'function') {\n var searchRo = new ResizeObserver(function () {\n syncSearchPlaceholder();\n });\n searchRo.observe(searchPhEl || searchInput);\n } else {\n window.addEventListener('resize', syncSearchPlaceholder);\n }\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(function () {\n syncSearchPlaceholder();\n syncCardActions();\n });\n }\n syncSearchPlaceholder();\n syncExtraPanel();\n syncVisibility();\n requestAnimationFrame(syncCardActions);\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('prices\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.prices-v3').forEach(function (root) {\n if (root.dataset.pricesV3Ready === 'true') return;\n root.dataset.pricesV3Ready = 'true';\n var tabs = root.querySelectorAll('[data-prices-v3-tab]');\n var panels = root.querySelectorAll('[data-prices-v3-panel]');\n var searchInput = root.querySelector('[data-prices-v3-search]');\n var categorySelect = root.querySelector('[data-prices-v3-select]');\n function getActivePanel() {\n return root.querySelector('.prices-v3__panel.is-active');\n }\n function activateTab(key) {\n tabs.forEach(function (tab) {\n var isActive = tab.getAttribute('data-prices-v3-tab') === key;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n panels.forEach(function (panel) {\n var isActive = panel.getAttribute('data-prices-v3-panel') === key;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n });\n if (categorySelect && categorySelect.value !== key) {\n categorySelect.value = key;\n }\n if (searchInput) {\n searchInput.value = '';\n filterActivePanel('');\n }\n }\n function filterActivePanel(query) {\n var panel = getActivePanel();\n if (!panel) return;\n var normalized = (query || '').trim().toLowerCase();\n panel.querySelectorAll('[data-prices-v3-search-item]').forEach(function (item) {\n var haystack = (item.getAttribute('data-prices-v3-search-item') || '').toLowerCase();\n var match = normalized === '' || haystack.indexOf(normalized) !== -1;\n item.classList.toggle('is-hidden', !match);\n });\n }\n tabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n activateTab(tab.getAttribute('data-prices-v3-tab'));\n });\n });\n if (categorySelect) {\n categorySelect.addEventListener('change', function () {\n activateTab(categorySelect.value);\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n filterActivePanel(searchInput.value);\n });\n }\n root.querySelectorAll('[data-prices-v3-group]:not(.prices-v3__item--group-static)').forEach(function (group) {\n var trigger = group.querySelector('[data-prices-v3-group-trigger]');\n var panel = group.querySelector('[data-prices-v3-group-panel]');\n if (!trigger || !panel) return;\n trigger.addEventListener('click', function () {\n var willOpen = !group.classList.contains('is-open');\n if (willOpen) {\n group.classList.add('is-open');\n trigger.setAttribute('aria-expanded', 'true');\n panel.hidden = false;\n } else {\n group.classList.remove('is-open');\n trigger.setAttribute('aria-expanded', 'false');\n panel.hidden = true;\n }\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('promo-banners\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-7');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('prices\/variant-4');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v3').forEach(function (root) {\n if (root.dataset.casesV3Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.casesV3Ready === 'true') return;\n root.dataset.casesV3Ready = 'true';\n var sliderEl = root.querySelector('.cases-v3__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.cases-v3__pagination');\n var navPrev = root.querySelector('.cases-v3__slider-nav .slider-nav__btn--prev');\n var navNext = root.querySelector('.cases-v3__slider-nav .slider-nav__btn--next');\n var carouselEl = root.querySelector('.cases-v3__carousel');\n var configuredSlides = parseInt(root.dataset.casesV3DesktopSlides, 10) || 3;\n function syncDesktopSlideWidth() {\n if (!carouselEl) return;\n if (!window.matchMedia('(min-width: 1201px)').matches || configuredSlides !== 4) {\n root.style.removeProperty('--cases-v3-slide-width');\n return;\n }\n var styles = getComputedStyle(root);\n var minWidth = parseFloat(styles.getPropertyValue('--cases-v3-slide-min')) || 373;\n var gap = parseFloat(styles.getPropertyValue('--cases-v3-slide-gap')) || 40;\n var width = carouselEl.clientWidth;\n if (!width) return;\n var maxFit = Math.floor((width + gap) \/ (minWidth + gap));\n if (maxFit < 1) maxFit = 1;\n var visibleSlides = Math.min(configuredSlides, maxFit);\n var slideWidth = (width - (visibleSlides - 1) * gap) \/ visibleSlides;\n root.style.setProperty('--cases-v3-slide-width', slideWidth.toFixed(2) + 'px');\n }\n var paginationHost = root.querySelector('.cases-v3__slider-foot .slider-pagination-host');\n function syncDotsPagination(swiper, options) {\n if (!swiper.pagination || !paginationEl) return;\n options = options || {};\n var forceRender = options.forceRender !== false;\n var isMobile = window.matchMedia('(max-width: 768px)').matches;\n if (isMobile) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n var bulletCount = paginationEl.querySelectorAll('.swiper-pagination-bullet').length;\n if (paginationHost) paginationHost.hidden = bulletCount <= 1;\n } else {\n swiper.pagination.disable();\n if (paginationHost) paginationHost.hidden = false;\n }\n }\n syncDesktopSlideWidth();\n var swiper = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n spaceBetween: 40,\n speed: 320,\n loop: false,\n navigation: {\n nextEl: navNext,\n prevEl: navPrev,\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n breakpoints: {\n 0: { spaceBetween: 24 },\n 1200: { spaceBetween: 40 },\n },\n on: {\n init: function (s) {\n syncDesktopSlideWidth();\n s.update();\n syncDotsPagination(s);\n },\n resize: function (s) {\n syncDesktopSlideWidth();\n s.update();\n syncDotsPagination(s);\n },\n breakpoint: function (s) {\n syncDesktopSlideWidth();\n s.update();\n syncDotsPagination(s);\n },\n slideChange: function (s) {\n syncDotsPagination(s, { forceRender: false });\n },\n },\n });\n function setNavEnabled(enabled) {\n if (navPrev) navPrev.disabled = !enabled;\n if (navNext) navNext.disabled = !enabled;\n }\n var wrapperEl = sliderEl.querySelector('.swiper-wrapper');\n var allSlides = Array.prototype.slice.call(root.querySelectorAll('.cases-v3__slide'));\n function resetBeforeAfterInVisibleSlides() {\n root.querySelectorAll('.cases-v3__slide:not([hidden]) .cases-v3__media').forEach(function (media) {\n media.style.setProperty('--cases-v3-reveal', '50%');\n media.classList.add('is-blurred');\n var handle = media.querySelector('.cases-v3__handle');\n if (handle) handle.setAttribute('aria-valuenow', '50');\n });\n }\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v3__media').forEach(function (media) {\n if (media.dataset.casesV3BeforeAfterReady === 'true') return;\n media.dataset.casesV3BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v3__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV3BlurTimer) {\n clearTimeout(media.__casesV3BlurTimer);\n media.__casesV3BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV3BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV3BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v3-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n event.stopPropagation();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var step = 2;\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v3-reveal') || '50').replace('%', '')) || 50;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - step);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + step);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n function setSlidesForFilter(key) {\n var list;\n if (key === 'all') {\n list = allSlides.slice();\n } else {\n list = allSlides.filter(function (slide) {\n return (slide.dataset.caseCategory || '') === key;\n });\n }\n allSlides.forEach(function (slide) {\n slide.hidden = list.indexOf(slide) === -1;\n });\n if (wrapperEl) {\n wrapperEl.innerHTML = '';\n list.forEach(function (slide) { wrapperEl.appendChild(slide); });\n }\n syncDesktopSlideWidth();\n swiper.update();\n swiper.slideTo(0, 0);\n setNavEnabled(list.length > 1);\n syncDotsPagination(swiper);\n initBeforeAfterSliders();\n resetBeforeAfterInVisibleSlides();\n }\n function applyFilter(key) {\n setSlidesForFilter(key);\n }\n var filtersEl = root.querySelector('.cases-v3__filters');\n var chips = root.querySelectorAll('[data-cases-v3-filter]');\n function revealSelectedChip(chip) {\n if (!filtersEl || !chip || filtersEl.scrollWidth <= filtersEl.clientWidth) return;\n requestAnimationFrame(function () {\n var filtersRect = filtersEl.getBoundingClientRect();\n var chipRect = chip.getBoundingClientRect();\n var edgeGap = 8;\n var scrollDelta = 0;\n if (chipRect.left < filtersRect.left + edgeGap) {\n scrollDelta = chipRect.left - filtersRect.left - edgeGap;\n } else if (chipRect.right > filtersRect.right - edgeGap) {\n scrollDelta = chipRect.right - filtersRect.right + edgeGap;\n }\n if (!scrollDelta) return;\n filtersEl.scrollTo({\n left: filtersEl.scrollLeft + scrollDelta,\n behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n });\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n var key = chip.dataset.casesV3Filter || 'all';\n chips.forEach(function (btn) {\n var isActive = btn === chip;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n revealSelectedChip(chip);\n applyFilter(key);\n });\n });\n root.querySelectorAll('.cases-v3__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n initBeforeAfterSliders();\n applyFilter('all');\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('text\/variant-5');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-1');\n function initRoot(root) {\n if (!root || root.dataset.patientsV1Ready === 'true') return;\n root.dataset.patientsV1Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('[data-patients-v1-item]'));\n var moreBtn = root.querySelector('[data-patients-v1-more]');\n var visibleLimit = parseInt(root.dataset.patientsV1Limit || '4', 10) || 4;\n if (visibleLimit < 1) visibleLimit = 1;\n var expanded = false;\n if (!items.length) {\n if (moreBtn) moreBtn.hidden = true;\n return;\n }\n function syncVisibility() {\n var visibleIndex = 0;\n items.forEach(function (item) {\n var collapsed = !expanded && visibleIndex >= visibleLimit;\n item.classList.toggle('is-hidden', collapsed);\n if (!collapsed) {\n visibleIndex += 1;\n }\n });\n if (moreBtn) {\n moreBtn.hidden = expanded || items.length <= visibleLimit;\n }\n }\n syncVisibility();\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n }\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.patients-v1').forEach(initRoot);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.patients-v2').forEach(function (root) {\n if (root.dataset.patientsV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.patientsV2Ready === 'true') return;\n var sliderEl = root.querySelector('.patients-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 2) {\n root.dataset.patientsV2Ready = 'true';\n root.classList.add('is-locked');\n return;\n }\n var styles = getComputedStyle(root);\n var trackGap = parseFloat(styles.getPropertyValue('--patients-v2-track-gap')) || 24;\n var paginationEl = root.querySelector('.patients-v2__pagination');\n var compactMq = window.matchMedia('(max-width: 768px)');\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (compactMq.matches && !swiper.isLocked) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n } else {\n swiper.pagination.disable();\n }\n }\n function syncSliderNav(swiper) {\n root.classList.toggle('is-locked', compactMq.matches || !!swiper.isLocked);\n }\n root.dataset.patientsV2Ready = 'true';\n var swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: trackGap,\n speed: 320,\n watchOverflow: true,\n observer: true,\n observeParents: true,\n roundLengths: false,\n navigation: {\n nextEl: root.querySelector('.patients-v2__slider-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.patients-v2__slider-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (swiper) {\n swiper.update();\n syncDotsPagination(swiper, true);\n syncSliderNav(swiper);\n },\n resize: function (swiper) {\n syncDotsPagination(swiper, false);\n syncSliderNav(swiper);\n },\n observerUpdate: function (swiper) {\n syncSliderNav(swiper);\n },\n breakpoint: function (swiper) {\n syncDotsPagination(swiper, true);\n syncSliderNav(swiper);\n },\n lock: function (swiper) {\n syncDotsPagination(swiper, false);\n syncSliderNav(swiper);\n },\n unlock: function (swiper) {\n syncDotsPagination(swiper, true);\n syncSliderNav(swiper);\n },\n },\n });\n if (typeof compactMq.addEventListener === 'function') {\n compactMq.addEventListener('change', function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n });\n } else if (typeof compactMq.addListener === 'function') {\n compactMq.addListener(function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n });\n }\n root.querySelectorAll('.patients-v2__slider-nav .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-3');\n document.addEventListener('click', function (event) {\n var btn = event.target.closest('.cta-v3 .btn');\n if (!btn) return;\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-3');\n function initRoot(root) {\n if (root.dataset.patientsV3Ready === 'true') return;\n root.dataset.patientsV3Ready = 'true';\n var items = root.querySelectorAll('.patients-v3__item');\n if (!items.length) return;\n var list = root.querySelector('.patients-v3__list');\n var accordionMq = window.matchMedia('(max-width: 1200px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n var activeIndex = 0;\n function isDesktop() {\n return !accordionMq.matches;\n }\n function shouldAnimateAccordion() {\n return accordionMq.matches && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!list) return;\n if (!isDesktop()) {\n list.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-patients-v3-panel].is-active');\n if (!activePanel) {\n list.style.minHeight = '';\n return;\n }\n list.style.minHeight = '';\n var tabsHeight = list.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n list.style.minHeight = Math.max(tabsHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function activateDesktop(index) {\n activeIndex = index;\n root.querySelectorAll('[data-patients-v3-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-patients-v3-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n root.querySelectorAll('[data-patients-v3-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-patients-v3-index'), 10);\n var isActive = panelIndex === index;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, options) {\n var tab = item.querySelector('[data-patients-v3-tab]');\n var panel = item.querySelector('[data-patients-v3-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n var instant = !!(options && options.instant);\n if (instant) {\n panel.style.transition = 'none';\n }\n item.classList.remove('is-open');\n if (tab) {\n tab.classList.remove('is-active');\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n }\n panel.classList.remove('is-active');\n panel.setAttribute('aria-hidden', 'true');\n if (instant || !shouldAnimateAccordion()) {\n panel.hidden = true;\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item, index, options) {\n var tab = item.querySelector('[data-patients-v3-tab]');\n var panel = item.querySelector('[data-patients-v3-panel]');\n if (!panel) return;\n var instant = !!(options && options.instant);\n if (instant) {\n panel.style.transition = 'none';\n }\n activeIndex = index;\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-selected', 'true');\n tab.tabIndex = 0;\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n root.querySelectorAll('[data-patients-v3-tab]').forEach(function (otherTab) {\n if (otherTab === tab) return;\n otherTab.classList.remove('is-active');\n otherTab.setAttribute('aria-selected', 'false');\n otherTab.tabIndex = -1;\n });\n root.querySelectorAll('[data-patients-v3-panel]').forEach(function (otherPanel) {\n if (otherPanel === panel) return;\n otherPanel.classList.remove('is-active');\n otherPanel.hidden = true;\n otherPanel.setAttribute('aria-hidden', 'true');\n });\n if (instant || !shouldAnimateAccordion()) {\n item.classList.add('is-open');\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n }\n function restoreTabViewport(tab, viewportTop) {\n if (!tab) return;\n var nextY = window.pageYOffset + tab.getBoundingClientRect().top - viewportTop;\n if (!isFinite(nextY)) return;\n nextY = Math.max(0, nextY);\n var rootEl = document.documentElement;\n var prevBehavior = rootEl.style.scrollBehavior;\n rootEl.style.scrollBehavior = 'auto';\n (document.scrollingElement || rootEl).scrollTop = nextY;\n rootEl.style.scrollBehavior = prevBehavior;\n }\n function switchAccordionItem(item, tab, index) {\n var viewportTop = tab.getBoundingClientRect().top;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, { instant: true });\n });\n restoreTabViewport(tab, viewportTop);\n openAccordionItem(item, index, { instant: true });\n restoreTabViewport(tab, viewportTop);\n if (typeof tab.focus === 'function') {\n tab.focus({ preventScroll: true });\n }\n restoreTabViewport(tab, viewportTop);\n window.requestAnimationFrame(function () {\n restoreTabViewport(tab, viewportTop);\n });\n window.setTimeout(function () {\n restoreTabViewport(tab, viewportTop);\n }, 0);\n }\n function syncMode(options) {\n var instant = !!(options && options.instant);\n if (accordionMq.matches) {\n if (list) list.style.minHeight = '';\n items.forEach(function (item) {\n closeAccordionItem(item, { instant: true });\n });\n return;\n }\n activateDesktop(activeIndex);\n if (instant) {\n root.querySelectorAll('[data-patients-v3-panel]').forEach(function (panel) {\n panel.style.transition = '';\n });\n }\n }\n window.addEventListener('resize', scheduleStageHeight);\n function getVisibleTabs() {\n return Array.prototype.slice.call(root.querySelectorAll('[data-patients-v3-tab]'));\n }\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-patients-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-patients-v3-index'), 10);\n if (isNaN(index)) return;\n var item = tab.closest('.patients-v3__item');\n if (!item) return;\n if (accordionMq.matches) {\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n switchAccordionItem(item, tab, index);\n return;\n }\n activateDesktop(index);\n });\n root.addEventListener('keydown', function (event) {\n var tab = event.target.closest('[data-patients-v3-tab]');\n if (!tab || !root.contains(tab)) return;\n var visibleTabs = getVisibleTabs();\n var index = visibleTabs.indexOf(tab);\n if (index === -1) return;\n var nextIndex = index;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (index + 1) % visibleTabs.length;\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextIndex = (index - 1 + visibleTabs.length) % visibleTabs.length;\n } else {\n return;\n }\n event.preventDefault();\n var nextTab = visibleTabs[nextIndex];\n var nextItemIndex = parseInt(nextTab.getAttribute('data-patients-v3-index'), 10);\n var item = nextTab.closest('.patients-v3__item');\n if (!item) return;\n if (accordionMq.matches) {\n if (item.classList.contains('is-open')) {\n nextTab.focus({ preventScroll: true });\n return;\n }\n switchAccordionItem(item, nextTab, nextItemIndex);\n return;\n }\n activateDesktop(nextItemIndex);\n nextTab.focus({ preventScroll: true });\n });\n function onBreakpointChange() {\n syncMode({ instant: true });\n }\n if (typeof accordionMq.addEventListener === 'function') {\n accordionMq.addEventListener('change', onBreakpointChange);\n } else if (typeof accordionMq.addListener === 'function') {\n accordionMq.addListener(onBreakpointChange);\n }\n syncMode({ instant: true });\n }\n function boot() {\n document.querySelectorAll('.patients-v3').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-4');\n function initRoot(root) {\n if (root.dataset.patientsV4Ready === 'true') return;\n root.dataset.patientsV4Ready = 'true';\n var navButtons = root.querySelectorAll('[data-patients-v4-nav]');\n var sections = root.querySelectorAll('[data-patients-v4-section]');\n var accordionItems = root.querySelectorAll('.patients-v4__item');\n var main = root.querySelector('[data-patients-v4-main]');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n var scrollSpyLock = false;\n var scrollSpyTimer = null;\n function shouldAnimateAccordion() {\n return !desktopMq.matches && !reduceMotionMq.matches;\n }\n function mountDesktopPanels() {\n if (!main) return;\n var panels = Array.prototype.slice.call(root.querySelectorAll('[data-patients-v4-panel]'));\n panels.sort(function (a, b) {\n return parseInt(a.getAttribute('data-patients-v4-index'), 10) - parseInt(b.getAttribute('data-patients-v4-index'), 10);\n });\n panels.forEach(function (panel) {\n main.appendChild(panel);\n });\n }\n function unmountDesktopPanels() {\n accordionItems.forEach(function (item) {\n var index = item.getAttribute('data-patients-v4-index');\n var panel = root.querySelector('[data-patients-v4-panel][data-patients-v4-index=\"' + index + '\"]');\n if (panel) item.appendChild(panel);\n });\n }\n function getScrollOffset() {\n var navH = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--site-nav-h')) || 0;\n var space24 = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--space-24')) || 24;\n return navH + space24 + 8;\n }\n function setActiveNav(sectionId) {\n navButtons.forEach(function (btn) {\n var isActive = btn.getAttribute('data-patients-v4-nav') === sectionId;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-current', isActive ? 'true' : 'false');\n });\n }\n function scrollToSection(sectionId) {\n var section = root.querySelector('[data-patients-v4-section=\"' + sectionId + '\"]');\n if (!section) return;\n scrollSpyLock = true;\n window.clearTimeout(scrollSpyTimer);\n var top = section.getBoundingClientRect().top + window.pageYOffset - getScrollOffset();\n top = Math.max(0, top);\n setActiveNav(sectionId);\n if (reduceMotionMq.matches) {\n (document.scrollingElement || document.documentElement).scrollTop = top;\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 50);\n return;\n }\n window.scrollTo({ top: top, behavior: 'smooth' });\n scrollSpyTimer = window.setTimeout(function () {\n scrollSpyLock = false;\n }, 700);\n }\n function activateDesktop() {\n accordionItems.forEach(function (item) {\n item.classList.remove('is-open');\n });\n sections.forEach(function (section) {\n section.hidden = false;\n section.setAttribute('aria-hidden', 'false');\n section.style.transition = '';\n });\n navButtons.forEach(function (btn, index) {\n btn.setAttribute('aria-expanded', 'true');\n if (!btn.classList.contains('is-active') && index === 0) {\n var anyActive = false;\n navButtons.forEach(function (entry) {\n if (entry.classList.contains('is-active')) anyActive = true;\n });\n if (!anyActive) {\n btn.classList.add('is-active');\n btn.setAttribute('aria-current', 'true');\n }\n }\n });\n }\n function closeAccordionItem(item, options) {\n var tab = item.querySelector('[data-patients-v4-accordion-tab]');\n var panel = item.querySelector('[data-patients-v4-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n var instant = !!(options && options.instant);\n if (instant) panel.style.transition = 'none';\n item.classList.remove('is-open');\n if (tab) {\n tab.classList.remove('is-active');\n tab.setAttribute('aria-expanded', 'false');\n tab.setAttribute('aria-current', 'false');\n }\n panel.setAttribute('aria-hidden', 'true');\n if (instant || !shouldAnimateAccordion()) {\n panel.hidden = true;\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item) {\n var tab = item.querySelector('[data-patients-v4-accordion-tab]');\n var panel = item.querySelector('[data-patients-v4-panel]');\n if (!panel) return;\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-expanded', 'true');\n tab.setAttribute('aria-current', 'true');\n }\n panel.setAttribute('aria-hidden', 'false');\n if (!shouldAnimateAccordion()) {\n item.classList.add('is-open');\n return;\n }\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n }\n function restoreTabViewport(tab, viewportTop) {\n if (!tab) return;\n var nextY = window.pageYOffset + tab.getBoundingClientRect().top - viewportTop;\n if (!isFinite(nextY)) return;\n nextY = Math.max(0, nextY);\n var rootEl = document.documentElement;\n var prevBehavior = rootEl.style.scrollBehavior;\n rootEl.style.scrollBehavior = 'auto';\n (document.scrollingElement || rootEl).scrollTop = nextY;\n rootEl.style.scrollBehavior = prevBehavior;\n }\n function switchAccordionItem(item, tab) {\n var viewportTop = tab.getBoundingClientRect().top;\n accordionItems.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, { instant: true });\n });\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n restoreTabViewport(tab, viewportTop);\n return;\n }\n openAccordionItem(item);\n restoreTabViewport(tab, viewportTop);\n }\n function syncMode() {\n if (desktopMq.matches) {\n mountDesktopPanels();\n activateDesktop();\n return;\n }\n unmountDesktopPanels();\n accordionItems.forEach(function (item) {\n closeAccordionItem(item, { instant: true });\n });\n }\n navButtons.forEach(function (btn) {\n btn.addEventListener('click', function () {\n if (desktopMq.matches) {\n scrollToSection(btn.getAttribute('data-patients-v4-nav'));\n return;\n }\n var item = btn.closest('.patients-v4__item');\n if (!item) return;\n switchAccordionItem(item, btn);\n });\n });\n if ('IntersectionObserver' in window && sections.length) {\n var observer = new IntersectionObserver(function (entries) {\n if (!desktopMq.matches || scrollSpyLock) return;\n var visible = entries\n .filter(function (entry) { return entry.isIntersecting; })\n .sort(function (a, b) { return b.intersectionRatio - a.intersectionRatio; });\n if (!visible.length) return;\n setActiveNav(visible[0].target.getAttribute('data-patients-v4-section'));\n }, {\n root: null,\n rootMargin: '-' + getScrollOffset() + 'px 0px -55% 0px',\n threshold: [0, 0.15, 0.35, 0.55, 0.75, 1]\n });\n sections.forEach(function (section) {\n observer.observe(section);\n });\n }\n function onBreakpointChange() {\n syncMode();\n }\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', onBreakpointChange);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(onBreakpointChange);\n }\n syncMode();\n }\n function boot() {\n document.querySelectorAll('.patients-v4').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('patients\/variant-5');\n function initList(root) {\n if (!root || root.dataset.patientsV5ListReady === 'true') return;\n root.dataset.patientsV5ListReady = 'true';\n var moreBtn = root.querySelector('[data-patients-v5-more]');\n if (!moreBtn) return;\n moreBtn.addEventListener('click', function () {\n root.querySelectorAll('[data-patients-v5-doc-item].is-hidden').forEach(function (item) {\n item.classList.remove('is-hidden');\n });\n moreBtn.hidden = true;\n });\n }\n function initRoot(root) {\n if (root.dataset.patientsV5Ready === 'true') return;\n root.dataset.patientsV5Ready = 'true';\n root.querySelectorAll('[data-patients-v5-list]').forEach(initList);\n var items = root.querySelectorAll('.patients-v5__item');\n if (!items.length) return;\n var body = root.querySelector('.patients-v5__body');\n var main = root.querySelector('[data-patients-v5-main]');\n var desktopMq = window.matchMedia('(min-width: 1201px)');\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var accordionCloseMotionMs = 300;\n var activeIndex = 0;\n function isDesktop() {\n return desktopMq.matches;\n }\n function shouldAnimateAccordion() {\n return !desktopMq.matches && !reduceMotionMq.matches;\n }\n function syncStageHeight() {\n if (!body) return;\n if (!isDesktop()) {\n body.style.minHeight = '';\n return;\n }\n var activePanel = root.querySelector('[data-patients-v5-panel].is-active');\n if (!activePanel) {\n body.style.minHeight = '';\n return;\n }\n body.style.minHeight = '';\n var contentHeight = body.offsetHeight;\n var panelHeight = activePanel.offsetHeight;\n body.style.minHeight = Math.max(contentHeight, panelHeight) + 'px';\n }\n var stageHeightFrame = null;\n function scheduleStageHeight() {\n if (stageHeightFrame !== null) return;\n stageHeightFrame = window.requestAnimationFrame(function () {\n stageHeightFrame = null;\n syncStageHeight();\n });\n }\n function activateDesktop(index) {\n activeIndex = index;\n root.querySelectorAll('[data-patients-v5-tab]').forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-patients-v5-index'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-current', isActive ? 'true' : 'false');\n tab.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-patients-v5-index'), 10);\n var isActive = panelIndex === index;\n var owner = items[panelIndex];\n if (isActive && main) {\n main.appendChild(panel);\n } else if (owner && panel.parentElement !== owner) {\n owner.appendChild(panel);\n }\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n });\n items.forEach(function (item) {\n item.classList.remove('is-open');\n });\n scheduleStageHeight();\n }\n function closeAccordionItem(item, options) {\n var tab = item.querySelector('[data-patients-v5-tab]');\n var panel = item.querySelector('[data-patients-v5-panel]');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n var instant = !!(options && options.instant);\n if (instant) panel.style.transition = 'none';\n item.classList.remove('is-open');\n if (tab) {\n tab.classList.remove('is-active');\n tab.setAttribute('aria-expanded', 'false');\n tab.setAttribute('aria-current', 'false');\n }\n panel.classList.remove('is-active');\n panel.setAttribute('aria-hidden', 'true');\n if (instant || !shouldAnimateAccordion()) {\n panel.hidden = true;\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, accordionCloseMotionMs + 20);\n }\n function openAccordionItem(item, index, options) {\n var tab = item.querySelector('[data-patients-v5-tab]');\n var panel = item.querySelector('[data-patients-v5-panel]');\n if (!panel) return;\n var instant = !!(options && options.instant);\n if (instant) panel.style.transition = 'none';\n activeIndex = index;\n panel.hidden = false;\n if (tab) {\n tab.classList.add('is-active');\n tab.setAttribute('aria-expanded', 'true');\n tab.setAttribute('aria-current', 'true');\n }\n panel.classList.add('is-active');\n panel.setAttribute('aria-hidden', 'false');\n root.querySelectorAll('[data-patients-v5-tab]').forEach(function (otherTab) {\n if (otherTab === tab) return;\n otherTab.classList.remove('is-active');\n otherTab.setAttribute('aria-expanded', 'false');\n otherTab.setAttribute('aria-current', 'false');\n });\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (otherPanel) {\n if (otherPanel === panel) return;\n otherPanel.classList.remove('is-active');\n otherPanel.hidden = true;\n otherPanel.setAttribute('aria-hidden', 'true');\n });\n if (instant || !shouldAnimateAccordion()) {\n item.classList.add('is-open');\n void panel.offsetHeight;\n if (instant) panel.style.transition = '';\n return;\n }\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n });\n }\n function restoreTabViewport(tab, viewportTop) {\n if (!tab) return;\n var nextY = window.pageYOffset + tab.getBoundingClientRect().top - viewportTop;\n if (!isFinite(nextY)) return;\n nextY = Math.max(0, nextY);\n var rootEl = document.documentElement;\n var prevBehavior = rootEl.style.scrollBehavior;\n rootEl.style.scrollBehavior = 'auto';\n (document.scrollingElement || rootEl).scrollTop = nextY;\n rootEl.style.scrollBehavior = prevBehavior;\n }\n function switchAccordionItem(item, tab, index) {\n var viewportTop = tab.getBoundingClientRect().top;\n items.forEach(function (entry) {\n if (entry !== item) closeAccordionItem(entry, { instant: true });\n });\n restoreTabViewport(tab, viewportTop);\n openAccordionItem(item, index, { instant: true });\n restoreTabViewport(tab, viewportTop);\n if (typeof tab.focus === 'function') {\n tab.focus({ preventScroll: true });\n }\n restoreTabViewport(tab, viewportTop);\n window.requestAnimationFrame(function () {\n restoreTabViewport(tab, viewportTop);\n });\n window.setTimeout(function () {\n restoreTabViewport(tab, viewportTop);\n }, 0);\n }\n function mountPanelsInItems() {\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (panel) {\n var panelIndex = parseInt(panel.getAttribute('data-patients-v5-index'), 10);\n var owner = items[panelIndex];\n if (owner && panel.parentElement !== owner) owner.appendChild(panel);\n });\n }\n function syncMode(options) {\n var instant = !!(options && options.instant);\n if (!desktopMq.matches) {\n if (body) body.style.minHeight = '';\n mountPanelsInItems();\n var openIndex = activeIndex;\n items.forEach(function (item) {\n closeAccordionItem(item, { instant: true });\n });\n if (items[openIndex]) {\n openAccordionItem(items[openIndex], openIndex, { instant: true });\n }\n return;\n }\n activateDesktop(activeIndex);\n if (instant) {\n root.querySelectorAll('[data-patients-v5-panel]').forEach(function (panel) {\n panel.style.transition = '';\n });\n }\n }\n root.addEventListener('click', function (event) {\n if (!event.target.closest('[data-patients-v5-more]')) return;\n window.requestAnimationFrame(function () {\n scheduleStageHeight();\n });\n });\n window.addEventListener('resize', scheduleStageHeight);\n root.addEventListener('click', function (event) {\n var tab = event.target.closest('[data-patients-v5-tab]');\n if (!tab || !root.contains(tab)) return;\n var index = parseInt(tab.getAttribute('data-patients-v5-index'), 10);\n if (isNaN(index)) return;\n var item = tab.closest('.patients-v5__item');\n if (!item) return;\n if (!desktopMq.matches) {\n if (item.classList.contains('is-open')) {\n closeAccordionItem(item);\n return;\n }\n switchAccordionItem(item, tab, index);\n return;\n }\n activateDesktop(index);\n });\n function onBreakpointChange() {\n syncMode({ instant: true });\n }\n if (typeof desktopMq.addEventListener === 'function') {\n desktopMq.addEventListener('change', onBreakpointChange);\n } else if (typeof desktopMq.addListener === 'function') {\n desktopMq.addListener(onBreakpointChange);\n }\n syncMode({ instant: true });\n }\n function boot() {\n document.querySelectorAll('.patients-v5').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-8');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('benefits\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('expert-advice\/variant-2');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-technologies\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.treatment-technologies-v2').forEach(function (root) {\n if (root.dataset.treatmentTechnologiesV2Ready === 'true') return;\n function initSwiper() {\n if (root.dataset.treatmentTechnologiesV2Ready === 'true') return;\n root.dataset.treatmentTechnologiesV2Ready = 'true';\n var sliderEl = root.querySelector('.treatment-technologies-v2__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var paginationEl = root.querySelector('.treatment-technologies-v2__pagination');\n var navPrev = root.querySelector('.treatment-technologies-v2__controls .slider-nav__btn--prev');\n var navNext = root.querySelector('.treatment-technologies-v2__controls .slider-nav__btn--next');\n var slideCount = sliderEl.querySelectorAll('.swiper-slide').length;\n var swiperConfig = {\n initialSlide: 0,\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n observer: true,\n observeParents: true,\n autoHeight: true,\n };\n if (slideCount > 1) {\n swiperConfig.loop = true;\n swiperConfig.navigation = {\n nextEl: navNext,\n prevEl: navPrev,\n };\n swiperConfig.pagination = {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n };\n }\n new Swiper(sliderEl, swiperConfig);\n if (!navPrev || !navNext) return;\n root.querySelectorAll('.treatment-technologies-v2__controls .slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('treatment-technologies\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v4').forEach(function (root) {\n if (root.dataset.reviewsV4Ready === 'true') return;\n root.dataset.reviewsV4Ready = 'true';\n root.querySelectorAll('[data-reviews-v4-filter]').forEach(function (chip) {\n chip.addEventListener('click', function () {\n var filter = chip.dataset.reviewsV4Filter;\n if (!filter) return;\n root.querySelectorAll('[data-reviews-v4-filter]').forEach(function (item) {\n var isActive = item === chip;\n item.classList.toggle('is-active', isActive);\n item.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n root.querySelectorAll('[data-reviews-v4-group]').forEach(function (group) {\n var groupKey = group.dataset.reviewsV4Group;\n var isVisible = filter === 'negative' ? groupKey === 'negative' : groupKey === 'positive';\n group.classList.toggle('is-hidden', !isVisible);\n });\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.certificates-v2').forEach(function (root) {\n if (root.dataset.certificatesV2Ready === 'true') return;\n root.dataset.certificatesV2Ready = 'true';\n var sliderEl = root.querySelector('.certificates-v2__slider.swiper');\n var paginationEl = root.querySelector('.certificates-v2__pagination');\n var navRoot = root.querySelector('.certificates-v2__slider-nav');\n var toolbarEl = root.querySelector('.certificates-v2__slider-toolbar');\n var compactMq = window.matchMedia('(max-width: 1200px)');\n var swiperInstance = null;\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (compactMq.matches && !swiper.isLocked) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n return;\n }\n swiper.pagination.disable();\n }\n function syncSliderNav(swiper) {\n if (!toolbarEl) return;\n toolbarEl.classList.toggle('is-visible', !compactMq.matches && !swiper.isLocked);\n }\n function syncLockedLayout(swiper) {\n root.classList.toggle('certificates-v2--locked', swiper.isLocked);\n }\n function initSlider() {\n if (swiperInstance || !sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 1) return;\n var pageStyles = getComputedStyle(document.documentElement);\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 24,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 1201: {\n spaceBetween: 40,\n slidesOffsetAfter: 0,\n },\n },\n navigation: navRoot ? {\n nextEl: navRoot.querySelector('.slider-nav__btn--next'),\n prevEl: navRoot.querySelector('.slider-nav__btn--prev'),\n } : false,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n on: {\n init: function (instance) {\n instance.update();\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n resize: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n breakpoint: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n lock: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n unlock: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n update: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n },\n });\n if (navRoot) {\n navRoot.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n }\n function bootSwiper() {\n requestAnimationFrame(function () {\n requestAnimationFrame(initSlider);\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n compactMq.addEventListener('change', function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n syncLockedLayout(swiperInstance);\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('faq\/variant-2');\n function initAccordion(panel) {\n if (panel.dataset.faqV2AccordionReady === 'true') return;\n panel.dataset.faqV2AccordionReady = 'true';\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var items = Array.prototype.slice.call(panel.querySelectorAll('.faq-v2__item'));\n var moreBtn = panel.querySelector('[data-faq-v2-more]');\n var initial = parseInt(panel.getAttribute('data-faq-v2-initial'), 10) || 0;\n var step = parseInt(panel.getAttribute('data-faq-v2-step'), 10) || 0;\n function shouldAnimate() {\n return !reduceMotionMq.matches;\n }\n function updateMoreButton() {\n if (!moreBtn) return;\n var hasHidden = items.some(function (item) { return item.hidden; });\n moreBtn.hidden = !hasHidden;\n }\n function revealNextBatch() {\n if (!step) return;\n var shown = 0;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].hidden) continue;\n items[i].hidden = false;\n shown += 1;\n if (shown >= step) break;\n }\n updateMoreButton();\n }\n if (initial && items.length > initial) {\n items.forEach(function (item, idx) {\n if (idx >= initial) item.hidden = true;\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', revealNextBatch);\n updateMoreButton();\n }\n function closeItem(item) {\n var trigger = item.querySelector('.faq-v2__trigger');\n var itemPanel = item.querySelector('.faq-v2__item-panel');\n if (!itemPanel || (!item.classList.contains('is-open') && itemPanel.hidden)) return;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n itemPanel.hidden = true;\n }\n function openItem(item) {\n var trigger = item.querySelector('.faq-v2__trigger');\n var itemPanel = item.querySelector('.faq-v2__item-panel');\n if (!itemPanel) return;\n itemPanel.hidden = false;\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n if (!shouldAnimate()) {\n item.classList.add('is-open');\n return;\n }\n item.classList.remove('is-open');\n void itemPanel.offsetHeight;\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n });\n }\n function closeAllItems() {\n items.forEach(function (item) {\n closeItem(item);\n });\n }\n panel.addEventListener('click', function (event) {\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v2__trigger');\n if (!trigger || !panel.contains(trigger)) return;\n var item = trigger.closest('.faq-v2__item');\n if (!item || item.hidden) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeItem(item);\n return;\n }\n items.forEach(function (entry) {\n if (entry !== item) closeItem(entry);\n });\n openItem(item);\n });\n panel.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('.faq-v2__trigger');\n if (!trigger || !panel.contains(trigger)) return;\n event.preventDefault();\n trigger.click();\n });\n panel._faqV2CloseAll = closeAllItems;\n }\n function initRoot(root) {\n if (root.dataset.faqV2Ready === 'true') return;\n root.dataset.faqV2Ready = 'true';\n var tabs = Array.prototype.slice.call(root.querySelectorAll('[data-faq-v2-tab]'));\n var panels = Array.prototype.slice.call(root.querySelectorAll('[data-faq-v2-tabpanel]'));\n panels.forEach(initAccordion);\n function activateTab(key) {\n tabs.forEach(function (tab) {\n var isActive = tab.getAttribute('data-faq-v2-tab') === key;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n panels.forEach(function (panel) {\n var isActive = panel.getAttribute('data-faq-v2-tabpanel') === key;\n panel.hidden = !isActive;\n panel.setAttribute('aria-hidden', isActive ? 'false' : 'true');\n if (!isActive && typeof panel._faqV2CloseAll === 'function') {\n panel._faqV2CloseAll();\n }\n });\n }\n tabs.forEach(function (tab) {\n tab.addEventListener('click', function () {\n activateTab(tab.getAttribute('data-faq-v2-tab'));\n });\n });\n }\n function boot() {\n document.querySelectorAll('.faq-v2').forEach(initRoot);\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n } else {\n boot();\n }\n})();\n(function () {\n window.__LOADED_SECTIONS.push('vacancies\/variant-1');\n document.querySelectorAll('[data-vacancies-v1-list]').forEach(function (list) {\n if (list.dataset.vacanciesV1Ready === 'true') return;\n list.dataset.vacanciesV1Ready = 'true';\n var getPanel = function (item, btn) {\n var panelId = btn.getAttribute('aria-controls');\n if (!panelId) return null;\n try {\n return item.querySelector('#' + CSS.escape(panelId));\n } catch (e) {\n return item.querySelector('#' + panelId);\n }\n };\n var clearTransitionEnd = function (panel) {\n if (!panel || !panel.__vacanciesV1OnEnd) return;\n panel.removeEventListener('transitionend', panel.__vacanciesV1OnEnd);\n panel.__vacanciesV1OnEnd = null;\n };\n var closeItem = function (btn, panel) {\n if (!btn || !panel) return;\n if (btn.getAttribute('aria-expanded') !== 'true') return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'false');\n panel.style.height = panel.scrollHeight + 'px';\n panel.offsetHeight; \/\/ force reflow\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.__vacanciesV1OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.hidden = true;\n panel.style.height = '';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV1OnEnd);\n };\n var openItem = function (btn, panel) {\n if (!btn || !panel) return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'true');\n panel.hidden = false;\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.offsetHeight; \/\/ force reflow\n panel.classList.add('is-open');\n panel.style.height = panel.scrollHeight + 'px';\n panel.__vacanciesV1OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.style.height = 'auto';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV1OnEnd);\n };\n list.addEventListener('click', function (event) {\n var btn = event.target.closest('[data-vacancies-v1-trigger]');\n if (!btn || btn.disabled) return;\n var item = btn.closest('.vacancies-v1__item');\n if (!item) return;\n var panel = getPanel(item, btn);\n if (!panel) return;\n var isOpen = btn.getAttribute('aria-expanded') === 'true';\n if (isOpen) {\n closeItem(btn, panel);\n return;\n }\n list.querySelectorAll('[data-vacancies-v1-trigger][aria-expanded=\\\"true\\\"]').forEach(function (otherBtn) {\n if (otherBtn === btn) return;\n var otherItem = otherBtn.closest('.vacancies-v1__item');\n if (!otherItem) return;\n var otherPanel = getPanel(otherItem, otherBtn);\n if (!otherPanel) return;\n closeItem(otherBtn, otherPanel);\n });\n openItem(btn, panel);\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.certificates-v4').forEach(function (root) {\n if (root.dataset.certificatesV4Ready === 'true') return;\n root.dataset.certificatesV4Ready = 'true';\n var sliderEl = root.querySelector('.certificates-v4__slider.swiper');\n var paginationEl = root.querySelector('.certificates-v4__pagination');\n var navWrap = root.querySelector('.certificates-v4__nav-wrap');\n var navRoot = root.querySelector('.certificates-v4__nav');\n var compactMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function syncDotsPagination(swiper, forceRender) {\n if (!swiper.pagination || !paginationEl) return;\n if (compactMq.matches && !swiper.isLocked) {\n swiper.pagination.enable();\n paginationEl.classList.remove('swiper-pagination-disabled', 'swiper-pagination-hidden');\n if (forceRender) swiper.pagination.render();\n swiper.pagination.update();\n return;\n }\n swiper.pagination.disable();\n }\n function syncSliderNav(swiper) {\n if (!navWrap) return;\n navWrap.classList.toggle('is-visible', !compactMq.matches && !swiper.isLocked);\n }\n function syncLockedLayout(swiper) {\n root.classList.toggle('certificates-v4--locked', swiper.isLocked);\n }\n function initSlider() {\n if (swiperInstance || !sliderEl || typeof Swiper === 'undefined') return;\n if (sliderEl.querySelectorAll('.swiper-slide').length < 2) return;\n var pageStyles = getComputedStyle(document.documentElement);\n var pageGutter = parseFloat(pageStyles.getPropertyValue('--page-gutter')) || 16;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 'auto',\n slidesPerGroup: 1,\n spaceBetween: 16,\n slidesOffsetAfter: pageGutter,\n speed: 320,\n watchOverflow: true,\n roundLengths: true,\n breakpoints: {\n 769: {\n spaceBetween: 24,\n slidesOffsetAfter: 0,\n },\n 1201: {\n spaceBetween: 32,\n slidesOffsetAfter: 0,\n },\n },\n navigation: navRoot ? {\n nextEl: navRoot.querySelector('.slider-nav__btn--next'),\n prevEl: navRoot.querySelector('.slider-nav__btn--prev'),\n } : false,\n pagination: paginationEl ? {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n } : false,\n on: {\n init: function (instance) {\n instance.update();\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n resize: function (instance) {\n instance.update();\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n breakpoint: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n },\n lock: function (instance) {\n syncDotsPagination(instance, false);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n unlock: function (instance) {\n syncDotsPagination(instance, true);\n syncSliderNav(instance);\n syncLockedLayout(instance);\n },\n },\n });\n if (navRoot) {\n navRoot.querySelectorAll('.slider-nav__btn').forEach(function (btn) {\n btn.addEventListener('click', function () {\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n });\n }\n if (typeof compactMq.addEventListener === 'function') {\n compactMq.addEventListener('change', function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n syncLockedLayout(swiperInstance);\n });\n } else if (typeof compactMq.addListener === 'function') {\n compactMq.addListener(function () {\n if (!swiperInstance) return;\n swiperInstance.update();\n syncDotsPagination(swiperInstance, true);\n syncSliderNav(swiperInstance);\n syncLockedLayout(swiperInstance);\n });\n }\n }\n function bootSwiper() {\n initSlider();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.certificates-v3').forEach(function (root) {\n if (root.dataset.certificatesV3Ready === 'true') return;\n root.dataset.certificatesV3Ready = 'true';\n var filters = root.querySelectorAll('[data-certificates-v3-filter]');\n var select = root.querySelector('[data-certificates-v3-select]');\n var items = root.querySelectorAll('[data-certificates-v3-item]');\n var searchInput = root.querySelector('[data-certificates-v3-search]');\n var moreBtn = root.querySelector('[data-certificates-v3-more]');\n var initialLimit = parseInt(root.dataset.certificatesV3Limit || '4', 10) || 4;\n var activeFilter = 'all';\n var expanded = false;\n var searchQuery = '';\n function setActiveFilter(key) {\n activeFilter = key || 'all';\n expanded = false;\n filters.forEach(function (btn) {\n var on = (btn.dataset.certificatesV3Filter || '') === activeFilter;\n btn.classList.toggle('is-active', on);\n btn.setAttribute('aria-pressed', on ? 'true' : 'false');\n });\n if (select && select.value !== activeFilter) {\n select.value = activeFilter;\n }\n syncVisibility();\n }\n function matchesFilter(item) {\n if (activeFilter === 'all') return true;\n return (item.dataset.certificatesV3Category || '') === activeFilter;\n }\n function matchesSearch(item) {\n if (!searchQuery) return true;\n var haystack = item.dataset.certificatesV3SearchItem || '';\n return haystack.indexOf(searchQuery) !== -1;\n }\n function countMatched() {\n var matched = 0;\n items.forEach(function (item) {\n if (matchesFilter(item) && matchesSearch(item)) matched += 1;\n });\n return matched;\n }\n function syncMoreButton(matched) {\n if (!moreBtn) return;\n var hasMore = !expanded && matched > initialLimit;\n moreBtn.hidden = !hasMore;\n }\n function syncVisibility() {\n var visibleIndex = 0;\n items.forEach(function (item) {\n var match = matchesFilter(item) && matchesSearch(item);\n item.classList.toggle('is-filtered-out', !match);\n if (!match) {\n item.classList.add('is-hidden');\n item.hidden = true;\n return;\n }\n item.classList.remove('is-filtered-out');\n var collapsed = !expanded && visibleIndex >= initialLimit;\n if (collapsed) {\n item.classList.add('is-collapsed', 'is-hidden');\n item.hidden = true;\n } else {\n item.classList.remove('is-collapsed', 'is-hidden');\n item.hidden = false;\n visibleIndex += 1;\n }\n });\n syncMoreButton(countMatched());\n }\n filters.forEach(function (btn) {\n btn.addEventListener('click', function () {\n setActiveFilter(btn.dataset.certificatesV3Filter || 'all');\n });\n });\n if (select) {\n select.addEventListener('change', function () {\n setActiveFilter(select.value || 'all');\n });\n }\n if (searchInput) {\n searchInput.addEventListener('input', function () {\n searchQuery = (searchInput.value || '').trim().toLowerCase();\n expanded = false;\n syncVisibility();\n });\n }\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n });\n }\n syncVisibility();\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('vacancies\/variant-3');\n document.querySelectorAll('[data-vacancies-v3-list]').forEach(function (list) {\n if (list.dataset.vacanciesV3Ready === 'true') return;\n list.dataset.vacanciesV3Ready = 'true';\n var getPanel = function (item, btn) {\n var panelId = btn.getAttribute('aria-controls');\n if (!panelId) return null;\n try {\n return item.querySelector('#' + CSS.escape(panelId));\n } catch (e) {\n return item.querySelector('#' + panelId);\n }\n };\n var clearTransitionEnd = function (panel) {\n if (!panel || !panel.__vacanciesV3OnEnd) return;\n panel.removeEventListener('transitionend', panel.__vacanciesV3OnEnd);\n panel.__vacanciesV3OnEnd = null;\n };\n var closeItem = function (item, btn, panel) {\n if (!btn || !panel) return;\n if (btn.getAttribute('aria-expanded') !== 'true') return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'false');\n item.classList.remove('is-open');\n panel.style.height = panel.scrollHeight + 'px';\n panel.offsetHeight;\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.__vacanciesV3OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.hidden = true;\n panel.style.height = '';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV3OnEnd);\n };\n var openItem = function (item, btn, panel) {\n if (!btn || !panel) return;\n clearTransitionEnd(panel);\n btn.setAttribute('aria-expanded', 'true');\n item.classList.add('is-open');\n panel.hidden = false;\n panel.classList.remove('is-open');\n panel.style.height = '0px';\n panel.offsetHeight;\n panel.classList.add('is-open');\n panel.style.height = panel.scrollHeight + 'px';\n panel.__vacanciesV3OnEnd = function (e) {\n if (e.propertyName !== 'height') return;\n panel.style.height = 'auto';\n clearTransitionEnd(panel);\n };\n panel.addEventListener('transitionend', panel.__vacanciesV3OnEnd);\n };\n list.addEventListener('click', function (event) {\n var btn = event.target.closest('[data-vacancies-v3-trigger]');\n if (!btn || btn.disabled) return;\n var item = btn.closest('.vacancies-v3__item');\n if (!item) return;\n var panel = getPanel(item, btn);\n if (!panel) return;\n var isOpen = btn.getAttribute('aria-expanded') === 'true';\n if (isOpen) {\n closeItem(item, btn, panel);\n return;\n }\n list.querySelectorAll('[data-vacancies-v3-trigger][aria-expanded=\"true\"]').forEach(function (otherBtn) {\n if (otherBtn === btn) return;\n var otherItem = otherBtn.closest('.vacancies-v3__item');\n if (!otherItem) return;\n var otherPanel = getPanel(otherItem, otherBtn);\n if (!otherPanel) return;\n closeItem(otherItem, otherBtn, otherPanel);\n });\n openItem(item, btn, panel);\n });\n });\n function vacanciesV3HashTitle() {\n var hash = (window.location.hash || '').replace(\/^#\/, '');\n if (!hash) return null;\n var el = document.getElementById(hash);\n if (!el || !el.classList.contains('vacancies-v3__title')) return null;\n return el;\n }\n function vacanciesV3ScrollOffset() {\n var styles = getComputedStyle(document.documentElement);\n var navH = parseFloat(styles.getPropertyValue('--site-nav-h')) || 0;\n var sticky = parseFloat(styles.getPropertyValue('--site-sticky-offset')) || 0;\n var space = parseFloat(styles.getPropertyValue('--space-32')) || 32;\n return Math.max(navH, sticky) + space;\n }\n function vacanciesV3ScrollToHash() {\n var el = vacanciesV3HashTitle();\n if (!el) return;\n var delta = el.getBoundingClientRect().top - vacanciesV3ScrollOffset();\n if (Math.abs(delta) < 2) return;\n window.scrollBy(0, delta);\n }\n function vacanciesV3ScheduleHashScroll() {\n if (!vacanciesV3HashTitle()) return;\n var run = function () {\n vacanciesV3ScrollToHash();\n requestAnimationFrame(vacanciesV3ScrollToHash);\n };\n run();\n window.setTimeout(run, 150);\n }\n if (document.readyState === 'complete') {\n vacanciesV3ScheduleHashScroll();\n } else {\n window.addEventListener('load', vacanciesV3ScheduleHashScroll);\n }\n window.addEventListener('hashchange', vacanciesV3ScheduleHashScroll);\n window.addEventListener('pageshow', function (event) {\n if (event.persisted) vacanciesV3ScheduleHashScroll();\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-5');\n document.querySelectorAll('.cta-v5').forEach(function (root) {\n root.querySelectorAll('.cta-v5__file').forEach(function (field) {\n var input = field.querySelector('.cta-v5__file-input');\n var label = field.querySelector('[data-cta-v5-file-label]');\n if (!input || !label) return;\n var fallback = label.textContent;\n input.addEventListener('change', function () {\n var file = input.files && input.files[0];\n label.textContent = file ? file.name : fallback;\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cases\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.cases-v4').forEach(function (root) {\n if (root.dataset.casesV4Ready === 'true') return;\n function init() {\n if (root.dataset.casesV4Ready === 'true') return;\n root.dataset.casesV4Ready = 'true';\n var items = Array.prototype.slice.call(root.querySelectorAll('.cases-v4__item'));\n var moreBtn = root.querySelector('[data-cases-v4-more]');\n var filtersEl = root.querySelector('.cases-v4__filters');\n var chips = root.querySelectorAll('[data-cases-v4-filter]');\n var pageSize = parseInt(root.getAttribute('data-cases-v4-page'), 10) || 9;\n var currentFilter = 'all';\n var visibleLimit = pageSize;\n function initBeforeAfterSliders() {\n root.querySelectorAll('.cases-v4__media').forEach(function (media) {\n if (media.dataset.casesV4BeforeAfterReady === 'true') return;\n media.dataset.casesV4BeforeAfterReady = 'true';\n var handle = media.querySelector('.cases-v4__handle');\n if (!handle) return;\n var BLUR_RETURN_MS = 300;\n function clamp01(n) {\n return Math.max(0, Math.min(1, n));\n }\n function clearBlurTimer() {\n if (media.__casesV4BlurTimer) {\n clearTimeout(media.__casesV4BlurTimer);\n media.__casesV4BlurTimer = null;\n }\n }\n function scheduleBlurReturn() {\n clearBlurTimer();\n media.__casesV4BlurTimer = setTimeout(function () {\n media.classList.add('is-blurred');\n media.__casesV4BlurTimer = null;\n }, BLUR_RETURN_MS);\n }\n function markActive() {\n media.classList.remove('is-blurred');\n clearBlurTimer();\n }\n function setRevealPercent(pct) {\n var safe = Math.max(0, Math.min(100, pct));\n media.style.setProperty('--cases-v4-reveal', safe.toFixed(2) + '%');\n handle.setAttribute('aria-valuenow', String(Math.round(safe)));\n }\n function percentFromClientX(clientX) {\n var rect = media.getBoundingClientRect();\n if (!rect.width) return 50;\n var x = (clientX - rect.left) \/ rect.width;\n return clamp01(x) * 100;\n }\n setRevealPercent(50);\n media.classList.add('is-blurred');\n var dragging = false;\n function onPointerMove(event) {\n if (!dragging) return;\n markActive();\n setRevealPercent(percentFromClientX(event.clientX));\n }\n function stopDrag(event) {\n if (!dragging) return;\n dragging = false;\n try { media.releasePointerCapture(event.pointerId); } catch (e) {}\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', stopDrag);\n window.removeEventListener('pointercancel', stopDrag);\n scheduleBlurReturn();\n }\n function canStartDrag(event) {\n if (event.isPrimary === false) return false;\n if (event.pointerType === 'mouse' && event.button !== 0) return false;\n return true;\n }\n function startDrag(event) {\n if (!canStartDrag(event)) return;\n event.preventDefault();\n dragging = true;\n markActive();\n try { media.setPointerCapture(event.pointerId); } catch (e) {}\n setRevealPercent(percentFromClientX(event.clientX));\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopDrag);\n window.addEventListener('pointercancel', stopDrag);\n }\n handle.addEventListener('pointerdown', startDrag);\n media.addEventListener('pointerdown', startDrag);\n handle.addEventListener('keydown', function (event) {\n var current = parseFloat((getComputedStyle(media).getPropertyValue('--cases-v4-reveal') || '50').replace('%', '')) || 50;\n var stepKey = 2;\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n markActive();\n setRevealPercent(current - stepKey);\n scheduleBlurReturn();\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n markActive();\n setRevealPercent(current + stepKey);\n scheduleBlurReturn();\n }\n if (event.key === 'Home') {\n event.preventDefault();\n markActive();\n setRevealPercent(0);\n scheduleBlurReturn();\n }\n if (event.key === 'End') {\n event.preventDefault();\n markActive();\n setRevealPercent(100);\n scheduleBlurReturn();\n }\n });\n });\n }\n function resetBeforeAfterInVisibleItems() {\n root.querySelectorAll('.cases-v4__item:not([hidden]) .cases-v4__media').forEach(function (media) {\n media.style.setProperty('--cases-v4-reveal', '50%');\n media.classList.add('is-blurred');\n var handle = media.querySelector('.cases-v4__handle');\n if (handle) handle.setAttribute('aria-valuenow', '50');\n });\n }\n function matchesFilter(item) {\n return currentFilter === 'all' || (item.dataset.caseCategory || '') === currentFilter;\n }\n function updateMoreButton(matchingCount) {\n if (!moreBtn) return;\n moreBtn.hidden = matchingCount <= visibleLimit;\n }\n function applyVisibility() {\n var shown = 0;\n var matchingCount = 0;\n items.forEach(function (item) {\n if (!matchesFilter(item)) {\n item.hidden = true;\n return;\n }\n matchingCount += 1;\n shown += 1;\n item.hidden = shown > visibleLimit;\n });\n updateMoreButton(matchingCount);\n resetBeforeAfterInVisibleItems();\n }\n function revealSelectedChip(chip) {\n if (!filtersEl || !chip || filtersEl.scrollWidth <= filtersEl.clientWidth) return;\n requestAnimationFrame(function () {\n var filtersRect = filtersEl.getBoundingClientRect();\n var chipRect = chip.getBoundingClientRect();\n var edgeGap = 8;\n var scrollDelta = 0;\n if (chipRect.left < filtersRect.left + edgeGap) {\n scrollDelta = chipRect.left - filtersRect.left - edgeGap;\n } else if (chipRect.right > filtersRect.right - edgeGap) {\n scrollDelta = chipRect.right - filtersRect.right + edgeGap;\n }\n if (!scrollDelta) return;\n filtersEl.scrollTo({\n left: filtersEl.scrollLeft + scrollDelta,\n behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth',\n });\n });\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n var key = chip.dataset.casesV4Filter || 'all';\n currentFilter = key;\n visibleLimit = pageSize;\n chips.forEach(function (btn) {\n var isActive = btn === chip;\n btn.classList.toggle('is-active', isActive);\n btn.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n revealSelectedChip(chip);\n applyVisibility();\n });\n });\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n visibleLimit += pageSize;\n applyVisibility();\n });\n }\n initBeforeAfterSliders();\n applyVisibility();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, init);\n } else {\n init();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('cta\/variant-2');\n document.addEventListener('click', function (event) {\n var btn = event.target.closest('.cta-v2 .btn');\n if (!btn) return;\n btn.classList.add('is-pressed');\n setTimeout(function () { btn.classList.remove('is-pressed'); }, 160);\n });\n})();\n(function () {\n document.querySelectorAll('.news-article-v1').forEach(function (root) {\n function initSwiper() {\n if (root.dataset.newsArticleV1SwiperReady === 'true') return;\n var gallery = root.querySelector('.news-article-v1__gallery');\n if (!gallery || typeof Swiper === 'undefined') return;\n var pagination = root.querySelector('.news-article-v1__gallery-pagination');\n var prev = root.querySelector('.news-article-v1__gallery-prev');\n var next = root.querySelector('.news-article-v1__gallery-next');\n new Swiper(gallery, {\n slidesPerView: 1.15,\n spaceBetween: 16,\n watchOverflow: true,\n autoHeight: false,\n pagination: pagination ? {\n el: pagination,\n clickable: true,\n type: 'bullets'\n } : undefined,\n navigation: (prev && next) ? { prevEl: prev, nextEl: next } : undefined,\n breakpoints: {\n 769: {\n slidesPerView: 2,\n spaceBetween: 40\n }\n }\n });\n root.dataset.newsArticleV1SwiperReady = 'true';\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initSwiper);\n } else {\n initSwiper();\n }\n });\n window.__LOADED_SECTIONS.push('news-article\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS = window.__LOADED_SECTIONS || [];\n window.__LOADED_SECTIONS.push('contacts\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.contacts-v1').forEach(function (root) {\n if (root.dataset.contactsV1Ready === 'true') return;\n root.dataset.contactsV1Ready = 'true';\n var branchCount = parseInt(root.getAttribute('data-contacts-v1-count') || '1', 10);\n var branchButtons = root.querySelectorAll('[data-contacts-v1-branch]');\n var panel = root.querySelector('[data-contacts-v1-panel]');\n var dataEl = root.querySelector('.contacts-v1__data');\n var branchesData = [];\n if (dataEl) {\n try {\n branchesData = JSON.parse(dataEl.textContent || '[]');\n } catch (error) {\n branchesData = [];\n }\n }\n var infoPanels = root.querySelectorAll('[data-contacts-v1-info-index]');\n var mapPhotoEl = root.querySelector('[data-contacts-v1-map-photo]');\n var mapTextWrap = root.querySelector('[data-contacts-v1-map-text-wrap]');\n var mapTextViewport = root.querySelector('[data-contacts-v1-map-text-viewport]');\n var mapTextTrack = root.querySelector('[data-contacts-v1-map-text-scrollbar]');\n var mapTextThumb = root.querySelector('[data-contacts-v1-map-text-thumb]');\n var mapTextEl = root.querySelector('[data-contacts-v1-map-text]');\n var mapCardEl = root.querySelector('[data-contacts-v1-map-card]');\n var mapCanvasEl = root.querySelector('[data-contacts-v1-map-canvas]');\n var mapHeight = parseInt(root.getAttribute('data-contacts-v1-map-height') || '635', 10);\n var mapZoom = parseInt(root.getAttribute('data-contacts-v1-map-zoom') || '16', 10);\n var mapFocusZoom = parseInt(root.getAttribute('data-contacts-v1-map-focus-zoom') || '', 10);\n if (Number.isNaN(mapFocusZoom)) {\n mapFocusZoom = mapZoom + 2;\n }\n var ymapsApiKey = root.getAttribute('data-contacts-v1-map-api-key') || '';\n var siteLogoSrc = root.getAttribute('data-contacts-v1-site-logo') || '';\n if (!siteLogoSrc) {\n var headerLogoEl = document.querySelector('.site-header__logo');\n if (headerLogoEl) {\n siteLogoSrc = headerLogoEl.getAttribute('src') || '';\n }\n }\n var mapInstance = null;\n var mapSchemeLayer = null;\n var placemarkInstances = [];\n var mapRenderToken = 0;\n var activeBranchIndex = 0;\n var mapShowsOverview = false;\n var mapLayoutCompact = null;\n var mapResizeTimer = null;\n var mapBehaviors = ['drag', 'scrollZoom', 'pinchZoom', 'dblClick'];\n var mapFitMarginLeft = 340;\n var mapCompactMedia = window.matchMedia('(max-width: 1200px)');\n function syncMapTextScrollUi() {\n if (!mapTextWrap || !mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n if (maxScroll <= 1) {\n mapTextWrap.classList.add('is-static');\n mapTextThumb.style.height = '';\n mapTextThumb.style.transform = '';\n return;\n }\n mapTextWrap.classList.remove('is-static');\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = Math.max(48, (mapTextViewport.clientHeight \/ mapTextViewport.scrollHeight) * trackHeight);\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var thumbOffset = maxScroll > 0 ? (mapTextViewport.scrollTop \/ maxScroll) * maxThumbOffset : 0;\n mapTextThumb.style.height = thumbHeight + 'px';\n mapTextThumb.style.transform = 'translateY(' + thumbOffset + 'px)';\n }\n function scrollMapTextFromPointer(clientY) {\n if (!mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = mapTextThumb.offsetHeight;\n if (maxScroll <= 1 || trackHeight <= 0) {\n return;\n }\n var rect = mapTextTrack.getBoundingClientRect();\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var pointerOffset = clientY - rect.top - thumbHeight \/ 2;\n var thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerOffset));\n var ratio = maxThumbOffset > 0 ? thumbOffset \/ maxThumbOffset : 0;\n mapTextViewport.scrollTop = ratio * maxScroll;\n }\n var activeMapTextPointerId = null;\n function onMapTextPointerMove(event) {\n if (event.pointerId !== activeMapTextPointerId) return;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n }\n function stopMapTextPointerDrag(event) {\n if (event && activeMapTextPointerId !== null && event.pointerId !== activeMapTextPointerId) return;\n activeMapTextPointerId = null;\n document.removeEventListener('pointermove', onMapTextPointerMove);\n document.removeEventListener('pointerup', stopMapTextPointerDrag);\n document.removeEventListener('pointercancel', stopMapTextPointerDrag);\n }\n function startMapTextPointerDrag(event) {\n if (!mapTextWrap || mapTextWrap.hidden) return;\n activeMapTextPointerId = event.pointerId;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n document.addEventListener('pointermove', onMapTextPointerMove);\n document.addEventListener('pointerup', stopMapTextPointerDrag);\n document.addEventListener('pointercancel', stopMapTextPointerDrag);\n }\n if (mapTextViewport) {\n mapTextViewport.addEventListener('scroll', syncMapTextScrollUi, { passive: true });\n }\n if (mapTextTrack) {\n mapTextTrack.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (mapTextThumb) {\n mapTextThumb.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (window.ResizeObserver && mapTextViewport) {\n var mapTextResizeObserver = new ResizeObserver(syncMapTextScrollUi);\n mapTextResizeObserver.observe(mapTextViewport);\n if (mapTextEl) {\n mapTextResizeObserver.observe(mapTextEl);\n }\n if (mapCardEl) {\n mapTextResizeObserver.observe(mapCardEl);\n }\n } else {\n window.addEventListener('resize', syncMapTextScrollUi);\n }\n window.requestAnimationFrame(syncMapTextScrollUi);\n function isMapCompactLayout() {\n return mapCompactMedia.matches;\n }\n function isTouchLikeDevice() {\n if (window.matchMedia && window.matchMedia('(pointer: coarse)').matches) return true;\n return 'ontouchstart' in window || (navigator.maxTouchPoints || 0) > 0;\n }\n function destroyMapInstance() {\n if (mapInstance && typeof mapInstance.destroy === 'function') {\n try {\n mapInstance.destroy();\n } catch (error) {\n }\n }\n mapInstance = null;\n mapSchemeLayer = null;\n placemarkInstances = [];\n if (mapCanvasEl) {\n mapCanvasEl.innerHTML = '';\n mapCanvasEl.classList.remove('is-jsapi');\n }\n }\n function scheduleMapLayoutRefresh() {\n clearTimeout(mapResizeTimer);\n mapResizeTimer = setTimeout(function () {\n var compact = isMapCompactLayout();\n if (compact === mapLayoutCompact) return;\n mapLayoutCompact = compact;\n destroyMapInstance();\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n renderBranchMap(activeBranchIndex);\n });\n });\n }, 200);\n }\n function whenMapCanvasReady(callback) {\n function check() {\n if (!mapCanvasEl) return;\n if (mapCanvasEl.offsetWidth > 0 && mapCanvasEl.offsetHeight > 0) {\n callback();\n return;\n }\n requestAnimationFrame(check);\n }\n check();\n }\n mapLayoutCompact = isMapCompactLayout();\n if (typeof mapCompactMedia.addEventListener === 'function') {\n mapCompactMedia.addEventListener('change', scheduleMapLayoutRefresh);\n } else if (typeof mapCompactMedia.addListener === 'function') {\n mapCompactMedia.addListener(scheduleMapLayoutRefresh);\n }\n window.addEventListener('resize', scheduleMapLayoutRefresh);\n window.addEventListener('orientationchange', function () {\n setTimeout(scheduleMapLayoutRefresh, 300);\n });\n function toLngLat(coords) {\n if (!Array.isArray(coords) || coords.length < 2) return [0, 0];\n return [coords[1], coords[0]];\n }\n function getBranchPlacemarkCoords(branch) {\n var map = branch && branch.map ? branch.map : {};\n if (Array.isArray(map.placemark) && map.placemark.length >= 2) {\n return toLngLat(map.placemark);\n }\n return null;\n }\n function getAllPlacemarkCoords() {\n return branchesData\n .map(function (branch) {\n return getBranchPlacemarkCoords(branch);\n })\n .filter(function (coords) {\n return Array.isArray(coords) && coords.length >= 2;\n });\n }\n function getCoordsBounds(coordsList) {\n var minLng = Infinity;\n var minLat = Infinity;\n var maxLng = -Infinity;\n var maxLat = -Infinity;\n coordsList.forEach(function (coords) {\n var lng = coords[0];\n var lat = coords[1];\n if (lng < minLng) minLng = lng;\n if (lng > maxLng) maxLng = lng;\n if (lat < minLat) minLat = lat;\n if (lat > maxLat) maxLat = lat;\n });\n return [\n [minLng, minLat],\n [maxLng, maxLat],\n ];\n }\n function expandBounds(bounds, paddingRatio) {\n paddingRatio = typeof paddingRatio === 'number' ? paddingRatio : 0.2;\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var lngSpan = maxLng - minLng;\n var latSpan = maxLat - minLat;\n var padLng = lngSpan > 0 ? lngSpan * paddingRatio : 0.01;\n var padLat = latSpan > 0 ? latSpan * paddingRatio : 0.01;\n return [\n [minLng - padLng, minLat - padLat],\n [maxLng + padLng, maxLat + padLat],\n ];\n }\n function getBoundsSpanKm(bounds) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLat = (minLat + maxLat) \/ 2;\n var latKm = Math.abs(maxLat - minLat) * 111;\n var lngKm = Math.abs(maxLng - minLng) * 111 * Math.cos((centerLat * Math.PI) \/ 180);\n return Math.sqrt((latKm * latKm) + (lngKm * lngKm));\n }\n function ensureMinBoundsSpan(bounds, minHalfSpanDeg) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLng = (minLng + maxLng) \/ 2;\n var centerLat = (minLat + maxLat) \/ 2;\n var halfLng = Math.max((maxLng - minLng) \/ 2, minHalfSpanDeg);\n var halfLat = Math.max((maxLat - minLat) \/ 2, minHalfSpanDeg);\n return [\n [centerLng - halfLng, centerLat - halfLat],\n [centerLng + halfLng, centerLat + halfLat],\n ];\n }\n function getAdaptiveBoundsFit(spanKm) {\n if (spanKm < 2) {\n return { paddingRatio: 0.28, minHalfSpanDeg: 0.007 };\n }\n if (spanKm < 12) {\n return { paddingRatio: 0.2, minHalfSpanDeg: 0.005 };\n }\n if (spanKm < 50) {\n return { paddingRatio: 0.24, minHalfSpanDeg: null };\n }\n if (spanKm < 250) {\n return { paddingRatio: 0.34, minHalfSpanDeg: null };\n }\n return { paddingRatio: 0.42, minHalfSpanDeg: null };\n }\n function buildOverviewBounds(coords) {\n var bounds = getCoordsBounds(coords);\n var spanKm = getBoundsSpanKm(bounds);\n var fit = getAdaptiveBoundsFit(spanKm);\n var paddingRatio = fit.paddingRatio;\n if (isMapCompactLayout()) {\n paddingRatio += 0.22;\n }\n if (fit.minHalfSpanDeg) {\n bounds = ensureMinBoundsSpan(bounds, fit.minHalfSpanDeg);\n }\n return expandBounds(bounds, paddingRatio);\n }\n function getCompactMapMargins(isOverview) {\n if (isOverview) {\n return [64, 36, 52, 36];\n }\n return [52, 36, 44, 36];\n }\n function getMapOverviewMargin(coords) {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(true);\n }\n var topBottom = 56;\n var right = 32;\n if (coords && coords.length > 1) {\n var spanKm = getBoundsSpanKm(getCoordsBounds(coords));\n if (spanKm > 50) {\n topBottom = 80;\n }\n }\n return [topBottom, right, topBottom, mapFitMarginLeft];\n }\n function getMapBranchFocusMargin() {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(false);\n }\n return [32, 32, 32, mapFitMarginLeft];\n }\n function getMapMarginForLocation(location, coords) {\n if (location && location.bounds) {\n return getMapOverviewMargin(coords);\n }\n return getMapBranchFocusMargin();\n }\n function applyMapMarginForLocation(location, coords) {\n if (!mapInstance || typeof mapInstance.setMargin !== 'function') return;\n mapInstance.setMargin(getMapMarginForLocation(location, coords));\n }\n function getAllMarkersMapLocation() {\n var coords = getAllPlacemarkCoords();\n if (!coords.length) return null;\n if (coords.length === 1) {\n return {\n center: coords[0],\n zoom: mapZoom,\n };\n }\n return {\n bounds: buildOverviewBounds(coords),\n };\n }\n function getBranchFocusMapLocation(branch) {\n var center = getBranchPlacemarkCoords(branch);\n if (!center) return null;\n return {\n center: center,\n zoom: mapFocusZoom,\n duration: 300,\n };\n }\n function createMapMarkerElement(branchIndex, branch, isActive) {\n var map = branch.map || {};\n var markerEl = document.createElement('div');\n markerEl.className = 'contacts-v1__map-marker' + (isActive ? ' is-active' : '');\n markerEl.dataset.branchIndex = String(branchIndex);\n var pinEl = document.createElement('button');\n pinEl.type = 'button';\n pinEl.className = 'contacts-v1__map-pin';\n pinEl.title = map.balloon || branch.title || '';\n pinEl.setAttribute('aria-label', map.balloon || branch.title || ('Филиал ' + (branchIndex + 1)));\n var iconEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n iconEl.setAttribute('class', 'contacts-v1__map-pin-icon');\n iconEl.setAttribute('viewBox', '0 0 31 45');\n iconEl.setAttribute('fill', 'none');\n iconEl.setAttribute('aria-hidden', 'true');\n var useEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n useEl.setAttributeNS('http:\/\/www.w3.org\/1999\/xlink', 'href', '#icon-contacts-map-pin');\n useEl.setAttribute('href', '#icon-contacts-map-pin');\n iconEl.appendChild(useEl);\n pinEl.appendChild(iconEl);\n pinEl.addEventListener('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n var markerIndex = parseInt(markerEl.dataset.branchIndex, 10);\n activateBranchFromMapPin(markerIndex);\n });\n var badgeEl = document.createElement('div');\n badgeEl.className = 'contacts-v1__map-pin-badge';\n badgeEl.setAttribute('aria-hidden', 'true');\n if (siteLogoSrc) {\n var logoEl = document.createElement('img');\n logoEl.className = 'contacts-v1__map-pin-badge-logo';\n logoEl.src = siteLogoSrc;\n logoEl.alt = '';\n logoEl.decoding = 'async';\n badgeEl.appendChild(logoEl);\n }\n markerEl.appendChild(pinEl);\n markerEl.appendChild(badgeEl);\n return markerEl;\n }\n function setMapViewState(location) {\n mapShowsOverview = !!(location && location.bounds);\n }\n function syncMapMarkers(activeIndex) {\n placemarkInstances.forEach(function (entry) {\n if (!entry || !entry.marker || !entry.marker.element) return;\n var markerEl = entry.marker.element;\n var isActive = entry.branchIndex === activeIndex;\n markerEl.classList.toggle('is-active', isActive);\n markerEl.classList.toggle('is-overview', mapShowsOverview);\n });\n }\n function ensureAllMapMarkers(ymaps3, activeIndex) {\n if (!mapInstance || !ymaps3 || !ymaps3.YMapMarker) return;\n var YMapMarker = ymaps3.YMapMarker;\n branchesData.forEach(function (branch, branchIndex) {\n if (placemarkInstances[branchIndex]) return;\n var coords = getBranchPlacemarkCoords(branch);\n if (!coords) return;\n var markerEl = createMapMarkerElement(branchIndex, branch, branchIndex === activeIndex);\n var marker = new YMapMarker({\n coordinates: coords,\n blockBehaviors: true,\n properties: {\n branchIndex: branchIndex,\n },\n }, markerEl);\n mapInstance.addChild(marker);\n placemarkInstances[branchIndex] = {\n marker: marker,\n branchIndex: branchIndex,\n };\n });\n }\n function renderBranchMapJsapi(index, branch, token) {\n if (!branch || !ymapsApiKey) return;\n loadYmaps3().then(function (ymaps3) {\n if (token !== mapRenderToken) return;\n whenMapCanvasReady(function () {\n if (token !== mapRenderToken) return;\n var overviewCoords = getAllPlacemarkCoords();\n var location = mapInstance\n ? getBranchFocusMapLocation(branch)\n : getAllMarkersMapLocation();\n if (!location) return;\n setMapViewState(location);\n var YMap = ymaps3.YMap;\n var YMapDefaultSchemeLayer = ymaps3.YMapDefaultSchemeLayer;\n var YMapDefaultFeaturesLayer = ymaps3.YMapDefaultFeaturesLayer;\n if (!mapInstance) {\n destroyMapInstance();\n mapCanvasEl.classList.add('is-jsapi');\n mapInstance = new YMap(mapCanvasEl, {\n location: location,\n behaviors: mapBehaviors,\n margin: getMapMarginForLocation(location, overviewCoords),\n });\n mapSchemeLayer = new YMapDefaultSchemeLayer({});\n mapInstance.addChild(mapSchemeLayer);\n if (typeof YMapDefaultFeaturesLayer === 'function') {\n mapInstance.addChild(new YMapDefaultFeaturesLayer({}));\n }\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n ensureAllMapMarkers(ymaps3, index);\n syncMapMarkers(index);\n if (isTouchLikeDevice()) {\n requestAnimationFrame(function () {\n if (!mapInstance || typeof mapInstance.setBehaviors !== 'function') return;\n mapInstance.setBehaviors(mapBehaviors);\n });\n }\n return;\n }\n applyMapMarginForLocation(location, overviewCoords);\n mapInstance.setLocation(location);\n syncMapMarkers(index);\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n });\n }).catch(function (error) {\n console.warn(\n '[contacts-v1] Yandex Maps API unavailable:',\n error && error.message ? error.message : error\n );\n });\n }\n function loadYmaps3() {\n if (!ymapsApiKey) {\n return Promise.reject(new Error('Yandex Maps API key is missing'));\n }\n if (window.ymaps3) {\n return window.ymaps3.ready.then(function () {\n return window.ymaps3;\n });\n }\n if (!window.__gorYmaps3Promise) {\n window.__gorYmaps3Promise = new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.src = 'https:\/\/api-maps.yandex.ru\/v3\/?apikey=' +\n encodeURIComponent(ymapsApiKey) +\n '&lang=ru_RU';\n script.async = true;\n script.onload = function () {\n if (!window.ymaps3) {\n reject(new Error('Yandex Maps API v3 failed to load'));\n return;\n }\n window.ymaps3.ready.then(function () {\n resolve(window.ymaps3);\n }).catch(reject);\n };\n script.onerror = function () {\n reject(new Error('Yandex Maps API v3 failed to load'));\n };\n document.head.appendChild(script);\n }).catch(function (error) {\n window.__gorYmaps3Promise = null;\n throw error;\n });\n }\n return window.__gorYmaps3Promise;\n }\n function renderBranchMap(index) {\n var branch = branchesData[index];\n if (!branch || !mapCanvasEl) return;\n var map = branch.map || {};\n var token = ++mapRenderToken;\n var photo = String(map.photo || '').trim();\n var text = String(map.entrance_text || '').trim();\n if (mapPhotoEl) {\n if (photo) {\n mapPhotoEl.src = photo;\n mapPhotoEl.alt = map.photo_alt || '';\n mapPhotoEl.hidden = false;\n } else {\n mapPhotoEl.removeAttribute('src');\n mapPhotoEl.alt = '';\n mapPhotoEl.hidden = true;\n }\n }\n if (mapTextEl) {\n mapTextEl.textContent = text;\n }\n if (mapTextWrap) {\n mapTextWrap.hidden = !text;\n mapTextViewport.scrollTop = 0;\n window.requestAnimationFrame(syncMapTextScrollUi);\n }\n if (mapCardEl) {\n mapCardEl.hidden = !photo && !text;\n }\n renderBranchMapJsapi(index, branch, token);\n }\n function renderBranchInfo(index) {\n infoPanels.forEach(function (item) {\n item.hidden = Number(item.getAttribute('data-contacts-v1-info-index')) !== index\n || item.getAttribute('data-contacts-v1-empty') === 'true';\n });\n }\n var branchesSwiper = null;\n var suppressSwiperBranchSync = false;\n var branchesSliderEl = root.querySelector('.contacts-v1__branches-slider.swiper');\n var branchesGridEl = root.querySelector('.contacts-v1__branches-grid');\n function getBranchIndexFromSwiperSlide(swiper, slideIndex) {\n if (!swiper || !swiper.slides || !swiper.slides[slideIndex]) return slideIndex;\n var tab = swiper.slides[slideIndex].querySelector('[data-contacts-v1-branch]');\n if (!tab) return slideIndex;\n var index = parseInt(tab.getAttribute('data-contacts-v1-branch'), 10);\n return Number.isNaN(index) ? slideIndex : index;\n }\n function syncBranchesSwiperToBranch(index, animate) {\n if (!branchesSwiper) return;\n var activeTab = root.querySelector('[data-contacts-v1-branch=\"' + index + '\"]');\n if (!activeTab) return;\n var slideEl = activeTab.closest('.swiper-slide');\n var speed = animate === false ? 0 : 300;\n suppressSwiperBranchSync = true;\n if (!slideEl) {\n branchesSwiper.slideTo(index, speed, false);\n window.setTimeout(function () {\n suppressSwiperBranchSync = false;\n }, speed + 50);\n return;\n }\n var slideIndex = Array.prototype.indexOf.call(branchesSwiper.slides, slideEl);\n if (slideIndex < 0) slideIndex = index;\n branchesSwiper.slideTo(slideIndex, speed, false);\n if (branchesSliderEl) {\n var sliderStyles = getComputedStyle(branchesSliderEl);\n var gutter = parseFloat(sliderStyles.paddingLeft || sliderStyles.scrollPaddingLeft) || 0;\n var desiredTranslate = -(slideEl.offsetLeft - gutter);\n var minTranslate = branchesSwiper.maxTranslate();\n var maxTranslate = branchesSwiper.minTranslate();\n if (desiredTranslate < minTranslate) desiredTranslate = minTranslate;\n if (desiredTranslate > maxTranslate) desiredTranslate = maxTranslate;\n if (Math.abs(branchesSwiper.translate - desiredTranslate) > 1) {\n if (speed > 0) {\n branchesSwiper.setTransition(speed);\n }\n branchesSwiper.setTranslate(desiredTranslate);\n branchesSwiper.updateActiveIndex();\n branchesSwiper.updateSlidesClasses();\n }\n }\n window.setTimeout(function () {\n suppressSwiperBranchSync = false;\n }, speed + 50);\n }\n function scrollBranchTabIntoView(index) {\n var activeTab = root.querySelector('[data-contacts-v1-branch=\"' + index + '\"]');\n if (!activeTab) return;\n if (branchesSwiper) {\n syncBranchesSwiperToBranch(index, true);\n return;\n }\n if (!branchesGridEl) return;\n requestAnimationFrame(function () {\n var styles = getComputedStyle(branchesGridEl);\n var gutter = parseFloat(styles.scrollPaddingLeft || styles.paddingLeft) || 0;\n var targetLeft = activeTab.offsetLeft - gutter;\n if (targetLeft < 0) targetLeft = 0;\n branchesGridEl.scrollTo({\n left: targetLeft,\n behavior: 'smooth',\n });\n });\n }\n function activateBranchFromMapPin(index) {\n if (Number.isNaN(index) || !branchesData[index]) return;\n if (index === activeBranchIndex && !mapShowsOverview) return;\n setActiveBranch(index);\n }\n function setActiveBranch(index, options) {\n options = options || {};\n activeBranchIndex = index;\n branchButtons.forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-contacts-v1-branch'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n var selectButton = tab.querySelector('[data-contacts-v1-branch-select]');\n if (selectButton) selectButton.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n if (panel) {\n panel.setAttribute('aria-labelledby', 'contacts-v1-branch-' + index);\n }\n renderBranchInfo(index);\n renderBranchMap(index);\n if (options.scrollTab !== false) {\n scrollBranchTabIntoView(index);\n }\n }\n if (window.LazyInit && mapCanvasEl) {\n window.LazyInit.whenVisible(mapCanvasEl, function () {\n renderBranchMap(activeBranchIndex);\n });\n } else {\n renderBranchMap(activeBranchIndex);\n }\n branchButtons.forEach(function (tab) {\n tab.addEventListener('click', function (event) {\n if (event.target.closest('.contacts-v1__branch-action')) return;\n var index = parseInt(tab.getAttribute('data-contacts-v1-branch'), 10);\n if (Number.isNaN(index)) return;\n setActiveBranch(index);\n });\n });\n function initBranchesSwiper() {\n if (branchesSwiper || branchCount <= 2) return;\n if (!branchesSliderEl || typeof Swiper === 'undefined') return;\n var slides = branchesSliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.contacts-v1__branches-pagination');\n branchesSwiper = new Swiper(branchesSliderEl, {\n slidesPerView: 'auto',\n spaceBetween: 12,\n watchOverflow: true,\n navigation: {\n nextEl: root.querySelector('.contacts-v1__branches-nav .slider-nav__btn--next'),\n prevEl: root.querySelector('.contacts-v1__branches-nav .slider-nav__btn--prev'),\n },\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n breakpoints: {\n 769: {\n slidesPerView: 2,\n spaceBetween: 38,\n },\n },\n on: {\n slideChange: function (swiper) {\n if (suppressSwiperBranchSync) return;\n var index = getBranchIndexFromSwiperSlide(swiper, swiper.activeIndex);\n if (index === activeBranchIndex) return;\n setActiveBranch(index, { scrollTab: false });\n },\n },\n });\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, initBranchesSwiper);\n } else {\n initBranchesSwiper();\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS = window.__LOADED_SECTIONS || [];\n window.__LOADED_SECTIONS.push('contacts\/variant-2');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.contacts-v2').forEach(function (root) {\n if (root.dataset.contactsV2Ready === 'true') return;\n root.dataset.contactsV2Ready = 'true';\n var branchCount = parseInt(root.getAttribute('data-contacts-v2-count') || '1', 10);\n var branchButtons = root.querySelectorAll('[data-contacts-v2-branch]');\n var panel = root.querySelector('[data-contacts-v2-panel]');\n var dataEl = root.querySelector('.contacts-v2__data');\n var branchesData = [];\n if (dataEl) {\n try {\n branchesData = JSON.parse(dataEl.textContent || '[]');\n } catch (error) {\n branchesData = [];\n }\n }\n var infoPanels = root.querySelectorAll('[data-contacts-v2-info-index]');\n var mapPhotoEl = root.querySelector('[data-contacts-v2-map-photo]');\n var mapTextWrap = root.querySelector('[data-contacts-v2-map-text-wrap]');\n var mapTextViewport = root.querySelector('[data-contacts-v2-map-text-viewport]');\n var mapTextTrack = root.querySelector('[data-contacts-v2-map-text-scrollbar]');\n var mapTextThumb = root.querySelector('[data-contacts-v2-map-text-thumb]');\n var mapTextEl = root.querySelector('[data-contacts-v2-map-text]');\n var mapCardEl = root.querySelector('[data-contacts-v2-map-card]');\n var mapCanvasEl = root.querySelector('[data-contacts-v2-map-canvas]');\n var mapHeight = parseInt(root.getAttribute('data-contacts-v2-map-height') || '635', 10);\n var mapZoom = parseInt(root.getAttribute('data-contacts-v2-map-zoom') || '16', 10);\n var mapFocusZoom = parseInt(root.getAttribute('data-contacts-v2-map-focus-zoom') || '', 10);\n if (Number.isNaN(mapFocusZoom)) {\n mapFocusZoom = mapZoom + 2;\n }\n var ymapsApiKey = root.getAttribute('data-contacts-v2-map-api-key') || '';\n var siteLogoSrc = root.getAttribute('data-contacts-v2-site-logo') || '';\n if (!siteLogoSrc) {\n var headerLogoEl = document.querySelector('.site-header__logo');\n if (headerLogoEl) {\n siteLogoSrc = headerLogoEl.getAttribute('src') || '';\n }\n }\n var mapInstance = null;\n var mapSchemeLayer = null;\n var placemarkInstances = [];\n var mapRenderToken = 0;\n var activeBranchIndex = 0;\n var mapShowsOverview = false;\n var mapLayoutCompact = null;\n var mapResizeTimer = null;\n var mapBehaviors = ['drag', 'scrollZoom', 'pinchZoom', 'dblClick'];\n var mapFitMarginLeft = 280;\n var mapCompactMedia = window.matchMedia('(max-width: 1200px)');\n function syncMapTextScrollUi() {\n if (!mapTextWrap || !mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n if (maxScroll <= 1) {\n mapTextWrap.classList.add('is-static');\n mapTextThumb.style.height = '';\n mapTextThumb.style.transform = '';\n return;\n }\n mapTextWrap.classList.remove('is-static');\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = Math.max(48, (mapTextViewport.clientHeight \/ mapTextViewport.scrollHeight) * trackHeight);\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var thumbOffset = maxScroll > 0 ? (mapTextViewport.scrollTop \/ maxScroll) * maxThumbOffset : 0;\n mapTextThumb.style.height = thumbHeight + 'px';\n mapTextThumb.style.transform = 'translateY(' + thumbOffset + 'px)';\n }\n function scrollMapTextFromPointer(clientY) {\n if (!mapTextViewport || !mapTextTrack || !mapTextThumb || mapTextWrap.hidden) {\n return;\n }\n var maxScroll = mapTextViewport.scrollHeight - mapTextViewport.clientHeight;\n var trackHeight = mapTextTrack.clientHeight;\n var thumbHeight = mapTextThumb.offsetHeight;\n if (maxScroll <= 1 || trackHeight <= 0) {\n return;\n }\n var rect = mapTextTrack.getBoundingClientRect();\n var maxThumbOffset = Math.max(0, trackHeight - thumbHeight);\n var pointerOffset = clientY - rect.top - thumbHeight \/ 2;\n var thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerOffset));\n var ratio = maxThumbOffset > 0 ? thumbOffset \/ maxThumbOffset : 0;\n mapTextViewport.scrollTop = ratio * maxScroll;\n }\n var activeMapTextPointerId = null;\n function onMapTextPointerMove(event) {\n if (event.pointerId !== activeMapTextPointerId) return;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n }\n function stopMapTextPointerDrag(event) {\n if (event && activeMapTextPointerId !== null && event.pointerId !== activeMapTextPointerId) return;\n activeMapTextPointerId = null;\n document.removeEventListener('pointermove', onMapTextPointerMove);\n document.removeEventListener('pointerup', stopMapTextPointerDrag);\n document.removeEventListener('pointercancel', stopMapTextPointerDrag);\n }\n function startMapTextPointerDrag(event) {\n if (!mapTextWrap || mapTextWrap.hidden) return;\n activeMapTextPointerId = event.pointerId;\n event.preventDefault();\n scrollMapTextFromPointer(event.clientY);\n document.addEventListener('pointermove', onMapTextPointerMove);\n document.addEventListener('pointerup', stopMapTextPointerDrag);\n document.addEventListener('pointercancel', stopMapTextPointerDrag);\n }\n if (mapTextViewport) {\n mapTextViewport.addEventListener('scroll', syncMapTextScrollUi, { passive: true });\n }\n if (mapTextTrack) {\n mapTextTrack.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (mapTextThumb) {\n mapTextThumb.addEventListener('pointerdown', startMapTextPointerDrag);\n }\n if (window.ResizeObserver && mapTextViewport) {\n var mapTextResizeObserver = new ResizeObserver(syncMapTextScrollUi);\n mapTextResizeObserver.observe(mapTextViewport);\n if (mapTextEl) {\n mapTextResizeObserver.observe(mapTextEl);\n }\n if (mapCardEl) {\n mapTextResizeObserver.observe(mapCardEl);\n }\n } else {\n window.addEventListener('resize', syncMapTextScrollUi);\n }\n window.requestAnimationFrame(syncMapTextScrollUi);\n function isMapCompactLayout() {\n return mapCompactMedia.matches;\n }\n function isTouchLikeDevice() {\n if (window.matchMedia && window.matchMedia('(pointer: coarse)').matches) return true;\n return 'ontouchstart' in window || (navigator.maxTouchPoints || 0) > 0;\n }\n function destroyMapInstance() {\n if (mapInstance && typeof mapInstance.destroy === 'function') {\n try {\n mapInstance.destroy();\n } catch (error) {\n }\n }\n mapInstance = null;\n mapSchemeLayer = null;\n placemarkInstances = [];\n if (mapCanvasEl) {\n mapCanvasEl.innerHTML = '';\n mapCanvasEl.classList.remove('is-jsapi');\n }\n }\n function scheduleMapLayoutRefresh() {\n clearTimeout(mapResizeTimer);\n mapResizeTimer = setTimeout(function () {\n var compact = isMapCompactLayout();\n if (compact === mapLayoutCompact) return;\n mapLayoutCompact = compact;\n destroyMapInstance();\n requestAnimationFrame(function () {\n requestAnimationFrame(function () {\n renderBranchMap(activeBranchIndex);\n });\n });\n }, 200);\n }\n function whenMapCanvasReady(callback) {\n function check() {\n if (!mapCanvasEl) return;\n if (mapCanvasEl.offsetWidth > 0 && mapCanvasEl.offsetHeight > 0) {\n callback();\n return;\n }\n requestAnimationFrame(check);\n }\n check();\n }\n mapLayoutCompact = isMapCompactLayout();\n if (typeof mapCompactMedia.addEventListener === 'function') {\n mapCompactMedia.addEventListener('change', scheduleMapLayoutRefresh);\n } else if (typeof mapCompactMedia.addListener === 'function') {\n mapCompactMedia.addListener(scheduleMapLayoutRefresh);\n }\n window.addEventListener('resize', scheduleMapLayoutRefresh);\n window.addEventListener('orientationchange', function () {\n setTimeout(scheduleMapLayoutRefresh, 300);\n });\n function toLngLat(coords) {\n if (!Array.isArray(coords) || coords.length < 2) return [0, 0];\n return [coords[1], coords[0]];\n }\n function getBranchPlacemarkCoords(branch) {\n var map = branch && branch.map ? branch.map : {};\n if (Array.isArray(map.placemark) && map.placemark.length >= 2) {\n return toLngLat(map.placemark);\n }\n return null;\n }\n function getAllPlacemarkCoords() {\n return branchesData\n .map(function (branch) {\n return getBranchPlacemarkCoords(branch);\n })\n .filter(function (coords) {\n return Array.isArray(coords) && coords.length >= 2;\n });\n }\n function getCoordsBounds(coordsList) {\n var minLng = Infinity;\n var minLat = Infinity;\n var maxLng = -Infinity;\n var maxLat = -Infinity;\n coordsList.forEach(function (coords) {\n var lng = coords[0];\n var lat = coords[1];\n if (lng < minLng) minLng = lng;\n if (lng > maxLng) maxLng = lng;\n if (lat < minLat) minLat = lat;\n if (lat > maxLat) maxLat = lat;\n });\n return [\n [minLng, minLat],\n [maxLng, maxLat],\n ];\n }\n function expandBounds(bounds, paddingRatio) {\n paddingRatio = typeof paddingRatio === 'number' ? paddingRatio : 0.2;\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var lngSpan = maxLng - minLng;\n var latSpan = maxLat - minLat;\n var padLng = lngSpan > 0 ? lngSpan * paddingRatio : 0.01;\n var padLat = latSpan > 0 ? latSpan * paddingRatio : 0.01;\n return [\n [minLng - padLng, minLat - padLat],\n [maxLng + padLng, maxLat + padLat],\n ];\n }\n function getBoundsSpanKm(bounds) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLat = (minLat + maxLat) \/ 2;\n var latKm = Math.abs(maxLat - minLat) * 111;\n var lngKm = Math.abs(maxLng - minLng) * 111 * Math.cos((centerLat * Math.PI) \/ 180);\n return Math.sqrt((latKm * latKm) + (lngKm * lngKm));\n }\n function ensureMinBoundsSpan(bounds, minHalfSpanDeg) {\n var minLng = bounds[0][0];\n var minLat = bounds[0][1];\n var maxLng = bounds[1][0];\n var maxLat = bounds[1][1];\n var centerLng = (minLng + maxLng) \/ 2;\n var centerLat = (minLat + maxLat) \/ 2;\n var halfLng = Math.max((maxLng - minLng) \/ 2, minHalfSpanDeg);\n var halfLat = Math.max((maxLat - minLat) \/ 2, minHalfSpanDeg);\n return [\n [centerLng - halfLng, centerLat - halfLat],\n [centerLng + halfLng, centerLat + halfLat],\n ];\n }\n function getAdaptiveBoundsFit(spanKm) {\n if (spanKm < 2) {\n return { paddingRatio: 0.28, minHalfSpanDeg: 0.007 };\n }\n if (spanKm < 12) {\n return { paddingRatio: 0.2, minHalfSpanDeg: 0.005 };\n }\n if (spanKm < 50) {\n return { paddingRatio: 0.24, minHalfSpanDeg: null };\n }\n if (spanKm < 250) {\n return { paddingRatio: 0.34, minHalfSpanDeg: null };\n }\n return { paddingRatio: 0.42, minHalfSpanDeg: null };\n }\n function buildOverviewBounds(coords) {\n var bounds = getCoordsBounds(coords);\n var spanKm = getBoundsSpanKm(bounds);\n var fit = getAdaptiveBoundsFit(spanKm);\n var paddingRatio = fit.paddingRatio;\n if (isMapCompactLayout()) {\n paddingRatio += 0.22;\n }\n if (fit.minHalfSpanDeg) {\n bounds = ensureMinBoundsSpan(bounds, fit.minHalfSpanDeg);\n }\n return expandBounds(bounds, paddingRatio);\n }\n function getCompactMapMargins(isOverview) {\n if (isOverview) {\n return [64, 36, 52, 36];\n }\n return [52, 36, 44, 36];\n }\n function getMapOverviewMargin(coords) {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(true);\n }\n var topBottom = 56;\n var right = 32;\n if (coords && coords.length > 1) {\n var spanKm = getBoundsSpanKm(getCoordsBounds(coords));\n if (spanKm > 50) {\n topBottom = 80;\n }\n }\n return [topBottom, right, topBottom, mapFitMarginLeft];\n }\n function getMapBranchFocusMargin() {\n if (isMapCompactLayout()) {\n return getCompactMapMargins(false);\n }\n return [32, 32, 32, mapFitMarginLeft];\n }\n function getMapMarginForLocation(location, coords) {\n if (location && location.bounds) {\n return getMapOverviewMargin(coords);\n }\n return getMapBranchFocusMargin();\n }\n function applyMapMarginForLocation(location, coords) {\n if (!mapInstance || typeof mapInstance.setMargin !== 'function') return;\n mapInstance.setMargin(getMapMarginForLocation(location, coords));\n }\n function getAllMarkersMapLocation() {\n var coords = getAllPlacemarkCoords();\n if (!coords.length) return null;\n if (coords.length === 1) {\n return {\n center: coords[0],\n zoom: mapZoom,\n };\n }\n return {\n bounds: buildOverviewBounds(coords),\n };\n }\n function getBranchFocusMapLocation(branch) {\n var center = getBranchPlacemarkCoords(branch);\n if (!center) return null;\n return {\n center: center,\n zoom: mapFocusZoom,\n duration: 300,\n };\n }\n function createMapMarkerElement(branchIndex, branch, isActive) {\n var map = branch.map || {};\n var markerEl = document.createElement('div');\n markerEl.className = 'contacts-v2__map-marker' + (isActive ? ' is-active' : '');\n markerEl.dataset.branchIndex = String(branchIndex);\n var pinEl = document.createElement('button');\n pinEl.type = 'button';\n pinEl.className = 'contacts-v2__map-pin';\n pinEl.title = map.balloon || branch.title || '';\n pinEl.setAttribute('aria-label', map.balloon || branch.title || ('Филиал ' + (branchIndex + 1)));\n var iconEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n iconEl.setAttribute('class', 'contacts-v2__map-pin-icon');\n iconEl.setAttribute('viewBox', '0 0 31 45');\n iconEl.setAttribute('fill', 'none');\n iconEl.setAttribute('aria-hidden', 'true');\n var useEl = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n useEl.setAttributeNS('http:\/\/www.w3.org\/1999\/xlink', 'href', '#icon-contacts-map-pin');\n useEl.setAttribute('href', '#icon-contacts-map-pin');\n iconEl.appendChild(useEl);\n pinEl.appendChild(iconEl);\n pinEl.addEventListener('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n var markerIndex = parseInt(markerEl.dataset.branchIndex, 10);\n activateBranchFromMapPin(markerIndex);\n });\n var badgeEl = document.createElement('div');\n badgeEl.className = 'contacts-v2__map-pin-badge';\n badgeEl.setAttribute('aria-hidden', 'true');\n if (siteLogoSrc) {\n var logoEl = document.createElement('img');\n logoEl.className = 'contacts-v2__map-pin-badge-logo';\n logoEl.src = siteLogoSrc;\n logoEl.alt = '';\n logoEl.decoding = 'async';\n badgeEl.appendChild(logoEl);\n }\n markerEl.appendChild(pinEl);\n markerEl.appendChild(badgeEl);\n return markerEl;\n }\n function setMapViewState(location) {\n mapShowsOverview = !!(location && location.bounds);\n }\n function syncMapMarkers(activeIndex) {\n placemarkInstances.forEach(function (entry) {\n if (!entry || !entry.marker || !entry.marker.element) return;\n var markerEl = entry.marker.element;\n var isActive = entry.branchIndex === activeIndex;\n markerEl.classList.toggle('is-active', isActive);\n markerEl.classList.toggle('is-overview', mapShowsOverview);\n });\n }\n function ensureAllMapMarkers(ymaps3, activeIndex) {\n if (!mapInstance || !ymaps3 || !ymaps3.YMapMarker) return;\n var YMapMarker = ymaps3.YMapMarker;\n branchesData.forEach(function (branch, branchIndex) {\n if (placemarkInstances[branchIndex]) return;\n var coords = getBranchPlacemarkCoords(branch);\n if (!coords) return;\n var markerEl = createMapMarkerElement(branchIndex, branch, branchIndex === activeIndex);\n var marker = new YMapMarker({\n coordinates: coords,\n blockBehaviors: true,\n properties: {\n branchIndex: branchIndex,\n },\n }, markerEl);\n mapInstance.addChild(marker);\n placemarkInstances[branchIndex] = {\n marker: marker,\n branchIndex: branchIndex,\n };\n });\n }\n function renderBranchMapJsapi(index, branch, token) {\n if (!branch || !ymapsApiKey) return;\n loadYmaps3().then(function (ymaps3) {\n if (token !== mapRenderToken) return;\n whenMapCanvasReady(function () {\n if (token !== mapRenderToken) return;\n var overviewCoords = getAllPlacemarkCoords();\n var location = mapInstance\n ? getBranchFocusMapLocation(branch)\n : getAllMarkersMapLocation();\n if (!location) return;\n setMapViewState(location);\n var YMap = ymaps3.YMap;\n var YMapDefaultSchemeLayer = ymaps3.YMapDefaultSchemeLayer;\n var YMapDefaultFeaturesLayer = ymaps3.YMapDefaultFeaturesLayer;\n if (!mapInstance) {\n destroyMapInstance();\n mapCanvasEl.classList.add('is-jsapi');\n mapInstance = new YMap(mapCanvasEl, {\n location: location,\n behaviors: mapBehaviors,\n margin: getMapMarginForLocation(location, overviewCoords),\n });\n mapSchemeLayer = new YMapDefaultSchemeLayer({});\n mapInstance.addChild(mapSchemeLayer);\n if (typeof YMapDefaultFeaturesLayer === 'function') {\n mapInstance.addChild(new YMapDefaultFeaturesLayer({}));\n }\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n ensureAllMapMarkers(ymaps3, index);\n syncMapMarkers(index);\n if (isTouchLikeDevice()) {\n requestAnimationFrame(function () {\n if (!mapInstance || typeof mapInstance.setBehaviors !== 'function') return;\n mapInstance.setBehaviors(mapBehaviors);\n });\n }\n return;\n }\n applyMapMarginForLocation(location, overviewCoords);\n mapInstance.setLocation(location);\n syncMapMarkers(index);\n if (typeof mapInstance.setBehaviors === 'function') {\n mapInstance.setBehaviors(mapBehaviors);\n }\n });\n }).catch(function (error) {\n console.warn(\n '[contacts-v2] Yandex Maps API unavailable:',\n error && error.message ? error.message : error\n );\n });\n }\n function loadYmaps3() {\n if (!ymapsApiKey) {\n return Promise.reject(new Error('Yandex Maps API key is missing'));\n }\n if (window.ymaps3) {\n return window.ymaps3.ready.then(function () {\n return window.ymaps3;\n });\n }\n if (!window.__gorYmaps3Promise) {\n window.__gorYmaps3Promise = new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.src = 'https:\/\/api-maps.yandex.ru\/v3\/?apikey=' +\n encodeURIComponent(ymapsApiKey) +\n '&lang=ru_RU';\n script.async = true;\n script.onload = function () {\n if (!window.ymaps3) {\n reject(new Error('Yandex Maps API v3 failed to load'));\n return;\n }\n window.ymaps3.ready.then(function () {\n resolve(window.ymaps3);\n }).catch(reject);\n };\n script.onerror = function () {\n reject(new Error('Yandex Maps API v3 failed to load'));\n };\n document.head.appendChild(script);\n }).catch(function (error) {\n window.__gorYmaps3Promise = null;\n throw error;\n });\n }\n return window.__gorYmaps3Promise;\n }\n function renderBranchMap(index) {\n var branch = branchesData[index];\n if (!branch || !mapCanvasEl) return;\n var map = branch.map || {};\n var token = ++mapRenderToken;\n var photo = String(map.photo || '').trim();\n var text = String(map.entrance_text || '').trim();\n if (mapPhotoEl) {\n if (photo) {\n mapPhotoEl.src = photo;\n mapPhotoEl.alt = map.photo_alt || '';\n mapPhotoEl.hidden = false;\n } else {\n mapPhotoEl.removeAttribute('src');\n mapPhotoEl.alt = '';\n mapPhotoEl.hidden = true;\n }\n }\n if (mapTextEl) {\n mapTextEl.textContent = text;\n }\n if (mapTextWrap) {\n mapTextWrap.hidden = !text;\n mapTextViewport.scrollTop = 0;\n window.requestAnimationFrame(syncMapTextScrollUi);\n }\n if (mapCardEl) {\n mapCardEl.hidden = !photo && !text;\n }\n renderBranchMapJsapi(index, branch, token);\n }\n function renderBranchInfo(index) {\n infoPanels.forEach(function (item) {\n item.hidden = Number(item.getAttribute('data-contacts-v2-info-index')) !== index\n || item.getAttribute('data-contacts-v2-empty') === 'true';\n });\n }\n var sidebarListEl = root.querySelector('[data-contacts-v2-sidebar-list]');\n function scrollBranchTabIntoView(index) {\n var activeTab = root.querySelector('[data-contacts-v2-branch=\"' + index + '\"]');\n if (!activeTab || !sidebarListEl) return;\n requestAnimationFrame(function () {\n if (window.matchMedia('(max-width: 1200px)').matches) {\n var targetLeft = activeTab.offsetLeft - sidebarListEl.offsetLeft;\n sidebarListEl.scrollTo({\n left: Math.max(0, targetLeft - 16),\n behavior: 'smooth',\n });\n return;\n }\n activeTab.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n });\n }\n function activateBranchFromMapPin(index) {\n if (Number.isNaN(index) || !branchesData[index]) return;\n if (index === activeBranchIndex && !mapShowsOverview) return;\n setActiveBranch(index);\n }\n function setActiveBranch(index, options) {\n options = options || {};\n activeBranchIndex = index;\n branchButtons.forEach(function (tab) {\n var tabIndex = parseInt(tab.getAttribute('data-contacts-v2-branch'), 10);\n var isActive = tabIndex === index;\n tab.classList.toggle('is-active', isActive);\n tab.setAttribute('aria-selected', isActive ? 'true' : 'false');\n tab.tabIndex = isActive ? 0 : -1;\n });\n if (panel) {\n panel.setAttribute('aria-labelledby', 'contacts-v2-branch-' + index);\n }\n renderBranchInfo(index);\n renderBranchMap(index);\n if (options.scrollTab !== false) {\n scrollBranchTabIntoView(index);\n }\n }\n renderBranchInfo(0);\n if (window.LazyInit && mapCanvasEl) {\n window.LazyInit.whenVisible(mapCanvasEl, function () {\n renderBranchMap(activeBranchIndex);\n });\n } else {\n renderBranchMap(activeBranchIndex);\n }\n branchButtons.forEach(function (tab) {\n tab.addEventListener('click', function () {\n var index = parseInt(tab.getAttribute('data-contacts-v2-branch'), 10);\n if (Number.isNaN(index)) return;\n setActiveBranch(index);\n });\n tab.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n var index = parseInt(tab.getAttribute('data-contacts-v2-branch'), 10);\n if (Number.isNaN(index)) return;\n setActiveBranch(index);\n });\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-3');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v3').forEach(function (root) {\n if (root.dataset.newsV3Ready === 'true') return;\n root.dataset.newsV3Ready = 'true';\n var sliderEl = root.querySelector('.news-v3__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.news-v3__pagination');\n var carouselMq = window.matchMedia('(max-width: 991px)');\n var swiperInstance = null;\n function destroyCarousel() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n root.classList.remove('is-carousel');\n }\n function initCarousel() {\n if (swiperInstance || !carouselMq.matches) return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n dynamicBullets: true,\n },\n });\n root.classList.add('is-carousel');\n }\n function syncCarousel() {\n if (carouselMq.matches) {\n initCarousel();\n } else {\n destroyCarousel();\n }\n }\n function bootSwiper() {\n syncCarousel();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof carouselMq.addEventListener === 'function') {\n carouselMq.addEventListener('change', syncCarousel);\n } else if (typeof carouselMq.addListener === 'function') {\n carouselMq.addListener(syncCarousel);\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-4');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v4').forEach(function (root) {\n if (root.dataset.newsV4Ready === 'true') return;\n root.dataset.newsV4Ready = 'true';\n var chips = root.querySelectorAll('[data-news-v4-filter]');\n var items = root.querySelectorAll('[data-news-v4-item]');\n var moreBtn = root.querySelector('[data-news-v4-more]');\n var initialLimit = parseInt(root.dataset.newsV4Limit || '6', 10) || 6;\n var activeFilter = 'all';\n var expanded = false;\n function matchesFilter(item) {\n if (activeFilter === 'all') return true;\n return (item.dataset.newsV4Type || '') === activeFilter;\n }\n function syncVisibility() {\n var visibleIndex = 0;\n items.forEach(function (item) {\n var match = matchesFilter(item);\n if (!match) {\n item.classList.add('is-filtered-out');\n item.hidden = true;\n return;\n }\n item.classList.remove('is-filtered-out');\n var collapsed = !expanded && visibleIndex >= initialLimit;\n if (collapsed) {\n item.classList.add('is-collapsed');\n item.hidden = true;\n } else {\n item.classList.remove('is-collapsed');\n item.hidden = false;\n visibleIndex += 1;\n }\n });\n if (moreBtn) {\n var matched = 0;\n items.forEach(function (item) {\n if (matchesFilter(item)) matched += 1;\n });\n moreBtn.hidden = !(!expanded && matched > initialLimit);\n }\n }\n chips.forEach(function (chip) {\n chip.addEventListener('click', function () {\n activeFilter = chip.dataset.newsV4Filter || 'all';\n expanded = false;\n chips.forEach(function (btn) {\n var on = btn === chip;\n btn.classList.toggle('is-active', on);\n btn.setAttribute('aria-pressed', on ? 'true' : 'false');\n });\n chip.classList.add('is-pressed');\n setTimeout(function () { chip.classList.remove('is-pressed'); }, 160);\n syncVisibility();\n });\n });\n if (moreBtn) {\n moreBtn.addEventListener('click', function () {\n expanded = true;\n syncVisibility();\n moreBtn.hidden = true;\n });\n }\n var submitBtn = root.querySelector('.news-v4__submit');\n if (submitBtn) {\n submitBtn.addEventListener('click', function () {\n submitBtn.classList.add('is-pressed');\n setTimeout(function () { submitBtn.classList.remove('is-pressed'); }, 160);\n });\n }\n syncVisibility();\n });\n });\n})();\n(function () {\n document.querySelectorAll('.knowledge-v1').forEach(function (root) {\n if (root.dataset.knowledgeV1Ready === '1') return;\n root.dataset.knowledgeV1Ready = '1';\n var reduceMotionMq = window.matchMedia('(prefers-reduced-motion: reduce)');\n var panelMotionMs = 360;\n var form = root.querySelector('[data-knowledge-v1-search]');\n var searchInput = root.querySelector('[data-knowledge-v1-input]');\n var searchMode = (root.getAttribute('data-knowledge-v1-search-mode') || 'client').trim();\n var isClientSearch = searchMode === 'client';\n var browseSections = Array.prototype.slice.call(root.querySelectorAll('[data-knowledge-v1-browse]'));\n var resultsRoot = root.querySelector('[data-knowledge-v1-results]');\n var resultsSummary = root.querySelector('[data-knowledge-v1-results-summary]');\n var resultsFilters = root.querySelector('[data-knowledge-v1-results-filters]');\n var resultsEmpty = root.querySelector('[data-knowledge-v1-results-empty]');\n var resultsList = root.querySelector('[data-knowledge-v1-results-list]');\n var resultsReset = root.querySelector('[data-knowledge-v1-results-reset]');\n var resultFilterButtons = resultsFilters\n ? Array.prototype.slice.call(resultsFilters.querySelectorAll('[data-knowledge-v1-results-filter]'))\n : [];\n var indexNode = root.querySelector('[data-knowledge-v1-index]');\n var searchIndex = [];\n var currentSearchQuery = '';\n var currentSearchResults = [];\n var activeResultsFilter = 'all';\n var resultsPageSize = parseInt(root.getAttribute('data-knowledge-v1-results-page'), 10) || 6;\n if (resultsPageSize < 1) {\n resultsPageSize = 6;\n }\n var resultsVisibleLimit = resultsPageSize;\n if (indexNode && indexNode.textContent) {\n try {\n searchIndex = JSON.parse(indexNode.textContent);\n } catch (error) {\n searchIndex = [];\n }\n }\n if (!Array.isArray(searchIndex)) {\n searchIndex = [];\n }\n function normalizeQuery(value) {\n return (value || '').trim().toLowerCase();\n }\n function formatMaterialsCount(count) {\n var mod10 = count % 10;\n var mod100 = count % 100;\n if (mod10 === 1 && mod100 !== 11) {\n return count + ' материал';\n }\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return count + ' материала';\n }\n return count + ' материалов';\n }\n function filterSearchIndex(query) {\n var normalized = normalizeQuery(query);\n if (!normalized) {\n return [];\n }\n return searchIndex.filter(function (item) {\n var title = normalizeQuery(item && item.title);\n var excerpt = normalizeQuery(item && item.excerpt);\n var category = normalizeQuery(item && item.category);\n return title.indexOf(normalized) !== -1\n || excerpt.indexOf(normalized) !== -1\n || category.indexOf(normalized) !== -1;\n });\n }\n function filterResultsByCategory(results, filterKey) {\n if (!filterKey || filterKey === 'all') {\n return results;\n }\n return results.filter(function (item) {\n return (item && item.category_id) === filterKey;\n });\n }\n function updateSearchUrl(query) {\n if (!window.history || !window.history.replaceState) {\n return;\n }\n var nextUrl;\n try {\n var url = new URL(window.location.href);\n if (query) {\n url.searchParams.set('q', query);\n } else {\n url.searchParams.delete('q');\n }\n nextUrl = url.pathname + url.search + url.hash;\n } catch (error) {\n return;\n }\n window.history.replaceState({}, '', nextUrl);\n }\n function readSearchQueryFromUrl() {\n try {\n return new URL(window.location.href).searchParams.get('q') || '';\n } catch (error) {\n return '';\n }\n }\n function setBrowseVisible(isVisible) {\n browseSections.forEach(function (section) {\n if (isVisible) {\n section.removeAttribute('hidden');\n } else {\n section.setAttribute('hidden', 'hidden');\n }\n });\n }\n function updateResultsFilters(results) {\n if (!resultsFilters) {\n return;\n }\n var available = {};\n results.forEach(function (item) {\n if (item && item.category_id) {\n available[item.category_id] = true;\n }\n });\n var visibleCount = 0;\n resultFilterButtons.forEach(function (button) {\n var filterKey = button.getAttribute('data-knowledge-v1-results-filter') || '';\n var isAll = filterKey === 'all';\n var hasItems = isAll || !!available[filterKey];\n button.hidden = !hasItems;\n if (hasItems) {\n visibleCount += 1;\n }\n });\n resultsFilters.hidden = visibleCount <= 1;\n if (activeResultsFilter !== 'all' && !available[activeResultsFilter]) {\n activeResultsFilter = 'all';\n }\n resultFilterButtons.forEach(function (button) {\n var filterKey = button.getAttribute('data-knowledge-v1-results-filter') || '';\n var isActive = filterKey === activeResultsFilter;\n button.classList.toggle('is-active', isActive);\n button.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n });\n }\n function renderResultCard(item) {\n var card = document.createElement('article');\n card.className = 'knowledge-v1__result-card';\n var link = document.createElement('a');\n link.className = 'knowledge-v1__result-card-link';\n link.href = (item && item.url) ? item.url : '#';\n var top = document.createElement('div');\n top.className = 'knowledge-v1__result-card-top';\n var copy = document.createElement('div');\n copy.className = 'knowledge-v1__result-card-copy';\n var title = document.createElement('p');\n title.className = 'knowledge-v1__result-card-title titletext-sm';\n title.textContent = (item && item.title) ? item.title : '';\n copy.appendChild(title);\n if (item && item.excerpt) {\n var excerpt = document.createElement('p');\n excerpt.className = 'knowledge-v1__result-card-excerpt bodytext-lg';\n excerpt.textContent = item.excerpt;\n copy.appendChild(excerpt);\n }\n top.appendChild(copy);\n if (item && item.category) {\n var tag = document.createElement('span');\n tag.className = 'knowledge-v1__result-card-tag bodytext';\n tag.textContent = item.category;\n top.appendChild(tag);\n }\n link.appendChild(top);\n var meta = document.createElement('div');\n meta.className = 'knowledge-v1__result-card-meta bodytext';\n if (item && item.date) {\n var date = document.createElement('time');\n date.className = 'knowledge-v1__result-card-date';\n date.dateTime = item.datetime || '';\n date.textContent = item.date;\n meta.appendChild(date);\n }\n if (item && item.read_time) {\n var dot = document.createElement('span');\n dot.className = 'knowledge-v1__result-card-dot';\n dot.setAttribute('aria-hidden', 'true');\n meta.appendChild(dot);\n var read = document.createElement('span');\n read.className = 'knowledge-v1__result-card-read';\n var clock = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'svg');\n clock.setAttribute('class', 'icon knowledge-v1__result-card-clock');\n clock.setAttribute('width', '24');\n clock.setAttribute('height', '24');\n clock.setAttribute('aria-hidden', 'true');\n var use = document.createElementNS('http:\/\/www.w3.org\/2000\/svg', 'use');\n use.setAttribute('href', '#icon-clock');\n clock.appendChild(use);\n read.appendChild(clock);\n var readLabel = document.createElement('span');\n readLabel.textContent = item.read_time;\n read.appendChild(readLabel);\n meta.appendChild(read);\n }\n link.appendChild(meta);\n card.appendChild(link);\n return card;\n }\n function renderSearchResultsView() {\n if (!resultsRoot || !resultsList || !resultsEmpty || !resultsSummary || !resultsReset) {\n return;\n }\n var filtered = filterResultsByCategory(currentSearchResults, activeResultsFilter);\n updateResultsFilters(currentSearchResults);\n resultsList.innerHTML = '';\n resultsSummary.textContent = 'По запросу «' + currentSearchQuery + '» найдено ' + formatMaterialsCount(currentSearchResults.length);\n if (currentSearchResults.length === 0) {\n resultsEmpty.hidden = false;\n resultsList.hidden = true;\n resultsReset.hidden = true;\n return;\n }\n if (filtered.length === 0) {\n resultsEmpty.hidden = false;\n resultsList.hidden = true;\n resultsReset.hidden = true;\n return;\n }\n filtered.forEach(function (item, index) {\n var card = renderResultCard(item);\n if (index >= resultsVisibleLimit) {\n card.hidden = true;\n }\n resultsList.appendChild(card);\n });\n resultsEmpty.hidden = true;\n resultsList.hidden = false;\n resultsReset.hidden = filtered.length <= resultsVisibleLimit;\n }\n function applySearchState(query, options) {\n var opts = options || {};\n var trimmed = (query || '').trim();\n var isSearchState = trimmed !== '';\n if (searchInput && opts.syncInput !== false) {\n searchInput.value = trimmed;\n }\n if (!isSearchState) {\n currentSearchQuery = '';\n currentSearchResults = [];\n activeResultsFilter = 'all';\n root.classList.remove('knowledge-v1--search');\n setBrowseVisible(true);\n if (resultsRoot) {\n resultsRoot.hidden = true;\n }\n if (opts.syncUrl !== false) {\n updateSearchUrl('');\n }\n return;\n }\n currentSearchQuery = trimmed;\n currentSearchResults = filterSearchIndex(trimmed);\n activeResultsFilter = 'all';\n resultsVisibleLimit = resultsPageSize;\n root.classList.add('knowledge-v1--search');\n setBrowseVisible(false);\n if (resultsRoot) {\n resultsRoot.hidden = false;\n }\n renderSearchResultsView();\n if (opts.syncUrl !== false) {\n updateSearchUrl(trimmed);\n }\n }\n if (resultsFilters) {\n resultsFilters.addEventListener('click', function (event) {\n var button = event.target.closest('[data-knowledge-v1-results-filter]');\n if (!button || button.hidden) {\n return;\n }\n activeResultsFilter = button.getAttribute('data-knowledge-v1-results-filter') || 'all';\n resultsVisibleLimit = resultsPageSize;\n button.classList.add('is-pressed');\n window.setTimeout(function () {\n button.classList.remove('is-pressed');\n }, 160);\n renderSearchResultsView();\n });\n }\n if (form) {\n var action = (form.getAttribute('action') || '').trim();\n var isStubAction = action === '' || action === '#';\n form.addEventListener('submit', function (event) {\n if (!isClientSearch && !isStubAction) {\n return;\n }\n event.preventDefault();\n applySearchState(searchInput ? searchInput.value : '');\n });\n }\n if (resultsReset) {\n resultsReset.addEventListener('click', function () {\n resultsVisibleLimit += resultsPageSize;\n renderSearchResultsView();\n });\n }\n if (isClientSearch) {\n var initialQuery = readSearchQueryFromUrl();\n if (initialQuery) {\n applySearchState(initialQuery, { syncUrl: false });\n }\n }\n var alphabet = root.querySelector('[data-knowledge-v1-alphabet]');\n if (alphabet) {\n var letterButtons = Array.prototype.slice.call(\n alphabet.querySelectorAll('[data-knowledge-v1-alphabet-letter]')\n );\n var letterPanels = Array.prototype.slice.call(\n alphabet.querySelectorAll('[data-knowledge-v1-alphabet-panel]')\n );\n function activateAlphabetLetter(letter) {\n if (!letter) return;\n letterButtons.forEach(function (button) {\n var isActive = button.getAttribute('data-knowledge-v1-alphabet-letter') === letter;\n button.classList.toggle('is-active', isActive);\n button.setAttribute('aria-selected', isActive ? 'true' : 'false');\n });\n letterPanels.forEach(function (panel) {\n var isActive = panel.getAttribute('data-knowledge-v1-alphabet-panel') === letter;\n panel.classList.toggle('is-active', isActive);\n panel.hidden = !isActive;\n });\n }\n alphabet.addEventListener('click', function (event) {\n var button = event.target.closest('[data-knowledge-v1-alphabet-letter]');\n if (!button || button.disabled || !alphabet.contains(button)) return;\n activateAlphabetLetter(button.getAttribute('data-knowledge-v1-alphabet-letter') || '');\n });\n }\n var catalog = root.querySelector('[data-knowledge-v1-catalog]');\n var catalogItems = catalog\n ? Array.prototype.slice.call(root.querySelectorAll('.knowledge-v1__catalog-item'))\n : [];\n function shouldAnimate() {\n return !reduceMotionMq.matches;\n }\n function closeCatalogItem(item, animate) {\n var trigger = item.querySelector('[data-knowledge-v1-catalog-trigger]');\n var panel = item.querySelector('.knowledge-v1__catalog-panel');\n if (!panel || (!item.classList.contains('is-open') && panel.hidden)) return;\n item.classList.remove('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'false');\n if (!shouldAnimate() || animate === false) {\n panel.hidden = true;\n return;\n }\n void panel.offsetHeight;\n var done = false;\n function finish() {\n if (done) return;\n done = true;\n panel.removeEventListener('transitionend', onEnd);\n panel.hidden = true;\n }\n function onEnd(event) {\n if (event.target !== panel || event.propertyName !== 'grid-template-rows') return;\n finish();\n }\n panel.addEventListener('transitionend', onEnd);\n window.setTimeout(finish, panelMotionMs + 20);\n }\n function openCatalogItem(item) {\n var trigger = item.querySelector('[data-knowledge-v1-catalog-trigger]');\n var panel = item.querySelector('.knowledge-v1__catalog-panel');\n if (!panel) return;\n panel.hidden = false;\n if (shouldAnimate()) {\n window.requestAnimationFrame(function () {\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n });\n return;\n }\n item.classList.add('is-open');\n if (trigger) trigger.setAttribute('aria-expanded', 'true');\n }\n function openCatalogByTopicId(topicId) {\n if (!topicId) return;\n var item = root.querySelector('[data-knowledge-v1-catalog-id=\"' + topicId + '\"]');\n if (!item) return;\n catalogItems.forEach(function (entry) {\n if (entry !== item) closeCatalogItem(entry, false);\n });\n openCatalogItem(item);\n }\n if (catalog) {\n root.addEventListener('click', function (event) {\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('[data-knowledge-v1-catalog-trigger]');\n if (!trigger || !root.contains(trigger)) return;\n var item = trigger.closest('.knowledge-v1__catalog-item');\n if (!item) return;\n var isOpen = item.classList.contains('is-open');\n if (isOpen) {\n closeCatalogItem(item, true);\n return;\n }\n catalogItems.forEach(function (entry) {\n if (entry !== item) closeCatalogItem(entry, false);\n });\n openCatalogItem(item);\n });\n root.addEventListener('keydown', function (event) {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n if (event.target.closest('a')) return;\n var trigger = event.target.closest('[data-knowledge-v1-catalog-trigger]');\n if (!trigger || !root.contains(trigger)) return;\n event.preventDefault();\n trigger.click();\n });\n root.addEventListener('knowledge-v1:open-topic', function (event) {\n var topicId = event.detail && event.detail.topicId;\n if (!topicId && event.target && event.target.getAttribute) {\n topicId = event.target.getAttribute('data-knowledge-v1-catalog-id') || '';\n }\n openCatalogByTopicId(topicId);\n });\n }\n root.querySelectorAll('[data-knowledge-v1-topic]').forEach(function (link) {\n link.addEventListener('click', function (event) {\n var href = (link.getAttribute('href') || '').trim();\n if (href === '' || href.charAt(0) !== '#') return;\n var target = document.querySelector(href);\n if (!target) return;\n event.preventDefault();\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n target.dispatchEvent(new CustomEvent('knowledge-v1:open-topic', {\n bubbles: true,\n detail: { topicId: link.getAttribute('data-knowledge-v1-topic') || '' },\n }));\n });\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-10');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('news\/variant-1');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.news-v1').forEach(function (root) {\n if (root.dataset.newsV1Ready === 'true') return;\n root.dataset.newsV1Ready = 'true';\n var sliderEl = root.querySelector('.news-v1__slider.swiper');\n if (!sliderEl || typeof Swiper === 'undefined') return;\n var slides = sliderEl.querySelectorAll('.swiper-slide');\n if (slides.length < 2) return;\n var paginationEl = root.querySelector('.news-v1__pagination');\n var mobileMq = window.matchMedia('(max-width: 768px)');\n var swiperInstance = null;\n function destroySlider() {\n if (!swiperInstance) return;\n swiperInstance.destroy(true, true);\n swiperInstance = null;\n }\n function initSlider() {\n if (!mobileMq.matches || swiperInstance) return;\n swiperInstance = new Swiper(sliderEl, {\n slidesPerView: 1,\n spaceBetween: 0,\n watchOverflow: true,\n pagination: {\n el: paginationEl,\n clickable: true,\n type: 'bullets',\n },\n });\n }\n function syncSliderMode() {\n if (mobileMq.matches) {\n initSlider();\n } else {\n destroySlider();\n }\n }\n function bootSwiper() {\n syncSliderMode();\n }\n if (window.LazyInit) {\n window.LazyInit.whenVisible(root, bootSwiper);\n } else {\n bootSwiper();\n }\n if (typeof mobileMq.addEventListener === 'function') {\n mobileMq.addEventListener('change', syncSliderMode);\n } else if (typeof mobileMq.addListener === 'function') {\n mobileMq.addListener(syncSliderMode);\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-12');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-6');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('reviews\/variant-5');\n document.addEventListener('DOMContentLoaded', function () {\n document.querySelectorAll('.reviews-v5').forEach(function (root) {\n if (root.dataset.reviewsV5Ready === 'true') return;\n root.dataset.reviewsV5Ready = 'true';\n function syncMoreButton() {\n var moreWrap = root.querySelector('.reviews-v5__more-wrap');\n var moreBtn = root.querySelector('[data-reviews-v5-more]');\n if (!moreWrap || !moreBtn) return;\n var hasCollapsed = root.querySelector('[data-reviews-v5-item]:not([hidden]).is-collapsed') !== null;\n var hasMore = root.dataset.reviewsV5HasMore === '1';\n moreWrap.hidden = !hasCollapsed && !hasMore;\n moreBtn.hidden = !hasCollapsed && !hasMore;\n }\n function getActiveFilters() {\n var filters = {};\n if (!filterForm) return filters;\n filterForm.querySelectorAll('[data-reviews-v5-filter]').forEach(function (select) {\n var key = select.dataset.reviewsV5Filter;\n if (!key) return;\n filters[key] = select.value || 'all';\n });\n return filters;\n }\n function itemMatchesFilters(item, filters) {\n if (filters.source && filters.source !== 'all' && item.dataset.reviewsV5Source !== filters.source) {\n return false;\n }\n if (filters.service && filters.service !== 'all' && item.dataset.reviewsV5Service !== filters.service) {\n return false;\n }\n if (filters.doctor && filters.doctor !== 'all' && item.dataset.reviewsV5Doctor !== filters.doctor) {\n return false;\n }\n if (filters.rating && filters.rating !== 'all' && String(item.dataset.reviewsV5Rating) !== filters.rating) {\n return false;\n }\n return true;\n }\n function applyClientPagination() {\n var limit = parseInt(root.dataset.reviewsV5Limit, 10) || 6;\n var visibleIndex = 0;\n root.querySelectorAll('[data-reviews-v5-item]').forEach(function (item) {\n if (item.hidden) {\n item.classList.remove('is-collapsed');\n return;\n }\n if (visibleIndex >= limit) {\n item.classList.add('is-collapsed');\n } else {\n item.classList.remove('is-collapsed');\n var card = item.querySelector('.reviews-v5__card');\n if (card) updateCardOverflow(card);\n }\n visibleIndex += 1;\n });\n var totalVisible = root.querySelectorAll('[data-reviews-v5-item]:not([hidden])').length;\n root.dataset.reviewsV5Total = String(totalVisible);\n root.dataset.reviewsV5HasMore = totalVisible > limit ? '1' : '0';\n }\n function applyClientFilters() {\n var filters = getActiveFilters();\n var emptyState = root.querySelector('[data-reviews-v5-empty]');\n var list = root.querySelector('[data-reviews-v5-list]');\n var matched = 0;\n root.querySelectorAll('[data-reviews-v5-item]').forEach(function (item) {\n var isMatch = itemMatchesFilters(item, filters);\n item.hidden = !isMatch;\n if (isMatch) matched += 1;\n });\n if (emptyState) {\n emptyState.hidden = matched > 0;\n }\n if (list) {\n list.hidden = matched === 0;\n }\n root.dataset.reviewsV5Page = '1';\n var pageField = root.querySelector('[data-reviews-v5-page-field]');\n if (pageField) pageField.value = '1';\n applyClientPagination();\n syncMoreButton();\n }\n function updateCardOverflow(card) {\n var quote = card.querySelector('.reviews-v5__quote');\n var readMore = card.querySelector('[data-reviews-v5-read-full]');\n if (!quote || !readMore) return;\n card.classList.remove('is-overflow');\n readMore.hidden = true;\n quote.style.removeProperty('-webkit-line-clamp');\n if (quote.scrollHeight <= quote.clientHeight + 1) {\n return;\n }\n card.classList.add('is-overflow');\n readMore.hidden = false;\n }\n root.querySelectorAll('.reviews-v5__card').forEach(updateCardOverflow);\n syncMoreButton();\n var filtersPanel = root.querySelector('[data-reviews-v5-filters-panel]');\n var filtersToggle = root.querySelector('[data-reviews-v5-filters-toggle]');\n var mobileFiltersQuery = window.matchMedia('(max-width: 1200px)');\n function syncFiltersPanelState() {\n if (!filtersPanel || !filtersToggle) return;\n if (!mobileFiltersQuery.matches) {\n filtersPanel.classList.remove('is-collapsed');\n filtersToggle.setAttribute('aria-expanded', 'true');\n return;\n }\n var isCollapsed = filtersPanel.classList.contains('is-collapsed');\n filtersToggle.setAttribute('aria-expanded', isCollapsed ? 'false' : 'true');\n }\n if (filtersPanel && filtersToggle) {\n syncFiltersPanelState();\n filtersToggle.addEventListener('click', function () {\n if (!mobileFiltersQuery.matches) return;\n var willCollapse = !filtersPanel.classList.contains('is-collapsed');\n filtersPanel.classList.toggle('is-collapsed', willCollapse);\n filtersToggle.setAttribute('aria-expanded', willCollapse ? 'false' : 'true');\n });\n if (typeof mobileFiltersQuery.addEventListener === 'function') {\n mobileFiltersQuery.addEventListener('change', syncFiltersPanelState);\n } else if (typeof mobileFiltersQuery.addListener === 'function') {\n mobileFiltersQuery.addListener(syncFiltersPanelState);\n }\n }\n root.addEventListener('click', function (event) {\n var readBtn = event.target.closest('[data-reviews-v5-read-full]');\n if (readBtn && root.contains(readBtn)) {\n event.preventDefault();\n var card = readBtn.closest('.reviews-v5__card');\n var template = card ? card.querySelector('.reviews-v5__full-template') : null;\n var quote = card ? card.querySelector('.reviews-v5__quote') : null;\n if (!template || !quote || !window.Popup) return;\n var content = template.content.cloneNode(true);\n var quoteSlot = content.querySelector('[data-reviews-v5-popup-quote]');\n if (!quoteSlot) return;\n var popupQuote = quote.cloneNode(true);\n popupQuote.className = 'popup__review-text';\n popupQuote.style.removeProperty('-webkit-line-clamp');\n quoteSlot.appendChild(popupQuote);\n var popupContent = document.createElement('div');\n popupContent.appendChild(content);\n window.Popup.open('review', { html: popupContent.innerHTML });\n return;\n }\n var moreBtn = event.target.closest('[data-reviews-v5-more]');\n if (moreBtn && root.contains(moreBtn)) {\n root.querySelectorAll('[data-reviews-v5-item]:not([hidden]).is-collapsed').forEach(function (item) {\n item.classList.remove('is-collapsed');\n var card = item.querySelector('.reviews-v5__card');\n if (card) updateCardOverflow(card);\n });\n syncMoreButton();\n }\n });\n var filterForm = root.querySelector('[data-reviews-v5-filters-form]');\n var filterMode = root.dataset.reviewsV5Mode || 'client';\n if (filterForm) {\n filterForm.addEventListener('change', function () {\n var submit = root.querySelector('[data-reviews-v5-filter-submit]');\n if (!submit || filterMode !== 'client') return;\n var hasValue = false;\n filterForm.querySelectorAll('[data-reviews-v5-filter]').forEach(function (select) {\n if (select.value && select.value !== 'all') {\n hasValue = true;\n }\n });\n submit.disabled = !hasValue;\n });\n filterForm.addEventListener('submit', function (event) {\n if (filterMode === 'client') {\n event.preventDefault();\n applyClientFilters();\n return;\n }\n var apiUrl = root.dataset.reviewsV5ApiUrl;\n if (apiUrl) {\n event.preventDefault();\n }\n });\n }\n });\n });\n})();\n(function () {\n window.__LOADED_SECTIONS.push('hero\/variant-9');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('progression-stages\/variant-3');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('education\/variant-1');\n})();\n(function () {\n window.__LOADED_SECTIONS.push('certificates\/variant-1');\n})();\n(function () {\n document.querySelectorAll('[data-header-root]').forEach(function (root) {\n var toggle = root.querySelector('[data-header-toggle]');\n var panel = root.querySelector('[data-header-panel]');\n var navWrap = root.querySelector('.site-header__nav-wrap');\n if (!toggle || !panel) {\n return;\n }\n var navTopY = null;\n var lastSticky = null;\n var setHeaderHeight = function () {\n var topEl = root.querySelector('.site-header__top');\n var topH = topEl ? (topEl.offsetHeight || 0) : 0;\n var isMobile = window.innerWidth <= 1280;\n var h = isMobile ? topH : (root.offsetHeight || topH || 0);\n document.documentElement.style.setProperty('--site-header-h', h + 'px');\n document.documentElement.style.setProperty('--site-header-top-h', topH + 'px');\n if (navWrap) {\n var navH = navWrap.offsetHeight || 0;\n document.documentElement.style.setProperty('--site-nav-h', navH + 'px');\n var isNavFixed = document.documentElement.classList.contains('is-nav-fixed');\n var stickyOffset = 0;\n if (isMobile) {\n stickyOffset = topH;\n } else if (isNavFixed) {\n stickyOffset = navH;\n }\n document.documentElement.style.setProperty('--site-sticky-offset', stickyOffset + 'px');\n if (window.scrollY <= 0) {\n document.documentElement.classList.remove('is-nav-fixed');\n lastSticky = false;\n }\n if (!document.documentElement.classList.contains('is-nav-fixed')) {\n navTopY = navWrap.getBoundingClientRect().top + window.scrollY;\n }\n }\n root.querySelectorAll('.site-header__mega-pointer, .site-header__wide-default-pointer, .site-header__dropdown-pointer').forEach(function (pointer) {\n if (isMobile) {\n pointer.style.setProperty('display', 'none', 'important');\n } else {\n pointer.style.removeProperty('display');\n pointer.style.display = 'block';\n }\n });\n if (isMobile) {\n var stickyMenuEl = root.classList.contains('is-menu-open')\n ? root.querySelector('.site-header__shell > .container')\n : null;\n var stickyMenuH = stickyMenuEl ? stickyMenuEl.offsetHeight : topH;\n document.documentElement.style.setProperty('--site-mobile-menu-sticky-h', stickyMenuH + 'px');\n }\n };\n var closeMenu = function () {\n root.classList.remove('is-menu-open');\n document.documentElement.classList.remove('is-menu-open');\n toggle.setAttribute('aria-expanded', 'false');\n toggle.setAttribute('aria-label', 'Открыть меню');\n setHeaderHeight();\n };\n var openMenu = function () {\n root.classList.add('is-menu-open');\n document.documentElement.classList.add('is-menu-open');\n toggle.setAttribute('aria-expanded', 'true');\n toggle.setAttribute('aria-label', 'Закрыть меню');\n setHeaderHeight();\n };\n toggle.addEventListener('click', function () {\n if (root.classList.contains('is-menu-open')) {\n closeMenu();\n } else {\n openMenu();\n }\n });\n var dropdownItems = root.querySelectorAll('[data-dropdown]');\n var positionDropdownPointer = function (trigger, referenceEl, pointer) {\n if (window.innerWidth <= 1280) {\n pointer.style.setProperty('display', 'none', 'important');\n return;\n }\n var triggerRect = trigger.getBoundingClientRect();\n var referenceRect = referenceEl.getBoundingClientRect();\n var pointerHalf = 18.5;\n var pointerLeft = triggerRect.left + (triggerRect.width \/ 2) - referenceRect.left;\n var minLeft = pointerHalf + 8;\n var maxLeft = referenceRect.width - pointerHalf - 8;\n pointer.style.removeProperty('display');\n pointer.style.display = 'block';\n pointer.style.left = Math.max(minLeft, Math.min(maxLeft, pointerLeft)) + 'px';\n };\n var syncMegaPointer = function (dropdownItem) {\n if (!dropdownItem) {\n return;\n }\n var trigger = dropdownItem.querySelector('[data-dropdown-toggle]');\n if (!trigger) {\n return;\n }\n var megaDropdown = dropdownItem.querySelector('.site-header__dropdown--mega, .site-header__dropdown--wide-default');\n if (megaDropdown) {\n var container = megaDropdown.querySelector('.container');\n var megaPointer = megaDropdown.querySelector('.site-header__mega-pointer, .site-header__wide-default-pointer');\n if (container && megaPointer) {\n positionDropdownPointer(trigger, container, megaPointer);\n }\n }\n var smallDropdown = dropdownItem.querySelector('.site-header__dropdown--small');\n if (smallDropdown) {\n var smallPointer = smallDropdown.querySelector('.site-header__dropdown-pointer');\n if (smallPointer) {\n positionDropdownPointer(trigger, smallDropdown, smallPointer);\n }\n }\n };\n var closeAllDropdowns = function () {\n dropdownItems.forEach(function (li) {\n li.classList.remove('is-open');\n var btn = li.querySelector('[data-dropdown-toggle]');\n if (btn) btn.setAttribute('aria-expanded', 'false');\n });\n };\n dropdownItems.forEach(function (li) {\n var btn = li.querySelector('[data-dropdown-toggle]');\n if (!btn) return;\n btn.addEventListener('click', function (e) {\n e.preventDefault();\n var isOpen = li.classList.contains('is-open');\n closeAllDropdowns();\n if (!isOpen) {\n li.classList.add('is-open');\n btn.setAttribute('aria-expanded', 'true');\n if (window.innerWidth <= 1280) {\n var megaMenu = li.querySelector('[data-mega-menu]');\n collapseMegaMenuMobile(megaMenu);\n setHeaderHeight();\n scrollMobileMenuIntoView(btn);\n }\n syncMegaPointer(li);\n window.requestAnimationFrame(function () {\n syncMegaPointer(li);\n });\n }\n });\n });\n root.querySelectorAll('[data-dropdown-close]').forEach(function (btn) {\n btn.addEventListener('click', function () {\n closeAllDropdowns();\n var toggleBtn = root.querySelector('[data-dropdown-toggle][aria-expanded=\"true\"]');\n if (toggleBtn) {\n toggleBtn.focus();\n }\n });\n });\n var megaMenus = root.querySelectorAll('[data-mega-menu]');\n var syncMegaPanelMount = function () {\n var isDesktop = window.innerWidth > 1280;\n megaMenus.forEach(function (menu) {\n var host = menu.querySelector('[data-mega-panels-host]');\n if (!host) {\n return;\n }\n host.hidden = !isDesktop;\n host.setAttribute('aria-hidden', isDesktop ? 'false' : 'true');\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (block) {\n var button = block.querySelector('[data-mega-category]');\n if (!button) {\n return;\n }\n var panelId = button.getAttribute('aria-controls');\n if (!panelId) {\n return;\n }\n var panel = menu.querySelector('#' + panelId);\n if (!panel) {\n return;\n }\n if (isDesktop) {\n if (panel.parentElement !== host) {\n host.appendChild(panel);\n }\n } else if (panel.parentElement !== block) {\n block.appendChild(panel);\n }\n });\n });\n };\n var setMegaCategory = function (menu, nextButton) {\n if (!menu || !nextButton) {\n return;\n }\n var nextPanelId = nextButton.getAttribute('aria-controls');\n if (!nextPanelId) {\n return;\n }\n menu.querySelectorAll('[data-mega-category]').forEach(function (button) {\n var isActive = button === nextButton;\n button.classList.toggle('is-active', isActive);\n button.setAttribute('aria-selected', isActive ? 'true' : 'false');\n button.setAttribute('aria-expanded', isActive ? 'true' : 'false');\n });\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (block) {\n var blockButton = block.querySelector('[data-mega-category]');\n block.classList.toggle('is-open', blockButton === nextButton);\n });\n menu.querySelectorAll('[data-mega-panel]').forEach(function (panelEl) {\n var isActive = panelEl.id === nextPanelId;\n panelEl.classList.toggle('is-active', isActive);\n panelEl.hidden = !isActive;\n });\n if (window.innerWidth <= 1280) {\n setHeaderHeight();\n }\n };\n var collapseMegaMenuMobile = function (menu) {\n if (!menu) {\n return;\n }\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (block) {\n block.classList.remove('is-open');\n });\n menu.querySelectorAll('[data-mega-category]').forEach(function (btn) {\n btn.classList.remove('is-active');\n btn.setAttribute('aria-selected', 'false');\n btn.setAttribute('aria-expanded', 'false');\n });\n menu.querySelectorAll('[data-mega-panel]').forEach(function (panel) {\n panel.classList.remove('is-active');\n panel.hidden = true;\n });\n };\n var mobileMenuScrollAnim = null;\n var scrollMobileMenuIntoView = function (targetEl) {\n if (!targetEl || window.innerWidth > 1280 || !root.classList.contains('is-menu-open')) {\n return;\n }\n var stickyEl = root.querySelector('.site-header__shell > .container');\n var run = function () {\n var scrollRect = root.getBoundingClientRect();\n var targetRect = targetEl.getBoundingClientRect();\n var marginTop = 8;\n var marginBottom = 24;\n var stickyBottom = stickyEl\n ? stickyEl.getBoundingClientRect().bottom\n : scrollRect.top + (parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--site-header-top-h')) || 0);\n var viewTop = stickyBottom + marginTop;\n var viewBottom = scrollRect.bottom - marginBottom;\n var delta = 0;\n if (targetRect.top < viewTop) {\n delta = targetRect.top - viewTop;\n } else if (targetRect.bottom > viewBottom) {\n delta = targetRect.bottom - viewBottom;\n if (targetRect.top - delta < viewTop) {\n delta = targetRect.top - viewTop;\n }\n }\n if (delta === 0) {\n return;\n }\n if (mobileMenuScrollAnim !== null) {\n window.cancelAnimationFrame(mobileMenuScrollAnim);\n mobileMenuScrollAnim = null;\n }\n var startTop = root.scrollTop;\n var distance = Math.abs(delta);\n var duration = Math.min(560, Math.max(380, distance * 0.55));\n var startTime = null;\n var easeInOutCubic = function (t) {\n return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) \/ 2;\n };\n var step = function (timestamp) {\n if (startTime === null) {\n startTime = timestamp;\n }\n var progress = Math.min(1, (timestamp - startTime) \/ duration);\n root.scrollTop = startTop + delta * easeInOutCubic(progress);\n if (progress < 1) {\n mobileMenuScrollAnim = window.requestAnimationFrame(step);\n } else {\n mobileMenuScrollAnim = null;\n }\n };\n mobileMenuScrollAnim = window.requestAnimationFrame(step);\n };\n window.requestAnimationFrame(function () {\n window.requestAnimationFrame(run);\n });\n };\n var resetMegaCategories = function () {\n syncMegaPanelMount();\n megaMenus.forEach(function (menu) {\n if (window.innerWidth <= 1280) {\n collapseMegaMenuMobile(menu);\n return;\n }\n var defaultButton = menu.querySelector('[data-mega-category].is-active') || menu.querySelector('[data-mega-category]');\n if (defaultButton) {\n setMegaCategory(menu, defaultButton);\n }\n });\n };\n megaMenus.forEach(function (menu) {\n menu.querySelectorAll('[data-mega-category]').forEach(function (button) {\n button.addEventListener('mouseenter', function () {\n if (window.innerWidth > 1280) {\n setMegaCategory(menu, button);\n }\n });\n button.addEventListener('focus', function () {\n if (window.innerWidth > 1280) {\n setMegaCategory(menu, button);\n }\n });\n button.addEventListener('click', function (e) {\n e.preventDefault();\n if (window.innerWidth <= 1280) {\n var block = button.closest('[data-mega-category-block]');\n if (!block) {\n return;\n }\n var willOpen = !block.classList.contains('is-open');\n menu.querySelectorAll('[data-mega-category-block]').forEach(function (itemBlock) {\n itemBlock.classList.remove('is-open');\n });\n menu.querySelectorAll('[data-mega-category]').forEach(function (categoryButton) {\n categoryButton.classList.remove('is-active');\n categoryButton.setAttribute('aria-selected', 'false');\n categoryButton.setAttribute('aria-expanded', 'false');\n });\n menu.querySelectorAll('[data-mega-panel]').forEach(function (panelEl) {\n panelEl.classList.remove('is-active');\n panelEl.hidden = true;\n });\n if (willOpen) {\n setMegaCategory(menu, button);\n }\n setHeaderHeight();\n if (willOpen) {\n scrollMobileMenuIntoView(block);\n }\n return;\n }\n setMegaCategory(menu, button);\n });\n });\n });\n resetMegaCategories();\n document.addEventListener('click', function (e) {\n if (!root.contains(e.target)) return;\n var insideDropdown = e.target.closest('[data-dropdown]');\n if (!insideDropdown) {\n closeAllDropdowns();\n }\n });\n panel.querySelectorAll('a').forEach(function (link) {\n link.addEventListener('click', function () {\n if (window.innerWidth <= 1280) {\n closeMenu();\n }\n });\n });\n var onScroll = function () {\n if (window.innerWidth <= 1280 || !navWrap || navTopY === null) {\n if (document.documentElement.classList.contains('is-nav-fixed')) {\n document.documentElement.classList.remove('is-nav-fixed');\n }\n return;\n }\n var isFixed = document.documentElement.classList.contains('is-nav-fixed');\n if (!isFixed) {\n navTopY = navWrap.getBoundingClientRect().top + window.scrollY;\n }\n if (!isFixed) {\n var shouldFix = window.scrollY > 0 && navWrap.getBoundingClientRect().top <= 0;\n if (shouldFix && shouldFix !== lastSticky) {\n document.documentElement.classList.add('is-nav-fixed');\n lastSticky = true;\n setHeaderHeight();\n }\n return;\n }\n var shouldUnfix =\n window.scrollY <= 0 ||\n window.scrollY < (navTopY - 1) ||\n navWrap.getBoundingClientRect().top > 1;\n if (shouldUnfix) {\n document.documentElement.classList.remove('is-nav-fixed');\n lastSticky = false;\n setHeaderHeight();\n }\n };\n var syncNavLayout = function () {\n setHeaderHeight();\n onScroll();\n };\n var resizeFrame = null;\n var resizeActionsPending = false;\n function scheduleNavLayout(runResizeActions) {\n if (runResizeActions) resizeActionsPending = true;\n if (resizeFrame !== null) return;\n resizeFrame = window.requestAnimationFrame(function () {\n resizeFrame = null;\n syncNavLayout();\n if (resizeActionsPending) {\n resizeActionsPending = false;\n if (window.innerWidth > 1280) {\n closeMenu();\n }\n closeAllDropdowns();\n resetMegaCategories();\n }\n root.querySelectorAll('.site-header__menu-item.is-open').forEach(function (item) {\n syncMegaPointer(item);\n });\n });\n }\n window.addEventListener('resize', function () {\n scheduleNavLayout(true);\n });\n document.addEventListener('keydown', function (event) {\n if (event.key === 'Escape') {\n closeMenu();\n closeAllDropdowns();\n resetMegaCategories();\n }\n });\n var logoImg = root.querySelector('.site-header__logo');\n if (logoImg && !logoImg.complete) {\n logoImg.addEventListener('load', syncNavLayout, { once: true });\n }\n window.addEventListener('load', syncNavLayout, { once: true });\n window.addEventListener('pageshow', syncNavLayout);\n if (document.fonts && document.fonts.ready) {\n document.fonts.ready.then(syncNavLayout);\n }\n if (window.ResizeObserver && navWrap) {\n var headerTopEl = root.querySelector('.site-header__top');\n var headerResizeObserver = new ResizeObserver(function () {\n scheduleNavLayout(false);\n });\n if (headerTopEl) {\n headerResizeObserver.observe(headerTopEl);\n }\n headerResizeObserver.observe(navWrap);\n }\n syncNavLayout();\n window.addEventListener('scroll', onScroll, { passive: true });\n });\n})();\n(function () {\n document.querySelectorAll('[data-back-to-top]').forEach(function (btn) {\n var threshold = 500;\n var update = function () {\n var visible = window.scrollY > threshold;\n btn.hidden = !visible;\n btn.classList.toggle('is-visible', visible);\n };\n btn.addEventListener('click', function () {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n });\n update();\n window.addEventListener('scroll', update, { passive: true });\n });\n})();",
    "swiper_script": "var SwiperModule=(()=>{var ue=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Qe=Object.prototype.hasOwnProperty;var Je=(s,e)=>{for(var t in e)ue(s,t,{get:e[t],enumerable:!0})},et=(s,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let a of Ze(e))!Qe.call(s,a)&&a!==t&&ue(s,a,{get:()=>e[a],enumerable:!(i=Ke(e,a))||i.enumerable});return s};var tt=s=>et(ue({},\"__esModule\",{value:!0}),s);var gs={};Je(gs,{default:()=>hs});function ze(s){return s!==null&&typeof s==\"object\"&&\"constructor\"in s&&s.constructor===Object}function pe(s,e){s===void 0&&(s={}),e===void 0&&(e={});let t=[\"__proto__\",\"constructor\",\"prototype\"];Object.keys(e).filter(i=>t.indexOf(i)<0).forEach(i=>{typeof s[i]==\"undefined\"?s[i]=e[i]:ze(e[i])&&ze(s[i])&&Object.keys(e[i]).length>0&&pe(s[i],e[i])})}var Oe={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:\"\"},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:\"\",host:\"\",hostname:\"\",href:\"\",origin:\"\",pathname:\"\",protocol:\"\",search:\"\"}};function B(){let s=typeof document!=\"undefined\"?document:{};return pe(s,Oe),s}var st={document:Oe,navigator:{userAgent:\"\"},location:{hash:\"\",host:\"\",hostname:\"\",href:\"\",origin:\"\",pathname:\"\",protocol:\"\",search:\"\"},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return\"\"}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(s){return typeof setTimeout==\"undefined\"?(s(),null):setTimeout(s,0)},cancelAnimationFrame(s){typeof setTimeout!=\"undefined\"&&clearTimeout(s)}};function H(){let s=typeof window!=\"undefined\"?window:{};return pe(s,st),s}function De(s){return s===void 0&&(s=\"\"),s.trim().split(\" \").filter(e=>!!e.trim())}function $e(s){let e=s;Object.keys(e).forEach(t=>{try{e[t]=null}catch(i){}try{delete e[t]}catch(i){}})}function J(s,e){return e===void 0&&(e=0),setTimeout(s,e)}function K(){return Date.now()}function it(s){let e=H(),t;return e.getComputedStyle&&(t=e.getComputedStyle(s,null)),!t&&s.currentStyle&&(t=s.currentStyle),t||(t=s.style),t}function me(s,e){e===void 0&&(e=\"x\");let t=H(),i,a,r,l=it(s);return t.WebKitCSSMatrix?(a=l.transform||l.webkitTransform,a.split(\",\").length>6&&(a=a.split(\", \").map(n=>n.replace(\",\",\".\")).join(\", \")),r=new t.WebKitCSSMatrix(a===\"none\"?\"\":a)):(r=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue(\"transform\").replace(\"translate(\",\"matrix(1, 0, 0, 1,\"),i=r.toString().split(\",\")),e===\"x\"&&(t.WebKitCSSMatrix?a=r.m41:i.length===16?a=parseFloat(i[12]):a=parseFloat(i[4])),e===\"y\"&&(t.WebKitCSSMatrix?a=r.m42:i.length===16?a=parseFloat(i[13]):a=parseFloat(i[5])),a||0}function ie(s){return typeof s==\"object\"&&s!==null&&s.constructor&&Object.prototype.toString.call(s).slice(8,-1)===\"Object\"}function rt(s){return typeof window!=\"undefined\"&&typeof window.HTMLElement!=\"undefined\"?s instanceof HTMLElement:s&&(s.nodeType===1||s.nodeType===11)}function Y(){let s=Object(arguments.length<=0?void 0:arguments[0]),e=[\"__proto__\",\"constructor\",\"prototype\"];for(let t=1;t<arguments.length;t+=1){let i=t<0||arguments.length<=t?void 0:arguments[t];if(i!=null&&!rt(i)){let a=Object.keys(Object(i)).filter(r=>e.indexOf(r)<0);for(let r=0,l=a.length;r<l;r+=1){let n=a[r],d=Object.getOwnPropertyDescriptor(i,n);d!==void 0&&d.enumerable&&(ie(s[n])&&ie(i[n])?i[n].__swiper__?s[n]=i[n]:Y(s[n],i[n]):!ie(s[n])&&ie(i[n])?(s[n]={},i[n].__swiper__?s[n]=i[n]:Y(s[n],i[n])):s[n]=i[n])}}}return s}function ee(s,e,t){s.style.setProperty(e,t)}function he(s){let{swiper:e,targetPosition:t,side:i}=s,a=H(),r=-e.translate,l=null,n,d=e.params.speed;e.wrapperEl.style.scrollSnapType=\"none\",a.cancelAnimationFrame(e.cssModeFrameID);let o=t>r?\"next\":\"prev\",u=(g,y)=>o===\"next\"&&g>=y||o===\"prev\"&&g<=y,p=()=>{n=new Date().getTime(),l===null&&(l=n);let g=Math.max(Math.min((n-l)\/d,1),0),y=.5-Math.cos(g*Math.PI)\/2,m=r+y*(t-r);if(u(m,t)&&(m=t),e.wrapperEl.scrollTo({[i]:m}),u(m,t)){e.wrapperEl.style.overflow=\"hidden\",e.wrapperEl.style.scrollSnapType=\"\",setTimeout(()=>{e.wrapperEl.style.overflow=\"\",e.wrapperEl.scrollTo({[i]:m})}),a.cancelAnimationFrame(e.cssModeFrameID);return}e.cssModeFrameID=a.requestAnimationFrame(p)};p()}function F(s){return s.querySelector(\".swiper-slide-transform\")||s.shadowRoot&&s.shadowRoot.querySelector(\".swiper-slide-transform\")||s}function R(s,e){e===void 0&&(e=\"\");let t=H(),i=[...s.children];return t.HTMLSlotElement&&s instanceof HTMLSlotElement&&i.push(...s.assignedElements()),e?i.filter(a=>a.matches(e)):i}function at(s,e){let t=[e];for(;t.length>0;){let i=t.shift();if(s===i)return!0;t.push(...i.children,...i.shadowRoot?i.shadowRoot.children:[],...i.assignedElements?i.assignedElements():[])}}function ke(s,e){let t=H(),i=e.contains(s);return!i&&t.HTMLSlotElement&&e instanceof HTMLSlotElement&&(i=[...e.assignedElements()].includes(s),i||(i=at(s,e))),i}function re(s){try{console.warn(s);return}catch(e){}}function V(s,e){e===void 0&&(e=[]);let t=document.createElement(s);return t.classList.add(...Array.isArray(e)?e:De(e)),t}function Ge(s,e){let t=[];for(;s.previousElementSibling;){let i=s.previousElementSibling;e?i.matches(e)&&t.push(i):t.push(i),s=i}return t}function He(s,e){let t=[];for(;s.nextElementSibling;){let i=s.nextElementSibling;e?i.matches(e)&&t.push(i):t.push(i),s=i}return t}function W(s,e){return H().getComputedStyle(s,null).getPropertyValue(e)}function U(s){let e=s,t;if(e){for(t=0;(e=e.previousSibling)!==null;)e.nodeType===1&&(t+=1);return t}}function te(s,e){let t=[],i=s.parentElement;for(;i;)e?i.matches(e)&&t.push(i):t.push(i),i=i.parentElement;return t}function ce(s,e){function t(i){i.target===s&&(e.call(s,i),s.removeEventListener(\"transitionend\",t))}e&&s.addEventListener(\"transitionend\",t)}function ae(s,e,t){let i=H();return t?s[e===\"width\"?\"offsetWidth\":\"offsetHeight\"]+parseFloat(i.getComputedStyle(s,null).getPropertyValue(e===\"width\"?\"margin-right\":\"margin-top\"))+parseFloat(i.getComputedStyle(s,null).getPropertyValue(e===\"width\"?\"margin-left\":\"margin-bottom\")):s.offsetWidth}function D(s){return(Array.isArray(s)?s:[s]).filter(e=>!!e)}function Z(s,e){e===void 0&&(e=\"\"),typeof trustedTypes!=\"undefined\"?s.innerHTML=trustedTypes.createPolicy(\"html\",{createHTML:t=>t}).createHTML(e):s.innerHTML=e}var ge;function nt(){let s=H(),e=B();return{smoothScroll:e.documentElement&&e.documentElement.style&&\"scrollBehavior\"in e.documentElement.style,touch:!!(\"ontouchstart\"in s||s.DocumentTouch&&e instanceof s.DocumentTouch)}}function Ne(){return ge||(ge=nt()),ge}var ve;function lt(s){let{userAgent:e}=s===void 0?{}:s,t=Ne(),i=H(),a=i.navigator.platform,r=e||i.navigator.userAgent,l={ios:!1,android:!1},n=i.screen.width,d=i.screen.height,o=r.match(\/(Android);?[\\s\\\/]+([\\d.]+)?\/),u=r.match(\/(iPad).*OS\\s([\\d_]+)\/),p=r.match(\/(iPod)(.*OS\\s([\\d_]+))?\/),g=!u&&r.match(\/(iPhone\\sOS|iOS)\\s([\\d_]+)\/),y=a===\"Win32\",m=a===\"MacIntel\",h=[\"1024x1366\",\"1366x1024\",\"834x1194\",\"1194x834\",\"834x1112\",\"1112x834\",\"768x1024\",\"1024x768\",\"820x1180\",\"1180x820\",\"810x1080\",\"1080x810\"];return!u&&m&&t.touch&&h.indexOf(`${n}x${d}`)>=0&&(u=r.match(\/(Version)\\\/([\\d.]+)\/),u||(u=[0,1,\"13_0_0\"]),m=!1),o&&!y&&(l.os=\"android\",l.android=!0),(u||g||p)&&(l.os=\"ios\",l.ios=!0),l}function Fe(s){return s===void 0&&(s={}),ve||(ve=lt(s)),ve}var we;function ot(){let s=H(),e=Fe(),t=!1;function i(){let n=s.navigator.userAgent.toLowerCase();return n.indexOf(\"safari\")>=0&&n.indexOf(\"chrome\")<0&&n.indexOf(\"android\")<0}if(i()){let n=String(s.navigator.userAgent);if(n.includes(\"Version\/\")){let[d,o]=n.split(\"Version\/\")[1].split(\" \")[0].split(\".\").map(u=>Number(u));t=d<16||d===16&&o<2}}let a=\/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)\/i.test(s.navigator.userAgent),r=i(),l=r||a&&e.ios;return{isSafari:t||r,needPerspectiveFix:t,need3dFix:l,isWebView:a}}function We(){return we||(we=ot()),we}function dt(s){let{swiper:e,on:t,emit:i}=s,a=H(),r=null,l=null,n=()=>{!e||e.destroyed||!e.initialized||(i(\"beforeResize\"),i(\"resize\"))},d=()=>{!e||e.destroyed||!e.initialized||(r=new ResizeObserver(p=>{l=a.requestAnimationFrame(()=>{let{width:g,height:y}=e,m=g,h=y;p.forEach(x=>{let{contentBoxSize:b,contentRect:c,target:f}=x;f&&f!==e.el||(m=c?c.width:(b[0]||b).inlineSize,h=c?c.height:(b[0]||b).blockSize)}),(m!==g||h!==y)&&n()})}),r.observe(e.el))},o=()=>{l&&a.cancelAnimationFrame(l),r&&r.unobserve&&e.el&&(r.unobserve(e.el),r=null)},u=()=>{!e||e.destroyed||!e.initialized||i(\"orientationchange\")};t(\"init\",()=>{if(e.params.resizeObserver&&typeof a.ResizeObserver!=\"undefined\"){d();return}a.addEventListener(\"resize\",n),a.addEventListener(\"orientationchange\",u)}),t(\"destroy\",()=>{o(),a.removeEventListener(\"resize\",n),a.removeEventListener(\"orientationchange\",u)})}function ct(s){let{swiper:e,extendParams:t,on:i,emit:a}=s,r=[],l=H(),n=function(u,p){p===void 0&&(p={});let g=l.MutationObserver||l.WebkitMutationObserver,y=new g(m=>{if(e.__preventObserver__)return;if(m.length===1){a(\"observerUpdate\",m[0]);return}let h=function(){a(\"observerUpdate\",m[0])};l.requestAnimationFrame?l.requestAnimationFrame(h):l.setTimeout(h,0)});y.observe(u,{attributes:typeof p.attributes==\"undefined\"?!0:p.attributes,childList:e.isElement||(typeof p.childList==\"undefined\"?!0:p).childList,characterData:typeof p.characterData==\"undefined\"?!0:p.characterData}),r.push(y)},d=()=>{if(e.params.observer){if(e.params.observeParents){let u=te(e.hostEl);for(let p=0;p<u.length;p+=1)n(u[p])}n(e.hostEl,{childList:e.params.observeSlideChildren}),n(e.wrapperEl,{attributes:!1})}},o=()=>{r.forEach(u=>{u.disconnect()}),r.splice(0,r.length)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),i(\"init\",d),i(\"destroy\",o)}var ft={on(s,e,t){let i=this;if(!i.eventsListeners||i.destroyed||typeof e!=\"function\")return i;let a=t?\"unshift\":\"push\";return s.split(\" \").forEach(r=>{i.eventsListeners[r]||(i.eventsListeners[r]=[]),i.eventsListeners[r][a](e)}),i},once(s,e,t){let i=this;if(!i.eventsListeners||i.destroyed||typeof e!=\"function\")return i;function a(){i.off(s,a),a.__emitterProxy&&delete a.__emitterProxy;for(var r=arguments.length,l=new Array(r),n=0;n<r;n++)l[n]=arguments[n];e.apply(i,l)}return a.__emitterProxy=e,i.on(s,a,t)},onAny(s,e){let t=this;if(!t.eventsListeners||t.destroyed||typeof s!=\"function\")return t;let i=e?\"unshift\":\"push\";return t.eventsAnyListeners.indexOf(s)<0&&t.eventsAnyListeners[i](s),t},offAny(s){let e=this;if(!e.eventsListeners||e.destroyed||!e.eventsAnyListeners)return e;let t=e.eventsAnyListeners.indexOf(s);return t>=0&&e.eventsAnyListeners.splice(t,1),e},off(s,e){let t=this;return!t.eventsListeners||t.destroyed||!t.eventsListeners||s.split(\" \").forEach(i=>{typeof e==\"undefined\"?t.eventsListeners[i]=[]:t.eventsListeners[i]&&t.eventsListeners[i].forEach((a,r)=>{(a===e||a.__emitterProxy&&a.__emitterProxy===e)&&t.eventsListeners[i].splice(r,1)})}),t},emit(){let s=this;if(!s.eventsListeners||s.destroyed||!s.eventsListeners)return s;let e,t,i;for(var a=arguments.length,r=new Array(a),l=0;l<a;l++)r[l]=arguments[l];return typeof r[0]==\"string\"||Array.isArray(r[0])?(e=r[0],t=r.slice(1,r.length),i=s):(e=r[0].events,t=r[0].data,i=r[0].context||s),t.unshift(i),(Array.isArray(e)?e:e.split(\" \")).forEach(d=>{s.eventsAnyListeners&&s.eventsAnyListeners.length&&s.eventsAnyListeners.forEach(o=>{o.apply(i,[d,...t])}),s.eventsListeners&&s.eventsListeners[d]&&s.eventsListeners[d].forEach(o=>{o.apply(i,t)})}),s}};function ut(){let s=this,e,t,i=s.el;typeof s.params.width!=\"undefined\"&&s.params.width!==null?e=s.params.width:e=i.clientWidth,typeof s.params.height!=\"undefined\"&&s.params.height!==null?t=s.params.height:t=i.clientHeight,!(e===0&&s.isHorizontal()||t===0&&s.isVertical())&&(e=e-parseInt(W(i,\"padding-left\")||0,10)-parseInt(W(i,\"padding-right\")||0,10),t=t-parseInt(W(i,\"padding-top\")||0,10)-parseInt(W(i,\"padding-bottom\")||0,10),Number.isNaN(e)&&(e=0),Number.isNaN(t)&&(t=0),Object.assign(s,{width:e,height:t,size:s.isHorizontal()?e:t}))}function pt(){let s=this;function e(T,M){return parseFloat(T.getPropertyValue(s.getDirectionLabel(M))||0)}let t=s.params,{wrapperEl:i,slidesEl:a,size:r,rtlTranslate:l,wrongRTL:n}=s,d=s.virtual&&t.virtual.enabled,o=d?s.virtual.slides.length:s.slides.length,u=R(a,`.${s.params.slideClass}, swiper-slide`),p=d?s.virtual.slides.length:u.length,g=[],y=[],m=[],h=t.slidesOffsetBefore;typeof h==\"function\"&&(h=t.slidesOffsetBefore.call(s));let x=t.slidesOffsetAfter;typeof x==\"function\"&&(x=t.slidesOffsetAfter.call(s));let b=s.snapGrid.length,c=s.slidesGrid.length,f=t.spaceBetween,v=-h,S=0,C=0;if(typeof r==\"undefined\")return;typeof f==\"string\"&&f.indexOf(\"%\")>=0?f=parseFloat(f.replace(\"%\",\"\"))\/100*r:typeof f==\"string\"&&(f=parseFloat(f)),s.virtualSize=-f,u.forEach(T=>{l?T.style.marginLeft=\"\":T.style.marginRight=\"\",T.style.marginBottom=\"\",T.style.marginTop=\"\"}),t.centeredSlides&&t.cssMode&&(ee(i,\"--swiper-centered-offset-before\",\"\"),ee(i,\"--swiper-centered-offset-after\",\"\"));let I=t.grid&&t.grid.rows>1&&s.grid;I?s.grid.initSlides(u):s.grid&&s.grid.unsetSlides();let P,L=t.slidesPerView===\"auto\"&&t.breakpoints&&Object.keys(t.breakpoints).filter(T=>typeof t.breakpoints[T].slidesPerView!=\"undefined\").length>0;for(let T=0;T<p;T+=1){P=0;let M;if(u[T]&&(M=u[T]),I&&s.grid.updateSlide(T,M,u),!(u[T]&&W(M,\"display\")===\"none\")){if(t.slidesPerView===\"auto\"){L&&(u[T].style[s.getDirectionLabel(\"width\")]=\"\");let A=getComputedStyle(M),O=M.style.transform,k=M.style.webkitTransform;if(O&&(M.style.transform=\"none\"),k&&(M.style.webkitTransform=\"none\"),t.roundLengths)P=s.isHorizontal()?ae(M,\"width\",!0):ae(M,\"height\",!0);else{let G=e(A,\"width\"),z=e(A,\"padding-left\"),w=e(A,\"padding-right\"),E=e(A,\"margin-left\"),$=e(A,\"margin-right\"),X=A.getPropertyValue(\"box-sizing\");if(X&&X===\"border-box\")P=G+E+$;else{let{clientWidth:q,offsetWidth:j}=M;P=G+z+w+E+$+(j-q)}}O&&(M.style.transform=O),k&&(M.style.webkitTransform=k),t.roundLengths&&(P=Math.floor(P))}else P=(r-(t.slidesPerView-1)*f)\/t.slidesPerView,t.roundLengths&&(P=Math.floor(P)),u[T]&&(u[T].style[s.getDirectionLabel(\"width\")]=`${P}px`);u[T]&&(u[T].swiperSlideSize=P),m.push(P),t.centeredSlides?(v=v+P\/2+S\/2+f,S===0&&T!==0&&(v=v-r\/2-f),T===0&&(v=v-r\/2-f),Math.abs(v)<1\/1e3&&(v=0),t.roundLengths&&(v=Math.floor(v)),C%t.slidesPerGroup===0&&g.push(v),y.push(v)):(t.roundLengths&&(v=Math.floor(v)),(C-Math.min(s.params.slidesPerGroupSkip,C))%s.params.slidesPerGroup===0&&g.push(v),y.push(v),v=v+P+f),s.virtualSize+=P+f,S=P,C+=1}}if(s.virtualSize=Math.max(s.virtualSize,r)+x,l&&n&&(t.effect===\"slide\"||t.effect===\"coverflow\")&&(i.style.width=`${s.virtualSize+f}px`),t.setWrapperSize&&(i.style[s.getDirectionLabel(\"width\")]=`${s.virtualSize+f}px`),I&&s.grid.updateWrapperSize(P,g),!t.centeredSlides){let T=[];for(let M=0;M<g.length;M+=1){let A=g[M];t.roundLengths&&(A=Math.floor(A)),g[M]<=s.virtualSize-r&&T.push(A)}g=T,Math.floor(s.virtualSize-r)-Math.floor(g[g.length-1])>1&&g.push(s.virtualSize-r)}if(d&&t.loop){let T=m[0]+f;if(t.slidesPerGroup>1){let M=Math.ceil((s.virtual.slidesBefore+s.virtual.slidesAfter)\/t.slidesPerGroup),A=T*t.slidesPerGroup;for(let O=0;O<M;O+=1)g.push(g[g.length-1]+A)}for(let M=0;M<s.virtual.slidesBefore+s.virtual.slidesAfter;M+=1)t.slidesPerGroup===1&&g.push(g[g.length-1]+T),y.push(y[y.length-1]+T),s.virtualSize+=T}if(g.length===0&&(g=[0]),f!==0){let T=s.isHorizontal()&&l?\"marginLeft\":s.getDirectionLabel(\"marginRight\");u.filter((M,A)=>!t.cssMode||t.loop?!0:A!==u.length-1).forEach(M=>{M.style[T]=`${f}px`})}if(t.centeredSlides&&t.centeredSlidesBounds){let T=0;m.forEach(A=>{T+=A+(f||0)}),T-=f;let M=T>r?T-r:0;g=g.map(A=>A<=0?-h:A>M?M+x:A)}if(t.centerInsufficientSlides){let T=0;m.forEach(A=>{T+=A+(f||0)}),T-=f;let M=(t.slidesOffsetBefore||0)+(t.slidesOffsetAfter||0);if(T+M<r){let A=(r-T-M)\/2;g.forEach((O,k)=>{g[k]=O-A}),y.forEach((O,k)=>{y[k]=O+A})}}if(Object.assign(s,{slides:u,snapGrid:g,slidesGrid:y,slidesSizesGrid:m}),t.centeredSlides&&t.cssMode&&!t.centeredSlidesBounds){ee(i,\"--swiper-centered-offset-before\",`${-g[0]}px`),ee(i,\"--swiper-centered-offset-after\",`${s.size\/2-m[m.length-1]\/2}px`);let T=-s.snapGrid[0],M=-s.slidesGrid[0];s.snapGrid=s.snapGrid.map(A=>A+T),s.slidesGrid=s.slidesGrid.map(A=>A+M)}if(p!==o&&s.emit(\"slidesLengthChange\"),g.length!==b&&(s.params.watchOverflow&&s.checkOverflow(),s.emit(\"snapGridLengthChange\")),y.length!==c&&s.emit(\"slidesGridLengthChange\"),t.watchSlidesProgress&&s.updateSlidesOffset(),s.emit(\"slidesUpdated\"),!d&&!t.cssMode&&(t.effect===\"slide\"||t.effect===\"fade\")){let T=`${t.containerModifierClass}backface-hidden`,M=s.el.classList.contains(T);p<=t.maxBackfaceHiddenSlides?M||s.el.classList.add(T):M&&s.el.classList.remove(T)}}function mt(s){let e=this,t=[],i=e.virtual&&e.params.virtual.enabled,a=0,r;typeof s==\"number\"?e.setTransition(s):s===!0&&e.setTransition(e.params.speed);let l=n=>i?e.slides[e.getSlideIndexByData(n)]:e.slides[n];if(e.params.slidesPerView!==\"auto\"&&e.params.slidesPerView>1)if(e.params.centeredSlides)(e.visibleSlides||[]).forEach(n=>{t.push(n)});else for(r=0;r<Math.ceil(e.params.slidesPerView);r+=1){let n=e.activeIndex+r;if(n>e.slides.length&&!i)break;t.push(l(n))}else t.push(l(e.activeIndex));for(r=0;r<t.length;r+=1)if(typeof t[r]!=\"undefined\"){let n=t[r].offsetHeight;a=n>a?n:a}(a||a===0)&&(e.wrapperEl.style.height=`${a}px`)}function ht(){let s=this,e=s.slides,t=s.isElement?s.isHorizontal()?s.wrapperEl.offsetLeft:s.wrapperEl.offsetTop:0;for(let i=0;i<e.length;i+=1)e[i].swiperSlideOffset=(s.isHorizontal()?e[i].offsetLeft:e[i].offsetTop)-t-s.cssOverflowAdjustment()}var Be=(s,e,t)=>{e&&!s.classList.contains(t)?s.classList.add(t):!e&&s.classList.contains(t)&&s.classList.remove(t)};function gt(s){s===void 0&&(s=this&&this.translate||0);let e=this,t=e.params,{slides:i,rtlTranslate:a,snapGrid:r}=e;if(i.length===0)return;typeof i[0].swiperSlideOffset==\"undefined\"&&e.updateSlidesOffset();let l=-s;a&&(l=s),e.visibleSlidesIndexes=[],e.visibleSlides=[];let n=t.spaceBetween;typeof n==\"string\"&&n.indexOf(\"%\")>=0?n=parseFloat(n.replace(\"%\",\"\"))\/100*e.size:typeof n==\"string\"&&(n=parseFloat(n));for(let d=0;d<i.length;d+=1){let o=i[d],u=o.swiperSlideOffset;t.cssMode&&t.centeredSlides&&(u-=i[0].swiperSlideOffset);let p=(l+(t.centeredSlides?e.minTranslate():0)-u)\/(o.swiperSlideSize+n),g=(l-r[0]+(t.centeredSlides?e.minTranslate():0)-u)\/(o.swiperSlideSize+n),y=-(l-u),m=y+e.slidesSizesGrid[d],h=y>=0&&y<=e.size-e.slidesSizesGrid[d],x=y>=0&&y<e.size-1||m>1&&m<=e.size||y<=0&&m>=e.size;x&&(e.visibleSlides.push(o),e.visibleSlidesIndexes.push(d)),Be(o,x,t.slideVisibleClass),Be(o,h,t.slideFullyVisibleClass),o.progress=a?-p:p,o.originalProgress=a?-g:g}}function vt(s){let e=this;if(typeof s==\"undefined\"){let u=e.rtlTranslate?-1:1;s=e&&e.translate&&e.translate*u||0}let t=e.params,i=e.maxTranslate()-e.minTranslate(),{progress:a,isBeginning:r,isEnd:l,progressLoop:n}=e,d=r,o=l;if(i===0)a=0,r=!0,l=!0;else{a=(s-e.minTranslate())\/i;let u=Math.abs(s-e.minTranslate())<1,p=Math.abs(s-e.maxTranslate())<1;r=u||a<=0,l=p||a>=1,u&&(a=0),p&&(a=1)}if(t.loop){let u=e.getSlideIndexByData(0),p=e.getSlideIndexByData(e.slides.length-1),g=e.slidesGrid[u],y=e.slidesGrid[p],m=e.slidesGrid[e.slidesGrid.length-1],h=Math.abs(s);h>=g?n=(h-g)\/m:n=(h+m-y)\/m,n>1&&(n-=1)}Object.assign(e,{progress:a,progressLoop:n,isBeginning:r,isEnd:l}),(t.watchSlidesProgress||t.centeredSlides&&t.autoHeight)&&e.updateSlidesProgress(s),r&&!d&&e.emit(\"reachBeginning toEdge\"),l&&!o&&e.emit(\"reachEnd toEdge\"),(d&&!r||o&&!l)&&e.emit(\"fromEdge\"),e.emit(\"progress\",a)}var ye=(s,e,t)=>{e&&!s.classList.contains(t)?s.classList.add(t):!e&&s.classList.contains(t)&&s.classList.remove(t)};function wt(){let s=this,{slides:e,params:t,slidesEl:i,activeIndex:a}=s,r=s.virtual&&t.virtual.enabled,l=s.grid&&t.grid&&t.grid.rows>1,n=p=>R(i,`.${t.slideClass}${p}, swiper-slide${p}`)[0],d,o,u;if(r)if(t.loop){let p=a-s.virtual.slidesBefore;p<0&&(p=s.virtual.slides.length+p),p>=s.virtual.slides.length&&(p-=s.virtual.slides.length),d=n(`[data-swiper-slide-index=\"${p}\"]`)}else d=n(`[data-swiper-slide-index=\"${a}\"]`);else l?(d=e.find(p=>p.column===a),u=e.find(p=>p.column===a+1),o=e.find(p=>p.column===a-1)):d=e[a];d&&(l||(u=He(d,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!u&&(u=e[0]),o=Ge(d,`.${t.slideClass}, swiper-slide`)[0],t.loop&&!o===0&&(o=e[e.length-1]))),e.forEach(p=>{ye(p,p===d,t.slideActiveClass),ye(p,p===u,t.slideNextClass),ye(p,p===o,t.slidePrevClass)}),s.emitSlidesClasses()}var fe=(s,e)=>{if(!s||s.destroyed||!s.params)return;let t=()=>s.isElement?\"swiper-slide\":`.${s.params.slideClass}`,i=e.closest(t());if(i){let a=i.querySelector(`.${s.params.lazyPreloaderClass}`);!a&&s.isElement&&(i.shadowRoot?a=i.shadowRoot.querySelector(`.${s.params.lazyPreloaderClass}`):requestAnimationFrame(()=>{i.shadowRoot&&(a=i.shadowRoot.querySelector(`.${s.params.lazyPreloaderClass}`),a&&a.remove())})),a&&a.remove()}},be=(s,e)=>{if(!s.slides[e])return;let t=s.slides[e].querySelector('[loading=\"lazy\"]');t&&t.removeAttribute(\"loading\")},Ee=s=>{if(!s||s.destroyed||!s.params)return;let e=s.params.lazyPreloadPrevNext,t=s.slides.length;if(!t||!e||e<0)return;e=Math.min(e,t);let i=s.params.slidesPerView===\"auto\"?s.slidesPerViewDynamic():Math.ceil(s.params.slidesPerView),a=s.activeIndex;if(s.params.grid&&s.params.grid.rows>1){let l=a,n=[l-e];n.push(...Array.from({length:e}).map((d,o)=>l+i+o)),s.slides.forEach((d,o)=>{n.includes(d.column)&&be(s,o)});return}let r=a+i-1;if(s.params.rewind||s.params.loop)for(let l=a-e;l<=r+e;l+=1){let n=(l%t+t)%t;(n<a||n>r)&&be(s,n)}else for(let l=Math.max(a-e,0);l<=Math.min(r+e,t-1);l+=1)l!==a&&(l>r||l<a)&&be(s,l)};function yt(s){let{slidesGrid:e,params:t}=s,i=s.rtlTranslate?s.translate:-s.translate,a;for(let r=0;r<e.length;r+=1)typeof e[r+1]!=\"undefined\"?i>=e[r]&&i<e[r+1]-(e[r+1]-e[r])\/2?a=r:i>=e[r]&&i<e[r+1]&&(a=r+1):i>=e[r]&&(a=r);return t.normalizeSlideIndex&&(a<0||typeof a==\"undefined\")&&(a=0),a}function bt(s){let e=this,t=e.rtlTranslate?e.translate:-e.translate,{snapGrid:i,params:a,activeIndex:r,realIndex:l,snapIndex:n}=e,d=s,o,u=y=>{let m=y-e.virtual.slidesBefore;return m<0&&(m=e.virtual.slides.length+m),m>=e.virtual.slides.length&&(m-=e.virtual.slides.length),m};if(typeof d==\"undefined\"&&(d=yt(e)),i.indexOf(t)>=0)o=i.indexOf(t);else{let y=Math.min(a.slidesPerGroupSkip,d);o=y+Math.floor((d-y)\/a.slidesPerGroup)}if(o>=i.length&&(o=i.length-1),d===r&&!e.params.loop){o!==n&&(e.snapIndex=o,e.emit(\"snapIndexChange\"));return}if(d===r&&e.params.loop&&e.virtual&&e.params.virtual.enabled){e.realIndex=u(d);return}let p=e.grid&&a.grid&&a.grid.rows>1,g;if(e.virtual&&a.virtual.enabled&&a.loop)g=u(d);else if(p){let y=e.slides.find(h=>h.column===d),m=parseInt(y.getAttribute(\"data-swiper-slide-index\"),10);Number.isNaN(m)&&(m=Math.max(e.slides.indexOf(y),0)),g=Math.floor(m\/a.grid.rows)}else if(e.slides[d]){let y=e.slides[d].getAttribute(\"data-swiper-slide-index\");y?g=parseInt(y,10):g=d}else g=d;Object.assign(e,{previousSnapIndex:n,snapIndex:o,previousRealIndex:l,realIndex:g,previousIndex:r,activeIndex:d}),e.initialized&&Ee(e),e.emit(\"activeIndexChange\"),e.emit(\"snapIndexChange\"),(e.initialized||e.params.runCallbacksOnInit)&&(l!==g&&e.emit(\"realIndexChange\"),e.emit(\"slideChange\"))}function St(s,e){let t=this,i=t.params,a=s.closest(`.${i.slideClass}, swiper-slide`);!a&&t.isElement&&e&&e.length>1&&e.includes(s)&&[...e.slice(e.indexOf(s)+1,e.length)].forEach(n=>{!a&&n.matches&&n.matches(`.${i.slideClass}, swiper-slide`)&&(a=n)});let r=!1,l;if(a){for(let n=0;n<t.slides.length;n+=1)if(t.slides[n]===a){r=!0,l=n;break}}if(a&&r)t.clickedSlide=a,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(a.getAttribute(\"data-swiper-slide-index\"),10):t.clickedIndex=l;else{t.clickedSlide=void 0,t.clickedIndex=void 0;return}i.slideToClickedSlide&&t.clickedIndex!==void 0&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}var xt={updateSize:ut,updateSlides:pt,updateAutoHeight:mt,updateSlidesOffset:ht,updateSlidesProgress:gt,updateProgress:vt,updateSlidesClasses:wt,updateActiveIndex:bt,updateClickedSlide:St};function Et(s){s===void 0&&(s=this.isHorizontal()?\"x\":\"y\");let e=this,{params:t,rtlTranslate:i,translate:a,wrapperEl:r}=e;if(t.virtualTranslate)return i?-a:a;if(t.cssMode)return a;let l=me(r,s);return l+=e.cssOverflowAdjustment(),i&&(l=-l),l||0}function Tt(s,e){let t=this,{rtlTranslate:i,params:a,wrapperEl:r,progress:l}=t,n=0,d=0,o=0;t.isHorizontal()?n=i?-s:s:d=s,a.roundLengths&&(n=Math.floor(n),d=Math.floor(d)),t.previousTranslate=t.translate,t.translate=t.isHorizontal()?n:d,a.cssMode?r[t.isHorizontal()?\"scrollLeft\":\"scrollTop\"]=t.isHorizontal()?-n:-d:a.virtualTranslate||(t.isHorizontal()?n-=t.cssOverflowAdjustment():d-=t.cssOverflowAdjustment(),r.style.transform=`translate3d(${n}px, ${d}px, ${o}px)`);let u,p=t.maxTranslate()-t.minTranslate();p===0?u=0:u=(s-t.minTranslate())\/p,u!==l&&t.updateProgress(s),t.emit(\"setTranslate\",t.translate,e)}function Mt(){return-this.snapGrid[0]}function Ct(){return-this.snapGrid[this.snapGrid.length-1]}function Pt(s,e,t,i,a){s===void 0&&(s=0),e===void 0&&(e=this.params.speed),t===void 0&&(t=!0),i===void 0&&(i=!0);let r=this,{params:l,wrapperEl:n}=r;if(r.animating&&l.preventInteractionOnTransition)return!1;let d=r.minTranslate(),o=r.maxTranslate(),u;if(i&&s>d?u=d:i&&s<o?u=o:u=s,r.updateProgress(u),l.cssMode){let p=r.isHorizontal();if(e===0)n[p?\"scrollLeft\":\"scrollTop\"]=-u;else{if(!r.support.smoothScroll)return he({swiper:r,targetPosition:-u,side:p?\"left\":\"top\"}),!0;n.scrollTo({[p?\"left\":\"top\"]:-u,behavior:\"smooth\"})}return!0}return e===0?(r.setTransition(0),r.setTranslate(u),t&&(r.emit(\"beforeTransitionStart\",e,a),r.emit(\"transitionEnd\"))):(r.setTransition(e),r.setTranslate(u),t&&(r.emit(\"beforeTransitionStart\",e,a),r.emit(\"transitionStart\")),r.animating||(r.animating=!0,r.onTranslateToWrapperTransitionEnd||(r.onTranslateToWrapperTransitionEnd=function(g){!r||r.destroyed||g.target===this&&(r.wrapperEl.removeEventListener(\"transitionend\",r.onTranslateToWrapperTransitionEnd),r.onTranslateToWrapperTransitionEnd=null,delete r.onTranslateToWrapperTransitionEnd,r.animating=!1,t&&r.emit(\"transitionEnd\"))}),r.wrapperEl.addEventListener(\"transitionend\",r.onTranslateToWrapperTransitionEnd))),!0}var Lt={getTranslate:Et,setTranslate:Tt,minTranslate:Mt,maxTranslate:Ct,translateTo:Pt};function It(s,e){let t=this;t.params.cssMode||(t.wrapperEl.style.transitionDuration=`${s}ms`,t.wrapperEl.style.transitionDelay=s===0?\"0ms\":\"\"),t.emit(\"setTransition\",s,e)}function _e(s){let{swiper:e,runCallbacks:t,direction:i,step:a}=s,{activeIndex:r,previousIndex:l}=e,n=i;n||(r>l?n=\"next\":r<l?n=\"prev\":n=\"reset\"),e.emit(`transition${a}`),t&&n===\"reset\"?e.emit(`slideResetTransition${a}`):t&&r!==l&&(e.emit(`slideChangeTransition${a}`),n===\"next\"?e.emit(`slideNextTransition${a}`):e.emit(`slidePrevTransition${a}`))}function At(s,e){s===void 0&&(s=!0);let t=this,{params:i}=t;i.cssMode||(i.autoHeight&&t.updateAutoHeight(),_e({swiper:t,runCallbacks:s,direction:e,step:\"Start\"}))}function zt(s,e){s===void 0&&(s=!0);let t=this,{params:i}=t;t.animating=!1,!i.cssMode&&(t.setTransition(0),_e({swiper:t,runCallbacks:s,direction:e,step:\"End\"}))}var Ot={setTransition:It,transitionStart:At,transitionEnd:zt};function Dt(s,e,t,i,a){s===void 0&&(s=0),t===void 0&&(t=!0),typeof s==\"string\"&&(s=parseInt(s,10));let r=this,l=s;l<0&&(l=0);let{params:n,snapGrid:d,slidesGrid:o,previousIndex:u,activeIndex:p,rtlTranslate:g,wrapperEl:y,enabled:m}=r;if(!m&&!i&&!a||r.destroyed||r.animating&&n.preventInteractionOnTransition)return!1;typeof e==\"undefined\"&&(e=r.params.speed);let h=Math.min(r.params.slidesPerGroupSkip,l),x=h+Math.floor((l-h)\/r.params.slidesPerGroup);x>=d.length&&(x=d.length-1);let b=-d[x];if(n.normalizeSlideIndex)for(let I=0;I<o.length;I+=1){let P=-Math.floor(b*100),L=Math.floor(o[I]*100),T=Math.floor(o[I+1]*100);typeof o[I+1]!=\"undefined\"?P>=L&&P<T-(T-L)\/2?l=I:P>=L&&P<T&&(l=I+1):P>=L&&(l=I)}if(r.initialized&&l!==p&&(!r.allowSlideNext&&(g?b>r.translate&&b>r.minTranslate():b<r.translate&&b<r.minTranslate())||!r.allowSlidePrev&&b>r.translate&&b>r.maxTranslate()&&(p||0)!==l))return!1;l!==(u||0)&&t&&r.emit(\"beforeSlideChangeStart\"),r.updateProgress(b);let c;l>p?c=\"next\":l<p?c=\"prev\":c=\"reset\";let f=r.virtual&&r.params.virtual.enabled;if(!(f&&a)&&(g&&-b===r.translate||!g&&b===r.translate))return r.updateActiveIndex(l),n.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),n.effect!==\"slide\"&&r.setTranslate(b),c!==\"reset\"&&(r.transitionStart(t,c),r.transitionEnd(t,c)),!1;if(n.cssMode){let I=r.isHorizontal(),P=g?b:-b;if(e===0)f&&(r.wrapperEl.style.scrollSnapType=\"none\",r._immediateVirtual=!0),f&&!r._cssModeVirtualInitialSet&&r.params.initialSlide>0?(r._cssModeVirtualInitialSet=!0,requestAnimationFrame(()=>{y[I?\"scrollLeft\":\"scrollTop\"]=P})):y[I?\"scrollLeft\":\"scrollTop\"]=P,f&&requestAnimationFrame(()=>{r.wrapperEl.style.scrollSnapType=\"\",r._immediateVirtual=!1});else{if(!r.support.smoothScroll)return he({swiper:r,targetPosition:P,side:I?\"left\":\"top\"}),!0;y.scrollTo({[I?\"left\":\"top\"]:P,behavior:\"smooth\"})}return!0}let C=We().isSafari;return f&&!a&&C&&r.isElement&&r.virtual.update(!1,!1,l),r.setTransition(e),r.setTranslate(b),r.updateActiveIndex(l),r.updateSlidesClasses(),r.emit(\"beforeTransitionStart\",e,i),r.transitionStart(t,c),e===0?r.transitionEnd(t,c):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(P){!r||r.destroyed||P.target===this&&(r.wrapperEl.removeEventListener(\"transitionend\",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(t,c))}),r.wrapperEl.addEventListener(\"transitionend\",r.onSlideToWrapperTransitionEnd)),!0}function $t(s,e,t,i){s===void 0&&(s=0),t===void 0&&(t=!0),typeof s==\"string\"&&(s=parseInt(s,10));let a=this;if(a.destroyed)return;typeof e==\"undefined\"&&(e=a.params.speed);let r=a.grid&&a.params.grid&&a.params.grid.rows>1,l=s;if(a.params.loop)if(a.virtual&&a.params.virtual.enabled)l=l+a.virtual.slidesBefore;else{let n;if(r){let g=l*a.params.grid.rows;n=a.slides.find(y=>y.getAttribute(\"data-swiper-slide-index\")*1===g).column}else n=a.getSlideIndexByData(l);let d=r?Math.ceil(a.slides.length\/a.params.grid.rows):a.slides.length,{centeredSlides:o}=a.params,u=a.params.slidesPerView;u===\"auto\"?u=a.slidesPerViewDynamic():(u=Math.ceil(parseFloat(a.params.slidesPerView,10)),o&&u%2===0&&(u=u+1));let p=d-n<u;if(o&&(p=p||n<Math.ceil(u\/2)),i&&o&&a.params.slidesPerView!==\"auto\"&&!r&&(p=!1),p){let g=o?n<a.activeIndex?\"prev\":\"next\":n-a.activeIndex-1<a.params.slidesPerView?\"next\":\"prev\";a.loopFix({direction:g,slideTo:!0,activeSlideIndex:g===\"next\"?n+1:n-d+1,slideRealIndex:g===\"next\"?a.realIndex:void 0})}if(r){let g=l*a.params.grid.rows;l=a.slides.find(y=>y.getAttribute(\"data-swiper-slide-index\")*1===g).column}else l=a.getSlideIndexByData(l)}return requestAnimationFrame(()=>{a.slideTo(l,e,t,i)}),a}function kt(s,e,t){e===void 0&&(e=!0);let i=this,{enabled:a,params:r,animating:l}=i;if(!a||i.destroyed)return i;typeof s==\"undefined\"&&(s=i.params.speed);let n=r.slidesPerGroup;r.slidesPerView===\"auto\"&&r.slidesPerGroup===1&&r.slidesPerGroupAuto&&(n=Math.max(i.slidesPerViewDynamic(\"current\",!0),1));let d=i.activeIndex<r.slidesPerGroupSkip?1:n,o=i.virtual&&r.virtual.enabled;if(r.loop){if(l&&!o&&r.loopPreventsSliding)return!1;if(i.loopFix({direction:\"next\"}),i._clientLeft=i.wrapperEl.clientLeft,i.activeIndex===i.slides.length-1&&r.cssMode)return requestAnimationFrame(()=>{i.slideTo(i.activeIndex+d,s,e,t)}),!0}return r.rewind&&i.isEnd?i.slideTo(0,s,e,t):i.slideTo(i.activeIndex+d,s,e,t)}function Gt(s,e,t){e===void 0&&(e=!0);let i=this,{params:a,snapGrid:r,slidesGrid:l,rtlTranslate:n,enabled:d,animating:o}=i;if(!d||i.destroyed)return i;typeof s==\"undefined\"&&(s=i.params.speed);let u=i.virtual&&a.virtual.enabled;if(a.loop){if(o&&!u&&a.loopPreventsSliding)return!1;i.loopFix({direction:\"prev\"}),i._clientLeft=i.wrapperEl.clientLeft}let p=n?i.translate:-i.translate;function g(c){return c<0?-Math.floor(Math.abs(c)):Math.floor(c)}let y=g(p),m=r.map(c=>g(c)),h=a.freeMode&&a.freeMode.enabled,x=r[m.indexOf(y)-1];if(typeof x==\"undefined\"&&(a.cssMode||h)){let c;r.forEach((f,v)=>{y>=f&&(c=v)}),typeof c!=\"undefined\"&&(x=h?r[c]:r[c>0?c-1:c])}let b=0;if(typeof x!=\"undefined\"&&(b=l.indexOf(x),b<0&&(b=i.activeIndex-1),a.slidesPerView===\"auto\"&&a.slidesPerGroup===1&&a.slidesPerGroupAuto&&(b=b-i.slidesPerViewDynamic(\"previous\",!0)+1,b=Math.max(b,0))),a.rewind&&i.isBeginning){let c=i.params.virtual&&i.params.virtual.enabled&&i.virtual?i.virtual.slides.length-1:i.slides.length-1;return i.slideTo(c,s,e,t)}else if(a.loop&&i.activeIndex===0&&a.cssMode)return requestAnimationFrame(()=>{i.slideTo(b,s,e,t)}),!0;return i.slideTo(b,s,e,t)}function Ht(s,e,t){e===void 0&&(e=!0);let i=this;if(!i.destroyed)return typeof s==\"undefined\"&&(s=i.params.speed),i.slideTo(i.activeIndex,s,e,t)}function Bt(s,e,t,i){e===void 0&&(e=!0),i===void 0&&(i=.5);let a=this;if(a.destroyed)return;typeof s==\"undefined\"&&(s=a.params.speed);let r=a.activeIndex,l=Math.min(a.params.slidesPerGroupSkip,r),n=l+Math.floor((r-l)\/a.params.slidesPerGroup),d=a.rtlTranslate?a.translate:-a.translate;if(d>=a.snapGrid[n]){let o=a.snapGrid[n],u=a.snapGrid[n+1];d-o>(u-o)*i&&(r+=a.params.slidesPerGroup)}else{let o=a.snapGrid[n-1],u=a.snapGrid[n];d-o<=(u-o)*i&&(r-=a.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,a.slidesGrid.length-1),a.slideTo(r,s,e,t)}function Xt(){let s=this;if(s.destroyed)return;let{params:e,slidesEl:t}=s,i=e.slidesPerView===\"auto\"?s.slidesPerViewDynamic():e.slidesPerView,a=s.getSlideIndexWhenGrid(s.clickedIndex),r,l=s.isElement?\"swiper-slide\":`.${e.slideClass}`,n=s.grid&&s.params.grid&&s.params.grid.rows>1;if(e.loop){if(s.animating)return;r=parseInt(s.clickedSlide.getAttribute(\"data-swiper-slide-index\"),10),e.centeredSlides?s.slideToLoop(r):a>(n?(s.slides.length-i)\/2-(s.params.grid.rows-1):s.slides.length-i)?(s.loopFix(),a=s.getSlideIndex(R(t,`${l}[data-swiper-slide-index=\"${r}\"]`)[0]),J(()=>{s.slideTo(a)})):s.slideTo(a)}else s.slideTo(a)}var Rt={slideTo:Dt,slideToLoop:$t,slideNext:kt,slidePrev:Gt,slideReset:Ht,slideToClosest:Bt,slideToClickedSlide:Xt};function Yt(s,e){let t=this,{params:i,slidesEl:a}=t;if(!i.loop||t.virtual&&t.params.virtual.enabled)return;let r=()=>{R(a,`.${i.slideClass}, swiper-slide`).forEach((y,m)=>{y.setAttribute(\"data-swiper-slide-index\",m)})},l=()=>{let g=R(a,`.${i.slideBlankClass}`);g.forEach(y=>{y.remove()}),g.length>0&&(t.recalcSlides(),t.updateSlides())},n=t.grid&&i.grid&&i.grid.rows>1;i.loopAddBlankSlides&&(i.slidesPerGroup>1||n)&&l();let d=i.slidesPerGroup*(n?i.grid.rows:1),o=t.slides.length%d!==0,u=n&&t.slides.length%i.grid.rows!==0,p=g=>{for(let y=0;y<g;y+=1){let m=t.isElement?V(\"swiper-slide\",[i.slideBlankClass]):V(\"div\",[i.slideClass,i.slideBlankClass]);t.slidesEl.append(m)}};if(o){if(i.loopAddBlankSlides){let g=d-t.slides.length%d;p(g),t.recalcSlides(),t.updateSlides()}else re(\"Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)\");r()}else if(u){if(i.loopAddBlankSlides){let g=i.grid.rows-t.slides.length%i.grid.rows;p(g),t.recalcSlides(),t.updateSlides()}else re(\"Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)\");r()}else r();t.loopFix({slideRealIndex:s,direction:i.centeredSlides?void 0:\"next\",initial:e})}function Vt(s){let{slideRealIndex:e,slideTo:t=!0,direction:i,setTranslate:a,activeSlideIndex:r,initial:l,byController:n,byMousewheel:d}=s===void 0?{}:s,o=this;if(!o.params.loop)return;o.emit(\"beforeLoopFix\");let{slides:u,allowSlidePrev:p,allowSlideNext:g,slidesEl:y,params:m}=o,{centeredSlides:h,initialSlide:x}=m;if(o.allowSlidePrev=!0,o.allowSlideNext=!0,o.virtual&&m.virtual.enabled){t&&(!m.centeredSlides&&o.snapIndex===0?o.slideTo(o.virtual.slides.length,0,!1,!0):m.centeredSlides&&o.snapIndex<m.slidesPerView?o.slideTo(o.virtual.slides.length+o.snapIndex,0,!1,!0):o.snapIndex===o.snapGrid.length-1&&o.slideTo(o.virtual.slidesBefore,0,!1,!0)),o.allowSlidePrev=p,o.allowSlideNext=g,o.emit(\"loopFix\");return}let b=m.slidesPerView;b===\"auto\"?b=o.slidesPerViewDynamic():(b=Math.ceil(parseFloat(m.slidesPerView,10)),h&&b%2===0&&(b=b+1));let c=m.slidesPerGroupAuto?b:m.slidesPerGroup,f=h?Math.max(c,Math.ceil(b\/2)):c;f%c!==0&&(f+=c-f%c),f+=m.loopAdditionalSlides,o.loopedSlides=f;let v=o.grid&&m.grid&&m.grid.rows>1;u.length<b+f||o.params.effect===\"cards\"&&u.length<b+f*2?re(\"Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters\"):v&&m.grid.fill===\"row\"&&re(\"Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`\");let S=[],C=[],I=v?Math.ceil(u.length\/m.grid.rows):u.length,P=l&&I-x<b&&!h,L=P?x:o.activeIndex;typeof r==\"undefined\"?r=o.getSlideIndex(u.find(z=>z.classList.contains(m.slideActiveClass))):L=r;let T=i===\"next\"||!i,M=i===\"prev\"||!i,A=0,O=0,G=(v?u[r].column:r)+(h&&typeof a==\"undefined\"?-b\/2+.5:0);if(G<f){A=Math.max(f-G,c);for(let z=0;z<f-G;z+=1){let w=z-Math.floor(z\/I)*I;if(v){let E=I-w-1;for(let $=u.length-1;$>=0;$-=1)u[$].column===E&&S.push($)}else S.push(I-w-1)}}else if(G+b>I-f){O=Math.max(G-(I-f*2),c),P&&(O=Math.max(O,b-I+x+1));for(let z=0;z<O;z+=1){let w=z-Math.floor(z\/I)*I;v?u.forEach((E,$)=>{E.column===w&&C.push($)}):C.push(w)}}if(o.__preventObserver__=!0,requestAnimationFrame(()=>{o.__preventObserver__=!1}),o.params.effect===\"cards\"&&u.length<b+f*2&&(C.includes(r)&&C.splice(C.indexOf(r),1),S.includes(r)&&S.splice(S.indexOf(r),1)),M&&S.forEach(z=>{u[z].swiperLoopMoveDOM=!0,y.prepend(u[z]),u[z].swiperLoopMoveDOM=!1}),T&&C.forEach(z=>{u[z].swiperLoopMoveDOM=!0,y.append(u[z]),u[z].swiperLoopMoveDOM=!1}),o.recalcSlides(),m.slidesPerView===\"auto\"?o.updateSlides():v&&(S.length>0&&M||C.length>0&&T)&&o.slides.forEach((z,w)=>{o.grid.updateSlide(w,z,o.slides)}),m.watchSlidesProgress&&o.updateSlidesOffset(),t){if(S.length>0&&M){if(typeof e==\"undefined\"){let z=o.slidesGrid[L],E=o.slidesGrid[L+A]-z;d?o.setTranslate(o.translate-E):(o.slideTo(L+Math.ceil(A),0,!1,!0),a&&(o.touchEventsData.startTranslate=o.touchEventsData.startTranslate-E,o.touchEventsData.currentTranslate=o.touchEventsData.currentTranslate-E))}else if(a){let z=v?S.length\/m.grid.rows:S.length;o.slideTo(o.activeIndex+z,0,!1,!0),o.touchEventsData.currentTranslate=o.translate}}else if(C.length>0&&T)if(typeof e==\"undefined\"){let z=o.slidesGrid[L],E=o.slidesGrid[L-O]-z;d?o.setTranslate(o.translate-E):(o.slideTo(L-O,0,!1,!0),a&&(o.touchEventsData.startTranslate=o.touchEventsData.startTranslate-E,o.touchEventsData.currentTranslate=o.touchEventsData.currentTranslate-E))}else{let z=v?C.length\/m.grid.rows:C.length;o.slideTo(o.activeIndex-z,0,!1,!0)}}if(o.allowSlidePrev=p,o.allowSlideNext=g,o.controller&&o.controller.control&&!n){let z={slideRealIndex:e,direction:i,setTranslate:a,activeSlideIndex:r,byController:!0};Array.isArray(o.controller.control)?o.controller.control.forEach(w=>{!w.destroyed&&w.params.loop&&w.loopFix({...z,slideTo:w.params.slidesPerView===m.slidesPerView?t:!1})}):o.controller.control instanceof o.constructor&&o.controller.control.params.loop&&o.controller.control.loopFix({...z,slideTo:o.controller.control.params.slidesPerView===m.slidesPerView?t:!1})}o.emit(\"loopFix\")}function Nt(){let s=this,{params:e,slidesEl:t}=s;if(!e.loop||!t||s.virtual&&s.params.virtual.enabled)return;s.recalcSlides();let i=[];s.slides.forEach(a=>{let r=typeof a.swiperSlideIndex==\"undefined\"?a.getAttribute(\"data-swiper-slide-index\")*1:a.swiperSlideIndex;i[r]=a}),s.slides.forEach(a=>{a.removeAttribute(\"data-swiper-slide-index\")}),i.forEach(a=>{t.append(a)}),s.recalcSlides(),s.slideTo(s.realIndex,0)}var Ft={loopCreate:Yt,loopFix:Vt,loopDestroy:Nt};function Wt(s){let e=this;if(!e.params.simulateTouch||e.params.watchOverflow&&e.isLocked||e.params.cssMode)return;let t=e.params.touchEventsTarget===\"container\"?e.el:e.wrapperEl;e.isElement&&(e.__preventObserver__=!0),t.style.cursor=\"move\",t.style.cursor=s?\"grabbing\":\"grab\",e.isElement&&requestAnimationFrame(()=>{e.__preventObserver__=!1})}function _t(){let s=this;s.params.watchOverflow&&s.isLocked||s.params.cssMode||(s.isElement&&(s.__preventObserver__=!0),s[s.params.touchEventsTarget===\"container\"?\"el\":\"wrapperEl\"].style.cursor=\"\",s.isElement&&requestAnimationFrame(()=>{s.__preventObserver__=!1}))}var qt={setGrabCursor:Wt,unsetGrabCursor:_t};function jt(s,e){e===void 0&&(e=this);function t(i){if(!i||i===B()||i===H())return null;i.assignedSlot&&(i=i.assignedSlot);let a=i.closest(s);return!a&&!i.getRootNode?null:a||t(i.getRootNode().host)}return t(e)}function Xe(s,e,t){let i=H(),{params:a}=s,r=a.edgeSwipeDetection,l=a.edgeSwipeThreshold;return r&&(t<=l||t>=i.innerWidth-l)?r===\"prevent\"?(e.preventDefault(),!0):!1:!0}function Ut(s){let e=this,t=B(),i=s;i.originalEvent&&(i=i.originalEvent);let a=e.touchEventsData;if(i.type===\"pointerdown\"){if(a.pointerId!==null&&a.pointerId!==i.pointerId)return;a.pointerId=i.pointerId}else i.type===\"touchstart\"&&i.targetTouches.length===1&&(a.touchId=i.targetTouches[0].identifier);if(i.type===\"touchstart\"){Xe(e,i,i.targetTouches[0].pageX);return}let{params:r,touches:l,enabled:n}=e;if(!n||!r.simulateTouch&&i.pointerType===\"mouse\"||e.animating&&r.preventInteractionOnTransition)return;!e.animating&&r.cssMode&&r.loop&&e.loopFix();let d=i.target;if(r.touchEventsTarget===\"wrapper\"&&!ke(d,e.wrapperEl)||\"which\"in i&&i.which===3||\"button\"in i&&i.button>0||a.isTouched&&a.isMoved)return;let o=!!r.noSwipingClass&&r.noSwipingClass!==\"\",u=i.composedPath?i.composedPath():i.path;o&&i.target&&i.target.shadowRoot&&u&&(d=u[0]);let p=r.noSwipingSelector?r.noSwipingSelector:`.${r.noSwipingClass}`,g=!!(i.target&&i.target.shadowRoot);if(r.noSwiping&&(g?jt(p,d):d.closest(p))){e.allowClick=!0;return}if(r.swipeHandler&&!d.closest(r.swipeHandler))return;l.currentX=i.pageX,l.currentY=i.pageY;let y=l.currentX,m=l.currentY;if(!Xe(e,i,y))return;Object.assign(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),l.startX=y,l.startY=m,a.touchStartTime=K(),e.allowClick=!0,e.updateSize(),e.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1);let h=!0;d.matches(a.focusableElements)&&(h=!1,d.nodeName===\"SELECT\"&&(a.isTouched=!1)),t.activeElement&&t.activeElement.matches(a.focusableElements)&&t.activeElement!==d&&(i.pointerType===\"mouse\"||i.pointerType!==\"mouse\"&&!d.matches(a.focusableElements))&&t.activeElement.blur();let x=h&&e.allowTouchMove&&r.touchStartPreventDefault;(r.touchStartForcePreventDefault||x)&&!d.isContentEditable&&i.preventDefault(),r.freeMode&&r.freeMode.enabled&&e.freeMode&&e.animating&&!r.cssMode&&e.freeMode.onTouchStart(),e.emit(\"touchStart\",i)}function Kt(s){let e=B(),t=this,i=t.touchEventsData,{params:a,touches:r,rtlTranslate:l,enabled:n}=t;if(!n||!a.simulateTouch&&s.pointerType===\"mouse\")return;let d=s;if(d.originalEvent&&(d=d.originalEvent),d.type===\"pointermove\"&&(i.touchId!==null||d.pointerId!==i.pointerId))return;let o;if(d.type===\"touchmove\"){if(o=[...d.changedTouches].find(C=>C.identifier===i.touchId),!o||o.identifier!==i.touchId)return}else o=d;if(!i.isTouched){i.startMoving&&i.isScrolling&&t.emit(\"touchMoveOpposite\",d);return}let u=o.pageX,p=o.pageY;if(d.preventedByNestedSwiper){r.startX=u,r.startY=p;return}if(!t.allowTouchMove){d.target.matches(i.focusableElements)||(t.allowClick=!1),i.isTouched&&(Object.assign(r,{startX:u,startY:p,currentX:u,currentY:p}),i.touchStartTime=K());return}if(a.touchReleaseOnEdges&&!a.loop)if(t.isVertical()){if(p<r.startY&&t.translate<=t.maxTranslate()||p>r.startY&&t.translate>=t.minTranslate()){i.isTouched=!1,i.isMoved=!1;return}}else{if(l&&(u>r.startX&&-t.translate<=t.maxTranslate()||u<r.startX&&-t.translate>=t.minTranslate()))return;if(!l&&(u<r.startX&&t.translate<=t.maxTranslate()||u>r.startX&&t.translate>=t.minTranslate()))return}if(e.activeElement&&e.activeElement.matches(i.focusableElements)&&e.activeElement!==d.target&&d.pointerType!==\"mouse\"&&e.activeElement.blur(),e.activeElement&&d.target===e.activeElement&&d.target.matches(i.focusableElements)){i.isMoved=!0,t.allowClick=!1;return}i.allowTouchCallbacks&&t.emit(\"touchMove\",d),r.previousX=r.currentX,r.previousY=r.currentY,r.currentX=u,r.currentY=p;let g=r.currentX-r.startX,y=r.currentY-r.startY;if(t.params.threshold&&Math.sqrt(g**2+y**2)<t.params.threshold)return;if(typeof i.isScrolling==\"undefined\"){let C;t.isHorizontal()&&r.currentY===r.startY||t.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:g*g+y*y>=25&&(C=Math.atan2(Math.abs(y),Math.abs(g))*180\/Math.PI,i.isScrolling=t.isHorizontal()?C>a.touchAngle:90-C>a.touchAngle)}if(i.isScrolling&&t.emit(\"touchMoveOpposite\",d),typeof i.startMoving==\"undefined\"&&(r.currentX!==r.startX||r.currentY!==r.startY)&&(i.startMoving=!0),i.isScrolling||d.type===\"touchmove\"&&i.preventTouchMoveFromPointerMove){i.isTouched=!1;return}if(!i.startMoving)return;t.allowClick=!1,!a.cssMode&&d.cancelable&&d.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&d.stopPropagation();let m=t.isHorizontal()?g:y,h=t.isHorizontal()?r.currentX-r.previousX:r.currentY-r.previousY;a.oneWayMovement&&(m=Math.abs(m)*(l?1:-1),h=Math.abs(h)*(l?1:-1)),r.diff=m,m*=a.touchRatio,l&&(m=-m,h=-h);let x=t.touchesDirection;t.swipeDirection=m>0?\"prev\":\"next\",t.touchesDirection=h>0?\"prev\":\"next\";let b=t.params.loop&&!a.cssMode,c=t.touchesDirection===\"next\"&&t.allowSlideNext||t.touchesDirection===\"prev\"&&t.allowSlidePrev;if(!i.isMoved){if(b&&c&&t.loopFix({direction:t.swipeDirection}),i.startTranslate=t.getTranslate(),t.setTransition(0),t.animating){let C=new window.CustomEvent(\"transitionend\",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});t.wrapperEl.dispatchEvent(C)}i.allowMomentumBounce=!1,a.grabCursor&&(t.allowSlideNext===!0||t.allowSlidePrev===!0)&&t.setGrabCursor(!0),t.emit(\"sliderFirstMove\",d)}let f;if(new Date().getTime(),a._loopSwapReset!==!1&&i.isMoved&&i.allowThresholdMove&&x!==t.touchesDirection&&b&&c&&Math.abs(m)>=1){Object.assign(r,{startX:u,startY:p,currentX:u,currentY:p,startTranslate:i.currentTranslate}),i.loopSwapReset=!0,i.startTranslate=i.currentTranslate;return}t.emit(\"sliderMove\",d),i.isMoved=!0,i.currentTranslate=m+i.startTranslate;let v=!0,S=a.resistanceRatio;if(a.touchReleaseOnEdges&&(S=0),m>0?(b&&c&&!f&&i.allowThresholdMove&&i.currentTranslate>(a.centeredSlides?t.minTranslate()-t.slidesSizesGrid[t.activeIndex+1]-(a.slidesPerView!==\"auto\"&&t.slides.length-a.slidesPerView>=2?t.slidesSizesGrid[t.activeIndex+1]+t.params.spaceBetween:0)-t.params.spaceBetween:t.minTranslate())&&t.loopFix({direction:\"prev\",setTranslate:!0,activeSlideIndex:0}),i.currentTranslate>t.minTranslate()&&(v=!1,a.resistance&&(i.currentTranslate=t.minTranslate()-1+(-t.minTranslate()+i.startTranslate+m)**S))):m<0&&(b&&c&&!f&&i.allowThresholdMove&&i.currentTranslate<(a.centeredSlides?t.maxTranslate()+t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween+(a.slidesPerView!==\"auto\"&&t.slides.length-a.slidesPerView>=2?t.slidesSizesGrid[t.slidesSizesGrid.length-1]+t.params.spaceBetween:0):t.maxTranslate())&&t.loopFix({direction:\"next\",setTranslate:!0,activeSlideIndex:t.slides.length-(a.slidesPerView===\"auto\"?t.slidesPerViewDynamic():Math.ceil(parseFloat(a.slidesPerView,10)))}),i.currentTranslate<t.maxTranslate()&&(v=!1,a.resistance&&(i.currentTranslate=t.maxTranslate()+1-(t.maxTranslate()-i.startTranslate-m)**S))),v&&(d.preventedByNestedSwiper=!0),!t.allowSlideNext&&t.swipeDirection===\"next\"&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!t.allowSlidePrev&&t.swipeDirection===\"prev\"&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),!t.allowSlidePrev&&!t.allowSlideNext&&(i.currentTranslate=i.startTranslate),a.threshold>0)if(Math.abs(m)>a.threshold||i.allowThresholdMove){if(!i.allowThresholdMove){i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,r.diff=t.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY;return}}else{i.currentTranslate=i.startTranslate;return}!a.followFinger||a.cssMode||((a.freeMode&&a.freeMode.enabled&&t.freeMode||a.watchSlidesProgress)&&(t.updateActiveIndex(),t.updateSlidesClasses()),a.freeMode&&a.freeMode.enabled&&t.freeMode&&t.freeMode.onTouchMove(),t.updateProgress(i.currentTranslate),t.setTranslate(i.currentTranslate))}function Zt(s){let e=this,t=e.touchEventsData,i=s;i.originalEvent&&(i=i.originalEvent);let a;if(i.type===\"touchend\"||i.type===\"touchcancel\"){if(a=[...i.changedTouches].find(S=>S.identifier===t.touchId),!a||a.identifier!==t.touchId)return}else{if(t.touchId!==null||i.pointerId!==t.pointerId)return;a=i}if([\"pointercancel\",\"pointerout\",\"pointerleave\",\"contextmenu\"].includes(i.type)&&!([\"pointercancel\",\"contextmenu\"].includes(i.type)&&(e.browser.isSafari||e.browser.isWebView)))return;t.pointerId=null,t.touchId=null;let{params:l,touches:n,rtlTranslate:d,slidesGrid:o,enabled:u}=e;if(!u||!l.simulateTouch&&i.pointerType===\"mouse\")return;if(t.allowTouchCallbacks&&e.emit(\"touchEnd\",i),t.allowTouchCallbacks=!1,!t.isTouched){t.isMoved&&l.grabCursor&&e.setGrabCursor(!1),t.isMoved=!1,t.startMoving=!1;return}l.grabCursor&&t.isMoved&&t.isTouched&&(e.allowSlideNext===!0||e.allowSlidePrev===!0)&&e.setGrabCursor(!1);let p=K(),g=p-t.touchStartTime;if(e.allowClick){let S=i.path||i.composedPath&&i.composedPath();e.updateClickedSlide(S&&S[0]||i.target,S),e.emit(\"tap click\",i),g<300&&p-t.lastClickTime<300&&e.emit(\"doubleTap doubleClick\",i)}if(t.lastClickTime=K(),J(()=>{e.destroyed||(e.allowClick=!0)}),!t.isTouched||!t.isMoved||!e.swipeDirection||n.diff===0&&!t.loopSwapReset||t.currentTranslate===t.startTranslate&&!t.loopSwapReset){t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;return}t.isTouched=!1,t.isMoved=!1,t.startMoving=!1;let y;if(l.followFinger?y=d?e.translate:-e.translate:y=-t.currentTranslate,l.cssMode)return;if(l.freeMode&&l.freeMode.enabled){e.freeMode.onTouchEnd({currentPos:y});return}let m=y>=-e.maxTranslate()&&!e.params.loop,h=0,x=e.slidesSizesGrid[0];for(let S=0;S<o.length;S+=S<l.slidesPerGroupSkip?1:l.slidesPerGroup){let C=S<l.slidesPerGroupSkip-1?1:l.slidesPerGroup;typeof o[S+C]!=\"undefined\"?(m||y>=o[S]&&y<o[S+C])&&(h=S,x=o[S+C]-o[S]):(m||y>=o[S])&&(h=S,x=o[o.length-1]-o[o.length-2])}let b=null,c=null;l.rewind&&(e.isBeginning?c=l.virtual&&l.virtual.enabled&&e.virtual?e.virtual.slides.length-1:e.slides.length-1:e.isEnd&&(b=0));let f=(y-o[h])\/x,v=h<l.slidesPerGroupSkip-1?1:l.slidesPerGroup;if(g>l.longSwipesMs){if(!l.longSwipes){e.slideTo(e.activeIndex);return}e.swipeDirection===\"next\"&&(f>=l.longSwipesRatio?e.slideTo(l.rewind&&e.isEnd?b:h+v):e.slideTo(h)),e.swipeDirection===\"prev\"&&(f>1-l.longSwipesRatio?e.slideTo(h+v):c!==null&&f<0&&Math.abs(f)>l.longSwipesRatio?e.slideTo(c):e.slideTo(h))}else{if(!l.shortSwipes){e.slideTo(e.activeIndex);return}e.navigation&&(i.target===e.navigation.nextEl||i.target===e.navigation.prevEl)?i.target===e.navigation.nextEl?e.slideTo(h+v):e.slideTo(h):(e.swipeDirection===\"next\"&&e.slideTo(b!==null?b:h+v),e.swipeDirection===\"prev\"&&e.slideTo(c!==null?c:h))}}function Re(){let s=this,{params:e,el:t}=s;if(t&&t.offsetWidth===0)return;e.breakpoints&&s.setBreakpoint();let{allowSlideNext:i,allowSlidePrev:a,snapGrid:r}=s,l=s.virtual&&s.params.virtual.enabled;s.allowSlideNext=!0,s.allowSlidePrev=!0,s.updateSize(),s.updateSlides(),s.updateSlidesClasses();let n=l&&e.loop;(e.slidesPerView===\"auto\"||e.slidesPerView>1)&&s.isEnd&&!s.isBeginning&&!s.params.centeredSlides&&!n?s.slideTo(s.slides.length-1,0,!1,!0):s.params.loop&&!l?s.slideToLoop(s.realIndex,0,!1,!0):s.slideTo(s.activeIndex,0,!1,!0),s.autoplay&&s.autoplay.running&&s.autoplay.paused&&(clearTimeout(s.autoplay.resizeTimeout),s.autoplay.resizeTimeout=setTimeout(()=>{s.autoplay&&s.autoplay.running&&s.autoplay.paused&&s.autoplay.resume()},500)),s.allowSlidePrev=a,s.allowSlideNext=i,s.params.watchOverflow&&r!==s.snapGrid&&s.checkOverflow()}function Qt(s){let e=this;e.enabled&&(e.allowClick||(e.params.preventClicks&&s.preventDefault(),e.params.preventClicksPropagation&&e.animating&&(s.stopPropagation(),s.stopImmediatePropagation())))}function Jt(){let s=this,{wrapperEl:e,rtlTranslate:t,enabled:i}=s;if(!i)return;s.previousTranslate=s.translate,s.isHorizontal()?s.translate=-e.scrollLeft:s.translate=-e.scrollTop,s.translate===0&&(s.translate=0),s.updateActiveIndex(),s.updateSlidesClasses();let a,r=s.maxTranslate()-s.minTranslate();r===0?a=0:a=(s.translate-s.minTranslate())\/r,a!==s.progress&&s.updateProgress(t?-s.translate:s.translate),s.emit(\"setTranslate\",s.translate,!1)}function es(s){let e=this;fe(e,s.target),!(e.params.cssMode||e.params.slidesPerView!==\"auto\"&&!e.params.autoHeight)&&e.update()}function ts(){let s=this;s.documentTouchHandlerProceeded||(s.documentTouchHandlerProceeded=!0,s.params.touchReleaseOnEdges&&(s.el.style.touchAction=\"auto\"))}var qe=(s,e)=>{let t=B(),{params:i,el:a,wrapperEl:r,device:l}=s,n=!!i.nested,d=e===\"on\"?\"addEventListener\":\"removeEventListener\",o=e;!a||typeof a==\"string\"||(t[d](\"touchstart\",s.onDocumentTouchStart,{passive:!1,capture:n}),a[d](\"touchstart\",s.onTouchStart,{passive:!1}),a[d](\"pointerdown\",s.onTouchStart,{passive:!1}),t[d](\"touchmove\",s.onTouchMove,{passive:!1,capture:n}),t[d](\"pointermove\",s.onTouchMove,{passive:!1,capture:n}),t[d](\"touchend\",s.onTouchEnd,{passive:!0}),t[d](\"pointerup\",s.onTouchEnd,{passive:!0}),t[d](\"pointercancel\",s.onTouchEnd,{passive:!0}),t[d](\"touchcancel\",s.onTouchEnd,{passive:!0}),t[d](\"pointerout\",s.onTouchEnd,{passive:!0}),t[d](\"pointerleave\",s.onTouchEnd,{passive:!0}),t[d](\"contextmenu\",s.onTouchEnd,{passive:!0}),(i.preventClicks||i.preventClicksPropagation)&&a[d](\"click\",s.onClick,!0),i.cssMode&&r[d](\"scroll\",s.onScroll),i.updateOnWindowResize?s[o](l.ios||l.android?\"resize orientationchange observerUpdate\":\"resize observerUpdate\",Re,!0):s[o](\"observerUpdate\",Re,!0),a[d](\"load\",s.onLoad,{capture:!0}))};function ss(){let s=this,{params:e}=s;s.onTouchStart=Ut.bind(s),s.onTouchMove=Kt.bind(s),s.onTouchEnd=Zt.bind(s),s.onDocumentTouchStart=ts.bind(s),e.cssMode&&(s.onScroll=Jt.bind(s)),s.onClick=Qt.bind(s),s.onLoad=es.bind(s),qe(s,\"on\")}function is(){qe(this,\"off\")}var rs={attachEvents:ss,detachEvents:is},Ye=(s,e)=>s.grid&&e.grid&&e.grid.rows>1;function as(){let s=this,{realIndex:e,initialized:t,params:i,el:a}=s,r=i.breakpoints;if(!r||r&&Object.keys(r).length===0)return;let l=B(),n=i.breakpointsBase===\"window\"||!i.breakpointsBase?i.breakpointsBase:\"container\",d=[\"window\",\"container\"].includes(i.breakpointsBase)||!i.breakpointsBase?s.el:l.querySelector(i.breakpointsBase),o=s.getBreakpoint(r,n,d);if(!o||s.currentBreakpoint===o)return;let p=(o in r?r[o]:void 0)||s.originalParams,g=Ye(s,i),y=Ye(s,p),m=s.params.grabCursor,h=p.grabCursor,x=i.enabled;g&&!y?(a.classList.remove(`${i.containerModifierClass}grid`,`${i.containerModifierClass}grid-column`),s.emitContainerClasses()):!g&&y&&(a.classList.add(`${i.containerModifierClass}grid`),(p.grid.fill&&p.grid.fill===\"column\"||!p.grid.fill&&i.grid.fill===\"column\")&&a.classList.add(`${i.containerModifierClass}grid-column`),s.emitContainerClasses()),m&&!h?s.unsetGrabCursor():!m&&h&&s.setGrabCursor(),[\"navigation\",\"pagination\",\"scrollbar\"].forEach(C=>{if(typeof p[C]==\"undefined\")return;let I=i[C]&&i[C].enabled,P=p[C]&&p[C].enabled;I&&!P&&s[C].disable(),!I&&P&&s[C].enable()});let b=p.direction&&p.direction!==i.direction,c=i.loop&&(p.slidesPerView!==i.slidesPerView||b),f=i.loop;b&&t&&s.changeDirection(),Y(s.params,p);let v=s.params.enabled,S=s.params.loop;Object.assign(s,{allowTouchMove:s.params.allowTouchMove,allowSlideNext:s.params.allowSlideNext,allowSlidePrev:s.params.allowSlidePrev}),x&&!v?s.disable():!x&&v&&s.enable(),s.currentBreakpoint=o,s.emit(\"_beforeBreakpoint\",p),t&&(c?(s.loopDestroy(),s.loopCreate(e),s.updateSlides()):!f&&S?(s.loopCreate(e),s.updateSlides()):f&&!S&&s.loopDestroy()),s.emit(\"breakpoint\",p)}function ns(s,e,t){if(e===void 0&&(e=\"window\"),!s||e===\"container\"&&!t)return;let i=!1,a=H(),r=e===\"window\"?a.innerHeight:t.clientHeight,l=Object.keys(s).map(n=>{if(typeof n==\"string\"&&n.indexOf(\"@\")===0){let d=parseFloat(n.substr(1));return{value:r*d,point:n}}return{value:n,point:n}});l.sort((n,d)=>parseInt(n.value,10)-parseInt(d.value,10));for(let n=0;n<l.length;n+=1){let{point:d,value:o}=l[n];e===\"window\"?a.matchMedia(`(min-width: ${o}px)`).matches&&(i=d):o<=t.clientWidth&&(i=d)}return i||\"max\"}var ls={setBreakpoint:as,getBreakpoint:ns};function os(s,e){let t=[];return s.forEach(i=>{typeof i==\"object\"?Object.keys(i).forEach(a=>{i[a]&&t.push(e+a)}):typeof i==\"string\"&&t.push(e+i)}),t}function ds(){let s=this,{classNames:e,params:t,rtl:i,el:a,device:r}=s,l=os([\"initialized\",t.direction,{\"free-mode\":s.params.freeMode&&t.freeMode.enabled},{autoheight:t.autoHeight},{rtl:i},{grid:t.grid&&t.grid.rows>1},{\"grid-column\":t.grid&&t.grid.rows>1&&t.grid.fill===\"column\"},{android:r.android},{ios:r.ios},{\"css-mode\":t.cssMode},{centered:t.cssMode&&t.centeredSlides},{\"watch-progress\":t.watchSlidesProgress}],t.containerModifierClass);e.push(...l),a.classList.add(...e),s.emitContainerClasses()}function cs(){let s=this,{el:e,classNames:t}=s;!e||typeof e==\"string\"||(e.classList.remove(...t),s.emitContainerClasses())}var fs={addClasses:ds,removeClasses:cs};function us(){let s=this,{isLocked:e,params:t}=s,{slidesOffsetBefore:i}=t;if(i){let a=s.slides.length-1,r=s.slidesGrid[a]+s.slidesSizesGrid[a]+i*2;s.isLocked=s.size>r}else s.isLocked=s.snapGrid.length===1;t.allowSlideNext===!0&&(s.allowSlideNext=!s.isLocked),t.allowSlidePrev===!0&&(s.allowSlidePrev=!s.isLocked),e&&e!==s.isLocked&&(s.isEnd=!1),e!==s.isLocked&&s.emit(s.isLocked?\"lock\":\"unlock\")}var ps={checkOverflow:us},Ve={init:!0,direction:\"horizontal\",oneWayMovement:!1,swiperElementNodeName:\"SWIPER-CONTAINER\",touchEventsTarget:\"wrapper\",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:\"swiper\",enabled:!0,focusableElements:\"input, select, option, textarea, button, video, label\",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:\"slide\",breakpoints:void 0,breakpointsBase:\"window\",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:\"swiper-no-swiping\",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:\"swiper-\",slideClass:\"swiper-slide\",slideBlankClass:\"swiper-slide-blank\",slideActiveClass:\"swiper-slide-active\",slideVisibleClass:\"swiper-slide-visible\",slideFullyVisibleClass:\"swiper-slide-fully-visible\",slideNextClass:\"swiper-slide-next\",slidePrevClass:\"swiper-slide-prev\",wrapperClass:\"swiper-wrapper\",lazyPreloaderClass:\"swiper-lazy-preloader\",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function ms(s,e){return function(i){i===void 0&&(i={});let a=Object.keys(i)[0],r=i[a];if(typeof r!=\"object\"||r===null){Y(e,i);return}if(s[a]===!0&&(s[a]={enabled:!0}),a===\"navigation\"&&s[a]&&s[a].enabled&&!s[a].prevEl&&!s[a].nextEl&&(s[a].auto=!0),[\"pagination\",\"scrollbar\"].indexOf(a)>=0&&s[a]&&s[a].enabled&&!s[a].el&&(s[a].auto=!0),!(a in s&&\"enabled\"in r)){Y(e,i);return}typeof s[a]==\"object\"&&!(\"enabled\"in s[a])&&(s[a].enabled=!0),s[a]||(s[a]={enabled:!1}),Y(e,i)}}var Se={eventsEmitter:ft,update:xt,translate:Lt,transition:Ot,slide:Rt,loop:Ft,grabCursor:qt,events:rs,breakpoints:ls,checkOverflow:ps,classes:fs},xe={},_=class s{constructor(){let e,t;for(var i=arguments.length,a=new Array(i),r=0;r<i;r++)a[r]=arguments[r];a.length===1&&a[0].constructor&&Object.prototype.toString.call(a[0]).slice(8,-1)===\"Object\"?t=a[0]:[e,t]=a,t||(t={}),t=Y({},t),e&&!t.el&&(t.el=e);let l=B();if(t.el&&typeof t.el==\"string\"&&l.querySelectorAll(t.el).length>1){let u=[];return l.querySelectorAll(t.el).forEach(p=>{let g=Y({},t,{el:p});u.push(new s(g))}),u}let n=this;n.__swiper__=!0,n.support=Ne(),n.device=Fe({userAgent:t.userAgent}),n.browser=We(),n.eventsListeners={},n.eventsAnyListeners=[],n.modules=[...n.__modules__],t.modules&&Array.isArray(t.modules)&&n.modules.push(...t.modules);let d={};n.modules.forEach(u=>{u({params:t,swiper:n,extendParams:ms(t,d),on:n.on.bind(n),once:n.once.bind(n),off:n.off.bind(n),emit:n.emit.bind(n)})});let o=Y({},Ve,d);return n.params=Y({},o,xe,t),n.originalParams=Y({},n.params),n.passedParams=Y({},t),n.params&&n.params.on&&Object.keys(n.params.on).forEach(u=>{n.on(u,n.params.on[u])}),n.params&&n.params.onAny&&n.onAny(n.params.onAny),Object.assign(n,{enabled:n.params.enabled,el:e,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return n.params.direction===\"horizontal\"},isVertical(){return n.params.direction===\"vertical\"},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate\/2**23)*2**23},allowSlideNext:n.params.allowSlideNext,allowSlidePrev:n.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:n.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:n.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),n.emit(\"_swiper\"),n.params.init&&n.init(),n}getDirectionLabel(e){return this.isHorizontal()?e:{width:\"height\",\"margin-top\":\"margin-left\",\"margin-bottom \":\"margin-right\",\"margin-left\":\"margin-top\",\"margin-right\":\"margin-bottom\",\"padding-left\":\"padding-top\",\"padding-right\":\"padding-bottom\",marginRight:\"marginBottom\"}[e]}getSlideIndex(e){let{slidesEl:t,params:i}=this,a=R(t,`.${i.slideClass}, swiper-slide`),r=U(a[0]);return U(e)-r}getSlideIndexByData(e){return this.getSlideIndex(this.slides.find(t=>t.getAttribute(\"data-swiper-slide-index\")*1===e))}getSlideIndexWhenGrid(e){return this.grid&&this.params.grid&&this.params.grid.rows>1&&(this.params.grid.fill===\"column\"?e=Math.floor(e\/this.params.grid.rows):this.params.grid.fill===\"row\"&&(e=e%Math.ceil(this.slides.length\/this.params.grid.rows))),e}recalcSlides(){let e=this,{slidesEl:t,params:i}=e;e.slides=R(t,`.${i.slideClass}, swiper-slide`)}enable(){let e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit(\"enable\"))}disable(){let e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit(\"disable\"))}setProgress(e,t){let i=this;e=Math.min(Math.max(e,0),1);let a=i.minTranslate(),l=(i.maxTranslate()-a)*e+a;i.translateTo(l,typeof t==\"undefined\"?0:t),i.updateActiveIndex(),i.updateSlidesClasses()}emitContainerClasses(){let e=this;if(!e.params._emitClasses||!e.el)return;let t=e.el.className.split(\" \").filter(i=>i.indexOf(\"swiper\")===0||i.indexOf(e.params.containerModifierClass)===0);e.emit(\"_containerClasses\",t.join(\" \"))}getSlideClasses(e){let t=this;return t.destroyed?\"\":e.className.split(\" \").filter(i=>i.indexOf(\"swiper-slide\")===0||i.indexOf(t.params.slideClass)===0).join(\" \")}emitSlidesClasses(){let e=this;if(!e.params._emitClasses||!e.el)return;let t=[];e.slides.forEach(i=>{let a=e.getSlideClasses(i);t.push({slideEl:i,classNames:a}),e.emit(\"_slideClass\",i,a)}),e.emit(\"_slideClasses\",t)}slidesPerViewDynamic(e,t){e===void 0&&(e=\"current\"),t===void 0&&(t=!1);let i=this,{params:a,slides:r,slidesGrid:l,slidesSizesGrid:n,size:d,activeIndex:o}=i,u=1;if(typeof a.slidesPerView==\"number\")return a.slidesPerView;if(a.centeredSlides){let p=r[o]?Math.ceil(r[o].swiperSlideSize):0,g;for(let y=o+1;y<r.length;y+=1)r[y]&&!g&&(p+=Math.ceil(r[y].swiperSlideSize),u+=1,p>d&&(g=!0));for(let y=o-1;y>=0;y-=1)r[y]&&!g&&(p+=r[y].swiperSlideSize,u+=1,p>d&&(g=!0))}else if(e===\"current\")for(let p=o+1;p<r.length;p+=1)(t?l[p]+n[p]-l[o]<d:l[p]-l[o]<d)&&(u+=1);else for(let p=o-1;p>=0;p-=1)l[o]-l[p]<d&&(u+=1);return u}update(){let e=this;if(!e||e.destroyed)return;let{snapGrid:t,params:i}=e;i.breakpoints&&e.setBreakpoint(),[...e.el.querySelectorAll('[loading=\"lazy\"]')].forEach(l=>{l.complete&&fe(e,l)}),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses();function a(){let l=e.rtlTranslate?e.translate*-1:e.translate,n=Math.min(Math.max(l,e.maxTranslate()),e.minTranslate());e.setTranslate(n),e.updateActiveIndex(),e.updateSlidesClasses()}let r;if(i.freeMode&&i.freeMode.enabled&&!i.cssMode)a(),i.autoHeight&&e.updateAutoHeight();else{if((i.slidesPerView===\"auto\"||i.slidesPerView>1)&&e.isEnd&&!i.centeredSlides){let l=e.virtual&&i.virtual.enabled?e.virtual.slides:e.slides;r=e.slideTo(l.length-1,0,!1,!0)}else r=e.slideTo(e.activeIndex,0,!1,!0);r||a()}i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit(\"update\")}changeDirection(e,t){t===void 0&&(t=!0);let i=this,a=i.params.direction;return e||(e=a===\"horizontal\"?\"vertical\":\"horizontal\"),e===a||e!==\"horizontal\"&&e!==\"vertical\"||(i.el.classList.remove(`${i.params.containerModifierClass}${a}`),i.el.classList.add(`${i.params.containerModifierClass}${e}`),i.emitContainerClasses(),i.params.direction=e,i.slides.forEach(r=>{e===\"vertical\"?r.style.width=\"\":r.style.height=\"\"}),i.emit(\"changeDirection\"),t&&i.update()),i}changeLanguageDirection(e){let t=this;t.rtl&&e===\"rtl\"||!t.rtl&&e===\"ltr\"||(t.rtl=e===\"rtl\",t.rtlTranslate=t.params.direction===\"horizontal\"&&t.rtl,t.rtl?(t.el.classList.add(`${t.params.containerModifierClass}rtl`),t.el.dir=\"rtl\"):(t.el.classList.remove(`${t.params.containerModifierClass}rtl`),t.el.dir=\"ltr\"),t.update())}mount(e){let t=this;if(t.mounted)return!0;let i=e||t.params.el;if(typeof i==\"string\"&&(i=document.querySelector(i)),!i)return!1;i.swiper=t,i.parentNode&&i.parentNode.host&&i.parentNode.host.nodeName===t.params.swiperElementNodeName.toUpperCase()&&(t.isElement=!0);let a=()=>`.${(t.params.wrapperClass||\"\").trim().split(\" \").join(\".\")}`,l=i&&i.shadowRoot&&i.shadowRoot.querySelector?i.shadowRoot.querySelector(a()):R(i,a())[0];return!l&&t.params.createElements&&(l=V(\"div\",t.params.wrapperClass),i.append(l),R(i,`.${t.params.slideClass}`).forEach(n=>{l.append(n)})),Object.assign(t,{el:i,wrapperEl:l,slidesEl:t.isElement&&!i.parentNode.host.slideSlots?i.parentNode.host:l,hostEl:t.isElement?i.parentNode.host:i,mounted:!0,rtl:i.dir.toLowerCase()===\"rtl\"||W(i,\"direction\")===\"rtl\",rtlTranslate:t.params.direction===\"horizontal\"&&(i.dir.toLowerCase()===\"rtl\"||W(i,\"direction\")===\"rtl\"),wrongRTL:W(l,\"display\")===\"-webkit-box\"}),!0}init(e){let t=this;if(t.initialized||t.mount(e)===!1)return t;t.emit(\"beforeInit\"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.loop&&t.virtual&&t.params.virtual.enabled?t.slideTo(t.params.initialSlide+t.virtual.slidesBefore,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.params.loop&&t.loopCreate(void 0,!0),t.attachEvents();let a=[...t.el.querySelectorAll('[loading=\"lazy\"]')];return t.isElement&&a.push(...t.hostEl.querySelectorAll('[loading=\"lazy\"]')),a.forEach(r=>{r.complete?fe(t,r):r.addEventListener(\"load\",l=>{fe(t,l.target)})}),Ee(t),t.initialized=!0,Ee(t),t.emit(\"init\"),t.emit(\"afterInit\"),t}destroy(e,t){e===void 0&&(e=!0),t===void 0&&(t=!0);let i=this,{params:a,el:r,wrapperEl:l,slides:n}=i;return typeof i.params==\"undefined\"||i.destroyed||(i.emit(\"beforeDestroy\"),i.initialized=!1,i.detachEvents(),a.loop&&i.loopDestroy(),t&&(i.removeClasses(),r&&typeof r!=\"string\"&&r.removeAttribute(\"style\"),l&&l.removeAttribute(\"style\"),n&&n.length&&n.forEach(d=>{d.classList.remove(a.slideVisibleClass,a.slideFullyVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass),d.removeAttribute(\"style\"),d.removeAttribute(\"data-swiper-slide-index\")})),i.emit(\"destroy\"),Object.keys(i.eventsListeners).forEach(d=>{i.off(d)}),e!==!1&&(i.el&&typeof i.el!=\"string\"&&(i.el.swiper=null),$e(i)),i.destroyed=!0),null}static extendDefaults(e){Y(xe,e)}static get extendedDefaults(){return xe}static get defaults(){return Ve}static installModule(e){s.prototype.__modules__||(s.prototype.__modules__=[]);let t=s.prototype.__modules__;typeof e==\"function\"&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach(t=>s.installModule(t)),s):(s.installModule(e),s)}};Object.keys(Se).forEach(s=>{Object.keys(Se[s]).forEach(e=>{_.prototype[e]=Se[s][e]})});_.use([dt,ct]);function ne(s,e,t,i){return s.params.createElements&&Object.keys(i).forEach(a=>{if(!t[a]&&t.auto===!0){let r=R(s.el,`.${i[a]}`)[0];r||(r=V(\"div\",i[a]),r.className=i[a],s.el.append(r)),t[a]=r,e[a]=r}}),t}function Te(s){let{swiper:e,extendParams:t,on:i,emit:a}=s;t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:\"swiper-button-disabled\",hiddenClass:\"swiper-button-hidden\",lockClass:\"swiper-button-lock\",navigationDisabledClass:\"swiper-navigation-disabled\"}}),e.navigation={nextEl:null,prevEl:null};function r(m){let h;return m&&typeof m==\"string\"&&e.isElement&&(h=e.el.querySelector(m)||e.hostEl.querySelector(m),h)?h:(m&&(typeof m==\"string\"&&(h=[...document.querySelectorAll(m)]),e.params.uniqueNavElements&&typeof m==\"string\"&&h&&h.length>1&&e.el.querySelectorAll(m).length===1?h=e.el.querySelector(m):h&&h.length===1&&(h=h[0])),m&&!h?m:h)}function l(m,h){let x=e.params.navigation;m=D(m),m.forEach(b=>{b&&(b.classList[h?\"add\":\"remove\"](...x.disabledClass.split(\" \")),b.tagName===\"BUTTON\"&&(b.disabled=h),e.params.watchOverflow&&e.enabled&&b.classList[e.isLocked?\"add\":\"remove\"](x.lockClass))})}function n(){let{nextEl:m,prevEl:h}=e.navigation;if(e.params.loop){l(h,!1),l(m,!1);return}l(h,e.isBeginning&&!e.params.rewind),l(m,e.isEnd&&!e.params.rewind)}function d(m){m.preventDefault(),!(e.isBeginning&&!e.params.loop&&!e.params.rewind)&&(e.slidePrev(),a(\"navigationPrev\"))}function o(m){m.preventDefault(),!(e.isEnd&&!e.params.loop&&!e.params.rewind)&&(e.slideNext(),a(\"navigationNext\"))}function u(){let m=e.params.navigation;if(e.params.navigation=ne(e,e.originalParams.navigation,e.params.navigation,{nextEl:\"swiper-button-next\",prevEl:\"swiper-button-prev\"}),!(m.nextEl||m.prevEl))return;let h=r(m.nextEl),x=r(m.prevEl);Object.assign(e.navigation,{nextEl:h,prevEl:x}),h=D(h),x=D(x);let b=(c,f)=>{c&&c.addEventListener(\"click\",f===\"next\"?o:d),!e.enabled&&c&&c.classList.add(...m.lockClass.split(\" \"))};h.forEach(c=>b(c,\"next\")),x.forEach(c=>b(c,\"prev\"))}function p(){let{nextEl:m,prevEl:h}=e.navigation;m=D(m),h=D(h);let x=(b,c)=>{b.removeEventListener(\"click\",c===\"next\"?o:d),b.classList.remove(...e.params.navigation.disabledClass.split(\" \"))};m.forEach(b=>x(b,\"next\")),h.forEach(b=>x(b,\"prev\"))}i(\"init\",()=>{e.params.navigation.enabled===!1?y():(u(),n())}),i(\"toEdge fromEdge lock unlock\",()=>{n()}),i(\"destroy\",()=>{p()}),i(\"enable disable\",()=>{let{nextEl:m,prevEl:h}=e.navigation;if(m=D(m),h=D(h),e.enabled){n();return}[...m,...h].filter(x=>!!x).forEach(x=>x.classList.add(e.params.navigation.lockClass))}),i(\"click\",(m,h)=>{let{nextEl:x,prevEl:b}=e.navigation;x=D(x),b=D(b);let c=h.target,f=b.includes(c)||x.includes(c);if(e.isElement&&!f){let v=h.path||h.composedPath&&h.composedPath();v&&(f=v.find(S=>x.includes(S)||b.includes(S)))}if(e.params.navigation.hideOnClick&&!f){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===c||e.pagination.el.contains(c)))return;let v;x.length?v=x[0].classList.contains(e.params.navigation.hiddenClass):b.length&&(v=b[0].classList.contains(e.params.navigation.hiddenClass)),a(v===!0?\"navigationShow\":\"navigationHide\"),[...x,...b].filter(S=>!!S).forEach(S=>S.classList.toggle(e.params.navigation.hiddenClass))}});let g=()=>{e.el.classList.remove(...e.params.navigation.navigationDisabledClass.split(\" \")),u(),n()},y=()=>{e.el.classList.add(...e.params.navigation.navigationDisabledClass.split(\" \")),p()};Object.assign(e.navigation,{enable:g,disable:y,update:n,init:u,destroy:p})}function N(s){return s===void 0&&(s=\"\"),`.${s.trim().replace(\/([\\.:!+\\\/()[\\]])\/g,\"\\\\$1\").replace(\/ \/g,\".\")}`}function Me(s){let{swiper:e,extendParams:t,on:i,emit:a}=s,r=\"swiper-pagination\";t({pagination:{el:null,bulletElement:\"span\",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:\"bullets\",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:c=>c,formatFractionTotal:c=>c,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`,paginationDisabledClass:`${r}-disabled`}}),e.pagination={el:null,bullets:[]};let l,n=0;function d(){return!e.params.pagination.el||!e.pagination.el||Array.isArray(e.pagination.el)&&e.pagination.el.length===0}function o(c,f){let{bulletActiveClass:v}=e.params.pagination;c&&(c=c[`${f===\"prev\"?\"previous\":\"next\"}ElementSibling`],c&&(c.classList.add(`${v}-${f}`),c=c[`${f===\"prev\"?\"previous\":\"next\"}ElementSibling`],c&&c.classList.add(`${v}-${f}-${f}`)))}function u(c,f,v){if(c=c%v,f=f%v,f===c+1)return\"next\";if(f===c-1)return\"previous\"}function p(c){let f=c.target.closest(N(e.params.pagination.bulletClass));if(!f)return;c.preventDefault();let v=U(f)*e.params.slidesPerGroup;if(e.params.loop){if(e.realIndex===v)return;let S=u(e.realIndex,v,e.slides.length);S===\"next\"?e.slideNext():S===\"previous\"?e.slidePrev():e.slideToLoop(v)}else e.slideTo(v)}function g(){let c=e.rtl,f=e.params.pagination;if(d())return;let v=e.pagination.el;v=D(v);let S,C,I=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,P=e.params.loop?Math.ceil(I\/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(C=e.previousRealIndex||0,S=e.params.slidesPerGroup>1?Math.floor(e.realIndex\/e.params.slidesPerGroup):e.realIndex):typeof e.snapIndex!=\"undefined\"?(S=e.snapIndex,C=e.previousSnapIndex):(C=e.previousIndex||0,S=e.activeIndex||0),f.type===\"bullets\"&&e.pagination.bullets&&e.pagination.bullets.length>0){let L=e.pagination.bullets,T,M,A;if(f.dynamicBullets&&(l=ae(L[0],e.isHorizontal()?\"width\":\"height\",!0),v.forEach(O=>{O.style[e.isHorizontal()?\"width\":\"height\"]=`${l*(f.dynamicMainBullets+4)}px`}),f.dynamicMainBullets>1&&C!==void 0&&(n+=S-(C||0),n>f.dynamicMainBullets-1?n=f.dynamicMainBullets-1:n<0&&(n=0)),T=Math.max(S-n,0),M=T+(Math.min(L.length,f.dynamicMainBullets)-1),A=(M+T)\/2),L.forEach(O=>{let k=[...[\"\",\"-next\",\"-next-next\",\"-prev\",\"-prev-prev\",\"-main\"].map(G=>`${f.bulletActiveClass}${G}`)].map(G=>typeof G==\"string\"&&G.includes(\" \")?G.split(\" \"):G).flat();O.classList.remove(...k)}),v.length>1)L.forEach(O=>{let k=U(O);k===S?O.classList.add(...f.bulletActiveClass.split(\" \")):e.isElement&&O.setAttribute(\"part\",\"bullet\"),f.dynamicBullets&&(k>=T&&k<=M&&O.classList.add(...`${f.bulletActiveClass}-main`.split(\" \")),k===T&&o(O,\"prev\"),k===M&&o(O,\"next\"))});else{let O=L[S];if(O&&O.classList.add(...f.bulletActiveClass.split(\" \")),e.isElement&&L.forEach((k,G)=>{k.setAttribute(\"part\",G===S?\"bullet-active\":\"bullet\")}),f.dynamicBullets){let k=L[T],G=L[M];for(let z=T;z<=M;z+=1)L[z]&&L[z].classList.add(...`${f.bulletActiveClass}-main`.split(\" \"));o(k,\"prev\"),o(G,\"next\")}}if(f.dynamicBullets){let O=Math.min(L.length,f.dynamicMainBullets+4),k=(l*O-l)\/2-A*l,G=c?\"right\":\"left\";L.forEach(z=>{z.style[e.isHorizontal()?G:\"top\"]=`${k}px`})}}v.forEach((L,T)=>{if(f.type===\"fraction\"&&(L.querySelectorAll(N(f.currentClass)).forEach(M=>{M.textContent=f.formatFractionCurrent(S+1)}),L.querySelectorAll(N(f.totalClass)).forEach(M=>{M.textContent=f.formatFractionTotal(P)})),f.type===\"progressbar\"){let M;f.progressbarOpposite?M=e.isHorizontal()?\"vertical\":\"horizontal\":M=e.isHorizontal()?\"horizontal\":\"vertical\";let A=(S+1)\/P,O=1,k=1;M===\"horizontal\"?O=A:k=A,L.querySelectorAll(N(f.progressbarFillClass)).forEach(G=>{G.style.transform=`translate3d(0,0,0) scaleX(${O}) scaleY(${k})`,G.style.transitionDuration=`${e.params.speed}ms`})}f.type===\"custom\"&&f.renderCustom?(Z(L,f.renderCustom(e,S+1,P)),T===0&&a(\"paginationRender\",L)):(T===0&&a(\"paginationRender\",L),a(\"paginationUpdate\",L)),e.params.watchOverflow&&e.enabled&&L.classList[e.isLocked?\"add\":\"remove\"](f.lockClass)})}function y(){let c=e.params.pagination;if(d())return;let f=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.grid&&e.params.grid.rows>1?e.slides.length\/Math.ceil(e.params.grid.rows):e.slides.length,v=e.pagination.el;v=D(v);let S=\"\";if(c.type===\"bullets\"){let C=e.params.loop?Math.ceil(f\/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&C>f&&(C=f);for(let I=0;I<C;I+=1)c.renderBullet?S+=c.renderBullet.call(e,I,c.bulletClass):S+=`<${c.bulletElement} ${e.isElement?'part=\"bullet\"':\"\"} class=\"${c.bulletClass}\"><\/${c.bulletElement}>`}c.type===\"fraction\"&&(c.renderFraction?S=c.renderFraction.call(e,c.currentClass,c.totalClass):S=`<span class=\"${c.currentClass}\"><\/span> \/ <span class=\"${c.totalClass}\"><\/span>`),c.type===\"progressbar\"&&(c.renderProgressbar?S=c.renderProgressbar.call(e,c.progressbarFillClass):S=`<span class=\"${c.progressbarFillClass}\"><\/span>`),e.pagination.bullets=[],v.forEach(C=>{c.type!==\"custom\"&&Z(C,S||\"\"),c.type===\"bullets\"&&e.pagination.bullets.push(...C.querySelectorAll(N(c.bulletClass)))}),c.type!==\"custom\"&&a(\"paginationRender\",v[0])}function m(){e.params.pagination=ne(e,e.originalParams.pagination,e.params.pagination,{el:\"swiper-pagination\"});let c=e.params.pagination;if(!c.el)return;let f;typeof c.el==\"string\"&&e.isElement&&(f=e.el.querySelector(c.el)),!f&&typeof c.el==\"string\"&&(f=[...document.querySelectorAll(c.el)]),f||(f=c.el),!(!f||f.length===0)&&(e.params.uniqueNavElements&&typeof c.el==\"string\"&&Array.isArray(f)&&f.length>1&&(f=[...e.el.querySelectorAll(c.el)],f.length>1&&(f=f.find(v=>te(v,\".swiper\")[0]===e.el))),Array.isArray(f)&&f.length===1&&(f=f[0]),Object.assign(e.pagination,{el:f}),f=D(f),f.forEach(v=>{c.type===\"bullets\"&&c.clickable&&v.classList.add(...(c.clickableClass||\"\").split(\" \")),v.classList.add(c.modifierClass+c.type),v.classList.add(e.isHorizontal()?c.horizontalClass:c.verticalClass),c.type===\"bullets\"&&c.dynamicBullets&&(v.classList.add(`${c.modifierClass}${c.type}-dynamic`),n=0,c.dynamicMainBullets<1&&(c.dynamicMainBullets=1)),c.type===\"progressbar\"&&c.progressbarOpposite&&v.classList.add(c.progressbarOppositeClass),c.clickable&&v.addEventListener(\"click\",p),e.enabled||v.classList.add(c.lockClass)}))}function h(){let c=e.params.pagination;if(d())return;let f=e.pagination.el;f&&(f=D(f),f.forEach(v=>{v.classList.remove(c.hiddenClass),v.classList.remove(c.modifierClass+c.type),v.classList.remove(e.isHorizontal()?c.horizontalClass:c.verticalClass),c.clickable&&(v.classList.remove(...(c.clickableClass||\"\").split(\" \")),v.removeEventListener(\"click\",p))})),e.pagination.bullets&&e.pagination.bullets.forEach(v=>v.classList.remove(...c.bulletActiveClass.split(\" \")))}i(\"changeDirection\",()=>{if(!e.pagination||!e.pagination.el)return;let c=e.params.pagination,{el:f}=e.pagination;f=D(f),f.forEach(v=>{v.classList.remove(c.horizontalClass,c.verticalClass),v.classList.add(e.isHorizontal()?c.horizontalClass:c.verticalClass)})}),i(\"init\",()=>{e.params.pagination.enabled===!1?b():(m(),y(),g())}),i(\"activeIndexChange\",()=>{typeof e.snapIndex==\"undefined\"&&g()}),i(\"snapIndexChange\",()=>{g()}),i(\"snapGridLengthChange\",()=>{y(),g()}),i(\"destroy\",()=>{h()}),i(\"enable disable\",()=>{let{el:c}=e.pagination;c&&(c=D(c),c.forEach(f=>f.classList[e.enabled?\"remove\":\"add\"](e.params.pagination.lockClass)))}),i(\"lock unlock\",()=>{g()}),i(\"click\",(c,f)=>{let v=f.target,S=D(e.pagination.el);if(e.params.pagination.el&&e.params.pagination.hideOnClick&&S&&S.length>0&&!v.classList.contains(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&v===e.navigation.nextEl||e.navigation.prevEl&&v===e.navigation.prevEl))return;let C=S[0].classList.contains(e.params.pagination.hiddenClass);a(C===!0?\"paginationShow\":\"paginationHide\"),S.forEach(I=>I.classList.toggle(e.params.pagination.hiddenClass))}});let x=()=>{e.el.classList.remove(e.params.pagination.paginationDisabledClass);let{el:c}=e.pagination;c&&(c=D(c),c.forEach(f=>f.classList.remove(e.params.pagination.paginationDisabledClass))),m(),y(),g()},b=()=>{e.el.classList.add(e.params.pagination.paginationDisabledClass);let{el:c}=e.pagination;c&&(c=D(c),c.forEach(f=>f.classList.add(e.params.pagination.paginationDisabledClass))),h()};Object.assign(e.pagination,{enable:x,disable:b,render:y,update:g,init:m,destroy:h})}function Ce(s){let{swiper:e,extendParams:t,on:i}=s;t({a11y:{enabled:!0,notificationClass:\"swiper-notification\",prevSlideMessage:\"Previous slide\",nextSlideMessage:\"Next slide\",firstSlideMessage:\"This is the first slide\",lastSlideMessage:\"This is the last slide\",paginationBulletMessage:\"Go to slide {{index}}\",slideLabelMessage:\"{{index}} \/ {{slidesLength}}\",containerMessage:null,containerRoleDescriptionMessage:null,containerRole:null,itemRoleDescriptionMessage:null,slideRole:\"group\",id:null,scrollOnFocus:!0}}),e.a11y={clicked:!1};let a=null,r,l,n=new Date().getTime();function d(w){let E=a;E.length!==0&&Z(E,w)}function o(w){w===void 0&&(w=16);let E=()=>Math.round(16*Math.random()).toString(16);return\"x\".repeat(w).replace(\/x\/g,E)}function u(w){w=D(w),w.forEach(E=>{E.setAttribute(\"tabIndex\",\"0\")})}function p(w){w=D(w),w.forEach(E=>{E.setAttribute(\"tabIndex\",\"-1\")})}function g(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"role\",E)})}function y(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-roledescription\",E)})}function m(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-controls\",E)})}function h(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-label\",E)})}function x(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"id\",E)})}function b(w,E){w=D(w),w.forEach($=>{$.setAttribute(\"aria-live\",E)})}function c(w){w=D(w),w.forEach(E=>{E.setAttribute(\"aria-disabled\",!0)})}function f(w){w=D(w),w.forEach(E=>{E.setAttribute(\"aria-disabled\",!1)})}function v(w){if(w.keyCode!==13&&w.keyCode!==32)return;let E=e.params.a11y,$=w.target;if(!(e.pagination&&e.pagination.el&&($===e.pagination.el||e.pagination.el.contains(w.target))&&!w.target.matches(N(e.params.pagination.bulletClass)))){if(e.navigation&&e.navigation.prevEl&&e.navigation.nextEl){let X=D(e.navigation.prevEl);D(e.navigation.nextEl).includes($)&&(e.isEnd&&!e.params.loop||e.slideNext(),e.isEnd?d(E.lastSlideMessage):d(E.nextSlideMessage)),X.includes($)&&(e.isBeginning&&!e.params.loop||e.slidePrev(),e.isBeginning?d(E.firstSlideMessage):d(E.prevSlideMessage))}e.pagination&&$.matches(N(e.params.pagination.bulletClass))&&$.click()}}function S(){if(e.params.loop||e.params.rewind||!e.navigation)return;let{nextEl:w,prevEl:E}=e.navigation;E&&(e.isBeginning?(c(E),p(E)):(f(E),u(E))),w&&(e.isEnd?(c(w),p(w)):(f(w),u(w)))}function C(){return e.pagination&&e.pagination.bullets&&e.pagination.bullets.length}function I(){return C()&&e.params.pagination.clickable}function P(){let w=e.params.a11y;C()&&e.pagination.bullets.forEach(E=>{e.params.pagination.clickable&&(u(E),e.params.pagination.renderBullet||(g(E,\"button\"),h(E,w.paginationBulletMessage.replace(\/\\{\\{index\\}\\}\/,U(E)+1)))),E.matches(N(e.params.pagination.bulletActiveClass))?E.setAttribute(\"aria-current\",\"true\"):E.removeAttribute(\"aria-current\")})}let L=(w,E,$)=>{u(w),w.tagName!==\"BUTTON\"&&(g(w,\"button\"),w.addEventListener(\"keydown\",v)),h(w,$),m(w,E)},T=w=>{l&&l!==w.target&&!l.contains(w.target)&&(r=!0),e.a11y.clicked=!0},M=()=>{r=!1,requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.destroyed||(e.a11y.clicked=!1)})})},A=w=>{n=new Date().getTime()},O=w=>{if(e.a11y.clicked||!e.params.a11y.scrollOnFocus||new Date().getTime()-n<100)return;let E=w.target.closest(`.${e.params.slideClass}, swiper-slide`);if(!E||!e.slides.includes(E))return;l=E;let $=e.slides.indexOf(E)===e.activeIndex,X=e.params.watchSlidesProgress&&e.visibleSlides&&e.visibleSlides.includes(E);$||X||w.sourceCapabilities&&w.sourceCapabilities.firesTouchEvents||(e.isHorizontal()?e.el.scrollLeft=0:e.el.scrollTop=0,requestAnimationFrame(()=>{r||(e.params.loop?e.slideToLoop(e.getSlideIndexWhenGrid(parseInt(E.getAttribute(\"data-swiper-slide-index\"))),0):e.slideTo(e.getSlideIndexWhenGrid(e.slides.indexOf(E)),0),r=!1)}))},k=()=>{let w=e.params.a11y;w.itemRoleDescriptionMessage&&y(e.slides,w.itemRoleDescriptionMessage),w.slideRole&&g(e.slides,w.slideRole);let E=e.slides.length;w.slideLabelMessage&&e.slides.forEach(($,X)=>{let q=e.params.loop?parseInt($.getAttribute(\"data-swiper-slide-index\"),10):X,j=w.slideLabelMessage.replace(\/\\{\\{index\\}\\}\/,q+1).replace(\/\\{\\{slidesLength\\}\\}\/,E);h($,j)})},G=()=>{let w=e.params.a11y;e.el.append(a);let E=e.el;w.containerRoleDescriptionMessage&&y(E,w.containerRoleDescriptionMessage),w.containerMessage&&h(E,w.containerMessage),w.containerRole&&g(E,w.containerRole);let $=e.wrapperEl,X=w.id||$.getAttribute(\"id\")||`swiper-wrapper-${o(16)}`,q=e.params.autoplay&&e.params.autoplay.enabled?\"off\":\"polite\";x($,X),b($,q),k();let{nextEl:j,prevEl:oe}=e.navigation?e.navigation:{};j=D(j),oe=D(oe),j&&j.forEach(de=>L(de,X,w.nextSlideMessage)),oe&&oe.forEach(de=>L(de,X,w.prevSlideMessage)),I()&&D(e.pagination.el).forEach(Ue=>{Ue.addEventListener(\"keydown\",v)}),B().addEventListener(\"visibilitychange\",A),e.el.addEventListener(\"focus\",O,!0),e.el.addEventListener(\"focus\",O,!0),e.el.addEventListener(\"pointerdown\",T,!0),e.el.addEventListener(\"pointerup\",M,!0)};function z(){a&&a.remove();let{nextEl:w,prevEl:E}=e.navigation?e.navigation:{};w=D(w),E=D(E),w&&w.forEach(X=>X.removeEventListener(\"keydown\",v)),E&&E.forEach(X=>X.removeEventListener(\"keydown\",v)),I()&&D(e.pagination.el).forEach(q=>{q.removeEventListener(\"keydown\",v)}),B().removeEventListener(\"visibilitychange\",A),e.el&&typeof e.el!=\"string\"&&(e.el.removeEventListener(\"focus\",O,!0),e.el.removeEventListener(\"pointerdown\",T,!0),e.el.removeEventListener(\"pointerup\",M,!0))}i(\"beforeInit\",()=>{a=V(\"span\",e.params.a11y.notificationClass),a.setAttribute(\"aria-live\",\"assertive\"),a.setAttribute(\"aria-atomic\",\"true\")}),i(\"afterInit\",()=>{e.params.a11y.enabled&&G()}),i(\"slidesLengthChange snapGridLengthChange slidesGridLengthChange\",()=>{e.params.a11y.enabled&&k()}),i(\"fromEdge toEdge afterInit lock unlock\",()=>{e.params.a11y.enabled&&S()}),i(\"paginationUpdate\",()=>{e.params.a11y.enabled&&P()}),i(\"destroy\",()=>{e.params.a11y.enabled&&z()})}function Pe(s){let{swiper:e,extendParams:t,on:i}=s;t({grid:{rows:1,fill:\"column\"}});let a,r,l,n,d=()=>{let h=e.params.spaceBetween;return typeof h==\"string\"&&h.indexOf(\"%\")>=0?h=parseFloat(h.replace(\"%\",\"\"))\/100*e.size:typeof h==\"string\"&&(h=parseFloat(h)),h},o=h=>{let{slidesPerView:x}=e.params,{rows:b,fill:c}=e.params.grid,f=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:h.length;l=Math.floor(f\/b),Math.floor(f\/b)===f\/b?a=f:a=Math.ceil(f\/b)*b,x!==\"auto\"&&c===\"row\"&&(a=Math.max(a,x*b)),r=a\/b},u=()=>{e.slides&&e.slides.forEach(h=>{h.swiperSlideGridSet&&(h.style.height=\"\",h.style[e.getDirectionLabel(\"margin-top\")]=\"\")})},p=(h,x,b)=>{let{slidesPerGroup:c}=e.params,f=d(),{rows:v,fill:S}=e.params.grid,C=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:b.length,I,P,L;if(S===\"row\"&&c>1){let T=Math.floor(h\/(c*v)),M=h-v*c*T,A=T===0?c:Math.min(Math.ceil((C-T*v*c)\/v),c);L=Math.floor(M\/A),P=M-L*A+T*c,I=P+L*a\/v,x.style.order=I}else S===\"column\"?(P=Math.floor(h\/v),L=h-P*v,(P>l||P===l&&L===v-1)&&(L+=1,L>=v&&(L=0,P+=1))):(L=Math.floor(h\/r),P=h-L*r);x.row=L,x.column=P,x.style.height=`calc((100% - ${(v-1)*f}px) \/ ${v})`,x.style[e.getDirectionLabel(\"margin-top\")]=L!==0?f&&`${f}px`:\"\",x.swiperSlideGridSet=!0},g=(h,x)=>{let{centeredSlides:b,roundLengths:c}=e.params,f=d(),{rows:v}=e.params.grid;if(e.virtualSize=(h+f)*a,e.virtualSize=Math.ceil(e.virtualSize\/v)-f,e.params.cssMode||(e.wrapperEl.style[e.getDirectionLabel(\"width\")]=`${e.virtualSize+f}px`),b){let S=[];for(let C=0;C<x.length;C+=1){let I=x[C];c&&(I=Math.floor(I)),x[C]<e.virtualSize+x[0]&&S.push(I)}x.splice(0,x.length),x.push(...S)}},y=()=>{n=e.params.grid&&e.params.grid.rows>1},m=()=>{let{params:h,el:x}=e,b=h.grid&&h.grid.rows>1;n&&!b?(x.classList.remove(`${h.containerModifierClass}grid`,`${h.containerModifierClass}grid-column`),l=1,e.emitContainerClasses()):!n&&b&&(x.classList.add(`${h.containerModifierClass}grid`),h.grid.fill===\"column\"&&x.classList.add(`${h.containerModifierClass}grid-column`),e.emitContainerClasses()),n=b};i(\"init\",y),i(\"update\",m),e.grid={initSlides:o,unsetSlides:u,updateSlide:p,updateWrapperSize:g}}function Q(s){let{effect:e,swiper:t,on:i,setTranslate:a,setTransition:r,overwriteParams:l,perspective:n,recreateShadows:d,getEffectParams:o}=s;i(\"beforeInit\",()=>{if(t.params.effect!==e)return;t.classNames.push(`${t.params.containerModifierClass}${e}`),n&&n()&&t.classNames.push(`${t.params.containerModifierClass}3d`);let p=l?l():{};Object.assign(t.params,p),Object.assign(t.originalParams,p)}),i(\"setTranslate _virtualUpdated\",()=>{t.params.effect===e&&a()}),i(\"setTransition\",(p,g)=>{t.params.effect===e&&r(g)}),i(\"transitionEnd\",()=>{if(t.params.effect===e&&d){if(!o||!o().slideShadows)return;t.slides.forEach(p=>{p.querySelectorAll(\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\").forEach(g=>g.remove())}),d()}});let u;i(\"virtualUpdate\",()=>{t.params.effect===e&&(t.slides.length||(u=!0),requestAnimationFrame(()=>{u&&t.slides&&t.slides.length&&(a(),u=!1)}))})}function se(s,e){let t=F(e);return t!==e&&(t.style.backfaceVisibility=\"hidden\",t.style[\"-webkit-backface-visibility\"]=\"hidden\"),t}function le(s){let{swiper:e,duration:t,transformElements:i,allSlides:a}=s,{activeIndex:r}=e,l=n=>n.parentElement?n.parentElement:e.slides.find(o=>o.shadowRoot&&o.shadowRoot===n.parentNode);if(e.params.virtualTranslate&&t!==0){let n=!1,d;a?d=i:d=i.filter(o=>{let u=o.classList.contains(\"swiper-slide-transform\")?l(o):o;return e.getSlideIndex(u)===r}),d.forEach(o=>{ce(o,()=>{if(n||!e||e.destroyed)return;n=!0,e.animating=!1;let u=new window.CustomEvent(\"transitionend\",{bubbles:!0,cancelable:!0});e.wrapperEl.dispatchEvent(u)})})}}function Le(s){let{swiper:e,extendParams:t,on:i}=s;t({fadeEffect:{crossFade:!1}}),Q({effect:\"fade\",swiper:e,on:i,setTranslate:()=>{let{slides:l}=e,n=e.params.fadeEffect;for(let d=0;d<l.length;d+=1){let o=e.slides[d],p=-o.swiperSlideOffset;e.params.virtualTranslate||(p-=e.translate);let g=0;e.isHorizontal()||(g=p,p=0);let y=e.params.fadeEffect.crossFade?Math.max(1-Math.abs(o.progress),0):1+Math.min(Math.max(o.progress,-1),0),m=se(n,o);m.style.opacity=y,m.style.transform=`translate3d(${p}px, ${g}px, 0px)`}},setTransition:l=>{let n=e.slides.map(d=>F(d));n.forEach(d=>{d.style.transitionDuration=`${l}ms`}),le({swiper:e,duration:l,transformElements:n,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})}_.use([Te,Me,Ce,Le,Pe]);var hs=_;return tt(gs);})();\nvar Swiper=typeof SwiperModule!=\"undefined\"&&(SwiperModule.default||SwiperModule);",
    "style": "@font-face{font-family:'Manrope';src:url('\/assets\/src\/fonts\/Manrope\/Manrope-VariableFont_wght.woff2') format('woff2 supports variations'),url('\/assets\/src\/fonts\/Manrope\/Manrope-VariableFont_wght.woff2') format('woff2-variations'),url('\/assets\/src\/fonts\/Manrope\/Manrope-VariableFont_wght.woff2') format('woff2');font-weight:200 800;font-style:normal;font-display:swap}@font-face{font-family:'TT Norms Pro';src:url('\/assets\/src\/fonts\/TTNorms\/TT_Norms_Pro_Medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}:root{--font-body:'Manrope',system-ui,-apple-system,'Segoe UI',Roboto,Arial,sans-serif;--font-heading:'TT Norms Pro',var(--font-body);--font-weight-heading:500;--text-base:16px;--text-body-xs:calc(var(--text-base) * 0.75);--text-body-md:calc(var(--text-base) * 1.125);--text-quote:calc(var(--text-base) * 1.1875);--text-body-lg:calc(var(--text-base) * 1.25);--text-body-sm:calc(var(--text-base) * 0.875);--text-lead:calc(var(--text-base) * 1.375);--text-lead-xl:calc(var(--text-base) * 1.625);--text-title-sm:calc(var(--text-base) * 1.375);--text-mega:calc(var(--text-base) * 2.875);--text-mega-lg:calc(var(--text-base) * 5);--text-mega-md:calc(var(--text-base) * 2);--text-mega-sm:calc(var(--text-lead-xl) + var(--text-base) * 0.125);--text-display:calc(var(--text-mega-lg) * 0.715);--text-display-sm:calc(var(--text-mega) * 0.935);--text-btn:clamp(var(--text-base),2.5vw,var(--text-body-md));--text-min:var(--text-body-xs);--text-rating:var(--text-mega);--text-rating-sm:var(--text-mega-sm);--fluid-mega-lg:calc(0.75rem + 3.5vw);--fluid-mega:var(--text-mega);--fluid-mega-md:var(--text-mega-md);--fluid-mega-sm:var(--text-mega-sm);--fluid-lead-xl:var(--text-lead-xl);--fluid-lead:var(--text-lead);--fluid-body-lg:calc(0.625rem + 0.52vw);--fluid-display:var(--text-display);--fluid-display-sm:var(--text-display-sm);--lh-body:1.43;--lh-body-tight:1.3;--lh-lead:1.4;--lh-mega:1.3;--lh-mega-lg:1.1;--lh-btn:1.2;--ls-mega:-0.04em;--ls-btn:-0.01em;--title-subtitle-gap:clamp(8px,1.8vw,35px);--ui-surface-soft:#f8f9f9;--ui-divider:#d6dad8;--ui-border-default:#c3c8c6;--ui-border-strong:#aeb4b1;--brand:#588c69;--brand-dark:#3e7058;--brand-light:#79b595;--brand-surface-soft:#f4fbf7;--brand-border:#dcece3;--brand-soft:#aad0bc;--brand-decor:#a0d5b9;--brand-secondary:#b3a898;--brand-secondary-dark:#af9f89;--rating-accent:#ffc32a;--promo-badge:#dea28a;--promo-badge-overlay:#E4C29466;--promo-badge-text:color-mix(in srgb,var(--promo-badge) 45%,var(--text-primary));--promo-warm:#cf6537;--promo-warm-bg:#fc964e;--promo-accent:#ba5c5c;--promo-accent-bg:#fc4e4e;--promo-cool:#60759d;--promo-cool-bg:#9fc4db;--text-accent:#333333;--text-on-brand:#ffffff;--text-primary:#151b1a;--text-secondary:#4a5250;--text-muted:#787878;--bg-fill-page:#efece9;--bg-fill-soft:#fbf7f4;--bg-fill-footer:#f0ece9;--bg-fill-surface:#ffffff;--white:#ffffff;--brand-opacity-15:color-mix(in srgb,var(--brand) 15%,transparent);--brand-opacity-20:color-mix(in srgb,var(--brand) 20%,transparent);--brand-opacity-40:color-mix(in srgb,var(--brand) 40%,transparent);--white-opacity-75:color-mix(in srgb,var(--white) 75%,transparent);--white-opacity-50:color-mix(in srgb,var(--white) 50%,transparent);--white-opacity-40:color-mix(in srgb,var(--white) 40%,transparent);--white-opacity-25:color-mix(in srgb,var(--white) 25%,transparent);--dark-opacity-40:color-mix(in srgb,var(--text-primary) 40%,transparent);--dark-opacity-20:color-mix(in srgb,var(--text-primary) 20%,transparent);--bg-fill-panel:#efece9;--bg-fill-filter-widget:#efece9;--ui-border-soft:#e6e9e8;--focus-ring:color-mix(in srgb,var(--brand) 55%,transparent);--shadow-brand-soft:0 16px 10px 0 color-mix(in srgb,var(--brand) 4%,transparent);--shadow-header:0 8px 24px color-mix(in srgb,#000 6%,transparent);--shadow-dropdown:0 16px 44px color-mix(in srgb,#0f172a 12%,transparent);--shadow-popup:0 24px 80px color-mix(in srgb,#0f172a 16%,transparent);--glass-text-08:color-mix(in srgb,var(--text-primary) 8%,transparent);--glass-blur:8px;--glass-blur-mobile:4px;--section-bg-light:#f8f6f4;--section-bg-deep:#dfd9d2;--bg-gradient-page-angle:135deg;--bg-gradient-page-light:10.19%;--bg-gradient-page-deep:92.05%;--bg-gradient-page-veil:0%;--bg-gradient-bottom-light-angle:135deg;--bg-gradient-bottom-light-light:20.61%;--bg-gradient-bottom-light-deep:68.37%;--bg-gradient-bottom-light-veil:40%;--bg-gradient-top-light-angle:180deg;--bg-gradient-top-light-light:8%;--bg-gradient-top-light-deep:62%;--bg-gradient-top-light-veil:40%;--section-bg:var(--bg-fill-page);--page-max:1640px;--page-gutter:16px;--logo-w:263px;--ui-icon-box:58px;--ui-icon:30px;--ui-label-max:170px;--ui-cta-h:54px;--ui-cta-px:32px;--btn-min-h:54px;--btn-font-size:var(--text-body-md);--text-nav:clamp(16px,calc(11.1px + 0.36vw),18px);--text-ui-meta:clamp(14px,calc(4.2px + 0.72vw),18px);--text-ui-btn:clamp(14px,calc(4.2px + 0.72vw),18px);--space-2:2px;--space-4:4px;--space-6:6px;--space-8:8px;--space-10:10px;--space-12:12px;--space-14:14px;--space-16:16px;--space-18:18px;--space-20:20px;--space-22:22px;--space-24:24px;--space-28:28px;--space-32:32px;--space-40:40px;--space-48:48px;--space-56:56px;--space-64:64px;--section-gap:120px;--section-gap-mobile:80px;--section-y-top:48px;--section-y-bottom:56px;--section-y-mobile:40px;--section-y-before-footer:95px;--section-y-top-lg:89px;--section-y-bottom-lg:108px;--bp-sm:576px;--bp-md:768px;--bp-lg:992px;--bp-xl:1200px;--radius:10px;--radius-btn:10px;--radius-sm:4px;--radius-lg:calc(var(--radius) * 1.2);--radius-xl:calc(var(--radius) * 1.4);--radius-full:100%;--radius-pill:100px}@media (max-width:1600px){:root{--logo-w:232px;--ui-icon-box:42px;--ui-icon:26px;--ui-cta-h:48px;--ui-cta-px:18px;--fluid-lead-xl:calc(1.0625rem + 0.32vw)}}@media (max-width:1366px){:root{--logo-w:220px}}@media (min-width:992px){:root{--page-gutter:clamp(20px,7.3vw,140px)}}@media (max-width:1200px){:root{--fluid-mega:calc(0.5rem + 0.85vw);--fluid-mega-md:calc(0.5rem + 0.55vw);--fluid-mega-sm:calc(0.5rem + 0.38vw);--fluid-lead-xl:calc(0.5rem + 0.42vw);--fluid-lead:calc(0.5rem + 0.34vw);--fluid-display:calc(1rem + 0.95vw);--fluid-display-sm:calc(0.75rem + 0.68vw);--title-subtitle-gap:clamp(8px,1.4vw,28px)}}@media (max-width:1366px){:root{--btn-min-h:47px;--btn-font-size:var(--text-body-sm)}}@media (max-width:768px){:root{--text-nav:clamp(var(--text-min),calc(11.1px + 0.36vw),18px);--text-ui-meta:clamp(var(--text-min),calc(4.2px + 0.72vw),18px);--text-ui-btn:clamp(var(--text-min),calc(4.2px + 0.72vw),18px);--text-body-sm:max(var(--text-min),calc(var(--text-base) * 0.875))}}*,*::before,*::after{box-sizing:border-box}html{font-size:var(--text-base);scrollbar-gutter:stable;scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}html.is-popup-open{overflow:hidden}html.is-popup-open jdiv,html.is-popup-open #jvLabelWrap,html.is-popup-open #jivo-iframe-container,html.is-popup-open iframe[src*=\"jivo\"],html.is-popup-open iframe[src*=\"jivosite\"],html.is-popup-open .b24-widget-button-wrapper,html.is-popup-open .bx-im-bar,html.is-popup-open [class*=\"b24-widget-button\"],html.is-popup-open iframe[src*=\"bitrix24\"],html.is-popup-open #envybox,html.is-popup-open #envybox-widget,html.is-popup-open .envybox,html.is-popup-open [id*=\"callibri\"],html.is-popup-open [class*=\"callibri\"],html.is-popup-open iframe[src*=\"callibri\"],html.is-popup-open #carrotquest-messenger-container,html.is-popup-open #carrotquest-messenger-collapsed-container,html.is-popup-open [id*=\"usedesk\"],html.is-popup-open iframe[src*=\"usedesk\"],html.is-popup-open .redhelper,html.is-popup-open [id^=\"talkme\"],html.is-popup-open [class*=\"talk-me\"],html.is-popup-open [id*=\"roistat-widget\"],html.is-popup-open .marquiz__container,html.is-popup-open .back-to-top{visibility:hidden !important;pointer-events:none !important}body{margin:0;font-family:var(--font-body);font-size:1em;line-height:var(--lh-body);background:var(--bg-fill-page);color:var(--text-primary);min-height:100dvh;display:flex;flex-direction:column}:where( a[href],button,input:not([type=\"hidden\"]),select,textarea,summary,[contenteditable=\"true\"],[tabindex]:not([tabindex=\"-1\"]) ):focus-visible{outline:2px solid var(--focus-ring) !important;outline-offset:4px}img{max-width:100%;height:auto}img[width][height]{aspect-ratio:auto attr(width) \/ attr(height)}.page{width:100%;margin:0 auto;padding:var(--section-gap) 0;display:flex;flex-direction:column;flex:1 0 auto}.page>section+section{margin-top:var(--section-gap)}.page > section + section.section-space-top,.page > section + section.section-space-y,.page > section + section.section-space-top-lg,.page > section + section.section-space-y-lg,.page > section + section.has-block-bg.section-pad-top,.page > section + section.has-block-bg.section-pad-y,.page > section + section.has-block-bg.section-pad-top-lg,.page > section + section.has-block-bg.section-pad-y-lg,.page > section + section.section-no-gap-top{margin-top:0}.page.page--with-header{padding-top:0;padding-bottom:0}.page.page--with-header > section:first-child{margin-top:0}.page.page--with-footer > section:last-child.section-space-bottom,.page.page--with-footer > section:last-child.section-space-y,.page.page--with-footer > section:last-child.section-space-bottom-lg,.page.page--with-footer > section:last-child.section-space-y-lg{padding-bottom:var(--section-y-before-footer)}.page.page--with-footer > section:last-child.has-block-bg.section-pad-bottom > .container,.page.page--with-footer > section:last-child.has-block-bg.section-pad-y > .container,.page.page--with-footer > section:last-child.has-block-bg.section-pad-bottom-lg > .container,.page.page--with-footer > section:last-child.has-block-bg.section-pad-y-lg > .container{padding-bottom:var(--section-y-before-footer)}.page.page--with-footer > section.section-bg:last-child{padding-bottom:var(--section-y-before-footer)}.section-bg{background:var(--section-bg)}.section-bg--page{--section-bg:var(--bg-fill-page)}.section-bg--white{--section-bg:var(--white)}.section-bg--page-alt{--section-bg:var(--bg-fill-soft)}.section-bg--surface{--section-bg:var(--bg-fill-surface)}.section-bg--gradient{background:var(--section-gradient)}.section-bg--bg-gradient-page{--bg-gradient-page-veil-layer:linear-gradient( 90deg,color-mix(in srgb,var(--section-bg-light) var(--bg-gradient-page-veil),transparent),color-mix(in srgb,var(--section-bg-light) var(--bg-gradient-page-veil),transparent) );--section-gradient:var(--bg-gradient-page-veil-layer),linear-gradient( var(--bg-gradient-page-angle),var(--section-bg-light) min(var(--bg-gradient-page-light),var(--bg-gradient-page-deep)),var(--section-bg-deep) max(var(--bg-gradient-page-light),var(--bg-gradient-page-deep)) )}.section-bg--bg-gradient-bottom-light{--bg-gradient-bottom-light-veil-layer:linear-gradient( 90deg,color-mix(in srgb,var(--section-bg-light) var(--bg-gradient-bottom-light-veil),transparent),color-mix(in srgb,var(--section-bg-light) var(--bg-gradient-bottom-light-veil),transparent) );--section-gradient:var(--bg-gradient-bottom-light-veil-layer),linear-gradient( var(--bg-gradient-bottom-light-angle),var(--section-bg-light) min(var(--bg-gradient-bottom-light-light),var(--bg-gradient-bottom-light-deep)),var(--section-bg-deep) max(var(--bg-gradient-bottom-light-light),var(--bg-gradient-bottom-light-deep)) )}.section-bg--bg-gradient-top-light{--bg-gradient-top-light-veil-layer:linear-gradient( 90deg,color-mix(in srgb,var(--section-bg-light) var(--bg-gradient-top-light-veil),transparent),color-mix(in srgb,var(--section-bg-light) var(--bg-gradient-top-light-veil),transparent) );--section-gradient:var(--bg-gradient-top-light-veil-layer),linear-gradient( var(--bg-gradient-top-light-angle),var(--section-bg-light) min(var(--bg-gradient-top-light-light),var(--bg-gradient-top-light-deep)),var(--section-bg-deep) max(var(--bg-gradient-top-light-light),var(--bg-gradient-top-light-deep)) )}.page > section.section-bg{padding-bottom:var(--section-gap)}.page > section.section-bg:has(+ section.section-bg){padding-bottom:calc(var(--section-gap) \/ 2)}.page > section + section.section-bg{margin-top:0;padding-top:var(--section-gap)}.page > section.section-bg + section.section-bg{padding-top:calc(var(--section-gap) \/ 2)}.page > section.section-bg + section:not(.section-bg){margin-top:0}.page:not(.page--with-header) > section.section-bg:first-child{margin-top:calc(-1 * var(--section-gap));padding-top:var(--section-gap)}section.section-space-top,section.section-space-bottom,section.section-space-y,section.section-space-top-lg,section.section-space-bottom-lg,section.section-space-y-lg{box-sizing:border-box}section.section-space-top{padding-top:var(--section-y-top)}section.section-space-bottom{padding-bottom:var(--section-y-bottom)}section.section-space-y{padding-top:var(--section-y-top);padding-bottom:var(--section-y-bottom)}section.section-space-top-lg{padding-top:var(--section-y-top-lg)}section.section-space-bottom-lg{padding-bottom:var(--section-y-bottom-lg)}section.section-space-y-lg{padding-top:var(--section-y-top-lg);padding-bottom:var(--section-y-bottom-lg)}.has-block-bg.section-pad-top>.container{padding-top:var(--section-y-top)}.has-block-bg.section-pad-bottom>.container{padding-bottom:var(--section-y-bottom)}.has-block-bg.section-pad-y>.container{padding-top:var(--section-y-top);padding-bottom:var(--section-y-bottom)}.has-block-bg.section-pad-top-lg>.container{padding-top:var(--section-y-top-lg)}.has-block-bg.section-pad-bottom-lg>.container{padding-bottom:var(--section-y-bottom-lg)}.has-block-bg.section-pad-y-lg>.container{padding-top:var(--section-y-top-lg);padding-bottom:var(--section-y-bottom-lg)}.container{width:100%;max-width:calc(var(--page-max) + 2 * var(--page-gutter));margin:0 auto;padding-left:var(--page-gutter);padding-right:var(--page-gutter);box-sizing:border-box}.content> :last-child{margin-bottom:0}.content ul,.content ol{padding-left:1.25em}.wysiwyg{width:100%;max-width:100%}.wysiwyg blockquote{margin:calc(var(--space-24) * 2) 0;padding:var(--space-16);border:1px solid var(--brand-border);border-radius:var(--radius);background:var(--brand-opacity-15);box-sizing:border-box;display:flex;gap:var(--space-14);align-items:flex-start;color:var(--text-primary)}.wysiwyg blockquote:not(:has(img))::before{content:'';flex:none;width:44px;height:44px;color:var(--brand);background:currentColor;-webkit-mask:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 44 44'%3E%3Cpath d='M35 10.2176L34.4118 14.5251C32.8824 14.407 31.7647 14.7217 31.0588 15.4691C30.3529 16.2165 29.9216 17.2196 29.7647 18.4784C29.6078 19.7372 29.5686 21.0943 29.6471 22.5498H35V35H24.9412V20.1896C24.9412 16.5706 25.8431 13.8563 27.6471 12.0468C29.4902 10.2373 31.9412 9.62759 35 10.2176ZM20.0588 10.2176L19.4706 14.5251C17.9412 14.407 16.8235 14.7217 16.1176 15.4691C15.4118 16.2165 14.9804 17.2196 14.8235 18.4784C14.6667 19.7372 14.6275 21.0943 14.7059 22.5498H20.0588V35H10V20.1896C10 16.5706 10.902 13.8563 12.7059 12.0468C14.549 10.2373 17 9.62759 20.0588 10.2176Z' fill='%23000'\/%3E%3C\/svg%3E\") no-repeat center \/ contain;mask:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 44 44'%3E%3Cpath d='M35 10.2176L34.4118 14.5251C32.8824 14.407 31.7647 14.7217 31.0588 15.4691C30.3529 16.2165 29.9216 17.2196 29.7647 18.4784C29.6078 19.7372 29.5686 21.0943 29.6471 22.5498H35V35H24.9412V20.1896C24.9412 16.5706 25.8431 13.8563 27.6471 12.0468C29.4902 10.2373 31.9412 9.62759 35 10.2176ZM20.0588 10.2176L19.4706 14.5251C17.9412 14.407 16.8235 14.7217 16.1176 15.4691C15.4118 16.2165 14.9804 17.2196 14.8235 18.4784C14.6667 19.7372 14.6275 21.0943 14.7059 22.5498H20.0588V35H10V20.1896C10 16.5706 10.902 13.8563 12.7059 12.0468C14.549 10.2373 17 9.62759 20.0588 10.2176Z' fill='%23000'\/%3E%3C\/svg%3E\") no-repeat center \/ contain}.wysiwyg blockquote strong{color:var(--text-primary)}.wysiwyg blockquote p{margin:0;color:var(--text-primary)}.wysiwyg a{color:var(--brand);text-decoration:none;outline:none}.wysiwyg a:hover{text-decoration:underline}.wysiwyg a:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.wysiwyg table{width:100%;border-collapse:collapse;min-width:0;display:block;overflow-x:auto;box-sizing:border-box;margin:calc(var(--space-24) * 2) 0}.wysiwyg-table-scroll{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.wysiwyg-table-scroll > table{display:table;overflow:visible}.wysiwyg th,.wysiwyg td{text-align:left;padding:calc(var(--space-18) * 2) calc(var(--space-16) * 2);vertical-align:top;border-bottom:1px solid var(--ui-border-default)}.wysiwyg th{color:var(--text-muted);font-weight:400}.wysiwyg table thead tr{border-bottom:1px solid var(--ui-border-default)}.wysiwyg{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}.wysiwyg table{max-width:100%}@media (max-width:768px){.wysiwyg{width:100%;max-width:100%}.wysiwyg table{min-width:0;width:max-content}.wysiwyg th,.wysiwyg td{padding:var(--space-16) var(--space-12)}}.wysiwyg ol{margin:var(--space-24) 0;padding:0;list-style:none;counter-reset:toc;gap:var(--space-16)}.wysiwyg ol > li{position:relative;padding-left:32px;color:var(--text-secondary)}.wysiwyg ol > li::before{counter-increment:toc;content:counter(toc,decimal-leading-zero);position:absolute;left:0;top:0;color:var(--brand);font-weight:600;line-height:1.4}.wysiwyg ol > li + li{margin-top:var(--space-16)}.wysiwyg ol ol{margin:var(--space-12) 0 0;padding-left:0}.wysiwyg ol ol > li{padding-left:44px}.wysiwyg ol ol > li::before{content:counters(toc,\".\") \".\"}.wysiwyg ul{margin:calc(var(--space-24) * 2) 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:calc(var(--space-8) * 2)}.wysiwyg ul li{position:relative;color:var(--text-secondary);padding-left:var(--space-20)}.wysiwyg ul li::before{content:\"\";position:absolute;left:0;top:0.55em;width:10px;height:10px;border-radius:var(--radius-full);background:var(--brand)}.wysiwyg ul ul{margin:calc(var(--space-8) * 2) 0 0;padding:0}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3,.wysiwyg h4,.wysiwyg h5,.wysiwyg h6{margin:var(--space-24) 0 var(--space-16);font-family:var(--font-heading);font-weight:var(--font-weight-heading);color:var(--text-primary);line-height:1.25;overflow-wrap:break-word;hyphens:auto}.wysiwyg h1{font-size:2.125em}.wysiwyg h2{font-size:1.75em}.wysiwyg h3{font-size:1.6em}.wysiwyg h4{font-size:1.5em}.wysiwyg h5{font-size:1.375em}.wysiwyg h6{font-size:1.25em}.has-block-bg{position:relative;max-width:100%;min-width:0;overflow:hidden;overflow-x:clip;box-sizing:border-box}.block-bg{position:absolute;inset:0;z-index:0;pointer-events:none}.block-bg--bleed{left:0;right:0;width:auto;transform:none}.block-bg img{display:block;width:100%;height:100%;object-fit:cover}.has-block-bg>.container{position:relative;z-index:1}.stack{display:flex;flex-direction:column}.stack--sm{gap:var(--space-16)}.stack--md{gap:var(--space-24)}.stack--lg{gap:var(--space-32)}.stack--xl{gap:var(--space-40)}.actions-row{display:flex;flex-wrap:wrap;gap:clamp(var(--space-16),2vw,29px);align-items:center}.stars-rating{--stars-rating-value:5;--stars-rating-size:26px;--stars-rating-gap:var(--space-2);position:relative;display:inline-flex;flex:none;vertical-align:middle}.stars-rating__layer{display:inline-flex;align-items:center;gap:var(--stars-rating-gap)}.stars-rating__layer--empty{color:color-mix(in srgb,var(--rating-accent) 22%,var(--ui-divider))}.stars-rating__layer--fill{position:absolute;inset:0 auto 0 0;overflow:hidden;width:calc(var(--stars-rating-value) \/ 5 * 100%);color:var(--rating-accent)}.stars-rating__icon{display:block;width:var(--stars-rating-size);height:var(--stars-rating-size);flex:none}.stars-rating--sm{--stars-rating-size:26px;--stars-rating-gap:var(--space-2)}.stars-rating--lg{--stars-rating-size:30px;--stars-rating-gap:var(--space-6)}@media (max-width:768px){.stars-rating,.stars-rating--sm{--stars-rating-size:20px}.stars-rating--lg{--stars-rating-size:22px;--stars-rating-gap:var(--space-4)}[class$='__badge-star'],[class$='__card-star']{width:18px;height:18px}}@media (max-width:768px){.page{padding:var(--section-gap-mobile) 0}.page>section+section{margin-top:var(--section-gap-mobile)}.page > section.section-bg{padding-bottom:var(--section-gap-mobile)}.page > section.section-bg:has(+ section.section-bg){padding-bottom:calc(var(--section-gap-mobile) \/ 2)}.page > section + section.section-bg{padding-top:var(--section-gap-mobile)}.page > section.section-bg + section.section-bg{padding-top:calc(var(--section-gap-mobile) \/ 2)}.page:not(.page--with-header) > section.section-bg:first-child{margin-top:calc(-1 * var(--section-gap-mobile));padding-top:var(--section-gap-mobile)}section.section-space-top,section.section-space-y,section.section-space-top-lg,section.section-space-y-lg{padding-top:var(--section-y-mobile)}section.section-space-bottom,section.section-space-y,section.section-space-bottom-lg,section.section-space-y-lg{padding-bottom:var(--section-y-mobile)}.has-block-bg.section-pad-top>.container,.has-block-bg.section-pad-y>.container,.has-block-bg.section-pad-top-lg>.container,.has-block-bg.section-pad-y-lg>.container{padding-top:var(--section-y-mobile)}.has-block-bg.section-pad-bottom>.container,.has-block-bg.section-pad-y>.container,.has-block-bg.section-pad-bottom-lg>.container,.has-block-bg.section-pad-y-lg>.container{padding-bottom:var(--section-y-mobile)}.actions-row{flex-direction:column;align-items:stretch;width:100%}.actions-row>.btn--primary{width:100%}}h1,h2,h3{margin:0;font-family:var(--font-heading);font-weight:var(--font-weight-heading)}.bodytext-sm{font-family:var(--font-body);font-size:var(--text-body-sm);font-weight:400;line-height:var(--lh-body-tight)}.bodytext{font-family:var(--font-body);font-size:1em;font-weight:400;line-height:var(--lh-body)}.bodytext-strong{font-family:var(--font-body);font-size:1em;font-weight:600;line-height:var(--lh-body-tight)}.bodytext-md{font-family:var(--font-body);font-size:var(--text-body-md);font-weight:400;line-height:var(--lh-body-tight)}.bodytext-quote{font-family:var(--font-body);font-size:var(--text-quote);font-weight:500;line-height:var(--lh-body)}.bodytext-lg{font-family:var(--font-body);font-size:clamp(1em,var(--fluid-body-lg),var(--text-body-lg));font-weight:600;line-height:var(--lh-body-tight)}.bodytext-lg-regular{font-family:var(--font-body);font-size:clamp(1em,var(--fluid-body-lg),var(--text-body-lg));font-weight:400;line-height:var(--lh-body-tight)}.bodytext-lg-compact{font-family:var(--font-body);font-size:var(--text-body-lg);font-weight:600;line-height:var(--lh-body-tight)}.leadtext{font-family:var(--font-body);font-size:clamp(1.0625em,var(--fluid-lead),var(--text-lead));font-weight:500;line-height:var(--lh-lead)}.leadtext-xl{font-family:var(--font-body);font-size:clamp(1.0625em,var(--fluid-lead-xl),var(--text-lead-xl));font-weight:500;line-height:var(--lh-lead)}.titletext-sm{font-family:var(--font-heading);font-size:var(--text-title-sm);font-weight:var(--font-weight-heading);line-height:1.35;letter-spacing:var(--ls-mega)}.megatext-sm{font-family:var(--font-heading);font-size:clamp(1.125em,var(--fluid-mega-sm),var(--text-mega-sm));font-weight:var(--font-weight-heading);line-height:1.2;letter-spacing:var(--ls-mega)}.megatext-md{font-family:var(--font-heading);font-size:clamp(1.375em,var(--fluid-mega-md),var(--text-mega-md));font-weight:var(--font-weight-heading);line-height:1.2;letter-spacing:var(--ls-mega)}.displaytext-sm{font-family:var(--font-heading);font-size:clamp(1.625em,var(--fluid-display-sm),var(--text-display-sm));font-weight:var(--font-weight-heading);line-height:1.2;letter-spacing:var(--ls-mega)}.megatext{font-family:var(--font-heading);font-size:clamp(1.625em,var(--fluid-mega),var(--text-mega));font-weight:var(--font-weight-heading);line-height:var(--lh-mega);letter-spacing:var(--ls-mega)}.ratingtext{font-family:var(--font-heading);font-size:var(--text-rating);font-weight:var(--font-weight-heading);line-height:1.1;color:var(--brand-dark)}.displaytext{font-family:var(--font-heading);font-size:clamp(2.25em,var(--fluid-display),var(--text-display));font-weight:var(--font-weight-heading);line-height:1.1}.megatext-lg{font-family:var(--font-heading);font-size:clamp(2em,var(--fluid-mega-lg),var(--text-mega-lg));font-weight:var(--font-weight-heading);line-height:var(--lh-mega-lg);letter-spacing:var(--ls-mega)}@media (max-width:768px){.ratingtext{font-size:var(--text-rating-sm)}}.titles{display:flex;flex-direction:column;gap:var(--title-subtitle-gap);width:100%}.heading-md{font-family:var(--font-heading);font-size:var(--text-body-md);font-weight:var(--font-weight-heading);line-height:1.2}.uimeta{font-size:var(--text-ui-meta);line-height:var(--lh-lead)}.navtext{font-size:var(--text-nav);line-height:1.3}.uibtntext{font-size:var(--text-ui-btn);line-height:var(--lh-btn)}.badge-scale{container-type:size;font-family:var(--font-heading);--badge-box:190;--badge-label:19;--badge-value:42.64;--badge-text-scale:1}.badge-scale__label{font-family:inherit;font-size:max(var(--text-min),calc(var(--badge-label) \/ var(--badge-box) * 100cqmin * var(--badge-text-scale)));font-weight:400;line-height:1.2;letter-spacing:-0.02em}.badge-scale__value{font-family:inherit;font-size:max(var(--text-min),calc(var(--badge-value) \/ var(--badge-box) * 100cqmin * var(--badge-text-scale)));font-weight:800;line-height:1.2;letter-spacing:-0.04em;white-space:nowrap}.accent{color:var(--text-accent)}.font-body{font-family:var(--font-body)}.font-heading{font-family:var(--font-heading);font-weight:var(--font-weight-heading)}.italic{font-style:italic}.eyebrow{margin:0;align-self:flex-start;letter-spacing:0;text-transform:uppercase;white-space:nowrap;color:var(--brand-secondary)}.eyebrow--bordered,.eyebrow:not([class*=\"eyebrow--\"]){padding:var(--space-10);border:0 solid currentColor;border-left-width:1px;border-right-width:1px;border-radius:var(--radius-sm)}.eyebrow--icon{display:inline-flex;align-items:center;gap:var(--space-8);padding-block:var(--space-10);padding-inline:0;border:0;border-radius:var(--radius-sm)}.eyebrow__icon{display:block;flex:none;width:27px;height:17px}.eyebrow__text{display:block}.eyebrow__text--short{display:none}@media (max-width:768px){.eyebrow__text--full{display:none}.eyebrow__text--short{display:inline}}.icon{display:block;flex:none}.glass{--glass-bg:var(--white-opacity-40);--glass-current-blur:var(--glass-blur);--glass-solid-bg:var(--white-opacity-75);background:var(--glass-bg);backdrop-filter:blur(var(--glass-current-blur));-webkit-backdrop-filter:blur(var(--glass-current-blur))}.glass--surface-40{--glass-bg:var(--white-opacity-40);--glass-solid-bg:var(--white-opacity-40)}.glass--surface-70{--glass-bg:color-mix(in srgb,var(--bg-fill-surface) 70%,transparent);--glass-solid-bg:color-mix(in srgb,var(--bg-fill-surface) 96%,transparent)}.glass--surface-75{--glass-bg:color-mix(in srgb,var(--bg-fill-surface) 75%,transparent);--glass-solid-bg:var(--white-opacity-75)}.glass--hover-bright:hover,.glass--hover-bright:focus-visible{background:var(--white-opacity-75)}.glass--soft-mobile{--glass-mobile-bg:var(--glass-bg)}.glass--desktop-only{--glass-solid-bg:var(--white-opacity-75)}@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.glass{background:var(--glass-solid-bg);backdrop-filter:none;-webkit-backdrop-filter:none}}@media (hover:none),(pointer:coarse),(max-width:768px){.glass--soft-mobile{--glass-current-blur:var(--glass-blur-mobile);background:var(--glass-mobile-bg)}.glass--desktop-only{background:var(--glass-solid-bg);backdrop-filter:none;-webkit-backdrop-filter:none}}.ui-preloader{--ui-preloader-size:44px;--ui-preloader-stroke:3px;--ui-preloader-color:var(--brand);display:inline-block;width:var(--ui-preloader-size);height:var(--ui-preloader-size);border-radius:var(--radius-full);border:var(--ui-preloader-stroke) solid color-mix(in srgb,var(--ui-preloader-color) 22%,transparent);border-top-color:var(--ui-preloader-color);border-right-color:color-mix(in srgb,var(--ui-preloader-color) 55%,transparent);animation:ui-preloader-spin .9s linear infinite;box-sizing:border-box}.ui-preloader--sm{--ui-preloader-size:28px}.ui-preloader--lg{--ui-preloader-size:62px;--ui-preloader-stroke:4px}.ui-preloader-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--bg-fill-surface) 55%,transparent);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));border-radius:inherit}@media (hover:none),(pointer:coarse),(max-width:768px){:where( .about-v2__panel,.expert-advice-v1__doctor-caption,.expert-advice-v2__photo-badge,.faq-v1__item,.footer-v1__cta-card,.hero-v1__trust,.hero-v3__card-item,.hero-v4__feature,.popup__overlay,.popup-form-loading,.progression-stages-v2__card-overlay::after,.quiz-v1__panel-inner,.ui-preloader-overlay,.utp-numbers-v1__info ){backdrop-filter:none !important;-webkit-backdrop-filter:none !important}}@keyframes ui-preloader-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ui-preloader{animation-duration:1.6s}}@media (max-width:768px){.eyebrow{white-space:normal;font-size:var(--text-body-xs)}.bodytext-md{font-size:max(var(--text-min),var(--text-base))}.bodytext-sm{font-size:max(var(--text-min),var(--text-body-sm))}.bodytext-lg-compact{font-size:max(var(--text-min),var(--text-body-sm))}.uimeta{font-size:max(var(--text-min),var(--text-ui-meta))}.navtext{font-size:max(var(--text-min),var(--text-nav))}.uibtntext{font-size:max(var(--text-min),var(--text-ui-btn))}}.text-decoration-fade{text-decoration-color:color-mix(in srgb,currentColor 45%,transparent)}.text-decoration-fade:hover,.text-decoration-fade:focus-visible{text-decoration-color:color-mix(in srgb,currentColor 45%,transparent)}.link-arrow{display:inline-flex;align-items:center;gap:var(--space-10);text-decoration:none;color:var(--text-secondary)}.link-arrow:hover,.link-arrow:focus-visible{color:var(--brand-dark)}.link-arrow__icon{flex:none;width:24px;height:24px}.btn{display:inline-flex;align-items:center;justify-content:center;border:none;padding:var(--space-14) var(--space-32);min-height:var(--btn-min-h);border-radius:var(--radius-btn);font-family:inherit;font-size:var(--btn-font-size);font-weight:600;line-height:var(--lh-btn);letter-spacing:var(--ls-btn);text-transform:uppercase;text-decoration:none;cursor:pointer;transition:transform .16s ease,background-color .2s ease-out,color .2s ease-out}.btn--primary{background:var(--brand);color:var(--text-on-brand)}.btn--primary:hover{background:var(--brand-dark)}.btn:disabled,.btn.is-consent-pending{cursor:not-allowed;transform:none}.btn--primary:disabled,.btn--primary.is-consent-pending{background:var(--ui-divider);color:var(--ui-border-strong);opacity:1}.btn--primary:disabled:hover,.btn--primary.is-consent-pending:hover{background:var(--ui-divider)}.btn--white:disabled,.btn--white.is-consent-pending{background:var(--ui-divider);color:var(--ui-border-strong);opacity:1}.btn--white:disabled:hover,.btn--white.is-consent-pending:hover{background:var(--ui-divider)}.btn--secondary:disabled{border-color:var(--ui-divider);color:var(--ui-border-strong);opacity:1}.btn--secondary{background:transparent;color:var(--brand-secondary-dark);border:2px solid var(--brand-secondary)}.btn--secondary:hover{background:color-mix(in srgb,var(--brand) 8%,transparent)}.btn--white{background:var(--white);color:var(--text-secondary);padding-inline:var(--space-24)}.btn--white:hover,.btn--white:focus-visible{background:color-mix(in srgb,var(--white) 92%,var(--brand));color:var(--text-secondary)}.btn.is-pressed{transform:scale(.98)}.btn.uibtntext,.btn.bodytext-sm{font-size:var(--btn-font-size);line-height:var(--lh-btn);letter-spacing:var(--ls-btn)}.site-header__wide-default-promo-cta.btn{padding:var(--space-8) var(--space-16);min-height:40px;font-size:var(--text-body-sm);line-height:var(--lh-btn);letter-spacing:var(--ls-btn)}@media (max-width:768px){.btn--primary{width:100%}}.slider-nav{display:flex;align-items:center;gap:var(--space-12)}.slider-nav__btn{display:inline-flex;align-items:center;justify-content:center;width:62px;height:62px;padding:0;border:none;border-radius:var(--radius-full);color:var(--text-primary);cursor:pointer;transition:transform .16s ease,background-color .16s ease,opacity .16s ease}.slider-nav__btn:disabled,.slider-nav__btn.swiper-button-disabled{opacity:.45;cursor:default}.slider-nav__btn.is-pressed{transform:scale(.96)}.slider-nav--glass .slider-nav__btn{border:1px solid var(--ui-border-default);background:var(--white-opacity-50);color:var(--ui-border-strong);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile))}.slider-nav--glass .slider-nav__btn:hover:not(:disabled):not(.swiper-button-disabled){background:var(--white-opacity-75)}.slider-nav--brand .slider-nav__btn{border:1px solid var(--brand);background:color-mix(in srgb,var(--bg-fill-surface) 25%,transparent);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));color:var(--brand)}.slider-nav--brand .slider-nav__btn:hover:not(:disabled):not(.swiper-button-disabled){background:var(--white-opacity-40)}@media (max-width:768px){.slider-nav{display:none}}.slider-pagination{display:none;position:absolute;left:50%;bottom:32px;z-index:2;width:auto !important;pointer-events:none}.slider-pagination:not(.swiper-pagination-bullets-dynamic){transform:translateX(-50%)}.slider-pagination.swiper-pagination-horizontal{--pagination-bullet-w:10px;--pagination-bullet-h:5px;--pagination-bullet-active-w:28px;--pagination-bullet-gap:var(--space-4);--swiper-pagination-bullet-width:var(--pagination-bullet-w);--swiper-pagination-bullet-height:var(--pagination-bullet-h);--swiper-pagination-bullet-border-radius:var(--radius-sm);--swiper-pagination-bullet-inactive-color:var(--white-opacity-40);--swiper-pagination-bullet-inactive-opacity:1;--swiper-pagination-color:var(--white-opacity-75)}.slider-pagination .swiper-pagination-bullet{position:relative;pointer-events:auto;width:var(--pagination-bullet-active-w);height:var(--pagination-bullet-h);border-radius:var(--radius-sm);opacity:1;margin:0 var(--pagination-bullet-gap) !important;background:transparent}.slider-pagination .swiper-pagination-bullet::before{content:\"\";position:absolute;inset:0;border-radius:inherit;background:var(--swiper-pagination-bullet-inactive-color);transform:scaleX(calc(var(--pagination-bullet-w) \/ var(--pagination-bullet-active-w)));transform-origin:center;transition:transform 0.25s ease,background-color 0.25s ease}.slider-pagination .swiper-pagination-bullet-active,.slider-pagination .swiper-pagination-bullet-active-main{width:var(--pagination-bullet-active-w)}.slider-pagination .swiper-pagination-bullet-active::before,.slider-pagination .swiper-pagination-bullet-active-main::before{background:var(--swiper-pagination-color);transform:scaleX(1)}.slider-pagination.swiper-pagination-bullets-dynamic{overflow:hidden;white-space:nowrap}.slider-pagination-host{display:flex;justify-content:center;align-items:center;width:100%;min-height:var(--slider-dot-size,18px);margin-top:var(--space-24);overflow:visible;pointer-events:none}.slider-pagination-host > .swiper-pagination,.slider-pagination-host > .slider-pagination,.slider-pagination-host > .slider-pagination--dots{margin-top:0;margin-inline:0;align-self:auto;pointer-events:auto}.slider-controls{display:grid;grid-template-areas:\"track\";grid-template-columns:minmax(0,1fr);align-items:center;width:100%}.slider-controls > .slider-nav__btn--prev,.slider-controls > .slider-nav__btn--next,.slider-controls > .slider-pagination-host{grid-area:track}.slider-controls > .slider-nav__btn--prev{justify-self:start;position:relative;z-index:2}.slider-controls > .slider-nav__btn--next{justify-self:end;position:relative;z-index:2}.slider-controls > .slider-pagination-host{justify-self:stretch;z-index:1;margin-top:0}.slider-controls > .slider-pagination-host > .swiper-pagination,.slider-controls > .slider-pagination-host > .slider-pagination,.slider-controls > .slider-pagination-host > .slider-pagination--dots{width:auto !important;max-width:none;pointer-events:none}.slider-controls > .slider-pagination-host .swiper-pagination-bullet{pointer-events:auto}.slider-pagination--glass .swiper-pagination-bullet{background:var(--white-opacity-40)}.slider-pagination--glass .swiper-pagination-bullet-active,.slider-pagination--glass .swiper-pagination-bullet-active-main{background:var(--white-opacity-75)}@media (max-width:768px){.slider-pagination{display:flex;justify-content:center;align-items:center;left:0 !important;right:0}.slider-pagination:not(.swiper-pagination-bullets-dynamic){width:100% !important;transform:none !important}.slider-pagination.swiper-pagination-bullets-dynamic{width:auto;max-width:100%;margin-inline:auto}.slider-pagination.swiper-pagination-horizontal{--pagination-bullet-w:16px;--pagination-bullet-h:8px;--pagination-bullet-active-w:40px;--pagination-bullet-gap:var(--space-6);--swiper-pagination-bullet-inactive-color:color-mix(in srgb,var(--bg-fill-surface) 80%,transparent);--swiper-pagination-color:var(--brand)}.slider-pagination--glass .swiper-pagination-bullet{background:rgba(255,255,255,0.8)}.slider-pagination--glass .swiper-pagination-bullet-active,.slider-pagination--glass .swiper-pagination-bullet-active-main{background:var(--brand)}}.slider-foot{display:flex;flex-direction:column;gap:var(--space-24)}.slider-foot > .slider-pagination--dots,.slider-foot > .slider-pagination-host,.stack > .slider-pagination-host{margin-top:0}.slider-pagination--dots{display:none;position:static !important;left:auto !important;bottom:auto !important;top:auto !important;justify-content:center;align-items:center;flex-wrap:nowrap;gap:var(--space-12);min-height:var(--slider-dot-size);margin-top:var(--space-24);margin-inline:auto;padding-inline:2px;box-sizing:border-box;pointer-events:auto;opacity:1 !important;z-index:1;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;width:100% !important;max-width:100%;transform:none !important;--slider-dot-size:18px;--slider-dot-core-size:10px;--slider-dot-inactive-size:calc(var(--slider-dot-size) - 4px);--slider-dot-ring-active:var(--brand-soft);--slider-dot-ring-inactive:color-mix(in srgb,var(--brand) 30%,var(--bg-fill-surface))}.slider-pagination--dots::-webkit-scrollbar{display:none}.slider-pagination--dots.is-always{display:flex !important}.slider-pagination--dots .swiper-pagination-bullet{position:relative;flex:none;width:var(--slider-dot-size);height:var(--slider-dot-size);border:none;border-radius:50% !important;margin:0 !important;background:transparent;opacity:1 !important;overflow:visible;transform:none !important;transition:background-color 0.2s ease,border-color 0.2s ease,box-shadow 0.2s ease}.slider-pagination--dots .swiper-pagination-bullet::before{content:\"\";position:absolute;left:50%;top:50%;width:var(--slider-dot-inactive-size);height:var(--slider-dot-inactive-size);border:none;border-radius:50%;background:var(--slider-dot-ring-inactive);box-sizing:border-box;box-shadow:none;transform:translate(-50%,-50%);transition:background-color 0.2s ease,border-color 0.2s ease,box-shadow 0.2s ease}.slider-pagination--dots .swiper-pagination-bullet-active::before{width:var(--slider-dot-size);height:var(--slider-dot-size);border:none;background:var(--slider-dot-ring-active);box-shadow:none}.slider-pagination--dots .swiper-pagination-bullet-active::after{content:\"\";position:absolute;left:50%;top:50%;width:var(--slider-dot-core-size);height:var(--slider-dot-core-size);border-radius:50%;background:var(--brand);transform:translate(-50%,-50%)}@media (max-width:768px){.slider-pagination--dots{display:flex !important}.slider-pagination--dots.swiper-pagination-disabled,.slider-pagination--dots.swiper-pagination-hidden{display:flex !important;opacity:1 !important}}@media (min-width:769px){.slider-pagination--dots:not(.is-always){display:none !important}}.popups{position:relative;z-index:2147483646}.popup{position:fixed;inset:0;z-index:2147483646;display:flex;align-items:center;justify-content:center;padding:var(--space-24) var(--page-gutter);box-sizing:border-box}.popup[hidden]{display:none}.popup:not([hidden]){display:flex}.popup__overlay{position:absolute;inset:0;background:rgba(33,33,33,0.55);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));opacity:0;transition:opacity .28s cubic-bezier(.22,1,.36,1)}.popup.is-open .popup__overlay{opacity:1}.popup__dialog{--popup-pad-y:var(--space-40);--popup-pad-x:60px;--popup-close-size:44px;--popup-close-inset:12px;position:relative;z-index:1;width:min(100%,1080px);max-height:calc(100vh - (2 * var(--space-24)));overflow:auto;padding:var(--popup-pad-y) var(--popup-pad-x);border-radius:var(--radius);background:var(--bg-fill-surface);box-sizing:border-box;box-shadow:var(--shadow-popup);opacity:0;transform:scale(.96) translateY(14px);transition:opacity .32s cubic-bezier(.22,1,.36,1),transform .32s cubic-bezier(.22,1,.36,1);will-change:opacity,transform}.popup.is-open .popup__dialog{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.popup__overlay,.popup__dialog{transition:none}.popup:not([hidden]) .popup__overlay,.popup.is-open .popup__overlay{opacity:1}.popup:not([hidden]) .popup__dialog,.popup.is-open .popup__dialog{opacity:1;transform:none}}.popup__dialog--form-result{--popup-pad-x:80px;--popup-pad-y:80px;width:min(100%,525px)}.popup--form-loading{padding:0;pointer-events:none}.popup--form-loading.is-open{pointer-events:auto}.popup-form-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(33,33,33,0.45);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));opacity:0;transition:opacity .28s cubic-bezier(.22,1,.36,1)}.popup--form-loading.is-open .popup-form-loading{opacity:1}@media (prefers-reduced-motion:reduce){.popup-form-loading{transition:none}.popup--form-loading.is-open .popup-form-loading{opacity:1}}[data-popup-open][aria-busy=\"true\"]{pointer-events:none}.popup-form-result{display:flex;flex-direction:column;align-items:center;gap:44px}.popup-form-result--error{gap:10px}.popup-form-result__body{display:flex;flex-direction:column;align-items:center;gap:44px;width:100%}.popup-form-result__text{margin:0;max-width:365px;text-align:center;color:var(--text-secondary);white-space:pre-line}.popup-form-result__icon{display:grid;place-items:center;width:64px;height:64px;flex-shrink:0}.popup-form-result__icon img{display:block;width:64px;height:64px}.popup-form-result__ok{min-width:120px;padding:var(--space-20) var(--space-40)}.popup__dialog--appointment{--popup-pad-x:60px;--popup-pad-y:60px;--popup-close-inset:20px;--popup-close-size:40px;width:min(100%,1281px)}.popup__dialog--question{width:min(100%,1345px)}.popup__appointment{display:grid;grid-template-columns:minmax(0,1fr) 541px;gap:var(--space-40);align-items:stretch}.popup__appointment-visual{width:100%;max-width:580px;min-height:551px;height:100%;align-self:stretch}.popup__appointment-visual img{display:block;width:100%;height:100%;min-height:inherit;object-fit:cover;object-position:center;border-radius:var(--radius)}.popup__appointment--question .popup__appointment-visual{max-width:644px;min-height:695px}.popup__appointment-main.stack--lg{gap:var(--space-32);min-width:0;width:100%;max-width:541px}.popup__dialog--appointment .popup__head{gap:var(--space-8);padding-right:0}.popup__dialog--appointment .popup__lead{max-width:370px}.popup-form--appointment{gap:var(--space-40)}.popup-form__fields{display:flex;flex-direction:column;gap:var(--space-14);width:100%;max-width:541px}.popup-form--appointment .field--select{position:relative}.popup-form--appointment .field__select{appearance:none;-webkit-appearance:none;padding-right:48px;cursor:pointer;background:var(--bg-fill-surface)}.popup-form--appointment .field__select-icon{position:absolute;right:var(--space-16);bottom:15px;color:var(--text-muted);pointer-events:none}.popup-form--appointment .field{gap:var(--space-8);max-width:541px}.popup-form--question .field{gap:var(--space-8);max-width:541px}.popup-form--question .popup-form__row--split .field{max-width:none}.popup__dialog--appointment .field__label{color:var(--text-primary)}.field__required,.popup-form__consent-required{color:var(--brand)}.popup__dialog--appointment .field__input{min-height:54px;padding:var(--space-18) var(--space-20);border-color:var(--ui-border-strong);background:color-mix(in srgb,var(--bg-fill-surface) 50%,transparent)}.popup-form__legal-block{gap:var(--space-16);max-width:541px}.popup-form__legal{margin:0;color:var(--text-primary)}.popup__dialog--appointment .popup-form__consent-link{color:var(--brand);text-decoration-color:currentColor}.popup-form__consent--rich{gap:var(--space-8);color:var(--text-primary)}.popup__dialog--appointment .popup-form__consent-input{width:20px;height:20px;margin-top:0;border-radius:var(--radius-sm)}.popup-form__consent-copy{gap:var(--space-4);min-width:0}.popup-form__consent-title{color:var(--text-primary)}.popup-form__consent-desc{color:var(--text-muted);font-family:var(--font-body);font-size:var(--text-body-xs);font-weight:400;line-height:var(--lh-body-tight)}.popup-form--appointment .popup-form__submit{width:100%;margin-top:0}.popup-form--appointment .popup-form__submit:disabled{background:var(--ui-divider);color:var(--ui-border-strong);cursor:not-allowed;opacity:1}.popup-form--appointment .popup-form__submit:disabled:hover{background:var(--ui-divider)}.popup-form--question .popup-form__row--split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-14);width:100%}.popup-form--question .field--textarea,.popup-form--review .field--textarea{width:100%}.popup-form--question .field__textarea-wrap,.popup-form--review .field__textarea-wrap{position:relative}.popup-form--question .field__input--comment,.popup-form--review .field__input--comment{min-height:120px;height:120px;resize:vertical;padding-bottom:calc(var(--space-32) + var(--space-8))}.popup-form--question .field__counter,.popup-form--review .field__counter{position:absolute;right:var(--space-14);bottom:var(--space-12);color:var(--ui-border-strong);pointer-events:none}.popup-form--question .popup-form__submit{width:100%;margin-top:0}.popup-form--question .popup-form__submit:disabled{background:var(--ui-divider);color:var(--ui-border-strong);cursor:not-allowed;opacity:1}.popup-form--question .popup-form__submit:disabled:hover{background:var(--ui-divider)}.popup-form.popup-form--review{gap:var(--space-40)}.popup-form--review .popup-form__fields{gap:var(--space-24);max-width:none}.popup-form--review .popup-form__row--split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-20);width:100%}.popup-form--review .popup-form__row--split .field{max-width:none}.popup-form--review .field{gap:var(--space-16);max-width:none}.popup-form--review .field--rating,.popup-form--review .field--topic{gap:0}.popup-form--review .field__input{min-height:54px;padding:var(--space-18) var(--space-20);border-color:var(--ui-border-strong);background:color-mix(in srgb,var(--bg-fill-surface) 50%,transparent)}.popup-form--review .popup-form__section-label{padding:0;color:var(--text-muted);text-transform:uppercase;letter-spacing:-0.01em}.popup-form--review .popup-form__legal-block{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-24);max-width:none}.popup-form--review .popup-form__consent{max-width:410px;gap:var(--space-24);color:var(--ui-border-strong)}.popup-form--review .popup-form__consent-input{width:20px;height:20px;margin-top:0}.popup-form--review .popup-form__submit{width:auto;margin-top:0;padding:var(--space-20) var(--space-40)}.popup__dialog--review-form{--popup-pad-x:60px;--popup-pad-y:60px;--popup-close-inset:20px;width:min(100%,819px)}.popup__dialog--review-form .popup__head{padding-right:0;text-align:center}.popup__dialog--review-form .popup__title{color:var(--text-primary)}.popup__review-form{width:100%}.field--rating,.field--topic{margin:0;padding:0;border:0;min-width:0;gap:0}.field--rating legend,.field--topic legend{float:none;display:block;width:100%;margin:0 0 var(--space-16)}.rating-picks,.topic-picks{display:flex;align-items:stretch;width:100%}.rating-picks{flex-wrap:nowrap;justify-content:space-between;gap:var(--space-14)}.topic-picks{flex-wrap:wrap;gap:var(--space-16)}.rating-picks__radio,.topic-picks__radio{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.rating-picks__item{display:flex;flex:1 1 0;min-width:0;width:auto;box-sizing:border-box;flex-direction:column;align-items:center;gap:var(--space-4);padding:var(--space-10) var(--space-8);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:var(--bg-fill-surface);color:var(--ui-border-strong);text-align:center;cursor:pointer;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.rating-picks__icon{display:block;flex:none;width:36px;height:36px;object-fit:contain}.rating-picks__label{width:100%;color:inherit;font-weight:600;line-height:1;white-space:nowrap}.rating-picks__item:hover,.rating-picks__radio:checked + .rating-picks__item,.rating-picks__radio:focus-visible + .rating-picks__item{background:var(--brand-opacity-20);border-color:var(--brand-light);color:var(--brand)}.rating-picks__radio:focus-visible + .rating-picks__item{outline:2px solid var(--brand);outline-offset:2px}.topic-picks__item{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-10);min-height:48px;padding:var(--space-12) var(--space-18);border:1px solid color-mix(in srgb,var(--brand-light) 42%,var(--ui-border-soft));border-radius:var(--radius-xl);background:var(--bg-fill-surface);color:var(--text-secondary);cursor:pointer;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.topic-picks__icon{display:block;flex:none;width:24px;height:24px;color:inherit}.topic-picks__icon--mask{background-color:currentColor;-webkit-mask:var(--topic-icon) center \/ contain no-repeat;mask:var(--topic-icon) center \/ contain no-repeat;mask-mode:luminance;-webkit-mask-source-type:luminance}.topic-picks__label{color:inherit;white-space:nowrap}.topic-picks__item:hover,.topic-picks__radio:checked + .topic-picks__item,.topic-picks__radio:focus-visible + .topic-picks__item{background:var(--brand-light);border-color:transparent;color:var(--text-on-brand)}.topic-picks__radio:focus-visible + .topic-picks__item{outline:2px solid var(--brand);outline-offset:2px}.popup__dialog--review{--popup-pad-x:var(--space-40);--popup-pad-y:var(--space-40);width:min(100%,661px)}.popup__dialog--media{width:min(100%,calc(960px + 2 * 60px))}.popup__body{width:100%;min-width:0}.popup__body.stack--md{gap:var(--space-16)}.popup__close{position:absolute;top:var(--popup-close-inset);right:var(--popup-close-inset);z-index:2;display:inline-flex;align-items:center;justify-content:center;width:var(--popup-close-size);height:var(--popup-close-size);padding:0;border:none;border-radius:0;background:transparent;color:var(--text-muted);cursor:pointer;transition:color .16s ease,transform .16s ease}.popup__close:hover,.popup__close:focus-visible{color:var(--text-secondary)}.popup__close.is-pressed{transform:scale(.96)}.popup__close-icon{display:block;flex:none;width:26px;height:26px}.popup__head{padding-right:calc(var(--popup-close-size) + var(--space-8))}.popup__title{margin:0;color:var(--text-primary)}.popup__lead{margin:0;color:var(--text-secondary)}.popup-form{display:flex;flex-direction:column;gap:var(--space-16)}.popup-form__submit{margin-top:var(--space-8)}.popup-form__submit:disabled,.popup-form__submit.is-consent-pending{cursor:not-allowed}.popup-form.is-sent .popup-form__submit{opacity:.6;pointer-events:none;cursor:not-allowed}.field{display:flex;flex-direction:column;gap:var(--space-8)}.field__label{color:var(--text-secondary)}.field__input{width:100%;min-height:52px;padding:var(--space-14) var(--space-16);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--bg-fill-surface);box-sizing:border-box;font:inherit;color:var(--text-primary);transition:border-color .16s ease}.field__input::placeholder{color:var(--text-muted);opacity:1}.field__input[type=\"search\"]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;width:16px;height:16px;margin-right:var(--space-4);cursor:pointer;background-color:var(--text-muted);-webkit-mask-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath stroke='%23000' stroke-linecap='round' stroke-width='1.5' d='M4 4l8 8M12 4 4 12'\/%3E%3C\/svg%3E\");mask-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath stroke='%23000' stroke-linecap='round' stroke-width='1.5' d='M4 4l8 8M12 4 4 12'\/%3E%3C\/svg%3E\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:10px 10px;mask-size:10px 10px}.field__input[type=\"search\"]::-webkit-search-cancel-button:hover,.field__input[type=\"search\"]:focus::-webkit-search-cancel-button{background-color:var(--text-secondary)}select.field__input:has(option[value=\"\"]:checked){color:var(--text-muted)}select.field__input option{color:var(--text-primary)}.field__input:focus,.field__input:focus-visible{outline:2px solid var(--focus-ring) !important;outline-offset:-2px;border-color:var(--focus-ring)}.popup-form--submit-attempted .field__input:invalid{border-color:color-mix(in srgb,#b42318 72%,var(--ui-border-soft))}.popup-form--submit-attempted .field__input:invalid:focus{border-color:color-mix(in srgb,#b42318 85%,var(--brand))}.popup-form--submit-attempted .popup-form__consent:has(.popup-form__consent-input:invalid){color:color-mix(in srgb,#b42318 55%,var(--text-primary))}.popup-form--submit-attempted .popup-form__consent-input:invalid{outline:2px solid color-mix(in srgb,#b42318 72%,transparent);outline-offset:2px}.popup-form__submit.is-consent-pending{background:var(--ui-divider);color:var(--ui-border-strong);opacity:1;cursor:not-allowed}.popup-form__submit.is-consent-pending:hover{background:var(--ui-divider)}.field__input--area{min-height:96px;resize:vertical}.field--stars{margin:0;padding:0;border:0;min-width:0}.field--stars .field__label{margin-bottom:var(--space-8)}.stars-input{display:inline-flex;flex-direction:row-reverse;justify-content:flex-end;gap:var(--space-6)}.stars-input__radio{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.stars-input__star{display:inline-flex;cursor:pointer;color:var(--rating-accent);opacity:0.32;transition:color .16s ease,opacity .16s ease,transform .16s ease}.stars-input__icon{display:block;width:30px;height:30px;flex:none}.stars-input__radio:checked ~ .stars-input__star,.stars-input__star:hover,.stars-input__star:hover ~ .stars-input__star{color:var(--rating-accent);opacity:1}.stars-input__radio:focus-visible + .stars-input__star{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.popup-form__consent{display:flex;align-items:flex-start;gap:var(--space-10);margin:0;color:var(--text-muted);cursor:pointer;font-family:var(--font-body);font-size:var(--text-body-sm);font-weight:400;line-height:var(--lh-body-tight)}.popup-form__consent-input{flex:none;width:18px;height:18px;margin-top:2px;box-sizing:border-box;border:1px solid var(--ui-border-soft);border-radius:var(--radius-sm);accent-color:var(--brand);cursor:pointer}.popup-form__consent-text{min-width:0}.popup-form__consent-link{color:inherit;text-decoration:underline;text-underline-offset:2px;transition:color .16s ease,text-decoration-color .16s ease}.popup-form__consent-link:hover,.popup-form__consent-link:focus-visible{color:var(--brand-dark);text-decoration-color:currentColor}.popup__media{display:flex;align-items:center;justify-content:center;width:100%;min-width:0}.popup__media img,.popup__media video,.popup__media iframe{display:block;width:100%;max-width:960px;border:0;border-radius:var(--radius)}.popup__media img{max-height:calc(100vh - 220px);object-fit:contain}.popup__media video,.popup__media iframe{aspect-ratio:960 \/ 540;max-height:calc(100vh - 220px);background:#000}.popup__media-meta{display:flex;flex-direction:column;gap:var(--space-16);width:100%;max-width:960px}.popup__media-meta-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-16)}.popup__media-author{margin:0;color:var(--text-muted)}.popup__media-stars{display:flex;align-items:center;flex:none}.popup__media-service{display:flex;flex-wrap:wrap;gap:var(--space-8);margin:0}.popup__meta-label{color:var(--text-muted);font-weight:600}.popup__meta-value{color:var(--text-secondary);font-weight:600}.popup__review{display:flex;flex-direction:column;gap:var(--space-16);max-width:581px}.popup__review-head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-16)}.popup__review-author{margin:0;color:var(--ui-border-strong)}.popup__review-quote{padding-bottom:var(--space-16);border-bottom:1px solid var(--ui-divider)}.popup__review-text{margin:0;color:var(--text-secondary);font-family:var(--font-body);font-size:var(--text-body-md);font-weight:400;line-height:var(--lh-body)}.popup__review-text.wysiwyg{font-size:inherit;font-family:inherit;line-height:inherit}.popup__review-text.wysiwyg p{margin:0}.popup__review-text.wysiwyg p + p{margin-top:var(--space-16)}.popup__review-meta-row{display:flex;flex-wrap:wrap;gap:var(--space-8);margin:0}.popup__review-meta-label{color:var(--ui-border-strong);font-weight:600}.popup__review-meta-value{color:var(--text-secondary);font-weight:600}.popup__review-foot{display:flex;align-items:center;gap:var(--space-24)}.popup__review-source{display:block;width:auto;max-width:124px;height:21px;object-fit:contain;object-position:left center}.popup__review-date{margin:0;color:var(--ui-border-strong)}@media (max-width:1280px){.popup__dialog--appointment{--popup-pad-x:var(--space-40);--popup-pad-y:var(--space-32);--popup-close-inset:var(--space-16);--popup-close-size:40px;padding:calc(var(--popup-close-size) + (2 * var(--popup-close-inset))) var(--popup-pad-x) var(--popup-pad-y)}.popup__dialog--appointment .popup__close{background:var(--bg-fill-surface)}.popup__appointment{grid-template-columns:minmax(0,1fr);gap:var(--space-32)}.popup__appointment-visual{max-width:420px;margin-inline:auto;height:auto;min-height:0;align-self:auto;aspect-ratio:580 \/ 551}.popup__appointment--question .popup__appointment-visual{min-height:0;height:auto;aspect-ratio:644 \/ 695}.popup__appointment-visual img{height:100%;min-height:0}.popup__appointment-main,.popup__appointment-main.stack--lg{max-width:none}.popup__dialog--appointment .popup__lead{max-width:none}.popup-form--appointment .field,.popup-form__fields,.popup-form__legal-block{max-width:none}.popup-form--question .popup-form__row--split{grid-template-columns:minmax(0,1fr)}}@media (max-width:991px){.rating-picks__label{display:none}}@media (max-width:768px){.popup:has(.popup-form),.popup--form-result{padding-left:0;padding-right:0}.popup:has(.popup-form) .popup__dialog,.popup--form-result .popup__dialog{width:100%;max-width:none}.popup__dialog{--popup-pad-y:var(--space-32);--popup-pad-x:var(--space-24);--popup-close-inset:var(--space-8)}.popup__dialog--appointment{--popup-pad-x:var(--space-24);--popup-close-inset:var(--space-12);padding:calc(var(--popup-close-size) + (2 * var(--popup-close-inset))) var(--popup-pad-x) var(--popup-pad-y)}.popup__dialog--appointment .popup__close{background:var(--bg-fill-surface)}.popup__dialog--form-result{--popup-pad-x:var(--space-40);--popup-pad-y:var(--space-40)}.popup-form-result,.popup-form-result__body{gap:var(--space-32)}.popup-form-result--error{gap:var(--space-10)}.popup-form-result__ok{width:100%;max-width:280px}.popup__appointment{gap:var(--space-24)}.popup__appointment-visual{max-width:420px;aspect-ratio:auto;max-height:320px;overflow:hidden}.popup__appointment--question .popup__appointment-visual{max-height:320px}.popup-form--review .popup-form__row--split{grid-template-columns:minmax(0,1fr)}.popup-form--review .popup-form__legal-block{flex-direction:column;align-items:stretch}.popup-form--review .popup-form__consent{max-width:none}.popup-form--review .popup-form__submit{width:100%}.popup__appointment-visual img{height:100%;max-height:320px;min-height:0}.popup__dialog--media{width:min(100%,100%)}label.popup-form__consent,.popup-form__consent-text{font-size:var(--text-min);line-height:var(--lh-body-tight)}.popup__title.megatext-sm{font-size:var(--text-mega-sm);line-height:1.2}}@font-face{font-family:swiper-icons;src:url(data:application\/font-woff;charset=utf-8;base64,\\ d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj\/\/wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA\/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu\/j+W2+MnAzMYDAzaX6QjD6\/4\/\/Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+\/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg\/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4\/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9\/w8UBfEMgLzE\/\/\/\/P\/5\/\/f\/V\/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA\/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP\/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj\/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB\/yIY09An6AH2Bdu\/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z\/PEJ6YOB5hKh4dj3EvXhxPqH\/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN\/d\/gczfEimrE\/fs\/bOuq29Zmn8tloORaXgZgGa78yO9\/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i\/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH\/\/wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv\/H9ezGI6Z5XBAw8CBK\/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow\/P\/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA);font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-slide,.swiper-3d .swiper-cube-shadow{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper:before{content:\"\";flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper:before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:#00000026}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,#00000080,#0000)}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader,.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:root{--swiper-navigation-size:44px}.swiper-button-prev,.swiper-button-next{position:absolute;top:var(--swiper-navigation-top-offset,50%);width:calc(var(--swiper-navigation-size) \/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size) \/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-prev.swiper-button-disabled,.swiper-button-next.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev.swiper-button-hidden,.swiper-button-next.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-prev,.swiper-navigation-disabled .swiper-button-next{display:none!important}.swiper-button-prev svg,.swiper-button-next svg{width:100%;height:100%;object-fit:contain;transform-origin:center}.swiper-rtl .swiper-button-prev svg,.swiper-rtl .swiper-button-next svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-lock{display:none}.swiper-button-prev:after,.swiper-button-next:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;font-variant:initial;line-height:1}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:\"prev\"}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:\"next\"}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-pagination-fraction,.swiper-pagination-custom,.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal{bottom:var(--swiper-pagination-bottom,8px);top:var(--swiper-pagination-top,auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius,50%);background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity,.2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity,1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets{right:var(--swiper-pagination-right,8px);left:var(--swiper-pagination-left,auto);top:50%;transform:translate3d(0,-50%,0)}.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translate(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,rgba(0,0,0,.25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0}.swiper-vertical>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite{width:var(--swiper-pagination-progressbar-size,4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:auto;transform:none}.hero-v2__slide-bg > img,.hero-v2__slide-bg > video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.hero-v2__slide-video{z-index:1}.hero-v2__slide-video.is-frozen{opacity:0}.hero-v2{background-color:var(--bg-fill-page);box-sizing:border-box}.hero-v2__card{position:relative;overflow:hidden}.hero-v2__card.swiper{overflow:hidden}.hero-v2__card .swiper-slide{display:flex;height:auto}.hero-v2__slide{flex:1;min-width:0;min-height:560px}.hero-v2__slide-inner{justify-content:center;min-height:560px;box-sizing:border-box}.hero-v2__lead{width:100%;max-width:700px}.hero-v2__title,.hero-v2__subtitle{margin:0;max-width:100%;width:100%}.hero-v2__title{color:var(--text-primary)}.hero-v2__subtitle{color:var(--text-secondary)}.hero-v2__cta{min-width:320px}.hero-v2__benefits{display:flex;flex-wrap:wrap;gap:var(--space-56);align-items:flex-start;align-self:flex-start;width:auto;max-width:calc(3 * 230px + 2 * var(--space-56));margin:0;padding:0;list-style:none}.hero-v2__benefit{display:flex;gap:var(--space-16);align-items:center;flex:0 0 230px;width:230px;max-width:230px;box-sizing:border-box}.hero-v2__benefit-icon{position:relative;display:flex;align-items:center;justify-content:center;flex:none;width:54px;height:54px;border-radius:var(--radius-full);color:var(--brand)}.hero-v2__benefit-icon::before{content:\"\";position:absolute;inset:0;border-radius:var(--radius-full);background:var(--brand-opacity-15);pointer-events:none}.hero-v2__benefit-icon img{position:relative;z-index:1;display:block;width:31px;height:31px;object-fit:contain}.hero-v2__benefit-text{margin:0;color:var(--text-secondary);flex:0 0 160px;width:160px}.hero-v2__benefit--no-icon{gap:0}.hero-v2__benefit--no-icon .hero-v2__benefit-text{flex:1 1 auto;width:auto}.hero-v2__slider-nav{position:absolute;right:var(--page-gutter);bottom:var(--space-56);z-index:2}.hero-v2 .slider-pagination-host{display:none}@media (min-width:1400px){.hero-v2__slide,.hero-v2__slide-inner{min-height:600px}}@media (min-width:769px){.hero-v2__slide-inner{padding-right:152px}}@media (max-width:1280px) and (min-width:769px){.hero-v2__lead{max-width:560px}}@media (max-width:768px){.hero-v2__slide.section-pad-y>.container{padding-bottom:0}.hero-v2__slide{display:flex;flex-direction:column;min-height:auto}.hero-v2__slide-bg{position:static;order:2;flex:none;width:100%;aspect-ratio:375\/280;min-height:220px}.hero-v2__slide-bg img,.hero-v2__slide-bg video{width:100%;height:100%;object-fit:cover;object-position:right center}.hero-v2__slide>.container{order:1;flex:none;width:100%}.hero-v2__slide-inner{min-height:auto;align-items:flex-start;padding-right:0}.hero-v2__slide-inner.stack--xl,.hero-v2__lead.stack--xl{gap:var(--space-32)}.hero-v2__lead{max-width:none}.hero-v2__cta{min-width:0;width:100%}.hero-v2__benefits{flex-direction:column;gap:var(--space-16);width:100%;max-width:none;margin-bottom:var(--space-32)}.hero-v2__benefit{flex:0 0 auto;gap:var(--space-16);width:100%;max-width:none}.hero-v2__benefit-icon{width:40px;height:40px}.hero-v2__benefit-icon img{width:22px;height:22px}.hero-v2__benefit-text{flex:1 1 auto;width:auto}.hero-v2__slider-nav{display:none}.hero-v2 .slider-pagination-host{display:flex;position:relative;z-index:3;margin-top:var(--space-16)}.hero-v2__slider-pagination.slider-pagination--dots{position:static !important;left:auto !important;bottom:auto !important;pointer-events:auto}}.benefits-v2{position:relative;z-index:1;box-sizing:border-box;overflow-x:clip}.page > section:has(+ .benefits-v2){position:relative;z-index:0}.page > section[class*=\"hero-v\"]:has(+ .benefits-v2){z-index:2}.benefits-v2__texture{position:absolute;inset:0;z-index:0;pointer-events:none;background-size:cover;background-position:center;background-repeat:no-repeat}.benefits-v2__decor{position:absolute;left:-130px;top:-64px;display:block;width:676px;height:auto;aspect-ratio:976.598 \/ 1035;object-fit:contain;pointer-events:none;z-index:0;transform:rotate(14.63deg);transform-origin:50% 50%;opacity:0.8}.benefits-v2 > .container{position:relative;z-index:1}.benefits-v2__head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,940px);gap:var(--space-64);align-items:start}.benefits-v2__eyebrow{color:var(--text-muted);justify-self:start}.benefits-v2__lead{min-width:0}.benefits-v2__title{margin:0;color:var(--text-primary)}.benefits-v2__subtitle{margin:0;color:var(--text-secondary)}.benefits-v2__cards{display:grid;grid-template-columns:repeat(var(--benefits-v2-cols,4),minmax(0,1fr));gap:var(--space-40);align-items:stretch;margin:0;padding:0;list-style:none}.benefits-v2__cards--cols-1{--benefits-v2-cols:1}.benefits-v2__cards--cols-2{--benefits-v2-cols:2}.benefits-v2__cards--cols-3{--benefits-v2-cols:3}.benefits-v2__cards--cols-4{--benefits-v2-cols:4}.benefits-v2__card{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-32);min-width:0;padding:var(--space-20) var(--space-24);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:transparent;box-sizing:border-box}.benefits-v2__card--no-icon{gap:0}.benefits-v2__icon{position:relative;display:flex;align-items:center;justify-content:center;flex:none;width:46px;height:46px;border-radius:var(--radius-sm);color:var(--brand-dark)}.benefits-v2__icon::before{content:\"\";position:absolute;inset:-3px;border-radius:var(--radius-sm);background:var(--bg-fill-page);pointer-events:none}.benefits-v2__icon-img{position:relative;z-index:1;display:block;width:18px;height:19px;object-fit:contain}.benefits-v2__card-body{min-width:0}.benefits-v2__card-title{margin:0;color:var(--text-primary)}.benefits-v2__card-text{margin:0;color:var(--text-secondary)}@media (max-width:1280px){.benefits-v2__head{grid-template-columns:1fr;gap:var(--space-32)}}@media (max-width:1200px){.benefits-v2__decor{left:auto;right:-32px;top:0;width:min(300px,68vw)}.benefits-v2__cards{gap:var(--space-24)}.benefits-v2__cards--cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:768px){.benefits-v2__cards,.benefits-v2__cards--cols-4{grid-template-columns:1fr}.benefits-v2__card{gap:var(--space-16);padding:var(--space-16)}.benefits-v2__icon{width:40px;height:40px}.benefits-v2__icon-img{width:16px;height:17px}}.our-approach-v2__media-img{aspect-ratio:512 \/ 287}.our-approach-v2{--our-approach-v2-cta-pad-top:calc(var(--space-48) - var(--space-4));--our-approach-v2-cta-pad-x:var(--space-64);--our-approach-v2-cta-pad-bottom:calc(var(--space-64) + var(--space-6));box-sizing:border-box}.our-approach-v2__top{display:flex;flex-direction:column;gap:var(--space-40)}.our-approach-v2__lead{min-width:0}.our-approach-v2__eyebrow{color:var(--text-muted)}.our-approach-v2__title{margin:0;max-width:606px;color:var(--text-primary)}.our-approach-v2__subtitle{margin:0;max-width:621px;color:var(--text-primary)}.our-approach-v2__badge{display:flex;align-items:center;gap:10px;width:100%;max-width:621px;box-sizing:border-box;padding:var(--space-16) var(--space-24) var(--space-16) var(--space-16);border-radius:var(--radius);background:var(--brand-opacity-15)}.our-approach-v2__badge-icon{display:flex;align-items:center;justify-content:center;flex:none;width:36px;height:36px}.our-approach-v2__badge-icon-img{display:block;width:33.2px;height:33.2px;object-fit:contain}.our-approach-v2__badge-text{margin:0;min-width:0;font-weight:600;color:var(--brand)}.our-approach-v2__steps{display:flex;flex-direction:column;gap:var(--space-16);width:100%;min-width:0;margin:0;padding:0;list-style:none;box-sizing:border-box}.our-approach-v2__step{display:grid;grid-template-columns:auto minmax(0,374fr) minmax(0,425fr);column-gap:var(--space-12);row-gap:var(--space-12);align-items:start;padding-bottom:var(--space-16);border-bottom:1px solid var(--ui-divider)}.our-approach-v2__step-num{display:flex;flex:none;align-items:flex-start;gap:var(--space-2);color:var(--brand)}.our-approach-v2__step-i{font-weight:600}.our-approach-v2__step-slash{position:relative;top:var(--space-6);line-height:1}.our-approach-v2__step-title{margin:0;min-width:0;color:var(--text-primary)}.our-approach-v2__step-text{margin:0;min-width:0;color:var(--text-primary)}.our-approach-v2--steps-num-badge{--our-approach-v2-step-badge-size:40px}.our-approach-v2--steps-num-badge .our-approach-v2__step{align-items:center;column-gap:var(--space-24);padding-right:var(--space-24)}.our-approach-v2--steps-num-badge .our-approach-v2__step-num{align-items:center;justify-content:center;width:var(--our-approach-v2-step-badge-size);height:var(--our-approach-v2-step-badge-size);border-radius:var(--radius);background:var(--brand-surface-soft);gap:0}.our-approach-v2--steps-num-badge .our-approach-v2__step-slash{display:none}.our-approach-v2--steps-num-badge .our-approach-v2__step-i{font-size:var(--text-body-md);font-weight:600;line-height:var(--lh-body)}.our-approach-v2__bottom{display:grid;grid-template-columns:674fr 979fr;gap:var(--space-40);align-items:stretch;margin-top:var(--space-64)}.our-approach-v2__bottom--no-media{grid-template-columns:1fr}.our-approach-v2__media{border-radius:var(--radius);overflow:hidden}.our-approach-v2__media-img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.our-approach-v2__cta{display:flex;border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.our-approach-v2__cta-inner{flex:1 1 auto;justify-content:space-between;width:100%;padding:var(--our-approach-v2-cta-pad-top) var(--our-approach-v2-cta-pad-x) var(--our-approach-v2-cta-pad-bottom);box-sizing:border-box}.our-approach-v2__cta-eyebrow{color:var(--brand)}.our-approach-v2__cta-title{margin:0;color:var(--text-primary)}.our-approach-v2__cta-subtitle{margin:0;max-width:652px;color:var(--text-primary)}.our-approach-v2__cta-row{display:flex;flex-wrap:wrap;gap:var(--space-24);align-items:center}.our-approach-v2__field{flex:1 1 303px;min-width:260px}.our-approach-v2__input{min-height:54px;padding:var(--space-18) var(--space-20);border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.our-approach-v2__cta-btn{flex:1 1 339px;min-height:54px;padding:var(--space-14) var(--space-32)}.our-approach-v2__consent{display:flex;align-items:flex-start;gap:var(--space-18);margin:0;color:var(--text-muted);cursor:pointer}.our-approach-v2__checkbox{width:20px;height:20px;flex:none;margin:0;border-radius:var(--radius-sm);accent-color:var(--brand)}.our-approach-v2__consent-text{margin:0;line-height:var(--lh-body-tight)}.our-approach-v2__consent-link{color:inherit;text-decoration:underline;text-underline-offset:2px;transition:color .16s ease,text-decoration-color .16s ease}.our-approach-v2__consent-link:hover,.our-approach-v2__consent-link:focus-visible{color:var(--brand-dark);text-decoration-color:currentColor}@media (min-width:1361px){.our-approach-v2__top{display:grid;grid-template-columns:minmax(0,621fr) minmax(0,939fr);gap:var(--space-64);align-items:start}.our-approach-v2__lead{grid-column:1}.our-approach-v2__steps{grid-column:2;padding-top:var(--space-64)}}@media (max-width:1360px){.our-approach-v2__title,.our-approach-v2__subtitle,.our-approach-v2__badge{max-width:none}.our-approach-v2__bottom{grid-template-columns:1fr;gap:var(--space-24)}.our-approach-v2__step{grid-template-columns:auto minmax(0,1fr)}.our-approach-v2__step-title,.our-approach-v2__step-text{grid-column:2}}@media (max-width:768px){.our-approach-v2__bottom{margin-top:var(--space-40)}.our-approach-v2__media,.our-approach-v2__media-img{min-height:280px}.our-approach-v2__cta{min-height:0}.our-approach-v2__cta-inner{padding:var(--space-24) var(--space-16)}.our-approach-v2__step{grid-template-columns:1fr;gap:var(--space-8)}.our-approach-v2--steps-num-badge .our-approach-v2__step{padding-right:0}.our-approach-v2__step-num{flex-direction:row}.our-approach-v2__step-text{grid-column:auto}.our-approach-v2__cta-row{flex-direction:column;align-items:stretch;gap:var(--space-16)}.our-approach-v2__field,.our-approach-v2__cta-btn{flex:none;width:100%;min-width:0}}.services-v3{box-sizing:border-box}.services-v3--tab-active-soft{--services-v3-tab-active-mark:url('\/assets\/src\/img\/services\/services-v3-tab-active-mark.svg')}.services-v3__eyebrow{color:var(--text-muted)}.services-v3__title{margin:0;max-width:1080px;color:var(--text-primary)}.services-v3__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-40);margin-bottom:var(--space-40)}.services-v3__head-main{flex:1 1 auto;min-width:0;max-width:1080px}.services-v3__head-lead{margin:0;max-width:1080px;color:var(--text-secondary)}.services-v3__all-link{flex:none;padding:var(--space-4) 0;color:var(--text-secondary)}.services-v3__all-link:hover,.services-v3__all-link:focus-visible{color:var(--brand-dark)}.services-v3__body{display:flex;flex-direction:column;gap:0}.services-v3__list{display:flex;flex-direction:column;gap:var(--space-8)}.services-v3__item{display:flex;flex-direction:column}.services-v3__tab[data-services-v3-index=\"0\"]{border-top:0}.services-v3__tab.is-active + .services-v3__panel + .services-v3__tab{border-top-color:transparent}.services-v3__tab{position:relative;z-index:0;display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;margin:0;padding:var(--space-32) calc(var(--space-40) + var(--space-2));border:0;border-top:1px solid var(--ui-divider);border-radius:0;background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;box-sizing:border-box;transition:color .35s ease,border-color .35s ease}.services-v3__tab::before{content:\"\";position:absolute;inset:0;z-index:-1;border-radius:var(--radius);background:var(--brand-opacity-15);opacity:0;transition:opacity .2s ease;pointer-events:none}.services-v3__item:first-child .services-v3__tab{border-top:0}.services-v3__tab:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (hover:hover){.services-v3__tab:hover:not(.is-active),.services-v3__tab:focus-visible:not(.is-active){color:var(--brand-dark);border-radius:var(--radius)}.services-v3__tab:hover:not(.is-active)::before,.services-v3__tab:focus-visible:not(.is-active)::before{opacity:1}.services-v3__tab:hover:not(.is-active) .services-v3__tab-arrow,.services-v3__tab:focus-visible:not(.is-active) .services-v3__tab-arrow{opacity:0.75}}.services-v3__tab.is-active{border-top-color:transparent;border-radius:var(--radius)}.services-v3--tab-active-filled .services-v3__tab.is-active{color:var(--text-on-brand);background:var(--brand-light)}.services-v3--tab-active-filled .services-v3__tab.is-active::before{opacity:1;background:var(--brand-light)}.services-v3--tab-active-soft .services-v3__tab.is-active{padding:30px var(--space-32);color:var(--brand);font-weight:500}.services-v3--tab-active-soft .services-v3__tab.is-active::before{opacity:1;background:var(--brand-opacity-15)}.services-v3--tab-active-soft .services-v3__tab.is-active::after{content:\"\";position:absolute;left:-4px;top:50%;width:11px;height:min(90px,100%);transform:translateY(-50%);background:var(--services-v3-tab-active-mark) center \/ contain no-repeat;pointer-events:none}.services-v3__item + .services-v3__item .services-v3__tab{border-top:1px solid var(--ui-divider)}.services-v3__item:has(.services-v3__tab.is-active) + .services-v3__item .services-v3__tab{border-top-color:transparent}.services-v3__tab-label{flex:1 1 auto;min-width:0;margin:0;font-family:var(--font-heading);font-weight:var(--font-weight-heading);font-size:1.17em}.services-v3__tab-arrow{display:flex;align-items:center;justify-content:center;flex:none;width:52px;height:52px;color:var(--text-muted);opacity:0.5;transition:opacity .35s ease,visibility .35s ease}.services-v3__tab-arrow .icon{transform:rotate(45deg)}.services-v3__tab.is-active .services-v3__tab-arrow{opacity:0;visibility:hidden;pointer-events:none}.services-v3__panel{display:flex;flex-direction:column;align-self:start;width:100%}.services-v3__panel[hidden]{display:none !important}.services-v3__panel-inner{display:flex;flex-direction:column;gap:var(--space-28)}.services-v3__item .services-v3__panel-inner{padding:var(--space-24) 0 var(--space-8)}.services-v3__media{border-radius:var(--radius);overflow:hidden}.services-v3__media-img{display:block;width:100%;height:auto;aspect-ratio:800 \/ 592;object-fit:cover;object-position:center center}.services-v3__detail-foot{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-28)}.services-v3__detail-text{flex:1 1 auto;min-width:0;max-width:520px;margin:0;color:var(--text-secondary)}.services-v3__more{flex:none;padding:var(--space-4) 0;color:var(--text-secondary)}.services-v3__more:hover,.services-v3__more:focus-visible{color:var(--brand-dark)}@media (min-width:1201px){.services-v3__list{display:flex;flex-wrap:wrap;column-gap:var(--space-40);row-gap:0;position:relative;align-content:flex-start}.services-v3__item{display:contents}.services-v3__tab{flex:none;width:calc((100% - var(--space-40)) \/ 2);border-top:1px solid var(--ui-divider);border-radius:0}.services-v3__tab[data-services-v3-index=\"0\"]{border-top:0}.services-v3__tab.is-active + .services-v3__panel + .services-v3__tab{border-top-color:transparent}.services-v3__panel{position:absolute;top:0;right:0;width:calc((100% - var(--space-40)) \/ 2);align-self:start;display:flex !important;grid-template-rows:none;transition:none}.services-v3__item .services-v3__panel-inner{padding:0;overflow:visible}}@media (max-width:1200px){.services-v3__head{flex-direction:column;align-items:flex-start;gap:var(--space-24)}.services-v3__detail-foot{flex-direction:column;align-items:flex-start}.services-v3__detail-text{max-width:none}.services-v3__item .services-v3__tab,.services-v3__item:first-child .services-v3__tab,.services-v3__item + .services-v3__item .services-v3__tab{border-top:0;border-radius:var(--radius)}.services-v3__item:has(.services-v3__tab.is-active) + .services-v3__item .services-v3__tab{border-top-color:transparent}.services-v3__item .services-v3__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s ease}.services-v3__item.is-open .services-v3__panel{grid-template-rows:1fr;transition:grid-template-rows .35s ease}.services-v3__item .services-v3__panel[hidden]{display:none !important}.services-v3__item .services-v3__panel-inner{min-height:0;overflow:hidden}}@media (max-width:768px){.services-v3__tab{padding:var(--space-24) var(--space-20)}.services-v3--tab-active-soft .services-v3__tab.is-active{padding:var(--space-24) var(--space-20)}.services-v3__tab-arrow{width:40px;height:40px}}@media (max-width:768px) and (prefers-reduced-motion:reduce){.services-v3__tab,.services-v3__item .services-v3__panel{transition:none}}.cases-v1__img{aspect-ratio:var(--cases-v1-media-aspect)}.cases-v1{--cases-v1-media-aspect:822 \/ 677;box-sizing:border-box}.cases-v1__inner.stack--xl{gap:var(--space-40)}.cases-v1__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.cases-v1__head-main{flex:1 1 auto;min-width:0;max-width:970px}.cases-v1__head-actions{flex:none}.cases-v1__slider-nav{width:132px;justify-content:space-between}.cases-v1__slider-nav .slider-nav__btn{background:var(--bg-fill-filter-widget);border:1px solid var(--ui-border-soft);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile))}.cases-v1__slider-nav .slider-nav__btn:hover:not(:disabled):not(.swiper-button-disabled){background:var(--white-opacity-75)}.cases-v1__eyebrow{color:var(--text-muted)}.cases-v1__title{margin:0;color:var(--text-primary)}.cases-v1__slider-foot{overflow:hidden}.cases-v1__carousel{width:100%;overflow:hidden;border-radius:var(--radius);isolation:isolate;clip-path:inset(0 round var(--radius));transform:translateZ(0);contain:paint}.cases-v1__slider.swiper{width:100%;overflow:hidden !important;isolation:isolate}.cases-v1__slider .swiper-wrapper{box-sizing:border-box}.cases-v1__slider .swiper-slide{width:100% !important;max-width:100%;flex-shrink:0;box-sizing:border-box;overflow:hidden}.cases-v1__slider.is-settled .swiper-slide:not(.swiper-slide-active){visibility:hidden;pointer-events:none}.cases-v1__slide{width:100%;height:auto;box-sizing:border-box}.cases-v1__panel{width:100%;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:stretch;min-height:560px;border-radius:var(--radius);background:var(--bg-fill-soft);overflow:hidden}.cases-v1__panel--reverse .cases-v1__media{order:-1}.cases-v1__body{display:flex;flex-direction:column;justify-content:flex-start;gap:var(--space-24);min-width:0;padding:var(--space-48) var(--space-40) var(--space-40);box-sizing:border-box}.cases-v1__body-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16)}.cases-v1__index{display:flex;align-items:baseline;gap:var(--space-2);margin:0;color:var(--brand)}.cases-v1__index-num{color:var(--brand)}.cases-v1__index-sep{position:relative;top:3px;font-family:var(--font-accent,inherit);font-size:26px;font-weight:500;line-height:1.4;color:var(--brand)}.cases-v1__category{margin:0;color:var(--ui-border-strong);text-align:right}.cases-v1__copy.stack--md{gap:var(--space-16)}.cases-v1__card-title{margin:0;color:var(--text-primary)}.cases-v1__card-text{margin:0;color:var(--text-secondary)}.cases-v1__meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-16);align-items:start;margin-top:auto;padding-top:var(--space-24)}.cases-v1__meta-item{display:flex;flex-direction:column;justify-content:flex-start;gap:var(--space-16);min-width:0;padding-left:var(--space-12);border-left:1px solid var(--ui-border-default)}.cases-v1__meta-label{margin:0;color:var(--text-secondary)}.cases-v1__meta-value{margin:0;color:var(--brand)}.cases-v1__media{--cases-v1-reveal:50%;position:relative;align-self:stretch;width:100%;height:100%;min-height:100%;margin:0;border-radius:var(--radius) 0 0 var(--radius);overflow:hidden;background:var(--bg-fill-panel);user-select:none;box-sizing:border-box}.cases-v1__panel--reverse .cases-v1__media{border-radius:0 var(--radius) var(--radius) 0}.cases-v1__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block}.cases-v1__img--after{z-index:0}.cases-v1__img--before{z-index:1;clip-path:inset(0 calc(100% - var(--cases-v1-reveal)) 0 0);transition:filter .2s ease}.cases-v1__media.is-blurred .cases-v1__img--before{filter:blur(5px)}.cases-v1__divider{position:absolute;top:0;bottom:0;left:var(--cases-v1-reveal);width:1px;background:var(--text-on-brand);opacity:1;transform:translateX(-.5px);z-index:2}.cases-v1__badge{position:absolute;top:var(--space-32);padding:var(--space-6) var(--space-10);border-radius:var(--radius-sm);background:var(--dark-opacity-20);color:var(--white);z-index:3}.cases-v1__badge--before{left:var(--space-32)}.cases-v1__badge--after{right:var(--space-32)}.cases-v1__handle{position:absolute;left:var(--cases-v1-reveal);top:50%;width:86px;height:86px;transform:translate(-50%,-50%);padding:0;border:0;border-radius:var(--radius-full);background:transparent;cursor:grab;touch-action:none;z-index:4}.cases-v1__handle:active{cursor:grabbing}.cases-v1__handle:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.cases-v1__handle img{display:block;width:100%;height:100%;pointer-events:none}@media (max-width:1600px){.cases-v1__handle{width:60px;height:60px}.cases-v1__badge{top:var(--space-24);padding:var(--space-4) var(--space-8);font-size:var(--text-body-md)}.cases-v1__badge--before{left:var(--space-24)}.cases-v1__badge--after{right:var(--space-24)}}@media (min-width:769px){.cases-v1{--cases-v1-sticky-top:calc(var(--site-nav-h,0px) + var(--space-24));--cases-v1-panel-h:560px}.cases-v1__head-actions{display:none}.cases-v1__slider-foot{overflow:visible}.cases-v1__slider-foot,.cases-v1__carousel,.cases-v1__slider.swiper{overflow:visible !important;border-radius:0;isolation:auto;contain:none;clip-path:none;transform:none}.cases-v1__slider .swiper-wrapper{display:flex;flex-direction:column;gap:0;transform:none !important;padding-bottom:var(--cases-v1-stack-tail,0px)}.cases-v1__slider .swiper-slide,.cases-v1__slide{overflow:visible}.cases-v1__slider .swiper-slide{position:sticky;top:var(--cases-v1-sticky-top);z-index:calc(1 + var(--cases-v1-card-index,0));visibility:visible !important;pointer-events:auto !important}.cases-v1__slider.is-settled .swiper-slide:not(.swiper-slide-active){visibility:visible !important;pointer-events:auto !important}.cases-v1__panel{box-shadow:var(--shadow-brand-soft)}}@media (max-width:1200px){.cases-v1__panel{min-height:560px}.cases-v1__body{padding:var(--space-32) var(--space-24) var(--space-24)}.cases-v1__badge{top:var(--space-24)}.cases-v1__badge--before{left:var(--space-24)}.cases-v1__badge--after{right:var(--space-24)}}@media (max-width:768px){.cases-v1__panel{grid-template-columns:1fr;min-height:0}.cases-v1__panel--reverse .cases-v1__media{order:2}.cases-v1__body{order:1}.cases-v1__media{order:2;align-self:auto;width:100%;height:auto;min-height:0;aspect-ratio:var(--cases-v1-media-aspect);margin:0;border-radius:var(--radius)}.cases-v1__panel--reverse .cases-v1__media{border-radius:var(--radius)}.cases-v1__meta{grid-template-columns:1fr;gap:var(--space-12)}.cases-v1__head{align-items:flex-start}.cases-v1__slider-nav{display:none}.cases-v1__inner.stack--xl{gap:var(--space-32)}.cases-v1__body{padding:var(--space-24) var(--space-20) var(--space-20)}.cases-v1__body-top{align-items:flex-start}.cases-v1__category{font-size:22px}.cases-v1__badge{top:var(--space-12)}.cases-v1__badge--before{left:var(--space-12)}.cases-v1__badge--after{right:var(--space-12)}}@media (min-width:769px){.cases-v1__slider-foot .slider-pagination-host{display:none}}.doctors-v4{--doctors-v4-gap:var(--space-40);--doctors-v4-list-gap:var(--space-24);--doctors-v4-list-bottom-air:var(--space-12);--doctors-v4-avatar:clamp(108px,7.2vw,138px);--doctors-v4-card-min-h:calc(var(--doctors-v4-avatar) + var(--space-24) * 2);--doctors-v4-list-h:calc(3 * var(--doctors-v4-card-min-h) + 2 * var(--doctors-v4-list-gap) + var(--doctors-v4-list-bottom-air));--doctors-v4-photo-back:url('\/assets\/src\/img\/doctors\/doctors-back.jpg');box-sizing:border-box}.doctors-v4--featured-no-card-bg .doctors-v4__featured{background:transparent;border:1px solid var(--ui-divider)}.doctors-v4--badge-border{}.doctors-v4--badge-border .doctors-v4__badge{border:1px solid var(--brand-surface-soft);background:var(--bg-fill-surface)}.doctors-v4--badge-fill .doctors-v4__badge{background:var(--white)}.doctors-v4--list-no-card-bg{--doctors-v4-list-gap:0px;--doctors-v4-list-h:calc(3 * var(--doctors-v4-card-min-h) + var(--doctors-v4-list-bottom-air))}.doctors-v4--list-no-card-bg .doctors-v4__card{background:transparent;border:0;border-radius:0;box-shadow:none;border-bottom:1px solid var(--ui-divider);transition:box-shadow .2s ease,border-color .2s ease,border-radius .2s ease}.doctors-v4--list-no-card-bg .doctors-v4__card:hover:not(.is-active){border-bottom-color:var(--ui-divider);box-shadow:none}.doctors-v4--list-no-card-bg .doctors-v4__card.is-active{border-bottom-color:var(--ui-border-soft);box-shadow:none}.doctors-v4__eyebrow.eyebrow{color:var(--text-muted)}.doctors-v4__head-row{display:grid;grid-template-columns:minmax(0,659px) minmax(0,725px);justify-content:space-between;gap:var(--space-32);align-items:start}.doctors-v4__title{margin:0;max-width:659px;color:var(--text-primary)}.doctors-v4__intro{min-width:0;max-width:725px}.doctors-v4__lead{margin:0;color:var(--text-secondary)}.doctors-v4__all-link{color:var(--text-secondary)}.doctors-v4__all-link:hover,.doctors-v4__all-link:focus-visible{color:var(--brand-dark)}.doctors-v4__body{display:grid;grid-template-columns:minmax(0,796fr) minmax(0,800fr);gap:var(--doctors-v4-gap);align-items:start}.doctors-v4__featured-col{display:flex;flex-direction:column;gap:var(--space-24);min-width:0}.doctors-v4__featured-host{min-width:0}.doctors-v4__featured-mobile{display:none;width:100%;min-width:0;overflow:hidden}.doctors-v4__featured-mobile .swiper-slide{height:auto;box-sizing:border-box}.doctors-v4__featured{display:flex;flex-direction:column;min-width:0;min-height:clamp(520px,35vw,677px);border-radius:var(--radius);background:var(--bg-fill-soft);box-sizing:border-box}.doctors-v4__featured-photo{position:relative;margin:var(--space-32) var(--space-24) 0;border-radius:var(--radius);overflow:hidden;aspect-ratio:745 \/ 441;background-color:var(--bg-fill-panel);background-image:var(--doctors-v4-photo-back);background-repeat:no-repeat;background-position:center;background-size:cover}.doctors-v4__featured-img{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:contain;object-position:center bottom}.doctors-v4__featured-photo--has-bg{background-image:none}.doctors-v4__featured-badges[hidden],.doctors-v4__badge[hidden],.doctors-v4__featured-img[hidden],.doctors-v4__featured-meta[hidden],.doctors-v4__featured-focus[hidden],.doctors-v4__featured-more[hidden],.doctors-v4__meta-dot[hidden]{display:none !important}.doctors-v4__featured-badges{position:absolute;left:var(--space-24);bottom:var(--space-24);z-index:2;display:flex;flex-wrap:wrap;gap:var(--space-16)}.doctors-v4__badge{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-4);min-height:40px;padding:0 var(--space-10);border-radius:var(--radius-pill);background:var(--white-opacity-75);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-secondary);white-space:nowrap}.doctors-v4__badge-star{width:24px;height:24px;color:var(--rating-accent)}.doctors-v4__featured-foot{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-24);align-items:end;margin-top:auto;padding:var(--space-32) var(--space-40) var(--space-40);box-sizing:border-box}.doctors-v4__featured-copy{min-width:0}.doctors-v4__featured-name{margin:0;color:var(--text-primary)}.doctors-v4__featured-meta,.doctors-v4__card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-10);margin:0;color:var(--text-muted)}.doctors-v4__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--text-muted)}.doctors-v4__featured-focus{margin:0;color:var(--text-muted)}.doctors-v4__featured-actions{align-items:stretch;min-width:212px}.doctors-v4__featured-btn,.doctors-v4__featured-more{flex:0 0 auto;min-height:48px;height:auto;padding:var(--space-12) var(--space-24);text-align:center;white-space:nowrap}.doctors-v4__list-col{display:flex;flex-direction:column;gap:var(--space-24);min-width:0}.doctors-v4__carousel{width:100%;min-height:var(--doctors-v4-list-h);overflow:hidden}.doctors-v4__slider.swiper{height:var(--doctors-v4-list-h);overflow:hidden;padding-bottom:var(--doctors-v4-list-bottom-air);box-sizing:border-box}.doctors-v4__slider .swiper-slide{flex-shrink:0;height:var(--doctors-v4-card-min-h);min-height:var(--doctors-v4-card-min-h);overflow:hidden;box-sizing:border-box}.doctors-v4__slider .swiper-wrapper{padding-bottom:calc(var(--doctors-v4-list-gap) + var(--doctors-v4-list-bottom-air));box-sizing:border-box}.doctors-v4__card{position:relative;display:flex;flex-direction:row;align-items:center;gap:var(--space-32);width:100%;height:100%;min-height:0;padding:var(--space-24);border:1px solid transparent;border-radius:var(--radius);background:var(--bg-fill-soft);box-sizing:border-box;overflow:hidden;cursor:pointer;transition:box-shadow .2s ease,border-color .2s ease}.doctors-v4__slider .doctors-v4__featured-photo{position:static;flex:none;width:var(--doctors-v4-avatar);height:var(--doctors-v4-avatar);margin:0;border-radius:var(--radius-full);aspect-ratio:1;overflow:visible}.doctors-v4__slider .doctors-v4__featured-img{border-radius:var(--radius-full);background-color:var(--bg-fill-panel);background-image:var(--doctors-v4-photo-back);background-repeat:no-repeat;background-position:center;background-size:cover}.doctors-v4__slider .doctors-v4__featured-photo--has-bg .doctors-v4__featured-img{background-image:none;object-fit:cover;object-position:center}.doctors-v4__slider .doctors-v4__featured-badges{top:50%;right:var(--space-24);bottom:auto;left:auto;flex-direction:column;align-items:flex-end;gap:var(--space-10);transform:translateY(-50%)}.doctors-v4__slider .doctors-v4__featured-foot{display:block;flex:1 1 auto;align-self:center;min-width:0;margin:0;padding:0 150px 0 0}.doctors-v4__slider .doctors-v4__featured-copy{gap:var(--space-8)}.doctors-v4__slider .doctors-v4__featured-name{display:flex;flex-direction:column;font-family:var(--font-body);font-size:clamp(1.0625em,var(--fluid-lead),var(--text-lead));font-weight:500;line-height:var(--lh-lead);overflow:hidden}.doctors-v4__slider .doctors-v4__featured-name-line{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doctors-v4__slider .doctors-v4__featured-meta{flex-wrap:nowrap;min-width:0;overflow:hidden}.doctors-v4__slider .doctors-v4__featured-meta > span:not(.doctors-v4__meta-dot){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doctors-v4__slider .doctors-v4__featured-focus,.doctors-v4__slider .doctors-v4__featured-actions{display:none}.doctors-v4__card:hover:not(.is-active){border-color:var(--brand-opacity-20)}.doctors-v4__card.is-active{border-color:var(--brand-dark);box-shadow:0 12px 28px var(--glass-text-08)}.doctors-v4__slider .doctors-v4__card.is-active::before{content:\"\";position:absolute;top:0;right:0;left:0;z-index:2;height:1px;background:var(--brand-decor);pointer-events:none}.doctors-v4__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.doctors-v4__card-avatar{position:relative;flex:none;width:var(--doctors-v4-avatar);height:var(--doctors-v4-avatar);border-radius:var(--radius-full);overflow:hidden;background-color:var(--bg-fill-panel);background-image:var(--doctors-v4-photo-back);background-repeat:no-repeat;background-position:center;background-size:cover}.doctors-v4__card-img{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:contain;object-position:center bottom}.doctors-v4__card-avatar--has-bg{background-image:none}.doctors-v4__card-img--has-bg{object-fit:cover;object-position:center}.doctors-v4__card-main{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-16);align-items:center;flex:1 1 auto;min-width:0}.doctors-v4__card-copy{min-width:0}.doctors-v4__card-name{display:flex;flex-direction:column;margin:0;color:var(--text-primary);overflow:hidden}.doctors-v4__card-name-line{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doctors-v4__card-meta{flex-wrap:nowrap;min-width:0}.doctors-v4__card-badges{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-10);flex:none}.doctors-v4__badge--compact{position:static}.doctors-v4__controls{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;column-gap:var(--space-24);align-self:center;width:min(100%,603px);min-height:44px}.doctors-v4__controls.doctors-v4__controls--mobile{display:none}.doctors-v4__nav-btn{flex:none;width:44px;height:44px}.doctors-v4__arrow{display:inline-flex;align-items:center;justify-content:center;flex:none;transform-origin:center}.doctors-v4__arrow--prev{transform:scaleX(-1)}.doctors-v4__pagination-host{display:flex;align-items:center;justify-content:center;justify-self:stretch;align-self:center;width:100%;min-width:0;min-height:44px;margin:0 !important;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;pointer-events:auto}.doctors-v4__pagination-host::-webkit-scrollbar{display:none}.doctors-v4__pagination-host .doctors-v4__pagination{position:relative !important;top:auto !important;bottom:auto !important;left:auto !important;display:flex !important;flex-wrap:nowrap;align-items:center;justify-content:center;width:max-content !important;max-width:none;min-width:0;min-height:var(--slider-dot-size,18px);height:auto;margin:0 !important;padding-inline:2px !important;overflow:visible;pointer-events:auto}.doctors-v4__pagination-host .doctors-v4__pagination.swiper-pagination-vertical{top:auto !important;right:auto !important;left:auto !important;bottom:auto !important;height:auto !important;min-height:var(--slider-dot-size,18px);transform:none !important}.doctors-v4__pagination-host .doctors-v4__pagination.swiper-pagination-bullets-dynamic{overflow-x:hidden;overflow-y:visible;max-width:100%}.doctors-v4__pagination-host .doctors-v4__pagination.swiper-pagination-vertical .swiper-pagination-bullet{margin:0 !important;top:auto !important}.doctors-v4__pagination-host .doctors-v4__pagination .swiper-pagination-bullet{transform-origin:center center}.doctors-v4__pagination-host .doctors-v4__pagination:not(.swiper-pagination-bullets-dynamic){gap:var(--space-12)}.doctors-v4__pagination.slider-pagination--dots .swiper-pagination-bullet-active-main:not(.swiper-pagination-bullet-active)::before{width:var(--slider-dot-inactive-size);height:var(--slider-dot-inactive-size);border:none;background:var(--slider-dot-ring-inactive)}.doctors-v4__pagination.slider-pagination--dots .swiper-pagination-bullet-active-main:not(.swiper-pagination-bullet-active)::after{content:none}@media (max-width:1280px){.doctors-v4__featured-foot{grid-template-columns:1fr;align-items:start;gap:var(--space-24)}.doctors-v4__featured-actions{flex-direction:column;align-items:stretch;min-width:0;width:100%}.doctors-v4__featured-btn,.doctors-v4__featured-more{flex:0 0 auto;width:100%;white-space:normal}}@media (max-width:1200px){.doctors-v4__head-row,.doctors-v4__body{grid-template-columns:1fr}.doctors-v4__title{max-width:none}}@media (max-width:768px){.doctors-v4__featured--desktop,.doctors-v4__list-col{display:none}.doctors-v4__featured-mobile{display:block}.doctors-v4__controls.doctors-v4__controls--desktop{display:none}.doctors-v4__controls.doctors-v4__controls--mobile{display:grid;width:100%}.doctors-v4__featured{min-height:0}.doctors-v4__featured-photo{margin:var(--space-24) var(--space-16) 0}.doctors-v4__featured-badges{left:var(--space-8);bottom:var(--space-8);gap:var(--space-8)}.doctors-v4__featured-badges .doctors-v4__badge{min-height:32px;padding:0 var(--space-8);font-size:max(var(--text-min),var(--text-body-sm));line-height:1.2}.doctors-v4__featured-badges .doctors-v4__badge-star{width:18px;height:18px}.doctors-v4__featured-foot{padding:var(--space-24) var(--space-16) var(--space-24)}}.quiz-v1{position:relative;overflow:hidden;box-sizing:border-box;--quiz-v1-layout-max:1640;--quiz-v1-decor-x:300;--quiz-v1-decor-y:63;--quiz-v1-decor-w:1073;--quiz-v1-decor-h:721}.quiz-v1__figure{position:absolute;left:calc(var(--quiz-v1-decor-x) \/ var(--quiz-v1-layout-max) * 100%);top:calc(var(--quiz-v1-decor-y) \/ var(--quiz-v1-decor-h) * 100%);z-index:1;width:calc(var(--quiz-v1-decor-w) \/ var(--quiz-v1-layout-max) * 100%);max-width:1073px;aspect-ratio:1073 \/ 721;pointer-events:none}.quiz-v1__figure-frame{position:relative;width:100%;height:100%;overflow:hidden}.quiz-v1__figure-img{position:absolute;inset:0;width:100%;height:100%;max-width:none;display:block;object-fit:contain;object-position:center bottom}.quiz-v1__layout{display:grid;grid-template-columns:minmax(0,749px) minmax(0,612px);justify-content:space-between;align-items:center;gap:calc(var(--space-64) * 2);min-height:634px;position:relative}.quiz-v1__intro{position:relative;z-index:2;display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-40);min-height:627px;max-width:749px;min-width:0}.quiz-v1__intro-top{min-width:0}.quiz-v1__eyebrow{color:var(--text-muted)}.quiz-v1__title{margin:0;color:var(--text-primary)}.quiz-v1__lead{margin:0;max-width:627px;color:var(--text-secondary)}.quiz-v1__promo{display:flex;align-items:flex-start;gap:var(--space-24);max-width:398px}.quiz-v1__promo-gift{display:flex;align-items:center;justify-content:center;width:50px;height:50px;flex:none}.quiz-v1__promo-gift-img{display:block;width:50px;height:50px;object-fit:contain}.quiz-v1__promo-tag{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;width:fit-content;max-width:100%;padding:var(--space-10) var(--space-12);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--promo-accent) 10%,transparent);color:var(--promo-accent);font-weight:600;letter-spacing:-0.01em;text-transform:uppercase}.quiz-v1__promo-text{margin:0;color:var(--text-secondary);font-weight:500}[data-quiz-v1-intro-part][hidden]{display:none !important}.quiz-v1__title--final{color:var(--text-muted)}.quiz-v1__title--final .accent{color:var(--text-primary)}.quiz-v1__callback{display:flex;align-items:flex-start;gap:var(--space-24);max-width:398px}.quiz-v1__callback-icon{display:flex;align-items:center;justify-content:center;width:50px;height:50px;flex:none}.quiz-v1__callback-icon-svg{display:block;width:50px;height:50px;color:var(--brand)}.quiz-v1__callback-text{margin:0;max-width:309px;color:var(--brand);font-weight:500}.quiz-v1__panel{position:relative;z-index:3;min-width:0;max-width:612px;justify-self:end}.quiz-v1__panel-inner{position:relative;z-index:1;display:flex;flex-direction:column;min-height:627px;padding:var(--space-64) var(--space-64) var(--space-48);border:1px solid var(--ui-surface-soft);border-radius:var(--radius);background:var(--white-opacity-75);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));box-sizing:border-box}.quiz-v1__step{position:absolute;top:var(--space-32);right:var(--space-32);display:inline-flex;align-items:center;justify-content:center;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);background:var(--brand-opacity-20);color:var(--brand-dark)}.quiz-v1__form{flex:1 1 auto;min-height:0;margin:0}.quiz-v1__fieldset{margin:0;padding:0;border:0;min-width:0}.quiz-v1__question{margin:0 0 var(--space-8);padding-right:calc(var(--space-48) + var(--space-64));color:var(--text-primary)}.quiz-v1__options{display:flex;flex-direction:column;gap:var(--space-8);width:100%}.quiz-v1__option{display:flex;align-items:center;gap:var(--space-8);width:100%;padding:var(--space-4) var(--space-2) var(--space-4) var(--space-8);border:1px solid var(--ui-border-soft);border-radius:var(--radius-sm);background:transparent;cursor:pointer;box-sizing:border-box;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}.quiz-v1__option-input{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.quiz-v1__option-icon{display:flex;align-items:center;justify-content:center;width:46px;height:46px;flex:none}.quiz-v1__option-icon-img{display:block;width:26px;height:26px;object-fit:contain}.quiz-v1__option-label{min-width:0;color:var(--text-primary)}.quiz-v1__option--radio{padding-left:var(--space-8)}.quiz-v1__option-marker{display:flex;align-items:center;justify-content:center;width:20px;height:46px;flex:none;position:relative}.quiz-v1__option-marker::before{content:'';width:20px;height:20px;border:2px solid var(--ui-border-soft);border-radius:50%;box-sizing:border-box;transition:border-color .16s ease,background-color .16s ease}.quiz-v1__option--radio:has(.quiz-v1__option-input:checked) .quiz-v1__option-marker::before{border-color:var(--brand)}.quiz-v1__option--radio:has(.quiz-v1__option-input:checked) .quiz-v1__option-marker::after{content:'';position:absolute;left:50%;top:50%;width:10px;height:10px;border-radius:50%;background:var(--brand);transform:translate(-50%,-50%)}.quiz-v1__option:hover{border-color:var(--brand-border)}.quiz-v1__option:has(.quiz-v1__option-input:checked){border-color:var(--brand-border);background:var(--brand-opacity-15)}.quiz-v1__option:has(.quiz-v1__option-input:focus-visible){outline:2px solid var(--brand);outline-offset:2px}.quiz-v1__actions{margin-top:auto;padding-top:var(--space-24)}.quiz-v1__continue{width:100%;min-height:54px;padding:var(--space-14) var(--space-32)}.quiz-v1__continue:disabled{cursor:not-allowed;opacity:0.55}.quiz-v1__step-panel[hidden]{display:none !important}.quiz-v1__nav{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24)}.quiz-v1__back{background:transparent;border:0;padding:var(--space-8) 0;cursor:pointer;color:var(--text-primary)}.quiz-v1__back:hover{color:var(--brand-dark)}.quiz-v1__back:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.quiz-v1__back-icon{transform:rotate(180deg)}.quiz-v1__continue--compact{width:auto;min-width:201px;flex:none}.quiz-v1__fields{width:100%;max-width:429px}.quiz-v1__field{width:100%;min-width:0}.quiz-v1__input.field__input{min-height:54px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50);width:100%;box-sizing:border-box}.quiz-v1__lead-actions{width:100%;max-width:429px}.quiz-v1__consent{margin:0}.quiz-v1__consent .popup-form__consent-text{color:var(--text-muted)}.quiz-v1__submit{width:100%;min-height:54px;padding:var(--space-14) var(--space-32)}.quiz-v1__submit:disabled{cursor:not-allowed}.quiz-v1__bonus{display:flex;align-items:flex-start;gap:var(--space-24);margin-top:auto;padding-top:var(--space-24);max-width:459px}.quiz-v1__bonus-visual{position:relative;width:122px;height:109px;flex:none}.quiz-v1__bonus-doctor{position:absolute;left:20px;top:7px;width:102px;height:102px;border-radius:50%;object-fit:cover;display:block}.quiz-v1__bonus-gift{position:absolute;left:0;top:0;width:50px;height:50px;object-fit:contain;display:block}.quiz-v1__bonus-tag{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;width:fit-content;max-width:100%;padding:var(--space-10) var(--space-12);border-radius:var(--radius-pill);background:var(--brand-opacity-20);color:var(--brand-dark);font-weight:600;letter-spacing:-0.01em;text-transform:uppercase}.quiz-v1__bonus-text{margin:0;color:var(--brand);font-weight:500}.quiz-v1__privacy{display:flex;align-items:center;gap:var(--space-12);margin:0;color:var(--text-muted)}.quiz-v1__privacy-icon{flex:none;width:22px;height:24px;color:var(--text-muted)}@media (max-width:1360px){.quiz-v1__layout{grid-template-columns:minmax(0,1fr);justify-content:stretch;min-height:0;gap:var(--space-64)}.quiz-v1__intro{min-height:0;max-width:none}.quiz-v1__panel{max-width:none;justify-self:stretch}.quiz-v1__panel-inner{min-height:0}.quiz-v1__question{padding-right:0}}@media (max-width:1360px) and (min-width:992px){.quiz-v1__layout{grid-template-columns:minmax(0,1fr) minmax(0,min(400px,36vw));grid-template-areas:\"intro-top decor\" \"promo promo\" \"panel panel\";align-items:start;gap:var(--space-64)}.quiz-v1__intro{display:contents;min-height:0}.quiz-v1__intro-top{grid-area:intro-top;position:relative;z-index:2}.quiz-v1__promo{grid-area:promo;position:relative;z-index:2;max-width:none}.quiz-v1__callback{grid-area:promo;position:relative;z-index:2;max-width:none}.quiz-v1__figure{grid-area:decor;position:relative;left:auto;top:auto;width:100%;max-width:none;transform:none;align-self:center;z-index:1}.quiz-v1__panel{grid-area:panel}}@media (max-width:991px){.quiz-v1__figure{display:none}}@media (max-width:768px){.quiz-v1__panel-inner{padding:var(--space-48) var(--space-24) var(--space-32)}.quiz-v1__step{position:static;align-self:flex-start;margin-bottom:var(--space-16)}.quiz-v1__promo{max-width:none}.quiz-v1__callback{max-width:none}}.choosing-teeth-v1{box-sizing:border-box}.choosing-teeth-v1__card{position:relative;overflow:hidden;border-radius:var(--radius);background:var(--bg-fill-surface);box-sizing:border-box;min-height:817px}.choosing-teeth-v1__grid{display:grid;grid-template-columns:minmax(0,918fr) minmax(0,1002fr);align-items:stretch;min-height:817px}.choosing-teeth-v1__left{position:relative;z-index:1;display:flex;flex-direction:column;min-height:817px;padding:calc(var(--space-64) + var(--space-6)) calc(var(--space-64) + var(--space-24)) var(--space-56);box-sizing:border-box;overflow:hidden;background:var(--bg-fill-page)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left{overflow:visible}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left{overflow:visible}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left::after,.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left::after{content:\"\";position:absolute;pointer-events:none;z-index:0;background-image:url(\"\/assets\/src\/img\/choosing-teeth\/tooth-step2.png\");background-repeat:no-repeat;background-size:contain;background-position:right center}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left::after{left:45%;top:233px;right:auto;width:778px;height:518px;opacity:.9}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left::after{left:45%;top:233px;right:auto;transform:none;width:778px;height:518px;opacity:.9}.choosing-teeth-v1__step,.choosing-teeth-v1__stage,.choosing-teeth-v1__bottom,.choosing-teeth-v1__bottom-block{position:relative;z-index:1}.choosing-teeth-v1__step{flex:none}.choosing-teeth-v1__step-chip{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-6) var(--space-12);border-radius:var(--radius-pill);background:var(--brand-opacity-20);color:var(--brand-dark)}.choosing-teeth-v1__stage{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;min-height:0;text-align:center}.choosing-teeth-v1__panel{width:100%}.choosing-teeth-v1__panel[hidden],.choosing-teeth-v1__bottom-block[hidden]{display:none !important}.choosing-teeth-v1__panel--step1:not([hidden]){display:flex;justify-content:center}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__stage{align-items:flex-start;justify-content:flex-start;text-align:left;padding-top:calc(var(--space-56) + var(--space-6));padding-left:var(--space-10)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__bottom-block{padding-left:var(--space-10)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__bottom{max-width:696px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__stage{align-items:flex-start;justify-content:flex-start;text-align:left;padding-top:calc(var(--space-40) + var(--space-4))}@media (min-width:1281px) and (max-width:1599px){.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left::after,.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left::after{left:28%}}@media (min-width:1281px){.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__bottom-block{display:none}.choosing-teeth-v1__back,.choosing-teeth-v1__next{font-size:18px}.choosing-teeth-v1__next.is-locked{opacity:.55;cursor:not-allowed;pointer-events:auto}.choosing-teeth-v1__next.is-locked:hover{color:var(--text-primary)}}.choosing-teeth-v1__panel--step2{text-align:left}.choosing-teeth-v1__step2{width:100%;max-width:530px}.choosing-teeth-v1__step2.stack--md{gap:calc(var(--space-32) + var(--space-4))}.choosing-teeth-v1__step2-question{margin:0;max-width:527px;color:var(--text-primary);font-size:calc(var(--text-base) * 1.5);line-height:1.4}.choosing-teeth-v1__options{width:100%;max-width:429px}.choosing-teeth-v1__options.stack--sm{gap:var(--space-8)}.choosing-teeth-v1__option{display:flex;align-items:center;gap:var(--space-8);width:100%;min-height:54px;padding:var(--space-4) var(--space-2) var(--space-4) var(--space-8);border:1px solid var(--ui-border-soft);border-radius:var(--radius-sm);background:transparent;cursor:pointer;box-sizing:border-box}.choosing-teeth-v1__option-input{flex:none;width:20px;height:20px;margin:0;accent-color:var(--brand);cursor:pointer}.choosing-teeth-v1__option-label{color:var(--text-primary);font-weight:600}.choosing-teeth-v1__panel--step3{text-align:left}.choosing-teeth-v1__step3{display:flex;flex-direction:column;width:100%;max-width:532px}.choosing-teeth-v1__step3-head{margin-bottom:calc(var(--space-64) + var(--space-4))}.choosing-teeth-v1__step3-intro{margin:0;color:var(--text-primary);font-size:calc(var(--text-base) * 1.5);line-height:1.4}.choosing-teeth-v1__summary{display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--space-40) + var(--space-4))}.choosing-teeth-v1__summary-item{display:flex;align-items:center;gap:calc(var(--space-16) + var(--space-4));min-width:0;color:var(--text-secondary)}.choosing-teeth-v1__summary-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex:none;box-sizing:border-box}.choosing-teeth-v1__summary-icon-img{display:block;width:44px;height:44px}.choosing-teeth-v1__summary-icon--concern{background-image:url(\"\/assets\/src\/img\/choosing-teeth\/step3-stat-concern-bg.svg\");background-repeat:no-repeat;background-position:center;background-size:44px 44px}.choosing-teeth-v1__summary-icon-leaf{display:block;width:26px;height:26px}.choosing-teeth-v1__summary-copy{display:flex;align-items:center;gap:var(--space-6);min-width:0}.choosing-teeth-v1__summary-label{white-space:nowrap}.choosing-teeth-v1__summary-value{color:var(--text-primary)}.choosing-teeth-v1__services{margin-bottom:calc(var(--space-32) + var(--space-2))}.choosing-teeth-v1__services-title{margin:0;color:var(--text-secondary);font-weight:600}.choosing-teeth-v1__services-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-8)}.choosing-teeth-v1__service{display:flex;align-items:center;gap:var(--space-16);width:380px;max-width:100%;padding:var(--space-20) var(--space-14);border-radius:12px;background:var(--white-opacity-75);box-shadow:0 4px 22px var(--brand-opacity-20);box-sizing:border-box}.choosing-teeth-v1__service-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex:none}.choosing-teeth-v1__service-icon-img{display:block;width:24px;height:24px}.choosing-teeth-v1__service-text{color:var(--text-secondary);font-weight:600}.choosing-teeth-v1__disclaimer{display:flex;align-items:flex-start;gap:var(--space-10);margin:0;padding:var(--space-10);max-width:319px;color:var(--text-muted)}.choosing-teeth-v1__disclaimer-icon{display:block;width:20px;height:20px;margin-top:2px;color:var(--text-muted)}.choosing-teeth-v1__submit-mobile{display:none}.choosing-teeth-v1__disclaimer-text{margin:0;max-width:299px;line-height:1.2}.choosing-teeth-v1__teeth-viewport{display:contents}.choosing-teeth-v1__jaw-switch,.choosing-teeth-v1__selected.choosing-teeth-v1__selected--map,.choosing-teeth-v1__step1-foot,.choosing-teeth-v1__mobile-lead{display:none}.choosing-teeth-v1__teeth-map{position:relative;width:min(486px,100%);aspect-ratio:486\/649;margin-inline:auto}.choosing-teeth-v1__teeth-overlay{position:absolute;left:calc(14.26% + 78.38% \/ 2);top:calc((3.87% + 40.09% + 52.31%) \/ 2);transform:translate(-50%,-50%);z-index:2;display:flex;flex-direction:column;gap:var(--space-8);align-items:center;width:min(177px,70%);text-align:center;pointer-events:none}.choosing-teeth-v1__instruction{display:contents}.choosing-teeth-v1__jaw{position:absolute;inset:auto;--jaw-scale:1;--jaw-art-ratio:967\/796}.choosing-teeth-v1__jaw-art{position:absolute;left:50%;top:50%;z-index:0;height:100%;width:auto;aspect-ratio:var(--jaw-art-ratio);transform:translate(-50%,-50%) scale(var(--jaw-scale))}.choosing-teeth-v1__jaw-img{position:absolute;inset:0;z-index:0;display:block;width:100%;height:100%;object-fit:fill;pointer-events:none;user-select:none}.choosing-teeth-v1__jaw--top{--jaw-scale:1.36;--jaw-art-ratio:967\/796;--tooth-nudge-x:-0.51%;--tooth-nudge-y:2.39%;left:14.26%;top:3.87%;width:78.38%;height:40.09%}.choosing-teeth-v1__jaw--bottom{--jaw-scale:1.30;--jaw-art-ratio:967\/795;--tooth-nudge-x:0%;--tooth-nudge-y:0%;left:17.31%;top:52.31%;width:72.29%;height:42.26%}.choosing-teeth-v1__tooth{position:absolute;left:calc(var(--x) + var(--tooth-nudge-x,0%));top:calc(var(--y) + var(--tooth-nudge-y,0%));width:var(--w);height:var(--h);z-index:1;display:block;padding:0;border:0;background:transparent;cursor:pointer}.choosing-teeth-v1__tooth svg,.choosing-teeth-v1__tooth svg *{pointer-events:none}.choosing-teeth-v1__tooth svg{display:block;width:100%;height:100%}.choosing-teeth-v1__tooth path{fill:var(--brand-light) !important;opacity:0;mix-blend-mode:multiply;transition:opacity .16s ease}.choosing-teeth-v1__tooth:hover:not([aria-pressed=\"true\"]) path{opacity:.28}.choosing-teeth-v1__tooth[aria-pressed=\"true\"] path{opacity:.4}.choosing-teeth-v1__tooth:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.choosing-teeth-v1__question{margin:0;color:var(--text-primary)}.choosing-teeth-v1__hint{margin:0;color:var(--text-muted)}.choosing-teeth-v1__bottom{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);padding-bottom:var(--space-24);border-bottom:1px solid var(--ui-border-soft)}.choosing-teeth-v1__bottom-block{width:100%;flex:none;margin-top:auto}.choosing-teeth-v1__error{margin:var(--space-12) 0 0;padding:var(--space-10) var(--space-12);border-radius:var(--radius-sm);color:var(--promo-accent);background:color-mix(in srgb,var(--promo-accent) 10%,transparent)}.choosing-teeth-v1__back{background:transparent;border:0;padding:var(--space-8) 0;cursor:pointer;color:var(--text-primary)}.choosing-teeth-v1__back:hover{color:var(--brand-dark)}.choosing-teeth-v1__back:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.choosing-teeth-v1__back-icon{transform:rotate(180deg)}.choosing-teeth-v1__back-text-short{display:none}.choosing-teeth-v1__selected{display:flex;align-items:center;gap:var(--space-4);min-width:0;color:var(--text-primary)}.choosing-teeth-v1__selected-count{color:var(--brand)}.choosing-teeth-v1__selected-count-row{display:flex;align-items:center;justify-content:center;gap:var(--space-6)}.choosing-teeth-v1__selected-icon{width:20px;height:20px;color:var(--brand-light)}.choosing-teeth-v1__next{flex:none;display:inline-flex;align-items:center;background:transparent;border:0;padding:var(--space-8) 0;cursor:pointer;color:var(--text-primary)}.choosing-teeth-v1__next:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.choosing-teeth-v1__next:hover:not(:disabled){color:var(--brand-dark)}@media (min-width:1281px){.choosing-teeth-v1__next.is-locked:hover{color:var(--text-primary)}}.choosing-teeth-v1__next:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.choosing-teeth-v1__right{position:relative;z-index:2;display:flex;box-sizing:border-box;padding:calc(var(--space-64) + var(--space-64) + var(--space-8)) var(--space-64) calc(var(--space-64) + var(--space-64) + var(--space-32)) calc(var(--space-64) + var(--space-56));background:var(--white)}.choosing-teeth-v1__right-inner{display:flex;flex:1 1 auto;flex-direction:column;min-width:0;width:100%}.choosing-teeth-v1__right-panel:not([hidden]){display:flex;flex-direction:column;gap:var(--space-48);max-width:755px}.choosing-teeth-v1__title{display:block;margin:0;color:var(--text-primary)}.choosing-teeth-v1__title-muted{color:var(--text-muted)}.choosing-teeth-v1__benefits-head{margin:0;color:var(--text-secondary);font-weight:600}.choosing-teeth-v1__benefits-list{display:flex;flex-direction:column;gap:var(--space-12);margin:0;padding:0;list-style:none}.choosing-teeth-v1__benefit{display:flex;align-items:center;gap:var(--space-12);min-width:0}.choosing-teeth-v1__benefit-icon{display:flex;align-items:center;justify-content:center;width:52px;height:52px;flex:none;border-radius:var(--radius-sm);background:var(--brand-surface-soft)}.choosing-teeth-v1__benefit-icon-img{display:block;width:24px;height:24px;object-fit:contain}.choosing-teeth-v1__benefit-text{color:var(--text-primary);font-weight:600}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__right{padding-top:calc(var(--space-64) + var(--space-64) + var(--space-20) + 1px)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__right-panel:not([hidden]){gap:0;max-width:755px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__step3-hint{margin:0;margin-top:calc(var(--space-24) - var(--space-2));max-width:696px;color:var(--text-secondary);font-weight:600}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__form{margin-top:calc(var(--space-32) + var(--space-2));gap:var(--space-24);max-width:716px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__form-row:not(.choosing-teeth-v1__form-row--actions){flex-wrap:nowrap}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__field{flex:1 1 351px;min-width:0}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__form-row--actions{width:100%;flex-wrap:wrap;align-items:center}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__consent{flex:1 1 260px;min-width:min(100%,260px);max-width:100%}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__submit{flex:0 0 auto;min-width:0;max-width:100%}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__promo{margin-top:0;padding-top:calc(var(--space-64) + var(--space-10))}.choosing-teeth-v1__form{display:flex;flex-direction:column;gap:var(--space-16)}.choosing-teeth-v1__form-row{display:flex;flex-wrap:wrap;gap:var(--space-14);align-items:center}.choosing-teeth-v1__field{flex:1 1 311px;min-width:240px}.choosing-teeth-v1__field--email{display:none}.choosing-teeth-v1__form-scrim{display:none}.choosing-teeth-v1__input{border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.choosing-teeth-v1__form-row--actions{justify-content:space-between;gap:var(--space-24)}.choosing-teeth-v1__consent{margin:0}.choosing-teeth-v1__submit{min-height:54px}.choosing-teeth-v1__promo{display:flex;align-items:flex-start;gap:calc(var(--space-24) + var(--space-6));margin-top:auto;padding-top:var(--space-56)}.choosing-teeth-v1__promo-gift{display:flex;align-items:center;justify-content:center;width:50px;height:50px;flex:none}.choosing-teeth-v1__promo-gift-img{display:block;width:50px;height:50px;object-fit:contain}.choosing-teeth-v1__promo-tag{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;width:fit-content;max-width:100%;padding:var(--space-10) var(--space-12);border-radius:var(--radius-pill);background:var(--promo-accent-bg);color:var(--promo-accent);font-weight:600;letter-spacing:-0.01em;text-transform:uppercase}.choosing-teeth-v1__promo-text{margin:0;color:var(--text-secondary);font-weight:500}@media (max-width:1280px){.choosing-teeth-v1__grid{grid-template-columns:1fr;min-height:0}.choosing-teeth-v1__card,.choosing-teeth-v1__left{min-height:0}.choosing-teeth-v1__left{padding:var(--space-24)}.choosing-teeth-v1__right{padding:var(--space-24)}.choosing-teeth-v1__stage{min-height:0;padding:var(--space-24) 0}.choosing-teeth-v1__promo{margin-top:var(--space-32);padding-top:var(--space-32)}.choosing-teeth-v1__bottom{flex-direction:column;align-items:stretch}.choosing-teeth-v1__selected{justify-content:center}.choosing-teeth-v1__next{width:100%;justify-content:center}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left::after,.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left::after{left:auto;right:-10%;top:62%;transform:translateY(-50%);width:min(520px,110%);height:auto;aspect-ratio:778\/518;opacity:.75}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__form-row{flex-wrap:wrap}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__form-row--actions{flex-direction:row;flex-wrap:wrap}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__submit{flex:0 0 auto;min-width:0;max-width:100%}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__promo{margin-top:var(--space-32)}}@media (max-width:768px){.choosing-teeth-v1__card,.choosing-teeth-v1__grid{min-height:604px}.choosing-teeth-v1__grid{grid-template-rows:auto 1fr}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__card{background:var(--bg-fill-page)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__right{background:var(--white)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__card{min-height:604px;overflow:visible}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__left{position:static;min-height:0;padding:0 var(--space-14) calc(var(--space-16) + var(--space-4));overflow:visible}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__right{order:-1;padding:calc(var(--space-16) + var(--space-4)) var(--space-14) var(--space-16)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__right-panel:not([hidden]){gap:0;max-width:none}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__title{max-width:211px;padding-right:0;font-size:18px;line-height:1.2}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__mobile-lead{display:block;margin:var(--space-8) 0 0;max-width:300px;color:var(--text-secondary);font-weight:600}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__benefits,.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__promo{display:none}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__step{position:absolute;top:22px;right:11px;z-index:5}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__stage{padding:0;justify-content:flex-start}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__panel--step1:not([hidden]){flex-direction:column;align-items:center;gap:0}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__jaw-switch{display:flex;align-items:center;justify-content:center;gap:var(--space-12);width:100%;max-width:326px;z-index:2;margin:0 0 var(--space-12)}.choosing-teeth-v1__jaw-tab{flex:1 1 0;min-width:0;margin:0;padding:var(--space-10);border:0.6px solid var(--ui-border-default);border-radius:10px;background:transparent;color:var(--text-muted);font:inherit;font-weight:600;font-size:14px;line-height:1;letter-spacing:-0.01em;cursor:pointer}.choosing-teeth-v1__jaw-tab.is-active{border-color:var(--brand);color:var(--brand)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__teeth-viewport{display:block;position:relative;width:min(326px,100%);height:auto;aspect-ratio:486 \/ calc(649 * 0.5231);overflow:hidden}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__jaw--bottom,.choosing-teeth-v1.is-jaw-lower:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__jaw--top{visibility:hidden;pointer-events:none}.choosing-teeth-v1.is-jaw-lower:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__jaw--bottom{visibility:visible;pointer-events:auto}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__teeth-map{width:100%;transform:translateX(-3.45%)}.choosing-teeth-v1.is-jaw-lower:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__teeth-map{transform:translate(-3.45%,-52.31%)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__teeth-overlay{display:none}.choosing-teeth-v1.is-has-selection:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__selected.choosing-teeth-v1__selected--map{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;gap:var(--space-4);position:relative;width:auto;max-width:100%;margin:var(--space-12) 0 var(--space-16);text-align:left;font-size:14px;line-height:1.2;white-space:nowrap}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__bottom-block{margin-top:auto}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__bottom{flex-direction:column;align-items:center;border-bottom:0;padding-bottom:0}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__bottom > .choosing-teeth-v1__selected{display:none}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__next[data-choosing-teeth-v1-next]{width:186px;justify-content:center;padding:var(--space-16) var(--space-24);border-radius:10px;background:var(--brand);color:var(--text-on-brand);opacity:1;font-size:15px;line-height:1;letter-spacing:var(--ls-btn,-0.01em);text-transform:uppercase}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__next[data-choosing-teeth-v1-next]:disabled{background:var(--ui-divider);color:var(--ui-border-strong);opacity:1}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__next[data-choosing-teeth-v1-next]:hover:not(:disabled){color:var(--text-on-brand);background:var(--brand-dark)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__next[data-choosing-teeth-v1-next] .link-arrow__icon{display:none}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__step1-foot{display:flex;flex-direction:column;align-items:center;gap:var(--space-8);margin-top:var(--space-16);text-align:center}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__step1-foot::before{content:\"\";display:block;width:min(271px,100%);border-top:1px solid var(--ui-border-default)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__step1-foot .choosing-teeth-v1__question{max-width:271px;font-size:14px;font-weight:600;color:var(--text-secondary)}.choosing-teeth-v1:not(.is-step-2):not(.is-step-3) .choosing-teeth-v1__step1-foot .choosing-teeth-v1__hint{font-size:13px;font-weight:400;color:var(--text-secondary)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__card{overflow:hidden;min-height:604px;background:var(--bg-fill-page)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__grid{grid-template-rows:1fr}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__right{display:none}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left{position:relative;min-height:604px;padding:82px var(--space-12) calc(var(--space-16) + var(--space-4)) var(--space-12);overflow:hidden;background:var(--bg-fill-page)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__step{position:absolute;top:22px;right:11px;z-index:5}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__stage{padding:0;align-items:flex-start;justify-content:flex-start}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__step2{max-width:none}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__step2.stack--md{gap:var(--space-24)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__step2-question{max-width:226px;font-size:16px;font-weight:500;line-height:1.4}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__options{max-width:none}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__options.stack--sm{gap:7px}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__option{min-height:46px;height:46px;padding:6px 8px 6px 4px}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__option-label{font-size:14px;line-height:1.2}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__bottom-block{margin-top:auto;padding-left:0;position:static;z-index:2}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__bottom{flex-direction:column;align-items:center;border-bottom:0;padding-bottom:0;max-width:none;position:static}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__back{position:absolute;top:22px;left:12px;z-index:5;display:inline-flex;align-items:center;gap:10px;padding:6px 0;color:var(--text-secondary)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__back-icon{width:24px;height:24px;transform:rotate(180deg)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__back-text-full{display:none}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__back-text-short{display:inline;font-size:14px;letter-spacing:-0.01em}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__next[data-choosing-teeth-v1-next-step2]:not(:disabled){width:186px;justify-content:center;padding:var(--space-16) var(--space-24);border-radius:10px;background:var(--brand);color:var(--text-on-brand);font-size:15px;line-height:1;letter-spacing:var(--ls-btn,-0.01em);text-transform:uppercase}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__next[data-choosing-teeth-v1-next-step2]:disabled{width:186px;justify-content:center;padding:var(--space-16) var(--space-24);border-radius:10px;background:var(--ui-divider);color:var(--ui-border-strong);opacity:1;font-size:15px;line-height:1;letter-spacing:var(--ls-btn,-0.01em);text-transform:uppercase;pointer-events:none;cursor:not-allowed}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__next[data-choosing-teeth-v1-next-step2]:hover:not(:disabled){color:var(--text-on-brand);background:var(--brand-dark)}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__next[data-choosing-teeth-v1-next-step2] .link-arrow__icon{display:none}.choosing-teeth-v1.is-step-2 .choosing-teeth-v1__left::after{left:103px;right:auto;top:394px;width:307px;height:205px;aspect-ratio:auto;transform:none;opacity:1;background-position:center bottom}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__card{overflow:hidden;min-height:604px;background:var(--bg-fill-page)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__grid{grid-template-rows:1fr}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__right{display:none}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left{position:relative;min-height:604px;padding:82px 11px 20px;overflow:hidden;background:var(--bg-fill-page)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__step{position:absolute;top:22px;right:11px;z-index:5}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__stage{padding:0;flex:none;align-items:flex-start;justify-content:flex-start}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__step3{max-width:none;width:100%}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__step3-head{margin-bottom:36px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__step3-head.stack--md{gap:var(--space-16)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__step3-intro{font-size:16px;font-weight:500;line-height:1.4}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary{flex-direction:column;align-items:flex-start;flex-wrap:nowrap;gap:var(--space-8);width:195px;max-width:100%}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-item{gap:var(--space-8)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-icon,.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-icon-img{width:24px;height:24px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-icon--concern{background-size:24px 24px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-icon-leaf{width:14px;height:14px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-label,.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-value{font-size:14px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-label{font-weight:400;line-height:1.4;color:var(--text-secondary)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__summary-value{font-weight:600;line-height:1.2;color:var(--text-primary)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__services{margin-bottom:0}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__services.stack--md{gap:12px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__services-title{font-size:14px;font-weight:400;line-height:1.4;color:var(--text-secondary)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__services-list{gap:6px}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__service{width:100%;max-width:304px;gap:var(--space-8);padding:10px 14px;background:color-mix(in srgb,var(--surface,#fff) 80%,transparent)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__service-text{font-size:14px;line-height:1.2}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__disclaimer{align-items:flex-start;gap:14px;margin-top:24px;padding:0;max-width:none}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__disclaimer-icon{width:24px;height:24px;margin-top:0;flex:none}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__disclaimer-text{max-width:262px;font-size:12px;font-weight:500;line-height:1.2;color:var(--text-muted)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__bottom-block{margin-top:27px;padding-left:0;position:static;z-index:2}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__bottom{flex-direction:column;align-items:stretch;border-bottom:0;padding-bottom:0;max-width:none;position:static}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__back{position:absolute;top:22px;left:12px;z-index:5;display:inline-flex;align-items:center;gap:10px;padding:4px 0;color:var(--text-secondary)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__back-icon{width:24px;height:24px;transform:rotate(180deg)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__back-text-full{display:none}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__back-text-short{display:inline;font-size:14px;letter-spacing:-0.01em}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__submit-mobile{display:flex;width:100%;max-width:304px;justify-content:center;padding:var(--space-16) var(--space-24);border:0;border-radius:10px;background:var(--brand);color:var(--text-on-brand);font-size:15px;line-height:1;letter-spacing:var(--ls-btn,-0.01em);text-transform:uppercase;cursor:pointer}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__submit-mobile:hover{color:var(--text-on-brand);background:var(--brand-dark)}.choosing-teeth-v1.is-step-3 .choosing-teeth-v1__left::after{left:103px;right:auto;top:394px;width:307px;height:205px;aspect-ratio:auto;transform:none;opacity:1;background-position:center bottom}}.choosing-teeth-v1__form-scrim.is-mobile-sheet{display:block;position:fixed;inset:0;z-index:2147483645;background:rgba(17,17,17,.25);opacity:0;transition:opacity .28s cubic-bezier(.22,1,.36,1)}.choosing-teeth-v1__form-scrim.is-mobile-sheet.is-open{opacity:1}.choosing-teeth-v1__right.is-mobile-sheet{display:flex !important;position:fixed;left:0;right:0;bottom:0;top:auto;z-index:2147483646;width:100%;max-width:none;height:auto;max-height:min(90dvh,640px);padding:33px 16px calc(20px + env(safe-area-inset-bottom,0px));overflow:auto;border-radius:10px 10px 0 0;background:#fff;box-sizing:border-box;transform:translateY(100%);transition:transform .32s cubic-bezier(.22,1,.36,1)}.choosing-teeth-v1__right.is-mobile-sheet.is-open{transform:translateY(0)}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__right-inner{min-height:0}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__right-panel:not([hidden]){gap:0;max-width:none}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__title{max-width:302px;font-size:18px;font-weight:700;line-height:1.2}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__title-muted{color:var(--text-muted);font-weight:700}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__step3-hint{margin-top:8px;max-width:306px;font-size:14px;font-weight:600;line-height:1.2;color:var(--text-secondary)}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__form{margin-top:24px;gap:8px;max-width:none}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__form-row{flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:8px}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__field{flex:none;width:100%;min-width:0}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__field--email{display:block}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__input{width:100%;padding:12px 16px 12px 14px;border:1px solid var(--ui-divider);border-radius:10px;background:#fff;font-size:14px;line-height:1.4;box-sizing:border-box}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__form-row--actions{flex-direction:row;flex-wrap:wrap;align-items:center;gap:16px;width:100%}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__consent{display:flex;align-items:flex-start;gap:12px;flex:1 1 260px;min-width:min(100%,260px);max-width:100%}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__consent .popup-form__consent-text{font-size:13px;line-height:1.2;color:var(--text-muted)}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__submit{flex:0 0 auto;width:auto;min-width:0;max-width:100%;min-height:0;padding:var(--space-16) var(--space-24);border-radius:10px;font-size:15px;line-height:1;letter-spacing:var(--ls-btn,-0.01em);text-transform:uppercase}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__promo{margin-top:auto;padding-top:24px;gap:var(--space-16)}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__promo-gift,.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__promo-gift-img{width:24px;height:24px}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__promo-body.stack--sm{gap:7px}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__promo-tag{padding:10px;font-size:12px;letter-spacing:-0.01em}.choosing-teeth-v1__right.is-mobile-sheet .choosing-teeth-v1__promo-text{max-width:197px;font-size:13px;font-weight:600;line-height:1.2;color:var(--brand)}@media (prefers-reduced-motion:reduce){.choosing-teeth-v1__form-scrim.is-mobile-sheet,.choosing-teeth-v1__right.is-mobile-sheet{transition:none}.choosing-teeth-v1__right.is-mobile-sheet{transform:none}}.reviews-v1__video-poster{aspect-ratio:var(--reviews-v1-video-aspect)}.reviews-v1{--reviews-v1-card-max:520px;--reviews-v1-card-height:360px;--reviews-v1-mobile-slides-per-view:1.15;--reviews-v1-quote-lines:4;--reviews-v1-video-aspect:477 \/ 211}.reviews-v1.reviews-v1--card-bg-white .reviews-v1__card{background:var(--white)}.reviews-v1__inner.stack--xl{gap:var(--space-56)}.reviews-v1__eyebrow.eyebrow{color:var(--text-muted)}.reviews-v1__title{margin:0;color:var(--text-primary)}.reviews-v1__lead{margin:0;color:var(--text-secondary)}.reviews-v1__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-48)}.reviews-v1__head-main{flex:1 1 auto;min-width:0;max-width:1080px}.reviews-v1__head-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-40);flex:none}.reviews-v1__all-link{color:var(--text-secondary)}.reviews-v1__all-link:hover,.reviews-v1__all-link:focus-visible{color:var(--brand-dark)}.reviews-v1__all-link-icon{}.reviews-v1__slider-nav{width:132px;justify-content:space-between}.reviews-v1__body.stack--xl{gap:var(--space-40)}.reviews-v1__carousel{width:100%;overflow:hidden}.reviews-v1__slider.swiper{overflow:hidden}.reviews-v1__slider .swiper-slide{height:auto;flex-shrink:0;box-sizing:border-box}@media (min-width:769px){.reviews-v1__slider .swiper-slide{width:var(--reviews-v1-card-max)}}.reviews-v1__card{display:flex;flex-direction:column;width:100%;height:var(--reviews-v1-card-height);box-sizing:border-box;border-radius:var(--radius);background:var(--white-opacity-50);overflow:hidden}.reviews-v1__card--text{gap:var(--space-16);padding:18px 15px 20px}.reviews-v1__card-top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);flex:none}.reviews-v1__rating-head{display:flex;align-items:center;gap:var(--space-8);flex:none}.reviews-v1__rating-label{margin:0;color:var(--text-muted)}.reviews-v1__card-author{margin:0;color:var(--ui-border-strong);text-align:right}.reviews-v1__card-content{flex:1 1 auto;min-height:0;overflow:hidden;gap:var(--space-16)}.reviews-v1__quote-block{display:flex;flex-direction:column;flex:1 1 auto;gap:var(--space-8);min-height:0;padding-bottom:var(--space-16);border-bottom:1px solid var(--ui-divider)}.reviews-v1__quote{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--reviews-v1-quote-lines);flex:none;margin:0;overflow:hidden;color:var(--text-secondary)}.reviews-v1__read-more{display:none;flex:none;align-items:center;min-height:24px;padding:0;border:0;background:none;cursor:pointer;text-align:left;color:var(--text-secondary);font-family:var(--font-body);font-size:1em;font-weight:600;line-height:var(--lh-body-tight)}.reviews-v1__card--text.is-overflow .reviews-v1__read-more{display:inline-flex}.reviews-v1__read-more:hover,.reviews-v1__read-more:focus-visible{color:var(--brand-dark)}.reviews-v1__meta{display:flex;flex-wrap:wrap;gap:var(--space-8);margin:0}.reviews-v1__meta-label{color:var(--ui-border-strong)}.reviews-v1__meta-value{color:var(--text-secondary)}.reviews-v1__details{flex:none}.reviews-v1__card-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);flex:none;margin-top:auto}.reviews-v1__source-logo{display:block;width:auto;max-width:124px;height:21px;object-fit:contain;object-position:left center}.reviews-v1__date{margin:0;color:var(--ui-border-strong)}.reviews-v1__card--video{padding:9px 10px 20px;gap:var(--space-16)}.reviews-v1__video-trigger{display:block;width:100%;padding:0;border:0;background:none;cursor:pointer;text-align:left}.reviews-v1__video-media{position:relative;display:block;overflow:hidden;border-radius:var(--radius);aspect-ratio:var(--reviews-v1-video-aspect)}.reviews-v1__video-poster{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.reviews-v1__video-play{position:absolute;left:50%;top:50%;z-index:2;display:block;width:48px;height:48px;transform:translate(-50%,-50%);pointer-events:none}.reviews-v1__video-play img{display:block;width:100%;height:100%}.reviews-v1__video-foot{padding:0 15px}.reviews-v1__video-author-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-16)}.reviews-v1__video-author{margin:0;color:var(--text-muted)}.reviews-v1__platforms{display:grid;grid-template-columns:minmax(0,451px) minmax(0,1fr);gap:var(--space-40);align-items:start;--reviews-v1-platform-logo-slot:56px;--reviews-v1-platform-rating-slot:30px}.reviews-v1__platforms-title{margin:0;color:var(--text-secondary)}.reviews-v1__leave-review{display:inline-flex;align-items:center;min-height:24px;padding:0;border:0;background:none;cursor:pointer;font:inherit;text-align:left;text-decoration:none;color:var(--text-secondary)}.reviews-v1__leave-review:hover,.reviews-v1__leave-review:focus-visible{color:var(--brand-dark)}.reviews-v1__platforms-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:var(--reviews-v1-platform-logo-slot) auto auto;gap:0;width:100%;min-width:0}.reviews-v1__platform{display:grid;grid-column:span 1;grid-row:span 3;grid-template-columns:minmax(0,1fr);grid-template-rows:subgrid;align-items:center;justify-items:center;row-gap:var(--space-12);min-width:0;min-height:138px;padding:19px 16px 16px;border-left:1px solid var(--ui-border-soft);text-decoration:none;box-sizing:border-box;transition:background-color .16s ease,color .16s ease}@supports not (grid-template-rows:subgrid){.reviews-v1__platforms-grid{grid-template-rows:none}.reviews-v1__platform{grid-row:auto;grid-template-rows:var(--reviews-v1-platform-logo-slot) var(--reviews-v1-platform-rating-slot) auto}}@media (hover:hover){.reviews-v1__platform:hover{background:var(--brand-opacity-15)}}.reviews-v1__platform:focus-visible{background:var(--brand-opacity-15);outline:2px solid var(--brand);outline-offset:-2px}.reviews-v1__platform-logo{grid-row:1;display:block;align-self:center;width:auto;max-width:min(var(--reviews-v1-platform-logo-w,196px),100%);height:auto;max-height:var(--reviews-v1-platform-logo-h,42px);object-fit:contain;object-position:center}.reviews-v1__platform-rating{grid-row:2;display:flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:var(--space-6);width:100%;max-width:100%;min-height:var(--reviews-v1-platform-rating-slot)}.reviews-v1__platform-score{color:var(--text-muted)}.reviews-v1__platform-count{grid-row:3;align-self:start;margin:0;color:var(--ui-border-strong);text-align:center;max-width:100%}.reviews-v1__cta{position:relative;overflow:hidden;border-radius:var(--radius)}.reviews-v1__cta-bg{position:absolute;inset:0;z-index:0}.reviews-v1__cta-pattern{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;pointer-events:none}.reviews-v1__cta-inner{position:relative;z-index:0;display:flex;flex-wrap:nowrap;align-items:center;gap:var(--space-40) var(--space-56);min-height:167px;padding:var(--space-32) var(--space-40);box-sizing:border-box;border-radius:inherit;overflow:hidden}.reviews-v1__cta-inner > :not(.reviews-v1__cta-bg){position:relative;z-index:1}.reviews-v1__cta-icon{display:flex;align-items:center;justify-content:center;flex:none;width:72px;height:72px;border-radius:var(--radius-full);background:var(--white)}.reviews-v1__cta-icon-mark{display:block;width:35px;height:35px;background-color:var(--brand);-webkit-mask:var(--reviews-v1-chat-icon-src) center \/ contain no-repeat;mask:var(--reviews-v1-chat-icon-src) center \/ contain no-repeat}.reviews-v1__cta-copy{flex:1 1 320px;min-width:0;max-width:703px}.reviews-v1__cta-title{margin:0;color:var(--text-on-brand)}.reviews-v1__cta-text{margin:0;color:var(--text-on-brand)}.reviews-v1__cta-actions{flex:none;width:min(355px,100%);min-width:min(100%,280px);margin-left:auto;align-items:center}.reviews-v1__cta-notes{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-16);color:var(--text-on-brand)}.reviews-v1__cta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--text-on-brand)}.reviews-v1__mobile-actions{display:none}.reviews-v1__all-btn{width:min(260px,100%)}@media (max-width:1360px){.reviews-v1__platforms{grid-template-columns:1fr;gap:var(--space-32);--reviews-v1-platform-rating-slot:26px}.reviews-v1__platform-rating .stars-rating--lg{--stars-rating-size:26px;--stars-rating-gap:var(--space-4)}}@media (max-width:991px){.reviews-v1__platforms{--reviews-v1-platform-rating-slot:24px}.reviews-v1__platform-rating .stars-rating--lg{--stars-rating-size:24px}.reviews-v1__head{align-items:flex-start;flex-direction:column;gap:0}.reviews-v1__head-actions{width:100%;justify-content:space-between}.reviews-v1__cta-inner{flex-direction:column;align-items:stretch;gap:var(--space-16);min-height:0;padding:var(--space-20) var(--space-16)}.reviews-v1__cta-icon{align-self:center}.reviews-v1__cta-copy{flex:none;width:100%;max-width:none;text-align:center}.reviews-v1__cta-actions{flex:none;width:100%;max-width:none;margin-left:0;gap:var(--space-12)}}@media (max-width:768px){.reviews-v1__inner.stack--xl{gap:var(--space-40)}.reviews-v1__carousel{width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter))}.reviews-v1__card{max-width:none}.reviews-v1__card--text{padding:var(--space-16)}.reviews-v1__card-top{flex-direction:column;align-items:flex-start}.reviews-v1__card-author{text-align:left}.reviews-v1__read-more{font-size:var(--text-body-sm);font-weight:500;min-height:0}.reviews-v1__card--video{padding:var(--space-10)}.reviews-v1__video-foot{padding:0 var(--space-8)}.reviews-v1__head-actions .reviews-v1__all-link{display:none}.reviews-v1__mobile-actions{display:flex;justify-content:center;width:100%}.reviews-v1__cta-inner{gap:var(--space-16);padding:var(--space-16)}.reviews-v1__cta-icon{width:56px;height:56px;align-self:center}.reviews-v1__cta-icon-mark{width:28px;height:28px}.reviews-v1__cta-copy{text-align:center}.reviews-v1__cta-actions{align-items:stretch}.reviews-v1__platforms{--reviews-v1-platform-rating-slot:22px}.reviews-v1__platforms-grid{grid-template-columns:1fr;grid-template-rows:none}.reviews-v1__platform{grid-row:auto;grid-template-rows:var(--reviews-v1-platform-logo-slot) var(--reviews-v1-platform-rating-slot) auto;min-height:0;border-left:0;border-top:1px solid var(--ui-border-soft);padding-top:var(--space-24)}.reviews-v1__platform:first-child{border-top:0;padding-top:0}.reviews-v1__platforms-lead.stack{flex-direction:row;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-16)}.reviews-v1__platforms-title{flex:1 1 auto;min-width:0}.reviews-v1__leave-review{flex:none;align-self:flex-start;margin-left:auto;text-align:right}}.treatment-plans-v1{--treatment-plans-v1-track-gap:40px;--treatment-plans-v1-slide-max:520px;--treatment-plans-v1-slide-min:420px;--treatment-plans-v1-icon-size:90px;--treatment-plans-v1-icon-glyph:39px;--treatment-plans-v1-icon-overlap:calc(var(--treatment-plans-v1-icon-size) \/ 2);--treatment-plans-v1-icon-title-gap:var(--space-16);box-sizing:border-box;overflow-x:clip}.treatment-plans-v1__inner.stack--xl{gap:var(--space-40);min-width:0}.treatment-plans-v1__head{display:flex;align-items:stretch;justify-content:space-between;gap:var(--space-32)}.treatment-plans-v1__head-main{flex:1 1 auto;min-width:0;max-width:1080px}.treatment-plans-v1__title{margin:0;color:var(--text-primary)}.treatment-plans-v1__lead{margin:0;max-width:1080px;color:var(--text-primary)}.treatment-plans-v1__head-aside{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;flex:none;align-self:stretch}.treatment-plans-v1__trust{display:flex;align-items:center;gap:var(--space-24);flex:none;width:fit-content;max-width:381px;padding:var(--space-16);border:1px solid var(--ui-border-default);border-radius:var(--radius);box-sizing:border-box}.treatment-plans-v1__trust-icon{display:block;flex:none;width:26px;height:40px;color:var(--brand)}.treatment-plans-v1__trust-text{margin:0;min-width:0;color:var(--text-secondary)}.treatment-plans-v1__slider-toolbar{display:none;justify-content:flex-end;align-items:center;margin:0}.treatment-plans-v1__slider-foot{min-width:0}.treatment-plans-v1__slider-toolbar.is-visible{display:flex}.treatment-plans-v1__slider-nav{width:132px;justify-content:space-between}.treatment-plans-v1__carousel{width:100%;min-width:0;overflow:hidden}.treatment-plans-v1__slider{width:100%;min-width:0;overflow:hidden}.treatment-plans-v1__slider.swiper{overflow:hidden}.treatment-plans-v1__slider .swiper-slide{width:100%;height:auto;flex-shrink:0;box-sizing:border-box}@media (min-width:769px){.treatment-plans-v1__slider-foot{display:flex;padding-bottom:10px}.treatment-plans-v1__plan-trigger{display:none}.treatment-plans-v1__plan-panel,.treatment-plans-v1__plan-panel[hidden]{display:contents !important}.treatment-plans-v1__plan-panel-inner{display:contents}.treatment-plans-v1__plan-more{display:none !important}.treatment-plans-v1__slider .swiper-slide{width:clamp( var(--treatment-plans-v1-slide-min),calc( (100% - (var(--treatment-plans-v1-visible-count,3) - 1) * var(--treatment-plans-v1-track-gap)) \/ var(--treatment-plans-v1-visible-count,3) ),var(--treatment-plans-v1-slide-max) )}.treatment-plans-v1--scrollable .treatment-plans-v1__slider .swiper-slide{width:var(--treatment-plans-v1-slide-max)}}.treatment-plans-v1__card{position:relative;display:flex;flex-direction:column;height:100%;background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow-brand-soft);overflow:hidden;box-sizing:border-box}.treatment-plans-v1__card-media{position:relative;z-index:1;flex:none;width:100%;aspect-ratio:520 \/ 290;overflow:hidden;border-radius:var(--radius)}.treatment-plans-v1__card-photo{display:block;width:100%;height:100%;object-fit:cover}.treatment-plans-v1__card-head{position:relative;z-index:3;min-height:var(--treatment-plans-v1-icon-overlap);margin-top:calc(-1 * var(--treatment-plans-v1-icon-overlap));margin-bottom:var(--space-8)}.treatment-plans-v1__card-head--no-icon{min-height:0;margin-top:0;margin-bottom:0;padding-top:var(--space-16)}.treatment-plans-v1__card-head--no-icon .treatment-plans-v1__card-title{padding-top:0;padding-left:0}.treatment-plans-v1__card-icon{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;width:var(--treatment-plans-v1-icon-size);height:var(--treatment-plans-v1-icon-size);border:2px solid var(--white);border-radius:var(--radius-full);background:var(--brand);overflow:hidden}.treatment-plans-v1__card-icon img{display:block;width:var(--treatment-plans-v1-icon-glyph);height:var(--treatment-plans-v1-icon-glyph);object-fit:contain}.treatment-plans-v1__card-body{position:relative;z-index:2;display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-16);padding:0 var(--space-32) var(--space-32);box-sizing:border-box}.treatment-plans-v1__card-title{margin:0;padding-top:calc(var(--treatment-plans-v1-icon-overlap) + var(--space-16));padding-left:calc(var(--treatment-plans-v1-icon-size) + var(--treatment-plans-v1-icon-title-gap));color:var(--text-secondary)}.treatment-plans-v1__card-summary{margin:0;color:var(--brand)}.treatment-plans-v1__features{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-16);margin-top:var(--space-8)}.treatment-plans-v1__features-divider{height:0;border-top:1px solid var(--ui-divider)}.treatment-plans-v1__features-list{display:flex;flex-direction:column;gap:var(--space-10);margin:0;padding:0;list-style:none}.treatment-plans-v1__feature{display:flex;align-items:flex-start;gap:var(--space-10)}.treatment-plans-v1__feature-icon{display:block;flex:none;width:20px;height:20px;background-color:var(--brand-decor);-webkit-mask:var(--treatment-plans-v1-check-icon-src) center \/ contain no-repeat;mask:var(--treatment-plans-v1-check-icon-src) center \/ contain no-repeat}.treatment-plans-v1__feature-text{margin:0;color:var(--text-secondary)}.treatment-plans-v1__card-foot{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:var(--space-16);row-gap:var(--space-4);align-items:center;margin-top:auto;padding-top:var(--space-8)}.treatment-plans-v1__price{display:contents}.treatment-plans-v1__price-label{grid-column:1;grid-row:1;align-self:start;color:var(--ui-border-strong)}.treatment-plans-v1__price-value{grid-column:1;grid-row:2;margin:0;color:var(--brand)}.treatment-plans-v1__more{grid-column:2;grid-row:2;align-self:center;flex:none;color:var(--text-secondary);letter-spacing:var(--ls-btn)}.treatment-plans-v1__more:hover,.treatment-plans-v1__more:focus-visible{color:var(--brand-dark)}.treatment-plans-v1__more-icon{}.treatment-plans-v1__disclaimer{display:flex;align-items:flex-start;justify-content:flex-start;gap:var(--space-24);max-width:640px;margin:0;color:var(--text-muted)}.treatment-plans-v1__disclaimer-icon{display:block;flex:none;width:20px;height:20px;margin-top:2px}.treatment-plans-v1__disclaimer-text{margin:0;color:inherit}.treatment-plans-v1__plan-trigger{display:none}.treatment-plans-v1__plan-more{display:none}@media (max-width:1200px){.treatment-plans-v1__head{flex-direction:column;align-items:flex-start}.treatment-plans-v1__head-aside{width:100%;min-height:0;flex-direction:row;align-items:center;justify-content:space-between}}@media (max-width:1366px) and (min-width:769px){.treatment-plans-v1{--treatment-plans-v1-icon-size:80px;--treatment-plans-v1-icon-glyph:35px;--treatment-plans-v1-icon-title-gap:var(--space-12)}}@media (max-width:768px){.treatment-plans-v1{--treatment-plans-v1-icon-size:72px;--treatment-plans-v1-icon-glyph:32px;--treatment-plans-v1-icon-title-gap:var(--space-8)}.treatment-plans-v1__inner.stack--xl{gap:var(--space-24)}.treatment-plans-v1__head{flex-direction:column;align-items:stretch;gap:var(--space-16)}.treatment-plans-v1__head-aside{flex-direction:column;align-items:stretch;width:100%}.treatment-plans-v1__trust{align-self:flex-start;max-width:min(381px,100%);padding:var(--space-8) var(--space-16)}.treatment-plans-v1__slider-foot{display:flex;flex-direction:column;gap:var(--space-16);width:100%}.treatment-plans-v1__carousel,.treatment-plans-v1__slider{overflow:visible}.treatment-plans-v1__slider .swiper-wrapper{display:flex;flex-direction:column;gap:var(--space-16);transform:none !important}.treatment-plans-v1__slider .swiper-slide{width:100% !important;height:auto}.treatment-plans-v1__slider-foot .slider-pagination-host{display:none}.treatment-plans-v1__card{background:var(--white);border:1px solid color-mix(in srgb,var(--brand) 6%,var(--bg-fill-surface));border-radius:var(--radius);overflow:hidden;box-shadow:none;transition:border-color .28s ease}.treatment-plans-v1__card.is-open{border-color:var(--brand-decor)}.treatment-plans-v1__plan-trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);width:100%;padding:var(--space-24) var(--space-16);border:0;background:transparent;text-align:left;cursor:pointer;color:inherit;box-sizing:border-box}.treatment-plans-v1__plan-trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.treatment-plans-v1__plan-icon{display:flex;align-items:center;justify-content:center;flex:none;width:60px;height:60px;border-radius:var(--radius-full);background:var(--bg-fill-page);overflow:hidden;opacity:.5;transition:background-color .28s ease,border-color .28s ease,opacity .28s ease}.treatment-plans-v1__plan-icon-glyph{display:block;width:34px;height:34px;flex:none;background-color:color-mix(in srgb,var(--brand) 45%,var(--bg-fill-page));transition:background-color .28s ease,opacity .28s ease;-webkit-mask-image:var(--treatment-plans-v1-plan-icon-src);-webkit-mask-position:center;-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;mask-image:var(--treatment-plans-v1-plan-icon-src);mask-position:center;mask-size:contain;mask-repeat:no-repeat}.treatment-plans-v1__card.is-open .treatment-plans-v1__plan-icon{border:1.33px solid var(--bg-fill-surface);background:var(--brand);opacity:1}.treatment-plans-v1__card.is-open .treatment-plans-v1__plan-icon-glyph{background-color:var(--text-on-brand)}.treatment-plans-v1__plan-heading{display:flex;flex:1 1 auto;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--space-8);min-width:0}.treatment-plans-v1__plan-title{margin:0;color:var(--text-primary);font-size:var(--text-body-lg)}.treatment-plans-v1__plan-price{color:var(--brand);white-space:nowrap;font-size:var(--text-body-md);font-weight:400}.treatment-plans-v1__plan-chevron{flex:none;width:24px;height:24px;color:var(--text-primary);transition:transform .36s cubic-bezier(.33,1,.68,1)}.treatment-plans-v1__card.is-open .treatment-plans-v1__plan-chevron{transform:rotate(180deg)}.treatment-plans-v1__plan-panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1)}.treatment-plans-v1__card.is-open .treatment-plans-v1__plan-panel{grid-template-rows:1fr;transition:grid-template-rows .42s cubic-bezier(.33,1,.68,1)}.treatment-plans-v1__plan-panel[hidden]{display:none !important}.treatment-plans-v1__plan-panel-inner{min-height:0;overflow:hidden}.treatment-plans-v1__card-media,.treatment-plans-v1__card-head,.treatment-plans-v1__card-foot .treatment-plans-v1__price,.treatment-plans-v1__more{display:none !important}.treatment-plans-v1__card-body{display:flex;flex-direction:column;align-items:center;gap:var(--space-16);padding:0 var(--space-16) var(--space-24);box-sizing:border-box;opacity:0;transform:translateY(-8px);transition:opacity .24s ease,transform .3s cubic-bezier(.4,0,.2,1)}.treatment-plans-v1__card.is-open .treatment-plans-v1__card-body{opacity:1;transform:translateY(0);transition:opacity .32s ease .04s,transform .42s cubic-bezier(.33,1,.68,1) .04s}.treatment-plans-v1__card-summary{align-self:stretch;margin:0;color:var(--brand)}.treatment-plans-v1__plan-panel .treatment-plans-v1__features{align-self:stretch;margin-top:0;gap:var(--space-8)}.treatment-plans-v1__plan-panel .treatment-plans-v1__feature-text{font-size:var(--fs-body-sm);line-height:var(--lh-body);color:var(--text-secondary)}.treatment-plans-v1__card-foot{display:flex;align-items:center;justify-content:center;width:100%;margin:0;padding:0}.treatment-plans-v1__plan-more{display:inline-flex !important;width:min(290px,100%);text-transform:uppercase;letter-spacing:var(--ls-btn)}@media (prefers-reduced-motion:reduce){.treatment-plans-v1__card,.treatment-plans-v1__plan-icon,.treatment-plans-v1__plan-icon-glyph,.treatment-plans-v1__plan-chevron,.treatment-plans-v1__plan-panel,.treatment-plans-v1__card-body{transition:none}}.treatment-plans-v1__disclaimer{gap:var(--space-12)}}.brands-v2__logo{aspect-ratio:auto 225 \/ 72}.brands-v2{box-sizing:border-box;--brands-cols:2;--brands-gap-x:42px;--brands-gap-y:var(--space-24);--brands-card-h:148px}.brands-v2__inner{display:grid;grid-template-columns:minmax(0,657px) minmax(0,1fr);align-items:center;gap:var(--space-40)}.brands-v2__copy{min-width:0;align-items:flex-start;text-align:left}.brands-v2__eyebrow{color:var(--text-muted)}.brands-v2__title{margin:0;max-width:657px;color:var(--text-primary)}.brands-v2__subtitle{margin:0;max-width:657px;color:var(--text-secondary)}.brands-v2__carousel-col{width:100%;max-width:798px;justify-self:end;min-width:0;box-sizing:border-box}.brands-v2__slider.swiper{overflow:hidden;box-sizing:border-box}.brands-v2__slider .swiper-slide{width:100%;height:auto;flex-shrink:0;box-sizing:border-box}.brands-v2__slide-track{width:100%;max-width:798px;margin-inline:auto;box-sizing:border-box;padding-inline:var(--space-2)}.brands-v2__grid{display:grid;grid-template-columns:repeat(var(--brands-cols),minmax(0,1fr));gap:var(--brands-gap-y) var(--brands-gap-x);width:100%;margin:0;padding:0;list-style:none;box-sizing:border-box}.brands-v2__card{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;height:var(--brands-card-h);padding:var(--space-16);border:1px solid var(--brand-border);border-radius:var(--radius);background:var(--white);box-sizing:border-box;overflow:hidden}.brands-v2__logo{display:block;max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain}.brands-v2__controls{margin-top:var(--space-24);min-height:calc(var(--space-40) + var(--space-4))}.brands-v2__controls .slider-nav__btn{flex:none;width:calc(var(--space-40) + var(--space-4));height:calc(var(--space-40) + var(--space-4));box-sizing:border-box}.brands-v2__controls .slider-nav__btn--next .brands-v2__arrow{transform:scaleX(-1)}@media (min-width:769px) and (max-width:1600px){.brands-v2{--brands-gap-x:40px;--brands-card-h:136px}}@media (min-width:769px) and (max-width:1366px){.brands-v2{--brands-gap-x:var(--space-32);--brands-gap-y:var(--space-20);--brands-card-h:120px}}@media (min-width:769px) and (max-width:1200px){.brands-v2{--brands-gap-x:28px;--brands-gap-y:var(--space-20);--brands-card-h:112px}}@media (max-width:1200px){.brands-v2__inner{grid-template-columns:1fr;gap:var(--space-24)}.brands-v2__carousel-col{max-width:none;justify-self:stretch}}@media (max-width:768px){.brands-v2{--brands-gap-x:var(--space-16);--brands-gap-y:var(--space-16);--brands-card-h:88px}.brands-v2__copy.stack--md{gap:var(--space-16)}.brands-v2__title,.brands-v2__subtitle{max-width:none}.brands-v2__card{padding:var(--space-14)}.brands-v2__controls{min-height:var(--space-16)}.brands-v2__controls .slider-nav__btn{display:none}}.utp-numbers-v2__img{aspect-ratio:193 \/ 149}.utp-numbers-v2{--utp-numbers-v2-col:clamp(220px,19.4vw,373px);--utp-numbers-v2-gap:clamp(var(--space-16),3.05vw,49px);--utp-numbers-v2-media-h:clamp(140px,12.4vw,238px);--utp-numbers-v2-track-w:calc(4 * var(--utp-numbers-v2-col) + 3 * var(--utp-numbers-v2-gap));box-sizing:border-box}.utp-numbers-v2__inner{display:flex;flex-direction:column;gap:var(--space-40)}.utp-numbers-v2__scroll{overflow-x:visible;overflow-y:visible}.utp-numbers-v2__track{display:flex;flex-direction:column;gap:var(--space-40);width:100%;min-width:0}.utp-numbers-v2__head{align-items:flex-start;max-width:892px}.utp-numbers-v2__eyebrow{color:var(--brand)}.utp-numbers-v2__title{margin:0;color:var(--text-primary)}.utp-numbers-v2__divider{display:block}.utp-numbers-v2__divider-grid{position:relative;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--utp-numbers-v2-gap);align-items:center;width:100%;min-height:10px}.utp-numbers-v2__divider-grid::before{content:\"\";position:absolute;left:0;right:0;top:50%;height:1px;background:var(--ui-divider);transform:translateY(-50%);pointer-events:none}.utp-numbers-v2__dot{position:relative;z-index:1;width:10px;height:10px;border-radius:50%;background:var(--brand-decor);justify-self:start}.utp-numbers-v2__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:auto auto auto;column-gap:var(--utp-numbers-v2-gap);row-gap:var(--space-16);align-items:stretch;width:100%}.utp-numbers-v2__item{display:grid;grid-template-rows:subgrid;grid-row:span 3;min-width:0}.utp-numbers-v2__item--no-image{grid-row:span 2}.utp-numbers-v2__stat{display:flex;flex-direction:column;align-items:flex-start;gap:0}.utp-numbers-v2__value{margin:0;color:var(--brand)}.utp-numbers-v2__label{margin:0;text-transform:uppercase;color:var(--text-secondary)}.utp-numbers-v2__text{margin:0;color:var(--text-secondary)}.utp-numbers-v2__media{position:relative;overflow:hidden;width:100%;height:var(--utp-numbers-v2-media-h);border-radius:var(--radius);background:var(--ui-divider);align-self:end}.utp-numbers-v2__img{display:block;width:100%;height:100%;object-fit:cover}@media (max-width:1280px){.utp-numbers-v2__scroll{overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;scrollbar-width:thin;margin-inline:calc(var(--page-gutter) * -1);padding-inline:var(--page-gutter);scroll-padding-inline:var(--page-gutter)}.utp-numbers-v2__track{width:max-content;min-width:100%}.utp-numbers-v2__divider-grid,.utp-numbers-v2__grid{width:var(--utp-numbers-v2-track-w);grid-template-columns:repeat(4,var(--utp-numbers-v2-col))}}@media (min-width:1281px){.utp-numbers-v2__inner,.utp-numbers-v2__track{gap:calc(var(--space-40) + var(--space-24))}}@supports not (grid-template-rows:subgrid){.utp-numbers-v2__item{display:flex;flex-direction:column;grid-row:auto;gap:var(--space-16)}.utp-numbers-v2__item:not(.utp-numbers-v2__item--no-image) .utp-numbers-v2__media{margin-top:auto}}.gallery-v1__hero-img{aspect-ratio:797 \/ 498}.gallery-v1__thumb-img{aspect-ratio:328 \/ 220}.gallery-v1{box-sizing:border-box}.gallery-v1__inner.stack--xl{gap:var(--space-48)}.gallery-v1__top{display:grid;grid-template-columns:minmax(0,725px) minmax(0,797px);justify-content:space-between;align-items:start;gap:clamp(var(--space-24),4vw,calc(var(--space-64) + var(--space-40) + var(--space-12)))}.gallery-v1__copy{max-width:725px;min-width:0;width:100%;align-items:flex-start}.gallery-v1__eyebrow.eyebrow{color:var(--brand)}.gallery-v1__title{margin:0;color:var(--text-primary)}.gallery-v1__lead{margin:0;color:var(--text-secondary);max-width:725px}.gallery-v1__cta{min-width:320px}.gallery-v1__hero{width:100%;max-width:797px;min-width:0;justify-self:end;position:relative;overflow:hidden;border-radius:var(--radius);background:var(--bg-fill-panel);aspect-ratio:797 \/ 498}.gallery-v1__hero.swiper{overflow:hidden;isolation:isolate}.gallery-v1__hero .swiper-wrapper{height:100%}.gallery-v1__hero .swiper-slide{width:100%;max-width:100%;height:100%;flex-shrink:0;overflow:hidden;box-sizing:border-box}.gallery-v1__hero-slide{display:flex;align-items:stretch;width:100%;height:100%;overflow:hidden}.gallery-v1__hero-img{display:block;width:100%;height:100%;object-fit:contain;object-position:center;transition:opacity .2s ease}.gallery-v1__hero.is-loading .gallery-v1__hero-img{opacity:.35}.gallery-v1__hero-loader{opacity:1;transition:opacity .2s ease}.gallery-v1__hero-loader.is-hidden{opacity:0;pointer-events:none}.gallery-v1__bottom{display:flex;flex-direction:column;gap:var(--space-16)}.gallery-v1__carousel{width:100%;overflow:hidden}.gallery-v1__slider.swiper{overflow:hidden}.gallery-v1__slide{width:318px;height:auto;box-sizing:border-box}.gallery-v1__thumb{display:block;width:100%;padding:0;border:0;background:none;text-align:left;cursor:pointer;opacity:.7;transition:opacity .16s ease,transform .16s ease}.gallery-v1__thumb:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.gallery-v1__thumb.is-active{opacity:1}.gallery-v1__thumb.is-pressed{transform:scale(.98)}.gallery-v1__thumb-frame{display:block;width:100%;height:215px;border-radius:var(--radius);overflow:hidden;box-sizing:border-box;border:1px solid transparent}.gallery-v1__thumb.is-active .gallery-v1__thumb-frame{border-color:var(--brand-dark)}.gallery-v1__thumb-inner{display:block;height:100%;padding:calc(var(--space-4) + 1px);box-sizing:border-box}.gallery-v1__thumb-img{display:block;width:100%;height:100%;border-radius:var(--radius);object-fit:cover}.gallery-v1__controls{width:100%}.gallery-v1__controls .slider-nav__btn{flex:none;width:calc(var(--space-40) + var(--space-4));height:calc(var(--space-40) + var(--space-4));box-sizing:border-box}.gallery-v1__controls .slider-nav__btn--next .gallery-v1__arrow{transform:scaleX(-1)}@media (max-width:1360px){.gallery-v1__top{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-32)}.gallery-v1__copy{max-width:none}.gallery-v1__hero{max-width:none;justify-self:stretch}.gallery-v1__cta{min-width:0;width:100%}}@media (max-width:768px){.gallery-v1__inner.stack--xl{gap:var(--space-40)}.gallery-v1__hero{aspect-ratio:797 \/ 498}.gallery-v1__carousel{display:none}.gallery-v1__controls{justify-items:center}.gallery-v1__controls .slider-nav__btn{display:none}}.about-v1{--about-v1-profile-max:660px;--about-v1-profile-radius:var(--radius);--about-v1-fade-height:40px;--about-v1-mobile-collapse-target:320px;box-sizing:border-box}.about-v1__grid{display:grid;grid-template-columns:minmax(0,1fr) min(var(--about-v1-profile-max),42%);gap:var(--space-40);align-items:start}.about-v1--profile-left .about-v1__grid{grid-template-columns:min(var(--about-v1-profile-max),42%) minmax(0,1fr)}.about-v1--profile-left .about-v1__main{order:2}.about-v1--profile-left .about-v1__profile{order:1}.about-v1__main{display:flex;flex-direction:column;gap:var(--space-24);min-width:0;max-width:879px}.about-v1__eyebrow.eyebrow{color:var(--brand)}.about-v1__title{margin:0;max-width:725px;color:var(--text-primary)}.about-v1__lead{margin:0;max-width:879px;color:var(--text-primary)}.about-v1__scroll{position:relative;display:flex;align-items:stretch;gap:var(--space-24);min-width:0}.about-v1__copy-viewport{flex:1 1 auto;min-width:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none}.about-v1__copy-viewport::-webkit-scrollbar{display:none}.about-v1__copy-viewport:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.about-v1__copy-body{max-width:879px}.about-v1__text{color:var(--text-primary)}.about-v1__text p{margin:0 0 1em}.about-v1__text p:last-child{margin-bottom:0}.about-v1__closing{margin:0;max-width:725px;color:var(--brand)}.about-v1__copy-fade{position:absolute;left:0;right:var(--space-24);bottom:0;height:var(--about-v1-fade-height);pointer-events:none;background:linear-gradient( 180deg,transparent 0%,color-mix(in srgb,var(--section-bg-deep) 18%,transparent) 72%,color-mix(in srgb,var(--section-bg-deep) 32%,transparent) 100% );opacity:1;transition:opacity .2s ease}.about-v1__scroll.is-static .about-v1__copy-fade,.about-v1__scroll.is-at-bottom .about-v1__copy-fade{opacity:0}.about-v1__scrollbar{position:relative;flex:none;width:10px;align-self:stretch;background:transparent;cursor:grab;touch-action:none}.about-v1__scrollbar-thumb{position:absolute;top:0;left:4px;width:2px;min-height:48px;border-radius:var(--radius-pill);background:var(--brand-decor);transform:translateY(0);cursor:grab}.about-v1__scrollbar-thumb:active{cursor:grabbing}.about-v1__scrollbar:active{cursor:grabbing}.about-v1__scroll.is-static .about-v1__scrollbar{visibility:hidden}.about-v1__toggle{display:none;align-items:center;width:fit-content;padding:0;border:0;background:none;cursor:pointer;color:var(--text-primary);text-align:left}.about-v1__toggle:hover,.about-v1__toggle:focus-visible{color:var(--brand-dark)}.about-v1__scroll.is-collapsible + .about-v1__toggle{display:inline-flex}@media (max-width:1200px){.about-v1__scroll.is-collapsible + .about-v1__toggle{display:none !important}}.about-v1__more{width:fit-content;padding-block:var(--space-4);color:var(--text-primary)}.about-v1__more:hover,.about-v1__more:focus-visible{color:var(--brand-dark)}.about-v1__more-icon{}.about-v1__profile{display:flex;flex-direction:column;width:100%;max-width:var(--about-v1-profile-max);min-width:0;align-self:start;box-sizing:border-box}.about-v1__profile-media{position:relative;isolation:isolate;box-sizing:border-box}.about-v1__profile-media::before{content:'';position:absolute;inset:0;background:var(--bg-fill-soft);border-radius:var(--about-v1-profile-radius) var(--about-v1-profile-radius) 0 0;z-index:-1}.about-v1__profile-photo{display:block;width:100%;aspect-ratio:660 \/ 518;object-fit:cover;object-position:center center;border-radius:var(--about-v1-profile-radius)}.about-v1__profile-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-24);padding:var(--space-24) var(--space-40) var(--space-40);background:var(--bg-fill-soft);border-radius:0 0 var(--about-v1-profile-radius) var(--about-v1-profile-radius);box-sizing:border-box}.about-v1__profile-meta{flex:1 1 auto;min-width:0}.about-v1__profile-name{margin:0;color:var(--brand-dark)}.about-v1__profile-role{margin:0;max-width:327px;color:var(--text-primary)}.about-v1__profile-sign{display:block;flex:none;width:min(214px,38%);height:auto;object-fit:contain;object-position:right bottom}@media (min-width:1201px){.about-v1__profile{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24))}.about-v1__scroll{height:var(--about-v1-scroll-max);max-height:var(--about-v1-scroll-max);min-height:0;overflow:hidden}.about-v1__copy-viewport{flex:1 1 auto;min-height:0}}@media (max-width:1200px){.about-v1__grid,.about-v1--profile-left .about-v1__grid{grid-template-columns:1fr;gap:var(--space-32);align-items:start}.about-v1--profile-left .about-v1__main,.about-v1--profile-left .about-v1__profile{order:unset}.about-v1__main,.about-v1__profile{max-width:none}.about-v1__profile{width:100%;position:static;top:auto}.about-v1__scroll.is-collapsible{overflow:hidden}.about-v1__scroll.is-collapsible.is-collapsed{max-height:var(--about-v1-mobile-collapsed-max,var(--about-v1-mobile-collapse-target))}.about-v1__scroll.is-collapsible.is-expanded{max-height:none}.about-v1__scroll.is-collapsible.is-collapsed .about-v1__copy-viewport{overflow:hidden}.about-v1__scroll.is-collapsible.is-collapsed .about-v1__copy-fade{display:block;right:0;opacity:1;height:32px;background:linear-gradient( 180deg,transparent 0%,color-mix(in srgb,var(--section-bg-deep) 12%,transparent) 75%,color-mix(in srgb,var(--section-bg-deep) 24%,transparent) 100% )}.about-v1__scroll.is-collapsible.is-expanded .about-v1__copy-fade,.about-v1__scroll:not(.is-collapsible) .about-v1__copy-fade{display:none}.about-v1__scrollbar{display:none}}@media (max-width:768px){.about-v1__copy-head.stack--md,.about-v1__copy-body.stack--md{gap:var(--space-16)}.about-v1__scroll{gap:var(--space-16)}.about-v1__profile-foot{align-items:flex-end;gap:var(--space-16);padding:var(--space-16) var(--space-16) var(--space-24)}.about-v1__profile-role{max-width:none}.about-v1__profile-sign{width:min(140px,38%)}}.news-v2{box-sizing:border-box;--news-v2-grid-gap-x:44px;--news-v2-card-height:288px;--news-v2-thumb-width:290px;--news-v2-content-gap:39px}.news-v2__inner{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"head actions\" \"list list\";column-gap:var(--space-32);row-gap:var(--space-40);align-items:end}.news-v2__head{grid-area:head;min-width:0;align-self:end}.news-v2__head-main{max-width:725px}.news-v2__eyebrow{color:var(--brand)}.news-v2__title{margin:0;color:var(--text-primary)}.news-v2__all-link{grid-area:actions;align-self:end;justify-self:end;color:var(--text-secondary)}.news-v2__all-link:hover,.news-v2__all-link:focus-visible{color:var(--brand-dark)}.news-v2__slider-foot{grid-area:list;width:100%;min-width:0;align-self:stretch}.news-v2__pagination-host{display:none}.news-v2__slider .news-v2__grid.swiper-wrapper{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24) var(--news-v2-grid-gap-x);width:100%;min-width:0;transform:none;box-sizing:border-box}.news-v2__slider .swiper-slide{width:auto;height:auto;margin:0;box-sizing:border-box}.news-v2__card{position:relative;display:flex;align-items:stretch;gap:var(--news-v2-content-gap);min-height:var(--news-v2-card-height);min-width:0;border-radius:var(--radius);color:inherit;text-decoration:none;box-sizing:border-box;background:var(--white);box-shadow:var(--shadow-header);transition:box-shadow .16s ease}.news-v2__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (hover:hover){.news-v2__card:hover{box-shadow:var(--shadow-dropdown)}}.news-v2__card-media{display:block;flex:none;width:var(--news-v2-thumb-width);max-width:36.5%;border-radius:var(--radius);overflow:hidden}.news-v2__card-img{display:block;width:100%;height:100%;min-height:var(--news-v2-card-height);object-fit:cover}.news-v2__card-content{flex:1 1 auto;display:flex;flex-direction:column;align-items:flex-start;min-width:0;min-height:var(--news-v2-card-height);padding:var(--space-28) var(--space-32) var(--space-32) 0}.news-v2__card-tags{display:flex;align-items:center;justify-content:flex-start;gap:var(--space-8);width:100%;min-width:0}.news-v2__expert{display:none;flex:0 1 auto;min-width:0;max-width:100%;padding:var(--space-4) 0;box-sizing:border-box;color:var(--brand-dark);font-weight:600;text-align:right}.news-v2__card-title{flex:none;margin:var(--space-18) 0 0;color:var(--text-primary)}.news-v2__meta{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-8) var(--space-16);margin-top:auto;color:var(--ui-border-strong)}.news-v2__tag{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:max-content;max-width:100%;box-sizing:border-box;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);color:var(--brand-dark);font-weight:600;line-height:1.4;white-space:nowrap;background:var(--brand-opacity-20)}.news-v2__meta-date{white-space:nowrap}.news-v2__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--ui-border-default)}.news-v2__meta-read{display:inline-flex;align-items:center;gap:var(--space-8);white-space:nowrap}.news-v2__meta-clock{flex:none;width:24px;height:24px;color:var(--ui-border-strong)}.news-v2__carousel{width:100%;overflow:hidden}.news-v2__slider.swiper{overflow:visible}@media (max-width:1199px){.news-v2{--news-v2-thumb-width:clamp(200px,36.5%,290px);--news-v2-content-gap:var(--space-24)}.news-v2__slider .news-v2__grid.swiper-wrapper{grid-template-columns:1fr}.news-v2__card-content{padding:var(--space-24) var(--space-24) var(--space-24) 0}.news-v2__card-title{margin-top:var(--space-16)}}@media (prefers-reduced-motion:reduce){.news-v2__card{transition:none}}@media (max-width:768px){.news-v2__inner{grid-template-columns:minmax(0,1fr);grid-template-areas:\"head\" \"list\" \"actions\";column-gap:0;row-gap:var(--space-24);align-items:stretch}.news-v2__head-main.stack--md{gap:var(--space-16)}.news-v2__all-link{justify-self:center;align-self:center;display:inline-flex;align-items:center;justify-content:center;gap:0;width:min(260px,100%);min-height:40px;padding:var(--space-12) var(--space-24);border:2px solid var(--brand);border-radius:var(--radius-btn);background:transparent;color:var(--brand-dark);font-size:max(var(--text-min),var(--text-body-sm));font-weight:600;line-height:1;letter-spacing:-0.01em;text-transform:uppercase;text-decoration:none;margin-top:calc(var(--space-16) - var(--space-24));transition:background-color .16s ease}.news-v2__all-link:hover,.news-v2__all-link:focus-visible{background:var(--brand-opacity-15);color:var(--brand-dark)}.news-v2__all-link-icon{display:none}.news-v2__pagination-host{display:flex}.news-v2__slider.swiper{overflow:hidden}.news-v2__slider .news-v2__grid.swiper-wrapper{display:flex;gap:0}.news-v2__slider .swiper-slide{width:100%;flex-shrink:0}.news-v2__card{flex-direction:column;align-items:stretch;gap:var(--space-8);min-height:0;padding:var(--space-8) var(--space-8) var(--space-16)}.news-v2__card-media{width:100%;max-width:none}.news-v2__card-img{height:auto;min-height:0;aspect-ratio:312 \/ 149}.news-v2__card-content{min-height:0;padding:0;gap:var(--space-8)}.news-v2__card-tags{justify-content:space-between}.news-v2__expert{display:block}.news-v2__card-title{margin:0;font-size:var(--text-body);font-weight:500;line-height:var(--lh-body)}.news-v2__meta{margin-top:0;font-size:max(var(--text-min),var(--text-body-sm))}.news-v2__meta-read{gap:var(--space-4)}}@media (max-width:576px){.news-v2__meta{gap:var(--space-8) var(--space-12)}}.promo-v2__featured-media > img{aspect-ratio:3 \/ 2}.promo-v2__card-media > img{aspect-ratio:16 \/ 9}.promo-v2{box-sizing:border-box;--promo-v2-grid-gap-x:clamp(var(--space-24),2.6vw,43px);--promo-v2-grid-gap-y:clamp(var(--space-24),2.5vw,41px);--promo-v2-featured-min-h:clamp(420px,42vw,617px);--promo-v2-card-min-h:clamp(240px,22vw,288px)}.promo-v2__inner.stack--xl{gap:clamp(var(--space-40),4vw,60px)}.promo-v2__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.promo-v2__head-main{flex:1 1 auto;min-width:0;max-width:940px}.promo-v2__title{margin:0;color:var(--text-primary)}.promo-v2__head-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-40);flex:none}.promo-v2__slider-nav{width:132px;justify-content:space-between}.promo-v2__carousel{width:100%;overflow:hidden}.promo-v2__slider{width:100%;overflow:hidden}.promo-v2__slider.swiper{overflow:hidden}.promo-v2__slider .swiper-slide{width:100%;height:auto;flex-shrink:0;box-sizing:border-box}.promo-v2__all-link{color:var(--text-secondary)}.promo-v2__all-link:hover,.promo-v2__all-link:focus-visible{color:var(--brand-dark)}.promo-v2__grid{display:grid;grid-template-columns:minmax(0,936fr) minmax(0,661fr);grid-template-rows:repeat(2,minmax(var(--promo-v2-card-min-h),auto));gap:var(--promo-v2-grid-gap-y) var(--promo-v2-grid-gap-x);align-items:stretch}.promo-v2__featured{position:relative;grid-column:1;grid-row:1 \/ span 2;min-height:var(--promo-v2-featured-min-h);border-radius:var(--radius);overflow:hidden;background:var(--bg-fill-surface)}.promo-v2__featured-media{position:absolute;inset:0}.promo-v2__featured-media img{display:block;width:100%;height:100%;object-fit:cover}.promo-v2__featured-overlay{position:absolute;inset:0 auto 0 0;width:min(745px,80%);background:linear-gradient(90deg,var(--white-opacity-75) 0%,transparent 100%);pointer-events:none}.promo-v2__featured-body{position:relative;z-index:2;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:var(--space-24);min-height:100%;padding:var(--space-32) 37px 48px;box-sizing:border-box}.promo-v2__badge{position:relative;display:inline-flex;align-items:center;min-height:44px;margin:0;padding-right:var(--space-20);color:var(--promo-warm);text-transform:uppercase;isolation:isolate}.promo-v2__badge::after{content:\"\";position:absolute;left:22px;right:0;top:0;bottom:0;border-radius:0 var(--radius-pill) var(--radius-pill) 0;background:var(--promo-warm-bg);z-index:0;pointer-events:none}.promo-v2__badge-mark{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex:none;border-radius:var(--radius-full);background:var(--promo-warm)}.promo-v2__badge-icon-glyph{display:block;width:22px;height:22px;flex:none;background-color:var(--bg-fill-surface);-webkit-mask:var(--promo-v2-badge-icon-src) center \/ contain no-repeat;mask:var(--promo-v2-badge-icon-src) center \/ contain no-repeat}.promo-v2__badge--no-mark::after{left:0;border-radius:var(--radius-pill)}.promo-v2__badge--no-mark .promo-v2__badge-text{padding-left:var(--space-20)}.promo-v2__badge-text{position:relative;z-index:1;display:flex;align-items:center;min-height:44px;padding:0 0 0 var(--space-12);background:transparent;font-weight:600}.promo-v2__featured-copy{max-width:451px}.promo-v2__featured-title{margin:0;color:var(--text-primary)}.promo-v2__featured-title .accent{color:var(--brand)}.promo-v2__featured-text{margin:0;color:var(--text-primary)}.promo-v2__featured-btn{margin-top:var(--space-8)}.promo-v2__card{position:relative;display:block;min-height:var(--promo-v2-card-min-h);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:inherit;box-sizing:border-box;background:var(--bg-fill-surface)}.promo-v2__card--tint{background:var(--brand-surface-soft)}.promo-v2__card--no-image.promo-v2__card--overlay{background:var(--bg-fill-surface)}.promo-v2__card-media{position:absolute;inset:0;pointer-events:none}.promo-v2__card--overlay .promo-v2__card-media img{position:absolute;top:-21.12%;left:-15.67%;width:117.61%;height:149.46%;max-width:none;object-fit:cover}.promo-v2__card--tint .promo-v2__card-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:right center}.promo-v2__card-overlay{position:absolute;inset:0 auto 0 0;width:min(471px,72%);background:linear-gradient(90deg,var(--white-opacity-75) 0%,transparent 100%);pointer-events:none}.promo-v2__card-icon{position:absolute;top:28px;left:37px;z-index:2;display:flex;align-items:center;justify-content:center;width:69px;height:69px;border-radius:var(--radius-full);background:var(--white)}.promo-v2__card-icon-img{display:block;width:32px;height:32px;flex:none}.promo-v2__card-icon--no-icon{background:none}.promo-v2__card-body{position:absolute;left:37px;right:37px;bottom:44px;z-index:2;max-width:369px}.promo-v2__card-title{margin:0;color:var(--brand)}.promo-v2__card-text{margin:0;color:var(--text-primary)}@media (hover:hover){.promo-v2__card:hover .promo-v2__card-media img,.promo-v2__card:focus-visible .promo-v2__card-media img{transform:scale(1.04)}.promo-v2__card--overlay .promo-v2__card-media img,.promo-v2__card--tint .promo-v2__card-media img{transition:transform .32s ease}.promo-v2__card:hover .promo-v2__card-title,.promo-v2__card:focus-visible .promo-v2__card-title{color:var(--brand-dark)}.promo-v2__card-title{transition:color .16s ease}}.promo-v2__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (max-width:1200px){.promo-v2__head{flex-direction:column;align-items:flex-start}.promo-v2__head-actions{width:100%;justify-content:space-between}.promo-v2__grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto minmax(var(--promo-v2-card-min-h),auto)}.promo-v2__featured{grid-column:1 \/ -1;grid-row:1;min-height:clamp(380px,52vw,617px)}.promo-v2__featured-body{padding:clamp(var(--space-24),3vw,var(--space-32)) clamp(20px,3vw,37px) clamp(32px,4vw,48px)}.promo-v2__featured-copy{max-width:min(451px,62%)}.promo-v2__card{grid-row:2;min-height:clamp(240px,28vw,320px)}.promo-v2__card-icon{top:clamp(16px,2.5vw,24px);left:clamp(16px,2.5vw,24px);width:clamp(48px,6vw,56px);height:clamp(48px,6vw,56px)}.promo-v2__card-icon-img{width:clamp(24px,3vw,28px);height:clamp(24px,3vw,28px)}.promo-v2__card-body{left:clamp(16px,2.5vw,24px);right:clamp(16px,2.5vw,24px);bottom:clamp(20px,3vw,32px);max-width:none}}@media (max-width:768px){.promo-v2__inner.stack--xl{display:flex;flex-direction:column;gap:var(--space-24)}.promo-v2__head{display:contents}.promo-v2__head-main{order:1}.promo-v2__slider-foot{order:2}.promo-v2__head-actions{order:3;display:flex;justify-content:center;width:100%}.promo-v2__slider-nav{display:none}.promo-v2__all-link{box-sizing:border-box;width:min(260px,100%);min-height:40px;padding:var(--space-12) var(--space-24);border:2px solid var(--brand);border-radius:var(--radius-btn);background:transparent;color:var(--brand-dark);text-transform:uppercase;font-weight:600;justify-content:center}.promo-v2__all-link:hover,.promo-v2__all-link:focus-visible{background:var(--brand-opacity-15);color:var(--brand-dark)}.promo-v2__all-link-icon{display:none}.promo-v2__slider-foot{overflow-anchor:none}.promo-v2__grid{grid-template-columns:1fr;grid-template-rows:auto;gap:var(--space-16)}.promo-v2__featured{grid-column:1;grid-row:auto}.promo-v2__card{grid-column:1;grid-row:auto}.promo-v2__featured,.promo-v2__card{min-height:254px}.promo-v2__featured-media img{position:absolute;top:-3.33%;left:-3.04%;width:114.35%;height:110.02%;max-width:none;object-fit:cover}.promo-v2__featured-overlay{inset:0;width:100%;background:linear-gradient( -68.28deg,transparent 3.34%,var(--white-opacity-75) 88.99% )}.promo-v2__featured-body{justify-content:flex-start;gap:0;min-height:100%;padding:25px 15px 16px}.promo-v2__featured-copy{order:1;max-width:220px}.promo-v2__badge{order:2;margin-top:auto;min-height:32px;padding-right:var(--space-12)}.promo-v2__badge::after{left:16px}.promo-v2__badge--no-mark::after{left:0}.promo-v2__badge--no-mark .promo-v2__badge-text{padding-left:var(--space-12)}.promo-v2__badge-mark{width:32px;height:32px}.promo-v2__badge-icon-glyph{width:16px;height:16px}.promo-v2__badge-text{min-height:32px;padding-left:var(--space-8)}.promo-v2__featured-btn{display:none}.promo-v2__card--overlay .promo-v2__card-overlay{width:min(142px,43%)}.promo-v2__card--overlay .promo-v2__card-media img{top:-21.51%;left:-18.57%;width:137.37%;height:133.63%}.promo-v2__card-body{top:25px;left:15px;right:auto;bottom:auto;max-width:220px}.promo-v2__card-icon{top:auto;bottom:16px;left:15px;width:44px;height:44px}.promo-v2__card-icon-img{width:20px;height:20px}}.cta-v1 picture > img{aspect-ratio:1920 \/ 762}.cta-v1{box-sizing:border-box}.cta-v1--fullwidth .cta-v1__bg img{object-position:center bottom}.cta-v1--fullwidth .cta-v1__inner{padding:130px 0;grid-template-areas:\"head features\" \"lead .\" \"form .\"}.cta-v1--fullwidth .cta-v1__intro{display:contents}.cta-v1--fullwidth .cta-v1__head{grid-area:head}.cta-v1--fullwidth .cta-v1__lead{grid-area:lead}.cta-v1--fullwidth .cta-v1__features{align-self:end;justify-self:start;position:relative;top:calc(var(--space-64) * 2)}.cta-v1__card{position:relative;overflow:hidden;border-radius:var(--radius);box-sizing:border-box}.cta-v1__bg{position:absolute;inset:0;z-index:0}.cta-v1__bg picture{display:block;width:100%;height:100%}.cta-v1__bg img{display:block;width:100%;height:100%;object-fit:cover;object-position:center bottom}.cta-v1__inner{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,720px) minmax(0,1fr);grid-template-areas:\"intro intro\" \"form features\";gap:var(--space-40) var(--space-64);padding:calc(var(--space-64) + var(--space-16)) 87px;box-sizing:border-box}.cta-v1__intro{grid-area:intro;max-width:753px}.cta-v1__head{display:flex;flex-direction:column;align-items:flex-start;max-width:753px}.cta-v1__eyebrow.eyebrow{color:var(--brand);width:fit-content}.cta-v1__title{margin:0;color:var(--text-primary)}.cta-v1__lead{margin:0;color:var(--text-secondary);max-width:682px}.cta-v1__features{grid-area:features;margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:30px;align-self:center;justify-self:start}.cta-v1__feature{display:flex;gap:var(--space-16);align-items:center}.cta-v1__feature--no-icon{gap:0}.cta-v1__feature-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex:none;border-radius:var(--radius-full);background:var(--brand-opacity-20)}.cta-v1__feature-icon img{display:block;width:24px;height:24px}.cta-v1__feature-text{display:block;max-width:260px;color:var(--text-primary)}.cta-v1__form{grid-area:form;width:100%;max-width:720px}.cta-v1__form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-16);width:100%}.cta-v1__field{position:relative;min-width:0}.cta-v1__input.field__input{min-height:54px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.cta-v1__select{appearance:none;-webkit-appearance:none;padding-right:52px;cursor:pointer}.cta-v1__select:disabled{cursor:default}.cta-v1__select-icon{position:absolute;right:20px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.cta-v1__submit{min-height:54px;padding:var(--space-14) var(--space-32);width:100%}.cta-v1__consent{margin-top:var(--space-16)}.cta-v1__consent .popup-form__consent-text{color:var(--text-muted)}@media (max-width:1460px){.cta-v1__inner{grid-template-columns:minmax(0,1fr);grid-template-areas:\"intro\" \"form\" \"features\";gap:0;padding:var(--space-48) var(--space-40)}.cta-v1--fullwidth .cta-v1__intro{display:flex}.cta-v1--fullwidth .cta-v1__inner{grid-template-areas:\"intro\" \"form\" \"features\"}.cta-v1__intro{margin-bottom:var(--space-32)}.cta-v1__form{margin-bottom:var(--space-56)}.cta-v1--fullwidth .cta-v1__features{position:static;top:auto;align-self:start}.cta-v1__features{flex-direction:row;flex-wrap:wrap;gap:var(--space-24);align-self:start;justify-self:start}.cta-v1__feature-text{max-width:260px}}@media (max-width:1200px){.cta-v1__inner{padding:var(--space-48) var(--space-24)}}@media (max-width:768px){.cta-v1__card{min-height:0}.cta-v1__form-grid{grid-template-columns:1fr}.cta-v1__submit{width:100%}.cta-v1__features{flex-direction:column}}.navigation-v1{--navigation-v1-pad-y:var(--space-18);--navigation-v1-surface-pad-x:30px;--navigation-v1-surface-pad-y:13px;--navigation-v1-icon-size:44px;--navigation-v1-link-gap:var(--space-16);--navigation-v1-link-pad-x:0px;--navigation-v1-link-pad-y:0px;--navigation-v1-item-max:235px;box-sizing:border-box;position:sticky;top:var(--site-sticky-offset,var(--site-nav-h,0px));z-index:15;overflow:visible;background:transparent}.navigation-v1.section-bg{background:transparent}.page > section.navigation-v1.section-bg,.page > section + section.navigation-v1.section-bg,.page > section.navigation-v1.section-bg:has(+ section.section-bg){margin-top:0;padding-top:var(--navigation-v1-pad-y);padding-bottom:var(--navigation-v1-pad-y)}.navigation-v1__viewport{position:relative}.navigation-v1__scroll{box-sizing:border-box;width:100%;max-width:100%;min-width:0;overflow:visible}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;touch-action:pan-x;scrollbar-width:none}.navigation-v1__scroll::-webkit-scrollbar{display:none}.navigation-v1__bar{display:flex;align-items:center;min-height:44px;width:100%;box-sizing:border-box}.navigation-v1--surface-white .navigation-v1__bar{min-height:76px;padding:var(--navigation-v1-surface-pad-y) var(--navigation-v1-surface-pad-x);border-radius:10px;background:var(--white)}.navigation-v1__list{display:flex;align-items:center;justify-content:space-between;gap:0;width:100%;min-width:100%;margin:0;padding:0;list-style:none;box-sizing:border-box}.navigation-v1.navigation-v1--overflowing .navigation-v1__bar{width:max-content;min-width:100%}.navigation-v1.navigation-v1--overflowing .navigation-v1__list{justify-content:flex-start;width:max-content;min-width:0;gap:var(--space-16)}.navigation-v1__item{display:flex;flex:0 0 var(--navigation-v1-item-max);align-items:center;min-width:0;width:var(--navigation-v1-item-max);max-width:var(--navigation-v1-item-max);padding-right:var(--space-16);box-sizing:border-box;position:relative}.navigation-v1__item:not(:last-child){border-right:1px solid var(--ui-border-default)}.navigation-v1__link{display:flex;align-items:center;gap:var(--navigation-v1-link-gap);min-width:0;width:100%;max-width:100%;padding:var(--navigation-v1-link-pad-y) var(--navigation-v1-link-pad-x);border-radius:var(--radius);color:inherit;text-decoration:none;box-sizing:border-box;transition:background-color .16s ease,color .16s ease}a.navigation-v1__link{cursor:pointer}.navigation-v1__link.is-active{color:var(--brand)}.navigation-v1--surface-white .navigation-v1__link.is-active{background:transparent}.navigation-v1--surface-white .navigation-v1__item.is-active::before{content:'';position:absolute;right:0;bottom:calc(-1 * var(--navigation-v1-surface-pad-y));left:0;height:4px;background:var(--brand)}.navigation-v1__icon{flex:none;display:block;width:var(--navigation-v1-icon-size);height:var(--navigation-v1-icon-size)}.navigation-v1__icon-img{display:block;width:var(--navigation-v1-icon-size);height:var(--navigation-v1-icon-size);aspect-ratio:1 \/ 1;object-fit:contain}.navigation-v1__title{display:block;flex:1 1 auto;min-width:0;max-width:none;color:var(--text-secondary);overflow-wrap:break-word;transition:color .16s ease}.navigation-v1__link.is-active .navigation-v1__title{color:var(--brand)}.navigation-v1__overflow-btn{display:none !important}.navigation-v1__mobile{display:none;position:relative;width:100%}.navigation-v1__desktop{width:100%}.navigation-v1__mobile-trigger{display:flex;align-items:center;gap:var(--navigation-v1-link-gap);width:100%;min-width:0;margin:0;padding:var(--navigation-v1-link-pad-y) var(--navigation-v1-link-pad-x);border:0;border-radius:var(--radius);background:transparent;color:inherit;text-align:left;cursor:pointer;box-sizing:border-box}.navigation-v1__mobile-trigger-title{flex:1 1 auto;min-width:0;color:var(--brand);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navigation-v1__mobile-trigger-chevron{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--text-secondary);transition:transform .16s ease,color .16s ease}.navigation-v1--mobile-open .navigation-v1__mobile-trigger-chevron{transform:rotate(180deg);color:var(--brand)}.navigation-v1__mobile-panel{position:absolute;top:calc(100% + var(--space-4));left:0;right:0;z-index:30;box-sizing:border-box;max-height:min(60vh,360px);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;border-radius:var(--radius);background:var(--white);box-shadow:var(--shadow-dropdown);-webkit-overflow-scrolling:touch}.navigation-v1__mobile-list{display:flex;flex-direction:column;gap:0;width:100%;margin:0;padding:var(--space-8);list-style:none;box-sizing:border-box}.navigation-v1__mobile-list .navigation-v1__item{flex:none;width:100%;max-width:none;padding-right:0;border-right:0}.navigation-v1__mobile-list .navigation-v1__item:not(:last-child){border-right:0;border-bottom:1px solid var(--ui-border-default)}.navigation-v1__mobile-list .navigation-v1__link{padding:var(--space-10) var(--space-8)}.navigation-v1__mobile-list .navigation-v1__title{max-width:none;white-space:normal}@media (hover:hover){a.navigation-v1__link:hover:not(.is-active) .navigation-v1__title,a.navigation-v1__link:focus-visible:not(.is-active) .navigation-v1__title{color:var(--brand-dark)}a.navigation-v1__link:hover:not(.is-active),a.navigation-v1__link:focus-visible:not(.is-active){background:var(--white-opacity-50)}}a.navigation-v1__link:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}@media (max-width:1600px){.navigation-v1{--navigation-v1-pad-y:var(--space-12);--navigation-v1-surface-pad-x:var(--space-20);--navigation-v1-surface-pad-y:var(--space-10);--navigation-v1-icon-size:30px;--navigation-v1-link-gap:var(--space-12);--navigation-v1-item-max:200px}.navigation-v1--surface-white .navigation-v1__bar{min-height:64px}.navigation-v1__item{padding-right:var(--space-12)}.navigation-v1__title{font-size:max(var(--text-min),var(--text-body-sm))}.navigation-v1.navigation-v1--overflowing .navigation-v1__list{gap:var(--space-12)}}@media (min-width:1201px){.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll{padding-bottom:var(--space-6);scrollbar-width:thin;scrollbar-color:var(--ui-border-default) transparent;cursor:grab}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll:active{cursor:grabbing}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll::-webkit-scrollbar{display:block;height:4px}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll::-webkit-scrollbar-track{background:transparent}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll::-webkit-scrollbar-thumb{border-radius:999px;background:var(--ui-border-default)}}@media (max-width:1200px){.navigation-v1{--navigation-v1-pad-y:var(--space-10);--navigation-v1-surface-pad-x:var(--space-16);--navigation-v1-surface-pad-y:var(--space-8);--navigation-v1-link-gap:var(--space-10);--navigation-v1-item-max:168px}.navigation-v1--surface-white .navigation-v1__bar{min-height:56px}.navigation-v1__item{padding-right:var(--space-10)}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;touch-action:pan-x;scrollbar-width:none;width:calc(100% + var(--page-gutter));max-width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter))}.navigation-v1__title{max-width:140px}}@media (max-width:768px){.navigation-v1{--navigation-v1-pad-y:var(--space-8);--navigation-v1-surface-pad-x:var(--space-12);--navigation-v1-surface-pad-y:var(--space-8);--navigation-v1-icon-size:26px;--navigation-v1-link-gap:var(--space-8);--navigation-v1-link-pad-y:var(--space-2);--navigation-v1-link-pad-x:var(--space-4);--navigation-v1-item-max:132px}.navigation-v1.navigation-v1--mobile-open{z-index:25}.navigation-v1__desktop{display:none}.navigation-v1__mobile{display:block}.navigation-v1__scroll{overflow:visible;width:100%;max-width:100%;margin-right:0}.navigation-v1.navigation-v1--overflowing .navigation-v1__scroll{overflow:visible;width:100%;max-width:100%;margin-right:0}.navigation-v1__bar{position:relative;min-height:40px}.navigation-v1--surface-white .navigation-v1__bar{min-height:48px;padding:var(--navigation-v1-surface-pad-y) var(--navigation-v1-surface-pad-x);border-radius:8px}.navigation-v1__mobile-trigger{min-height:36px;padding:var(--space-6) var(--space-4)}.navigation-v1__mobile-trigger-title,.navigation-v1__mobile-list .navigation-v1__title{font-size:var(--text-body-xs);line-height:var(--lh-body-tight)}.navigation-v1--surface-white .navigation-v1__item.is-active::before{display:none}.navigation-v1__mobile-list .navigation-v1__link.is-active .navigation-v1__title{color:var(--brand)}}.services-v4{--services-v4-photo-ratio:380 \/ 222;--services-v4-grid-cols:4;box-sizing:border-box}.services-v4__inner.stack--xl{gap:var(--space-40)}.services-v4__head.stack--md{gap:var(--space-20);max-width:826px}.services-v4__head--with-search.stack{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,min(40%,568px));grid-template-areas:\"eyebrow .\" \"title search\" \"lead .\";column-gap:var(--space-20);align-items:start;max-width:none;width:100%}.services-v4__eyebrow.eyebrow{color:var(--text-muted);width:fit-content;max-width:100%}.services-v4__head--with-search .services-v4__eyebrow{grid-area:eyebrow}.services-v4__title{margin:0;color:var(--text-primary)}.services-v4__head--with-search .services-v4__title{grid-area:title}.services-v4__lead{margin:0;color:var(--text-secondary)}.services-v4__head--with-search .services-v4__lead{grid-area:lead;max-width:826px}.services-v4__search.field{position:relative;width:100%;max-width:568px}.services-v4__head--with-search .services-v4__search.field{grid-area:search;align-self:start;justify-self:stretch;width:100%;min-width:0;max-width:568px}.services-v4__search-input.field__input{width:100%;min-height:60px;padding:var(--space-10) calc(var(--space-16) + 40px + var(--space-8) + 24px) var(--space-10) var(--space-24);border-radius:var(--radius);border:1px solid var(--ui-border-default);background:var(--white-opacity-40);color:var(--text-secondary)}.services-v4__search-input.field__input[type=\"search\"]::-webkit-search-cancel-button{width:24px;height:24px;margin-right:0;-webkit-mask-size:16px 16px;mask-size:16px 16px}.services-v4__search-input.field__input::placeholder{color:var(--text-secondary)}.services-v4__search-icon{position:absolute;top:50%;right:var(--space-16);display:flex;align-items:center;justify-content:center;width:40px;height:40px;transform:translateY(-50%);pointer-events:none}.services-v4__search-icon img{display:block;width:24px;height:24px}.services-v4__filter-select-wrap{display:none;position:relative;width:100%}.services-v4__filter-select.field__input{width:100%;min-height:60px;padding:var(--space-12) calc(var(--space-24) + 20px) var(--space-12) var(--space-16);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white-opacity-40);color:var(--text-secondary);cursor:pointer;appearance:none}.services-v4__filter-select.field__input:focus{border-color:var(--brand);outline:none}.services-v4__filter-select-chevron{position:absolute;top:50%;right:var(--space-16);color:var(--text-secondary);pointer-events:none;transform:translateY(-50%)}.services-v4__filters{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--space-12) var(--space-16)}.services-v4__chip{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-10);min-height:48px;padding:var(--space-12) var(--space-18);border:1px solid var(--brand-border);border-radius:var(--radius-xl);background:var(--bg-fill-surface);color:var(--text-secondary);cursor:pointer;user-select:none;white-space:nowrap;transition:transform .16s ease,border-color .16s ease,color .16s ease,background-color .16s ease}.services-v4__chip:hover:not(.is-active){border-color:var(--brand-border);color:var(--brand-dark)}.services-v4__chip:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.services-v4__chip.is-active{background:var(--brand-light);border-color:transparent;color:var(--text-on-brand)}.services-v4__chip.is-active .services-v4__chip-icon{filter:brightness(0) invert(1)}.services-v4__chip:not(.is-active) .services-v4__chip-icon{filter:none}.services-v4__chip.is-pressed{transform:scale(.98)}.services-v4__chip-icon{display:block;flex:none;width:24px;height:24px;object-fit:contain;transition:filter .16s ease}.services-v4__chip--no-icon{gap:0}.services-v4__chip-label{color:inherit}.services-v4--chip-decor-outline .services-v4__chip:not(.is-active){border-color:var(--brand-decor);background:transparent}.services-v4--chip-decor-outline .services-v4__chip:hover:not(.is-active){border-color:var(--brand-decor);color:var(--brand-dark)}.services-v4__grid{display:grid;grid-template-columns:repeat(var(--services-v4-grid-cols),minmax(0,1fr));gap:var(--space-32) var(--space-40);width:100%;margin:0;padding:0;list-style:none}.services-v4__item{min-width:0}.services-v4__item[hidden]{display:none}.services-v4__card{display:flex;flex-direction:column;gap:var(--space-10);height:100%;padding-bottom:var(--space-24);border-radius:var(--radius);background:var(--bg-fill-surface);overflow:hidden;text-decoration:none;color:inherit;transition:transform .16s ease,box-shadow .16s ease}.services-v4__card:hover,.services-v4__card:focus-visible{transform:translateY(-2px);box-shadow:0 12px 28px var(--glass-text-08)}.services-v4__card:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.services-v4__card-photo{width:100%;aspect-ratio:var(--services-v4-photo-ratio);overflow:hidden;border-radius:var(--radius)}.services-v4__card-img{display:block;width:100%;height:100%;object-fit:cover}.services-v4__card-title{margin:0;padding-inline:var(--space-24);color:var(--text-primary)}.services-v4__empty{margin:0;color:var(--text-muted);text-align:center}.services-v4__more{align-self:center;min-width:218px}.services-v4__more[hidden]{display:none}@media (max-width:1360px){.services-v4{--services-v4-grid-cols:3}}@media (max-width:991px){.services-v4__head--with-search.stack{grid-template-columns:minmax(0,1fr);grid-template-areas:\"eyebrow\" \"title\" \"search\" \"lead\"}.services-v4__search.field,.services-v4__head--with-search .services-v4__search.field{width:100%;min-width:0;max-width:none}}@media (max-width:768px){.services-v4{--services-v4-grid-cols:1}.services-v4__filter-select-wrap{display:block}.services-v4__filters{display:none}.services-v4__grid{gap:var(--space-16)}}@media (prefers-reduced-motion:reduce){.services-v4__card,.services-v4__chip{transition:none}}.promo-v1__card-img{aspect-ratio:200 \/ 107}.promo-v1{box-sizing:border-box}.promo-v1__inner.stack--xl{gap:var(--space-56)}.promo-v1__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.promo-v1__head-main{flex:1 1 auto;min-width:0;max-width:940px}.promo-v1__title{margin:0;color:var(--text-primary)}.promo-v1__head-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-40);flex:none}.promo-v1__all-link{color:var(--text-secondary)}.promo-v1__all-link:hover,.promo-v1__all-link:focus-visible{color:var(--brand-dark)}.promo-v1__all-link-icon{}.promo-v1__mobile-actions{display:none}.promo-v1__all-btn{width:min(260px,100%)}.promo-v1__slider-nav{width:132px;justify-content:space-between}.promo-v1__carousel{width:100%;overflow:hidden}.promo-v1__slider{width:100%;overflow:hidden}.promo-v1__slider.swiper{overflow:hidden}.promo-v1__slider .swiper-slide{width:100%;height:auto;flex-shrink:0;box-sizing:border-box}.promo-v1__card{position:relative;display:block;width:100%;min-height:428px;border-radius:var(--radius);overflow:hidden;text-decoration:none;color:inherit;box-sizing:border-box}.promo-v1__card-bg{position:absolute;inset:0;pointer-events:none}.promo-v1__card-img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .32s ease}.promo-v1__card--gradient .promo-v1__card-bg::after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,var(--white-opacity-75) 0%,transparent 62%);pointer-events:none}.promo-v1__card--no-image{background:var(--bg-fill-surface)}.promo-v1__card--no-image.promo-v1__card--gradient{background:linear-gradient(90deg,var(--white-opacity-75) 0%,var(--bg-fill-surface) 62%)}.promo-v1__card-icon{position:absolute;top:31px;left:53px;z-index:2;display:flex;align-items:center;justify-content:center;width:69px;height:69px;border-radius:var(--radius-full);background:var(--white);overflow:hidden}.promo-v1__card-icon-img{display:block;width:32px;height:32px;flex:none;background-color:var(--brand);-webkit-mask:var(--promo-v1-icon-src) center \/ contain no-repeat;mask:var(--promo-v1-icon-src) center \/ contain no-repeat}.promo-v1__card-icon--no-icon{background:none}.promo-v1__card-body{position:absolute;left:53px;right:53px;bottom:48px;z-index:2;max-width:347px}.promo-v1__card-title{margin:0;color:var(--brand);transition:color .16s ease}.promo-v1__card-text{margin:0;max-width:329px;color:var(--text-primary)}@media (hover:hover){.promo-v1__card:hover .promo-v1__card-img,.promo-v1__card:focus-visible .promo-v1__card-img{transform:scale(1.05)}.promo-v1__card:hover .promo-v1__card-title,.promo-v1__card:focus-visible .promo-v1__card-title{color:var(--brand-dark)}}.promo-v1__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (max-width:1200px){.promo-v1__head{flex-direction:column;align-items:flex-start}.promo-v1__head-actions{width:100%;justify-content:space-between}.promo-v1__card{min-height:360px}.promo-v1__card-icon{top:24px;left:24px;width:56px;height:56px}.promo-v1__card-icon-img{width:28px;height:28px}.promo-v1__card-body{left:24px;right:24px;bottom:24px}}@media (max-width:768px){.promo-v1__inner.stack--xl{gap:var(--space-24)}.promo-v1__head-actions{display:none}.promo-v1__slider-foot{overflow-anchor:none}.promo-v1__carousel{height:524px;flex:none}.promo-v1__slider.swiper{height:100%}.promo-v1__slider .swiper-wrapper{height:100%}.promo-v1__slider .swiper-slide{height:calc((100% - 16px) \/ 2)}.promo-v1__card{min-height:254px;height:100%}.promo-v1__card-icon{top:auto;bottom:16px;left:15px;width:44px;height:44px}.promo-v1__card-icon-img{width:20px;height:20px}.promo-v1__card-body{top:24px;right:15px;bottom:auto;left:15px;max-width:220px}.promo-v1__mobile-actions{display:flex;justify-content:center;width:100%}}.text-v1 img{aspect-ratio:3 \/ 2}.text-v1{box-sizing:border-box}.text-v1__inner{padding:60px 0;padding-right:clamp(0px,5vw,90px);box-sizing:border-box}.text-v1__title{margin:0;max-width:1080px;color:var(--text-primary);overflow-wrap:break-word;hyphens:auto}.text-v1__body{margin-top:var(--space-40);display:flex;flex-direction:column;gap:var(--space-24);align-items:flex-start}.text-v1__content{max-width:1080px;color:var(--text-secondary)}.text-v1__content p{margin:0}.text-v1__content p + p{margin-top:var(--space-16)}.text-v1__toggle{padding:0;border:0;background:transparent;cursor:pointer;color:var(--text-secondary)}.text-v1__toggle:hover{color:var(--text-primary)}.text-v1__toggle:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px;border-radius:8px}@media (max-width:768px){.text-v1__inner{padding:var(--space-40) 0;padding-right:0}.text-v1__body{margin-top:var(--space-24)}.text-v1__content{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.text-v1__content table{min-width:0;width:max-content}}.hero-v6__bg > img{aspect-ratio:1981 \/ 794}.hero-v6{background-color:var(--bg-fill-page);box-sizing:border-box;min-height:calc(100vw * 700 \/ 1920)}.hero-v6__bg img{width:100%;height:100%;object-fit:cover;object-position:right center}.hero-v6__inner{align-items:flex-start;width:100%;max-width:719px}.hero-v6__head{width:100%}.hero-v6__lead{width:100%}.hero-v6__eyebrow{color:var(--text-muted)}.hero-v6__title{margin:0;color:var(--text-primary)}.hero-v6__subtitle{margin:0;color:var(--brand-dark)}.hero-v6__benefits{display:flex;flex-direction:column;gap:var(--space-16);align-items:flex-start;width:100%;max-width:377px;margin:0;padding:0;list-style:none}.hero-v6__benefit{display:flex;gap:var(--space-16);align-items:center;width:100%}.hero-v6__benefit--no-icon{gap:0}.hero-v6__benefit-icon{position:relative;display:flex;align-items:center;justify-content:center;flex:none;width:54px;height:54px;border-radius:var(--radius-full);color:var(--brand-dark)}.hero-v6__benefit-icon::before{content:\"\";position:absolute;inset:0;border-radius:var(--radius-full);background:var(--brand-opacity-20);pointer-events:none}.hero-v6__benefit-icon::after{content:\"\";position:relative;z-index:1;width:24px;height:24px;background:currentColor;-webkit-mask:var(--hero-v6-icon-src) center \/ contain no-repeat;mask:var(--hero-v6-icon-src) center \/ contain no-repeat}.hero-v6__benefit-text{margin:0;color:var(--text-secondary);min-width:0}@media (max-width:1360px) and (min-width:1201px){.hero-v6__inner{padding:var(--space-32);background:var(--white-opacity-50);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));border-radius:var(--radius);box-sizing:border-box}}@media (max-width:1200px){.hero-v6{display:flex;flex-direction:column;min-height:auto;padding-bottom:var(--section-y-mobile)}.hero-v6.has-block-bg.section-pad-y-lg>.container{padding-bottom:0}.hero-v6__bg{position:static;order:2;flex:none;width:100%;aspect-ratio:375\/280;min-height:220px}.hero-v6__bg img{min-height:0;object-position:right center}.hero-v6>.container{order:1;flex:none;width:100%;max-width:none}.hero-v6__inner{max-width:none;padding:0;margin-bottom:var(--space-16);background:none;border-radius:0}.hero-v6__benefits{max-width:none}}@media (max-width:768px){.hero-v6.has-block-bg.section-pad-y-lg>.container{padding-bottom:0}}.progression-stages-v1{box-sizing:border-box}.progression-stages-v1__inner{min-width:0}.progression-stages-v1__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-40)}.progression-stages-v1__lead{flex:1 1 auto;min-width:0;max-width:746px}.progression-stages-v1__eyebrow{color:var(--text-muted)}.progression-stages-v1__title{margin:0;color:var(--text-primary)}.progression-stages-v1__notice{display:flex;flex:0 1 495px;gap:var(--space-16);align-items:flex-start;max-width:495px;padding:var(--space-16);border:1px solid var(--ui-border-default);border-radius:var(--radius);box-sizing:border-box}.progression-stages-v1__notice--no-icon{gap:0}.progression-stages-v1__notice-icon{flex:none;width:40px;height:40px}.progression-stages-v1__notice-icon-img{display:block;width:100%;height:100%}.progression-stages-v1__notice-text{margin:0;min-width:0;font-weight:600;color:var(--text-secondary)}.progression-stages-v1__cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-40);width:100%;margin:0;padding:0;list-style:none}.progression-stages-v1__card{display:flex;flex-direction:column;gap:var(--space-40);min-width:0;padding:var(--space-14);border-radius:var(--radius);background:var(--white);box-sizing:border-box}.progression-stages-v1__media{position:relative;overflow:hidden;width:100%;aspect-ratio:362 \/ 237;background:var(--bg-fill-surface)}.progression-stages-v1__media-img{display:block;width:100%;height:100%;object-fit:contain;object-position:center bottom}.progression-stages-v1__badge{position:absolute;top:var(--space-12);left:0;z-index:1;display:inline-flex;align-items:center;justify-content:center;max-width:calc(100% - var(--space-8));padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);background:var(--brand-opacity-20);color:var(--brand-dark);font-weight:600;line-height:1.4;box-sizing:border-box}.progression-stages-v1__points{display:flex;flex-direction:column;gap:var(--space-14);width:100%;margin:0;padding:0;list-style:none}.progression-stages-v1__point{display:flex;gap:var(--space-8);align-items:flex-start}.progression-stages-v1__point--no-icon{gap:0}.progression-stages-v1__point-icon{display:flex;flex:none;align-items:center;justify-content:center;width:20px;height:20px;overflow:hidden}.progression-stages-v1__point-icon-img{display:block;width:16px;height:16px}.progression-stages-v1__point-text{margin:0;min-width:0;color:var(--text-primary)}.progression-stages-v1__cta{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,687px);gap:var(--space-40);align-items:center;padding:var(--space-28) var(--space-64) var(--space-32);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.progression-stages-v1__cta--bg-brand-soft{background:var(--brand-surface-soft)}.progression-stages-v1__cta-copy{min-width:0;max-width:598px}.progression-stages-v1__cta-eyebrow{color:var(--brand)}.progression-stages-v1__cta-title{margin:0;color:var(--text-primary)}.progression-stages-v1__cta-lead{margin:0;max-width:455px;font-weight:600;color:var(--text-secondary)}.progression-stages-v1__cta-form{min-width:0;width:100%}.progression-stages-v1__cta-text{margin:0;max-width:519px;color:var(--text-secondary)}.progression-stages-v1__cta-row{display:flex;gap:var(--space-24);align-items:center}.progression-stages-v1__field{flex:0 0 303px;width:303px;max-width:100%}.progression-stages-v1__input{min-height:54px;padding:var(--space-18) var(--space-20);border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.progression-stages-v1__cta-btn{flex:0 0 auto;min-height:54px;padding:var(--space-14) var(--space-32);white-space:nowrap}.progression-stages-v1__consent{display:flex;align-items:flex-start;gap:var(--space-18);margin:0;color:var(--text-muted);cursor:pointer}.progression-stages-v1__checkbox{width:20px;height:20px;flex:none;margin:0;border-radius:var(--radius-sm);accent-color:var(--brand)}.progression-stages-v1__consent-text{margin:0;max-width:589px;line-height:var(--lh-body-tight)}.progression-stages-v1__consent-link{color:inherit;text-decoration:underline;text-underline-offset:2px;transition:color .16s ease,text-decoration-color .16s ease}.progression-stages-v1__consent-link:hover,.progression-stages-v1__consent-link:focus-visible{color:var(--brand-dark);text-decoration-color:currentColor}@media (max-width:1499px){.progression-stages-v1__cta{grid-template-columns:1fr;gap:var(--space-24)}}@media (max-width:1360px){.progression-stages-v1__cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24)}.progression-stages-v1__cta{padding:var(--space-32) var(--space-40)}}@media (max-width:1200px){.progression-stages-v1__head{flex-direction:column;align-items:stretch;gap:var(--space-24)}.progression-stages-v1__lead,.progression-stages-v1__notice{max-width:none;flex:1 1 auto}}@media (max-width:768px){.progression-stages-v1__cards{grid-template-columns:1fr;gap:var(--space-16)}.progression-stages-v1__card{gap:var(--space-24)}.progression-stages-v1__cta{padding:var(--space-24) var(--space-16)}.progression-stages-v1__cta-row{flex-direction:column;align-items:stretch;gap:var(--space-16)}.progression-stages-v1__field{flex:1 1 auto;width:100%}.progression-stages-v1__cta-btn{width:100%;white-space:normal}}.progression-stages-v2{box-sizing:border-box}.progression-stages-v2__inner{min-width:0}.progression-stages-v2__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-40)}.progression-stages-v2__lead{flex:1 1 auto;min-width:0;max-width:1080px}.progression-stages-v2__eyebrow{color:var(--text-muted)}.progression-stages-v2__title{margin:0;color:var(--text-primary)}.progression-stages-v2__subtitle{margin:0;max-width:1080px;color:var(--text-secondary)}.progression-stages-v2__notice{display:flex;flex:0 1 411px;gap:var(--space-24);align-items:flex-start;max-width:411px;padding:var(--space-16);border:1px solid var(--ui-border-default);border-radius:var(--radius);box-sizing:border-box}.progression-stages-v2__notice--bg-brand-soft{background:var(--brand-surface-soft);border-color:var(--brand-surface-soft)}.progression-stages-v2__notice--no-icon{gap:0}.progression-stages-v2__notice-icon{flex:none;width:40px;height:40px}.progression-stages-v2__notice-icon-img{display:block;width:100%;height:100%}.progression-stages-v2__notice-text{margin:0;min-width:0;font-weight:600;color:var(--text-secondary)}.progression-stages-v2__body{min-width:0;width:100%}.progression-stages-v2__body.stack--md{gap:var(--space-24)}.progression-stages-v2__body--no-tabs.stack--md{gap:0}.progression-stages-v2__tabs-block{display:flex;flex-direction:column;gap:var(--space-16);min-width:0;width:100%}.progression-stages-v2__tabs{display:flex;flex-wrap:wrap;gap:var(--space-8);width:100%}.progression-stages-v2__tabs-track{display:none;position:relative}.progression-stages-v2__tabs-thumb{position:absolute;top:0;left:0;height:100%;width:100%;background:var(--brand);transform:translate3d(0,0,0) scaleX(0);transform-origin:left center;will-change:transform}.progression-stages-v2__tab{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-10);min-height:48px;padding:var(--space-12) var(--space-18);border:1px solid var(--brand-border);border-radius:var(--radius-xl);background:var(--white);color:var(--text-secondary);cursor:pointer;box-sizing:border-box;transform:translateZ(0);transition:background-color .16s ease,border-color .16s ease,color .16s ease}.progression-stages-v2__tab.is-active{border-color:transparent;background:var(--brand-light);color:var(--white)}.progression-stages-v2__tab:focus{outline:none}.progression-stages-v2__tab:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.progression-stages-v2__tab-icon{display:block;flex:none;width:24px;height:24px;background-color:currentColor;-webkit-mask:var(--progression-stages-v2-tab-icon-src) center \/ contain no-repeat;mask:var(--progression-stages-v2-tab-icon-src) center \/ contain no-repeat}.progression-stages-v2__tab-label{font-weight:600;white-space:nowrap}.progression-stages-v2__tab-label--mob{display:none}.progression-stages-v2__panels{min-width:0;width:100%}.progression-stages-v2__panel{min-width:0;width:100%}.progression-stages-v2__panel[hidden]{display:none}.progression-stages-v2__slider-foot{min-width:0}.progression-stages-v2__slider.swiper{width:100%;overflow:hidden}.progression-stages-v2__slider .swiper-wrapper{align-items:stretch}.progression-stages-v2__slide{height:auto;box-sizing:border-box}.progression-stages-v2__card{position:relative;overflow:hidden;width:100%;aspect-ratio:312 \/ 461;border-radius:var(--radius);background:var(--bg-fill-panel);box-shadow:var(--shadow-brand-soft);box-sizing:border-box}.progression-stages-v2__card-media,.progression-stages-v2__card-overlay{position:absolute;inset:0}.progression-stages-v2__card-img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.progression-stages-v2__card-overlay{position:absolute;inset:0;background:linear-gradient(180deg,transparent 0%,color-mix(in srgb,var(--brand-dark) 75%,transparent) 78.42%);pointer-events:none}.progression-stages-v2__card-overlay::after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:21.58%;-webkit-backdrop-filter:blur(var(--glass-blur-mobile));backdrop-filter:blur(var(--glass-blur-mobile))}.progression-stages-v2__card-content{position:absolute;inset:0;z-index:1;padding:var(--space-20);box-sizing:border-box;pointer-events:none}.progression-stages-v2__card-num{position:absolute;left:var(--space-20);bottom:calc(var(--space-20) + (1.3em * 3) + var(--space-18));display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:var(--radius-full);background:var(--white-opacity-40);color:var(--white);font-weight:600;box-sizing:border-box}.progression-stages-v2__card-title{position:absolute;left:var(--space-20);right:var(--space-20);bottom:var(--space-20);margin:0;max-width:269px;min-height:calc(1.3em * 3);font-weight:600;color:var(--white)}.progression-stages-v2__pagination-host{display:none}@media (max-width:1200px){.progression-stages-v2__head{flex-direction:column;align-items:stretch;gap:var(--space-24)}.progression-stages-v2__lead,.progression-stages-v2__notice{max-width:none;flex:1 1 auto}}@media (max-width:768px){.progression-stages-v2__inner.stack--xl{gap:var(--space-32)}.progression-stages-v2__body.stack--md{gap:var(--space-32)}.progression-stages-v2__lead.stack--md{gap:var(--space-16)}.progression-stages-v2__notice{gap:var(--space-24);padding:var(--space-8) var(--space-16)}.progression-stages-v2__tabs-block{width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter))}.progression-stages-v2__tabs{flex-wrap:nowrap;width:100%;padding-right:var(--page-gutter);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.progression-stages-v2__tabs::-webkit-scrollbar{display:none}.progression-stages-v2__tabs-track{display:block;width:calc(100% - var(--page-gutter));height:2px;background:var(--brand-opacity-20);overflow:hidden}.progression-stages-v2__tab{flex:none;align-items:center;gap:var(--space-8);height:42px;min-height:42px;padding:var(--space-4) var(--space-8);border-radius:var(--radius);line-height:1}.progression-stages-v2__tab-label--desk{display:none}.progression-stages-v2__tab-label--mob{display:block;white-space:normal;max-width:var(--progression-stages-v2-tab-label-max,88px);text-align:left;font-weight:600;line-height:1.2}.progression-stages-v2__slider.swiper{overflow:visible}.progression-stages-v2__slider-foot{width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter));overflow:hidden}.progression-stages-v2__slide{width:230px}.progression-stages-v2__card{aspect-ratio:230 \/ 307}.progression-stages-v2__card-content{padding:var(--space-12)}.progression-stages-v2__card-num{left:var(--space-12);bottom:calc(var(--space-12) + (1.34em * 3) + var(--space-18))}.progression-stages-v2__card-title{left:var(--space-12);right:var(--space-12);bottom:var(--space-12);max-width:172px;min-height:calc(1.34em * 3)}.progression-stages-v2__pagination-host{display:flex}}.prices-v2{box-sizing:border-box}.prices-v2__inner.stack--xl{gap:var(--space-40)}.prices-v2__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.prices-v2__head-main{flex:1 1 auto;min-width:0;max-width:1002px}.prices-v2__head-main .stack--md{gap:var(--space-24)}.prices-v2__title{margin:0;color:var(--text-primary)}.prices-v2__lead{margin:0;max-width:1002px;color:var(--text-secondary)}.prices-v2__head-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-40);flex:none}.prices-v2__all{color:var(--text-secondary)}.prices-v2__all:hover,.prices-v2__all:focus-visible{color:var(--brand-dark)}.prices-v2__slider-nav{width:132px;justify-content:space-between}.prices-v2__body.stack--xl{gap:var(--space-40)}.prices-v2__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(var(--space-16),2.5vw,var(--space-40));margin:0;padding:0;list-style:none}.prices-v2__grid-item{min-width:0}.prices-v2__carousel,.prices-v2__slider{width:100%;overflow:hidden}.prices-v2__slider.swiper{overflow:hidden}.prices-v2__slider .swiper-slide{height:auto;box-sizing:border-box}.prices-v2__card{display:flex;flex-direction:column;align-items:center;gap:var(--space-24);height:100%;padding:var(--space-20) var(--space-24);border-radius:10px;background:var(--white-opacity-50);box-sizing:border-box}.prices-v2__card-top{display:flex;flex-direction:column;align-items:center;gap:var(--space-16);width:100%;text-align:center}.prices-v2__card-icon{display:flex;align-items:center;justify-content:center;flex:none;width:88px;height:88px;border-radius:var(--radius-full);background:var(--white);overflow:hidden}.prices-v2__card-icon img{display:block;width:44px;height:44px}.prices-v2__card-copy{width:100%;max-width:331px}.prices-v2__card-copy.stack--sm{gap:var(--space-8)}.prices-v2__card-title{margin:0;color:var(--text-primary)}.prices-v2__card-text{margin:0;color:var(--text-muted)}.prices-v2__price{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;min-width:158px;min-height:78px;text-align:left;color:var(--ui-border-default)}.prices-v2__price--text{align-items:center;text-align:center}.prices-v2__price-value{color:var(--brand);white-space:nowrap}.prices-v2__price-old{text-decoration:line-through;white-space:nowrap}.prices-v2__note{display:flex;align-items:flex-start;gap:var(--space-24);max-width:640px;margin:0;color:var(--text-muted)}.prices-v2__note-icon{flex:none;width:20px;height:20px;margin-top:var(--space-2)}.prices-v2__note-text{margin:0;max-width:590px;color:inherit}@media (max-width:1200px){.prices-v2__head{flex-direction:column;align-items:flex-start}.prices-v2__head-actions{width:100%;justify-content:space-between}.prices-v2__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:768px){.prices-v2__inner.stack--xl,.prices-v2__body.stack--xl{gap:var(--space-24)}.prices-v2__head-main .stack--md{gap:var(--space-16)}.prices-v2__title{font-size:var(--text-title-sm);line-height:1.2}.prices-v2__head-actions{display:none}.prices-v2__grid{grid-template-columns:1fr;gap:var(--space-16)}.prices-v2__card{gap:var(--space-16);padding:var(--space-16) var(--space-20)}.prices-v2__card-icon{width:72px;height:72px}.prices-v2__card-icon img{width:36px;height:36px}.prices-v2__price{min-height:0}.prices-v2__price-value.megatext{font-size:var(--text-title-sm);line-height:1.3}.prices-v2__note{gap:var(--space-16);max-width:none;margin:0}.prices-v2__note-text{font-size:max(var(--text-min),var(--text-body-sm));font-weight:400}}.linking-services-v2{--linking-services-v2-card-gap:var(--space-40);--linking-services-v2-row-gap:var(--space-16);box-sizing:border-box}.linking-services-v2__inner.stack--xl{gap:var(--space-40)}.linking-services-v2__head.stack--md{gap:var(--space-24);width:100%}.linking-services-v2__eyebrow.eyebrow{color:var(--text-muted)}.linking-services-v2__head-row{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-24);width:100%}.linking-services-v2__title{margin:0;max-width:985px;color:var(--text-primary)}.linking-services-v2__lead{margin:0;max-width:985px;color:var(--text-secondary)}.linking-services-v2__nav{flex:none}.linking-services-v2__nav .slider-nav__btn{border:1px solid var(--ui-border-default);color:var(--text-muted)}.linking-services-v2__nav .slider-nav__btn--next .linking-services-v2__arrow{transform:scaleX(-1)}.linking-services-v2__body.stack--xl{gap:var(--space-40);width:100%}.linking-services-v2__list-wrap{display:flex;flex-direction:column;align-items:center;gap:var(--space-24);width:100%}.linking-services-v2__carousel{width:100%;overflow:hidden}.linking-services-v2__slider.swiper{overflow:hidden}.linking-services-v2__page.swiper-slide{width:100%;height:auto}@media (min-width:769px){.linking-services-v2--has-slider .linking-services-v2__slider:not(.is-ready) .linking-services-v2__page:nth-child(n+2){display:none}}.linking-services-v2__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--linking-services-v2-row-gap) var(--linking-services-v2-card-gap);width:100%}.linking-services-v2__item{min-width:0;height:100%}.linking-services-v2__card{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);height:100%;padding:var(--space-20) var(--space-24);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white-opacity-40);text-decoration:none;color:inherit;box-sizing:border-box;transition:box-shadow .16s ease,border-color .16s ease}.linking-services-v2__card:hover,.linking-services-v2__card:focus-visible{border-color:color-mix(in srgb,var(--brand) 25%,var(--ui-border-soft));box-shadow:0 12px 28px var(--glass-text-08)}.linking-services-v2__card:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.linking-services-v2__card-main{display:flex;align-items:center;gap:var(--space-40);min-width:0}.linking-services-v2__card-main--no-icon{gap:0}.linking-services-v2__card-icon{display:flex;align-items:center;justify-content:center;flex:none;width:88px;height:88px;border-radius:var(--radius-full);background:var(--bg-fill-surface);overflow:hidden}.linking-services-v2__card-icon-img{display:block;width:44px;height:44px;object-fit:contain}.linking-services-v2__card-copy{display:flex;flex-direction:column;gap:var(--space-8);min-width:0}.linking-services-v2__card-title{margin:0;color:var(--text-primary)}.linking-services-v2__card-text{margin:0;color:var(--text-secondary)}.linking-services-v2__card-action{display:flex;align-items:center;justify-content:center;flex:none;width:52px;height:52px;color:var(--text-muted)}.linking-services-v2__card-arrow{display:block;width:32px;height:31px;flex:none}.linking-services-v2__item[hidden]{display:none}.linking-services-v2__page[hidden]{display:none}.linking-services-v2__more{display:none;align-self:center;min-width:218px}.linking-services-v2__more[hidden]{display:none !important}.linking-services-v2__cta{width:100%;padding:var(--space-32) var(--space-40);border-radius:var(--radius);box-sizing:border-box}.linking-services-v2__cta-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,max-content);gap:var(--space-48);align-items:center}.linking-services-v2__cta-copy,.linking-services-v2__cta-form{min-width:0}.linking-services-v2__cta-eyebrow.eyebrow{color:var(--brand)}.linking-services-v2__cta-title{margin:0;color:var(--text-primary)}.linking-services-v2__cta-text{margin:0;color:var(--text-secondary)}.linking-services-v2__cta-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-24);max-width:752px}.linking-services-v2__field{flex:0 0 303px;width:303px;max-width:100%;min-width:0}.linking-services-v2__input.field__input{min-height:54px;padding:var(--space-18) var(--space-20);border-color:var(--ui-border-strong);background:var(--white-opacity-50);color:var(--text-secondary)}.linking-services-v2__cta-btn{min-height:54px;padding:var(--space-14) var(--space-32)}.linking-services-v2__consent{margin:0}@media (max-width:1280px){.linking-services-v2__cta{padding:var(--space-24) var(--space-24)}.linking-services-v2__cta-grid{grid-template-columns:1fr;gap:var(--space-24);align-items:stretch}.linking-services-v2__cta-row{flex-direction:column;align-items:stretch}.linking-services-v2__field{flex:none;width:100%}.linking-services-v2__cta-btn{width:100%}}@media (max-width:768px){.linking-services-v2__more{display:inline-flex}.linking-services-v2__nav{display:none}.linking-services-v2__head-row{flex-direction:column;align-items:flex-start}.linking-services-v2__pages.swiper-wrapper,.linking-services-v2__slider:not(.is-ready) .swiper-wrapper{display:flex;flex-direction:column;gap:var(--space-12);transform:none !important}.linking-services-v2__page.swiper-slide{width:100% !important}.linking-services-v2__grid{grid-template-columns:1fr;gap:var(--space-12)}.linking-services-v2__card{gap:var(--space-16);padding:var(--space-16)}.linking-services-v2__card-main{gap:var(--space-16)}.linking-services-v2__card-icon{width:56px;height:56px}.linking-services-v2__card-icon-img{width:28px;height:28px}.linking-services-v2__card-copy{gap:var(--space-4)}.linking-services-v2__card-action{width:40px;height:40px}.linking-services-v2__card-arrow{width:24px;height:23px}.linking-services-v2__cta{padding:var(--space-24) var(--space-16)}}@media (prefers-reduced-motion:reduce){.linking-services-v2__card{transition:none}}.cases-v2__img{aspect-ratio:var(--cases-v2-media-aspect)}.cases-v2{--cases-v2-copy-width:429px;--cases-v2-body-top-width:calc(var(--cases-v2-copy-width) + 36px);--cases-v2-text-min:400px;--cases-v2-media-min:400px;--cases-v2-panel-col-gap:var(--space-32);--cases-v2-media-width:535px;--cases-v2-media-height:402px;--cases-v2-media-aspect:535 \/ 402;--cases-v2-panel-min-h:677px;box-sizing:border-box}.cases-v2__layout{display:grid;grid-template-columns:minmax(0,38fr) minmax(0,62fr);gap:var(--space-40);align-items:stretch}.cases-v2__aside{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-48);min-height:var(--cases-v2-panel-min-h);min-width:0}.cases-v2__aside-head.stack--xl{gap:calc(var(--space-48) + var(--space-16))}.cases-v2__eyebrow{color:var(--text-muted)}.cases-v2__title{margin:0;color:var(--text-primary)}.cases-v2__aside-nav{width:132px;gap:var(--space-12)}.cases-v2__aside-nav .slider-nav__btn{border:1px solid var(--ui-border-soft);color:var(--text-muted)}.cases-v2__stage{display:flex;flex-direction:column;gap:var(--space-24);min-width:0}.cases-v2__carousel{width:100%;overflow:hidden;border-radius:var(--radius);isolation:isolate;clip-path:inset(0 round var(--radius));transform:translateZ(0);contain:paint}.cases-v2__slider.swiper{width:100%;overflow:hidden !important;isolation:isolate}.cases-v2__slider .swiper-slide{width:100% !important;max-width:100%;flex-shrink:0;box-sizing:border-box;overflow:hidden}.cases-v2__slider.is-settled .swiper-slide:not(.swiper-slide-active){visibility:hidden;pointer-events:none}.cases-v2__panel{min-height:var(--cases-v2-panel-min-h);border-radius:var(--radius);background:var(--bg-fill-soft);overflow:hidden;box-sizing:border-box}.cases-v2__panel-grid{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--space-24) var(--cases-v2-panel-col-gap);min-height:var(--cases-v2-panel-min-h)}.cases-v2__body{flex:1 1 var(--cases-v2-text-min);min-width:min(100%,var(--cases-v2-text-min));max-width:100%;display:flex;flex-direction:column;gap:var(--space-24);padding:var(--space-48) 0 var(--space-24) var(--space-48);box-sizing:border-box}.cases-v2__body-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16);width:100%;max-width:var(--cases-v2-body-top-width);min-width:0}.cases-v2__index{display:flex;align-items:baseline;gap:var(--space-2);margin:0;color:var(--brand)}.cases-v2__index-num{color:var(--brand)}.cases-v2__index-sep{position:relative;top:3px;font-family:var(--font-accent,inherit);font-size:26px;font-weight:500;line-height:1.4;color:var(--brand)}.cases-v2__category{margin:0;color:var(--ui-border-strong);text-align:right;flex:none;max-width:50%}.cases-v2__copy.stack--md{gap:var(--space-16);width:100%;max-width:var(--cases-v2-copy-width);min-width:0}.cases-v2__card-title{margin:0;color:var(--text-primary);min-width:0;overflow-wrap:break-word}.cases-v2__card-text{margin:0;color:var(--text-secondary);min-width:0;overflow-wrap:break-word}.cases-v2__media{--cases-v2-reveal:50%;flex:1 1 var(--cases-v2-media-min);min-width:min(100%,var(--cases-v2-media-min));max-width:min(var(--cases-v2-media-width),100%);margin-left:auto;position:relative;width:100%;height:auto;aspect-ratio:var(--cases-v2-media-aspect);border-radius:var(--radius);overflow:hidden;background:var(--bg-fill-panel);user-select:none;box-sizing:border-box}.cases-v2__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block}.cases-v2__img--after{z-index:0;clip-path:inset(0 0 0 calc(var(--cases-v2-reveal) - 1px))}.cases-v2__before{position:absolute;inset:0;z-index:1;clip-path:inset(-1px calc(100% - var(--cases-v2-reveal) - 1px) -1px -1px);overflow:hidden;isolation:isolate}.cases-v2__img--before{position:absolute;inset:-12px;width:calc(100% + 24px);height:calc(100% + 24px);max-width:none;object-fit:cover;object-position:center;transition:filter .2s ease}.cases-v2__media.is-blurred .cases-v2__img--before{filter:blur(5px)}.cases-v2__divider{position:absolute;top:0;bottom:0;left:var(--cases-v2-reveal);width:1px;background:var(--bg-fill-surface);transform:translateX(-.5px);z-index:2}.cases-v2__badge{position:absolute;top:var(--space-18);padding:var(--space-6) var(--space-10);border-radius:var(--radius-sm);background:var(--dark-opacity-20);color:var(--white);z-index:3}.cases-v2__badge--before{left:var(--space-18)}.cases-v2__badge--after{right:var(--space-18)}.cases-v2__handle{position:absolute;left:var(--cases-v2-reveal);top:50%;width:86px;height:86px;transform:translate(-50%,-50%);padding:0;border:0;border-radius:var(--radius-full);background:transparent;cursor:grab;touch-action:none;z-index:4}.cases-v2__handle:active{cursor:grabbing}.cases-v2__handle:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.cases-v2__handle img{display:block;width:100%;height:100%;pointer-events:none}@media (max-width:1600px){.cases-v2__handle{width:60px;height:60px}.cases-v2__badge{top:var(--space-12);padding:var(--space-4) var(--space-8);font-size:var(--text-body-md)}.cases-v2__badge--before{left:var(--space-12)}.cases-v2__badge--after{right:var(--space-12)}}.cases-v2__meta{flex:0 0 100%;width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16);padding:var(--space-14) var(--space-48) var(--space-40);border-top:1px solid var(--ui-divider);box-sizing:border-box}.cases-v2__meta-item{display:flex;flex-direction:column;justify-content:flex-start;gap:var(--space-16);min-width:0;flex:1 1 0}.cases-v2__meta-label{margin:0;color:var(--text-secondary)}.cases-v2__meta-value{margin:0;color:var(--brand)}.cases-v2__pagination-host{display:none}@media (max-width:1640px){.cases-v2{--cases-v2-panel-min-h:640px;--cases-v2-panel-col-gap:var(--space-24)}.cases-v2__layout{grid-template-columns:1fr;gap:var(--space-40)}.cases-v2__aside{min-height:0;flex-direction:row;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.cases-v2__aside-head.stack--xl{flex:1 1 auto;min-width:0;gap:var(--space-32)}.cases-v2__aside-nav{flex:none;align-self:flex-end}.cases-v2__panel-grid{gap:var(--space-20) var(--cases-v2-panel-col-gap)}.cases-v2__body{padding:var(--space-40) 0 var(--space-20) var(--space-40)}.cases-v2__meta{padding-inline:var(--space-40)}}@media (max-width:1200px){.cases-v2{--cases-v2-panel-min-h:0}.cases-v2__layout{gap:var(--space-32)}.cases-v2__aside{gap:var(--space-28)}.cases-v2__aside-head.stack--xl{gap:var(--space-28)}.cases-v2__panel,.cases-v2__panel-grid{min-height:0}.cases-v2__body{padding:var(--space-32) var(--space-32) var(--space-16);gap:var(--space-20)}.cases-v2__body-top,.cases-v2__copy.stack--md{max-width:none}.cases-v2__meta{gap:var(--space-12);padding:var(--space-14) var(--space-32) var(--space-32)}.cases-v2__meta-item{gap:var(--space-12)}}@media (max-width:1024px){.cases-v2__layout{gap:var(--space-28)}.cases-v2__aside{gap:var(--space-24)}.cases-v2__body{padding:var(--space-28) var(--space-28) var(--space-12)}.cases-v2__media{max-width:min(var(--cases-v2-media-width),calc(100% - var(--space-56)));margin-inline:auto}.cases-v2__copy.stack--md{gap:var(--space-12)}.cases-v2__meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding-inline:var(--space-28)}}@media (max-width:992px){.cases-v2__layout{gap:var(--space-32)}.cases-v2__body{padding:var(--space-32) var(--space-24) var(--space-16)}.cases-v2__media{max-width:min(var(--cases-v2-media-width),calc(100% - var(--space-48)));margin-inline:auto}.cases-v2__meta{display:flex;flex-direction:column;padding:var(--space-16) var(--space-24) var(--space-32)}.cases-v2__aside-nav{display:none}.cases-v2__stage{gap:var(--space-12)}.cases-v2__pagination-host{display:flex;margin-top:0}.cases-v2__pagination.slider-pagination--dots{display:flex !important}}@media (max-width:768px){.cases-v2__layout{gap:var(--space-24)}.cases-v2__aside{flex-direction:column;align-items:stretch}.cases-v2__aside-head.stack--xl{gap:var(--space-20)}.cases-v2__body{padding:var(--space-24) var(--space-20) var(--space-12)}.cases-v2__media{max-width:min(var(--cases-v2-media-width),calc(100% - var(--space-40)));margin-inline:auto}.cases-v2__meta{padding-inline:var(--space-20)}.cases-v2__category{font-size:22px}.cases-v2__badge{top:var(--space-12)}.cases-v2__badge--before{left:var(--space-12)}.cases-v2__badge--after{right:var(--space-12)}}.doctors-v1{--doctors-v1-card-max:343px;--doctors-v1-track-gap:16px;--doctors-v1-mobile-slides-per-view:1.15}@media (min-width:769px){.doctors-v1{--doctors-v1-track-gap:24px}}.doctors-v1__layout{display:grid;grid-template-columns:minmax(0,1fr) min(519px,100%);gap:var(--space-40);align-items:start}.doctors-v1__eyebrow.eyebrow,.doctors-v1__panel-eyebrow.eyebrow{color:var(--text-muted);border-color:var(--ui-border-strong);width:fit-content;max-width:100%}.doctors-v1__title{margin:0;color:var(--text-primary)}.doctors-v1__intro-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-32)}.doctors-v1__lead{flex:1 1 627px;max-width:627px;margin:0;min-width:0;color:var(--text-secondary)}.doctors-v1__head-actions{display:flex;flex-wrap:nowrap;align-items:center;justify-content:space-between;gap:var(--space-12);flex:0 0 378px;width:378px;max-width:100%;margin-left:auto}.doctors-v1__all-link{color:var(--text-secondary)}.doctors-v1__all-link:hover,.doctors-v1__all-link:focus-visible{color:var(--brand-dark)}.doctors-v1__all-link-icon{}.doctors-v1__slider-nav{display:flex;width:132px;flex:none;justify-content:space-between}.doctors-v1__carousel{width:100%;overflow:hidden}.doctors-v1__slider.swiper{overflow:hidden}.doctors-v1__slider .swiper-slide{height:auto;flex-shrink:0;box-sizing:border-box}@media (min-width:769px){.doctors-v1__slider .swiper-slide{width:var(--doctors-v1-card-max)}}.doctors-v1__card{display:flex;flex-direction:column;gap:var(--space-16);width:100%;max-width:var(--doctors-v1-card-max);min-width:0;height:100%;box-sizing:border-box;overflow:hidden;container-type:inline-size}.doctors-v1__card-photo{position:relative;width:100%;aspect-ratio:343 \/ 380;border-radius:var(--radius);overflow:hidden;background-color:var(--bg-fill-panel);background-image:var(--doctors-v1-photo-back);background-repeat:no-repeat;background-position:center;background-size:cover}.doctors-v1__card-img{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:contain;object-position:center bottom}.doctors-v1__card-img--has-bg{object-fit:cover;object-position:center}.doctors-v1__badge{position:absolute;left:14px;z-index:2;display:inline-flex;align-items:center;gap:var(--space-4);min-height:40px;padding:0 var(--space-10);border-radius:var(--radius-pill);background:var(--white-opacity-50);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-secondary)}.doctors-v1__badge--exp{top:14px}.doctors-v1__badge--rating{top:63px}.doctors-v1__card-photo--no-exp .doctors-v1__badge--rating{top:14px}.doctors-v1__badge-star{width:24px;height:24px;color:var(--rating-accent)}.doctors-v1--badge-border .doctors-v1__badge{background:var(--bg-fill-surface);border:1px solid var(--brand-surface-soft)}.doctors-v1--badge-fill .doctors-v1__badge{background:var(--white);backdrop-filter:none;-webkit-backdrop-filter:none}.doctors-v1__card-body{flex:1 1 auto;min-width:0}.doctors-v1__card-name{display:flex;flex-direction:column;margin:0;color:var(--text-primary)}.doctors-v1__card-name-line{display:block}.doctors-v1__card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-10);margin:0;color:var(--text-muted)}.doctors-v1__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--text-muted)}.doctors-v1__card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-12);width:100%;max-width:100%;margin-top:var(--space-6);min-width:0}.doctors-v1__card-btn.btn.btn--primary{flex:1 1 auto;min-width:0;max-width:100%;width:auto;min-height:40px;padding:var(--space-8) var(--space-14);font-size:var(--text-body-sm);line-height:var(--lh-btn);letter-spacing:var(--ls-btn);white-space:nowrap;box-sizing:border-box}.doctors-v1__card-more{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--space-8);padding-block:var(--space-4);text-decoration:none;color:var(--text-secondary);white-space:nowrap}@container (max-width:330px){.doctors-v1__card-actions{flex-direction:column;align-items:stretch}.doctors-v1__card-btn.btn--primary{width:100%}.doctors-v1__card-more{justify-content:flex-start}}.doctors-v1__card-more:hover,.doctors-v1__card-more:focus-visible{color:var(--brand-dark)}.doctors-v1__card-more-icon{flex:none;width:24px;height:24px}.doctors-v1__mobile-actions{display:none}.doctors-v1__all-btn{width:min(260px,100%)}.doctors-v1__panel{align-self:start}@media (min-width:1367px){.doctors-v1__panel{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24))}}.doctors-v1__panel-inner{display:flex;flex-direction:column;gap:var(--space-40)}.doctors-v1__panel-top{background:var(--ui-surface-soft);border-radius:var(--radius);padding:27px 38px 35px;box-sizing:border-box}.doctors-v1__panel-bottom{position:relative;background:var(--brand-surface-soft);border-radius:var(--radius);padding:var(--space-56) 38px 48px;box-sizing:border-box}.doctors-v1__panel-features{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-16);min-height:435px;max-width:443px}.doctors-v1__feature-title{margin:0;max-width:300px;color:var(--text-primary)}.doctors-v1__feature-text{margin:0;color:var(--text-secondary);line-height:var(--lh-lead)}.doctors-v1__panel-stats{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16);max-width:423px;text-align:center}.doctors-v1__stat{display:flex;flex-direction:column;gap:var(--space-12);flex:1 1 0;min-width:0}.doctors-v1__stat-value{margin:0;color:var(--brand)}.doctors-v1__stat-label{margin:0;color:var(--text-secondary)}.doctors-v1__panel-medal{position:absolute;right:22px;top:30px;z-index:2;display:block;width:54px;height:54px;background-color:var(--brand);-webkit-mask:var(--doctors-v1-panel-medal-src) center \/ contain no-repeat;mask:var(--doctors-v1-panel-medal-src) center \/ contain no-repeat;pointer-events:none;transform:translateY(calc(-50% - var(--space-40) \/ 2))}@media (max-width:1366px){.doctors-v1__layout{grid-template-columns:minmax(0,1fr)}.doctors-v1__main{width:100%;min-width:0}.doctors-v1__panel{width:100%;min-height:0}.doctors-v1__panel-features,.doctors-v1__panel-stats{max-width:none}.doctors-v1__panel-features{min-height:0;justify-content:flex-start;gap:var(--space-24)}.doctors-v1__feature-title{max-width:none}}@media (max-width:1366px) and (min-width:992px){.doctors-v1__panel-top{padding:var(--space-40) var(--space-24) var(--space-32)}.doctors-v1__panel-bottom{padding:var(--space-56) var(--space-24) var(--space-32)}.doctors-v1__panel-features{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-32);min-height:0;justify-content:stretch}.doctors-v1__feature:nth-child(3){grid-column:1}.doctors-v1__panel-medal{right:var(--space-24)}}@media (max-width:991px){.doctors-v1__panel-top{padding:var(--space-40) var(--space-24) var(--space-32)}.doctors-v1__panel-bottom{padding:var(--space-56) var(--space-24) var(--space-32)}.doctors-v1__panel-medal{right:var(--space-24)}}@media (max-width:768px){.doctors-v1__carousel{width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter))}.doctors-v1__intro-row{gap:var(--space-24)}.doctors-v1__head-actions{display:none}.doctors-v1__card-actions{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-12)}.doctors-v1__card-btn.btn--primary{width:100%;min-width:0}.doctors-v1__card-more{justify-content:flex-start}.doctors-v1__mobile-actions{display:flex;justify-content:center;width:100%}.doctors-v1__panel-inner{gap:var(--space-32)}.doctors-v1__panel-top{padding:var(--space-32) var(--space-16) var(--space-24)}.doctors-v1__panel-bottom{padding:var(--space-24) var(--space-16)}.doctors-v1__panel-features{gap:var(--space-24)}.doctors-v1__panel-stats{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:var(--space-8);text-align:center}.doctors-v1__stat{flex:1 1 0;width:auto;max-width:none;min-width:0;gap:var(--space-8)}.doctors-v1__panel-medal{right:var(--space-16);width:48px;height:48px;top:15px}.doctors-v1__card{max-width:none}}.reviews-v2{--reviews-v2-featured-base-h:474px;--reviews-v2-featured-min-h:474px;--reviews-v2-featured-height-offset:20px;--reviews-v2-quote-lines:10;--reviews-v2-list-visible:3;box-sizing:border-box}.reviews-v2.reviews-v2--card-bg-white .reviews-v2__card--featured{background:var(--white)}.reviews-v2__inner.stack--xl{gap:var(--space-56)}.reviews-v2__eyebrow.eyebrow{color:var(--text-muted)}.reviews-v2__title{margin:0;color:var(--text-primary)}.reviews-v2__lead{margin:0;color:var(--text-secondary)}.reviews-v2__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-48)}.reviews-v2__head-main{flex:1 1 auto;min-width:0;max-width:1080px}.reviews-v2__head-actions{flex:none}.reviews-v2__all-link{color:var(--text-secondary)}.reviews-v2__all-link:hover,.reviews-v2__all-link:focus-visible{color:var(--brand-dark)}.reviews-v2__body.stack--xl{gap:var(--space-40)}.reviews-v2__main{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-40);align-items:start}.reviews-v2__featured-col{display:flex;flex-direction:column;gap:var(--space-16);min-width:0}.reviews-v2__carousel{width:100%;overflow:hidden}.reviews-v2__slider.swiper{overflow:hidden}.reviews-v2__slider .swiper-slide{height:auto;box-sizing:border-box}.reviews-v2__card--featured{min-height:var(--reviews-v2-featured-min-h);padding:33px var(--space-24) var(--space-24);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.reviews-v2__featured-head{display:flex;align-items:center;justify-content:flex-start;gap:var(--space-16);flex:none}.reviews-v2__featured-stars{display:flex;align-items:center;flex:none}.reviews-v2__featured-author{margin:0;color:var(--ui-border-strong);text-align:left}.reviews-v2__featured-body{flex:1 1 auto;min-height:0;overflow:hidden;gap:var(--space-16)}.reviews-v2__featured-body::after{content:'';flex:1 1 auto;min-height:0}.reviews-v2__quote-wrap{display:flex;flex-direction:column;gap:var(--space-8);flex:none;padding-bottom:var(--space-16);border-bottom:1px solid var(--ui-divider)}.reviews-v2__quote{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--reviews-v2-quote-lines);flex:none;margin:0;overflow:hidden;color:var(--text-secondary);line-height:var(--lh-body)}.reviews-v2__quote.wysiwyg p{margin:0}.reviews-v2__quote.wysiwyg p + p{margin-top:var(--space-16)}.reviews-v2__read-more{display:none;flex:none;align-items:center;min-height:24px;padding:0;border:0;background:none;cursor:pointer;text-align:left;color:var(--text-secondary);font-family:var(--font-body);font-size:1em;font-weight:600;line-height:var(--lh-body-tight)}.reviews-v2__card--featured.is-overflow .reviews-v2__read-more{display:inline-flex}.reviews-v2__read-more:hover,.reviews-v2__read-more:focus-visible{color:var(--brand-dark)}.reviews-v2__meta{display:flex;flex-wrap:wrap;gap:var(--space-8);margin:0;flex:none}.reviews-v2__meta-label{color:var(--ui-border-strong)}.reviews-v2__meta-value{color:var(--text-secondary)}.reviews-v2__featured-source{display:flex;align-items:center;gap:var(--space-24);flex-wrap:wrap;flex:none}.reviews-v2__source-logo{display:block;width:auto;max-width:124px;height:21px;object-fit:contain;object-position:left center}.reviews-v2__date{margin:0;color:var(--ui-border-strong)}.reviews-v2__controls{width:100%;max-width:603px;margin:0 auto;overflow:visible}.reviews-v2__controls .slider-pagination-host{overflow:visible;min-height:var(--slider-dot-size,18px);padding-inline:var(--space-8)}.reviews-v2__controls .slider-pagination--dots{overflow:visible;width:auto !important;max-width:none;margin-top:0;padding-inline:var(--space-8)}.reviews-v2__controls .slider-nav__btn{flex:none}.reviews-v2__list-viewport{min-width:0;overflow:hidden}.reviews-v2__list{display:flex;flex-direction:column;gap:var(--space-16);min-width:0;transition:transform .32s ease;will-change:transform}.reviews-v2__list-item{display:flex;flex-direction:column;gap:var(--space-10);width:100%;padding:var(--space-16);border:1px solid transparent;border-radius:var(--radius);background:none;cursor:pointer;text-align:left;font:inherit;color:inherit;box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease}.reviews-v2__list-item:not(.is-active){border-bottom-color:var(--ui-border-soft)}.reviews-v2__list-item:hover:not(.is-active),.reviews-v2__list-item:focus-visible:not(.is-active){background:var(--brand-opacity-15)}.reviews-v2__list-item.is-active{border-color:var(--brand);background:none}.reviews-v2__list-item.is-active:hover,.reviews-v2__list-item.is-active:focus-visible{background:none}.reviews-v2__list-item:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.reviews-v2__list-main{width:100%}.reviews-v2__list-top{display:flex;align-items:center;justify-content:flex-start;gap:var(--space-16)}.reviews-v2__list-rating{display:flex;align-items:center;gap:var(--space-2);flex:none}.reviews-v2__list-rating-label{margin:0;font-family:var(--font-body);font-size:var(--text-body-md);font-weight:600;line-height:var(--lh-body);color:var(--text-muted)}.reviews-v2__list-star{flex:none;width:20px;height:20px;color:var(--rating-accent)}.reviews-v2__list-author{margin:0;color:var(--ui-border-strong);text-align:left}.reviews-v2__list-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16);width:100%}.reviews-v2__list-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;margin:0;flex:1 1 auto;min-width:0;max-width:690px;overflow:hidden;color:var(--text-secondary);line-height:var(--lh-body-tight)}.reviews-v2__list-text.wysiwyg p{margin:0}.reviews-v2__list-text.wysiwyg p + p{margin-top:var(--space-12)}.reviews-v2__list-side{display:flex;flex-direction:column;flex:none;align-items:flex-end;gap:15px}.reviews-v2__list-meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-8);width:100%;max-width:515px}.reviews-v2__list-meta-sep{flex:none;width:1px;height:21px;background:var(--ui-border-soft)}.reviews-v2__platforms{display:grid;grid-template-columns:minmax(0,451px) minmax(0,1fr);gap:var(--space-40);align-items:start;--reviews-v2-platform-logo-slot:56px;--reviews-v2-platform-rating-slot:30px}.reviews-v2__platforms-title{margin:0;color:var(--text-secondary)}.reviews-v2__leave-review{display:inline-flex;align-items:center;min-height:24px;padding:0;border:0;background:none;cursor:pointer;font:inherit;text-align:left;text-decoration:none;color:var(--text-secondary)}.reviews-v2__leave-review:hover,.reviews-v2__leave-review:focus-visible{color:var(--brand-dark)}.reviews-v2__platforms-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:var(--reviews-v2-platform-logo-slot) auto auto;gap:0;width:100%;min-width:0}.reviews-v2__platform{display:grid;grid-column:span 1;grid-row:span 3;grid-template-columns:minmax(0,1fr);grid-template-rows:subgrid;align-items:center;justify-items:center;row-gap:var(--space-12);min-width:0;min-height:138px;padding:19px 16px 16px;border-left:1px solid var(--ui-border-soft);text-decoration:none;box-sizing:border-box;transition:background-color .16s ease,color .16s ease}@supports not (grid-template-rows:subgrid){.reviews-v2__platforms-grid{grid-template-rows:none}.reviews-v2__platform{grid-row:auto;grid-template-rows:var(--reviews-v2-platform-logo-slot) var(--reviews-v2-platform-rating-slot) auto}}@media (hover:hover){.reviews-v2__platform:hover{background:var(--brand-opacity-15)}}.reviews-v2__platform:focus-visible{background:var(--brand-opacity-15);outline:2px solid var(--brand);outline-offset:-2px}.reviews-v2__platform-logo{grid-row:1;display:block;align-self:center;width:auto;max-width:min(var(--reviews-v2-platform-logo-w,196px),100%);height:auto;max-height:var(--reviews-v2-platform-logo-h,42px);object-fit:contain;object-position:center}.reviews-v2__platform-rating{grid-row:2;display:flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:var(--space-6);width:100%;max-width:100%;min-height:var(--reviews-v2-platform-rating-slot)}.reviews-v2__platform-score{color:var(--text-muted)}.reviews-v2__platform-count{grid-row:3;align-self:start;margin:0;color:var(--text-muted);text-align:center;max-width:100%}.reviews-v2__cta{position:relative;overflow:hidden;border-radius:var(--radius)}.reviews-v2__cta-bg{position:absolute;inset:0;z-index:0}.reviews-v2__cta-pattern{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;pointer-events:none}.reviews-v2__cta-inner{position:relative;z-index:0;display:flex;flex-wrap:nowrap;align-items:center;gap:var(--space-40) var(--space-56);min-height:167px;padding:var(--space-32) var(--space-40);box-sizing:border-box;border-radius:inherit;overflow:hidden}.reviews-v2__cta-inner > :not(.reviews-v2__cta-bg){position:relative;z-index:1}.reviews-v2__cta-icon{display:flex;align-items:center;justify-content:center;flex:none;width:72px;height:72px;border-radius:var(--radius-full);background:var(--bg-fill-surface)}.reviews-v2__cta-icon-mark{display:block;width:35px;height:35px;background-color:var(--brand);-webkit-mask:var(--reviews-v2-chat-icon-src) center \/ contain no-repeat;mask:var(--reviews-v2-chat-icon-src) center \/ contain no-repeat}.reviews-v2__cta-copy{flex:1 1 320px;min-width:0;max-width:703px}.reviews-v2__cta-title{margin:0;color:var(--text-on-brand)}.reviews-v2__cta-text{margin:0;color:var(--text-on-brand)}.reviews-v2__cta-actions{flex:none;width:min(355px,100%);min-width:min(100%,280px);margin-left:auto;align-items:center}.reviews-v2__cta-notes{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-16);color:var(--text-on-brand)}.reviews-v2__cta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--text-on-brand)}.reviews-v2__mobile-actions{display:none}.reviews-v2__all-btn{width:min(260px,100%)}@media (max-width:1200px){.reviews-v2__main{grid-template-columns:1fr;gap:var(--space-32)}.reviews-v2__list-viewport{min-height:0}.reviews-v2__list{min-height:0}}@media (max-width:1360px){.reviews-v2__platforms{grid-template-columns:1fr;gap:var(--space-32);--reviews-v2-platform-rating-slot:26px}.reviews-v2__platform-rating .stars-rating--lg{--stars-rating-size:26px;--stars-rating-gap:var(--space-4)}}@media (max-width:991px){.reviews-v2__platforms{--reviews-v2-platform-rating-slot:24px}.reviews-v2__platform-rating .stars-rating--lg{--stars-rating-size:24px}.reviews-v2__head{align-items:flex-start;flex-direction:column;gap:var(--space-24)}.reviews-v2__cta-inner{flex-direction:column;align-items:stretch;gap:var(--space-16);min-height:0;padding:var(--space-20) var(--space-16)}.reviews-v2__cta-icon{align-self:center}.reviews-v2__cta-copy{flex:none;width:100%;max-width:none;text-align:center}.reviews-v2__cta-actions{flex:none;width:100%;max-width:none;margin-left:0;gap:var(--space-12)}}@media (max-width:768px){.reviews-v2__inner.stack--xl{gap:var(--space-10)}.reviews-v2__head-actions .reviews-v2__all-link{display:none}.reviews-v2__card--featured{min-height:0;padding:var(--space-16)}.reviews-v2__featured-head{flex-direction:column;align-items:flex-start}.reviews-v2__featured-author{text-align:left}.reviews-v2__read-more{font-size:var(--text-body-sm);font-weight:500;min-height:0}.reviews-v2__list{display:none}.reviews-v2__mobile-actions{display:flex;justify-content:center;width:100%}.reviews-v2__cta-inner{gap:var(--space-16);padding:var(--space-16)}.reviews-v2__cta-icon{width:56px;height:56px;align-self:center}.reviews-v2__cta-icon-mark{width:28px;height:28px}.reviews-v2__cta-copy{text-align:center}.reviews-v2__cta-actions{align-items:stretch}.reviews-v2__platforms{--reviews-v2-platform-rating-slot:22px}.reviews-v2__platforms-grid{grid-template-columns:1fr;grid-template-rows:none}.reviews-v2__platform{grid-row:auto;grid-template-rows:var(--reviews-v2-platform-logo-slot) var(--reviews-v2-platform-rating-slot) auto;min-height:0;border-left:0;border-top:1px solid var(--ui-border-soft);padding-top:var(--space-24)}.reviews-v2__platform:first-child{border-top:0;padding-top:0}.reviews-v2__platforms-lead.stack{flex-direction:row;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-16)}.reviews-v2__platforms-title{flex:1 1 auto;min-width:0}.reviews-v2__leave-review{flex:none;align-self:flex-start;margin-left:auto;text-align:right}}.linking-services-v1{--linking-services-v1-card-w:380px;--linking-services-v1-photo-h:172px;--linking-services-v1-slide-gap:var(--space-40);box-sizing:border-box}.linking-services-v1__head.stack--md{gap:var(--space-24);width:100%}.linking-services-v1__eyebrow.eyebrow{color:var(--text-muted)}.linking-services-v1__head-row{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-24);width:100%}.linking-services-v1__title{margin:0;max-width:800px;color:var(--text-primary)}.linking-services-v1__lead{margin:0;max-width:800px;color:var(--text-secondary)}.linking-services-v1__nav{flex:none}.linking-services-v1__nav .slider-nav__btn{border:1px solid var(--ui-border-default);color:var(--text-muted)}.linking-services-v1__nav .slider-nav__btn--next .linking-services-v1__arrow{transform:scaleX(-1)}.linking-services-v1__slider-foot{width:100%}.linking-services-v1__carousel{width:100%;overflow:hidden}.linking-services-v1__slider.swiper{overflow:hidden}.linking-services-v1__slider .swiper-slide{width:var(--linking-services-v1-card-w);height:auto}.linking-services-v1__card{display:flex;flex-direction:column;gap:var(--space-24);height:100%;padding-top:var(--space-24);border-radius:var(--radius);background:var(--bg-fill-surface);overflow:hidden;text-decoration:none;color:inherit;transition:transform .16s ease,box-shadow .16s ease}.linking-services-v1__card:hover,.linking-services-v1__card:focus-visible{transform:translateY(-2px);box-shadow:0 12px 28px var(--glass-text-08)}.linking-services-v1__card:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.linking-services-v1__card--no-image{gap:0}.linking-services-v1__card--no-image .linking-services-v1__card-copy{padding-bottom:var(--space-24)}.linking-services-v1__card-copy{display:flex;flex-direction:column;gap:var(--space-10);padding-inline:var(--space-24)}.linking-services-v1__card-title{margin:0;color:var(--text-primary)}.linking-services-v1__card-text{margin:0;color:var(--text-primary)}.linking-services-v1__card-photo{width:100%;height:var(--linking-services-v1-photo-h);overflow:hidden;border-radius:var(--radius)}.linking-services-v1__card-img{display:block;width:100%;height:222px;object-fit:cover;object-position:center}@media (max-width:768px){.linking-services-v1{--linking-services-v1-card-w:320px;--linking-services-v1-slide-gap:var(--space-16);--linking-services-v1-photo-h:150px}.linking-services-v1__head-row{flex-direction:column;align-items:flex-start}.linking-services-v1__card-img{height:190px}}@media (prefers-reduced-motion:reduce){.linking-services-v1__card{transition:none}}.expert-advice-v1__doctor-media > img{aspect-ratio:3 \/ 2}.expert-advice-v1{box-sizing:border-box}.expert-advice-v1__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:clamp(var(--space-32),6vw,162px)}.expert-advice-v1--photo-left .expert-advice-v1__doctor{order:-1}.expert-advice-v1--photo-left .expert-advice-v1__main{order:2}.expert-advice-v1__main{width:min(822px,100%);min-width:0}.expert-advice-v1__title{margin:0;color:var(--text-primary)}.expert-advice-v1__quote{display:flex;align-items:flex-start;gap:var(--space-14);min-width:0}.expert-advice-v1__quote--no-icon{gap:0}.expert-advice-v1__quote-icon{width:44px;height:44px;flex:none;color:var(--brand)}.expert-advice-v1__quote-icon-img{object-fit:contain}.expert-advice-v1__quote-text{min-width:0;color:var(--text-primary)}.expert-advice-v1__quote-text p{margin:0}.expert-advice-v1__quote-text p + p{margin-top:var(--space-16)}.expert-advice-v1__note{display:flex;align-items:flex-start;gap:var(--space-24);padding:var(--space-16);border-radius:var(--radius);border:1px solid var(--ui-border-default);background:var(--brand-opacity-15);min-width:0;width:min(658px,100%)}.expert-advice-v1__note--no-icon{gap:0}.expert-advice-v1__note-icon{width:40px;height:40px;flex:none;color:var(--brand-light)}.expert-advice-v1__note-icon-img{object-fit:contain}.expert-advice-v1__note-text{margin:0;color:var(--brand)}.expert-advice-v1__doctor{margin:0;width:min(658px,100%);border-radius:var(--radius);overflow:hidden;background:var(--bg-fill-surface)}.expert-advice-v1__doctor-media{position:relative;aspect-ratio:658 \/ 578;overflow:hidden}.expert-advice-v1__doctor-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.expert-advice-v1__doctor-caption{position:absolute;left:0;right:0;bottom:0;margin:0;min-height:min(285px,49%);display:flex;flex-direction:column;justify-content:flex-end;padding:var(--space-24) var(--space-32) var(--space-32);box-sizing:border-box;background:linear-gradient(180deg,transparent 0%,var(--white-opacity-40) 100%);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile))}.expert-advice-v1__doctor-name{margin:0;color:var(--text-primary)}.expert-advice-v1__doctor-meta{margin:var(--space-10) 0 0;display:flex;flex-wrap:wrap;gap:var(--space-10);align-items:center;color:var(--text-primary)}.expert-advice-v1__doctor-dot{width:6px;height:6px;border-radius:999px;background:currentColor;flex:none}@media (min-width:1201px){.expert-advice-v1__doctor{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));align-self:flex-start}}@media (max-width:1200px){.expert-advice-v1__grid{flex-direction:column;align-items:flex-start}.expert-advice-v1--photo-left .expert-advice-v1__doctor,.expert-advice-v1--photo-left .expert-advice-v1__main{order:unset}.expert-advice-v1__main{width:100%}.expert-advice-v1__doctor{width:min(658px,100%);max-width:658px}}@media (max-width:768px){.expert-advice-v1__quote{gap:var(--space-12)}.expert-advice-v1__note{gap:var(--space-16)}.expert-advice-v1__doctor-caption{min-height:auto;padding:var(--space-16) var(--space-20) var(--space-20)}}.promo-v3__card-img{aspect-ratio:16 \/ 9}.promo-v3{box-sizing:border-box;--promo-v3-card-min-h:clamp(280px,24vw,322px);--promo-v3-media-w:clamp(220px,34vw,505px);--promo-v3-offer-w:clamp(220px,16vw,250px);--promo-v3-slider-h:calc(var(--promo-v3-card-min-h) * 3 + var(--space-24) * 2)}.promo-v3__inner.stack--xl{gap:clamp(var(--space-40),4vw,60px)}.promo-v3__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.promo-v3__head-main{flex:1 1 auto;min-width:0;max-width:940px}.promo-v3__title{margin:0;color:var(--text-primary)}.promo-v3__head-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-40);flex:none}.promo-v3__all-link{color:var(--text-secondary)}.promo-v3__all-link:hover,.promo-v3__all-link:focus-visible{color:var(--brand-dark)}.promo-v3__slider-nav{width:132px;justify-content:space-between}.promo-v3__carousel{width:100%}.promo-v3__slider{width:100%}.promo-v3__slider.swiper{overflow:hidden}.promo-v3__slider .swiper-slide{width:100%;height:auto;flex-shrink:0;box-sizing:border-box}.promo-v3__card{display:flex;align-items:stretch;gap:0;min-height:var(--promo-v3-card-min-h);border:1px solid var(--white-opacity-75);border-radius:var(--radius);background:var(--white-opacity-50);overflow:hidden;box-sizing:border-box}.promo-v3__card-media{flex:none;width:var(--promo-v3-media-w);min-height:var(--promo-v3-card-min-h);overflow:hidden;border-radius:var(--radius)}.promo-v3__card-img{display:block;width:100%;height:100%;min-height:var(--promo-v3-card-min-h);object-fit:cover}.promo-v3__card--wide-media .promo-v3__card-img{width:117.61%;height:149.46%;max-width:none;margin-top:-21.12%;margin-left:-15.67%}.promo-v3__card-main{flex:1 1 auto;display:flex;align-items:stretch;justify-content:space-between;gap:var(--space-24);min-width:0;padding:var(--space-24) var(--space-40) var(--space-24) clamp(var(--space-16),2vw,var(--space-32));box-sizing:border-box}.promo-v3__card-copy{flex:1 1 auto;min-width:0;max-width:451px;align-self:center}.promo-v3__badge{position:relative;display:inline-flex;align-items:center;align-self:flex-start;width:fit-content;max-width:100%;min-height:44px;margin:0;padding-right:var(--space-20);text-transform:uppercase;isolation:isolate}.promo-v3__badge::after{content:\"\";position:absolute;left:22px;right:0;top:0;bottom:0;border-radius:0 var(--radius-pill) var(--radius-pill) 0;z-index:0;pointer-events:none}.promo-v3__badge--gold{color:var(--promo-warm)}.promo-v3__badge--gold::after{background:var(--promo-warm-bg)}.promo-v3__badge--gold .promo-v3__badge-mark{background:var(--promo-warm)}.promo-v3__badge--warm{color:var(--promo-accent)}.promo-v3__badge--warm::after{background:var(--promo-accent-bg)}.promo-v3__badge--warm .promo-v3__badge-mark{background:var(--promo-accent)}.promo-v3__badge--cool{color:var(--promo-cool)}.promo-v3__badge--cool::after{background:var(--promo-cool-bg)}.promo-v3__badge--cool .promo-v3__badge-mark{background:var(--promo-cool)}.promo-v3__badge-mark{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex:none;border-radius:var(--radius-full);overflow:hidden}.promo-v3__badge-icon-glyph{display:block;width:22px;height:22px;flex:none;background-color:var(--bg-fill-surface);-webkit-mask:var(--promo-v3-badge-icon-src) center \/ contain no-repeat;mask:var(--promo-v3-badge-icon-src) center \/ contain no-repeat}.promo-v3__badge--no-mark::after{left:0;border-radius:var(--radius-pill)}.promo-v3__badge--no-mark .promo-v3__badge-text{padding-left:var(--space-20)}.promo-v3__badge-text{position:relative;z-index:1;display:flex;align-items:center;min-height:44px;padding:0 0 0 var(--space-12);font-weight:600}.promo-v3__card-title{margin:0;color:var(--text-primary)}.promo-v3__card-text{margin:0;color:var(--text-primary)}.promo-v3__offer{flex:none;display:flex;flex-direction:column;justify-content:space-between;width:var(--promo-v3-offer-w);min-height:220px;padding:var(--space-24);border-radius:var(--radius);background:var(--bg-fill-soft);box-sizing:border-box}.promo-v3__offer-head{display:flex;flex-direction:column;gap:var(--space-8)}.promo-v3__offer-head--discount{gap:var(--space-8)}.promo-v3__offer-label{margin:0;color:var(--ui-border-strong);text-transform:uppercase}.promo-v3__offer-value,.promo-v3__offer-price,.promo-v3__offer-gift-label{margin:0;color:var(--brand)}.promo-v3__offer-old{margin:0;color:var(--text-muted);text-decoration:line-through}.promo-v3__offer-gift-icon{display:block;width:44px;height:44px;flex:none}.promo-v3__offer-link{color:var(--text-secondary)}.promo-v3__offer-link:hover,.promo-v3__offer-link:focus-visible{color:var(--brand-dark)}@media (min-width:769px){.promo-v3__slider.swiper:not(.promo-v3__slider--static){height:var(--promo-v3-slider-h)}.promo-v3__slider.swiper:not(.promo-v3__slider--static) .swiper-slide{height:var(--promo-v3-card-min-h);box-sizing:border-box}.promo-v3__slider.swiper:not(.promo-v3__slider--static) .promo-v3__card{height:100%;min-height:0}.promo-v3__slider--static .swiper-wrapper{display:flex;flex-direction:column;gap:var(--space-24);transform:none !important}.promo-v3__slider--static .swiper-slide{width:100%;height:auto}}@media (max-width:1200px){.promo-v3__head{flex-direction:column;align-items:flex-start}.promo-v3__head-actions{width:100%;justify-content:space-between}.promo-v3__card-main{padding-right:var(--space-24)}.promo-v3__offer{width:clamp(200px,22vw,var(--promo-v3-offer-w))}}@media (max-width:768px){.promo-v3{--promo-v3-mobile-photo-h:210px}.promo-v3__inner.stack--xl{display:flex;flex-direction:column;gap:var(--space-24)}.promo-v3__head{display:contents}.promo-v3__head-main{order:1}.promo-v3__title{font-size:var(--text-title-sm);line-height:1.35}.promo-v3__slider-foot{order:2}.promo-v3__head-actions{order:3;display:flex;justify-content:center;width:100%}.promo-v3__slider-nav{display:none}.promo-v3__slider-foot .slider-pagination-host{display:none}.promo-v3__slider.swiper{height:auto !important;overflow:visible}.promo-v3__slider--static .swiper-wrapper,.promo-v3__slider .swiper-wrapper{flex-direction:column;gap:var(--space-24);transform:none !important}.promo-v3__slider .swiper-slide[hidden]{display:none !important}.promo-v3__card{flex-direction:column;align-items:center;min-height:0;gap:var(--space-16);padding-bottom:var(--space-16)}.promo-v3__card-media{width:100%;min-height:0;height:var(--promo-v3-mobile-photo-h);aspect-ratio:auto}.promo-v3__card-img,.promo-v3__card--wide-media .promo-v3__card-img{width:100%;height:100%;min-height:0;margin:0}.promo-v3__card-main{flex-direction:column;align-items:stretch;width:100%;padding:0 var(--space-16);gap:var(--space-24)}.promo-v3__card-copy{max-width:none;gap:14px}.promo-v3__card-copy.stack--sm{gap:14px}.promo-v3__card-title{font-size:var(--text-body-md);line-height:var(--lh-body-tight)}.promo-v3__badge{min-height:32px;padding-right:var(--space-12)}.promo-v3__badge::after{left:16px}.promo-v3__badge--no-mark::after{left:0}.promo-v3__badge--no-mark .promo-v3__badge-text{padding-left:var(--space-12)}.promo-v3__badge-mark{width:32px;height:32px}.promo-v3__badge-icon-glyph{width:16px;height:16px}.promo-v3__badge-text{min-height:32px;padding-left:var(--space-8)}.promo-v3__offer{width:100%;max-width:300px;align-self:center;min-height:0;gap:var(--space-8)}.promo-v3__offer-head--discount{flex-direction:row;align-items:center;justify-content:space-between;gap:var(--space-12)}.promo-v3__offer-head--discount .promo-v3__offer-value{font-size:var(--text-mega-md)}.promo-v3__offer-gift-icon{width:24px;height:24px}.promo-v3__all-link{box-sizing:border-box;width:min(260px,100%);min-height:40px;padding:var(--space-12) var(--space-24);border:2px solid var(--brand);border-radius:var(--radius-btn);background:transparent;color:var(--brand-dark);text-transform:uppercase;font-weight:600;justify-content:center}.promo-v3__all-link:hover,.promo-v3__all-link:focus-visible{background:var(--brand-opacity-15);color:var(--brand-dark)}.promo-v3__all-link-icon{display:none}}.faq-v1{box-sizing:border-box}.faq-v1__eyebrow{margin:0;color:var(--brand)}.faq-v1__title{margin:0;color:var(--text-primary)}.faq-v1__lead{margin:0;max-width:1080px;color:var(--text-secondary)}.faq-v1__head{margin-bottom:var(--space-40)}.faq-v1__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,420px);gap:var(--space-40);align-items:start}.faq-v1__main{min-width:0}.faq-v1__more-row{display:flex;justify-content:center;margin-top:var(--space-24)}.faq-v1__more{width:auto;padding-left:var(--space-32);padding-right:var(--space-32)}.faq-v1__more[hidden]{display:none !important}.faq-v1__aside{min-width:0}.faq-v1__aside-card{border-radius:var(--radius);background:var(--brand-surface-soft);padding:var(--space-24);box-sizing:border-box}.faq-v1__aside-head{display:flex;align-items:flex-start;gap:var(--space-16)}.faq-v1__aside-icon{display:flex;align-items:center;justify-content:center;flex:none;width:68px;height:68px;border-radius:var(--radius-full);background:var(--brand-opacity-20);color:var(--brand)}.faq-v1__aside-icon-svg{display:block;width:34px;height:34px}.faq-v1__aside-phone-icon-svg{display:block;width:16px;height:16px}.faq-v1__aside-title,.faq-v1__aside-desc{margin:0}.faq-v1__aside-title{color:var(--text-primary)}.faq-v1__aside-desc{color:var(--text-secondary)}.faq-v1__aside-btn{width:100%;margin-top:var(--space-20)}.faq-v1__aside-foot{display:flex;align-items:center;gap:var(--space-16);margin-top:var(--space-20);padding-top:var(--space-20);border-top:1px solid var(--ui-border-strong)}.faq-v1__aside-phone-icon{display:flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;border-radius:var(--radius-full);background:var(--brand-opacity-20);color:var(--brand)}.faq-v1__aside-phone-text.stack--sm{min-width:0;gap:var(--space-8)}.faq-v1__aside-phone,.faq-v1__aside-hours{margin:0}.faq-v1__aside-phone{color:var(--text-primary);text-decoration:none}.faq-v1__aside-phone:hover,.faq-v1__aside-phone:focus-visible{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}.faq-v1__aside-hours{color:var(--text-muted)}.faq-v1__accordion{display:flex;flex-direction:column;gap:var(--space-16)}.faq-v1__item{border-radius:var(--radius);background:var(--white-opacity-50);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur));overflow:hidden;box-sizing:border-box}.faq-v1__item[hidden]{display:none !important}.faq-v1__trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;padding:var(--space-20) var(--space-24);border:0;background:transparent;cursor:pointer;box-sizing:border-box;text-align:left}.faq-v1__trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.faq-v1__left{display:flex;align-items:center;gap:var(--space-16);min-width:0}.faq-v1__question{min-width:0;margin:0;color:var(--text-primary)}.faq-v1__item.is-open .faq-v1__question{color:var(--brand)}.faq-v1__question a{color:var(--brand);text-decoration:none}.faq-v1__question a:hover,.faq-v1__question a:focus-visible{text-decoration:underline}.faq-v1__question a:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.faq-v1__q-icon{display:flex;align-items:center;justify-content:center;flex:none;width:68px;height:68px;border-radius:var(--radius-full);background:var(--brand-opacity-20);color:var(--brand)}.faq-v1__q-icon-svg{display:block;width:38px;height:42px}.faq-v1__right{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-16);flex:none}.faq-v1__meta{color:var(--text-muted);white-space:nowrap}.faq-v1__chevron{display:flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;color:var(--brand)}.faq-v1__chevron-svg{display:block;transition:transform .32s ease}.faq-v1__item.is-open .faq-v1__chevron-svg{transform:rotate(180deg)}.faq-v1__panel{display:grid;grid-template-rows:0fr;overflow:hidden;transition:grid-template-rows .32s ease-in-out}.faq-v1__item.is-open .faq-v1__panel{grid-template-rows:1fr}.faq-v1__panel[hidden]{display:grid !important}.faq-v1__panel-inner{min-height:0;overflow:hidden}.faq-v1__panel-body{padding:var(--space-20) var(--space-24) var(--space-24);border-top:1px solid var(--ui-border-strong);box-sizing:border-box}.faq-v1__answer{margin:0;color:var(--text-secondary)}.faq-v1__answer.wysiwyg p{margin:0}.faq-v1__answer.wysiwyg p + p{margin-top:var(--space-16)}.faq-v1__materials{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:var(--space-16);column-gap:var(--space-40);margin-top:var(--space-20)}.faq-v1__material{display:inline-flex;max-width:100%;color:var(--text-secondary);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.faq-v1__material:hover,.faq-v1__material:focus-visible{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}@media (max-width:1200px){.faq-v1__materials{column-gap:var(--space-24)}.faq-v1__grid{grid-template-columns:1fr;gap:var(--space-32)}}@media (max-width:768px){.faq-v1__trigger{padding:var(--space-16) var(--space-16)}.faq-v1__q-icon{display:none}.faq-v1__panel-body{padding:var(--space-16) var(--space-16) var(--space-20)}.faq-v1__materials{column-gap:var(--space-20)}.faq-v1__meta{display:none}.faq-v1__aside-icon{width:52px;height:52px;grid-column:1;grid-row:1}.faq-v1__aside-icon-svg{width:26px;height:26px}.faq-v1__aside-head{display:grid;grid-template-columns:auto 1fr;column-gap:var(--space-16);row-gap:var(--space-8);align-items:start}.faq-v1__aside-text{display:contents}.faq-v1__aside-title{grid-column:2;grid-row:1;align-self:center}.faq-v1__aside-desc{grid-column:1 \/ -1;grid-row:2}.faq-v1__aside-head--no-icon .faq-v1__aside-title{grid-column:1;grid-row:1}}@media (prefers-reduced-motion:reduce){.faq-v1__chevron-svg,.faq-v1__panel{transition:none}}.hero-v5__bg > img{aspect-ratio:96 \/ 35}.hero-v5{background-color:var(--bg-fill-page);box-sizing:border-box;min-height:calc(100vw * 700 \/ 1920)}.hero-v5__bg img{width:100%;height:100%;object-fit:cover;object-position:right center}.hero-v5__inner{align-items:flex-start;width:100%;max-width:694px}.hero-v5__head{width:100%}.hero-v5__lead{width:100%}.hero-v5__eyebrow{color:var(--text-muted)}.hero-v5__title{margin:0;color:var(--text-primary)}@media (max-width:1600px){.hero-v5__title.megatext{font-size:clamp(1.375em,var(--fluid-mega-md),var(--text-mega-md));line-height:1.2}}.hero-v5__subtitle{margin:0;color:var(--brand-dark)}.hero-v5__facts{display:flex;flex-wrap:wrap;gap:var(--space-40);align-items:center;align-self:flex-start;padding:var(--space-16) var(--space-24);background:var(--bg-fill-surface);border:1px solid var(--ui-border-soft);border-radius:var(--radius)}.hero-v5__fact{display:flex;gap:var(--space-16);align-items:flex-start}.hero-v5__fact--no-icon{gap:0}.hero-v5__icon{flex:none;width:44px;height:44px;color:var(--brand)}.hero-v5__icon svg{display:block;width:100%;height:100%}.hero-v5__fact-text{display:flex;flex-direction:column;gap:var(--space-8);min-width:0}.hero-v5__fact-label{color:var(--text-muted)}.hero-v5__fact-value{color:var(--text-primary)}@media (max-width:1360px) and (min-width:1201px){.hero-v5__inner{padding:var(--space-32);background:var(--white-opacity-50);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));border-radius:var(--radius);box-sizing:border-box}.hero-v5__facts{background:transparent}}@media (max-width:1200px){.hero-v5{display:flex;flex-direction:column;min-height:auto;padding-bottom:var(--section-y-mobile)}.hero-v5.has-block-bg.section-pad-y-lg>.container{padding-bottom:0}.hero-v5__bg{position:static;order:2;flex:none;width:100%;aspect-ratio:375\/280;min-height:220px}.hero-v5__bg img{min-height:0;object-position:right center}.hero-v5>.container{order:1;flex:none;width:100%;max-width:none}.hero-v5__inner{max-width:none;padding:0;margin-bottom:var(--space-16);background:none;border-radius:0}.hero-v5__facts{background:var(--bg-fill-surface)}}@media (max-width:991px){.hero-v5__facts{flex-direction:column;align-items:flex-start;gap:var(--space-24);width:100%}}@media (max-width:768px){.hero-v5.has-block-bg.section-pad-y-lg>.container{padding-bottom:0}}html:has(.benefits-v1),.page:has(.benefits-v1){overflow-x:clip}.benefits-v1{position:relative;box-sizing:border-box;overflow:visible}.benefits-v1__decor{position:absolute;left:-368px;bottom:-178px;z-index:0;display:block;width:1289px;height:537px;max-width:none;object-fit:contain;pointer-events:none;opacity:0.5;transform:rotate(-3.62deg);transform-origin:center center}.benefits-v1 > .container{position:relative;z-index:1}.benefits-v1__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-64)}.benefits-v1:has(.benefits-v1__article) .benefits-v1__grid{align-items:flex-end}.benefits-v1__left{display:flex;flex-direction:column;gap:var(--space-48);flex:0 1 750px;min-width:0;max-width:750px}.benefits-v1__lead{min-width:0}.benefits-v1__eyebrow{color:var(--text-muted)}.benefits-v1__title{margin:0;color:var(--text-primary)}.benefits-v1__subtitle{margin:0;max-width:633px;color:var(--text-secondary)}.benefits-v1__cards{display:flex;flex-direction:column;gap:var(--space-8);flex:0 1 799px;min-width:0;max-width:799px;width:100%;margin:0;padding:0;list-style:none}.benefits-v1__card{display:flex;gap:var(--space-32);align-items:flex-start;padding:var(--space-24);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:transparent;box-sizing:border-box}.benefits-v1__card--no-icon{gap:0}.benefits-v1__icon{position:relative;display:flex;align-items:center;justify-content:center;flex:none;width:46px;height:46px;border-radius:var(--radius-sm);color:var(--brand-dark)}.benefits-v1__icon::before{content:\"\";position:absolute;inset:-3px;border-radius:var(--radius-sm);background:var(--bg-fill-page);mix-blend-mode:multiply;pointer-events:none}.benefits-v1__icon-img{position:relative;z-index:1;display:block;width:18px;height:19px;object-fit:contain}.benefits-v1__card-body{min-width:0}.benefits-v1__card-title{margin:0;color:var(--text-primary)}.benefits-v1__card-text{margin:0;color:var(--text-secondary)}.benefits-v1__article{display:flex;align-items:flex-start;gap:var(--space-28)}.benefits-v1__article--no-icon{gap:0}.benefits-v1__article-icon{display:flex;align-items:center;justify-content:center;flex:none;width:88px;height:88px;border-radius:var(--radius-full);background:var(--bg-fill-panel)}.benefits-v1__article-icon img{display:block;width:38px;height:38px}.benefits-v1__article-body{min-width:0}.benefits-v1__article-title{margin:0;color:var(--text-primary)}.benefits-v1__article-text{margin:0;color:var(--text-secondary)}.benefits-v1__article-link{color:var(--text-secondary)}.benefits-v1__article-link:hover,.benefits-v1__article-link:focus-visible{color:var(--brand-dark)}@media (max-width:1200px){.benefits-v1__grid,.benefits-v1:has(.benefits-v1__article) .benefits-v1__grid{flex-direction:column;align-items:stretch;gap:var(--space-32)}.benefits-v1__left,.benefits-v1__cards{flex:1 1 auto;max-width:none;width:100%}.benefits-v1__subtitle{max-width:none}.benefits-v1__decor{left:-173px;bottom:-88px;width:min(1289px,160vw);height:auto;aspect-ratio:1289 \/ 537}}@media (max-width:768px){.benefits-v1__decor{left:-115px;bottom:-53px}.benefits-v1__article{gap:var(--space-16)}.benefits-v1__article-icon{width:64px;height:64px}.benefits-v1__article-icon img{width:28px;height:28px}.benefits-v1__card{gap:var(--space-16);padding:var(--space-16)}.benefits-v1__icon{width:40px;height:40px}.benefits-v1__icon-img{width:16px;height:17px}}.patient-errors-v1{box-sizing:border-box}.patient-errors-v1__eyebrow{color:var(--text-muted)}.patient-errors-v1__title{margin:0;color:var(--text-primary)}.patient-errors-v1__lead{margin:0;max-width:1080px;color:var(--text-secondary)}.patient-errors-v1__cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24) var(--space-40);width:100%;margin:0;padding:0;list-style:none}.patient-errors-v1__card-item{min-width:0;display:flex}.patient-errors-v1__card{position:relative;display:flex;align-items:center;gap:var(--space-32);width:100%;min-height:100%;padding:var(--space-20) var(--space-24);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box}.patient-errors-v1__card--no-icon{gap:0}.patient-errors-v1__badge{position:absolute;top:14px;right:var(--space-16);z-index:1;display:inline-flex;align-items:center;justify-content:center;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);color:var(--promo-accent);font-weight:600;line-height:1.4;white-space:nowrap;background:var(--promo-accent-bg)}.patient-errors-v1__icon{display:flex;align-items:center;justify-content:center;flex:none;width:88px;height:88px;border-radius:var(--radius-pill);background:var(--bg-fill-surface);overflow:hidden}.patient-errors-v1__icon-img{display:block;width:48px;height:48px;object-fit:contain}.patient-errors-v1__card-body{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-8);min-width:0;padding-right:calc(var(--space-64) + var(--space-40))}.patient-errors-v1__card-title{margin:0;color:var(--text-primary);font-family:var(--font-heading);font-weight:var(--font-weight-heading);font-size:var(--text-title-sm);line-height:1.4;letter-spacing:0}.patient-errors-v1__card-text{margin:0;color:var(--text-secondary)}@media (max-width:1200px){.patient-errors-v1__cards{grid-template-columns:1fr;gap:var(--space-24)}}@media (max-width:768px){.patient-errors-v1__inner.stack--xl{gap:var(--space-24)}.patient-errors-v1__head.stack--md{gap:var(--space-16)}.patient-errors-v1__title{font-size:var(--text-title-sm);line-height:1.35;letter-spacing:0}.patient-errors-v1__lead{max-width:none}.patient-errors-v1__cards{gap:var(--space-16)}.patient-errors-v1__card{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"badge icon\" \"body body\";align-items:center;column-gap:var(--space-8);row-gap:var(--space-8);padding:var(--space-16) var(--space-8)}.patient-errors-v1__card--no-icon{grid-template-columns:minmax(0,1fr);grid-template-areas:\"badge\" \"body\"}.patient-errors-v1__badge{position:static;grid-area:badge;justify-self:start;align-self:center;line-height:1.2}.patient-errors-v1__icon{grid-area:icon;justify-self:end;width:44px;height:44px}.patient-errors-v1__icon-img{width:24px;height:24px}.patient-errors-v1__card-body{grid-area:body;padding-right:0}.patient-errors-v1__card-title{font-family:var(--font-body);font-size:var(--text-base);font-weight:500;line-height:1.4}}.content-strip-link-v1{box-sizing:border-box}.content-strip-link-v1__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-40);width:100%;color:inherit;text-decoration:none;box-sizing:border-box}.content-strip-link-v1__main{display:flex;align-items:flex-start;gap:var(--space-28);min-width:0}.content-strip-link-v1__icon{display:flex;flex:none;align-items:center;justify-content:center;width:88px;height:88px;border-radius:50%;background:var(--bg-fill-page)}.content-strip-link-v1__icon-img{display:block;width:38px;height:38px;aspect-ratio:1 \/ 1;object-fit:contain}.content-strip-link-v1__copy{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-12);min-width:0;padding-top:var(--space-4)}.content-strip-link-v1__title,.content-strip-link-v1__description{display:block;margin:0}.content-strip-link-v1__title{font-family:var(--font-heading);font-weight:var(--font-weight-heading);letter-spacing:var(--ls-mega);color:var(--text-primary)}.content-strip-link-v1__description{max-width:1006px;color:var(--text-secondary)}.content-strip-link-v1__link{display:flex;flex:none;align-items:center;gap:var(--space-8);color:var(--text-secondary);white-space:nowrap}.content-strip-link-v1__link-icon{flex:none;width:24px;height:24px;transition:transform .16s ease}a.content-strip-link-v1__inner:focus-visible{outline:2px solid var(--focus-ring);outline-offset:var(--space-8)}@media (hover:hover){a.content-strip-link-v1__inner:hover .content-strip-link-v1__title{color:var(--brand-dark)}a.content-strip-link-v1__inner:hover .content-strip-link-v1__link-icon,a.content-strip-link-v1__inner:focus-visible .content-strip-link-v1__link-icon{transform:translateX(var(--space-4))}}@media (max-width:900px){.content-strip-link-v1__inner{align-items:flex-start;gap:var(--space-24)}.content-strip-link-v1__main{gap:var(--space-20)}.content-strip-link-v1__icon{width:72px;height:72px}.content-strip-link-v1__icon-img{width:32px;height:32px}}@media (max-width:640px){.content-strip-link-v1__inner{flex-direction:column;gap:var(--space-16)}.content-strip-link-v1__main{gap:var(--space-16)}.content-strip-link-v1__icon{width:56px;height:56px}.content-strip-link-v1__icon-img{width:24px;height:24px}.content-strip-link-v1__copy{gap:var(--space-8);padding-top:0}.content-strip-link-v1__link{align-self:flex-end}}.treatment-technologies-v1{box-sizing:border-box}.treatment-technologies-v1__eyebrow{color:var(--text-muted)}.treatment-technologies-v1__title{margin:0;max-width:1080px;color:var(--text-primary)}.treatment-technologies-v1__head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,536px);gap:var(--space-40);align-items:end;margin-bottom:var(--space-40)}.treatment-technologies-v1__head-main{min-width:0;max-width:1080px}.treatment-technologies-v1__head-lead{min-width:0;margin:0;color:var(--text-secondary)}.treatment-technologies-v1__body{display:flex;flex-direction:column;gap:0}.treatment-technologies-v1__list{display:flex;flex-direction:column;gap:var(--space-8)}.treatment-technologies-v1__item{display:flex;flex-direction:column}.treatment-technologies-v1__tab[data-treatment-technologies-index=\"0\"]{border-top:0}.treatment-technologies-v1__tab.is-active + .treatment-technologies-v1__panel + .treatment-technologies-v1__tab{border-top-color:transparent}.treatment-technologies-v1__tab{position:relative;z-index:0;display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;margin:0;padding:var(--space-32) var(--space-40);border:0;border-top:1px solid var(--ui-divider);border-radius:0;background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;box-sizing:border-box;transition:color .35s ease,border-color .35s ease}.treatment-technologies-v1__tab::before{content:\"\";position:absolute;inset:0;z-index:-1;border-radius:var(--radius);background:var(--brand-light);opacity:0;transition:opacity .35s ease;pointer-events:none}.treatment-technologies-v1__item:first-child .treatment-technologies-v1__tab{border-top:0}.treatment-technologies-v1__tab:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.treatment-technologies-v1__tab.is-active{border-top-color:transparent;border-radius:var(--radius);color:var(--white)}.treatment-technologies-v1__tab.is-active::before{opacity:1}.treatment-technologies-v1__item + .treatment-technologies-v1__item .treatment-technologies-v1__tab{border-top:1px solid var(--ui-divider)}.treatment-technologies-v1__item:has(.treatment-technologies-v1__tab.is-active) + .treatment-technologies-v1__item .treatment-technologies-v1__tab{border-top-color:transparent}.treatment-technologies-v1__tab-label{flex:1 1 auto;min-width:0}.treatment-technologies-v1__tab-arrow{display:flex;align-items:center;justify-content:center;flex:none;width:52px;height:52px;opacity:0.5;transition:opacity .35s ease,visibility .35s ease}.treatment-technologies-v1__tab.is-active .treatment-technologies-v1__tab-arrow{opacity:0;visibility:hidden;pointer-events:none}.treatment-technologies-v1__panel{display:flex;flex-direction:column;align-self:start;width:100%}.treatment-technologies-v1__panel[hidden]{display:none !important}.treatment-technologies-v1__panel-inner{display:flex;flex-direction:column;gap:var(--space-28)}.treatment-technologies-v1__item .treatment-technologies-v1__panel-inner{padding:var(--space-24) 0 var(--space-8)}.treatment-technologies-v1__media{border-radius:var(--radius);overflow:hidden}.treatment-technologies-v1__media-img{display:block;width:100%;height:auto;aspect-ratio:800 \/ 516;object-fit:cover;object-position:center bottom}.treatment-technologies-v1__detail-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-28)}.treatment-technologies-v1__detail-text{min-width:0;margin:0;color:var(--text-primary)}.treatment-technologies-v1__badge{display:flex;align-items:flex-start;gap:var(--space-8);flex:none;max-width:255px;width:100%;margin:0;padding:var(--space-16) var(--space-24);border-radius:var(--radius);background:var(--brand-opacity-20);color:var(--brand-dark)}.treatment-technologies-v1__badge-text{min-width:0;line-height:var(--lh-body-tight)}.treatment-technologies-v1__badge-icon{flex:none;width:20px;height:20px;background:var(--brand-dark);-webkit-mask-image:url('\/assets\/src\/img\/treatment-technologies\/badge-check.svg');mask-image:url('\/assets\/src\/img\/treatment-technologies\/badge-check.svg');-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:center;mask-position:center}@media (min-width:1201px){.treatment-technologies-v1__list{display:flex;flex-wrap:wrap;column-gap:var(--space-40);row-gap:0;position:relative;align-content:flex-start}.treatment-technologies-v1__item{display:contents}.treatment-technologies-v1__tab{flex:none;width:calc((100% - var(--space-40)) \/ 2);border-top:1px solid var(--ui-divider);border-radius:0}.treatment-technologies-v1__tab[data-treatment-technologies-index=\"0\"]{border-top:0}.treatment-technologies-v1__tab.is-active + .treatment-technologies-v1__panel + .treatment-technologies-v1__tab{border-top-color:transparent}.treatment-technologies-v1__panel{position:absolute;top:0;right:0;width:calc((100% - var(--space-40)) \/ 2);align-self:start;display:flex !important;grid-template-rows:none;transition:none}.treatment-technologies-v1__item .treatment-technologies-v1__panel-inner{padding:0;overflow:visible}.treatment-technologies-v1__detail-text{flex:1 1 auto;max-width:460px}}@media (max-width:1200px){.treatment-technologies-v1__head{grid-template-columns:1fr;align-items:start;gap:var(--space-24)}.treatment-technologies-v1__detail-foot{align-items:flex-start}.treatment-technologies-v1__detail-text{flex:none;width:100%}.treatment-technologies-v1__item .treatment-technologies-v1__tab,.treatment-technologies-v1__item:first-child .treatment-technologies-v1__tab,.treatment-technologies-v1__item + .treatment-technologies-v1__item .treatment-technologies-v1__tab{border-top:0;border-radius:var(--radius)}.treatment-technologies-v1__item:has(.treatment-technologies-v1__tab.is-active) + .treatment-technologies-v1__item .treatment-technologies-v1__tab{border-top-color:transparent}.treatment-technologies-v1__item .treatment-technologies-v1__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s ease}.treatment-technologies-v1__item.is-open .treatment-technologies-v1__panel{grid-template-rows:1fr;transition:grid-template-rows .35s ease}.treatment-technologies-v1__item .treatment-technologies-v1__panel[hidden]{display:none !important}.treatment-technologies-v1__item .treatment-technologies-v1__panel-inner{min-height:0;overflow:hidden}}@media (max-width:768px){.treatment-technologies-v1__tab{padding:var(--space-24) var(--space-20)}.treatment-technologies-v1__tab-arrow{width:40px;height:40px}.treatment-technologies-v1__detail-foot{flex-direction:column;align-items:flex-start}.treatment-technologies-v1__badge{align-self:stretch;max-width:100%;width:100%}}@media (max-width:768px) and (prefers-reduced-motion:reduce){.treatment-technologies-v1__tab,.treatment-technologies-v1__item .treatment-technologies-v1__panel{transition:none}}.doctors-v6{--doctors-v6-grid-cols:4;--doctors-v6-photo-ratio:1 \/ 1;box-sizing:border-box}.doctors-v6__inner.stack--xl{gap:var(--space-64)}.doctors-v6__filters{position:relative;isolation:isolate;display:flex;flex-direction:column;gap:var(--space-22);padding:var(--space-32) var(--space-40);border-radius:var(--radius)}.doctors-v6__filters-veil{position:absolute;inset:0;z-index:0;background:var(--bg-fill-filter-widget);mix-blend-mode:multiply;pointer-events:none;border-radius:var(--radius)}.doctors-v6__filters-row{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.9fr) minmax(240px,1fr) minmax(240px,1fr);gap:var(--space-40);align-items:stretch;width:100%}.doctors-v6__filters-row--selects-0{grid-template-columns:minmax(0,1fr)}.doctors-v6__filters-row--selects-1{grid-template-columns:minmax(0,1.9fr) minmax(240px,1fr)}.doctors-v6__filters-extra{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.9fr) minmax(240px,1fr) minmax(240px,1fr);gap:var(--space-40);align-items:center;width:100%}.doctors-v6__filters-extra--no-toggles{grid-template-columns:minmax(240px,1fr) minmax(240px,1fr);justify-content:end}.doctors-v6__filters-extra[hidden]{display:none}.doctors-v6__toggles{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-32);min-width:0}.doctors-v6__toggle{position:relative;display:inline-flex;align-items:center;gap:var(--space-8);margin:0;cursor:pointer;color:var(--text-secondary)}.doctors-v6__toggle-input{position:absolute;top:50%;left:0;z-index:1;width:52px;height:28px;margin:0;padding:0;opacity:0;cursor:pointer;transform:translateY(-50%)}.doctors-v6__switch{position:relative;flex:none;width:52px;height:28px;border-radius:var(--radius-pill);background:var(--ui-divider);transition:background-color .2s ease}.doctors-v6__switch::after{content:\"\";position:absolute;top:2px;left:2px;width:24px;height:24px;border-radius:50%;background:var(--bg-fill-surface);box-shadow:var(--shadow-header);transition:transform .2s ease}.doctors-v6__toggle-input:checked + .doctors-v6__switch{background:var(--brand-light)}.doctors-v6__toggle-input:checked + .doctors-v6__switch::after{transform:translateX(24px)}.doctors-v6__toggle-input:focus-visible + .doctors-v6__switch{outline:2px solid var(--focus-ring);outline-offset:2px}.doctors-v6__toggle-label{white-space:nowrap}.doctors-v6__search.field{position:relative;width:100%;min-width:0;gap:0}.doctors-v6__search-input.field__input{width:100%;min-height:60px;padding:var(--space-10) calc(var(--space-16) + 40px + var(--space-8) + 24px) var(--space-10) var(--space-24);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:var(--white-opacity-50);color:var(--text-secondary)}.doctors-v6__search-ph{position:absolute;top:50%;left:var(--space-24);right:calc(var(--space-16) + 40px + var(--space-8));color:var(--text-secondary);pointer-events:none;white-space:nowrap;transform:translateY(-50%);z-index:1}.doctors-v6__search.is-typed .doctors-v6__search-ph{visibility:hidden}.doctors-v6__search-input.field__input[type=\"search\"]::-webkit-search-cancel-button{width:24px;height:24px;margin-right:0;-webkit-mask-size:16px 16px;mask-size:16px 16px}.doctors-v6__search-icon{position:absolute;top:50%;right:var(--space-16);display:flex;align-items:center;justify-content:center;width:40px;height:40px;transform:translateY(-50%);pointer-events:none}.doctors-v6__search-icon img{display:block;width:24px;height:24px}.doctors-v6__select-wrap.field{position:relative;width:100%;min-width:0;gap:0}.doctors-v6__select.field__input{width:100%;min-height:60px;padding:var(--space-18) calc(var(--space-20) + 28px) var(--space-18) var(--space-20);border:1px solid var(--ui-border-strong);border-radius:var(--radius);background:var(--white-opacity-50);color:var(--text-primary);cursor:pointer;appearance:none}.doctors-v6__select.field__input:has(option[value=\"all\"]:checked){color:var(--text-muted)}.doctors-v6__select.field__input:focus{border-color:var(--brand);outline:none}.doctors-v6__select-chevron{position:absolute;top:50%;right:var(--space-20);color:var(--text-muted);pointer-events:none;transform:translateY(-50%)}.doctors-v6__select-wrap.is-filled .doctors-v6__select.field__input{color:var(--text-primary);border-color:var(--ui-border-default)}.doctors-v6__select-wrap.is-filled .doctors-v6__select-chevron{display:none}.doctors-v6__select-clear{position:absolute;top:50%;right:var(--space-16);z-index:1;display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin:0;padding:0;border:0;background:transparent;color:var(--text-muted);cursor:pointer;transform:translateY(-50%)}.doctors-v6__select-clear[hidden]{display:none}.doctors-v6__select-clear:hover,.doctors-v6__select-clear:focus-visible{color:var(--text-primary)}.doctors-v6__select-clear:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.doctors-v6__select-clear .icon{width:16px;height:16px}.doctors-v6__filters-foot{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);min-height:40px;width:100%}.doctors-v6__filters-meta{display:flex;align-items:center;gap:var(--space-12);flex:none;min-width:0}.doctors-v6__filters-meta[hidden]{display:none}.doctors-v6__filters-foot:not(:has(.doctors-v6__more-params)):has([data-doctors-v6-meta][hidden]){display:none}.doctors-v6__found{margin:0;color:var(--ui-border-strong);white-space:nowrap}.doctors-v6__reset{display:inline-flex;align-items:center;margin:0;padding:0;border:0;background:transparent;color:var(--brand-dark);cursor:pointer;white-space:nowrap}.doctors-v6__reset:hover,.doctors-v6__reset:focus-visible{color:var(--brand)}.doctors-v6__reset:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.doctors-v6__more-params{position:relative;z-index:1;display:inline-flex;align-items:center;gap:var(--space-8);width:max-content;margin:0;padding:0;border:0;background:transparent;color:var(--brand-light);cursor:pointer}.doctors-v6__more-params:hover,.doctors-v6__more-params:focus-visible{color:var(--brand-dark)}.doctors-v6__more-params:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.doctors-v6__more-params-icon{color:inherit}.doctors-v6__more-params-icon--filter{display:none;width:24px;height:24px}.doctors-v6__more-params-icon--plus{width:16px;height:16px}@media (min-width:769px){.doctors-v6__more-params--desktop-hidden{display:none}.doctors-v6__filters-foot:has(.doctors-v6__more-params--desktop-hidden){justify-content:flex-end}.doctors-v6__filters-foot:has(.doctors-v6__more-params--desktop-hidden):has([data-doctors-v6-meta][hidden]){display:none}}.doctors-v6__empty{margin:0;color:var(--text-muted);text-align:center}.doctors-v6__empty[hidden]{display:none}.doctors-v6__grid{display:grid;grid-template-columns:repeat(var(--doctors-v6-grid-cols),minmax(0,1fr));gap:var(--space-40);width:100%;margin:0;padding:0;list-style:none}.doctors-v6__item{min-width:0}.doctors-v6__item[hidden]{display:none}.doctors-v6__banner-item{min-width:0;grid-column:span 2}.doctors-v6__banner{position:relative;isolation:isolate;display:flex;align-items:center;box-sizing:border-box;min-height:508px;height:100%;padding:var(--space-64);border-radius:var(--radius);overflow:hidden}.doctors-v6__banner-media{position:absolute;inset:0;z-index:0}.doctors-v6__banner-img{display:block;width:100%;height:100%;object-fit:cover;object-position:center}.doctors-v6__banner-veil{position:absolute;inset:0;background:var(--bg-fill-page);mix-blend-mode:multiply}.doctors-v6__banner-fade{position:absolute;inset:0;background:linear-gradient(90deg,var(--white-opacity-40) 0%,transparent 72%)}.doctors-v6__banner-copy{position:relative;z-index:1;max-width:36em}.doctors-v6__banner-copy.stack--xl{gap:var(--space-40)}.doctors-v6__banner-titles.stack--md{gap:var(--space-16)}.doctors-v6__banner-title{margin:0;color:var(--text-primary)}.doctors-v6__banner-lead{margin:0;color:var(--text-secondary)}.doctors-v6__banner-video{display:flex;gap:var(--space-24);align-items:center;max-width:240px;text-decoration:none;color:inherit;cursor:pointer}.doctors-v6__banner-play{position:relative;display:flex;align-items:center;justify-content:center;width:48px;height:48px;flex:none;box-sizing:border-box;border:none;border-radius:var(--radius-full);background:transparent;backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-on-brand);transition:transform .16s ease}.doctors-v6__banner-play::before{content:\"\";position:absolute;inset:0;border:5px solid var(--brand);border-radius:var(--radius-full);opacity:0.2;pointer-events:none;transition:opacity .16s ease}.doctors-v6__banner-play-bg{position:absolute;top:5px;left:5px;width:38px;height:38px;border-radius:var(--radius-full);background:var(--brand);opacity:0.4;transition:opacity .16s ease}.doctors-v6__banner-play-icon{position:absolute;inset:0;z-index:1;display:block;width:10px;height:10px;margin:auto}.doctors-v6__banner-video-label{margin:0;max-width:170px;color:var(--text-primary);transition:color .16s ease}.doctors-v6__banner-video:hover .doctors-v6__banner-play,.doctors-v6__banner-video:focus-visible .doctors-v6__banner-play{transform:scale(1.04)}.doctors-v6__banner-video:hover .doctors-v6__banner-play-bg,.doctors-v6__banner-video:focus-visible .doctors-v6__banner-play-bg{opacity:0.65}.doctors-v6__banner-video:hover .doctors-v6__banner-play::before,.doctors-v6__banner-video:focus-visible .doctors-v6__banner-play::before{opacity:0.35}.doctors-v6__banner-video:hover .doctors-v6__banner-video-label,.doctors-v6__banner-video:focus-visible .doctors-v6__banner-video-label{color:var(--brand-dark)}.doctors-v6__card{display:flex;flex-direction:column;gap:var(--space-16);min-width:0;height:100%}.doctors-v6__card-photo{position:relative;width:100%;aspect-ratio:var(--doctors-v6-photo-ratio);border-radius:var(--radius);overflow:hidden;background-color:var(--bg-fill-panel);background-image:var(--doctors-v6-photo-back);background-repeat:no-repeat;background-position:center;background-size:cover}.doctors-v6__card-img{position:relative;z-index:1;display:block;width:100%;height:100%;object-fit:contain;object-position:center bottom}.doctors-v6__card-photo--has-bg{background-image:none}.doctors-v6__card-img--has-bg{object-fit:cover;object-position:center}.doctors-v6__badge{position:absolute;left:14px;z-index:2;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-4);box-sizing:border-box;height:40px;padding:var(--space-10);border-radius:var(--radius-pill);background:var(--white-opacity-50);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-secondary)}.doctors-v6__badge--exp{top:14px}.doctors-v6__badge--rating{top:63px}.doctors-v6__card-photo--no-exp .doctors-v6__badge--rating{top:14px}.doctors-v6__badge-star{width:24px;height:24px;color:var(--rating-accent)}.doctors-v6--badge-border .doctors-v6__badge{background:transparent;border:1px solid var(--brand-surface-soft);backdrop-filter:none;-webkit-backdrop-filter:none}.doctors-v6--badge-fill .doctors-v6__badge{background:var(--white-opacity-50);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur))}.doctors-v6__available{position:absolute;left:14px;bottom:15px;z-index:2;display:inline-flex;align-items:center;gap:var(--space-4);max-width:calc(100% - 28px);padding:var(--space-6) var(--space-10);border-radius:var(--radius);color:var(--text-secondary)}.doctors-v6__available-dot{flex:none;width:var(--space-14);height:var(--space-14);border-radius:var(--radius-full);background:var(--brand-light)}.doctors-v6__card-copy.stack--sm{gap:var(--space-10)}.doctors-v6__card-name{display:flex;flex-direction:column;margin:0;color:var(--text-primary)}.doctors-v6__card-name-line{display:block}.doctors-v6__card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-10);margin:0;color:var(--text-muted)}.doctors-v6__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--text-muted)}.doctors-v6__actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-16);margin-top:auto}.doctors-v6__book.btn--primary{width:auto;flex:none;padding:var(--space-16) var(--space-24);white-space:nowrap;font-size:calc(var(--text-base) * 0.9375)}.doctors-v6__more-link{flex:0 0 auto;padding-block:var(--space-4);color:var(--text-secondary);font-weight:var(--font-weight-heading);white-space:nowrap}.doctors-v6__more-link:hover,.doctors-v6__more-link:focus-visible{color:var(--brand-dark)}.doctors-v6__actions.is-actions-stacked{flex-direction:column;align-items:center;width:100%}.doctors-v6__actions.is-actions-stacked .doctors-v6__book.btn--primary{width:100%}.doctors-v6__foot.stack--md{gap:var(--space-16);align-items:center}.doctors-v6__foot[hidden]{display:none}.doctors-v6__more{min-width:218px}.doctors-v6__more[hidden]{display:none}.doctors-v6__count{margin:0;color:var(--text-muted);text-align:center}@media (max-width:1600px){.doctors-v6__badge{height:32px;padding:var(--space-6)}.doctors-v6__badge--rating{top:55px}.doctors-v6__card-photo--no-exp .doctors-v6__badge--rating{top:14px}.doctors-v6__badge-star{width:18px;height:18px}}@media (max-width:1360px){.doctors-v6{--doctors-v6-grid-cols:2}.doctors-v6__filters-row,.doctors-v6__filters-row--selects-1,.doctors-v6__filters-extra,.doctors-v6__filters-extra--no-toggles{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-24)}.doctors-v6__filters-row--selects-0{grid-template-columns:minmax(0,1fr)}.doctors-v6__search.field,.doctors-v6__toggles{grid-column:1 \/ -1}.doctors-v6__filters-foot{flex-wrap:wrap}.doctors-v6__filters-meta{flex:1 1 auto;flex-wrap:wrap;justify-content:flex-end;min-width:0}.doctors-v6__found{min-width:0;white-space:normal}}@media (max-width:768px){.doctors-v6__inner.stack--xl{gap:var(--space-40)}.doctors-v6__filters{gap:var(--space-16);padding:var(--space-8) var(--space-16) var(--space-16)}.doctors-v6__filters-row,.doctors-v6__filters-extra,.doctors-v6__filters-extra--no-toggles{grid-template-columns:minmax(0,1fr);gap:var(--space-16)}.doctors-v6__search.field,.doctors-v6__toggles{grid-column:auto}.doctors-v6__filters:not(.is-extra-open) .doctors-v6__filters-row .doctors-v6__select-wrap{display:none}.doctors-v6__search-input.field__input{min-height:48px;padding:var(--space-10) calc(var(--space-16) + 26px + var(--space-8)) var(--space-10) var(--space-16);border-color:var(--ui-border-soft);color:var(--text-muted);font-weight:var(--font-weight-heading)}.doctors-v6__search-ph{left:var(--space-16);right:calc(var(--space-16) + 26px + var(--space-8));color:var(--text-muted);font-weight:var(--font-weight-heading)}.doctors-v6__search-icon{right:var(--space-16);width:26px;height:26px}.doctors-v6__search-icon img{width:16px;height:16px}.doctors-v6__toggles{gap:var(--space-16) var(--space-24)}.doctors-v6__filters-foot{flex-wrap:wrap;align-items:flex-start}.doctors-v6__filters-meta{flex:1 1 100%;flex-wrap:nowrap;justify-content:space-between;align-items:flex-start;gap:var(--space-8)}.doctors-v6__found{flex:1 1 0;min-width:0;white-space:normal}.doctors-v6__reset{flex:none}.doctors-v6__filters:not(.is-extra-open) .doctors-v6__filters-foot{justify-content:center;min-height:24px}.doctors-v6__filters:not(.is-extra-open) .doctors-v6__more-params{gap:var(--space-16);color:var(--text-muted)}.doctors-v6__filters:not(.is-extra-open) .doctors-v6__more-params:hover,.doctors-v6__filters:not(.is-extra-open) .doctors-v6__more-params:focus-visible{color:var(--text-secondary)}.doctors-v6__filters:not(.is-extra-open) .doctors-v6__more-params-icon--filter{display:block}.doctors-v6__filters:not(.is-extra-open) .doctors-v6__more-params-icon--plus{display:none}.doctors-v6__banner-item{grid-column:1 \/ -1}.doctors-v6__banner{min-height:0;padding:var(--space-40)}}@media (max-width:600px){.doctors-v6{--doctors-v6-grid-cols:1}.doctors-v6__grid{gap:var(--space-24)}.doctors-v6__actions{flex-direction:column;align-items:center;width:100%;gap:var(--space-16)}.doctors-v6__book.btn--primary{width:100%}}.prices-v3{box-sizing:border-box}.prices-v3__inner.stack--xl{gap:var(--space-40)}.prices-v3__head{max-width:1046px}.prices-v3__head.stack--md{gap:var(--space-24)}.prices-v3__eyebrow{color:var(--text-muted)}.prices-v3__title{margin:0;color:var(--text-primary)}.prices-v3__lead{margin:0;max-width:934px;color:var(--text-secondary)}.prices-v3__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:clamp(var(--space-24),5vw,96px)}.prices-v3__sidebar{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));flex:0 0 clamp(280px,26vw,425px);min-width:0}.prices-v3__nav.stack{gap:var(--space-8)}.prices-v3__nav-select-wrap{display:none;position:relative;width:100%}.prices-v3__nav-select.field__input{width:100%;min-height:60px;padding:var(--space-12) calc(var(--space-24) + 20px) var(--space-12) var(--space-16);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white-opacity-40);color:var(--text-secondary);cursor:pointer;appearance:none}.prices-v3__nav-select.field__input:focus{border-color:var(--brand);outline:none}.prices-v3__nav-select-chevron{position:absolute;top:50%;right:var(--space-16);color:var(--text-secondary);pointer-events:none;transform:translateY(-50%)}.prices-v3__nav-item{display:flex;align-items:center;gap:var(--space-10);width:100%;padding:var(--space-12) var(--space-8) var(--space-12) var(--space-8);border:1px solid var(--ui-divider);border-radius:var(--radius);background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease}.prices-v3__nav-item:hover,.prices-v3__nav-item:focus-visible{border-color:var(--brand-border);color:var(--text-primary)}.prices-v3__nav-item.is-active{border-color:var(--brand-soft);background:var(--brand-opacity-15);color:var(--brand)}.prices-v3__nav-icon{display:flex;align-items:center;justify-content:center;flex:none;width:42px;height:42px}.prices-v3__nav-icon-img{display:block;width:35px;height:35px;object-fit:contain}.prices-v3__nav-label{flex:1 1 auto;min-width:0}.prices-v3__main{flex:1 1 auto;min-width:0}.prices-v3__main.stack--xl,.prices-v3__panel.stack--xl{gap:var(--space-40)}.prices-v3__panel[hidden]{display:none !important}.prices-v3__toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24)}.prices-v3__search.field{position:relative;flex:1 1 auto;min-width:0;max-width:728px}.prices-v3__search-input.field__input{width:100%;min-height:60px;padding:var(--space-10) calc(var(--space-24) + 40px) var(--space-10) var(--space-24);border-radius:var(--radius);border:1px solid var(--ui-border-soft);background:var(--white-opacity-40);color:var(--text-secondary)}.prices-v3__search-input.field__input::placeholder{color:var(--text-secondary)}.prices-v3__search-icon{position:absolute;top:50%;right:var(--space-16);display:flex;align-items:center;justify-content:center;width:40px;height:40px;transform:translateY(-50%);pointer-events:none}.prices-v3__search-icon img{display:block;width:24px;height:24px}.prices-v3__download{display:inline-flex;align-items:center;gap:var(--space-10);flex:none;color:var(--text-secondary);text-decoration:none;white-space:nowrap}.prices-v3__download:hover,.prices-v3__download:focus-visible{color:var(--brand-dark)}.prices-v3__download-icon{flex:none}.prices-v3__list,.prices-v3__group-list{display:flex;flex-direction:column;gap:var(--space-16);margin:0;padding:0;list-style:none}.prices-v3__group-list{gap:var(--space-8)}.prices-v3__item.is-hidden{display:none}.prices-v3__service,.prices-v3__group-trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;box-sizing:border-box}.prices-v3__service{padding:var(--space-10) var(--space-24) var(--space-10) var(--space-40);border-radius:var(--radius);background:var(--white-opacity-75)}.prices-v3__service--nested{padding-left:var(--space-40);border:1px solid var(--ui-border-soft);background:var(--white-opacity-40)}.prices-v3__service-copy{flex:1 1 auto;min-width:0}.prices-v3__service-copy.stack--sm{gap:var(--space-4)}.prices-v3__service-code{margin:0;color:var(--text-muted)}.prices-v3__service-title{margin:0;color:var(--text-primary)}.prices-v3__service--nested .prices-v3__service-title{color:var(--text-secondary)}.prices-v3__service-aside{flex:none;align-items:flex-end;text-align:right}.prices-v3__service-aside.stack--sm{gap:var(--space-16)}.prices-v3__service-prices{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:var(--space-8);color:var(--ui-border-default)}.prices-v3__service-price{margin:0;color:var(--text-primary);white-space:nowrap}.prices-v3__service-price-old{text-decoration:line-through;white-space:nowrap}.prices-v3__service-book{margin:0;padding:0;border:none;background:none;color:var(--brand-dark);cursor:pointer;text-align:right;white-space:nowrap}.prices-v3__service-book:hover,.prices-v3__service-book:focus-visible{color:var(--brand);text-decoration:underline;text-underline-offset:2px}.prices-v3__group-trigger{min-height:92px;padding:var(--space-10) var(--space-24) var(--space-10) var(--space-40);border:none;border-radius:var(--radius);background:var(--white-opacity-75);color:var(--text-primary);text-align:left;cursor:pointer;transition:background-color .16s ease,box-shadow .16s ease,color .16s ease}.prices-v3__group-title{flex:1 1 auto;min-width:0}.prices-v3__group-chevron{display:flex;align-items:center;justify-content:center;flex:none;width:70px;height:70px;color:var(--brand)}.prices-v3__group-chevron-icon{display:block;transition:transform .24s ease}.prices-v3__item--group.is-open .prices-v3__group-trigger{color:var(--brand);box-shadow:var(--shadow-brand-soft)}.prices-v3__item--group.is-open .prices-v3__group-chevron-icon{transform:rotate(180deg)}.prices-v3__item--group-static .prices-v3__group-trigger{cursor:default}.prices-v3__group-panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .24s ease}.prices-v3__item--group.is-open .prices-v3__group-panel{grid-template-rows:1fr}.prices-v3__group-panel[hidden]{display:none}.prices-v3__group-panel > .prices-v3__group-list{min-height:0;overflow:hidden}.prices-v3__item--group.is-open .prices-v3__group-panel > .prices-v3__group-list{padding-top:var(--space-8);overflow:visible}.prices-v3__note{display:flex;align-items:flex-start;gap:var(--space-24);max-width:640px;color:var(--text-muted)}.prices-v3__note-icon{flex:none;width:20px;height:20px;margin-top:var(--space-2)}.prices-v3__note-text{margin:0;max-width:590px;color:inherit}@media (max-width:1200px){.prices-v3__grid{flex-direction:column;gap:var(--space-32)}.prices-v3__sidebar{position:static;flex:1 1 auto;width:100%}.prices-v3__nav-select-wrap{display:block}.prices-v3__nav{display:none}.prices-v3__toolbar{flex-direction:column;align-items:stretch}.prices-v3__search.field{max-width:none}.prices-v3__download{align-self:flex-start}}@media (max-width:768px){.prices-v3__main.stack--xl,.prices-v3__panel.stack--xl{gap:var(--space-24)}.prices-v3__service{flex-direction:column;align-items:flex-start;gap:var(--space-16)}.prices-v3__service,.prices-v3__service--nested,.prices-v3__group-trigger{padding:var(--space-16) var(--space-20)}.prices-v3__service-aside{align-items:flex-start;width:100%;text-align:left}.prices-v3__service-prices{justify-content:flex-start}.prices-v3__service-book{text-align:left}.prices-v3__group-trigger{flex-direction:row;align-items:center;gap:var(--space-12);min-height:0}.prices-v3__group-chevron{width:auto;height:auto;margin-left:auto;flex:none}.prices-v3__group-chevron-icon{width:20px;height:20px}.prices-v3__note{gap:var(--space-16)}.prices-v3__note-text{font-size:max(var(--text-min),var(--text-body-sm));font-weight:400}}.promo-banners-v1__img{aspect-ratio:50 \/ 31}.promo-banners-v1{--promo-banners-v1-pad-x:calc(var(--space-48) + var(--space-2));--promo-banners-v1-pad-bottom:calc(var(--space-64) + var(--space-8));box-sizing:border-box}.promo-banners-v1__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;gap:var(--space-40);margin:0;padding:0;list-style:none}.promo-banners-v1__item{display:flex;min-width:0}.promo-banners-v1__card{position:relative;display:flex;flex:1 1 auto;flex-direction:column;width:100%;overflow:hidden;border-radius:var(--radius);background:color-mix(in srgb,var(--bg-fill-surface) 92%,var(--bg-fill-page));box-sizing:border-box}.promo-banners-v1__card--no-bg .promo-banners-v1__body{max-width:none}.promo-banners-v1__bg{position:absolute;inset:0;z-index:0;pointer-events:none}.promo-banners-v1__img{display:block;width:100%;height:100%;object-fit:cover;object-position:var(--promo-banners-v1-img-pos,center)}.promo-banners-v1__body{position:relative;z-index:1;display:flex;flex:1 1 auto;flex-direction:column;justify-content:flex-start;max-width:min(609px,80%);min-height:100%;padding:var(--space-48) var(--promo-banners-v1-pad-x) var(--promo-banners-v1-pad-bottom);box-sizing:border-box}.promo-banners-v1__tag{align-self:flex-start;padding:var(--space-10);border:1px solid var(--brand);border-radius:var(--radius-pill);color:var(--brand-dark)}.promo-banners-v1__title{margin:0;color:var(--text-primary)}.promo-banners-v1__text{margin:0;color:var(--text-secondary)}.promo-banners-v1__cta{align-self:flex-start;min-height:54px;margin-top:auto;padding:var(--space-14) var(--space-32)}.promo-banners-v1__cta:hover,.promo-banners-v1__cta:focus-visible{background:var(--brand-dark)}@media (max-width:1200px){.promo-banners-v1__grid{grid-template-columns:1fr;gap:var(--space-24)}.promo-banners-v1__card:not(.promo-banners-v1__card--no-bg){min-height:420px}.promo-banners-v1__body{max-width:min(560px,78%)}}@media (max-width:768px){.promo-banners-v1__body{max-width:none;padding:var(--space-24) var(--space-16) var(--space-32)}.promo-banners-v1__body.stack--md{gap:var(--space-16)}.promo-banners-v1__cta{width:100%}}.hero-v7__bg > img{aspect-ratio:2 \/ 1}.hero-v7__visual-img{aspect-ratio:448 \/ 313}.hero-v7{background-color:var(--bg-fill-page);box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-start}.hero-v7__bg img{object-position:center right}.hero-v7--image>.container{width:100%}.hero-v7--color{position:relative;overflow:hidden}.hero-v7__grid{display:flex;align-items:center;justify-content:space-between;gap:var(--space-40);width:100%}.hero-v7__content{flex:0 0 778px;width:778px;min-width:778px;max-width:778px;gap:var(--space-56)}.hero-v7__main{width:100%}.hero-v7__lead{width:100%}.hero-v7__title{margin:0;color:var(--text-primary)}.hero-v7__title-link{color:inherit;text-decoration:none;transition:color .16s ease}.hero-v7__title-link:hover,.hero-v7__title-link:focus-visible{color:var(--brand-dark)}.hero-v7__subtitle{margin:0;color:var(--text-secondary)}.hero-v7__benefits{display:flex;flex-wrap:wrap;gap:var(--space-40);align-items:flex-start;width:100%;margin:0;padding:0;list-style:none}.hero-v7__benefit{display:flex;gap:var(--space-16);align-items:center;flex:0 0 230px;width:230px;max-width:230px;box-sizing:border-box}.hero-v7__benefit-icon{position:relative;display:flex;align-items:center;justify-content:center;flex:none;width:54px;height:54px;border-radius:var(--radius-full);color:var(--brand)}.hero-v7__benefit-icon::before{content:\"\";position:absolute;inset:0;border-radius:var(--radius-full);background:var(--brand-opacity-15);pointer-events:none}.hero-v7__benefit-icon img{position:relative;z-index:1;display:block;width:31px;height:31px;object-fit:contain}.hero-v7__benefit-text{margin:0;color:var(--text-secondary);flex:0 0 160px;width:160px}.hero-v7__benefit--no-icon{gap:0}.hero-v7__benefit--no-icon .hero-v7__benefit-text{flex:1 1 auto;width:auto}.hero-v7__promo{display:flex;gap:var(--space-8);align-items:center}.hero-v7__promo--no-icon{gap:0}.hero-v7__promo-icon{display:flex;align-items:center;justify-content:center;flex:none;width:64px;height:64px;border-radius:var(--radius-full);background:var(--white-opacity-50);color:var(--brand)}.hero-v7__promo-icon .icon{display:block;width:32px;height:32px}.hero-v7__promo-text{display:flex;flex-direction:column;gap:var(--space-8)}.hero-v7__promo-label{color:var(--text-secondary)}.hero-v7__promo-date{color:var(--brand)}.hero-v7__visual{position:relative;flex:1 1 0;min-width:0;max-width:917px;container-type:inline-size}.hero-v7--color .hero-v7__grid{position:relative}.hero-v7--color .hero-v7__content{position:relative;z-index:1}.hero-v7--color .hero-v7__visual{position:absolute;right:0;top:50%;transform:translateY(-50%);flex:none;width:917px;max-width:50%;z-index:0}.hero-v7__visual-img{display:block;width:100%;height:auto;object-fit:contain}.hero-v7__badge{position:absolute;left:calc(592 \/ 917 * 100%);top:max(0px,calc(151 \/ 647 * 100% - 15px));width:190px;height:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-8);border-radius:var(--radius-full);background:var(--promo-badge);color:var(--white);text-align:center;padding:var(--space-16);box-sizing:border-box;overflow:hidden}.hero-v7--image .hero-v7__visual{display:none}.hero-v7--image .hero-v7__grid{justify-content:flex-start}.hero-v7--image .hero-v7__content{max-width:778px}@media (max-width:1499px) and (min-width:769px){.hero-v7__badge{width:150px;height:150px;padding:var(--space-16);--badge-text-scale:0.95}}@media (max-width:1200px){.hero-v7__grid{flex-direction:column;align-items:flex-start}.hero-v7__content{flex:1 1 auto;width:auto;min-width:0;max-width:none}.hero-v7__visual{flex:none;width:100%;max-width:640px}.hero-v7--color .hero-v7__visual{position:relative;right:auto;top:auto;transform:none;width:100%;max-width:640px;z-index:auto}}@media (max-width:768px){.hero-v7,.hero-v7--color,.hero-v7--image{min-height:auto}.hero-v7__content{gap:var(--space-32)}.hero-v7__benefits{flex-direction:column;align-items:flex-start;gap:var(--space-16)}.hero-v7__benefit{flex:0 0 auto;width:100%;max-width:none}.hero-v7__benefit-icon{width:40px;height:40px}.hero-v7__benefit-icon img{width:22px;height:22px}.hero-v7__benefit-text{flex:1 1 auto;width:auto}.hero-v7__visual{width:100%;max-width:none;overflow:hidden}.hero-v7__visual-img{width:112%;max-width:none;margin-left:-12%;object-position:left center}.hero-v7__badge{width:130px;height:130px;padding:var(--space-12);--badge-text-scale:calc(132 \/ 130);left:min(calc(520 \/ 917 * 100%),calc(100% - 130px - var(--space-16)));top:max(0px,calc(151 \/ 647 * 100% - var(--space-24) - 10px))}}.text-v3{box-sizing:border-box}.text-v3__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,min(659px,38vw));justify-content:space-between;gap:clamp(var(--space-24),6vw,179px);align-items:start}.text-v3__main{display:flex;flex-direction:column;gap:60px;min-width:0}.text-v3__section-title{margin:0;max-width:805px;color:var(--text-primary)}.text-v3__steps,.text-v3__benefits{margin:0;padding:0;list-style:none}.text-v3__steps{display:flex;flex-direction:column;gap:var(--space-32)}.text-v3__step-head,.text-v3__benefit-head{display:flex;align-items:center;gap:var(--space-16);min-width:0}.text-v3__step-num{flex:none;color:var(--brand)}.text-v3__step-title,.text-v3__benefit-title{margin:0;min-width:0;color:var(--text-primary)}.text-v3__step-text,.text-v3__benefit-text{max-width:805px;color:var(--text-secondary)}.text-v3__step-text p,.text-v3__benefit-text p{margin:0}.text-v3__step-text p + p,.text-v3__benefit-text p + p{margin-top:var(--space-16)}.text-v3__benefits{display:flex;flex-direction:column;gap:var(--space-32)}.text-v3__benefit-icon{display:flex;flex:none;color:var(--brand)}.text-v3__benefit-icon-svg{display:block}.text-v3__aside{min-width:0;width:100%;max-width:min(659px,38vw);justify-self:end}.text-v3--widget-left .text-v3__main{order:2}.text-v3--widget-left .text-v3__aside{order:1;justify-self:start}.text-v3__widget{align-items:center;padding-bottom:var(--space-40);padding-inline:var(--space-32);border-radius:var(--radius);background:var(--white);overflow:hidden;box-sizing:border-box}.text-v3__widget-media{width:calc(100% + 2 * var(--space-32));margin-inline:calc(-1 * var(--space-32));overflow:hidden}.text-v3__widget-img{display:block;width:100%;height:auto;aspect-ratio:493 \/ 329;object-fit:cover;object-position:center top}.text-v3__widget-copy{align-items:center;align-self:stretch;text-align:center;gap:var(--space-8);box-sizing:border-box}.text-v3__widget-title{margin:0;max-width:367px;color:var(--text-primary)}.text-v3__widget-text{margin:0;max-width:403px;color:var(--text-primary)}.text-v3__widget-btn{align-self:stretch;width:100%;max-width:100%;box-sizing:border-box;text-transform:uppercase}@media (min-width:1025px){.text-v3__aside{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24))}}@media (max-width:1600px) and (min-width:1201px){.text-v3__grid{grid-template-columns:minmax(0,1fr) minmax(0,min(520px,32vw));gap:clamp(var(--space-24),4.5vw,var(--space-56))}.text-v3__aside{max-width:min(520px,32vw)}.text-v3__widget{padding-inline:var(--space-24);padding-bottom:var(--space-32)}.text-v3__widget-media{width:calc(100% + 2 * var(--space-24));margin-inline:calc(-1 * var(--space-24))}.text-v3__widget-title{max-width:320px}.text-v3__widget-text{max-width:100%}}@media (max-width:1366px) and (min-width:1201px){.text-v3__grid{grid-template-columns:minmax(0,1fr) minmax(0,min(420px,28vw));gap:var(--space-32)}.text-v3__aside{max-width:min(420px,28vw)}}@media (max-width:1200px){.text-v3__grid{grid-template-columns:minmax(0,1fr);gap:var(--space-40)}.text-v3--widget-left .text-v3__main,.text-v3--widget-left .text-v3__aside{order:unset}.text-v3__aside{max-width:none;justify-self:stretch}.text-v3__widget{max-width:493px;margin-inline:auto}}@media (max-width:768px){.text-v3__main{gap:var(--space-40)}.text-v3__steps,.text-v3__benefits{gap:var(--space-24)}.text-v3__widget{padding-inline:var(--space-24)}.text-v3__widget-media{width:calc(100% + 2 * var(--space-24));margin-inline:calc(-1 * var(--space-24))}.text-v3__widget-title,.text-v3__widget-text{max-width:none}}.text-v2{box-sizing:border-box}.text-v2__head{align-items:flex-start}.text-v2__eyebrow{color:var(--text-muted)}.text-v2__title{margin:0;max-width:1080px;color:var(--text-primary)}.text-v2__items{display:grid;grid-template-columns:repeat(3,minmax(0,469px));justify-content:space-between;gap:var(--space-32);width:100%;margin:0;padding:0;list-style:none}.text-v2__item{min-width:0}.text-v2__item-head{display:flex;align-items:center;gap:var(--space-16);min-width:0}.text-v2__item-num{flex:none;color:var(--brand)}.text-v2__item-title{margin:0;min-width:0;color:var(--text-primary)}.text-v2__item-text{margin:0;color:var(--text-secondary)}@media (max-width:1024px){.text-v2__items{grid-template-columns:repeat(2,minmax(0,1fr));justify-content:stretch}}@media (max-width:768px){.text-v2__items{grid-template-columns:minmax(0,1fr);gap:var(--space-24)}}.prices-v4{box-sizing:border-box}.prices-v4__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:clamp(var(--space-24),5vw,var(--space-96))}.prices-v4__head{flex:0 1 704px;min-width:0;max-width:704px}.prices-v4__head.stack--md{gap:var(--space-24)}.prices-v4__eyebrow{color:var(--text-muted)}.prices-v4__title{margin:0;color:var(--text-primary)}.prices-v4__lead{margin:0;max-width:687px;color:var(--text-secondary)}.prices-v4__table-wrap{flex:0 1 780px;min-width:0;max-width:780px;width:100%}.prices-v4__table{display:flex;flex-direction:column;gap:var(--space-16);width:100%}.prices-v4__body{display:flex;flex-direction:column}.prices-v4__row{display:grid;grid-template-columns:minmax(0,1fr) minmax(120px,200px) minmax(120px,200px);align-items:center;min-height:80px;border-bottom:1px solid var(--ui-border-soft)}.prices-v4__row--head{min-height:80px}.prices-v4__row--total{min-height:80px;border-bottom:none;background:var(--brand-opacity-15)}.prices-v4__cell{min-width:0;padding:var(--space-10);box-sizing:border-box}.prices-v4__cell--service{padding-left:var(--space-12)}.prices-v4__cell--price{text-align:center}.prices-v4__col-label{margin:0;color:var(--text-secondary)}.prices-v4__service{display:flex;align-items:center;gap:var(--space-16);min-width:0}.prices-v4__item-icon{display:flex;align-items:center;justify-content:center;flex:none;width:58px;height:58px;border-radius:999px;background:var(--brand-opacity-20)}.prices-v4__item-icon-img{display:block;width:22px;height:31px;object-fit:contain}.prices-v4__item-title,.prices-v4__total-label{color:var(--text-primary)}.prices-v4__price{margin:0;color:var(--text-secondary);white-space:nowrap}.prices-v4__price--promo{color:var(--brand-dark)}@media (max-width:1200px){.prices-v4__grid{flex-direction:column;gap:var(--space-40)}.prices-v4__head,.prices-v4__table-wrap{flex:1 1 auto;max-width:none;width:100%}}@media (max-width:768px){.prices-v4__head.stack--md{gap:var(--space-16)}.prices-v4__table-wrap{overflow:visible}.prices-v4__table{min-width:0;gap:var(--space-8)}.prices-v4__row--head{display:none}.prices-v4__body{gap:var(--space-8)}.prices-v4__row{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:\"service service\" \"price-regular price-promo\";gap:var(--space-12) var(--space-16);align-items:start;min-height:0;padding:var(--space-16) var(--space-12)}.prices-v4__row--total{padding:var(--space-16) var(--space-12)}.prices-v4__cell{padding:0}.prices-v4__cell--service{grid-area:service;padding-left:0}.prices-v4__cell--price{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);text-align:center}.prices-v4__cell--price::before{content:attr(data-label);color:var(--text-muted)}.prices-v4__cell--price:nth-child(2){grid-area:price-regular}.prices-v4__cell--price:nth-child(3){grid-area:price-promo}.prices-v4__item-icon{width:48px;height:48px}.prices-v4__item-icon-img{width:18px;height:26px}.prices-v4__service{gap:var(--space-12)}.prices-v4__price{white-space:normal}}.cases-v3__img{aspect-ratio:26 \/ 17}.cases-v3{--cases-v3-slide-gap:40px;--cases-v3-desktop-slides:3;box-sizing:border-box}.cases-v3--slides-2{--cases-v3-desktop-slides:2;--cases-v3-media-max-height:364px}.cases-v3--slides-3{--cases-v3-desktop-slides:3}.cases-v3--slides-4{--cases-v3-desktop-slides:4;--cases-v3-slide-min:343px}.cases-v3__inner.stack--xl{gap:var(--space-40)}.cases-v3__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-32)}.cases-v3__head-main{flex:1 1 auto;min-width:0;max-width:920px}.cases-v3__eyebrow{color:var(--text-muted)}.cases-v3__title{margin:0;color:var(--text-primary)}.cases-v3__head-actions{flex:none}.cases-v3__slider-nav{width:132px;justify-content:space-between}.cases-v3__slider-nav .slider-nav__btn{background:var(--bg-fill-filter-widget);border:1px solid var(--ui-border-default);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile))}.cases-v3__slider-nav .slider-nav__btn:hover:not(:disabled):not(.swiper-button-disabled){background:var(--white-opacity-75)}.cases-v3__filters{display:flex;flex-wrap:wrap;gap:var(--space-8);align-items:flex-start}.cases-v3__chip{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-10);padding:var(--space-12) var(--space-18);min-height:48px;border-radius:var(--radius-xl);border:1px solid var(--brand-opacity-20);background:var(--bg-fill-surface);color:var(--text-secondary);cursor:pointer;user-select:none;transition:transform .16s ease,background-color .16s ease,border-color .16s ease,color .16s ease}.cases-v3__chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.cases-v3__chip.is-active{background:var(--brand-light);border-color:transparent;color:var(--white)}.cases-v3__chip.is-active .cases-v3__chip-icon{filter:brightness(0) invert(1)}.cases-v3__chip:not(.is-active) .cases-v3__chip-icon{filter:none}.cases-v3__chip.is-pressed{transform:scale(.98)}.cases-v3__chip-icon{display:block;flex:none;width:24px;height:24px;transition:filter .16s ease}.cases-v3__chip--no-icon{gap:0}.cases-v3__chip-label{color:inherit}.cases-v3__carousel,.cases-v3__slider{width:100%}.cases-v3__slider{overflow:hidden}.cases-v3__slide{width:320px;height:auto;box-sizing:border-box}.cases-v3__card{display:flex;flex-direction:column;gap:var(--space-24);width:100%}.cases-v3__media{--cases-v3-reveal:50%;position:relative;width:100%;aspect-ratio:26 \/ 17;overflow:hidden;border-radius:var(--radius);background:var(--bg-fill-panel);user-select:none}.cases-v3__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.cases-v3__img--after{z-index:0}.cases-v3__img--before{z-index:1;clip-path:inset(0 calc(100% - var(--cases-v3-reveal)) 0 0);transition:filter .2s ease}.cases-v3__media.is-blurred .cases-v3__img--before{filter:blur(5px)}.cases-v3__divider{position:absolute;top:0;bottom:0;left:var(--cases-v3-reveal);width:1px;background:var(--bg-fill-surface);opacity:1;transform:translateX(-.5px);z-index:2}.cases-v3__badge{position:absolute;top:var(--space-18);padding:var(--space-6) var(--space-10);border-radius:var(--radius-sm);background:var(--dark-opacity-20);color:var(--white);z-index:3}.cases-v3__badge--before{left:var(--space-18)}.cases-v3__badge--after{right:var(--space-18)}.cases-v3__handle{position:absolute;left:var(--cases-v3-reveal);top:50%;width:86px;height:86px;transform:translate(-50%,-50%);padding:0;border:0;border-radius:var(--radius-full);background:transparent;cursor:grab;touch-action:none;z-index:4}.cases-v3__handle:active{cursor:grabbing}.cases-v3__handle:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.cases-v3__handle img{display:block;width:100%;height:100%;pointer-events:none}@media (max-width:1600px){.cases-v3__handle{width:60px;height:60px}.cases-v3__badge{top:var(--space-12);padding:var(--space-4) var(--space-8);font-size:var(--text-body-md)}.cases-v3__badge--before{left:var(--space-12)}.cases-v3__badge--after{right:var(--space-12)}}.cases-v3__body{min-width:0}.cases-v3__card-title{margin:0;color:var(--text-primary)}.cases-v3__card-text{margin:0;color:var(--text-primary)}@media (min-width:1201px){.cases-v3__slide{width:var( --cases-v3-slide-width,calc((100% - (var(--cases-v3-desktop-slides) - 1) * var(--cases-v3-slide-gap)) \/ var(--cases-v3-desktop-slides)) )}.cases-v3--slides-2 .cases-v3__media{max-height:var(--cases-v3-media-max-height)}}@media (max-width:1200px){.cases-v3{--cases-v3-slide-gap:40px}.cases-v3__filters{flex-wrap:nowrap;overflow-x:auto;padding-bottom:var(--space-10);-webkit-overflow-scrolling:touch}.cases-v3__chip{flex:none}.cases-v3__slide{width:440px}}@media (max-width:768px){.cases-v3{--cases-v3-slide-gap:24px}.cases-v3__head{align-items:flex-start}.cases-v3__slider-nav{display:none}.cases-v3__filters,.cases-v3__carousel{width:calc(100% + var(--page-gutter));margin-right:calc(var(--page-gutter) * -1)}.cases-v3__filters{padding-right:var(--page-gutter)}.cases-v3__slide{width:320px}.cases-v3__badge{top:var(--space-12)}.cases-v3__badge--before{left:var(--space-12)}.cases-v3__badge--after{right:var(--space-12)}}.text-v5{box-sizing:border-box}.text-v5__text{margin:0;max-width:940px;color:var(--text-secondary)}.patients-v1{box-sizing:border-box}.patients-v1__inner{align-items:center}.patients-v1__cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));column-gap:var(--space-40);row-gap:var(--space-24);width:100%;margin:0;padding:0;list-style:none;align-items:stretch}.patients-v1__cards > li{display:flex;min-height:0}.patients-v1__cards > li.is-hidden{display:none}.patients-v1__card{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-16);width:100%;min-height:160px;height:100%;padding:9px var(--space-10);border:1px solid transparent;border-radius:var(--radius);background:var(--white-opacity-75);overflow:hidden;box-sizing:border-box;text-decoration:none;color:inherit;transition:background-color .16s ease,border-color .16s ease}.patients-v1__card:hover,.patients-v1__card:focus-visible{background:var(--bg-fill-surface);border-color:var(--brand-dark);outline:none}.patients-v1__card:hover .patients-v1__card-title,.patients-v1__card:focus-visible .patients-v1__card-title{color:var(--brand-dark)}.patients-v1__card-head{display:flex;align-items:center;gap:17px;min-width:0}.patients-v1__card-head--no-icon{gap:0}.patients-v1__icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;overflow:hidden}.patients-v1__icon-img{display:block;width:100%;height:100%;max-width:100%;object-fit:contain;object-position:center}.patients-v1__card-title{margin:0;min-width:0;color:var(--text-primary);transition:color .16s ease}.patients-v1__card-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v1__more{width:218px;flex:none}.patients-v1__more[hidden]{display:none}@media (max-width:1200px){.patients-v1__cards{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--space-24)}}@media (max-width:768px){.patients-v1__cards{grid-template-columns:1fr;row-gap:var(--space-16)}.patients-v1__card{min-height:0}.patients-v1__more{width:100%;max-width:218px}}.patients-v2{box-sizing:border-box;--patients-v2-track-gap:var(--space-24);--patients-v2-cols:4;--patients-v2-slide-min:280px;--patients-v2-slide-w:max(var(--patients-v2-slide-min),calc((100% - (var(--patients-v2-cols) - 1) * var(--patients-v2-track-gap)) \/ var(--patients-v2-cols)))}.patients-v2__panel{position:relative;min-width:0;max-width:100%;border-radius:var(--radius);padding:var(--space-20) var(--space-40) 60px;overflow:hidden;box-sizing:border-box}.patients-v2__panel::before{content:\"\";position:absolute;inset:0;border-radius:inherit;background:var(--bg-fill-filter-widget);mix-blend-mode:multiply;pointer-events:none}.patients-v2__panel > *{position:relative;z-index:1}.patients-v2__panel.stack--md{gap:var(--space-24)}.patients-v2__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24)}.patients-v2__title{margin:0;max-width:940px;color:var(--text-primary)}.patients-v2__slider-nav{flex:none;width:132px;justify-content:space-between}.patients-v2.is-locked .patients-v2__slider-nav{display:none !important}.patients-v2__slider-foot{min-width:0;max-width:100%}.patients-v2__carousel{width:100%;min-width:0;max-width:100%;overflow:hidden}.patients-v2__slider{width:100%;min-width:0;max-width:100%;overflow:hidden}.patients-v2__slider.swiper{overflow:hidden}.patients-v2__slider:not(.swiper-initialized) .swiper-slide:not(:last-child){margin-right:var(--patients-v2-track-gap)}.patients-v2__slider .swiper-slide{width:var(--patients-v2-slide-w);min-width:var(--patients-v2-slide-min);height:auto;flex-shrink:0;box-sizing:border-box}.patients-v2__card{display:flex;flex-direction:column;min-height:160px;padding:9px var(--space-10);border:1px solid transparent;border-radius:var(--radius);background:var(--white-opacity-75);box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease}.patients-v2__card:hover,.patients-v2__card:focus-within{background:var(--bg-fill-surface);border-color:var(--brand-dark)}.patients-v2__card:hover .patients-v2__card-title,.patients-v2__card:focus-within .patients-v2__card-title{color:var(--brand-dark);text-decoration:underline;text-underline-offset:0.12em}.patients-v2__card-row{display:flex;align-items:flex-start;gap:17px;min-width:0;height:100%}.patients-v2__card-row--no-icon{gap:0}.patients-v2__icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;color:var(--brand)}.patients-v2__icon-svg{display:block;width:23px;height:25px;flex:none}.patients-v2__card-body{display:flex;flex:1 1 auto;flex-direction:column;justify-content:space-between;gap:var(--space-16);min-width:0;min-height:133px}.patients-v2__card-copy.stack--sm{gap:var(--space-16)}.patients-v2__card-title{margin:0;color:var(--text-primary);transition:color .16s ease}.patients-v2__card-meta{margin:0;color:var(--text-muted);line-height:1.2;letter-spacing:-0.01em}.patients-v2__download{align-self:flex-start;color:var(--brand);font-weight:500;line-height:1.2;letter-spacing:-0.01em}.patients-v2__download:hover,.patients-v2__download:focus-visible{color:var(--brand-dark)}@media (max-width:1200px){.patients-v2__panel{padding-inline:var(--space-24);padding-bottom:var(--space-48)}.patients-v2{--patients-v2-cols:3}}@media (max-width:768px){.patients-v2__panel{padding:var(--space-16) var(--space-16) var(--space-40)}.patients-v2__panel.stack--md{gap:var(--space-16)}.patients-v2__head{align-items:flex-start;flex-direction:column;gap:var(--space-16)}.patients-v2__slider-nav{display:none}.patients-v2{--patients-v2-slide-min:min(280px,100%);--patients-v2-slide-w:min(320px,calc(100% - var(--space-16)))}.patients-v2__slider .swiper-wrapper{padding-right:var(--page-gutter);box-sizing:border-box}.patients-v2__card-body{min-height:0}}.cta-v3{box-sizing:border-box}.cta-v3__card{position:relative;overflow:hidden;min-height:167px;border-radius:var(--radius);background:var(--brand);box-sizing:border-box}.cta-v3__card:has(.cta-v3__bg){background:transparent}.cta-v3__bg{position:absolute;inset:0;z-index:0;pointer-events:none}.cta-v3__bg img{display:block;width:100%;height:100%;object-fit:cover}.cta-v3__inner{position:relative;z-index:1;display:flex;flex-wrap:nowrap;align-items:center;gap:var(--space-56);min-height:167px;padding:var(--space-32) var(--space-40);box-sizing:border-box}.cta-v3__icon{display:flex;align-items:center;justify-content:center;flex:none;width:72px;height:72px;border-radius:var(--radius-full);background:var(--white)}.cta-v3__icon-img{display:block;width:35px;height:35px;object-fit:contain}.cta-v3__copy{flex:1 1 320px;min-width:0;max-width:703px}.cta-v3__title{margin:0;color:var(--white)}.cta-v3__lead{margin:0;color:var(--white)}.cta-v3__actions{flex:none;width:min(355px,100%);margin-left:auto;align-items:center}.cta-v3__btn{width:100%;min-height:54px;padding:var(--space-14) var(--space-32)}.cta-v3__notes{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--space-16);color:var(--white)}.cta-v3__dot{width:6px;height:6px;border-radius:var(--radius-full);background:var(--white)}@media (max-width:991px){.cta-v3__card{min-height:0}.cta-v3__inner{flex-direction:column;align-items:stretch;gap:var(--space-16);min-height:0;padding:var(--space-24) var(--space-16)}.cta-v3__icon{align-self:center}.cta-v3__copy{flex:none;width:100%;max-width:none;text-align:center}.cta-v3__actions{width:100%;margin-left:0}}.patients-v3{box-sizing:border-box}.patients-v3__body{display:flex;flex-direction:column;gap:0}.patients-v3__body > .patients-v3__list{display:flex;flex-direction:column;gap:var(--space-8);overflow-anchor:none}.patients-v3__item{display:flex;flex-direction:column;overflow-anchor:none}.patients-v3__tab{display:flex;align-items:center;gap:var(--space-10);width:100%;margin:0;padding:var(--space-12) var(--space-4) var(--space-12) var(--space-8);border:1px solid var(--ui-divider);border-radius:var(--radius);background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.patients-v3__tab:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.patients-v3__tab.is-active{background:var(--brand-opacity-15);border-color:var(--brand-soft);color:var(--brand)}.patients-v3__tab:hover:not(.is-active),.patients-v3__tab:focus-visible:not(.is-active){background:var(--bg-fill-surface);border-color:var(--brand-dark);color:var(--brand-dark)}.patients-v3__tab:hover:not(.is-active) .patients-v3__tab-label,.patients-v3__tab:focus-visible:not(.is-active) .patients-v3__tab-label{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}.patients-v3__tab-icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;overflow:hidden}.patients-v3__tab-icon-img{display:block;width:100%;height:100%;object-fit:contain;object-position:center}.patients-v3__tab-label{flex:1 1 auto;min-width:0;margin:0;font-weight:600;line-height:1.4;transition:color .16s ease,text-decoration-color .16s ease}.patients-v3__tab-chevron{display:flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:currentColor;opacity:.7;transition:transform .3s ease}.patients-v3__item.is-open .patients-v3__tab-chevron{transform:rotate(180deg)}.patients-v3__panel[hidden]{display:none !important}.patients-v3__panel-inner{display:flex;flex-direction:column;gap:var(--space-40);min-width:0}.patients-v3__section{display:flex;flex-direction:column;gap:var(--space-24);min-width:0}.patients-v3__section--intro{gap:var(--space-32)}.patients-v3__section-head{display:flex;flex-direction:column;gap:var(--space-8);min-width:0}.patients-v3__section-title{margin:0;color:var(--text-primary)}.patients-v3__section-accent{display:block;width:57px;height:4px;background:var(--brand-light);flex:none}.patients-v3__section-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v3__section .patients-v3__list{display:flex;flex-direction:column;gap:var(--space-16);margin:0;padding:0;list-style:none}.patients-v3__list-item{display:flex;align-items:center;gap:var(--space-12);min-width:0}.patients-v3__list-dot{flex:none;width:10px;height:10px;border-radius:999px;background:var(--brand)}.patients-v3__list-text{margin:0;min-width:0;color:var(--text-secondary);line-height:1.4}.patients-v3__steps{display:flex;flex-direction:column;gap:var(--space-24);margin:0;padding:0;list-style:none}.patients-v3__step{display:flex;align-items:flex-start;gap:var(--space-16);min-width:0}.patients-v3__step-badge-col{flex:0 0 100px;min-width:0}.patients-v3__step-badge{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-6) var(--space-8);border-radius:999px;background:var(--brand-opacity-20);color:var(--brand-dark);font-weight:600;line-height:1.4;white-space:nowrap}.patients-v3__step-body{display:flex;flex:1 1 auto;flex-direction:column;gap:11px;min-width:0}.patients-v3__step-title{margin:0;color:var(--text-primary);line-height:1.3}.patients-v3__step-text{margin:0;color:var(--text-secondary);line-height:1.4}@media (min-width:1201px){.patients-v3__body > .patients-v3__list{display:flex;flex-direction:column;flex-wrap:nowrap;align-items:flex-start;gap:var(--space-8);position:relative;width:100%;box-sizing:border-box}.patients-v3__item{display:contents}.patients-v3__tab{flex:none;width:425px;max-width:100%}.patients-v3__panel{position:absolute;top:0;left:calc(425px + var(--space-40));right:0;width:auto;min-width:0;align-self:start}.patients-v3__tab-chevron{display:none}}@media (max-width:1200px){.patients-v3__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1)}.patients-v3__item.is-open .patients-v3__panel{grid-template-rows:1fr;transition:grid-template-rows .42s cubic-bezier(.33,1,.68,1)}.patients-v3__panel[hidden]{display:none !important}.patients-v3__panel-inner{min-height:0;overflow:hidden;padding-top:var(--space-16)}.patients-v3__item.is-open .patients-v3__tab.is-active{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media (max-width:768px){.patients-v3__panel-inner{gap:var(--space-32)}.patients-v3__section{gap:var(--space-20)}.patients-v3__section--intro{gap:var(--space-24)}.patients-v3__step{flex-direction:column;gap:var(--space-12)}.patients-v3__step-badge-col{flex:none}}@media (max-width:1200px) and (prefers-reduced-motion:reduce){.patients-v3__tab,.patients-v3__tab-chevron,.patients-v3__panel{transition:none}}.patients-v4{box-sizing:border-box}.patients-v4__body{display:flex;flex-direction:column;gap:0}.patients-v4__rail{display:flex;flex-direction:column;gap:0;min-width:0}.patients-v4__main{display:none;min-width:0}.patients-v4__list{display:flex;flex-direction:column;gap:var(--space-8);order:1;overflow-anchor:none}.patients-v4__item{display:flex;flex-direction:column;overflow-anchor:none}.patients-v4__nav-item{display:flex;align-items:center;gap:var(--space-10);width:100%;margin:0;padding:var(--space-12) var(--space-4) var(--space-12) var(--space-8);border:1px solid var(--ui-divider);border-radius:var(--radius);background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.patients-v4__nav-item:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.patients-v4__nav-item.is-active{background:var(--brand-opacity-15);border-color:var(--brand-soft);color:var(--brand)}.patients-v4__nav-item:hover:not(.is-active),.patients-v4__nav-item:focus-visible:not(.is-active){background:var(--bg-fill-surface);border-color:var(--brand-dark);color:var(--brand-dark)}.patients-v4__nav-item:hover:not(.is-active) .patients-v4__nav-label,.patients-v4__nav-item:focus-visible:not(.is-active) .patients-v4__nav-label{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}.patients-v4__nav-icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;overflow:hidden}.patients-v4__nav-icon-img{display:block;width:100%;height:100%;object-fit:contain;object-position:center}.patients-v4__nav-label{flex:1 1 auto;min-width:0;margin:0;font-weight:600;line-height:1.4;transition:color .16s ease,text-decoration-color .16s ease}.patients-v4__nav-chevron{display:flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:currentColor;opacity:.7;transition:transform .3s ease}.patients-v4__item.is-open .patients-v4__nav-chevron{transform:rotate(180deg)}.patients-v4__panel[hidden]{display:none !important}.patients-v4__panel-inner{display:flex;flex-direction:column;gap:var(--space-32);min-width:0}.patients-v4__section{display:flex;flex-direction:column;gap:var(--space-32);min-width:0;scroll-margin-top:calc(var(--site-nav-h,0px) + var(--space-24))}.patients-v4__section--who,.patients-v4__section--who .patients-v4__panel-inner{gap:var(--space-24)}.patients-v4__section-head{display:flex;flex-direction:column;gap:var(--space-8);min-width:0}.patients-v4__section-title{margin:0;color:var(--text-primary)}.patients-v4__section-accent{display:block;width:57px;height:4px;background:var(--brand-light);flex:none}.patients-v4__section-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v4__info-grid{display:grid;gap:var(--space-24);margin:0;padding:0;list-style:none}.patients-v4__info-grid--3{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-24)}.patients-v4__info-grid--2{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-40)}.patients-v4__info-card,.patients-v4__refund-card{display:flex;flex-direction:column;gap:var(--space-16);min-width:0;padding:var(--space-16);border-radius:var(--radius);background:var(--white-opacity-75);box-sizing:border-box}.patients-v4__info-card{min-height:189px}.patients-v4__refund-card{min-height:248px;padding:var(--space-24) var(--space-16)}.patients-v4__info-card-head,.patients-v4__refund-card-head{display:flex;align-items:center;gap:var(--space-8);min-width:0}.patients-v4__refund-card-head{gap:var(--space-16)}.patients-v4__info-card-head--no-icon,.patients-v4__refund-card-head--no-icon{gap:0}.patients-v4__info-icon{flex:none;display:flex;align-items:center;justify-content:center;width:44px;height:44px;overflow:hidden}.patients-v4__info-icon-img{display:block;width:100%;height:100%;object-fit:contain;object-position:center}.patients-v4__info-title{margin:0;min-width:0;color:var(--text-primary);line-height:1.3}.patients-v4__info-text,.patients-v4__refund-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v4__refund-text{color:var(--text-primary)}.patients-v4__docs{display:flex;flex-direction:column;gap:var(--space-16);margin:0;padding:0;list-style:none}.patients-v4__doc{padding:9px var(--space-10);border:1px solid transparent;border-radius:var(--radius);background:var(--white-opacity-75);box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease}.patients-v4__doc:hover,.patients-v4__doc:focus-within{background:var(--bg-fill-surface);border-color:var(--brand-dark)}.patients-v4__doc-row{display:flex;align-items:flex-start;gap:17px;min-width:0}.patients-v4__doc-row--no-icon{gap:0}.patients-v4__doc-icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;color:var(--brand)}.patients-v4__doc-icon-svg{display:block;width:23px;height:25px;flex:none}.patients-v4__doc-body{display:flex;flex:1 1 auto;align-items:center;justify-content:space-between;gap:var(--space-24);min-width:0}.patients-v4__doc-copy{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-16);min-width:0}.patients-v4__doc-title{margin:0;color:var(--text-primary);line-height:1.3}.patients-v4__doc-meta{margin:0;color:var(--text-muted);line-height:1.2;letter-spacing:-0.01em}.patients-v4__doc-actions{display:flex;flex:none;flex-direction:column;gap:var(--space-24);padding-block:var(--space-4)}.patients-v4__doc-action{color:var(--brand);font-weight:500;line-height:1.2;letter-spacing:-0.01em;white-space:nowrap}.patients-v4__doc-action:hover,.patients-v4__doc-action:focus-visible{color:var(--brand-dark)}.patients-v4__steps{display:flex;flex-direction:column;gap:var(--space-24);margin:0;padding:0;list-style:none}.patients-v4__step{display:flex;align-items:flex-start;gap:var(--space-16);min-width:0}.patients-v4__step-badge-col{flex:0 0 100px;min-width:0}.patients-v4__step-badge{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-6) var(--space-8);border-radius:999px;background:var(--brand-opacity-20);color:var(--brand-dark);font-weight:600;line-height:1.4;white-space:nowrap}.patients-v4__step-body{display:flex;flex:1 1 auto;flex-direction:column;gap:11px;min-width:0}.patients-v4__step-title{margin:0;color:var(--text-primary);line-height:1.3}.patients-v4__step-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v4__cta{display:flex;flex-direction:column;gap:var(--space-32);order:2;margin-top:var(--space-24);padding:var(--space-24) var(--space-16);border-radius:var(--radius);background:var(--brand-opacity-15);box-sizing:border-box}.patients-v4__cta-row{display:flex;align-items:flex-start;gap:var(--space-16);min-width:0}.patients-v4__cta-row--no-icon{gap:0}.patients-v4__cta-icon{flex:none;display:flex;align-items:center;justify-content:center;width:69px;height:69px;border-radius:999px;background:var(--white)}.patients-v4__cta-icon-img{display:block;width:34px;height:34px;object-fit:contain}.patients-v4__cta-copy{display:flex;flex-direction:column;gap:9px;min-width:0}.patients-v4__cta-title{margin:0;color:var(--text-primary);font-size:24px;font-weight:500;line-height:1.4}.patients-v4__cta-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v4__cta-btn{width:100%;max-width:392px;text-transform:uppercase;letter-spacing:-0.01em}@media (min-width:1201px){.patients-v4__body{--patients-v4-sticky-top:calc(var(--site-nav-h,0px) + var(--space-24));--patients-v4-aside-gap:60px;display:grid;grid-template-columns:minmax(0,425px) minmax(0,1fr);column-gap:var(--space-40);align-items:start}.patients-v4__rail{grid-column:1;position:sticky;top:var(--patients-v4-sticky-top);align-self:start;display:flex;flex-direction:column;gap:var(--space-8);z-index:2;width:100%}.patients-v4__list{display:flex;flex-direction:column;gap:var(--space-8);order:initial}.patients-v4__item{display:block}.patients-v4__nav-item{position:static;width:100%;margin-top:0}.patients-v4__main{grid-column:2;display:flex;flex-direction:column;gap:60px;min-width:0}.patients-v4__panel{min-width:0}.patients-v4__panel[hidden]{display:flex !important}.patients-v4__panel-inner{display:flex;flex-direction:column}.patients-v4__cta{position:static;order:initial;margin-top:calc(var(--patients-v4-aside-gap) - var(--space-8));width:100%}.patients-v4__nav-chevron{display:none}}@media (max-width:1200px){.patients-v4__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1)}.patients-v4__item.is-open .patients-v4__panel{grid-template-rows:1fr;transition:grid-template-rows .42s cubic-bezier(.33,1,.68,1)}.patients-v4__panel[hidden]{display:none !important}.patients-v4__panel-inner{min-height:0;overflow:hidden;padding-top:var(--space-16);padding-bottom:var(--space-24)}.patients-v4__item.is-open .patients-v4__nav-item{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media (max-width:992px){.patients-v4__info-grid--3,.patients-v4__info-grid--2{grid-template-columns:1fr}.patients-v4__info-card,.patients-v4__refund-card{min-height:0}.patients-v4__doc-body{flex-direction:column;align-items:flex-start}.patients-v4__doc-actions{flex-direction:row;flex-wrap:wrap;gap:var(--space-16)}}@media (max-width:768px){.patients-v4__panel-inner,.patients-v4__section{gap:var(--space-24)}.patients-v4__panel-inner{padding-top:var(--space-20);padding-bottom:var(--space-28)}.patients-v4__step{flex-direction:column;gap:var(--space-12)}.patients-v4__step-badge-col{flex:none}.patients-v4__steps{gap:var(--space-28);padding-bottom:var(--space-20)}.patients-v4__cta-btn{max-width:none}}@media (max-width:1200px) and (prefers-reduced-motion:reduce){.patients-v4__nav-item,.patients-v4__nav-chevron,.patients-v4__panel{transition:none}}.patients-v5{box-sizing:border-box}.patients-v5__body{display:flex;flex-direction:column;gap:0}.patients-v5__sidebar{display:flex;flex-direction:column;min-width:0;order:1}.patients-v5__main{min-width:0;order:2}.patients-v5__list{display:flex;flex-direction:column;gap:var(--space-8);order:1;overflow-anchor:none}.patients-v5__item{display:flex;flex-direction:column;overflow-anchor:none}.patients-v5__nav-item{display:flex;align-items:center;gap:var(--space-10);width:100%;margin:0;padding:var(--space-12) var(--space-4) var(--space-12) var(--space-8);border:1px solid var(--ui-divider);border-radius:var(--radius);background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.patients-v5__nav-item:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.patients-v5__nav-item.is-active{background:var(--brand-opacity-15);border-color:var(--brand-soft);color:var(--brand)}.patients-v5__nav-item:hover:not(.is-active),.patients-v5__nav-item:focus-visible:not(.is-active){background:var(--bg-fill-surface);border-color:var(--brand-dark);color:var(--brand-dark)}.patients-v5__nav-count{flex:none;width:42px;margin:0;color:var(--brand);text-align:center;line-height:1.3}.patients-v5__nav-label{flex:1 1 auto;min-width:0;margin:0;font-weight:600;line-height:1.4}.patients-v5__nav-chevron{display:flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:currentColor;opacity:.7;transition:transform .3s ease}.patients-v5__item.is-open .patients-v5__nav-chevron{transform:rotate(180deg)}.patients-v5__panel[hidden]{display:none !important}.patients-v5__docs-wrap{display:flex;flex-direction:column;align-items:center;gap:var(--space-40);width:100%}.patients-v5__docs{display:flex;flex-direction:column;gap:var(--space-16);width:100%;margin:0;padding:0;list-style:none}.patients-v5__doc-item.is-hidden{display:none}.patients-v5__doc{padding:9px var(--space-10);border:1px solid transparent;border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease}.patients-v5__doc:hover,.patients-v5__doc:focus-within{background:var(--bg-fill-surface);border-color:var(--brand-dark)}.patients-v5__doc-row{display:flex;align-items:flex-start;gap:17px;min-width:0}.patients-v5__doc-row--no-icon{gap:0}.patients-v5__doc-icon{flex:none;display:flex;align-items:center;justify-content:center;width:42px;height:42px;color:var(--brand)}.patients-v5__doc-icon-svg{display:block;width:23px;height:25px;flex:none}.patients-v5__doc-body{display:flex;flex:1 1 auto;align-items:center;justify-content:space-between;gap:var(--space-24);min-width:0}.patients-v5__doc-copy{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-16);min-width:0}.patients-v5__doc-title{margin:0;color:var(--text-primary);line-height:1.3}.patients-v5__doc-meta{margin:0;color:var(--text-muted);line-height:1.2;letter-spacing:-0.01em}.patients-v5__doc-actions{display:flex;flex:none;flex-direction:column;gap:var(--space-24);padding-block:var(--space-4)}.patients-v5__doc-action{color:var(--brand);font-weight:500;line-height:1.2;letter-spacing:-0.01em;white-space:nowrap}.patients-v5__doc-action:hover,.patients-v5__doc-action:focus-visible{color:var(--brand-dark)}.patients-v5__more{width:218px;flex:none;min-height:45px;padding:12px 24px}.patients-v5__cta{display:flex;flex-direction:column;gap:var(--space-32);order:2;margin-top:var(--space-24);padding:var(--space-24) var(--space-16);border-radius:var(--radius);background:var(--brand-opacity-15);box-sizing:border-box}.patients-v5__cta-row{display:flex;align-items:flex-start;gap:var(--space-16);min-width:0}.patients-v5__cta-row--no-icon{gap:0}.patients-v5__cta-icon{flex:none;display:flex;align-items:center;justify-content:center;width:69px;height:69px;border-radius:999px;background:var(--white)}.patients-v5__cta-icon-img{display:block;width:34px;height:34px;object-fit:contain}.patients-v5__cta-copy{display:flex;flex-direction:column;gap:9px;min-width:0}.patients-v5__cta-title{margin:0;color:var(--text-primary);font-size:24px;font-weight:500;line-height:1.4}.patients-v5__cta-text{margin:0;color:var(--text-secondary);line-height:1.4}.patients-v5__cta-btn{width:100%;max-width:392px;min-height:54px;padding:14px 32px;text-transform:uppercase;letter-spacing:-0.01em}@media (min-width:1201px){.patients-v5__body{--patients-v5-sticky-top:calc(var(--site-nav-h,0px) + var(--space-24));display:grid;grid-template-columns:minmax(0,425px) minmax(0,1fr);column-gap:var(--space-40);align-items:start}.patients-v5__sidebar{grid-column:1;position:sticky;top:var(--patients-v5-sticky-top);z-index:2;align-self:start;width:100%}.patients-v5__list{display:flex;flex-direction:column;gap:var(--space-8);width:100%}.patients-v5__nav-item{flex:none;width:100%}.patients-v5__main{grid-column:2;min-width:0}.patients-v5__panel{position:static;width:100%;min-width:0;align-self:start}.patients-v5__nav-chevron{display:none}.patients-v5__cta{order:2;margin-top:calc(var(--space-32) - var(--space-8));width:100%;align-self:start}.patients-v5__panel-inner{padding:0}}@media (max-width:1200px){.patients-v5__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s cubic-bezier(.4,0,.2,1)}.patients-v5__item.is-open .patients-v5__panel{grid-template-rows:1fr;transition:grid-template-rows .42s cubic-bezier(.33,1,.68,1)}.patients-v5__panel[hidden]{display:none !important}.patients-v5__panel-inner{min-height:0;overflow:hidden;padding-top:var(--space-16);padding-bottom:var(--space-24)}.patients-v5__item.is-open .patients-v5__nav-item{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media (max-width:992px){.patients-v5__doc-body{flex-direction:column;align-items:flex-start}.patients-v5__doc-actions{flex-direction:row;flex-wrap:wrap;gap:var(--space-16)}}@media (max-width:768px){.patients-v5__panel-inner{padding-top:var(--space-20);padding-bottom:var(--space-28)}.patients-v5__docs-wrap{gap:var(--space-24)}.patients-v5__docs{gap:var(--space-12)}.patients-v5__more,.patients-v5__cta-btn{max-width:none;width:100%}}@media (max-width:1200px) and (prefers-reduced-motion:reduce){.patients-v5__nav-item,.patients-v5__nav-chevron,.patients-v5__panel{transition:none}}.hero-v8__bg > img{aspect-ratio:512 \/ 187}.hero-v8{background-color:var(--bg-fill-page);box-sizing:border-box;min-height:calc(100vw * 700 \/ 1920)}.hero-v8__bg img{width:100%;height:100%;object-fit:cover;object-position:center}.hero-v8__inner{align-items:flex-start;width:100%;max-width:min(860px,50%);gap:var(--space-56);overflow:visible}.hero-v8__head{width:100%;overflow:visible}.hero-v8__title{margin:0;max-width:100%;color:var(--text-primary)}@media (max-width:1600px){.hero-v8__title.megatext{font-size:clamp(1.375em,var(--fluid-mega-md),var(--text-mega-md));line-height:1.2}}.hero-v8__subtitle{margin:0;max-width:100%;color:var(--text-secondary)}.hero-v8__benefits{display:flex;flex-wrap:wrap;gap:var(--space-10);align-items:flex-start;width:max-content;max-width:100%;margin:0;padding:0;list-style:none}.hero-v8__benefit{display:flex;gap:var(--space-16);align-items:center;flex:none;box-sizing:border-box}.hero-v8__benefit-icon{position:relative;display:flex;align-items:center;justify-content:center;flex:none;width:54px;height:54px;border-radius:var(--radius-full);color:var(--brand)}.hero-v8__benefit-icon::before{content:\"\";position:absolute;inset:0;border-radius:var(--radius-full);background:var(--brand-opacity-15);pointer-events:none}.hero-v8__benefit-icon img{position:relative;z-index:1;display:block;width:31px;height:31px;object-fit:contain}.hero-v8__benefit-text{margin:0;max-width:190px;color:var(--text-secondary);min-width:0}.hero-v8__benefit--no-icon{gap:0}.hero-v8__benefit--no-icon .hero-v8__benefit-text{max-width:none}.hero-v8__cta{flex:none}.hero-v8__actions{flex-wrap:nowrap;width:max-content;max-width:100%}.hero-v8__video{display:flex;gap:var(--space-20);align-items:center;flex:none;max-width:280px;text-decoration:none;color:inherit;cursor:pointer}.hero-v8__play-surface{position:relative;display:flex;align-items:center;justify-content:center;width:48px;height:48px;flex:none;box-sizing:border-box;border:none;border-radius:var(--radius-full);background:transparent;backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-on-brand)}.hero-v8__play-surface::before{content:\"\";position:absolute;inset:0;border:5px solid var(--brand-opacity-15);border-radius:var(--radius-full);background:transparent;pointer-events:none;transition:transform .16s ease}.hero-v8__play-bg{position:absolute;inset:5px;border-radius:var(--radius-full);background:var(--brand-opacity-40);transition:transform .16s ease}.hero-v8__play-icon{position:absolute;inset:0;z-index:1;display:block;width:9px;height:10px;margin:auto;overflow:visible;pointer-events:none;color:var(--text-on-brand)}.hero-v8__video-label{margin:0;max-width:200px;color:var(--text-primary);transition:color .16s ease}.hero-v8__video:hover .hero-v8__play-surface::before,.hero-v8__video:focus-visible .hero-v8__play-surface::before,.hero-v8__video:hover .hero-v8__play-bg,.hero-v8__video:focus-visible .hero-v8__play-bg{transform:scale(1.04)}.hero-v8__video:hover .hero-v8__video-label,.hero-v8__video:focus-visible .hero-v8__video-label{color:var(--brand-dark)}@media (max-width:1360px) and (min-width:1281px){.hero-v8__inner{padding:var(--space-32);background:var(--white-opacity-50);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));border-radius:var(--radius);box-sizing:border-box}}@media (max-width:1280px){.hero-v8{display:flex;flex-direction:column;min-height:auto;padding-bottom:var(--section-y-mobile)}.hero-v8.has-block-bg.section-pad-y-lg>.container{padding-bottom:0}.hero-v8__bg{position:static;order:2;flex:none;width:100%;aspect-ratio:375\/280;min-height:220px}.hero-v8__bg img{min-height:0;height:100%;object-fit:cover;object-position:right center}.hero-v8>.container{order:1;flex:none;width:100%;max-width:none}.hero-v8__inner{max-width:none;padding:0;margin-bottom:var(--space-16);background:none;border-radius:0;gap:var(--space-40)}.hero-v8__title,.hero-v8__subtitle{max-width:none}}@media (max-width:991px){.hero-v8__benefits{flex-direction:column;align-items:flex-start;gap:var(--space-16);width:100%;max-width:none}.hero-v8__benefit{flex:0 0 auto;width:100%;max-width:none}.hero-v8__benefit-text{max-width:none}}@media (max-width:768px){.hero-v8.has-block-bg.section-pad-y-lg>.container{padding-bottom:0}.hero-v8__actions{flex-direction:column;align-items:stretch;width:100%}.hero-v8__cta{width:100%}.hero-v8__video{max-width:none}.hero-v8__benefit-icon{width:40px;height:40px}.hero-v8__benefit-icon img{width:22px;height:22px}}.benefits-v3{box-sizing:border-box}.benefits-v3__cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-24);align-items:stretch;margin:0;padding:0;list-style:none}.benefits-v3__card{display:flex;align-items:flex-start;gap:22px;min-width:0;min-height:158px;padding:30px var(--space-16);border:1px solid var(--white);border-radius:var(--radius);background:var(--white-opacity-75);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));box-sizing:border-box;overflow:hidden}.benefits-v3__card--no-icon{gap:0}.benefits-v3__icon{display:flex;align-items:center;justify-content:center;flex:none;width:42px;height:42px}.benefits-v3__icon-img{display:block;object-fit:contain}.benefits-v3__body{display:flex;flex-direction:column;gap:var(--space-8);min-width:0}.benefits-v3__title{margin:0;color:var(--text-primary);font-family:var(--font-body);font-weight:600;letter-spacing:var(--ls-btn);text-transform:uppercase}.benefits-v3__text{margin:0;color:var(--text-muted)}@media (max-width:1200px){.benefits-v3__cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:768px){.benefits-v3__cards{grid-template-columns:minmax(0,1fr)}.benefits-v3__card{min-height:0;padding:var(--space-24) var(--space-16)}}.expert-advice-v2__photo-media > img{aspect-ratio:658 \/ 578}.expert-advice-v2{--expert-advice-v2-main-min:540px;--expert-advice-v2-main-max:822px;--expert-advice-v2-photo-max:658px;box-sizing:border-box}.expert-advice-v2__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:clamp(var(--space-32),6vw,162px)}.expert-advice-v2--photo-right .expert-advice-v2__photo{order:2}.expert-advice-v2--photo-right .expert-advice-v2__main{order:1}.expert-advice-v2__photo{margin:0;flex:0 1 var(--expert-advice-v2-photo-max);min-width:0;max-width:var(--expert-advice-v2-photo-max);border-radius:var(--radius);overflow:hidden;background:var(--bg-fill-surface)}.expert-advice-v2__photo-media{position:relative;aspect-ratio:658 \/ 578;overflow:hidden}.expert-advice-v2__photo-media img{position:absolute;top:0;left:-29.73%;width:131.76%;height:100%;max-width:none;object-fit:cover;display:block}.expert-advice-v2__photo-badge{position:absolute;left:35px;bottom:33px;width:min(353px,calc(100% - 70px));margin:0;padding:12px 26px;border-radius:var(--radius);background:var(--white-opacity-75);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));box-sizing:border-box}.expert-advice-v2__photo-name{margin:0;color:var(--text-primary)}.expert-advice-v2__photo-meta{margin:var(--space-8) 0 0;color:var(--text-primary)}.expert-advice-v2__main{flex:1 1 var(--expert-advice-v2-main-min);min-width:var(--expert-advice-v2-main-min);max-width:var(--expert-advice-v2-main-max);display:flex;flex-direction:column;gap:var(--space-40)}.expert-advice-v2__title{margin:0;max-width:642px;color:var(--text-primary)}.expert-advice-v2__body{max-width:764px;color:var(--text-primary)}.expert-advice-v2__body p{margin:0}.expert-advice-v2__body p + p{margin-top:var(--space-16)}.expert-advice-v2__stats{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-24);max-width:822px}.expert-advice-v2__stat{flex:0 1 221px;min-width:0}.expert-advice-v2__stat-value{margin:0;min-height:64px;display:flex;align-items:center;color:var(--brand)}.expert-advice-v2__stat-label{margin:0;color:var(--text-secondary)}@media (min-width:1201px){.expert-advice-v2__photo{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));align-self:flex-start}}@media (max-width:1200px){.expert-advice-v2__grid{flex-direction:column;align-items:flex-start}.expert-advice-v2__main{order:1;flex:1 1 auto;min-width:0;width:100%;max-width:none}.expert-advice-v2__title,.expert-advice-v2__body,.expert-advice-v2__stats{max-width:none}.expert-advice-v2__photo{order:2;flex:0 1 auto;width:min(var(--expert-advice-v2-photo-max),100%);max-width:var(--expert-advice-v2-photo-max)}}@media (max-width:768px){.expert-advice-v2__photo-badge{left:var(--space-20);bottom:var(--space-20);width:calc(100% - var(--space-40));padding:var(--space-12) var(--space-20)}.expert-advice-v2__stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-12) var(--space-8);align-items:start}.expert-advice-v2__stat{display:flex;flex-direction:column;gap:var(--space-4);min-width:0}.expert-advice-v2__stat-value{min-height:0;align-items:flex-start}}.treatment-technologies-v2{box-sizing:border-box}.treatment-technologies-v2__inner.stack{gap:calc(var(--space-48) + var(--space-12))}.treatment-technologies-v2__eyebrow{color:var(--text-muted)}.treatment-technologies-v2__title{margin:0;max-width:918px;color:var(--text-primary)}.treatment-technologies-v2__head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,536px);gap:var(--space-40);align-items:end}.treatment-technologies-v2__head-main{min-width:0}.treatment-technologies-v2__head-lead{min-width:0;margin:0;color:var(--text-secondary)}.treatment-technologies-v2__card{--tt-v2-aside-pad-start:calc(var(--space-64) + var(--space-64) + var(--space-32) + var(--space-6));--tt-v2-aside-pad-end:calc(var(--space-64) + var(--space-32) + var(--space-4));--tt-v2-aside-pad-top:calc(var(--space-64) + var(--space-6));--tt-v2-aside-pad-bottom:var(--space-48);--tt-v2-aside-nav-reserve:calc(var(--space-40) + var(--space-4) + var(--space-32));display:grid;grid-template-columns:minmax(0,771fr) minmax(0,869fr);width:100%;border-radius:var(--radius);background:var(--bg-fill-surface);box-sizing:border-box;overflow:hidden}.treatment-technologies-v2__slider.swiper{grid-column:1 \/ -1;grid-row:1;width:100%;min-width:0;overflow:hidden}.treatment-technologies-v2__slider .swiper-slide{height:auto}.treatment-technologies-v2__slide{display:grid;grid-template-columns:minmax(0,771fr) minmax(0,869fr);align-items:stretch;box-sizing:border-box}.treatment-technologies-v2__media{position:relative;min-width:0;min-height:0;overflow:hidden}.treatment-technologies-v2__media-img{display:block;width:100%;height:100%;min-height:280px;aspect-ratio:771 \/ 508;object-fit:cover;object-position:center bottom}.treatment-technologies-v2__copy{display:flex;flex-direction:column;justify-content:flex-start;min-width:0;padding:var(--tt-v2-aside-pad-top) var(--tt-v2-aside-pad-end) calc(var(--tt-v2-aside-pad-bottom) + var(--tt-v2-aside-nav-reserve)) var(--tt-v2-aside-pad-start);box-sizing:border-box;background:var(--bg-fill-surface)}.treatment-technologies-v2__copy-main.stack{gap:calc(var(--space-32) + var(--space-12));max-width:419px}.treatment-technologies-v2__brand-block.stack--sm{gap:calc(var(--space-12) + 1px);max-width:283px}.treatment-technologies-v2__brand{margin:0;color:var(--brand)}.treatment-technologies-v2__slide-title{margin:0;color:var(--text-primary)}.treatment-technologies-v2__benefits{display:flex;flex-direction:column;gap:calc(var(--space-16) - 1px);margin:0;padding:0;list-style:none}.treatment-technologies-v2__benefit{display:flex;align-items:center;gap:var(--space-16);margin:0;color:var(--text-secondary)}.treatment-technologies-v2__benefit-dot{flex:none;width:var(--space-10);height:var(--space-10);border-radius:50%;background:var(--brand)}.treatment-technologies-v2__benefit-text{min-width:0}.treatment-technologies-v2__controls{grid-column:2;grid-row:1;align-self:end;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;min-width:0;padding:0 var(--tt-v2-aside-pad-end) var(--tt-v2-aside-pad-bottom) var(--tt-v2-aside-pad-start);box-sizing:border-box}.treatment-technologies-v2__nav-btn{flex:none;width:calc(var(--space-40) + var(--space-4));height:calc(var(--space-40) + var(--space-4));border:1px solid var(--ui-border-soft);background:var(--white-opacity-40);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));color:var(--text-muted);box-sizing:border-box;transition:transform .16s ease,background-color .16s ease,opacity .16s ease,border-color .16s ease}.treatment-technologies-v2__controls .slider-nav__btn:hover:not(:disabled):not(.swiper-button-disabled){background:var(--white-opacity-75);border-color:var(--ui-border-default)}.treatment-technologies-v2__arrow{display:block}.treatment-technologies-v2__nav-btn.slider-nav__btn--next .treatment-technologies-v2__arrow{transform:scaleX(-1)}.treatment-technologies-v2__pagination-host{flex:1 1 auto;min-width:0;margin-top:0;min-height:var(--space-18)}.treatment-technologies-v2__pagination{margin-top:0}@media (max-width:1200px){.treatment-technologies-v2__head{grid-template-columns:1fr;align-items:start;gap:var(--space-24)}.treatment-technologies-v2__card{grid-template-columns:1fr;--tt-v2-aside-pad-start:var(--space-24);--tt-v2-aside-pad-end:var(--space-24);--tt-v2-aside-pad-top:var(--space-32);--tt-v2-aside-pad-bottom:var(--space-24);--tt-v2-aside-nav-reserve:calc(var(--space-40) + var(--space-4) + var(--space-24))}.treatment-technologies-v2__slide{grid-template-columns:1fr}.treatment-technologies-v2__media-img{min-height:0;height:auto;aspect-ratio:771 \/ 508}.treatment-technologies-v2__copy{padding:var(--tt-v2-aside-pad-top) var(--tt-v2-aside-pad-end) calc(var(--tt-v2-aside-pad-bottom) + var(--tt-v2-aside-nav-reserve)) var(--tt-v2-aside-pad-start)}.treatment-technologies-v2__copy-main,.treatment-technologies-v2__brand-block{max-width:none}.treatment-technologies-v2__controls{grid-column:1;padding:0 var(--tt-v2-aside-pad-end) var(--tt-v2-aside-pad-bottom) var(--tt-v2-aside-pad-start)}}@media (max-width:768px){.treatment-technologies-v2__card{--tt-v2-aside-pad-start:var(--space-20);--tt-v2-aside-pad-end:var(--space-20);--tt-v2-aside-pad-top:var(--space-24);--tt-v2-aside-pad-bottom:var(--space-20);--tt-v2-aside-nav-reserve:calc(var(--space-18) + var(--space-24))}.treatment-technologies-v2__inner.stack{gap:var(--space-40)}.treatment-technologies-v2__copy{padding:var(--tt-v2-aside-pad-top) var(--tt-v2-aside-pad-end) calc(var(--tt-v2-aside-pad-bottom) + var(--tt-v2-aside-nav-reserve)) var(--tt-v2-aside-pad-start)}.treatment-technologies-v2__controls{padding:0 var(--tt-v2-aside-pad-end) var(--tt-v2-aside-pad-bottom) var(--tt-v2-aside-pad-start)}.treatment-technologies-v2__nav-btn{display:none}.treatment-technologies-v2__pagination-host{max-width:none}}.treatment-technologies-v3{box-sizing:border-box}.treatment-technologies-v3__inner.stack{gap:calc(var(--space-48) + var(--space-12));align-items:center}.treatment-technologies-v3__head{align-items:center;text-align:center;max-width:1068px;width:100%}.treatment-technologies-v3__eyebrow{align-self:center;color:var(--text-muted)}.treatment-technologies-v3__title{margin:0;max-width:918px;color:var(--text-primary)}.treatment-technologies-v3__lead{margin:0;max-width:1068px;color:var(--text-secondary)}.treatment-technologies-v3__features{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-24);width:100%;margin:0;padding:0;list-style:none}.treatment-technologies-v3__feature{display:flex;flex-direction:column;align-items:center;gap:var(--space-24);flex:0 1 337px;max-width:337px;min-width:0;text-align:center}.treatment-technologies-v3__icon{display:flex;align-items:center;justify-content:center;flex:none;width:var(--space-64);height:var(--space-64)}.treatment-technologies-v3__icon-img{display:block;width:100%;height:100%;object-fit:contain}.treatment-technologies-v3__feature-copy{width:100%;min-width:0}.treatment-technologies-v3__feature-copy.stack--sm{gap:var(--space-16)}.treatment-technologies-v3__feature-title{margin:0;color:var(--text-primary);font-weight:400;line-height:var(--lh-body)}.treatment-technologies-v3__feature-text{margin:0;color:var(--text-secondary);line-height:var(--lh-body)}@media (max-width:1360px){.treatment-technologies-v3__features{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));justify-content:center;gap:var(--space-32) var(--space-24)}.treatment-technologies-v3__feature{flex:none;max-width:none;width:100%}}@media (max-width:768px){.treatment-technologies-v3__inner.stack{gap:var(--space-40)}.treatment-technologies-v3__head.stack--md{gap:var(--space-16)}.treatment-technologies-v3__features{grid-template-columns:1fr;gap:var(--space-32)}}.reviews-v4{--reviews-v4-lead-sticky-top:calc(var(--site-nav-h,0px) + var(--space-24));box-sizing:border-box}.reviews-v4__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-40)}.reviews-v4__lead-col{flex:1 1 auto;min-width:0;max-width:800px}.reviews-v4__eyebrow{color:var(--text-muted)}.reviews-v4__title{margin:0;color:var(--text-primary)}.reviews-v4__lead{margin:0;max-width:605px;color:var(--text-secondary)}.reviews-v4__highlights{display:flex;flex-direction:column;gap:var(--space-24);margin:0;padding:0;list-style:none}.reviews-v4__highlight{display:flex;align-items:flex-start;gap:var(--space-24)}.reviews-v4__highlight-icon{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border-radius:var(--radius-full);background:var(--white)}.reviews-v4__highlight-icon-img{display:block;width:24px;height:24px;object-fit:contain}.reviews-v4__highlight-body{min-width:0;max-width:624px}.reviews-v4__highlight-body--spaced{gap:var(--space-12)}.reviews-v4__highlight-title{margin:0;color:var(--text-primary)}.reviews-v4__highlight-text{margin:0;color:var(--text-muted)}.reviews-v4__widget{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;max-width:800px;min-height:706px;padding:var(--space-28) var(--space-56) var(--space-32);border-radius:var(--radius);background:var(--white);box-sizing:border-box}.reviews-v4__widget-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-40)}.reviews-v4__widget-clinic{flex:1 1 auto;min-width:0;max-width:212px}.reviews-v4__widget-score,.reviews-v4__review-score{margin:0}.reviews-v4__widget-clinic-name{margin:0;color:var(--text-primary)}.reviews-v4__widget-clinic-location{margin:0;color:var(--text-muted)}.reviews-v4__widget-summary{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-8);flex:none;max-width:295px}.reviews-v4__widget-rating-row{display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-8);width:100%}.reviews-v4__widget-rating-score{display:flex;align-items:center;gap:var(--space-8);flex-wrap:wrap}.reviews-v4__widget-score{color:var(--text-muted)}.reviews-v4__widget-count{margin:0;color:var(--text-muted)}.reviews-v4__widget-logo{display:block;width:auto;max-width:196px;height:42px;object-fit:contain;object-position:right center}.reviews-v4__widget-divider{height:1px;margin:var(--space-24) 0 var(--space-16);background:var(--ui-border-soft)}.reviews-v4__widget-body{flex:1 1 auto;min-height:0}.reviews-v4__widget-title{margin:0;color:var(--text-primary)}.reviews-v4__filters{display:flex;flex-wrap:wrap;align-items:center;gap:0}.reviews-v4__chip{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:var(--space-12) var(--space-24) var(--space-12) var(--space-18);border:0;border-bottom:1px solid transparent;background:none;color:var(--text-secondary);cursor:pointer;font:inherit;white-space:nowrap;transition:border-color .16s ease,color .16s ease}.reviews-v4__chip:hover:not(.is-active),.reviews-v4__chip:focus-visible:not(.is-active){color:var(--text-primary)}.reviews-v4__chip.is-active{border-bottom-color:var(--brand);color:var(--brand)}.reviews-v4__chip:focus-visible{outline:2px solid var(--brand-dark);outline-offset:2px}.reviews-v4__reviews-groups{display:flex;flex-direction:column}.reviews-v4__reviews{display:flex;flex-direction:column;gap:var(--space-40)}.reviews-v4__reviews.is-hidden{display:none}.reviews-v4__review{display:flex;align-items:flex-start;gap:var(--space-24)}.reviews-v4__avatar{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border-radius:var(--radius-full);background:var(--brand-border)}.reviews-v4__avatar-letter{margin:0;color:var(--brand)}.reviews-v4__review-body{flex:1 1 auto;min-width:0}.reviews-v4__review-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16)}.reviews-v4__review-meta{min-width:0}.reviews-v4__review-name{margin:0;color:var(--text-primary)}.reviews-v4__review-date{margin:0;color:var(--text-muted)}.reviews-v4__review-rating{display:flex;align-items:center;gap:var(--space-8);flex:none}.reviews-v4__review-score{color:var(--text-muted)}.reviews-v4__review-star{flex:none;width:30px;height:30px;color:var(--rating-accent)}.reviews-v4__review-text{margin:0;color:var(--text-muted)}.reviews-v4__widget-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);flex:none;margin-top:var(--space-40)}.reviews-v4__widget-source{display:flex;align-items:center;gap:var(--space-16);flex-wrap:wrap}.reviews-v4__widget-source-label{color:var(--text-secondary);font-weight:600;line-height:var(--lh-body-tight)}.reviews-v4__widget-source-logo{display:block;width:auto;max-width:155px;height:27px;object-fit:contain}.reviews-v4__widget-read{flex:none;color:var(--text-secondary);text-decoration:none}.reviews-v4__widget-read:hover,.reviews-v4__widget-read:focus-visible{color:var(--brand-dark)}@media (min-width:1201px){.reviews-v4__lead-col{position:sticky;top:var(--reviews-v4-lead-sticky-top);align-self:flex-start}}@media (max-width:1200px){.reviews-v4__grid{flex-direction:column;align-items:stretch}.reviews-v4__lead-col,.reviews-v4__widget{max-width:none;width:100%}.reviews-v4__widget{min-height:0}}@media (max-width:768px){.reviews-v4__widget{padding:var(--space-20) var(--space-16)}.reviews-v4__widget-head{flex-direction:column;gap:var(--space-24)}.reviews-v4__widget-summary{align-items:flex-start;max-width:none;width:100%}.reviews-v4__widget-rating-row{align-items:flex-start}.reviews-v4__widget-logo{object-position:left center}.reviews-v4__highlight{gap:var(--space-16)}.reviews-v4__review-head{flex-direction:column;align-items:flex-start}.reviews-v4__widget-foot{flex-direction:column;align-items:flex-start;gap:var(--space-16)}}.certificates-v2{--certificates-v2-head-main-max:665px;--certificates-v2-lead-max:665px;--certificates-v2-preview-w:357px;--certificates-v2-preview-ratio:357 \/ 505;--certificates-v2-foot-w:241px;box-sizing:border-box}.certificates-v2__inner.stack--xl{gap:var(--space-40)}.certificates-v2__head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-64)}.certificates-v2__head-main{flex:1 1 var(--certificates-v2-head-main-max);min-width:0;max-width:var(--certificates-v2-head-main-max)}.certificates-v2__eyebrow.eyebrow{color:var(--text-muted)}.certificates-v2__title{margin:0;color:var(--text-primary)}.certificates-v2__lead{flex:0 1 var(--certificates-v2-lead-max);margin:0;min-width:0;max-width:var(--certificates-v2-lead-max);color:var(--text-primary)}.certificates-v2__carousel{width:100%;min-width:0}.certificates-v2__slider-toolbar{display:none;justify-content:flex-end;align-items:center;margin:0 0 var(--space-16)}.certificates-v2__slider-toolbar.is-visible{display:flex}.certificates-v2__slider-nav{width:132px;justify-content:space-between}.certificates-v2__slider-foot{min-width:0}.certificates-v2__slider{width:100%;min-width:0;overflow:hidden}.certificates-v2__slider.swiper{overflow:hidden}.certificates-v2__track.swiper-wrapper{box-sizing:border-box}.certificates-v2--locked .certificates-v2__track.swiper-wrapper{justify-content:space-between}.certificates-v2__item.swiper-slide{display:flex;flex-direction:column;align-items:center;gap:var(--space-24);width:var(--certificates-v2-preview-w);height:auto;flex-shrink:0;box-sizing:border-box}.certificates-v2__preview{width:100%;aspect-ratio:var(--certificates-v2-preview-ratio);overflow:hidden;border-radius:var(--radius);background:var(--bg-fill-surface);box-shadow:var(--shadow-brand-soft)}.certificates-v2__preview-photo{display:block;width:100%;height:100%;object-fit:cover}.certificates-v2__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);width:min(100%,var(--certificates-v2-foot-w))}.certificates-v2__type{margin:0;color:var(--ui-border-strong);letter-spacing:-0.01em;text-transform:uppercase}.certificates-v2__download{display:inline-flex;align-items:center;gap:var(--space-10);text-decoration:none;color:var(--brand);white-space:nowrap;transition:color .2s ease}.certificates-v2__download-label{color:currentColor}.certificates-v2__download-icon{flex:none;color:currentColor}.certificates-v2__download:hover,.certificates-v2__download:focus-visible{color:var(--brand-dark)}@media (min-width:1201px){.certificates-v2__carousel{overflow:hidden}.certificates-v2__slider-foot .certificates-v2__pagination.slider-pagination--dots{display:none !important}}@media (max-width:1360px){.certificates-v2__head{flex-direction:column;align-items:flex-start;gap:var(--space-24)}.certificates-v2__head-main,.certificates-v2__lead{flex:1 1 auto;max-width:none}}@media (max-width:1200px){.certificates-v2__carousel{width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter));overflow:hidden}.certificates-v2__slider-toolbar{display:none !important}.certificates-v2__slider-foot .certificates-v2__pagination.slider-pagination--dots{display:flex !important}.certificates-v2__item.swiper-slide{width:min( var(--certificates-v2-preview-w),calc(100vw - var(--page-gutter) * 2 - var(--space-24)) )}}@media (max-width:768px){.certificates-v2__inner.stack--xl{gap:var(--space-24)}.certificates-v2__head{gap:var(--space-16)}.certificates-v2__head-main.stack--md{gap:var(--space-16)}.certificates-v2__item.swiper-slide{gap:var(--space-16)}}.faq-v2{box-sizing:border-box}.faq-v2__inner{align-items:center}.faq-v2__head{align-items:center;text-align:center;max-width:955px}.faq-v2__eyebrow{align-self:center;color:var(--brand)}.faq-v2__title{margin:0;color:var(--text-primary)}.faq-v2__lead{margin:0;color:var(--text-secondary)}.faq-v2__tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:19px;width:100%;border-bottom:1px solid var(--ui-border-soft);box-sizing:border-box}.faq-v2__tab{margin:0 0 -1px;padding:var(--space-12) var(--space-24) var(--space-12) var(--space-18);min-height:48px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--text-secondary);cursor:pointer;box-sizing:border-box;transition:color .16s ease,border-color .16s ease}.faq-v2__tab:hover:not(.is-active){color:var(--brand-dark)}.faq-v2__tab:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px;border-radius:var(--radius-sm)}.faq-v2__tab.is-active{color:var(--brand);border-bottom-color:var(--brand)}.faq-v2__panels{width:100%}.faq-v2__panel{align-items:center;width:100%}.faq-v2__panel[hidden]{display:none !important}.faq-v2__accordion{display:flex;flex-direction:column;gap:var(--space-8);width:100%}.faq-v2__item{border-radius:var(--radius);overflow:hidden;box-sizing:border-box}.faq-v2__item[hidden]{display:none !important}.faq-v2__trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;padding:var(--space-16) var(--space-20) var(--space-16) var(--space-40);border:0;background:transparent;cursor:pointer;box-sizing:border-box;text-align:left}.faq-v2__trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.faq-v2__left{display:flex;align-items:center;gap:var(--space-16);min-width:0}.faq-v2__question{min-width:0;margin:0;color:var(--text-primary)}.faq-v2__item.is-open .faq-v2__question{color:var(--brand)}.faq-v2__question a{color:var(--brand);text-decoration:none}.faq-v2__question a:hover,.faq-v2__question a:focus-visible{text-decoration:underline}.faq-v2__question a:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:var(--radius-sm)}.faq-v2__q-icon{display:flex;align-items:center;justify-content:center;flex:none;width:68px;height:68px;border-radius:var(--radius-full);background:var(--brand-opacity-20);color:var(--brand)}.faq-v2__q-icon-svg{display:block;width:38px;height:42px}.faq-v2__right{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-16);flex:none}.faq-v2__meta{color:var(--text-muted);white-space:nowrap}.faq-v2__chevron{display:flex;align-items:center;justify-content:center;flex:none;width:64px;height:64px;color:var(--brand)}.faq-v2__chevron-svg{display:block;transition:transform .32s ease}.faq-v2__item.is-open .faq-v2__chevron-svg{transform:rotate(180deg)}.faq-v2__item-panel{display:grid;grid-template-rows:0fr;overflow:hidden;transition:grid-template-rows .32s ease-in-out}.faq-v2__item.is-open .faq-v2__item-panel{grid-template-rows:1fr}.faq-v2__item-panel[hidden]{display:grid !important}.faq-v2__item-panel-inner{min-height:0;overflow:hidden}.faq-v2__item-panel-body{padding:var(--space-20) var(--space-40) var(--space-24);border-top:1px solid var(--ui-border-strong);box-sizing:border-box}.faq-v2__answer{margin:0;color:var(--text-secondary)}.faq-v2__answer.wysiwyg p{margin:0}.faq-v2__answer.wysiwyg p + p{margin-top:var(--space-16)}.faq-v2__materials{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:var(--space-16);column-gap:var(--space-40);margin-top:var(--space-20)}.faq-v2__material{display:inline-flex;max-width:100%;color:var(--text-secondary);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.faq-v2__material:hover,.faq-v2__material:focus-visible{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}.faq-v2__more-row{display:flex;justify-content:center;width:100%}.faq-v2__more{width:auto;min-height:45px;padding-inline:var(--space-24)}.faq-v2__more[hidden]{display:none !important}@media (max-width:1200px){.faq-v2__materials{column-gap:var(--space-24)}}@media (max-width:768px){.faq-v2__tabs{justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;gap:var(--space-16);padding-bottom:var(--space-2);-webkit-overflow-scrolling:touch;scrollbar-width:none}.faq-v2__tabs::-webkit-scrollbar{display:none}.faq-v2__tab{flex:none;padding-inline:var(--space-16);white-space:nowrap}.faq-v2__trigger{padding:var(--space-16)}.faq-v2__q-icon{display:none}.faq-v2__item-panel-body{padding:var(--space-16) var(--space-16) var(--space-20)}.faq-v2__meta{display:none}.faq-v2__chevron{width:52px;height:52px}}@media (prefers-reduced-motion:reduce){.faq-v2__chevron-svg,.faq-v2__item-panel{transition:none}}.vacancies-v1__photo > img{aspect-ratio:701 \/ 561}.vacancies-v1{box-sizing:border-box}.vacancies-v1__grid{display:flex;gap:var(--space-40);align-items:flex-start}.vacancies-v1__aside{width:520px;max-width:100%;flex:none;display:flex;flex-direction:column;gap:var(--space-40)}.vacancies-v1__aside--no-photo{gap:0}.vacancies-v1__photo{border-radius:var(--radius);overflow:hidden;aspect-ratio:520 \/ 386}.vacancies-v1__photo img{display:block;width:100%;height:100%;object-fit:cover}.vacancies-v1__resume{border-radius:var(--radius-btn);background:var(--brand-surface-soft);padding:var(--space-32) var(--space-24)}.vacancies-v1__resume-inner{align-items:center;text-align:center}.vacancies-v1__resume-copy.stack--sm{gap:9px}.vacancies-v1__resume-title{margin:0;color:var(--text-primary)}.vacancies-v1__resume-text{margin:0;max-width:350px;color:var(--text-secondary)}.vacancies-v1__resume-cta{min-height:54px}.vacancies-v1__main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-24);min-height:682px}.vacancies-v1__title{margin:0;color:var(--text-primary);max-width:940px}.vacancies-v1__lead{margin:0;max-width:730px;color:var(--text-secondary)}.vacancies-v1__list{display:flex;flex-direction:column;gap:var(--space-8);max-width:1080px}.vacancies-v1__item{border-radius:var(--radius-btn);overflow:hidden}.vacancies-v1__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);padding:var(--space-24) var(--space-20) var(--space-24) var(--space-40);border:0;border-radius:0;cursor:pointer;text-align:left;color:var(--text-primary)}.vacancies-v1__trigger:disabled{cursor:default}.vacancies-v1__trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.vacancies-v1__meta{display:flex;align-items:center;gap:7px;color:var(--text-muted);white-space:nowrap}.vacancies-v1__dot{width:6px;height:6px;border-radius:999px;background:currentColor;flex:none}.vacancies-v1__panel{overflow:hidden;opacity:0;transform:translateY(-6px);transition:height .26s ease,opacity .26s ease,transform .26s ease;will-change:height}.vacancies-v1__panel.is-open{opacity:1;transform:translateY(0)}.vacancies-v1__panel-inner{display:flex;flex-direction:column;gap:var(--space-20);border-top:1px solid var(--ui-border-strong);padding:var(--space-16) var(--space-20) var(--space-40) var(--space-40)}.vacancies-v1__panel-title{margin:0;color:var(--text-primary)}.vacancies-v1__panel-list{margin:0;padding-left:18px;color:var(--text-secondary)}.vacancies-v1__panel-li{margin:0}.vacancies-v1__panel-note{margin:0;color:var(--text-muted)}.vacancies-v1__panel-text{margin:0;font-weight:400;color:var(--text-primary);max-width:1147px;line-height:var(--lh-body)}.vacancies-v1__panel-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-40);width:100%}.vacancies-v1__panel-cols{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-8);flex:1 1 auto;min-width:0}.vacancies-v1__panel-col{display:flex;flex-direction:column;gap:var(--space-8);flex:none;width:100%;min-width:0}.vacancies-v1__panel-col-title{margin:0;font-weight:400;color:var(--text-primary);line-height:var(--lh-body)}.vacancies-v1__panel-col-list{display:flex;flex-direction:column;gap:var(--space-8);margin:0;padding:0;list-style:none}.vacancies-v1__panel-col-item{display:flex;align-items:flex-start;gap:var(--space-12);margin:0;font-weight:400;color:var(--text-secondary);line-height:var(--lh-body)}.vacancies-v1__panel-col-dot{width:10px;height:10px;margin-top:0.45em;border-radius:999px;background:var(--brand);flex:none}.vacancies-v1__panel-aside{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:var(--space-40);flex:none}.vacancies-v1__panel-location{display:flex;flex-direction:column;gap:var(--space-8)}.vacancies-v1__panel-city{margin:0;font-weight:600;color:var(--text-primary);line-height:var(--lh-body)}.vacancies-v1__panel-address{margin:0;font-weight:400;color:var(--text-primary);line-height:var(--lh-body)}.vacancies-v1__apply{min-width:260px;min-height:54px;padding:var(--space-14) var(--space-32)}.vacancies-v1__more{display:flex;justify-content:center;max-width:1080px}.vacancies-v1__more-btn{min-height:45px;padding:var(--space-12) var(--space-24)}@media (max-width:1200px){.vacancies-v1__grid{flex-direction:column;align-items:stretch}.vacancies-v1__main{min-height:0;width:100%}.vacancies-v1__title,.vacancies-v1__lead,.vacancies-v1__list{max-width:100%}.vacancies-v1__aside{order:2;width:100%;flex-direction:row;align-items:stretch;gap:var(--space-24)}.vacancies-v1__photo{flex:1 1 0;min-width:0}.vacancies-v1__resume{flex:1 1 0;min-width:0;display:flex;align-items:center}.vacancies-v1__resume-text{max-width:100%}}@media (max-width:1440px){.vacancies-v1__panel-foot{flex-direction:column;align-items:stretch;gap:var(--space-24)}.vacancies-v1__panel-cols{flex:none;width:100%}.vacancies-v1__panel-aside{gap:var(--space-16);width:100%}}@media (max-width:768px){.vacancies-v1__aside{flex-direction:column;gap:var(--space-40)}.vacancies-v1__photo{flex:none}.vacancies-v1__resume{display:block}.vacancies-v1__trigger{padding:var(--space-16);flex-direction:column;align-items:flex-start}.vacancies-v1__meta{white-space:normal}.vacancies-v1__panel-inner{padding:var(--space-12) var(--space-16) var(--space-16)}.vacancies-v1__apply{width:100%;min-width:0}.vacancies-v1__resume{padding:var(--space-24)}}@media (prefers-reduced-motion:reduce){.vacancies-v1__panel{transition:none}}.certificates-v4{box-sizing:border-box;--certificates-v4-inner-gap:calc(var(--space-48) + var(--space-12));--certificates-v4-notice-max-w:854px;--certificates-v4-notice-copy-max-w:772px;--certificates-v4-card-w:537px;--certificates-v4-card-min-h:366px;--certificates-v4-preview-w:126px;--certificates-v4-preview-ratio:126 \/ 178}.certificates-v4__inner.stack{gap:var(--certificates-v4-inner-gap)}.certificates-v4__slider-block.stack--md{gap:var(--space-24)}.certificates-v4__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);min-width:0}.certificates-v4__title{margin:0;flex:1 1 auto;min-width:0;color:var(--text-primary)}.certificates-v4__nav-wrap{display:none;flex:none}.certificates-v4__nav-wrap.is-visible{display:block}.certificates-v4__nav{width:132px;justify-content:space-between}.certificates-v4__nav.slider-nav--glass .slider-nav__btn{border:1px solid var(--ui-border-soft)}.certificates-v4__slider-foot{min-width:0;gap:0}.certificates-v4__slider{width:100%;min-width:0;overflow:hidden}.certificates-v4__slider.swiper{overflow:hidden}.certificates-v4__slider .swiper-slide{width:var(--certificates-v4-card-w);height:auto;box-sizing:border-box}.certificates-v4--locked .certificates-v4__slider .swiper-wrapper{justify-content:space-between}.certificates-v4__card{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-24);width:100%;min-height:var(--certificates-v4-card-min-h);padding:var(--space-24) var(--space-16);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.certificates-v4__card-main{display:flex;align-items:flex-start;gap:var(--space-32);min-width:0}.certificates-v4__preview{flex:none;width:var(--certificates-v4-preview-w);aspect-ratio:var(--certificates-v4-preview-ratio);overflow:hidden;border-radius:4px;background:var(--text-secondary)}.certificates-v4__preview-img{display:block;width:100%;height:100%;object-fit:cover}.certificates-v4__card-copy{flex:1 1 auto;min-width:0}.certificates-v4__card-copy.stack--md{gap:var(--space-16)}.certificates-v4__card-head.stack--md{gap:var(--space-16)}.certificates-v4__card-title{margin:0;color:var(--text-primary);overflow-wrap:anywhere}.certificates-v4__card-number{margin:0;color:var(--ui-border-default);letter-spacing:-0.01em;text-transform:uppercase;overflow-wrap:anywhere}.certificates-v4__card-meta{margin:0;color:var(--ui-border-default);overflow-wrap:anywhere}.certificates-v4__card-actions{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:0;width:100%;min-height:52px}.certificates-v4__card-actions::before{content:\"\";position:absolute;top:50%;left:50%;width:1px;height:43px;background:var(--ui-border-soft);transform:translate(-50%,-50%);pointer-events:none}.certificates-v4__action{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-10);width:100%;min-width:0;margin:0;padding-inline:var(--space-4);border:none;background:none;color:var(--brand-dark);text-decoration:none;cursor:pointer;white-space:nowrap}.certificates-v4__action:hover,.certificates-v4__action:focus-visible{color:var(--brand)}.certificates-v4__action span{overflow:hidden;text-overflow:ellipsis}.certificates-v4__action-icon{flex:none}.certificates-v4__notice{display:flex;align-items:flex-start;gap:var(--space-24);width:fit-content;max-width:min(var(--certificates-v4-notice-max-w),100%);padding:var(--space-16);border-radius:var(--radius);background:var(--brand-opacity-20);box-sizing:border-box}.certificates-v4__notice--no-icon{gap:0}.certificates-v4__notice--no-icon .certificates-v4__notice-copy{width:min(var(--certificates-v4-notice-copy-max-w),100%)}.certificates-v4__notice-icon{display:flex;align-items:center;justify-content:center;flex:none;width:26px;min-height:40px;color:var(--brand-dark)}.certificates-v4__notice-icon-svg{display:block}.certificates-v4__notice-icon-img{display:block;width:26px;height:28px;object-fit:contain}.certificates-v4__notice-copy{flex:0 1 auto;width:min(var(--certificates-v4-notice-copy-max-w),calc(100% - 26px - var(--space-24)));max-width:var(--certificates-v4-notice-copy-max-w);min-width:0}.certificates-v4__notice-copy.stack--md{gap:var(--space-16)}.certificates-v4__notice-title{margin:0;color:var(--text-primary)}.certificates-v4__notice-text{margin:0;color:var(--text-secondary)}@media (min-width:769px){.certificates-v4__slider-foot .slider-pagination-host{display:none}.certificates-v4__slider-foot .certificates-v4__pagination.slider-pagination--dots{display:none !important}}@media (max-width:1200px){.certificates-v4{--certificates-v4-card-w:min(537px,calc(100vw - var(--page-gutter) * 2 - var(--space-24)))}.certificates-v4__slider{width:calc(100% + var(--page-gutter));margin-right:calc(-1 * var(--page-gutter));overflow:hidden}}@media (max-width:768px){.certificates-v4{--certificates-v4-card-w:min(537px,calc(100vw - var(--page-gutter) * 2 - var(--space-16)));--certificates-v4-card-min-h:0}.certificates-v4__inner.stack{gap:var(--space-40)}.certificates-v4__slider-foot{gap:var(--space-24)}.certificates-v4__slider-foot .slider-pagination-host{display:flex}.certificates-v4__head{align-items:flex-start}.certificates-v4__nav-wrap{display:none !important}.certificates-v4__card{min-height:0;padding:var(--space-24) var(--space-16)}.certificates-v4__card-main{gap:var(--space-16)}.certificates-v4__preview{width:clamp(88px,28vw,var(--certificates-v4-preview-w));max-width:var(--certificates-v4-preview-w)}.certificates-v4__card-title,.certificates-v4__card-number,.certificates-v4__card-meta{word-break:break-word}.certificates-v4__card-number{word-break:break-all}.certificates-v4__notice{width:100%;max-width:100%}.certificates-v4__notice-copy{width:auto;max-width:none}.certificates-v4__notice-text{max-width:none}}.certificates-v3{box-sizing:border-box;--certificates-v3-grid-gap:calc(var(--space-64) + var(--space-48) + var(--space-24))}.certificates-v3__inner.stack--xl{gap:var(--space-40)}.certificates-v3__head{max-width:1046px}.certificates-v3__head.stack--md{gap:var(--space-24)}.certificates-v3__eyebrow{color:var(--text-muted)}.certificates-v3__title{margin:0;color:var(--text-primary)}.certificates-v3__lead{margin:0;max-width:934px;color:var(--text-secondary)}.certificates-v3__grid{display:grid;grid-template-columns:minmax(280px,425px) minmax(0,1080px);justify-content:space-between;gap:clamp(var(--space-32),8.5vw,var(--certificates-v3-grid-gap));align-items:start}.certificates-v3__sidebar{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));min-width:0;align-self:flex-start}.certificates-v3__sidebar.stack--lg{gap:var(--space-32)}.certificates-v3__filter-select-wrap{display:none;position:relative;width:100%}.certificates-v3__filter-select.field__input{width:100%;min-height:60px;padding:var(--space-12) calc(var(--space-24) + 20px) var(--space-12) var(--space-16);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white-opacity-40);color:var(--text-secondary);cursor:pointer;appearance:none}.certificates-v3__filter-select.field__input:focus{border-color:var(--brand);outline:none}.certificates-v3__filter-select-chevron{position:absolute;top:50%;right:var(--space-16);color:var(--text-secondary);pointer-events:none;transform:translateY(-50%)}.certificates-v3__filters.stack{gap:var(--space-8)}.certificates-v3__filter{display:flex;align-items:center;gap:var(--space-10);width:100%;min-height:66px;padding:var(--space-12) var(--space-8);border:1px solid var(--ui-divider);border-radius:var(--radius);background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer;box-sizing:border-box;transition:background-color .16s ease,border-color .16s ease,color .16s ease}.certificates-v3__filter:hover,.certificates-v3__filter:focus-visible{border-color:var(--brand-border)}.certificates-v3__filter.is-active{border-color:var(--brand-soft);background:var(--brand-opacity-15);color:var(--brand)}.certificates-v3__filter-count{display:flex;align-items:center;justify-content:center;flex:none;width:42px;height:42px;color:inherit}.certificates-v3__filter-main{display:flex;align-items:center;justify-content:space-between;gap:var(--space-10);flex:1 1 auto;min-width:0}.certificates-v3__filter-label{flex:1 1 auto;min-width:0}.certificates-v3__filter-chevron{flex:none;transform:rotate(90deg);color:currentColor}.certificates-v3__cta{padding:var(--space-24) var(--space-16);border-radius:var(--radius);background:var(--brand-opacity-15)}.certificates-v3__cta.stack--lg{gap:var(--space-32)}.certificates-v3__cta-head{display:flex;align-items:flex-start;gap:var(--space-16)}.certificates-v3__cta-head--no-icon{gap:0}.certificates-v3__cta-icon{display:flex;align-items:center;justify-content:center;flex:none;width:69px;height:69px;border-radius:999px;background:var(--white);color:var(--brand-dark)}.certificates-v3__cta-icon-svg{display:block}.certificates-v3__cta-icon-img{display:block;width:34px;height:34px;object-fit:contain}.certificates-v3__cta-copy{flex:1 1 auto;min-width:0}.certificates-v3__cta-copy.stack--sm{gap:var(--space-8)}.certificates-v3__cta-title{margin:0;color:var(--text-primary)}.certificates-v3__cta-text{margin:0;color:var(--text-secondary)}.certificates-v3__cta-btn{width:100%;max-width:392px}.certificates-v3__main{min-width:0;width:100%;max-width:1080px}.certificates-v3__main.stack--xl{gap:var(--space-24)}.certificates-v3__search.field{position:relative;display:block;width:100%}.certificates-v3__search-input.field__input{width:100%;min-height:60px;padding:var(--space-10) calc(var(--space-24) + 40px) var(--space-10) var(--space-24);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:var(--white-opacity-40);color:var(--text-secondary)}.certificates-v3__search-input.field__input::placeholder{color:var(--text-muted)}.certificates-v3__search-icon{position:absolute;top:50%;right:var(--space-8);display:flex;align-items:center;justify-content:center;width:40px;height:40px;transform:translateY(-50%);pointer-events:none}.certificates-v3__search-icon img{display:block;width:24px;height:24px}.certificates-v3__list{display:flex;flex-direction:column;gap:var(--space-16);min-width:0;margin:0;padding:0;list-style:none}.certificates-v3__item.is-hidden,.certificates-v3__item.is-filtered-out{display:none}.certificates-v3__item{min-width:0}.certificates-v3__card{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-24);min-width:0;max-width:100%;padding:var(--space-24) var(--space-16);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.certificates-v3__card-main{display:flex;align-items:flex-start;gap:var(--space-32);flex:1 1 auto;min-width:0}.certificates-v3__preview{flex:none;width:126px;height:178px;overflow:hidden;border-radius:4px;background:var(--text-secondary)}.certificates-v3__preview-img{display:block;width:100%;height:100%;object-fit:cover}.certificates-v3__card-copy{flex:1 1 auto;min-width:0}.certificates-v3__card-copy.stack--md{gap:var(--space-16)}.certificates-v3__card-head{min-width:0}.certificates-v3__card-head.stack--md{gap:var(--space-16)}.certificates-v3__card-title{margin:0;color:var(--text-primary);overflow-wrap:anywhere}.certificates-v3__card-number{margin:0;color:var(--ui-border-default);letter-spacing:-0.01em;text-transform:uppercase;overflow-wrap:anywhere}.certificates-v3__card-meta{margin:0;color:var(--ui-border-default);overflow-wrap:anywhere}.certificates-v3__card-actions{position:relative;flex:none;align-items:flex-start;justify-content:center;padding-block:var(--space-4)}.certificates-v3__card-actions::before{content:none}.certificates-v3__card-actions.stack--lg{gap:var(--space-24)}.certificates-v3__action{display:inline-flex;align-items:center;gap:var(--space-10);margin:0;padding:0;border:none;background:none;color:var(--brand-dark);text-decoration:none;cursor:pointer;white-space:nowrap}.certificates-v3__action:hover,.certificates-v3__action:focus-visible{color:var(--brand)}.certificates-v3__action-icon{flex:none}.certificates-v3__more{align-self:center;min-width:218px}.certificates-v3__more[hidden]{display:none}@media (max-width:1200px){.certificates-v3__grid{grid-template-columns:1fr;gap:var(--space-40)}.certificates-v3__sidebar{position:static;width:100%}.certificates-v3__filter-select-wrap{display:block}.certificates-v3__filters{display:none}.certificates-v3__main{max-width:none;width:100%}}@media (max-width:768px){.certificates-v3__head.stack--md{gap:var(--space-16)}.certificates-v3__sidebar.stack--lg{gap:var(--space-24)}.certificates-v3__cta{max-width:none}.certificates-v3__cta-btn{max-width:none}.certificates-v3__card{flex-direction:column;justify-content:space-between;gap:var(--space-24);min-height:0;padding:var(--space-24) var(--space-16)}.certificates-v3__card-main{flex-direction:row;align-items:flex-start;gap:var(--space-16);width:100%;min-width:0}.certificates-v3__preview{width:clamp(88px,28vw,126px);height:auto;aspect-ratio:126 \/ 178;max-width:126px;flex-shrink:0}.certificates-v3__card-copy{flex:1 1 0;min-width:0;max-width:100%}.certificates-v3__card-title,.certificates-v3__card-number,.certificates-v3__card-meta{word-break:break-word}.certificates-v3__card-number{word-break:break-all}.certificates-v3__card-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:0;width:100%;min-height:52px;padding-block:0}.certificates-v3__card-actions::before{content:\"\";position:absolute;top:50%;left:50%;width:1px;height:43px;background:var(--ui-border-soft);transform:translate(-50%,-50%);pointer-events:none}.certificates-v3__card-actions.stack--lg{gap:0}.certificates-v3__action{justify-content:center;width:100%;min-width:0;padding-inline:var(--space-4)}.certificates-v3__action span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.certificates-v3__more{width:100%;min-width:0}}.vacancies-v3{box-sizing:border-box;--vacancies-v3-copy-max:797px;--vacancies-v3-main-gap:clamp(var(--space-24),18vw,var(--space-40));--vacancies-v3-trigger-gap:clamp(var(--space-24),16vw,296px)}.vacancies-v3__title{margin:0;color:var(--text-primary);scroll-margin-top:calc(var(--site-nav-h,0px) + var(--space-32))}.vacancies-v3__list{display:flex;flex-direction:column;gap:var(--space-16);width:100%;min-width:0}.vacancies-v3__item{border-radius:var(--radius);overflow:hidden}.vacancies-v3__trigger{display:flex;align-items:center;gap:var(--vacancies-v3-trigger-gap);width:100%;padding:var(--space-24) var(--space-10) var(--space-24) var(--space-20);border:0;border-radius:0;background:var(--white-opacity-50);text-align:left;color:var(--text-primary);cursor:pointer;box-sizing:border-box}.vacancies-v3__trigger:disabled{cursor:default}.vacancies-v3__trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.vacancies-v3__main{display:flex;flex:1 1 auto;align-items:center;justify-content:space-between;gap:var(--vacancies-v3-main-gap);min-width:0}.vacancies-v3__copy{flex:1 1 auto;min-width:0;max-width:var(--vacancies-v3-copy-max)}.vacancies-v3__role{color:var(--text-primary)}.vacancies-v3__excerpt{color:var(--text-secondary)}.vacancies-v3__meta{flex:none;gap:var(--space-8);align-items:flex-start;text-align:left;white-space:nowrap;color:var(--text-primary)}.vacancies-v3__salary{color:inherit}.vacancies-v3__employment{color:inherit}.vacancies-v3__action{display:flex;align-items:center;justify-content:center;flex:none;width:64px;height:64px;color:var(--brand)}.vacancies-v3__action-icon{display:block;transform:rotate(0deg);transition:transform .24s ease,color .16s ease}.vacancies-v3__item.is-open .vacancies-v3__action-icon{transform:rotate(180deg)}.vacancies-v3__trigger:hover .vacancies-v3__action,.vacancies-v3__trigger:focus-visible .vacancies-v3__action{color:var(--brand-dark)}.vacancies-v3__panel{overflow:hidden;background:var(--white-opacity-50);border-top:1px solid var(--ui-border-strong);opacity:0;transform:translateY(-6px);transition:height .26s ease,opacity .26s ease,transform .26s ease;will-change:height}.vacancies-v3__panel.is-open{opacity:1;transform:translateY(0)}.vacancies-v3__panel-inner{display:flex;flex-direction:column;gap:var(--space-20);padding:var(--space-16) var(--space-10) var(--space-40) var(--space-20);color:var(--text-primary)}.vacancies-v3__panel-title{margin:0;color:inherit}.vacancies-v3__panel-list{margin:0 0 0 var(--space-16);padding-left:var(--space-24);list-style-position:outside;color:inherit}.vacancies-v3__panel-list:not(.vacancies-v3__panel-list--ol){list-style-type:disc}.vacancies-v3__panel-list--ol{list-style-type:decimal}.vacancies-v3__panel-li{margin:0;padding-left:var(--space-4)}.vacancies-v3__panel-li::marker{color:var(--brand)}.vacancies-v3__panel-note{margin:0;color:inherit}.vacancies-v3__panel-text{margin:0;font-weight:400;color:var(--text-primary);max-width:1147px;line-height:var(--lh-body)}.vacancies-v3__panel-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-40);width:100%}.vacancies-v3__panel-cols{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-24);flex:1 1 auto;min-width:0;max-width:812px}.vacancies-v3__panel-col{display:flex;flex-direction:column;gap:var(--space-16);flex:1 1 345px;min-width:0;max-width:345px}.vacancies-v3__panel-col-title{margin:0;font-weight:400;color:var(--text-primary);line-height:var(--lh-body)}.vacancies-v3__panel-col-list{display:flex;flex-direction:column;gap:var(--space-16);margin:0;padding:0;list-style:none}.vacancies-v3__panel-col-item{display:flex;align-items:flex-start;gap:var(--space-12);margin:0;font-weight:400;color:var(--text-secondary);line-height:var(--lh-body)}.vacancies-v3__panel-col-dot{width:10px;height:10px;margin-top:0.45em;border-radius:999px;background:var(--brand);flex:none}.vacancies-v3__panel-aside{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:var(--space-40);flex:none}.vacancies-v3__panel-location{display:flex;flex-direction:column;gap:var(--space-8)}.vacancies-v3__panel-city{margin:0;font-weight:600;color:var(--text-primary);line-height:var(--lh-body)}.vacancies-v3__panel-address{margin:0;font-weight:400;color:var(--text-primary);line-height:var(--lh-body)}.vacancies-v3__apply{min-width:260px;min-height:54px;padding:var(--space-14) var(--space-32)}@media (max-width:1280px){.vacancies-v3__panel-foot,.vacancies-v3__panel-cols{flex-direction:column;align-items:stretch}.vacancies-v3__panel-foot{gap:var(--space-24)}.vacancies-v3__panel-cols{flex:none;gap:var(--space-8);max-width:none}.vacancies-v3__panel-col{flex:none;width:100%;max-width:none;gap:var(--space-8)}.vacancies-v3__panel-col-list{gap:var(--space-8)}.vacancies-v3__panel-aside{gap:var(--space-16)}}@media (max-width:1200px){.vacancies-v3{--vacancies-v3-trigger-gap:var(--space-24);--vacancies-v3-main-gap:var(--space-32)}}@media (max-width:768px){.vacancies-v3__trigger{flex-direction:column;align-items:stretch;gap:var(--space-16);padding:var(--space-16)}.vacancies-v3__main{flex-direction:column;align-items:flex-start;gap:var(--space-16)}.vacancies-v3__copy{max-width:none}.vacancies-v3__meta{white-space:normal}.vacancies-v3__action{align-self:flex-end;width:52px;height:52px}.vacancies-v3__panel-inner{padding:var(--space-16)}.vacancies-v3__apply{width:100%;min-width:0}}@media (prefers-reduced-motion:reduce){.vacancies-v3__panel,.vacancies-v3__action-icon{transition:none}}.cta-v5{box-sizing:border-box}.cta-v5__card{position:relative;overflow:hidden;min-height:492px;border-radius:var(--radius);box-sizing:border-box}.cta-v5__bg{position:absolute;inset:0;z-index:0;pointer-events:none}.cta-v5__bg img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;opacity:.4}.cta-v5__bg::after{content:\"\";position:absolute;inset:0;z-index:2;background:linear-gradient(90deg,var(--white-opacity-40),var(--bg-fill-filter-widget))}.cta-v5__inner{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,676px) minmax(0,812px);gap:var(--space-64);align-items:center;justify-content:space-between;min-height:492px;padding:var(--space-48) var(--space-56);box-sizing:border-box}.cta-v5__copy{min-width:0;max-width:676px}.cta-v5__eyebrow.eyebrow{color:var(--brand);width:fit-content}.cta-v5__title{margin:0;color:var(--text-primary)}.cta-v5__lead{margin:0;color:var(--text-secondary)}.cta-v5__form{min-width:0;width:100%}.cta-v5__fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:var(--space-16)}.cta-v5__field{min-width:0}.cta-v5__input.field__input{min-height:54px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.cta-v5__file{grid-column:1 \/ -1;position:relative;min-width:0;cursor:pointer}.cta-v5__file-input{position:absolute;inset:0;z-index:2;width:100%;height:100%;opacity:0;cursor:pointer}.cta-v5__file-face.field__input{display:flex;align-items:flex-start;gap:var(--space-10);min-height:82px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.cta-v5__file-icon{flex:none;width:24px;height:24px;background:var(--text-muted);-webkit-mask:var(--cta-v5-clip-src) center \/ 13px 20px no-repeat;mask:var(--cta-v5-clip-src) center \/ 13px 20px no-repeat}.cta-v5__file-text{min-width:0;color:var(--text-muted)}.cta-v5__foot{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-16) var(--space-24);margin-top:var(--space-16)}.cta-v5__consent{flex:1 1 17rem;min-width:min(100%,17rem);max-width:430px}.cta-v5__consent .popup-form__consent-text{color:var(--text-muted)}.cta-v5__submit{flex:none;width:min(350px,100%);min-height:54px;margin-left:auto}@media (max-width:1600px){.cta-v5__inner{gap:var(--space-40);padding:var(--space-40) var(--space-48)}}@media (max-width:1200px){.cta-v5__card{min-height:0}.cta-v5__inner{grid-template-columns:1fr;gap:var(--space-32);min-height:0;padding:var(--space-40) var(--space-24)}.cta-v5__copy{max-width:none}.cta-v5__fields{grid-template-columns:repeat(2,minmax(0,1fr))}.cta-v5__foot{flex-direction:column;align-items:stretch;justify-content:flex-start}.cta-v5__consent{flex:none;min-width:0;max-width:none}.cta-v5__submit{width:100%;margin-left:0}}@media (max-width:768px){.cta-v5__inner{padding:var(--space-32) var(--space-16)}.cta-v5__fields{grid-template-columns:1fr}}.cases-v4__img{aspect-ratio:26 \/ 17}.cases-v4{box-sizing:border-box}.cases-v4__inner.stack--xl{gap:var(--space-40)}.cases-v4__head.stack--md{gap:var(--space-24);max-width:920px}.cases-v4__eyebrow{color:var(--text-muted)}.cases-v4__title{margin:0;color:var(--text-primary)}.cases-v4__body.stack--md{gap:var(--space-24)}.cases-v4__filters{display:flex;flex-wrap:wrap;gap:19px;align-items:flex-start}.cases-v4__chip{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-10);padding:var(--space-12) var(--space-18);min-height:48px;border-radius:var(--radius-xl);border:1px solid var(--brand-border);background:var(--white);color:var(--text-secondary);cursor:pointer;user-select:none;transition:transform .16s ease,background-color .16s ease,border-color .16s ease,color .16s ease}.cases-v4__chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.cases-v4__chip.is-active{background:var(--brand-light);border-color:transparent;color:var(--white)}.cases-v4__chip.is-active .cases-v4__chip-icon{filter:brightness(0) invert(1)}.cases-v4__chip:not(.is-active) .cases-v4__chip-icon{filter:none}.cases-v4__chip.is-pressed{transform:scale(.98)}.cases-v4__chip-icon{display:block;flex:none;width:24px;height:24px;transition:filter .16s ease}.cases-v4__chip--no-icon{gap:0}.cases-v4__chip-label{color:inherit}.cases-v4__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-40);width:100%}.cases-v4__item{min-width:0}.cases-v4__item[hidden]{display:none}.cases-v4__card{display:flex;flex-direction:column;gap:var(--space-24);width:100%}.cases-v4__media{--cases-v4-reveal:50%;position:relative;width:100%;aspect-ratio:26 \/ 17;overflow:hidden;border-radius:var(--radius);background:var(--bg-fill-panel);user-select:none}.cases-v4__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.cases-v4__img--after{z-index:0}.cases-v4__img--before{z-index:1;clip-path:inset(0 calc(100% - var(--cases-v4-reveal)) 0 0);transition:filter .2s ease}.cases-v4__media.is-blurred .cases-v4__img--before{filter:blur(5px)}.cases-v4__divider{position:absolute;top:0;bottom:0;left:var(--cases-v4-reveal);width:1px;background:var(--bg-fill-surface);opacity:1;transform:translateX(-.5px);z-index:2}.cases-v4__badge{position:absolute;top:var(--space-18);padding:var(--space-6) var(--space-10);border-radius:var(--radius-sm);background:var(--dark-opacity-20);color:var(--white);z-index:3}.cases-v4__badge--before{left:var(--space-18)}.cases-v4__badge--after{right:var(--space-18)}.cases-v4__handle{position:absolute;left:var(--cases-v4-reveal);top:50%;width:86px;height:86px;transform:translate(-50%,-50%);padding:0;border:0;border-radius:var(--radius-full);background:transparent;cursor:grab;touch-action:none;z-index:4}.cases-v4__handle:active{cursor:grabbing}.cases-v4__handle:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.cases-v4__handle img{display:block;width:100%;height:100%;pointer-events:none}@media (max-width:1600px){.cases-v4__handle{width:60px;height:60px}.cases-v4__badge{top:var(--space-12);padding:var(--space-4) var(--space-8);font-size:var(--text-body-md)}.cases-v4__badge--before{left:var(--space-12)}.cases-v4__badge--after{right:var(--space-12)}}.cases-v4__card-body{min-width:0}.cases-v4__card-title{margin:0;color:var(--text-primary)}.cases-v4__card-text{margin:0;color:var(--text-primary)}.cases-v4__more-row{display:flex;justify-content:center}.cases-v4__more{min-width:218px}.cases-v4__more[hidden]{display:none !important}@media (max-width:1200px){.cases-v4__grid{grid-template-columns:repeat(2,minmax(0,1fr))}.cases-v4__filters{flex-wrap:nowrap;overflow-x:auto;padding-bottom:var(--space-10);-webkit-overflow-scrolling:touch}.cases-v4__chip{flex:none}}@media (max-width:768px){.cases-v4__grid{grid-template-columns:minmax(0,1fr);gap:var(--space-24)}.cases-v4__filters{width:calc(100% + var(--page-gutter));margin-right:calc(var(--page-gutter) * -1);padding-right:var(--page-gutter)}.cases-v4__badge{top:var(--space-12)}.cases-v4__badge--before{left:var(--space-12)}.cases-v4__badge--after{right:var(--space-12)}}.cta-v2--fullwidth .cta-v2__bg > picture > img{aspect-ratio:2 \/ 1}.cta-v2{box-sizing:border-box}.cta-v2--fullwidth .cta-v2__bg img{object-position:center right}.cta-v2--fullwidth .cta-v2__inner{padding:var(--space-64) 0 calc(var(--space-64) + var(--space-32))}.cta-v2__card{position:relative;display:flex;flex-direction:column;overflow:hidden;min-height:695px;border-radius:var(--radius);box-sizing:border-box}.cta-v2__bg{position:absolute;inset:0;z-index:0;pointer-events:none}.cta-v2__bg::after{content:\"\";position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,var(--white-opacity-75) 0%,var(--white-opacity-75) 42%,transparent 68%)}.cta-v2__bg picture{display:block;width:100%;height:100%}.cta-v2__bg img{display:block;width:100%;height:100%;object-fit:cover;object-position:center right}.cta-v2__inner{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-40);min-height:695px;padding:var(--space-48) 87px;box-sizing:border-box}.cta-v2__intro,.cta-v2__lead,.cta-v2__features{max-width:70%;width:100%}.cta-v2__eyebrow.eyebrow{color:var(--brand);width:fit-content}.cta-v2__title{margin:0;color:var(--text-primary)}.cta-v2__lead{margin:0;color:var(--text-secondary)}.cta-v2__features{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:var(--space-32);align-items:center}.cta-v2__feature{display:flex;gap:var(--space-16);align-items:center}.cta-v2__feature--no-icon{gap:0}.cta-v2__feature-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex:none;border-radius:var(--radius-full);background:var(--brand-opacity-20)}.cta-v2__feature-icon img{display:block;width:24px;height:24px}.cta-v2__feature-text{display:block;max-width:234px;color:var(--text-primary)}.cta-v2__form{width:100%;max-width:720px}.cta-v2__form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-16);width:100%}.cta-v2__field{position:relative;min-width:0}.cta-v2__input.field__input{min-height:54px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.cta-v2__select{appearance:none;-webkit-appearance:none;padding-right:52px;cursor:pointer}.cta-v2__select:disabled{cursor:default}.cta-v2__select-icon{position:absolute;right:20px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.cta-v2__submit{min-height:54px;padding:var(--space-14) var(--space-32);width:100%}.cta-v2__consent{margin-top:var(--space-16)}.cta-v2__consent .popup-form__consent-text{color:var(--text-muted)}@media (max-width:1200px){.cta-v2__card,.cta-v2__inner{min-height:0}.cta-v2__inner{padding:var(--space-48) var(--space-24);gap:var(--space-32)}}@media (max-width:768px){.cta-v2__card{min-height:0}.cta-v2__inner{min-height:0;padding:var(--space-40) 0 var(--space-24);gap:var(--space-16)}.cta-v2__intro,.cta-v2__lead,.cta-v2__features{max-width:100%}.cta-v2__form-grid{grid-template-columns:1fr}.cta-v2__features{flex-direction:column;align-items:flex-start;gap:var(--space-16)}.cta-v2__feature-text{max-width:none}.cta-v2__bg{position:relative;inset:auto;z-index:0;height:281px;flex:none}.cta-v2__bg::after{display:none}.cta-v2__bg img{object-position:72% 40%}.cta-v2--fullwidth{display:flex;flex-direction:column}.cta-v2--fullwidth .cta-v2__bg.block-bg{position:relative;inset:auto;order:2;height:281px}.cta-v2--fullwidth .container{order:1}}.news-article-v1{box-sizing:border-box;--news-article-v1-main-max:1080px;--news-article-v1-aside-w:493px;--news-article-v1-gap:60px}.news-article-v1__layout{display:grid;grid-template-columns:minmax(0,1fr) var(--news-article-v1-aside-w);gap:var(--space-24);align-items:start}.news-article-v1__main{min-width:0;max-width:var(--news-article-v1-main-max);display:flex;flex-direction:column;gap:var(--news-article-v1-gap)}.news-article-v1__content{display:flex;flex-direction:column;gap:var(--news-article-v1-gap)}.news-article-v1__aside{position:sticky;top:var(--space-24);align-self:start;width:100%;min-width:0}.news-article-v1__toc-title{margin:0;color:var(--text-secondary);font-family:var(--font-heading);font-weight:var(--font-weight-heading);text-transform:uppercase;letter-spacing:-0.01em}.news-article-v1__toc-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-16)}.news-article-v1__toc-link{display:flex;gap:9px;align-items:center;text-decoration:none;color:inherit}.news-article-v1__toc-num{flex:none;color:var(--brand);font-weight:600;line-height:1.4}.news-article-v1__toc-label{color:var(--text-secondary);line-height:1.3}.news-article-v1__toc-link:hover .news-article-v1__toc-label{color:var(--text-primary)}.news-article-v1__heading{display:flex;flex-direction:column;gap:var(--space-8);align-items:flex-start}.news-article-v1__title{margin:0;color:var(--text-primary)}.news-article-v1__rule{display:block;width:57px;height:4px;background:var(--brand-light)}.news-article-v1__p{margin:0;color:var(--text-secondary)}.news-article-v1__cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24)}.news-article-v1__media-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24);align-items:start}.news-article-v1__figure{margin:0}.news-article-v1__figure-frame{border-radius:var(--radius);overflow:hidden;background:var(--bg-fill-soft)}.news-article-v1__figure-img{display:block;width:100%;height:auto;object-fit:cover}.news-article-v1__caption{margin-top:var(--space-14);color:var(--text-secondary)}.news-article-v1__list-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24)}.news-article-v1__list-card{border-radius:var(--radius);padding:var(--space-32);box-sizing:border-box;min-height:260px}.news-article-v1__list-card--danger{background:var(--white-opacity-50)}.news-article-v1__list-card--ok{background:var(--brand-border)}.news-article-v1__list-card-head{display:flex;align-items:center;gap:var(--space-16);margin-bottom:var(--space-28)}.news-article-v1__list-card-icon{flex:none;width:36px;height:36px}.news-article-v1__list-card-icon img{display:block;width:100%;height:100%;object-fit:contain}.news-article-v1__list-card-title{margin:0;color:var(--text-secondary);font-weight:600}.news-article-v1__list-card-wysiwyg ul{margin:0;padding-left:calc(36px + var(--space-16));gap:var(--space-8)}.news-article-v1__list-card-wysiwyg ul li::before{top:calc(0.5lh - 5px)}.news-article-v1__list-card--danger .news-article-v1__list-card-wysiwyg ul li::before{background:var(--promo-accent)}.news-article-v1__table-wrap{width:100%}.news-article-v1__table-wrap table{margin:0;min-width:640px}.news-article-v1__quote{margin:0;display:flex;gap:var(--space-24);align-items:center;padding:var(--space-16);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--brand-opacity-15);box-sizing:border-box}.news-article-v1__quote-photo{flex:none;width:185px;height:185px;border-radius:var(--radius-full);object-fit:cover}.news-article-v1__quote-body{min-width:0;display:flex;gap:var(--space-14);align-items:flex-start;flex:1 1 auto}.news-article-v1__quote-mark{flex:none;color:var(--brand)}.news-article-v1__quote-main{min-width:0}.news-article-v1__quote-text{margin:0;color:var(--text-primary)}.news-article-v1__quote-foot{display:flex;flex-direction:column;gap:var(--space-8)}.news-article-v1__quote-author{font-style:normal;color:var(--text-primary)}.news-article-v1__quote-role{color:var(--text-muted)}.news-article-v1__steps{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-24)}.news-article-v1__step{display:grid;grid-template-columns:100px minmax(0,1fr);gap:var(--space-16);align-items:start}.news-article-v1__step-badge{display:inline-flex;align-items:center;justify-content:center;min-height:37px;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);background:var(--brand-opacity-20);color:var(--brand-dark);font-weight:600;white-space:nowrap;box-sizing:border-box;width:fit-content}.news-article-v1__step-title{margin:0;color:var(--text-primary);font-weight:600}.news-article-v1__step-text{margin:0;color:var(--text-secondary)}.news-article-v1__step-body.stack--sm{gap:11px}.news-article-v1__features{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24)}.news-article-v1__feature{display:flex;gap:var(--space-24);align-items:flex-start;padding:18px 22px;border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box}.news-article-v1__feature-icon{flex:none;display:flex;align-items:center;justify-content:center;width:62px;height:62px;border-radius:var(--radius-full);background:var(--white);overflow:hidden}.news-article-v1__feature-icon img{display:block;width:35px;height:35px;object-fit:contain}.news-article-v1__feature-title{margin:0;color:var(--text-primary);font-weight:600}.news-article-v1__feature-text{margin:0;color:var(--text-secondary)}.news-article-v1__warning{display:flex;gap:var(--space-56);align-items:center;padding:var(--space-24) var(--space-32);border:1px solid var(--promo-accent);border-radius:var(--radius);background:transparent;box-sizing:border-box}.news-article-v1__warning-icon{flex:none;display:flex;align-items:center;justify-content:center;width:85px;height:85px;border-radius:var(--radius-full);background:color-mix(in srgb,var(--promo-accent) 20%,transparent)}.news-article-v1__warning-icon img{display:block;width:34px;height:34px;object-fit:contain}.news-article-v1__warning-title{margin:0;color:var(--promo-accent);font-family:var(--font-heading);font-weight:var(--font-weight-heading)}.news-article-v1__warning-text{margin:0;color:var(--text-secondary)}.news-article-v1__facts{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-16)}.news-article-v1__fact{display:flex;align-items:center;gap:var(--space-16);padding:var(--space-18) var(--space-22);border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box}.news-article-v1__fact-value{flex:none;width:92px;margin:0;color:var(--brand);font-family:var(--font-heading);font-weight:var(--font-weight-heading);letter-spacing:-0.04em}.news-article-v1__fact-text{margin:0;padding-left:var(--space-16);border-left:1px solid var(--ui-divider);color:var(--text-secondary)}.news-article-v1__form-card{position:relative;display:grid;grid-template-columns:89px minmax(0,1fr);column-gap:34px;align-items:start;min-height:277px;padding:40px 31px;border-radius:var(--radius);background:var(--bg-fill-soft);overflow:hidden;box-sizing:border-box}.news-article-v1__form-card--no-icon{grid-template-columns:minmax(0,1fr);column-gap:0}.news-article-v1__form-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:bottom right;pointer-events:none;z-index:0;border-radius:inherit}.news-article-v1__form-icon{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:89px;height:89px;flex:none;border-radius:var(--radius-full);background:var(--white);box-sizing:border-box}.news-article-v1__form-icon-img{display:block;width:47px;height:40px;object-fit:contain}.news-article-v1__form-main{position:relative;z-index:1;min-width:0;display:flex;flex-direction:column;gap:17px}.news-article-v1__form-copy{display:flex;flex-direction:column;gap:17px;max-width:750px}.news-article-v1__form-eyebrow{margin:0;color:var(--brand)}.news-article-v1__form-title{margin:0;color:var(--text-secondary);font-weight:500}.news-article-v1__form{display:flex;flex-direction:column;gap:var(--space-24)}.news-article-v1__form-row{display:grid;grid-template-columns:minmax(0,1.21fr) minmax(0,1.21fr) minmax(0,1fr);gap:var(--space-16);align-items:center}.news-article-v1__form-row > *{min-width:0}.news-article-v1__field{display:block;width:100%;max-width:298px}.news-article-v1__input{width:100%;height:54px;min-height:54px;background:var(--white-opacity-50);border-color:var(--ui-border-strong)}.news-article-v1__form-submit{white-space:nowrap;height:54px;min-height:54px;width:100%;max-width:246px;padding-inline:var(--space-24);box-sizing:border-box}.news-article-v1__consent{margin:0}.news-article-v1__related{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24)}.news-article-v1__related-card{display:flex;gap:var(--space-28);align-items:center;text-decoration:none;color:inherit}.news-article-v1__related-icon{flex:none;display:flex;align-items:center;justify-content:center;width:88px;height:88px;border-radius:var(--radius-full);background:var(--bg-fill-panel)}.news-article-v1__related-icon img{width:38px;height:38px;object-fit:contain}.news-article-v1__related-body{display:flex;flex-direction:column;gap:var(--space-12);min-width:0}.news-article-v1__related-title{color:var(--text-primary);font-weight:600}.news-article-v1__related-link{display:inline-flex;align-items:center;gap:var(--space-8);color:var(--text-secondary)}.news-article-v1__related-chevron{transform:rotate(-90deg);color:currentColor}.news-article-v1__related-card:hover .news-article-v1__related-link{color:var(--brand)}.news-article-v1__video{position:relative;border-radius:var(--radius);overflow:hidden;min-height:249px;display:flex;align-items:center}.news-article-v1__video::before{content:\"\";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(90deg,var(--bg-fill-surface) 0%,var(--white-opacity-75) 42%,transparent 72%)}.news-article-v1__video-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:right center}.news-article-v1__video-content{position:relative;z-index:2;max-width:545px;margin-left:var(--space-56);padding:var(--space-48) 0;display:flex;flex-direction:column;gap:22px}.news-article-v1__video-title{margin:0;color:var(--brand)}.news-article-v1__video-lead{margin:0;color:var(--text-secondary);font-weight:500}.news-article-v1__video-cta{display:inline-flex;align-items:center;gap:var(--space-20);padding:0;border:0;background:transparent;cursor:pointer;text-align:left}.news-article-v1__video-play{flex:none}.news-article-v1__play-surface{position:relative;display:flex;align-items:center;justify-content:center;width:48px;height:48px;box-sizing:border-box;border:none;border-radius:var(--radius-full);background:transparent;backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-on-brand)}.news-article-v1__play-surface::before{content:\"\";position:absolute;inset:0;border:5px solid var(--brand-opacity-15);border-radius:var(--radius-full);background:transparent;pointer-events:none;transition:transform .16s ease}.news-article-v1__play-bg{position:absolute;inset:5px;border-radius:var(--radius-full);background:var(--brand-opacity-40);transition:transform .16s ease}.news-article-v1__play-icon{position:absolute;inset:0;z-index:1;display:block;width:9px;height:10px;margin:auto;overflow:visible;pointer-events:none}.news-article-v1__video-cta-label{color:var(--text-primary);font-weight:600;max-width:160px}.news-article-v1__video-cta:hover .news-article-v1__play-surface::before,.news-article-v1__video-cta:focus-visible .news-article-v1__play-surface::before,.news-article-v1__video-cta:hover .news-article-v1__play-bg,.news-article-v1__video-cta:focus-visible .news-article-v1__play-bg{transform:scale(1.04)}.news-article-v1__gallery{min-width:0;overflow:hidden;width:100%}.news-article-v1__gallery .swiper-slide{height:auto}.news-article-v1__gallery-open{display:block;width:100%;padding:0;border:0;background:none;cursor:pointer;text-align:left;border-radius:var(--radius)}.news-article-v1__gallery-open:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.news-article-v1__gallery-slide{display:block;border-radius:var(--radius);overflow:hidden;background:var(--bg-fill-soft)}.news-article-v1__gallery-img{display:block;width:100%;height:auto;aspect-ratio:500 \/ 330;object-fit:cover;vertical-align:top}.news-article-v1__gallery-controls{max-width:603px;margin-inline:auto}.news-article-v1__gallery-controls .slider-nav__btn{width:44px;height:44px}.news-article-v1__gallery-controls .slider-nav__btn--next .icon{transform:scaleX(-1)}.news-article-v1__pager{display:flex;justify-content:space-between;gap:var(--space-24);padding-top:var(--space-32);border-top:1px solid var(--ui-border-soft)}.news-article-v1__pager-link{display:flex;align-items:center;gap:var(--space-24);text-decoration:none;color:inherit;max-width:48%;min-width:0}.news-article-v1__pager-img{flex:none;display:block;width:114px;height:114px;border-radius:var(--radius);overflow:hidden}.news-article-v1__pager-img img{display:block;width:100%;height:100%;object-fit:cover}.news-article-v1__pager-arrow{flex:none;width:48px;height:48px;pointer-events:none}.news-article-v1__pager-link--next .news-article-v1__pager-arrow .icon{transform:scaleX(-1)}.news-article-v1__pager-copy{display:flex;flex-direction:column;gap:var(--space-16);min-width:0}.news-article-v1__pager-label{color:var(--brand-dark);text-transform:uppercase;font-weight:600;letter-spacing:-0.01em}.news-article-v1__pager-title{color:var(--text-primary);font-weight:600}.news-article-v1__pager-link--next{text-align:right}.news-article-v1__pager-link--next .news-article-v1__pager-copy{align-items:flex-end}.news-article-v1__doctor{display:flex;flex-direction:column;gap:var(--space-24);align-items:center;padding:0 0 var(--space-40);border-radius:var(--radius);background:var(--white);overflow:hidden;box-sizing:border-box;width:100%}.news-article-v1__doctor-top{display:flex;gap:var(--space-56);align-items:center;width:100%;padding:var(--space-28) var(--space-24);border-bottom:1px solid var(--ui-border-default);box-sizing:border-box}.news-article-v1__doctor-photo{flex:none;width:160px;height:160px;border-radius:var(--radius-full);object-fit:cover}.news-article-v1__doctor-meta{flex:1 1 auto;min-width:0;gap:var(--space-8)}.news-article-v1__doctor-name{margin:0;color:var(--text-primary);font-weight:600}.news-article-v1__doctor-role,.news-article-v1__doctor-exp{margin:0;color:var(--text-muted)}.news-article-v1__doctor-schedule{display:flex;gap:var(--space-24);align-items:center;padding:0 var(--space-24);width:auto;box-sizing:border-box;align-self:flex-start;margin-left:var(--space-24)}.news-article-v1__doctor-cal{display:flex;align-items:center;justify-content:center;width:59px;height:59px;border-radius:var(--radius-full);background:var(--brand-opacity-20);color:var(--brand);flex:none}.news-article-v1__doctor-hours{margin:0;color:var(--text-primary)}.news-article-v1__doctor-cta{width:auto;max-width:calc(100% - 48px);margin:0 auto;box-sizing:border-box}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width:1600px){.news-article-v1{--news-article-v1-aside-w:360px;--news-article-v1-gap:48px}.news-article-v1__doctor-photo{width:120px;height:120px}.news-article-v1__doctor-top{gap:var(--space-24);padding:var(--space-24) var(--space-20)}.news-article-v1__doctor-schedule{gap:var(--space-16);margin-left:var(--space-16);padding:0 var(--space-16)}.news-article-v1__doctor-cal{width:48px;height:48px}.news-article-v1__doctor-cta{max-width:calc(100% - 32px)}.news-article-v1__quote{gap:var(--space-20)}.news-article-v1__quote-photo{width:140px;height:140px}.news-article-v1__form-card{min-height:0;grid-template-columns:72px minmax(0,1fr);column-gap:var(--space-24);padding:var(--space-32) var(--space-24)}.news-article-v1__form-icon{width:72px;height:72px}.news-article-v1__form-icon-img{width:38px;height:32px}.news-article-v1__form-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.news-article-v1__form-submit{grid-column:1 \/ -1;max-width:none;width:100%}.news-article-v1__field{max-width:none}.news-article-v1__warning{gap:var(--space-24);padding:var(--space-20) var(--space-24)}.news-article-v1__video-content{margin-left:var(--space-24);max-width:min(100%,520px)}.news-article-v1__fact-value{width:80px}.news-article-v1__table-wrap table{min-width:520px}}@media (max-width:1200px){.news-article-v1{--news-article-v1-gap:48px}.news-article-v1__layout{grid-template-columns:1fr}.news-article-v1__main{max-width:none}.news-article-v1__aside{position:static;order:-1;max-width:none;width:100%}.news-article-v1__doctor{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,280px);grid-template-rows:auto auto;column-gap:var(--space-32);row-gap:var(--space-16);align-items:center;padding:var(--space-24) var(--space-28)}.news-article-v1__doctor-top{grid-column:1;grid-row:1 \/ span 2;align-self:center;border-bottom:0;padding:0;gap:var(--space-24)}.news-article-v1__doctor-photo{width:120px;height:120px}.news-article-v1__doctor-schedule{grid-column:2;grid-row:1;margin:0;padding:0;align-self:end}.news-article-v1__doctor-cta{grid-column:2;grid-row:2;width:100%;max-width:none;margin:0;align-self:start}.news-article-v1__features,.news-article-v1__list-cards,.news-article-v1__cols,.news-article-v1__media-row,.news-article-v1__related{grid-template-columns:1fr}.news-article-v1__form-card{padding:var(--space-32) var(--space-24)}.news-article-v1__video-content{margin-left:var(--space-32);max-width:min(100%,480px)}}@media (max-width:992px){.news-article-v1__doctor{display:flex;flex-direction:column;align-items:stretch;gap:var(--space-24);padding:var(--space-24)}.news-article-v1__doctor-top{grid-column:auto;grid-row:auto;border-bottom:1px solid var(--ui-border-default);padding:0 0 var(--space-24);gap:var(--space-24)}.news-article-v1__doctor-schedule{grid-column:auto;grid-row:auto;margin:0;padding:0;align-self:flex-start}.news-article-v1__doctor-cta{grid-column:auto;grid-row:auto;width:100%;max-width:none;margin:0}.news-article-v1__quote{flex-direction:column;align-items:flex-start}.news-article-v1__step{grid-template-columns:1fr}}@media (max-width:768px){.news-article-v1{--news-article-v1-gap:40px}.news-article-v1__doctor{display:flex;flex-direction:column;align-items:center;gap:var(--space-24);padding:0 0 var(--space-32)}.news-article-v1__doctor-top{grid-column:auto;grid-row:auto;flex-direction:column;text-align:center;gap:var(--space-16);width:100%;padding:var(--space-24) var(--space-16);border-bottom:1px solid var(--ui-border-default)}.news-article-v1__doctor-photo{width:120px;height:120px}.news-article-v1__doctor-meta{align-items:center}.news-article-v1__doctor-schedule{grid-column:auto;grid-row:auto;margin-left:0;align-self:center;padding:0 var(--space-16)}.news-article-v1__doctor-cta{grid-column:auto;grid-row:auto;width:calc(100% - 32px);max-width:none;margin:0 auto}.news-article-v1__quote{flex-direction:column;align-items:flex-start;padding:var(--space-16);gap:var(--space-16)}.news-article-v1__quote-photo{width:120px;height:120px}.news-article-v1__step{grid-template-columns:1fr;gap:var(--space-12)}.news-article-v1__warning{flex-direction:column;align-items:flex-start;gap:var(--space-16);padding:var(--space-20)}.news-article-v1__warning-icon{width:56px;height:56px}.news-article-v1__form-card{grid-template-columns:1fr;min-height:0;padding:var(--space-24);column-gap:0;row-gap:var(--space-16)}.news-article-v1__form-row{grid-template-columns:1fr}.news-article-v1__form-submit{max-width:none}.news-article-v1__video-content{margin-left:0;padding:var(--space-24);max-width:100%}.news-article-v1__video::before{background:linear-gradient(180deg,var(--bg-fill-surface) 0%,var(--white-opacity-50) 55%,transparent 100%)}.news-article-v1__video{min-height:320px}.news-article-v1__related{grid-template-columns:1fr}.news-article-v1__gallery-controls{max-width:100%}.news-article-v1__pager{flex-direction:column}.news-article-v1__pager-link{max-width:100%}.news-article-v1__pager-link--next{text-align:left}.news-article-v1__pager-link--next .news-article-v1__pager-copy{align-items:flex-start}.news-article-v1__fact-value{width:auto;min-width:72px}.news-article-v1__feature{padding:var(--space-16)}.news-article-v1__table-wrap table{min-width:480px}}.contacts-v1__info-panel{display:contents}.contacts-v1__info-panel[hidden],.contacts-v1__directions[hidden]{display:none}.contacts-v1{box-sizing:border-box;max-width:100%;min-width:0;overflow-x:hidden;overflow-x:clip;--contacts-v1-inset:140px;--contacts-v1-map-height:635px;--contacts-v1-map-card-inset-y:var(--space-64);--contacts-v1-map-card-width:517px;--contacts-v1-branch-tab-min-width:210px;--contacts-v1-card-min-width:300px}.contacts-v1__branches-inner{padding:var(--space-40) var(--contacts-v1-inset) var(--space-20);box-sizing:border-box}.contacts-v1__branches-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);margin-bottom:var(--space-24)}.contacts-v1__branches-title{margin:0;color:var(--text-primary)}.contacts-v1__branches-nav{flex:none}.contacts-v1__branches-grid{display:flex;gap:38px;align-items:stretch}.contacts-v1__branches-slider.swiper{overflow:hidden}.contacts-v1__branches-slider .swiper-wrapper{align-items:stretch}.contacts-v1__branches-slider .swiper-slide{display:flex;height:auto;align-self:stretch}.contacts-v1__branches-slider .swiper-slide > .contacts-v1__branch{flex:1 1 auto;width:100%}.contacts-v1__branches-foot{margin-top:var(--space-24)}.contacts-v1__branch{position:relative;display:flex;gap:var(--space-24);align-items:stretch;width:100%;min-height:0;padding:22px 26px;border:1px solid var(--ui-border-default);border-radius:var(--radius);background:transparent;box-sizing:border-box;text-align:left;cursor:pointer;transition:border-color .16s ease,background-color .16s ease}.contacts-v1__branch-select{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:transparent;opacity:0;pointer-events:none}.contacts-v1__branch:has(.contacts-v1__branch-select:focus-visible){outline:2px solid var(--focus-ring);outline-offset:4px}.contacts-v1__branches-grid .contacts-v1__branch{flex:1 1 0;align-self:stretch;min-width:0}.contacts-v1__branch.is-active{border-color:var(--brand-dark);background:var(--brand-opacity-20)}.contacts-v1__branch-badge{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;flex:none;min-height:37px;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);font-weight:600;line-height:1.4;white-space:nowrap;color:var(--brand-dark);background:var(--brand-opacity-20)}.contacts-v1__branch.is-active .contacts-v1__branch-badge{color:var(--text-on-brand);background:var(--brand)}.contacts-v1__branch-main{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-40);justify-content:flex-start;min-width:0;min-height:0}.contacts-v1__branch-title{display:block;margin:0;padding-top:var(--space-6);font-weight:600;color:var(--text-primary);overflow-wrap:anywhere}.contacts-v1__branch-address{display:block;margin:0;color:var(--text-secondary);overflow-wrap:anywhere}.contacts-v1__branch-status{display:inline-flex;gap:13px;align-items:center}.contacts-v1__branch-status-dot{flex:none;width:8px;height:8px;border-radius:var(--radius-full);background:var(--brand)}.contacts-v1__branch-status-text{margin:0;font-weight:600;line-height:var(--lh-body-tight);color:var(--brand)}.contacts-v1__branch-actions{display:flex;flex-wrap:wrap;gap:var(--space-40);align-items:center;margin-top:auto;padding-top:var(--space-16);border-top:1px solid var(--ui-border-soft)}.contacts-v1__branch-action{display:inline-flex;gap:var(--space-14);align-items:center;color:var(--text-secondary);text-decoration:none}.contacts-v1__branch-action:hover{color:var(--brand-dark)}.contacts-v1__branch-action-icon{display:block;flex:none;width:24px;height:24px;color:var(--brand)}.contacts-v1__branch-action-label{margin:0;font-weight:600;line-height:var(--lh-body-tight)}.contacts-v1__inner{padding:0 var(--contacts-v1-inset) var(--space-40);box-sizing:border-box}.contacts-v1:not(.contacts-v1--has-branches) .contacts-v1__inner{padding-top:var(--space-40)}.contacts-v1__cards{display:grid;grid-template-columns:repeat(3,minmax(0,520px));justify-content:space-between;align-items:stretch;gap:var(--space-40);width:100%;margin:0;padding:0;list-style:none}.contacts-v1__cards-item{display:flex;min-height:0}.contacts-v1__card{display:flex;flex:1 1 auto;width:100%;min-height:100%;gap:var(--space-18);align-items:flex-start;padding:var(--space-16) var(--space-24) var(--space-24);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box}.contacts-v1__icon{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border-radius:var(--radius-pill);background:var(--brand-opacity-20)}.contacts-v1__icon-image{display:block;width:22.5px;height:22.5px;color:var(--brand)}.contacts-v1__body{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-32);justify-content:space-between;min-width:0;min-height:100%}.contacts-v1__content{flex:1 1 auto;min-width:0}.contacts-v1__label{margin:0;font-weight:600;line-height:1;letter-spacing:-0.01em;text-transform:uppercase;color:var(--ui-border-strong)}.contacts-v1__text-group{display:flex;flex-direction:column;gap:13px}.contacts-v1__text{margin:0;color:var(--text-primary)}.contacts-v1__phone{margin:0;color:var(--text-primary);text-decoration:none}.contacts-v1__phone:hover{color:var(--brand-dark)}.contacts-v1__phone-block{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-16);min-height:158px}.contacts-v1__socials{display:flex;gap:var(--space-8);align-items:center}.contacts-v1__social{display:inline-flex;align-items:center;justify-content:center;flex:none;width:54px;height:54px;border-radius:var(--radius-full);background:var(--brand);text-decoration:none;transition:background-color .16s ease}.contacts-v1__social:hover{background:var(--brand-dark)}.contacts-v1__social-logo{display:block;flex:none;width:27px;height:27px;color:var(--text-on-brand)}.contacts-v1__social-logo--tg{width:27px;height:27px}.contacts-v1__action[hidden],.contacts-v1__cards[hidden],.contacts-v1__cards-item[hidden],.contacts-v1__text-group[hidden],.contacts-v1__phone[hidden],.contacts-v1__text[hidden],.contacts-v1__socials[hidden],.contacts-v1__social[hidden],.contacts-v1__hours[hidden]{display:none !important}.contacts-v1__action{align-self:stretch;margin:0;margin-top:auto;padding-block:var(--space-4);padding-top:var(--space-16);border:0;border-top:1px solid var(--ui-border-soft);background:none;font:inherit;color:var(--text-secondary);cursor:pointer}.contacts-v1__action:hover{color:var(--brand-dark)}.contacts-v1__hours{display:flex;flex-direction:column;gap:0;margin:0}.contacts-v1__hours-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-16);padding-top:var(--space-16);border-top:1px solid var(--ui-border-soft)}.contacts-v1__hours-row:first-child{padding-top:0;border-top:0}.contacts-v1__hours-label,.contacts-v1__hours-value{margin:0;color:var(--text-primary)}.contacts-v1__hours-value{text-align:right}.contacts-v1__map{width:100%;max-width:100%;min-width:0;margin-inline:0;box-sizing:border-box}.contacts-v1__map-stage{position:relative;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);height:var(--contacts-v1-map-height,635px);overflow:hidden}.contacts-v1__map-canvas{grid-area:1 \/ 1;z-index:1;width:100%;min-width:0;min-height:0;height:100%;background:var(--ui-surface-soft);touch-action:none;overscroll-behavior:none}.contacts-v1__map-canvas .ymaps3--controls{display:none !important}.contacts-v1__map-marker{position:relative;display:flex;align-items:flex-end;transform:translate(-50%,-100%);pointer-events:none}.contacts-v1__map-marker.is-active{z-index:2}.contacts-v1__map-pin{display:flex;flex:none;width:31px;height:45px;pointer-events:auto;cursor:pointer;border:0;padding:0;background:none;appearance:none;filter:drop-shadow(0 2px 8px var(--glass-text-08))}.contacts-v1__map-pin:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.contacts-v1__map-pin-icon{display:block;width:31px;height:45px;color:var(--brand)}.contacts-v1__map-marker.is-active .contacts-v1__map-pin-icon{transform:scale(1.08);transform-origin:50% 100%}.contacts-v1__map-pin-badge{display:none;align-items:center;justify-content:center;flex:none;box-sizing:border-box;width:205px;margin:0 0 8px 10px;transform:translate(10px,10px);padding:9px 18px;border-radius:10px;background:var(--bg-fill-surface);position:relative;pointer-events:none;box-shadow:0 6px 15px var(--brand-soft)}.contacts-v1__map-marker.is-active .contacts-v1__map-pin-badge{display:flex}.contacts-v1__map-marker.is-overview .contacts-v1__map-pin-badge{display:none}.contacts-v1__map-pin-badge-logo{display:block;position:relative;width:100%;height:auto;object-fit:contain}.contacts-v1__map-card[hidden],.contacts-v1__map-photo[hidden],.contacts-v1__map-text-scroll[hidden]{display:none !important}.contacts-v1__map-card{grid-area:1 \/ 1;z-index:2;justify-self:start;align-self:flex-start;display:flex;flex-direction:column;gap:26px;width:var(--contacts-v1-map-card-width);max-width:var(--contacts-v1-map-card-width);margin:var(--contacts-v1-map-card-inset-y) 0 var(--contacts-v1-map-card-inset-y) var(--contacts-v1-inset);padding:14px 10px var(--space-24);border-radius:var(--radius);background:var(--white);box-sizing:border-box;overflow:hidden;min-height:0;max-height:calc(100% - var(--contacts-v1-map-card-inset-y) * 2)}.contacts-v1__map-photo{display:block;flex:none;width:100%;max-width:496px;height:274px;margin-inline:auto;border-radius:var(--radius);object-fit:cover}.contacts-v1__map-text-scroll{display:flex;align-items:stretch;gap:var(--space-16);flex:1 1 auto;min-width:0;min-height:0;margin:0 1px 0 11px}.contacts-v1__map-text-viewport{flex:1 1 auto;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.contacts-v1__map-text-viewport::-webkit-scrollbar{display:none}.contacts-v1__map-text-scrollbar{position:relative;flex:none;width:10px;align-self:stretch;background:transparent;cursor:grab;touch-action:none}.contacts-v1__map-text-thumb{position:absolute;top:0;left:4px;width:2px;min-height:48px;border-radius:var(--radius-pill);background:var(--brand-decor);transform:translateY(0);cursor:grab}.contacts-v1__map-text-thumb:active{cursor:grabbing}.contacts-v1__map-text-scrollbar:active{cursor:grabbing}.contacts-v1__map-text-scroll.is-static .contacts-v1__map-text-scrollbar{visibility:hidden}.contacts-v1__map-text{margin:0;color:var(--text-secondary);font-family:var(--font-body);font-size:20px;font-style:normal;font-weight:400;line-height:1.3}.contacts-v1__directions[hidden]{display:none}.contacts-v1__directions-inner{display:flex;flex-direction:column;gap:var(--space-32);padding:var(--space-40) var(--contacts-v1-inset);box-sizing:border-box}.contacts-v1__directions-title{margin:0;color:var(--text-primary)}.contacts-v1__directions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--contacts-v1-card-min-width)),1fr));gap:var(--space-40);align-items:stretch}.contacts-v1__direction-card{display:flex;flex-direction:row;align-items:flex-start;gap:var(--space-32);min-height:231px;padding:var(--space-16) var(--space-24) var(--space-24);border:1px solid var(--ui-divider);border-radius:var(--radius);background:var(--white);box-sizing:border-box}.contacts-v1__direction-icon{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border-radius:var(--radius-pill);background:var(--brand-opacity-20)}.contacts-v1__direction-icon-image{display:block;width:22.5px;height:22.5px;color:var(--brand-light)}.contacts-v1__direction-body{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-16);min-width:0}.contacts-v1__direction-copy{display:flex;flex-direction:column;gap:13px;padding-top:6px;min-width:0}.contacts-v1__direction-card:not(.contacts-v1__direction-card--transport) .contacts-v1__direction-title{padding-top:6px}.contacts-v1__direction-title{margin:0;font-weight:600;line-height:1.3;color:var(--text-primary)}.contacts-v1__direction-summary{margin:0;line-height:1.3;color:var(--text-muted)}.contacts-v1__direction-routes{display:flex;flex-direction:column;gap:var(--space-8);margin:0;padding:0;list-style:none}.contacts-v1__direction-route{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-4) var(--space-16)}.contacts-v1__direction-route-label{display:inline-flex;align-items:center;flex:0 1 auto;gap:var(--space-8);max-width:100%;margin:0;font-weight:600;line-height:1.3;color:var(--text-secondary)}.contacts-v1__direction-route-label::before{content:\"\";flex:none;width:24px;height:24px;background:var(--brand-light)}.contacts-v1__direction-route-value{flex:0 1 auto;max-width:100%;margin:0;margin-left:auto;font-weight:600;line-height:1.3;color:var(--text-secondary);text-align:right;overflow-wrap:anywhere}.contacts-v1__direction-list{display:flex;flex-direction:column;gap:var(--space-8);margin:0;padding:0;list-style:none}.contacts-v1__direction-item{display:flex;align-items:center;gap:var(--space-16);margin:0;font-weight:600;line-height:1.3;color:var(--text-secondary)}.contacts-v1__direction-check{display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px}.contacts-v1__direction-check-icon{display:block;width:24px;height:24px;color:var(--brand)}.contacts-v1__direction-item-text{flex:1 1 auto;min-width:0}@media (max-width:1600px){.contacts-v1__direction-card{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:48px;column-gap:var(--space-16);align-items:start}.contacts-v1__direction-body,.contacts-v1__direction-copy{display:contents}.contacts-v1__direction-icon{grid-column:1;grid-row:1;align-self:center}.contacts-v1__direction-title{grid-column:2;grid-row:1;align-self:center;padding-top:0}.contacts-v1__direction-card:not(.contacts-v1__direction-card--transport) .contacts-v1__direction-title{padding-top:0}.contacts-v1__direction-summary,.contacts-v1__direction-routes,.contacts-v1__direction-list{grid-column:1 \/ -1}}@media (max-width:1280px){.contacts-v1__branch{flex-direction:column;align-items:flex-start;gap:var(--space-16)}.contacts-v1__branch-main{gap:var(--space-24);width:100%;min-width:0}.contacts-v1__branch-title{padding-top:0}.contacts-v1__cards{grid-template-columns:minmax(0,1fr);align-items:start}.contacts-v1__cards-item{display:block}.contacts-v1__card{height:auto;min-height:0}.contacts-v1__body{flex:1 1 auto;min-height:0;justify-content:flex-start}.contacts-v1__directions-grid{gap:var(--space-16)}.contacts-v1__direction-card{min-height:0;gap:var(--space-16);padding:var(--space-16)}.contacts-v1__direction-icon{align-self:center}.contacts-v1__direction-title{align-self:center}}@media (max-width:1440px){.contacts-v1__cards{gap:var(--space-16)}.contacts-v1__card{gap:var(--space-12);align-items:flex-start;padding:var(--space-12) var(--space-16)}.contacts-v1__icon{width:40px;height:40px}.contacts-v1__icon-image{width:20px;height:20px}.contacts-v1__body{gap:var(--space-12)}.contacts-v1__content.stack--sm{gap:var(--space-8)}.contacts-v1__text-group{gap:var(--space-8)}.contacts-v1__phone-block{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-12);min-height:0}.contacts-v1__phone-block .contacts-v1__text-group{flex:1 1 auto;min-width:0}.contacts-v1__socials{flex:none;gap:var(--space-6)}.contacts-v1__social{width:44px;height:44px}.contacts-v1__social-logo{width:22px;height:22px}.contacts-v1__social-logo--tg{width:22px;height:22px}.contacts-v1__hours-row{gap:var(--space-12);padding-top:var(--space-10)}.contacts-v1__hours-row:first-child{padding-top:0}.contacts-v1__body > .contacts-v1__action{padding-top:var(--space-12)}}@media (max-width:1600px) and (min-width:1201px){.contacts-v1{--contacts-v1-map-card-width:340px;--contacts-v1-map-card-inset-y:12px}.contacts-v1__map-card{gap:var(--space-16);padding:10px 8px var(--space-16)}.contacts-v1__map-photo{height:224px}.contacts-v1__map-text-scroll{margin:0 0 0 8px;gap:var(--space-12)}}@media (max-width:1200px){.contacts-v1__branches-grid{flex-direction:row;gap:var(--space-16)}.contacts-v1__branches-grid .contacts-v1__branch{flex:1 1 0;width:auto;min-width:0}.contacts-v1__map-stage{display:flex;flex-direction:column;gap:var(--space-24);height:auto;overflow:visible}.contacts-v1__map-card{position:relative;z-index:1;grid-area:auto;order:1;justify-self:stretch;align-self:auto;width:calc(100% - var(--page-gutter) * 2);max-width:none;margin:0 var(--page-gutter);padding:14px 10px var(--space-24)}.contacts-v1__map-photo{height:auto;aspect-ratio:496 \/ 274}.contacts-v1__map-text-scroll{margin:0 11px}.contacts-v1__map-canvas{position:relative;z-index:2;grid-area:auto;order:2;flex:none;width:100%;height:var(--contacts-v1-map-height,635px);min-height:var(--contacts-v1-map-height,635px);touch-action:none;overscroll-behavior:none;pointer-events:auto}.contacts-v1__map-pin-badge{width:min(205px,calc(100vw - var(--page-gutter) * 2 - 32px))}}@media (max-width:768px){.contacts-v1{--contacts-v1-inset:0px;--contacts-v1-map-height:480px}.contacts-v1__branches-inner,.contacts-v1__inner,.contacts-v1__directions-inner{padding-inline:var(--page-gutter)}.contacts-v1__inner{padding-bottom:var(--space-24)}.contacts-v1__branches-head{align-items:flex-start;flex-direction:column;gap:var(--space-16)}.contacts-v1__branches-grid{flex-wrap:nowrap;gap:var(--space-12);margin-inline:calc(var(--page-gutter) * -1);padding-inline:var(--page-gutter);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:var(--page-gutter);-webkit-overflow-scrolling:touch;scrollbar-width:none}.contacts-v1__branches-grid::-webkit-scrollbar{display:none}.contacts-v1__branches-grid .contacts-v1__branch{flex:0 0 var(--contacts-v1-branch-tab-min-width);width:var(--contacts-v1-branch-tab-min-width);min-width:var(--contacts-v1-branch-tab-min-width);scroll-snap-align:start}.contacts-v1--branches-slider .contacts-v1__branches-slider.swiper{margin-inline:calc(var(--page-gutter) * -1);padding-inline:var(--page-gutter);box-sizing:border-box;width:auto}.contacts-v1--branches-slider .contacts-v1__branches-slider .swiper-slide{width:var(--contacts-v1-branch-tab-min-width);min-width:var(--contacts-v1-branch-tab-min-width)}.contacts-v1__branches-foot{margin-top:var(--space-16)}.contacts-v1__branch{flex-direction:column;align-items:flex-start;gap:var(--space-12);padding:14px 12px}.contacts-v1__branch-badge{flex-shrink:0;min-height:30px;padding:var(--space-4) var(--space-8)}.contacts-v1__branch-main{flex:1 1 auto;gap:var(--space-16);width:100%;min-width:0}.contacts-v1__branch-copy.stack--md{gap:var(--space-8)}.contacts-v1__branch-heading.stack--sm{gap:var(--space-4)}.contacts-v1__branch-title{padding-top:0}.contacts-v1__branch-status{gap:var(--space-8)}.contacts-v1__branch-actions{gap:var(--space-12);padding-top:var(--space-12);width:100%}.contacts-v1__branch-action{gap:var(--space-8)}.contacts-v1__branch-action-icon{width:20px;height:20px}.contacts-v1__branch-action-label{font-size:var(--fs-body-sm,14px);line-height:var(--lh-body-tight)}.contacts-v1__map-card{--contacts-v1-map-card-inset-y:var(--space-40);width:calc(100% - var(--page-gutter) * 2);left:auto}}@media (min-width:769px){.contacts-v1--branches-slider .contacts-v1__branches-slider.swiper{margin-inline:0;padding-inline:0;width:100%}.contacts-v1--branches-slider .contacts-v1__branches-slider .swiper-slide{width:auto;min-width:0}}.contacts-v2__info-panel{display:contents}.contacts-v2__info-panel[hidden],.contacts-v2__directions[hidden]{display:none}.contacts-v2{box-sizing:border-box;--contacts-v2-sidebar-width:344px;--contacts-v2-sidebar-gap:var(--space-16);--contacts-v2-map-height:480px;--contacts-v2-map-card-inset-y:var(--space-24);--contacts-v2-map-card-width:430px;--contacts-v2-branch-tab-min-width:280px;--contacts-v2-card-min-width:300px;--contacts-v2-sidebar-max-height:80vh;--contacts-v2-sidebar-sticky-top:calc(var(--site-nav-h,0px) + var(--space-24))}.contacts-v2__layout{display:grid;grid-template-columns:minmax(280px,var(--contacts-v2-sidebar-width)) minmax(0,1fr);gap:var(--space-24);align-items:start}.contacts-v2:not(.contacts-v2--has-branches) .contacts-v2__layout{grid-template-columns:minmax(0,1fr)}.contacts-v2__sidebar{position:sticky;top:var(--contacts-v2-sidebar-sticky-top);align-self:start;display:flex;flex-direction:column;max-height:var(--contacts-v2-sidebar-max-height);min-width:0}.contacts-v2__sidebar-head{flex:none}.contacts-v2__sidebar-title{margin:0 0 var(--space-24);color:var(--text-primary)}.contacts-v2__sidebar-list{display:flex;flex-direction:column;gap:var(--contacts-v2-sidebar-gap);flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:8px;scrollbar-width:thin;scrollbar-color:var(--brand-opacity-20) transparent}.contacts-v2__sidebar-list::-webkit-scrollbar{width:6px}.contacts-v2__sidebar-list::-webkit-scrollbar-thumb{border-radius:999px;background:var(--brand-opacity-20)}.contacts-v2__main{min-width:0}.contacts-v2__panel-inner{display:flex;flex-direction:column;gap:var(--space-40);padding:var(--space-40);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.contacts-v2__branch-current{margin:0;color:var(--text-primary)}.contacts-v2__section-title{margin:0 0 var(--space-24);color:var(--text-primary)}.contacts-v2__map-block{display:flex;flex-direction:column;gap:var(--space-24)}.contacts-v2__branch{display:flex;flex-direction:row;flex-shrink:0;gap:var(--space-16);align-items:flex-start;align-self:flex-start;width:100%;height:auto;padding:22px var(--space-16);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:transparent;box-sizing:border-box;text-align:left;cursor:pointer;font:inherit;appearance:none;transition:border-color .16s ease,background-color .16s ease}.contacts-v2__branch:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.contacts-v2__branch.is-active{border-color:var(--brand-dark);background:var(--brand-opacity-20)}.contacts-v2__branch-badge{display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;flex:none;min-height:37px;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);font-weight:600;line-height:1.4;white-space:nowrap;color:var(--brand-dark);background:var(--brand-opacity-20)}.contacts-v2__branch.is-active .contacts-v2__branch-badge{color:var(--text-on-brand);background:var(--brand)}.contacts-v2__branch-copy{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-24);min-width:0}.contacts-v2__branch-heading{display:flex;flex-direction:column;gap:13px;padding-top:var(--space-6)}.contacts-v2__branch-title{display:block;margin:0;font-weight:600;line-height:1.3;color:var(--text-primary);overflow-wrap:anywhere}.contacts-v2__branch-address{display:block;margin:0;line-height:1.4;color:var(--text-secondary);overflow-wrap:anywhere}.contacts-v2__branch-status{display:inline-flex;gap:13px;align-items:center}.contacts-v2__branch-status-dot{flex:none;width:8px;height:8px;border-radius:var(--radius-full);background:var(--brand)}.contacts-v2__branch-status-text{margin:0;font-weight:600;line-height:1.3;color:var(--text-muted)}.contacts-v2__cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--contacts-v2-card-min-width)),1fr));gap:var(--space-40);width:100%;margin:0;padding:0;list-style:none}.contacts-v2__card{display:flex;flex-direction:column;gap:var(--space-16);align-items:stretch;min-height:300px;padding:var(--space-16) var(--space-16) var(--space-24);border:0;border-radius:var(--radius);background:var(--white);box-sizing:border-box}.contacts-v2__card--hours{gap:30px}.contacts-v2__card-head{display:flex;gap:var(--space-16);align-items:center}.contacts-v2__icon{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border-radius:var(--radius-pill);background:var(--brand-opacity-20)}.contacts-v2__icon-image{display:block;width:22.5px;height:22.5px;color:var(--brand-light)}.contacts-v2__body{display:flex;flex:1 1 auto;flex-direction:column;gap:30px;justify-content:flex-start;min-width:0;min-height:0}.contacts-v2__content{display:flex;flex:1 1 auto;flex-direction:column;min-width:0;min-height:0}.contacts-v2__label{margin:0;font-weight:600;line-height:1;letter-spacing:-0.01em;text-transform:uppercase;color:var(--ui-border-strong)}.contacts-v2__text-group{display:flex;flex-direction:column;gap:13px}.contacts-v2__text{margin:0;color:var(--text-primary)}.contacts-v2__phone{margin:0;color:var(--text-primary);text-decoration:none}.contacts-v2__phone:hover{color:var(--brand-dark)}.contacts-v2__phone-block{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-16);min-height:127px}.contacts-v2__socials{display:flex;gap:var(--space-6);align-items:center}.contacts-v2__social{display:inline-flex;align-items:center;justify-content:center;flex:none;width:42px;height:42px;border-radius:var(--radius-full);background:var(--brand);text-decoration:none;transition:background-color .16s ease}.contacts-v2__social:hover{background:var(--brand-dark)}.contacts-v2__social-logo{display:block;flex:none;width:21px;height:21px;color:var(--text-on-brand)}.contacts-v2__social-logo--tg{width:21px;height:21px}.contacts-v2__action[hidden],.contacts-v2__cards[hidden],.contacts-v2__cards-item[hidden],.contacts-v2__text-group[hidden],.contacts-v2__phone[hidden],.contacts-v2__text[hidden],.contacts-v2__socials[hidden],.contacts-v2__social[hidden],.contacts-v2__hours[hidden],.contacts-v2__branch-current[hidden]{display:none !important}.contacts-v2__action{align-self:flex-start;margin:0;padding-block:var(--space-4);border:0;background:none;font:inherit;color:var(--text-secondary);cursor:pointer}.contacts-v2__action:hover{color:var(--brand-dark)}.contacts-v2__hours{display:flex;flex-direction:column;gap:var(--space-16);margin:0}.contacts-v2__hours-row{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-4) var(--space-16)}.contacts-v2__hours-label,.contacts-v2__hours-value{margin:0;color:var(--text-primary)}.contacts-v2__hours-label{flex:0 1 auto;max-width:100%}.contacts-v2__hours-value{flex:0 1 auto;max-width:100%;margin-left:auto;text-align:right;overflow-wrap:anywhere}.contacts-v2__map-stage{position:relative;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);height:var(--contacts-v2-map-height,480px);overflow:hidden;border-radius:var(--radius)}.contacts-v2__map-canvas{grid-area:1 \/ 1;z-index:1;width:100%;min-width:0;min-height:0;height:100%;background:var(--ui-surface-soft);touch-action:none;overscroll-behavior:none}.contacts-v2__map-canvas .ymaps3--controls{display:none !important}.contacts-v2__map-marker{position:relative;display:flex;align-items:flex-end;transform:translate(-50%,-100%);pointer-events:none}.contacts-v2__map-marker.is-active{z-index:2}.contacts-v2__map-pin{display:flex;flex:none;width:31px;height:45px;pointer-events:auto;cursor:pointer;border:0;padding:0;background:none;appearance:none;filter:drop-shadow(0 2px 8px var(--glass-text-08))}.contacts-v2__map-pin:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.contacts-v2__map-pin-icon{display:block;width:31px;height:45px;color:var(--brand)}.contacts-v2__map-marker.is-active .contacts-v2__map-pin-icon{transform:scale(1.08);transform-origin:50% 100%}.contacts-v2__map-pin-badge{display:none;align-items:center;justify-content:center;flex:none;box-sizing:border-box;width:205px;margin:0 0 8px 10px;transform:translate(10px,10px);padding:9px 18px;border-radius:10px;background:var(--bg-fill-surface);position:relative;pointer-events:none;box-shadow:0 6px 15px var(--brand-soft)}.contacts-v2__map-marker.is-active .contacts-v2__map-pin-badge{display:flex}.contacts-v2__map-marker.is-overview .contacts-v2__map-pin-badge{display:none}.contacts-v2__map-pin-badge-logo{display:block;position:relative;width:100%;height:auto;object-fit:contain}.contacts-v2__map-card[hidden],.contacts-v2__map-photo[hidden],.contacts-v2__map-text-scroll[hidden]{display:none !important}.contacts-v2__map-card{grid-area:1 \/ 1;z-index:2;justify-self:start;align-self:flex-start;display:flex;flex-direction:column;gap:26px;width:var(--contacts-v2-map-card-width);max-width:var(--contacts-v2-map-card-width);margin:var(--contacts-v2-map-card-inset-y) 0 var(--contacts-v2-map-card-inset-y) var(--space-24);padding:14px 10px var(--space-24);border-radius:var(--radius);background:var(--white);box-sizing:border-box;overflow:hidden;min-height:0;max-height:calc(100% - var(--contacts-v2-map-card-inset-y) * 2)}.contacts-v2__map-photo{display:block;flex:none;width:100%;max-width:496px;height:274px;margin-inline:auto;border-radius:var(--radius);object-fit:cover}.contacts-v2__map-text-scroll{display:flex;align-items:stretch;gap:var(--space-16);flex:1 1 auto;min-width:0;min-height:0;margin:0 1px 0 11px}.contacts-v2__map-text-viewport{flex:1 1 auto;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.contacts-v2__map-text-viewport::-webkit-scrollbar{display:none}.contacts-v2__map-text-scrollbar{position:relative;flex:none;width:10px;align-self:stretch;background:transparent;cursor:grab;touch-action:none}.contacts-v2__map-text-thumb{position:absolute;top:0;left:4px;width:2px;min-height:48px;border-radius:var(--radius-pill);background:var(--brand-decor);transform:translateY(0);cursor:grab}.contacts-v2__map-text-thumb:active{cursor:grabbing}.contacts-v2__map-text-scrollbar:active{cursor:grabbing}.contacts-v2__map-text-scroll.is-static .contacts-v2__map-text-scrollbar{visibility:hidden}.contacts-v2__map-text{margin:0;color:var(--text-secondary);font-family:var(--font-body);font-size:20px;font-style:normal;font-weight:400;line-height:1.3}.contacts-v2__directions{display:flex;flex-direction:column;gap:var(--space-24)}.contacts-v2__directions[hidden]{display:none}.contacts-v2__directions .contacts-v2__section-title{margin:0}.contacts-v2__directions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--contacts-v2-card-min-width)),1fr));gap:var(--space-16);align-items:stretch}.contacts-v2__direction-card{display:flex;flex-direction:column;gap:var(--space-24);min-height:252px;padding:var(--space-16) var(--space-8);border-radius:var(--radius);background:var(--white);box-sizing:border-box}.contacts-v2__direction-head{display:flex;gap:var(--space-16);align-items:flex-start}.contacts-v2__direction-card:not(.contacts-v2__direction-card--transport) .contacts-v2__direction-head{align-items:center}.contacts-v2__direction-icon{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;border-radius:var(--radius-pill);background:var(--brand-opacity-20)}.contacts-v2__direction-icon-image{display:block;width:22.5px;height:22.5px;color:var(--brand-light)}.contacts-v2__direction-copy{display:flex;flex:1 1 auto;flex-direction:column;gap:13px;min-width:0}.contacts-v2__direction-title{margin:0;font-weight:600;line-height:1.3;color:var(--text-primary)}.contacts-v2__direction-summary{margin:0;line-height:1.3;color:var(--text-muted)}.contacts-v2__direction-routes{display:flex;flex-direction:column;gap:var(--space-8);margin:0;padding:0;list-style:none}.contacts-v2__direction-route{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-4) var(--space-16)}.contacts-v2__direction-route-label{display:inline-flex;align-items:center;flex:0 1 auto;gap:var(--space-8);max-width:100%;margin:0;font-weight:600;line-height:1.3;color:var(--text-secondary)}.contacts-v2__direction-route-label::before{content:\"\";flex:none;width:24px;height:24px;background:var(--brand-light)}.contacts-v2__direction-route-value{flex:0 1 auto;max-width:100%;margin:0;margin-left:auto;font-weight:600;line-height:1.3;color:var(--text-secondary);text-align:right;overflow-wrap:anywhere}.contacts-v2__direction-list{display:flex;flex-direction:column;gap:var(--space-8);margin:0;padding:0;list-style:none}.contacts-v2__direction-item{display:flex;align-items:center;gap:var(--space-16);margin:0;font-weight:600;line-height:1.3;color:var(--text-secondary)}.contacts-v2__direction-check{display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px}.contacts-v2__direction-check-icon{display:block;width:24px;height:24px;color:var(--brand)}.contacts-v2__direction-item-text{flex:1 1 auto;min-width:0}@media (max-width:1600px){.contacts-v2__direction-card{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:48px;column-gap:var(--space-16);align-items:start}.contacts-v2__direction-head,.contacts-v2__direction-copy{display:contents}.contacts-v2__direction-icon{grid-column:1;grid-row:1;align-self:center}.contacts-v2__direction-title{grid-column:2;grid-row:1;align-self:center}.contacts-v2__direction-summary,.contacts-v2__direction-routes,.contacts-v2__direction-list{grid-column:1 \/ -1}}@media (max-width:1280px){.contacts-v2__layout{grid-template-columns:minmax(0,1fr)}.contacts-v2__sidebar{position:static;max-height:none}.contacts-v2__panel-inner{padding:var(--space-24);gap:var(--space-24)}.contacts-v2__cards-item{display:block}.contacts-v2__card{height:auto;min-height:0}.contacts-v2__body{flex:1 1 auto;min-height:0;justify-content:flex-start}}@media (max-width:1440px){.contacts-v2__cards{gap:var(--space-16)}.contacts-v2__card{gap:var(--space-12);min-height:0;padding:var(--space-12) var(--space-16)}.contacts-v2__card--hours{gap:var(--space-24)}.contacts-v2__card-head{gap:var(--space-12)}.contacts-v2__icon{width:40px;height:40px}.contacts-v2__icon-image{width:20px;height:20px}.contacts-v2__body{gap:var(--space-24)}.contacts-v2__text-group{gap:var(--space-8)}.contacts-v2__phone-block{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-12);min-height:0}.contacts-v2__phone-block .contacts-v2__text-group{flex:1 1 auto;min-width:0}.contacts-v2__socials{flex:none;gap:var(--space-6)}.contacts-v2__social{width:40px;height:40px}.contacts-v2__social-logo{width:20px;height:20px}.contacts-v2__social-logo--tg{width:20px;height:20px}.contacts-v2__hours-row{gap:var(--space-12)}}@media (max-width:1440px) and (min-width:1281px){.contacts-v2__cards{align-items:stretch}.contacts-v2__cards-item{display:flex;min-height:0}.contacts-v2__card{flex:1 1 auto;width:100%;min-height:100%}.contacts-v2__body{flex:1 1 auto;min-height:0;justify-content:space-between}}@media (max-width:1600px) and (min-width:1201px){.contacts-v2{--contacts-v2-sidebar-width:320px;--contacts-v2-sidebar-gap:var(--space-12);--contacts-v2-map-card-width:340px;--contacts-v2-map-card-inset-y:12px}.contacts-v2__sidebar-title{margin-bottom:var(--space-16)}.contacts-v2__sidebar-list{padding-right:6px}.contacts-v2__branch{gap:var(--space-12);padding:16px var(--space-12)}.contacts-v2__branch-badge{min-height:32px;padding:4px var(--space-8)}.contacts-v2__branch-copy{gap:var(--space-16)}.contacts-v2__branch-heading{gap:var(--space-8);padding-top:4px}.contacts-v2__branch-status{gap:var(--space-8)}.contacts-v2__map-card{gap:var(--space-16);padding:10px 8px var(--space-16)}.contacts-v2__map-photo{height:224px}.contacts-v2__map-text-scroll{margin:0 0 0 8px;gap:var(--space-12)}}@media (max-width:1200px){.contacts-v2__sidebar-list{flex:none;flex-direction:row;flex-wrap:nowrap;gap:var(--space-12);margin-inline:calc(var(--page-gutter) * -1);padding-inline:var(--page-gutter);overflow-x:auto;overflow-y:visible;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:var(--page-gutter);-webkit-overflow-scrolling:touch;scrollbar-width:none;max-height:none}.contacts-v2__sidebar-list::-webkit-scrollbar{display:none}.contacts-v2__sidebar-list .contacts-v2__branch{flex:0 0 var(--contacts-v2-branch-tab-min-width);flex-direction:column;gap:var(--space-12);width:var(--contacts-v2-branch-tab-min-width);min-width:var(--contacts-v2-branch-tab-min-width);padding:14px var(--space-12);align-self:flex-start;scroll-snap-align:start}.contacts-v2__branch-copy{gap:var(--space-16);width:100%}.contacts-v2__branch-heading{gap:var(--space-8);padding-top:0}.contacts-v2__branch-status{gap:var(--space-8)}.contacts-v2__map-stage{display:flex;flex-direction:column;gap:var(--space-24);height:auto;overflow:visible}.contacts-v2__map-card{position:relative;z-index:1;grid-area:auto;order:1;justify-self:stretch;align-self:auto;width:100%;max-width:none;margin:0;padding:14px 10px var(--space-24)}.contacts-v2__map-photo{height:auto;aspect-ratio:496 \/ 274}.contacts-v2__map-text-scroll{margin:0 11px}.contacts-v2__map-canvas{position:relative;z-index:2;grid-area:auto;order:2;flex:none;width:100%;height:var(--contacts-v2-map-height,480px);min-height:var(--contacts-v2-map-height,480px);touch-action:none;overscroll-behavior:none;pointer-events:auto}.contacts-v2__map-pin-badge{width:min(205px,calc(100vw - var(--page-gutter) * 2 - 32px))}}@media (max-width:768px){.contacts-v2{--contacts-v2-map-height:420px}.contacts-v2__panel-inner{padding:var(--space-16)}.contacts-v2__branch-badge{min-height:30px;padding:var(--space-4) var(--space-8)}.contacts-v2__map-card{--contacts-v2-map-card-inset-y:var(--space-24)}}.news-v3{box-sizing:border-box;--news-v3-grid-gap:43px;--news-v3-card-pad-x:var(--space-8);--news-v3-card-pad-top:var(--space-8);--news-v3-card-pad-bottom:var(--space-16);--news-v3-media-radius:6px}.news-v3__inner{padding-top:var(--space-32)}.news-v3__head{display:flex;align-items:center;gap:var(--space-16);min-width:0}.news-v3__head-icon{flex:none;display:block;width:26px;height:26px;color:var(--brand-light);overflow:visible}.news-v3__title{margin:0;color:var(--brand-light);font-weight:400}.news-v3__carousel,.news-v3__slider.swiper{overflow:visible}.news-v3__list.swiper-wrapper{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--news-v3-grid-gap);align-items:stretch;width:100%;min-width:0;transform:none}.news-v3__slider .news-v3__slide{width:auto;max-width:none;height:auto;box-sizing:border-box}.news-v3 .slider-pagination-host{display:none}.news-v3__card{display:flex;flex-direction:column;gap:var(--space-8);height:100%;padding:var(--news-v3-card-pad-top) var(--news-v3-card-pad-x) var(--news-v3-card-pad-bottom);border-radius:var(--radius);background:var(--white);color:inherit;text-decoration:none;box-sizing:border-box;min-width:0;transition:box-shadow .16s ease}.news-v3__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (hover:hover){.news-v3__card:hover{box-shadow:var(--shadow-header)}}.news-v3__card-top.stack--md{gap:var(--space-16)}.news-v3__card-media{display:block;width:100%;border-radius:var(--news-v3-media-radius);overflow:hidden}.news-v3__card-img{display:block;width:100%;height:auto;aspect-ratio:500 \/ 239;object-fit:cover}.news-v3__card-tags{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;column-gap:var(--space-16);row-gap:var(--space-8);width:100%;min-width:0}.news-v3__tag{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;max-width:100%;box-sizing:border-box;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);color:var(--brand-dark);font-weight:600;line-height:1.4;white-space:nowrap;background:var(--brand-opacity-20)}.news-v3__expert{flex:0 1 auto;min-width:min(100%,12rem);max-width:100%;padding:var(--space-4) var(--space-10) var(--space-4) 0;box-sizing:border-box;color:var(--brand-dark);font-weight:600;text-align:right}.news-v3__card-title{margin:0;flex:1 1 auto;min-width:0;color:var(--text-secondary);font-weight:600}.news-v3__meta{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-8) var(--space-16);margin-top:auto;color:var(--ui-border-strong)}.news-v3__meta-date{white-space:nowrap}.news-v3__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--ui-border-default)}.news-v3__meta-read{display:inline-flex;align-items:center;gap:var(--space-8);white-space:nowrap}.news-v3__meta-clock{flex:none;width:24px;height:24px;color:var(--ui-border-strong)}@media (max-width:1199px){.news-v3{--news-v3-grid-gap:var(--space-24)}}@media (max-width:991px){.news-v3__carousel,.news-v3__slider.swiper{overflow:hidden}.news-v3__list.swiper-wrapper{display:flex;gap:0;grid-template-columns:none}.news-v3__slider .news-v3__slide{width:100%;height:auto;flex-shrink:0}.news-v3.is-carousel .slider-pagination-host{display:block}.news-v3__card{height:auto}}@media (max-width:768px){.news-v3__inner.stack--md{gap:var(--space-24)}.news-v3__meta-read{gap:var(--space-4)}}@media (max-width:576px){.news-v3__meta{gap:var(--space-8) var(--space-12)}}@media (prefers-reduced-motion:reduce){.news-v3__card{transition:none}}.news-v4{box-sizing:border-box;--news-v4-media-w:345px;--news-v4-card-min-h:248px;--news-v4-gap:var(--space-24);--news-v4-aside-w:493px}.news-v4__inner.stack--md{gap:var(--space-24);padding-top:var(--space-32)}.news-v4__filters{display:flex;flex-wrap:wrap;gap:var(--space-8);align-items:flex-start}.news-v4__chip{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:var(--space-12) var(--space-18);border-radius:var(--radius-xl);border:1px solid var(--brand-opacity-20);background:var(--white);color:var(--text-secondary);cursor:pointer;user-select:none;transition:transform .16s ease,background-color .16s ease,border-color .16s ease,color .16s ease}.news-v4__chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.news-v4__chip.is-active{background:var(--brand-light);border-color:transparent;color:var(--white)}.news-v4__chip.is-pressed{transform:scale(.98)}.news-v4__layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,var(--news-v4-aside-w));gap:var(--space-40);align-items:start}.news-v4__main.stack--md{gap:var(--space-24);min-width:0}.news-v4__list{display:flex;flex-direction:column;gap:var(--news-v4-gap);width:100%;min-width:0;box-sizing:border-box}.news-v4__item{width:100%;min-width:0;box-sizing:border-box}.news-v4__item.is-collapsed,.news-v4__item.is-filtered-out{display:none !important}.news-v4__card{display:grid;grid-template-columns:var(--news-v4-media-w) minmax(0,1fr);gap:var(--space-32);min-height:var(--news-v4-card-min-h);padding:0;border-radius:var(--radius);background:var(--white-opacity-40);color:inherit;text-decoration:none;box-sizing:border-box;overflow:visible;transition:box-shadow .16s ease}.news-v4__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (hover:hover){.news-v4__card:hover{box-shadow:var(--shadow-header)}}.news-v4__card-media{display:block;width:var(--news-v4-media-w);aspect-ratio:345 \/ 248;min-height:0;align-self:stretch;border-radius:var(--radius);overflow:hidden}.news-v4__card-img{display:block;width:100%;height:100%;object-fit:cover}.news-v4__card-body{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-16);min-width:0;padding:var(--space-28) var(--space-24) var(--space-24) 0;box-sizing:border-box}.news-v4__card-copy{display:flex;flex-direction:column;gap:var(--space-8);min-width:0}.news-v4__card-title{margin:0;color:var(--text-primary);font-weight:600}.news-v4__card-excerpt{margin:0;color:var(--text-secondary)}.news-v4__card-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-12) var(--space-16);flex-wrap:wrap}.news-v4__meta{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-8) var(--space-16);color:var(--ui-border-strong)}.news-v4__meta-date{white-space:nowrap}.news-v4__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--ui-border-default)}.news-v4__meta-read{display:inline-flex;align-items:center;gap:var(--space-8);white-space:nowrap}.news-v4__meta-clock{flex:none;width:24px;height:24px;color:var(--ui-border-strong)}.news-v4__tag{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;margin-left:auto;max-width:100%;box-sizing:border-box;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);color:var(--brand-dark);font-weight:600;line-height:1.4;white-space:nowrap;background:var(--brand-opacity-20)}.news-v4__more{width:218px;flex:none;align-self:center;min-height:45px}.news-v4__aside{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));align-self:start;min-width:0}.news-v4__cta{display:flex;flex-direction:column;gap:var(--space-40);padding:var(--space-32) var(--space-32) var(--space-40);border-radius:var(--radius);background:var(--brand-light);box-sizing:border-box;color:var(--white)}.news-v4__cta-title{margin:0;color:var(--white)}.news-v4__cta-lead{margin:0;color:var(--white)}.news-v4__form{width:100%}.news-v4__fields.stack--md{gap:var(--space-16)}.news-v4__field{position:relative;display:block;min-width:0}.news-v4__input.field__input{min-height:54px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50)}.news-v4__select{appearance:none;-webkit-appearance:none;padding-right:52px;cursor:pointer}.news-v4__select-icon{position:absolute;right:20px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.news-v4__submit{width:100%;min-height:54px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:600}.news-v4__consent{gap:var(--space-16);color:var(--ui-border-soft)}.news-v4__consent .popup-form__consent-link{color:inherit}.news-v4__consent .popup-form__consent-link:hover,.news-v4__consent .popup-form__consent-link:focus-visible{color:var(--text-on-brand)}@media (max-width:1449px){.news-v4__layout{grid-template-columns:minmax(0,1fr);gap:var(--space-32)}.news-v4__aside{position:static;max-width:560px}}@media (min-width:1450px) and (max-width:1679px){.news-v4{--news-v4-aside-w:400px;--news-v4-media-w:clamp(240px,22vw,300px)}.news-v4__layout{gap:var(--space-32)}.news-v4__card{gap:var(--space-24)}.news-v4__card-body{padding:var(--space-24) var(--space-16) var(--space-16) 0}}@media (max-width:1360px){.news-v4{--news-v4-media-w:clamp(200px,26vw,300px)}.news-v4__card{gap:var(--space-24)}.news-v4__card-body{padding:var(--space-24) var(--space-16) var(--space-16) 0}}@media (max-width:991px){.news-v4__card{grid-template-columns:1fr;gap:0;min-height:0}.news-v4__card-media{width:100%;min-height:0;aspect-ratio:345 \/ 220}.news-v4__card-img{min-height:0;aspect-ratio:345 \/ 220}.news-v4__card-body{padding:var(--space-16);gap:var(--space-16)}.news-v4__filters{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:var(--space-4)}.news-v4__filters::-webkit-scrollbar{display:none}.news-v4__chip{flex:none}}@media (max-width:768px){.news-v4__inner.stack--md{padding-top:var(--space-24)}.news-v4__aside{max-width:none}.news-v4__cta{gap:var(--space-32);padding:var(--space-24)}.news-v4__more{width:100%}.news-v4__meta-read{gap:var(--space-4)}}@media (prefers-reduced-motion:reduce){.news-v4__card,.news-v4__chip{transition:none}}.knowledge-v1{box-sizing:border-box;max-width:100%;min-width:0;overflow-x:hidden;overflow-x:clip}.knowledge-v1__card{position:relative;overflow:hidden;width:100%;min-height:409px;border-radius:var(--radius);background:var(--bg-fill-page);box-sizing:border-box}.knowledge-v1__bg{position:absolute;inset:0;z-index:0;pointer-events:none}.knowledge-v1__bg::after{content:\"\";position:absolute;inset:0;background:linear-gradient( 90deg,color-mix(in srgb,var(--bg-fill-page) 98%,transparent) 0%,color-mix(in srgb,var(--bg-fill-page) 82%,transparent) 42%,color-mix(in srgb,var(--bg-fill-page) 18%,transparent) 62%,transparent 72% ),linear-gradient( 180deg,color-mix(in srgb,var(--bg-fill-page) 92%,transparent) 0%,color-mix(in srgb,var(--bg-fill-soft) 72%,transparent) 28%,transparent 100% )}.knowledge-v1__bg img{display:block;width:100%;height:100%;object-fit:cover;object-position:right center}.knowledge-v1__inner{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start;gap:60px;width:min(741px,100%);min-height:409px;padding:var(--space-64) clamp(var(--space-24),4vw,var(--space-56));box-sizing:border-box}.knowledge-v1__copy{width:100%;max-width:741px}.knowledge-v1__title{margin:0;color:var(--text-primary)}.knowledge-v1__lead{margin:0;max-width:741px;color:var(--text-secondary);font-weight:600}.knowledge-v1__search{width:min(659px,100%);max-width:100%}.knowledge-v1__search-field{display:flex;align-items:center;gap:var(--space-8);width:100%;min-height:60px;padding:6px 8px;border:1px solid var(--ui-border-default);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.knowledge-v1__search-icon{display:flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px}.knowledge-v1__search-icon img{display:block;width:24px;height:24px}.knowledge-v1__search-input.field__input{flex:1 1 auto;min-width:0;min-height:0;padding:0;border:0;border-radius:0;background:transparent;color:var(--text-secondary);box-shadow:none}.knowledge-v1__search-input.field__input::placeholder{color:var(--text-secondary)}.knowledge-v1__search-input.field__input:focus,.knowledge-v1__search-input.field__input:focus-visible{outline:none !important;border:0 !important;box-shadow:none}.knowledge-v1__search-submit{display:flex;align-items:center;justify-content:center;flex:none;width:72px;height:48px;padding:0;border:0;background:transparent;cursor:pointer}.knowledge-v1__search-submit img{display:block;width:72px;height:48px}.knowledge-v1__topics{margin-top:var(--space-64);width:100%}.knowledge-v1__topics-title{margin:0;color:var(--text-primary)}.knowledge-v1__topics-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:21px var(--space-40);margin:0;padding:0;list-style:none}.knowledge-v1__topics-item{min-width:0}.knowledge-v1__topic-card{display:flex;align-items:flex-start;gap:18px;width:100%;min-height:100%;padding:31px 10px;border:1px solid var(--ui-border-default);border-radius:var(--radius);background:transparent;text-decoration:none;color:inherit;box-sizing:border-box;transition:border-color .16s ease,background-color .16s ease}.knowledge-v1__topic-card:hover,.knowledge-v1__topic-card:focus-visible{border-color:color-mix(in srgb,var(--brand) 35%,var(--ui-border-default));background:var(--brand-surface-soft)}.knowledge-v1__topic-icon{display:flex;align-items:center;justify-content:center;flex:none;width:68px;height:68px;border-radius:var(--radius-full);background:var(--brand-opacity-20)}.knowledge-v1__topic-icon img{display:block;width:38px;height:38px;object-fit:contain}.knowledge-v1__topic-copy{min-width:0;padding-top:var(--space-8)}.knowledge-v1__topic-title{margin:0;color:var(--text-primary);font-weight:600}.knowledge-v1__topic-count{margin:0;color:var(--text-muted);font-weight:600}.knowledge-v1__alphabet{margin-top:var(--space-64);width:100%}.knowledge-v1__alphabet-title{margin:0;color:var(--text-primary)}.knowledge-v1__alphabet-lead{margin:0;max-width:679px;color:var(--text-secondary)}.knowledge-v1__alphabet-card{width:100%;min-height:244px;padding:34px clamp(var(--space-16),4vw,61px) var(--space-32);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.knowledge-v1__alphabet-letters{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding-bottom:var(--space-32);border-bottom:1px solid var(--ui-border-default)}.knowledge-v1__alphabet-letter{display:flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;padding:0;border:0;border-radius:var(--radius);background:transparent;color:var(--brand-dark);text-transform:uppercase;cursor:pointer;box-sizing:border-box}.knowledge-v1__alphabet-letter.is-active{background:var(--brand);color:var(--bg-fill-surface)}.knowledge-v1__alphabet-letter.is-empty{opacity:.35;cursor:not-allowed}.knowledge-v1__alphabet-letter:not(.is-empty):hover,.knowledge-v1__alphabet-letter:not(.is-empty):focus-visible{background:var(--brand-opacity-20);color:var(--brand-dark)}.knowledge-v1__alphabet-letter.is-active:hover,.knowledge-v1__alphabet-letter.is-active:focus-visible{background:var(--brand);color:var(--bg-fill-surface)}.knowledge-v1__alphabet-letter:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.knowledge-v1__alphabet-panels{padding-top:var(--space-24)}.knowledge-v1__alphabet-panel[hidden]{display:none}.knowledge-v1__alphabet-links{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:var(--space-16);column-gap:82px}.knowledge-v1__alphabet-link{display:inline-flex;max-width:100%;color:var(--text-secondary);font-weight:600;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.knowledge-v1__alphabet-link:hover,.knowledge-v1__alphabet-link:focus-visible{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}.knowledge-v1__results{--knowledge-v1-results-aside-w:493px;margin-top:var(--space-64);width:100%;max-width:100%;min-width:0;box-sizing:border-box;width:100%;padding-top:var(--space-32);box-sizing:border-box}.knowledge-v1__results[hidden]{display:none !important}.knowledge-v1__results-summary{margin:0;color:var(--text-primary);font-weight:600}.knowledge-v1__results-filters{display:flex;flex-wrap:nowrap;gap:var(--space-8);align-items:flex-start;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:var(--space-4)}.knowledge-v1__results-filters::-webkit-scrollbar{display:none}.knowledge-v1__results-filters[hidden]{display:none !important}.knowledge-v1__results-chip{display:inline-flex;flex:none;align-items:center;justify-content:center;min-height:48px;padding:var(--space-12) var(--space-18);border-radius:var(--radius-xl);border:1px solid var(--brand-border);background:var(--white);color:var(--text-secondary);cursor:pointer;user-select:none;transition:transform .16s ease,background-color .16s ease,border-color .16s ease,color .16s ease}.knowledge-v1__results-chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.knowledge-v1__results-chip.is-active{background:var(--brand-light);border-color:transparent;color:var(--white)}.knowledge-v1__results-chip.is-pressed{transform:scale(.98)}.knowledge-v1__results-chip[hidden]{display:none !important}.knowledge-v1__results-layout{display:flex;flex-wrap:wrap;gap:var(--space-40);align-items:flex-start;width:100%;max-width:100%;min-width:0;box-sizing:border-box}.knowledge-v1__results-main{flex:1 1 100%;min-width:0;max-width:100%;box-sizing:border-box}.knowledge-v1__results-empty{margin:0;color:var(--text-secondary)}.knowledge-v1__results-empty[hidden],.knowledge-v1__results-list[hidden],.knowledge-v1__results-reset[hidden]{display:none !important}.knowledge-v1__results-list{display:flex;flex-direction:column;gap:var(--space-16);width:100%;min-width:0}.knowledge-v1__result-card{border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box;width:100%;min-width:0;max-width:100%}.knowledge-v1__result-card-link{display:flex;flex-direction:column;gap:37px;padding:var(--space-24) 25px;color:inherit;text-decoration:none;box-sizing:border-box}.knowledge-v1__result-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-24);width:100%}.knowledge-v1__result-card-copy{display:flex;flex-direction:column;gap:9px;min-width:0}.knowledge-v1__result-card-title{margin:0;color:var(--text-primary)}.knowledge-v1__result-card-excerpt{margin:0;color:var(--text-secondary)}.knowledge-v1__result-card-tag{flex:none;max-width:min(240px,42%);padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);background:var(--brand-opacity-20);color:var(--brand-dark);font-weight:600;line-height:1.4;text-align:center;box-sizing:border-box}.knowledge-v1__result-card-meta{display:flex;align-items:center;gap:var(--space-16);color:var(--ui-border-strong)}.knowledge-v1__result-card-date{white-space:nowrap}.knowledge-v1__result-card-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:currentColor;opacity:.65}.knowledge-v1__result-card-read{display:inline-flex;align-items:center;gap:9px;white-space:nowrap}.knowledge-v1__result-card-clock{display:block;width:24px;height:24px;color:currentColor}.knowledge-v1__results-reset{align-self:center;min-width:218px}.knowledge-v1__result-card[hidden]{display:none !important}.knowledge-v1__results-aside{position:static;align-self:flex-start;flex:1 1 100%;min-width:0;width:100%;max-width:100%;box-sizing:border-box}.knowledge-v1__results-cta{display:flex;flex-direction:column;gap:var(--space-40);width:100%;min-width:0;max-width:100%;padding:var(--space-32);border-radius:var(--radius);background:var(--brand-light);box-sizing:border-box;color:var(--white)}.knowledge-v1__results-cta-title,.knowledge-v1__results-cta-lead{margin:0;color:var(--white)}.knowledge-v1__results-form{width:100%;min-width:0;max-width:100%}.knowledge-v1__results-fields.stack--md{gap:var(--space-16)}.knowledge-v1__results-field{position:relative;display:block;min-width:0}.knowledge-v1__results-input.field__input{width:100%;max-width:100%;min-height:54px;padding:18px 20px;border-color:var(--ui-border-strong);background:var(--white-opacity-50);box-sizing:border-box}.knowledge-v1__results-select{appearance:none;-webkit-appearance:none;padding-right:52px;cursor:pointer}.knowledge-v1__results-select-icon{position:absolute;right:20px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.knowledge-v1__results-submit{width:100%;min-height:54px;text-transform:uppercase;letter-spacing:-0.01em;font-weight:600}.knowledge-v1__results-consent{gap:var(--space-16);color:var(--ui-border-soft)}.knowledge-v1__results-consent .popup-form__consent-link{color:inherit}.knowledge-v1__catalog{margin-top:var(--space-64);width:100%}.knowledge-v1__catalog > .knowledge-v1__catalog-title{margin:0;color:var(--text-primary)}.knowledge-v1__catalog-list{display:flex;flex-direction:column;gap:var(--space-16)}.knowledge-v1__catalog-item{border-radius:var(--radius);background:var(--white-opacity-75);overflow:hidden;box-sizing:border-box;scroll-margin-top:calc(var(--site-nav-h,0px) + var(--space-24))}.knowledge-v1__catalog-trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);width:100%;padding:var(--space-16) var(--space-20) var(--space-16) var(--space-16);border:0;background:transparent;cursor:pointer;box-sizing:border-box;text-align:left}.knowledge-v1__catalog-trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:4px}.knowledge-v1__catalog-left{display:flex;align-items:center;gap:var(--space-16);min-width:0}.knowledge-v1__catalog-name{margin:0;color:var(--text-primary);font-weight:600}.knowledge-v1__catalog-item.is-open .knowledge-v1__catalog-name{color:var(--brand)}.knowledge-v1__catalog-icon{display:flex;align-items:center;justify-content:center;flex:none;width:68px;height:68px;border-radius:var(--radius-full);background:var(--brand-opacity-20)}.knowledge-v1__catalog-icon img{display:block;width:38px;height:38px;object-fit:contain}.knowledge-v1__catalog-right{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-16);flex:none}.knowledge-v1__catalog-meta{margin:0;color:var(--text-muted);font-weight:600;white-space:nowrap}.knowledge-v1__catalog-chevron{display:flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;color:var(--brand)}.knowledge-v1__catalog-chevron-svg{display:block;transition:transform .32s ease}.knowledge-v1__catalog-item.is-open .knowledge-v1__catalog-chevron-svg{transform:rotate(180deg)}.knowledge-v1__catalog-panel{display:grid;grid-template-rows:0fr;border-top:1px solid transparent;transition:grid-template-rows .34s cubic-bezier(.4,0,.2,1),border-color .34s cubic-bezier(.4,0,.2,1)}.knowledge-v1__catalog-item.is-open .knowledge-v1__catalog-panel{grid-template-rows:1fr;border-top-color:var(--ui-divider);transition:grid-template-rows .42s cubic-bezier(.33,1,.68,1),border-color .42s cubic-bezier(.33,1,.68,1)}.knowledge-v1__catalog-panel[hidden]{display:none}.knowledge-v1__catalog-panel-inner{min-height:0;overflow:hidden}.knowledge-v1__catalog-panel-content{padding:var(--space-24) var(--space-20) var(--space-32) var(--space-24)}.knowledge-v1__catalog-links{display:flex;flex-wrap:wrap;align-items:flex-start;row-gap:var(--space-16);column-gap:var(--space-40)}.knowledge-v1__catalog-link{display:inline-flex;max-width:100%;color:var(--text-secondary);font-weight:600;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.knowledge-v1__catalog-link:hover,.knowledge-v1__catalog-link:focus-visible{color:var(--brand-dark);text-decoration:underline;text-underline-offset:2px}@media (min-width:1040px){.knowledge-v1__results-main{flex:1 1 600px;min-width:600px;width:auto}.knowledge-v1__result-card{min-width:600px}.knowledge-v1__results-aside{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));flex:1 1 400px;min-width:400px;width:auto}.knowledge-v1__results-cta{min-width:400px}}@media (max-width:1200px){.knowledge-v1__card{min-height:0}.knowledge-v1__inner{min-height:0;width:100%;max-width:none;gap:var(--space-40);padding:var(--space-40) var(--space-24)}.knowledge-v1__copy,.knowledge-v1__lead{max-width:none}.knowledge-v1__topics-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.knowledge-v1__alphabet-links{column-gap:var(--space-40)}.knowledge-v1__catalog-links{column-gap:var(--space-24)}.knowledge-v1__results{max-width:100%;min-width:0;overflow-x:hidden;overflow-x:clip}.knowledge-v1__results-layout{gap:var(--space-32)}.knowledge-v1__results-filters{align-self:flex-start;width:calc(100% + var(--page-gutter));max-width:none;min-width:0;margin-inline-end:calc(var(--page-gutter) * -1);overscroll-behavior-x:contain;scroll-padding-inline-end:0}}@media (max-width:768px){.knowledge-v1__card{min-height:360px}.knowledge-v1__bg::after{background:linear-gradient( 180deg,color-mix(in srgb,var(--bg-fill-page) 96%,transparent) 0%,color-mix(in srgb,var(--bg-fill-page) 84%,transparent) 48%,color-mix(in srgb,var(--bg-fill-page) 42%,transparent) 100% ),linear-gradient( 90deg,color-mix(in srgb,var(--bg-fill-page) 94%,transparent) 0%,var(--bg-fill-filter-widget) 72%,transparent 100% )}.knowledge-v1__bg img{object-position:72% center}.knowledge-v1__inner{padding:var(--space-32) var(--space-16);gap:var(--space-32)}.knowledge-v1__search-field{min-height:56px}.knowledge-v1__search-submit{width:64px;height:44px}.knowledge-v1__search-submit img{width:64px;height:44px}.knowledge-v1__topics{margin-top:var(--space-48)}.knowledge-v1__topics-grid{grid-template-columns:minmax(0,1fr);gap:var(--space-16)}.knowledge-v1__topic-card{padding:var(--space-24) var(--space-16)}.knowledge-v1__alphabet{margin-top:var(--space-48)}.knowledge-v1__results{margin-top:var(--space-48);padding-top:var(--space-24)}.knowledge-v1__results-layout{gap:var(--space-24)}.knowledge-v1__result-card-link{gap:var(--space-24);padding:var(--space-20) var(--space-16)}.knowledge-v1__result-card-top{flex-direction:column;gap:var(--space-16)}.knowledge-v1__result-card-tag{max-width:none;align-self:flex-start}.knowledge-v1__results-chip{min-height:44px;padding:var(--space-10) var(--space-16)}.knowledge-v1__alphabet-card{min-height:0;padding:var(--space-24) var(--space-16) var(--space-20)}.knowledge-v1__alphabet-letters{gap:8px;padding-bottom:var(--space-24)}.knowledge-v1__alphabet-letter{width:44px;height:44px}.knowledge-v1__alphabet-links{column-gap:var(--space-24)}.knowledge-v1__catalog{margin-top:var(--space-48)}.knowledge-v1__catalog-trigger{padding:var(--space-16)}.knowledge-v1__catalog-icon{display:none}.knowledge-v1__catalog-meta{display:none}.knowledge-v1__catalog-panel-inner{padding:0}.knowledge-v1__catalog-panel-content{padding:var(--space-16) var(--space-16) var(--space-20)}.knowledge-v1__catalog-links{column-gap:var(--space-20)}}@media (prefers-reduced-motion:reduce){.knowledge-v1__catalog-chevron-svg,.knowledge-v1__catalog-panel,.knowledge-v1__catalog-panel-content{transition:none}}.hero-v10{box-sizing:border-box}.hero-v10__grid{display:grid;grid-template-columns:minmax(0,764fr) minmax(0,807fr);gap:var(--space-64);align-items:stretch}.hero-v10__content{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-40);min-width:0}.hero-v10__main{gap:var(--space-32)}.hero-v10__lead{gap:var(--space-20)}.hero-v10__eyebrow.eyebrow{color:var(--text-muted)}.hero-v10__title{margin:0;color:var(--text-primary)}.hero-v10__subtitle{margin:0;max-width:700px;color:var(--text-secondary)}.hero-v10__expert{display:flex;gap:var(--space-18);align-items:center}.hero-v10__expert-photo{display:block;flex:none;width:60px;height:60px;border-radius:var(--radius-full);object-fit:cover}.hero-v10__expert-copy{gap:0;min-width:0}.hero-v10__expert-name{margin:0;padding:var(--space-4) 0 0;color:var(--brand-dark)}.hero-v10__expert-role{margin:0;color:var(--ui-border-strong)}.hero-v10__meta{display:flex;flex-wrap:wrap;gap:var(--space-16);align-items:center;color:var(--ui-border-strong)}.hero-v10__meta-date{margin:0}.hero-v10__meta-dot{width:6px;height:6px;border-radius:var(--radius-full);background:var(--ui-border-strong);flex:none}.hero-v10__meta-read{display:inline-flex;gap:var(--space-8);align-items:center}.hero-v10__meta-clock{width:24px;height:24px;color:var(--ui-border-strong)}.hero-v10__media{min-width:0;align-self:stretch}.hero-v10__image{display:block;width:100%;height:100%;min-height:320px;max-height:558px;object-fit:cover;object-position:center;border-radius:var(--radius)}@media (max-width:1200px){.hero-v10__grid{grid-template-columns:minmax(0,1fr);gap:var(--space-40)}.hero-v10__image{min-height:240px;max-height:none;aspect-ratio:807 \/ 558}}@media (max-width:768px){.hero-v10__content{gap:var(--space-32)}.hero-v10__subtitle{max-width:none}.hero-v10__image{min-height:200px}}.news-v1{box-sizing:border-box;--news-v1-layout-gap:44px;--news-v1-thumb-width:240px;--news-v1-card-pad:var(--space-4);--news-v1-content-pad-x:var(--space-24);--news-v1-aside-min-height:600px;--news-v1-featured-min-height:600px;--news-v1-compact-gap:var(--space-40);--news-v1-compact-content-min-height:171px;--news-v1-arrow-offset-x:var(--space-24);--news-v1-arrow-offset-y:var(--space-12);--news-v1-arrow-reserve:calc(var(--news-v1-arrow-offset-x) + 30px);--news-v1-aside-count:3}.news-v1__inner{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"head actions\" \"list list\";column-gap:var(--space-32);row-gap:var(--space-40);align-items:end}.news-v1__head{grid-area:head;min-width:0;align-self:end}.news-v1__head-main{max-width:725px}.news-v1__eyebrow{color:var(--brand)}.news-v1__title{margin:0;color:var(--text-primary)}.news-v1__all-link{grid-area:actions;align-self:end;justify-self:end;color:var(--text-secondary)}.news-v1__all-link:hover,.news-v1__all-link:focus-visible{color:var(--brand-dark)}.news-v1__slider-foot{grid-area:list;width:100%;min-width:0;align-self:stretch}.news-v1__pagination-host{display:none}.news-v1__carousel{width:100%;overflow:hidden}.news-v1__slider.swiper{overflow:hidden}.news-v1__slider .news-v1__layout.swiper-wrapper{display:grid;grid-template-columns:minmax(0,800fr) minmax(0,795fr);grid-template-rows:repeat(var(--news-v1-aside-count),auto);gap:var(--space-24) var(--news-v1-layout-gap);align-items:stretch;width:100%;min-width:0;min-height:var(--news-v1-aside-min-height);transform:none;box-sizing:border-box}.news-v1__slider .swiper-slide{width:auto;height:auto;margin:0;box-sizing:border-box;min-width:0}.news-v1__slider .swiper-slide:first-child{grid-column:1;grid-row:1 \/ span var(--news-v1-aside-count);min-height:var(--news-v1-featured-min-height)}.news-v1__slider .swiper-slide:not(:first-child){grid-column:2}.news-v1__card{position:relative;display:block;height:100%;border:1px solid var(--ui-divider);border-radius:var(--radius);color:inherit;text-decoration:none;box-sizing:border-box;transition:border-color .16s ease}.news-v1__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}@media (hover:hover){.news-v1__card:hover{border-color:color-mix(in srgb,var(--brand) 35%,var(--ui-divider))}}.news-v1__card--featured{display:flex;flex-direction:column;min-height:var(--news-v1-featured-min-height);padding:var(--news-v1-card-pad);overflow:hidden;min-width:0}.news-v1__card--featured .news-v1__card-media{flex:none;border-radius:var(--radius);overflow:hidden}.news-v1__card--featured .news-v1__card-img{aspect-ratio:793 \/ 399}.news-v1__card--featured .news-v1__card-content{flex:1 1 auto;padding:var(--space-12) var(--news-v1-content-pad-x) var(--space-4);margin-top:var(--space-20);padding-right:var(--news-v1-arrow-reserve);justify-content:space-between;gap:var(--space-12)}.news-v1__card--compact{display:flex;align-items:stretch;gap:var(--news-v1-compact-gap);padding:var(--news-v1-card-pad);min-width:0}.news-v1__card--compact .news-v1__card-media{flex:none;width:var(--news-v1-thumb-width);max-width:40%;border-radius:var(--radius);overflow:hidden}.news-v1__card--compact .news-v1__card-img{aspect-ratio:240 \/ 186;height:100%;min-height:100%}.news-v1__card--compact .news-v1__card-content{flex:1 1 auto;min-width:0;min-height:var(--news-v1-compact-content-min-height);justify-content:space-between;gap:var(--space-12);padding:var(--space-12) var(--news-v1-arrow-reserve) var(--space-12) 0}.news-v1__card-media{display:block}.news-v1__card-img{display:block;width:100%;height:auto;object-fit:cover}.news-v1__card-content{position:relative;display:flex;flex-direction:column;gap:var(--space-12);min-width:0}.news-v1__card-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;column-gap:var(--space-16);row-gap:var(--space-8);min-width:0}.news-v1__tag{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:max-content;max-width:100%;box-sizing:border-box;padding:var(--space-6) var(--space-8);border-radius:var(--radius-pill);color:var(--brand-dark);font-weight:600;line-height:1.4;white-space:nowrap;background:var(--brand-opacity-20)}.news-v1__expert{flex:0 1 auto;min-width:min(100%,12rem);max-width:100%;padding:var(--space-4) var(--space-10) var(--space-4) 0;box-sizing:border-box;color:var(--brand-dark);text-align:left}.news-v1__card-title{margin:0;flex:1 1 auto;min-width:0;color:var(--text-primary)}.news-v1__card--compact .news-v1__card-title{max-width:none}.news-v1__meta{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-8) var(--space-16);color:var(--ui-border-strong)}.news-v1__meta-date{white-space:nowrap}.news-v1__meta-dot{flex:none;width:6px;height:6px;border-radius:var(--radius-full);background:var(--ui-border-default)}.news-v1__meta-read{display:inline-flex;align-items:center;gap:var(--space-8);white-space:nowrap}.news-v1__meta-clock{flex:none;width:24px;height:24px;color:var(--ui-border-strong)}.news-v1__card-arrow{position:absolute;right:var(--news-v1-arrow-offset-x);bottom:var(--news-v1-arrow-offset-y);color:var(--ui-border-default);opacity:0.5;pointer-events:none;display:flex;align-items:center;justify-content:center;width:30px;height:30px}.news-v1__card-arrow-icon{display:block;width:21px;height:22px;transform:rotate(45deg);transform-origin:center}.news-v1__card--featured .news-v1__card-arrow{bottom:var(--news-v1-arrow-offset-y)}@media (min-width:1450px){.news-v1__slider .news-v1__layout.swiper-wrapper{gap:calc((var(--space-8) + var(--space-10)) \/ 2) var(--news-v1-layout-gap)}}@media (max-width:1449px){.news-v1{--news-v1-layout-gap:var(--space-24);--news-v1-aside-min-height:0;--news-v1-featured-min-height:0;--news-v1-thumb-width:clamp(160px,28%,240px);--news-v1-compact-gap:var(--space-24);--news-v1-compact-content-min-height:0;--news-v1-content-pad-x:var(--space-16);--news-v1-arrow-offset-x:var(--space-16);--news-v1-arrow-reserve:calc(var(--news-v1-arrow-offset-x) + 28px)}.news-v1__inner{grid-template-columns:minmax(0,1fr);grid-template-areas:\"head\" \"actions\" \"list\";row-gap:0;align-items:stretch}.news-v1__head{margin-bottom:var(--space-32)}.news-v1__all-link{justify-self:start;margin-bottom:var(--space-40)}.news-v1__slider .news-v1__layout.swiper-wrapper{grid-template-columns:1fr;grid-template-rows:none;grid-auto-rows:auto;min-height:0;gap:var(--space-24)}.news-v1__slider .swiper-slide:first-child,.news-v1__slider .swiper-slide:not(:first-child){grid-column:auto;grid-row:auto;min-height:0}.news-v1__card--featured{flex-direction:row;align-items:stretch;gap:var(--news-v1-compact-gap);min-height:0}.news-v1__card--featured .news-v1__card-media{flex:none;width:var(--news-v1-thumb-width);max-width:40%}.news-v1__card--featured .news-v1__card-img{aspect-ratio:240 \/ 186;height:100%;min-height:100%}.news-v1__card--featured .news-v1__card-content{flex:1 1 auto;min-width:0;margin-top:0;justify-content:flex-start;gap:var(--space-12);padding:var(--space-12) var(--news-v1-arrow-reserve) var(--space-12) 0}.news-v1__card--featured .news-v1__card-arrow{bottom:var(--news-v1-arrow-offset-y)}.news-v1__card--compact .news-v1__card-content{gap:var(--space-12);justify-content:flex-start}.news-v1__card-top{justify-content:flex-start}.news-v1__expert{margin-left:0;text-align:left}.news-v1__card-title{flex:none}}@media (max-width:991px){.news-v1{--news-v1-thumb-width:clamp(120px,30%,200px);--news-v1-compact-gap:var(--space-16)}}@media (max-width:768px){.news-v1{--news-v1-layout-gap:var(--space-24);--news-v1-content-pad-x:var(--space-16)}.news-v1__inner{grid-template-columns:minmax(0,1fr);grid-template-areas:\"head\" \"list\" \"actions\";column-gap:0;row-gap:var(--space-24);align-items:stretch}.news-v1__head{margin-bottom:0}.news-v1__head-main.stack--md{gap:var(--space-16)}.news-v1__all-link{justify-self:center;align-self:center;display:inline-flex;align-items:center;justify-content:center;gap:0;width:min(260px,100%);min-height:40px;padding:var(--space-12) var(--space-24);border:2px solid var(--brand);border-radius:var(--radius-btn);background:transparent;color:var(--brand-dark);font-size:max(var(--text-min),var(--text-body-sm));font-weight:600;line-height:1;letter-spacing:-0.01em;text-transform:uppercase;text-decoration:none;margin-bottom:0;margin-top:calc(var(--space-16) - var(--space-24));transition:background-color .16s ease}.news-v1__all-link:hover,.news-v1__all-link:focus-visible{background:var(--brand-opacity-15);color:var(--brand-dark)}.news-v1__all-link-icon{display:none}.news-v1__pagination-host{display:flex}.news-v1__slider.swiper{overflow:hidden}.news-v1__slider .news-v1__layout.swiper-wrapper{display:flex;grid-template-columns:none;grid-template-rows:none;min-height:0;gap:0}.news-v1__slider .swiper-slide{width:100%;height:auto;flex-shrink:0}.news-v1__slider .swiper-slide:first-child,.news-v1__slider .swiper-slide:not(:first-child){grid-column:auto;grid-row:auto;min-height:0}.news-v1__card,.news-v1__card--featured,.news-v1__card--compact{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:\"media\" \"top\" \"title\" \"meta\";column-gap:0;row-gap:var(--space-12);align-items:stretch;height:auto;min-height:0;padding:var(--space-8) var(--space-8) var(--space-16);overflow:visible}.news-v1__card-media,.news-v1__card--featured .news-v1__card-media,.news-v1__card--compact .news-v1__card-media{grid-area:media;width:100%;max-width:none;aspect-ratio:793 \/ 399;height:auto;align-self:stretch;border-radius:var(--radius);overflow:hidden}.news-v1__card-img,.news-v1__card--featured .news-v1__card-img,.news-v1__card--compact .news-v1__card-img{width:100%;height:100%;min-height:0;aspect-ratio:auto;object-fit:cover}.news-v1__card-content{display:contents}.news-v1__card-top{grid-area:top;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;column-gap:var(--space-16);row-gap:var(--space-8)}.news-v1__tag{font-size:max(var(--text-min),var(--text-body-sm))}.news-v1__expert{min-width:0;padding:0;font-size:max(var(--text-min),var(--text-body-sm));font-weight:600;text-align:left}.news-v1__card-title{grid-area:title;flex:none;font-size:var(--text-body);font-weight:500;line-height:var(--lh-body)}.news-v1__meta{grid-area:meta;font-size:max(var(--text-min),var(--text-body-sm))}.news-v1__meta-read{gap:var(--space-4)}.news-v1__card-arrow{display:none}}@media (max-width:576px){.news-v1__meta{gap:var(--space-8) var(--space-12)}}@media (prefers-reduced-motion:reduce){.news-v1__card{transition:none}}.hero-v12{position:relative;overflow:hidden;min-height:527px;background:var(--bg-fill-page);box-sizing:border-box}.hero-v12__bg>img{display:block;width:100%;height:100%;aspect-ratio:1920 \/ 527;object-fit:cover;object-position:center;opacity:.2}.hero-v12__wash{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,color-mix(in srgb,var(--bg-fill-page) 85%,transparent) 0%,transparent 16.2%);pointer-events:none}.hero-v12__container{position:relative;z-index:2;padding-top:78px;padding-bottom:78px}.hero-v12__layout{display:grid;grid-template-columns:minmax(0,564px) minmax(0,878px);align-items:center;justify-content:space-between;gap:clamp(var(--space-64),10.4vw,200px)}.hero-v12__content{display:flex;flex-direction:column;align-items:flex-start;gap:34px;min-width:0}.hero-v12__main{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-24);width:100%}.hero-v12__title{margin:0;color:var(--text-primary);line-height:1.3}.hero-v12__title .accent{color:var(--text-muted)}.hero-v12__lead{margin:0;color:var(--text-secondary);font-weight:600}.hero-v12__cta{flex:none;min-height:53px;padding:14px var(--space-32)}.hero-v12__trust{display:flex;align-items:center;gap:var(--space-12);color:var(--brand)}.hero-v12__trust-icon{display:flex;flex:none;align-items:center;justify-content:center;width:44px;height:44px}.hero-v12__trust-icon img{display:block;width:28px;height:36px;aspect-ratio:28 \/ 36;object-fit:contain}.hero-v12__trust-text{color:var(--brand);font-weight:600}.hero-v12__stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-24) 26px;width:100%}.hero-v12__stat{display:flex;align-items:flex-start;justify-content:center;gap:var(--space-32);min-height:170px;padding:42px var(--space-32);border:none;border-radius:var(--radius);background:var(--white-opacity-50);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);box-sizing:border-box}.hero-v12__stat-icon{display:flex;flex:none;align-items:center;justify-content:center;width:54px;height:54px;border-radius:var(--radius-pill);background:var(--brand-opacity-20)}.hero-v12__stat-icon img{display:block;width:var(--hero-v12-icon-w);height:var(--hero-v12-icon-h);max-width:54px;max-height:54px;object-fit:contain}.hero-v12__stat-copy{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-8);width:233px;min-width:0}.hero-v12__stat-value{color:var(--brand);font-family:var(--font-heading);font-size:44px;font-weight:400;line-height:1;letter-spacing:-.04em;white-space:nowrap}.hero-v12__stat-text{color:var(--text-secondary);font-weight:600;line-height:1.4}@media (max-width:1500px){.hero-v12__layout{grid-template-columns:minmax(380px,1fr) minmax(620px,1.4fr);gap:var(--space-64)}.hero-v12__stat{gap:var(--space-20);padding-right:var(--space-24);padding-left:var(--space-24)}}@media (max-width:1200px){.hero-v12__container{padding-top:var(--space-64);padding-bottom:var(--space-64)}.hero-v12__layout{grid-template-columns:1fr;gap:var(--space-48)}.hero-v12__content{max-width:720px}}@media (max-width:700px){.hero-v12__container{padding-top:var(--space-40);padding-bottom:var(--space-40)}.hero-v12__layout{gap:var(--space-32)}.hero-v12__content{gap:var(--space-24)}.hero-v12__main{gap:var(--space-20)}.hero-v12__lead br{display:none}.hero-v12__stats{grid-template-columns:1fr;gap:var(--space-12)}.hero-v12__stat{justify-content:flex-start;min-height:0;padding:var(--space-24)}.hero-v12__stat-copy{width:auto}.hero-v12__stat-value{font-size:36px}.hero-v12__trust{align-items:flex-start}}.reviews-v6.reviews-v6--card-bg-white .reviews-v6__card,.reviews-v6.reviews-v6--card-bg-white .reviews-v6__card:hover,.reviews-v6.reviews-v6--card-bg-white .reviews-v6__card:focus-visible{background:transparent}.reviews-v6__inner.stack--xl{gap:var(--space-40)}.reviews-v6__title{margin:0;color:var(--text-primary);text-transform:uppercase;letter-spacing:-0.01em}.reviews-v6__grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(var(--space-12),1.6vw,var(--space-24));width:100%}.reviews-v6__card{container-type:inline-size;display:flex;align-items:center;gap:clamp(var(--space-8),2.5cqi,var(--space-24));width:100%;min-width:0;min-height:clamp(92px,7.5vw,116px);padding:var(--space-16) clamp(var(--space-12),2.5cqi,var(--space-24)) var(--space-16) clamp(var(--space-16),4cqi,var(--space-40));border:1px solid var(--ui-border-default);border-radius:var(--radius);background:transparent;box-sizing:border-box;text-decoration:none;color:inherit;overflow:hidden;transition:background-color .16s ease,border-color .16s ease}.reviews-v6__card:hover,.reviews-v6__card:focus-visible{border-color:var(--ui-border-strong)}.reviews-v6__card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.reviews-v6__score.displaytext{margin:0;flex:0 1 auto;min-width:0;max-width:34%;color:var(--text-secondary);line-height:1.2;font-size:clamp(1.25rem,18cqi,var(--text-display))}.reviews-v6__meta{min-width:0;flex:1 1 0;overflow:hidden}.reviews-v6__meta.stack--sm{gap:var(--space-8)}.reviews-v6__stars{min-width:0;max-width:100%}.reviews-v6__stars .stars-rating--lg{--stars-rating-size:clamp(11px,9.5cqi,24px);--stars-rating-gap:clamp(1px,0.85cqi,5px);max-width:100%}.reviews-v6__logo{display:block;width:auto;max-width:min(100%,clamp(calc(var(--reviews-v6-logo-w,196px) * 0.55),11vw,var(--reviews-v6-logo-w,196px)));max-height:clamp(calc(var(--reviews-v6-logo-h,42px) * 0.55),2.4vw,var(--reviews-v6-logo-h,42px));height:auto;object-fit:contain;object-position:left center}@media (max-width:768px){.reviews-v6__inner.stack--xl{gap:var(--space-32)}.reviews-v6__grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-12)}.reviews-v6__card{container-type:normal;flex-direction:column;align-items:flex-start;min-height:0;padding:var(--space-12) var(--space-16);gap:var(--space-8)}.reviews-v6__score.displaytext{flex:none;max-width:none;font-size:clamp(1.625rem,var(--fluid-display-sm),var(--text-display-sm))}.reviews-v6__meta{flex:none;width:100%;overflow:visible}.reviews-v6__stars .stars-rating--lg{--stars-rating-size:18px;--stars-rating-gap:var(--space-2)}.reviews-v6__logo{width:auto;max-width:min(100%,calc(var(--reviews-v6-logo-w,196px) * 0.55));max-height:min(calc(var(--reviews-v6-logo-h,42px) * 0.65),28px)}}.reviews-v5{box-sizing:border-box;--reviews-v5-grid-gap:calc(var(--space-64) + var(--space-48) + var(--space-24));--reviews-v5-quote-lines:4;--reviews-v5-sticky-top:calc(var(--site-sticky-offset,0px) + var(--space-24))}.reviews-v5.reviews-v5--card-bg-white .reviews-v5__card{background:var(--white)}.reviews-v5__grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-40);align-items:start}.reviews-v5__main{min-width:0;max-width:1080px}.reviews-v5__main.stack--xl{gap:var(--space-40)}.reviews-v5__list{display:flex;flex-direction:column;gap:var(--space-24);margin:0;padding:0;list-style:none}.reviews-v5__empty[hidden],.reviews-v5__list[hidden]{display:none}.reviews-v5__item.is-collapsed{display:none}.reviews-v5__card{padding:var(--space-16) var(--space-24);border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box}.reviews-v5__card-top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);flex:none}.reviews-v5__rating-head{display:flex;align-items:center;gap:var(--space-8);flex:none}.reviews-v5__rating-label{margin:0;color:var(--text-muted)}.reviews-v5__rating-star{flex:none;width:26px;height:26px;color:var(--rating-accent)}.reviews-v5__author{margin:0;color:var(--ui-border-strong);text-align:right}.reviews-v5__card-body{min-width:0}.reviews-v5__quote-block{min-width:0}.reviews-v5__quote{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--reviews-v5-quote-lines);margin:0;overflow:hidden;color:var(--text-secondary)}.reviews-v5__read-more{display:none;align-items:center;min-height:24px;padding:0;border:0;background:none;cursor:pointer;text-align:left;color:var(--text-secondary);font-family:var(--font-body);font-size:1em;font-weight:600;line-height:var(--lh-body-tight)}.reviews-v5__card.is-overflow .reviews-v5__read-more{display:inline-flex}.reviews-v5__read-more:hover,.reviews-v5__read-more:focus-visible{color:var(--brand-dark)}.reviews-v5__meta-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-8);max-width:515px}.reviews-v5__meta{display:flex;flex-wrap:wrap;gap:var(--space-8);margin:0}.reviews-v5__meta-label{color:var(--ui-border-strong)}.reviews-v5__meta-value{color:var(--text-secondary)}.reviews-v5__meta-divider{display:block;flex:none;width:1px;height:21px;background:var(--ui-border-soft)}.reviews-v5__card-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);flex:none}.reviews-v5__source-logo{display:block;width:auto;max-width:124px;height:21px;object-fit:contain;object-position:left center}.reviews-v5__date{margin:0;color:var(--ui-border-strong)}.reviews-v5__more-wrap{display:flex;justify-content:center}.reviews-v5__more-wrap[hidden],.reviews-v5__more[hidden]{display:none}.reviews-v5__more{min-width:218px;min-height:45px;padding:var(--space-12) var(--space-24)}.reviews-v5__filters{min-width:0;max-width:505px}.reviews-v5__filters-panel{position:relative;width:100%;border-radius:var(--radius);background:var(--bg-fill-filter-widget)}.reviews-v5__filters-inner{position:relative;width:100%;padding:0 var(--space-32) var(--space-40);border-radius:inherit;box-sizing:border-box;overflow:hidden}.reviews-v5__filters-body.stack--lg{gap:var(--space-24);width:100%;padding-top:var(--space-24);box-sizing:border-box}.reviews-v5__filters-head{width:100%;box-sizing:border-box}.reviews-v5__filters-toggle{display:flex;align-items:center;justify-content:space-between;gap:var(--space-16);width:100%;margin:0;padding:var(--space-24) 0;border:0;border-bottom:1px solid var(--ui-border-default);background:transparent;color:inherit;text-align:left;cursor:pointer}.reviews-v5__filters-panel.is-collapsed .reviews-v5__filters-toggle{border-bottom:0}.reviews-v5__filters-title{margin:0;color:var(--text-primary)}.reviews-v5__filters-toggle-mark{display:flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;border:1px solid var(--ui-border-strong);border-radius:var(--radius);background:var(--white-opacity-50);box-sizing:border-box}.reviews-v5__filters-toggle-icon{flex:none;width:10px;height:18px;color:var(--text-secondary);transform:rotate(90deg);transform-origin:center;transition:transform 0.2s ease}.reviews-v5__filters-panel.is-collapsed .reviews-v5__filters-toggle-icon{transform:rotate(0deg)}.reviews-v5__filters-form.stack--lg{gap:var(--space-24);width:100%}.reviews-v5__filters-fields.stack--md{gap:var(--space-16);width:100%}.reviews-v5__field{width:100%}.reviews-v5__field-label{color:var(--text-primary)}.reviews-v5__select-wrap{position:relative;display:block;width:100%}.reviews-v5__select.field__input{width:100%;min-height:54px;padding:var(--space-18) calc(var(--space-20) + 24px) var(--space-18) var(--space-20);border:1px solid var(--ui-border-strong);border-radius:var(--radius);background:var(--white-opacity-50);color:var(--text-secondary);cursor:pointer;appearance:none}.reviews-v5__select.field__input:has(option[value=\"all\"]:checked){color:var(--text-muted)}.reviews-v5__select.field__input:focus{border-color:var(--brand);outline:none}.reviews-v5__select-chevron{position:absolute;top:50%;right:var(--space-20);width:7px;height:14px;color:var(--ui-border-default);pointer-events:none;transform:translateY(-50%) rotate(90deg);transform-origin:center}.reviews-v5__filters-submit{width:100%;min-height:53px;padding:var(--space-14) var(--space-32);border:0;border-radius:var(--radius);background:var(--ui-divider);color:var(--ui-border-strong);font-weight:600;line-height:1.2;text-transform:uppercase;letter-spacing:-0.01em;cursor:not-allowed}.reviews-v5__filters-submit:not(:disabled){background:var(--brand);color:var(--text-on-brand);cursor:pointer}.reviews-v5__filters-submit:not(:disabled):hover{background:var(--brand-dark)}@media (min-width:1201px){.reviews-v5__grid{grid-template-columns:minmax(0,1fr) minmax(280px,400px);gap:clamp(var(--space-24),3vw,var(--reviews-v5-grid-gap))}.reviews-v5__filters{position:sticky;top:var(--reviews-v5-sticky-top);align-self:start}}@media (min-width:1500px){.reviews-v5__grid{grid-template-columns:minmax(0,1fr) minmax(280px,505px)}}@media (max-width:1200px){.reviews-v5__filters{order:-1;max-width:none}.reviews-v5__filters-inner{padding:var(--space-16) var(--space-24)}.reviews-v5__filters-panel:not(.is-collapsed) .reviews-v5__filters-inner{padding-bottom:var(--space-24)}.reviews-v5__filters-toggle{padding:0;min-height:0;gap:var(--space-12)}.reviews-v5__filters-panel:not(.is-collapsed) .reviews-v5__filters-toggle{padding-bottom:var(--space-16)}.reviews-v5__filters-panel:not(.is-collapsed) .reviews-v5__filters-body.stack--lg{padding-top:var(--space-16)}.reviews-v5__filters-panel.is-collapsed .reviews-v5__filters-body{display:none}}@media (min-width:1201px){.reviews-v5__filters-panel.is-collapsed .reviews-v5__filters-body{display:block}.reviews-v5__filters-toggle{pointer-events:none;cursor:default}.reviews-v5__filters-toggle-mark{display:none}}@media (max-width:768px){.reviews-v5__card{padding:var(--space-16)}.reviews-v5__card-top{flex-direction:column;align-items:flex-start;gap:var(--space-8)}.reviews-v5__author{text-align:left}.reviews-v5__read-more{font-size:var(--text-body-sm);font-weight:500;min-height:0}.reviews-v5__rating-star{width:20px;height:20px}.reviews-v5__meta-row{max-width:none}}.hero-v9__bg > img{aspect-ratio:48 \/ 19}.hero-v9{background-color:var(--bg-fill-page);box-sizing:border-box;min-height:calc(100vw * 760 \/ 1920);--hero-v9-doctor-right:calc(var(--page-gutter) + var(--space-64) + var(--space-24));--hero-v9-video-right:calc(var(--page-gutter) + var(--space-64))}.hero-v9.has-block-bg.section-pad-top-lg>.container{padding-bottom:0}@media (min-width:1281px){.hero-v9.has-block-bg.section-pad-top-lg>.container{padding-top:102px;padding-bottom:var(--section-y-bottom-lg)}}.hero-v9__bg img{width:100%;height:100%;object-fit:cover;object-position:center}.hero-v9>.container{position:relative;z-index:2}.hero-v9__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-40);align-items:start}.hero-v9__content{max-width:768px;gap:var(--space-32)}.hero-v9__content .hero-v9__actions{margin-top:var(--space-24)}.hero-v9__meta{display:flex;flex-wrap:wrap;gap:var(--space-22);align-items:center}.hero-v9__chip{display:inline-flex;gap:var(--space-4);align-items:center;height:40px;padding:var(--space-10);border-radius:var(--radius-pill);background:var(--white-opacity-75);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));color:var(--text-secondary);box-sizing:border-box}.hero-v9__chip--link{text-decoration:none;color:var(--text-secondary);transition:color .16s ease}.hero-v9__chip--link:hover,.hero-v9__chip--link:focus-visible{color:var(--brand-dark)}.hero-v9__chip-star{display:block;flex:none;color:var(--rating-accent)}.hero-v9__chip-text{margin:0;color:var(--text-secondary)}.hero-v9__title{margin:0;max-width:100%;color:var(--text-primary);line-height:1.2}.hero-v9__roles{display:flex;flex-wrap:wrap;gap:var(--space-10);align-items:center;margin:0;max-width:380px;color:var(--text-secondary)}.hero-v9__roles-dot{width:6px;height:6px;border-radius:var(--radius-full);background:var(--text-secondary);flex:none}.hero-v9__stats{display:flex;flex-wrap:wrap;gap:var(--space-40);align-items:flex-start;width:max-content;padding:var(--space-24);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white);box-sizing:border-box}.hero-v9__stat{display:flex;gap:var(--space-16);align-items:flex-start;flex:none;min-width:0}.hero-v9__stat--no-icon{gap:0}.hero-v9__stat-icon{display:flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px}.hero-v9__stat-icon img{display:block;width:36px;height:36px;object-fit:contain}.hero-v9__stat-copy{gap:var(--space-4);min-width:0}.hero-v9__stat-label{margin:0;max-width:120px;color:var(--text-muted)}.hero-v9__stat-value{margin:0;max-width:120px;color:var(--text-primary)}.hero-v9__actions{flex-wrap:nowrap;width:max-content;max-width:100%;gap:var(--space-24)}.hero-v9__cta{flex:none}.hero-v9__question{display:flex;gap:var(--space-10);align-items:center;padding:0;border:0;background:none;text-align:left;color:inherit;cursor:pointer}.hero-v9__question-icon{display:flex;align-items:center;justify-content:center;flex:none;width:64px;height:64px;border-radius:var(--radius-full);background:var(--white-opacity-50);overflow:hidden}.hero-v9__question-icon img{display:block;width:32px;height:32px;object-fit:contain}.hero-v9__question-label{margin:0;max-width:157px;color:var(--text-secondary);transition:color .16s ease}.hero-v9__question:hover .hero-v9__question-label,.hero-v9__question:focus-visible .hero-v9__question-label{color:var(--brand-dark)}.hero-v9__foot{position:absolute;inset:0;pointer-events:none}.hero-v9__foot .hero-v9__video-card{pointer-events:auto}.hero-v9__doctor{position:absolute;right:var(--hero-v9-doctor-right);bottom:0;z-index:0;width:min(43vw,819px);max-height:calc(100% - var(--space-20));object-fit:contain;object-position:right bottom;pointer-events:none}.hero-v9__video-card{position:absolute;right:var(--hero-v9-video-right);bottom:calc(var(--space-64) + var(--space-40));z-index:3;display:flex;gap:var(--space-20);align-items:flex-start;width:min(100%,251px);min-height:118px;padding:var(--space-16);border:1px solid var(--ui-border-default);border-radius:var(--radius);background:var(--white-opacity-40);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));text-decoration:none;color:inherit;box-sizing:border-box;cursor:pointer;transition:border-color .16s ease}.hero-v9__video-card:hover,.hero-v9__video-card:focus-visible{border-color:var(--brand)}.hero-v9__play-surface{position:relative;display:flex;align-items:center;justify-content:center;width:48px;height:48px;flex:none;border-radius:var(--radius-full);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur))}.hero-v9__play-bg{position:absolute;inset:0;border-radius:var(--radius-full);background:var(--brand-light);opacity:0.4;transition:opacity .16s ease}.hero-v9__play-icon{position:relative;z-index:1;display:block;color:var(--text-on-brand)}.hero-v9__video-copy{gap:var(--space-8);min-width:0;padding-top:var(--space-4)}.hero-v9__video-label{margin:0;max-width:130px;color:var(--text-primary)}.hero-v9__video-duration{margin:0;color:var(--text-accent)}.hero-v9__video-card:hover .hero-v9__play-bg,.hero-v9__video-card:focus-visible .hero-v9__play-bg{opacity:0.65}@media (max-width:1280px){.hero-v9{min-height:auto;padding-bottom:min(72vw,520px)}.hero-v9.has-block-bg.section-pad-top-lg>.container{padding-top:var(--section-y-top-lg);padding-bottom:0}.hero-v9__bg img{object-position:center top}.hero-v9>.container{width:100%;max-width:none}.hero-v9__grid{grid-template-columns:minmax(0,1fr);min-height:auto}.hero-v9__content{max-width:none;padding:0}.hero-v9__doctor{right:var(--page-gutter);left:auto;bottom:0;width:min(92vw,520px);max-height:min(72vw,520px);transform:none;object-position:right bottom}.hero-v9__video-card{left:var(--page-gutter);right:auto;bottom:var(--space-24);width:min(100%,226px);gap:var(--space-12);min-height:auto;padding:var(--space-10)}.hero-v9__video-card .hero-v9__video-copy{padding-top:0}}@media (max-width:991px){.hero-v9__stats{width:100%;gap:var(--space-24)}.hero-v9__stat{flex:1 1 calc(50% - var(--space-12))}}@media (max-width:768px){.hero-v9.has-block-bg.section-pad-top-lg>.container{padding-top:var(--section-y-top-lg);padding-bottom:0}.hero-v9__meta{flex-wrap:nowrap;gap:var(--space-2)}.hero-v9__chip-star{width:20px;height:20px}.hero-v9__chip,.hero-v9__chip-text{font-size:var(--text-body-sm)}.hero-v9__actions{position:relative;z-index:1;flex-direction:column;align-items:stretch;width:100%;gap:var(--space-12);margin-bottom:var(--space-16)}.hero-v9__cta{width:100%}.hero-v9__question{max-width:none;position:relative;z-index:1}.hero-v9__question-label{max-width:none}.hero-v9__stats{position:relative;z-index:1;flex-direction:column;align-items:stretch;width:100%}.hero-v9__stat{flex:none;width:100%}.hero-v9__stat-label,.hero-v9__stat-value{max-width:none}.hero-v9__roles{max-width:none}}.progression-stages-v3{box-sizing:border-box;--progression-stages-v3-icon-size:88px;--progression-stages-v3-icon-glyph:44px}.progression-stages-v3__inner{min-width:0}.progression-stages-v3__inner.stack--xl{gap:calc(var(--space-64) + var(--space-8))}.progression-stages-v3__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-40)}.progression-stages-v3__lead{flex:1 1 auto;min-width:0;max-width:818px}.progression-stages-v3__eyebrow{color:var(--text-muted)}.progression-stages-v3__title{margin:0;color:var(--text-primary)}.progression-stages-v3__notice{display:flex;flex:0 1 411px;gap:var(--space-24);align-items:flex-start;max-width:411px;padding:var(--space-16);border:1px solid var(--ui-border-default);border-radius:var(--radius);box-sizing:border-box}.progression-stages-v3__notice--no-icon{gap:0}.progression-stages-v3__notice-icon{display:block;flex:none;width:40px;height:40px;background-color:var(--brand);-webkit-mask:var(--progression-stages-v3-notice-icon) center \/ 32px 32px no-repeat;mask:var(--progression-stages-v3-notice-icon) center \/ 32px 32px no-repeat}.progression-stages-v3__notice-text{margin:0;min-width:0;font-weight:600;color:var(--text-secondary)}.progression-stages-v3__cards{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--space-24);width:100%;margin:0;padding:0;list-style:none}.progression-stages-v3__card{position:relative;display:flex;flex-direction:column;align-items:flex-end;gap:var(--space-24);min-width:0;min-height:290px;padding:var(--space-20) var(--space-16);border:1px solid var(--ui-border-soft);border-radius:var(--radius);background:var(--white-opacity-40);box-sizing:border-box;overflow:hidden}.progression-stages-v3__num{position:absolute;top:27px;left:15px;display:inline-flex;align-items:flex-start;gap:2px;color:var(--brand);line-height:0}.progression-stages-v3__num-val{font-weight:600;line-height:1.4}.progression-stages-v3__num-slash{font-weight:500;line-height:1.4}.progression-stages-v3__icon{display:flex;flex:none;align-items:center;justify-content:center;width:var(--progression-stages-v3-icon-size);height:var(--progression-stages-v3-icon-size);border-radius:var(--radius-full);background:var(--white);overflow:hidden}.progression-stages-v3__icon-spacer{flex:none;width:var(--progression-stages-v3-icon-size);height:var(--progression-stages-v3-icon-size)}.progression-stages-v3__icon-glyph{display:block;width:var(--progression-stages-v3-icon-glyph);height:var(--progression-stages-v3-icon-glyph);background-color:var(--brand);-webkit-mask:var(--progression-stages-v3-card-icon) center \/ contain no-repeat;mask:var(--progression-stages-v3-card-icon) center \/ contain no-repeat}.progression-stages-v3__copy{width:100%;min-width:0}.progression-stages-v3__copy.stack--sm{gap:var(--space-8)}.progression-stages-v3__card-title{margin:0;font-weight:600;color:var(--text-primary)}.progression-stages-v3__card-text{margin:0;color:var(--text-secondary)}@media (max-width:1600px){.progression-stages-v3{--progression-stages-v3-icon-size:clamp(40px,4.75vw,76px);--progression-stages-v3-icon-glyph:clamp(20px,2.375vw,38px)}}@media (max-width:1360px){.progression-stages-v3__cards{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width:1200px){.progression-stages-v3__inner.stack--xl{gap:var(--space-40)}.progression-stages-v3__head{flex-direction:column;align-items:stretch;gap:var(--space-24)}.progression-stages-v3__lead,.progression-stages-v3__notice{max-width:none;flex:1 1 auto}.progression-stages-v3__cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:768px){.progression-stages-v3{--progression-stages-v3-icon-size:44px;--progression-stages-v3-icon-glyph:22px}.progression-stages-v3__inner.stack--xl{gap:var(--space-24)}.progression-stages-v3__head{gap:var(--space-24)}.progression-stages-v3__lead.stack--md{gap:var(--space-16)}.progression-stages-v3__title{font-size:var(--text-title-sm);line-height:1.35;letter-spacing:0}.progression-stages-v3__notice{gap:var(--space-24)}.progression-stages-v3__notice-text{font-size:var(--text-base);line-height:1.34}.progression-stages-v3__cards{grid-template-columns:1fr;gap:var(--space-16)}.progression-stages-v3__card{gap:var(--space-16);min-height:0;padding:var(--space-8) var(--space-16)}.progression-stages-v3__num{top:11px}.progression-stages-v3__card-title{font-size:var(--text-base);line-height:1.34}.progression-stages-v3__card-text{font-size:var(--text-body-sm);line-height:var(--lh-body)}}.education-v1{box-sizing:border-box}.education-v1__grid{display:grid;grid-template-columns:minmax(0,665px) minmax(0,799px);justify-content:space-between;gap:var(--space-40);align-items:start}.education-v1__lead-wrap,.education-v1__lead,.education-v1__stats-card{overflow:visible}.education-v1__lead-wrap{min-width:0}.education-v1__lead{min-width:0}.education-v1__eyebrow{width:fit-content;max-width:100%;color:var(--text-muted)}.education-v1__title{margin:0;max-width:665px;color:var(--text-primary)}.education-v1__subtitle{margin:0;max-width:585px;color:var(--text-secondary)}.education-v1__stats-card{--education-v1-medal-size:54px;--education-v1-medal-offset:var(--space-24);position:relative;margin-top:calc(var(--education-v1-medal-offset) + var(--space-8));max-width:570px;border-radius:var(--radius);background:var(--bg-fill-filter-widget);padding:calc(var(--education-v1-medal-size) - var(--education-v1-medal-offset) + var(--space-16)) var(--space-24) var(--space-24);box-sizing:border-box}.education-v1__stats-card--no-medal{margin-top:0;padding:var(--space-24)}.education-v1__stats-medal{position:absolute;left:var(--space-24);top:calc(-1 * var(--education-v1-medal-offset));z-index:2;display:block;width:var(--education-v1-medal-size);height:var(--education-v1-medal-size);background-color:var(--brand);-webkit-mask:var(--education-v1-medal-src) center \/ contain no-repeat;mask:var(--education-v1-medal-src) center \/ contain no-repeat;pointer-events:none}.education-v1__stats-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-20);align-items:start;text-align:center}.education-v1__stat{align-items:center;gap:var(--space-12)}.education-v1__stat-value{margin:0;color:var(--brand)}.education-v1__stat-label{margin:0;color:var(--text-secondary);font-weight:600}.education-v1__content{min-width:0}.education-v1__cards{display:flex;flex-direction:column;gap:var(--space-16)}.education-v1__card{border:1px solid var(--ui-border-default);border-radius:var(--radius);background:transparent;box-sizing:border-box}.education-v1__card-body{padding:var(--space-20) var(--space-24)}.education-v1__card-title{margin:0;color:var(--text-primary)}.education-v1__rows{display:flex;flex-direction:column;gap:var(--space-16)}.education-v1__row{display:grid;grid-template-columns:120px minmax(0,1fr);gap:var(--space-16);align-items:start}.education-v1__period{margin:0;color:var(--text-secondary);font-weight:600}.education-v1__text{margin:0;color:var(--text-secondary)}.education-v1__bullets{margin:0;padding-left:27px;display:flex;flex-direction:column;gap:var(--space-12)}.education-v1__bullet{margin:0;color:var(--text-secondary)}@media (min-width:1201px){.education-v1__lead-wrap{align-self:stretch}.education-v1__lead{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24))}}@media (max-width:1200px){.education-v1__lead{position:static;top:auto}.education-v1__grid{grid-template-columns:1fr;gap:var(--space-32)}.education-v1__title,.education-v1__subtitle,.education-v1__stats-card{max-width:none}.education-v1__stats-card{width:100%}}@media (max-width:768px){.education-v1__stats-card{--education-v1-medal-size:48px;--education-v1-medal-offset:var(--space-20);margin-top:calc(var(--education-v1-medal-offset) + var(--space-8));padding:calc(var(--education-v1-medal-size) - var(--education-v1-medal-offset) + var(--space-16)) var(--space-16) var(--space-16)}.education-v1__stats-card--no-medal{margin-top:0;padding:var(--space-16)}.education-v1__stats-medal{left:var(--space-16);top:calc(-1 * var(--education-v1-medal-offset))}.education-v1__stats-list{grid-template-columns:1fr;gap:var(--space-16);text-align:left}.education-v1__stat{align-items:flex-start}.education-v1__card-body{padding:var(--space-16)}.education-v1__rows{gap:var(--space-12)}.education-v1__row{grid-template-columns:92px minmax(0,1fr);gap:var(--space-12)}.education-v1__bullets{padding-left:23px}}.certificates-v1{--certificates-v1-card-h:135px;--certificates-v1-lead-max:665px;--certificates-v1-list-max:800px;--certificates-v1-pdf-icon:url('\/assets\/src\/img\/certificates\/icon-pdf.svg');box-sizing:border-box}.certificates-v1__grid{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-40)}.certificates-v1__lead{flex:0 1 var(--certificates-v1-lead-max);min-width:0;max-width:var(--certificates-v1-lead-max)}.certificates-v1__eyebrow.eyebrow{color:var(--text-muted)}.certificates-v1__title{margin:0;color:var(--text-primary)}.certificates-v1__subtitle{margin:0;max-width:585px;color:var(--text-secondary)}.certificates-v1__list{display:flex;flex-direction:column;gap:var(--space-24);flex:0 1 var(--certificates-v1-list-max);min-width:0;max-width:var(--certificates-v1-list-max);width:100%;margin:0;padding:0;list-style:none}.certificates-v1__card{display:flex;align-items:center;gap:var(--space-24);min-height:var(--certificates-v1-card-h);padding:var(--space-24) var(--space-32) var(--space-24) var(--space-40);border-radius:var(--radius);background:var(--bg-fill-surface);box-sizing:border-box}.certificates-v1__card--no-pdf-icon{gap:0;padding-left:var(--space-32)}.certificates-v1__pdf-icon{display:block;flex:none;width:64px;height:64px;background:var(--brand);mask:var(--certificates-v1-pdf-icon) center \/ contain no-repeat;-webkit-mask:var(--certificates-v1-pdf-icon) center \/ contain no-repeat}.certificates-v1__card-body{flex:1 1 auto;min-width:0}.certificates-v1__card-body.stack--sm{gap:var(--space-16)}.certificates-v1__card-title{margin:0;color:var(--text-primary)}.certificates-v1__card-type{margin:0;color:var(--ui-border-strong);letter-spacing:-0.01em;text-transform:uppercase}.certificates-v1__download{display:flex;flex:none;flex-direction:column;align-items:center;gap:var(--space-10);width:56px;text-decoration:none;color:var(--brand)}.certificates-v1__download-label{letter-spacing:-0.01em;text-align:center}.certificates-v1__download-icon{flex:none}.certificates-v1__download:hover,.certificates-v1__download:focus-visible{color:var(--brand-dark)}@media (min-width:1201px){.certificates-v1__lead{position:sticky;top:calc(var(--site-nav-h,0px) + var(--space-24));align-self:flex-start}}@media (max-width:1200px){.certificates-v1__grid{flex-direction:column;gap:var(--space-32)}.certificates-v1__lead,.certificates-v1__list{flex:1 1 auto;max-width:none}}@media (max-width:768px){.certificates-v1__lead.stack--md{gap:var(--space-16)}.certificates-v1__list{gap:var(--space-16)}.certificates-v1__card{display:grid;grid-template-columns:32px minmax(0,1fr) auto;grid-template-areas:\"icon body download\";align-items:start;min-height:auto;padding:var(--space-16);gap:var(--space-16)}.certificates-v1__card--no-pdf-icon{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"body download\";padding-left:var(--space-16)}.certificates-v1__card--no-download{grid-template-columns:32px minmax(0,1fr);grid-template-areas:\"icon body\"}.certificates-v1__card--no-pdf-icon.certificates-v1__card--no-download{grid-template-columns:minmax(0,1fr);grid-template-areas:\"body\"}.certificates-v1__pdf-icon{grid-area:icon;align-self:start;width:32px;height:32px}.certificates-v1__card-body{grid-area:body;align-self:start}.certificates-v1__download{grid-area:download;align-self:end;flex-direction:row;width:auto;margin-left:0}}.site-header{position:relative;z-index:20;background:var(--bg-fill-soft)}.site-header::after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:transparent;pointer-events:none}.site-header.is-sticky{}.site-header.is-sticky::after{}.site-header__shell{padding-top:var(--space-14)}.site-header__top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-24);padding:0 0 var(--space-16)}.site-header__brand-row{display:flex;align-items:center;gap:var(--space-48);flex:1 1 auto;min-width:0}.site-header__brand{display:block;flex:none;text-decoration:none}.site-header__logo{display:block;width:var(--logo-w);height:auto;max-width:100%}.site-header__location{display:inline-flex;align-items:center;gap:var(--space-4);margin:0;font-weight:400;color:var(--text-secondary);min-width:0;max-width:244px;overflow:hidden;text-overflow:ellipsis}.site-header__location-icon{width:14px;height:18px;color:var(--brand);flex:none}.site-header__tools{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-16);flex:0 1 auto;min-width:0}.site-header__tool{display:flex;align-items:center;gap:var(--space-8);min-height:58px;padding-right:var(--space-16);text-decoration:none;color:var(--text-muted);border-right:1px solid color-mix(in srgb,var(--ui-border-soft) 80%,transparent)}.site-header__tool:hover,.site-header__tool:focus-visible{color:var(--text-secondary)}.site-header__tool-icon{display:flex;align-items:center;justify-content:center;width:var(--ui-icon-box);height:var(--ui-icon-box);flex:none;border-radius:var(--radius);color:var(--brand);background:transparent}.site-header-v1--tool-icon-bg .site-header__tool-icon{background:var(--brand-opacity-20)}.site-header__tool-icon .icon{display:block;width:var(--ui-icon);height:var(--ui-icon)}.site-header__tool-label{width:auto;max-width:var(--ui-label-max);line-height:1.2;min-width:0;white-space:normal;overflow-wrap:anywhere;word-break:normal;hyphens:auto}.site-header__phone{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:var(--space-4);text-decoration:none;color:inherit;white-space:nowrap;flex:none}.site-header__phone-number{font-weight:600;line-height:var(--lh-lead);color:var(--text-secondary)}.site-header__phone-hours{line-height:1.2;color:var(--text-muted)}.site-header__cta{flex:none;min-height:var(--ui-cta-h);padding-inline:var(--ui-cta-px);border:2px solid var(--brand-secondary);background:transparent;color:var(--brand-secondary-dark)}.site-header__cta:hover,.site-header__cta:focus-visible{border-color:var(--brand-secondary-dark);color:var(--brand-secondary-dark);background:color-mix(in srgb,var(--brand) 8%,transparent)}.site-header__burger{display:none;flex:none;width:54px;height:54px;padding:0;border:1px solid var(--ui-border-soft);border-radius:var(--radius-btn);background:var(--bg-fill-surface);color:var(--text-primary);cursor:pointer}.site-header__burger span{display:block;width:22px;height:2px;margin:var(--space-4) auto;border-radius:999px;background:currentColor;transition:transform .2s ease,opacity .2s ease}.site-header__nav-wrap{--glass-bg:color-mix(in srgb,var(--bg-fill-soft) 72%,transparent);--glass-solid-bg:var(--bg-fill-soft);position:relative;border-top:1px solid color-mix(in srgb,var(--ui-border-soft) 90%,transparent);border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 90%,transparent)}@media (min-width:1281px){html.is-nav-fixed .page.page--with-header{padding-top:var(--site-nav-h,0px)}html.is-nav-fixed .site-header__nav-wrap{position:fixed;top:0;left:0;right:0;z-index:30;background:var(--bg-fill-soft);box-shadow:var(--shadow-header)}}@media (min-width:1281px) and (prefers-reduced-motion:no-preference){.site-header__nav-wrap{transition:background-color .18s ease,box-shadow .18s ease}html.is-nav-fixed .site-header__nav-wrap{animation:site-header-nav-enter .18s ease-out}}@keyframes site-header-nav-enter{from{opacity:.85;transform:translateY(-6px)}to{opacity:1;transform:none}}.site-header__nav{display:flex;justify-content:center}.site-header__menu{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-16) clamp(var(--space-16),2.2vw,var(--space-40));width:100%;max-width:1276px;min-height:58px;margin:0;padding:var(--space-16) 0;list-style:none}.site-header__menu-item{display:flex;align-items:center;position:relative}.site-header__menu-item--mega{position:static}.site-header__menu-link{display:inline-flex;align-items:center;gap:var(--space-6);font-weight:500;line-height:1.3;text-transform:uppercase;text-decoration:none;color:var(--text-primary);transition:color .2s ease;background:transparent;border:0;padding:0;cursor:pointer}.site-header__menu-link--toggle:focus-visible{outline:2px solid color-mix(in srgb,var(--brand) 45%,transparent);outline-offset:3px;border-radius:6px}.site-header__menu-link:hover,.site-header__menu-link:focus-visible{color:var(--brand-dark)}.site-header__menu-dot{width:5px;height:5px;border-radius:50%;background:var(--brand-light)}.site-header__dropdown{position:absolute;top:calc(100% + var(--space-12));left:0;z-index:30;opacity:0;transform:translateY(-6px);pointer-events:none;transition:opacity .16s ease,transform .16s ease}.site-header__menu-item.is-open>.site-header__dropdown{opacity:1;transform:translateY(0);pointer-events:auto}.site-header__dropdown--small{--site-header-dropdown-small-gap:var(--space-12);min-width:260px;max-width:min(360px,calc(100vw - 2 * var(--page-gutter)));left:50%;right:auto;top:calc(100% + var(--site-header-dropdown-small-gap));transform:translate(-50%,-6px);background:var(--bg-fill-surface);border:1px solid color-mix(in srgb,var(--ui-border-soft) 85%,transparent);border-radius:var(--radius);box-shadow:var(--shadow-dropdown);padding:var(--space-10);overflow:visible}.site-header__dropdown--small .site-header__dropdown-pointer{top:calc(-1 * var(--site-header-dropdown-small-gap))}.site-header__menu-item.is-open>.site-header__dropdown--small{transform:translate(-50%,0)}.site-header__dropdown-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-4)}.site-header__dropdown-link{display:flex;align-items:center;justify-content:space-between;gap:var(--space-12);padding:var(--space-12) var(--space-12);border-radius:var(--radius);text-decoration:none;color:var(--text-primary);line-height:1.3;text-transform:none}.site-header__dropdown-link:hover,.site-header__dropdown-link:focus-visible{background:color-mix(in srgb,var(--brand) 9%,transparent);color:var(--brand-dark)}.site-header__dropdown--mega{left:0;right:0;width:100%;top:calc(100% + 8px);padding-top:0}.site-header__dropdown--mega>.container{position:relative;display:flex;justify-content:flex-end}.site-header__mega-pointer,.site-header__wide-default-pointer,.site-header__dropdown-pointer{position:absolute;top:-20px;left:120px;width:37px;height:28px;color:var(--white);transform:translateX(-50%);pointer-events:none;z-index:3}.site-header__mega-pointer svg,.site-header__wide-default-pointer svg,.site-header__dropdown-pointer svg{display:block;width:100%;height:100%}.site-header__mega-pointer{z-index:1}.site-header__mega{position:relative;z-index:2;width:100%;max-width:1640px;margin-left:auto;margin-right:0;background:var(--white);border:1px solid color-mix(in srgb,var(--ui-border-soft) 85%,transparent);border-radius:var(--radius);box-shadow:var(--shadow-dropdown);padding:var(--space-16) var(--space-24) 0;display:flex;flex-direction:column;gap:var(--space-20);max-height:min(70vh,660px);overflow:hidden;--site-header-mega-aside-max:707px;--site-header-mega-cat-min:280px;--site-header-mega-panels-min:240px;--site-header-mega-shortcut-icon-box:44px;--site-header-mega-shortcut-icon-glyph:24px;--site-header-mega-promo-image:184px}.site-header__mega-head{display:flex;align-items:flex-end;gap:var(--space-16);position:sticky;top:0;z-index:2;background:var(--white);padding:0 0 var(--space-10);border-bottom:1px solid color-mix(in srgb,var(--ui-divider) 85%,transparent)}.site-header__mega-close{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:58px;height:58px;border:0;border-radius:32px;background:transparent;color:var(--text-muted);cursor:pointer;transition:background-color .16s ease,color .16s ease}.site-header__mega-close .icon{width:24px;height:24px}.site-header__mega-close:hover,.site-header__mega-close:focus-visible{background:color-mix(in srgb,var(--brand) 9%,transparent);color:var(--text-secondary)}.site-header__mega-head-title{margin:0;font-family:var(--font-heading);font-size:var(--text-lead-xl);font-weight:var(--font-weight-heading);letter-spacing:-0.02em;color:var(--text-secondary);line-height:1.2}.site-header__mega-head-link{font-size:var(--text-body-sm);font-weight:400;line-height:1.2;color:var(--text-muted);text-decoration:none}.site-header__mega-head-link:hover,.site-header__mega-head-link:focus-visible{color:var(--brand-dark);text-decoration:underline}.site-header__mega-body{display:grid;grid-template-columns:minmax(var(--site-header-mega-cat-min),1fr) minmax(var(--site-header-mega-panels-min),1fr) minmax(0,var(--site-header-mega-aside-max));grid-template-rows:minmax(0,1fr);gap:0 var(--space-24);align-items:stretch;flex:1 1 auto;min-height:0;padding-bottom:var(--space-24);overflow:hidden}.site-header__mega-panels{min-height:0;min-width:0}.site-header__mega-categories,.site-header__wide-default-categories,.site-header__wide-default-nav{display:flex;flex-direction:column;align-self:stretch;min-height:0;min-width:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text-muted) 45%,transparent) transparent}.site-header__mega-categories,.site-header__wide-default-categories{padding-right:var(--space-32);border-right:0;background-image:linear-gradient(var(--ui-border-soft),var(--ui-border-soft));background-size:1px 100%;background-position:right top;background-repeat:no-repeat;background-attachment:local}.site-header__wide-default-nav{padding-right:var(--space-24)}.site-header__mega-categories::-webkit-scrollbar,.site-header__wide-default-categories::-webkit-scrollbar,.site-header__wide-default-nav::-webkit-scrollbar{width:8px}.site-header__mega-categories::-webkit-scrollbar-thumb,.site-header__wide-default-categories::-webkit-scrollbar-thumb,.site-header__wide-default-nav::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-muted) 35%,transparent);border-radius:999px}.site-header__mega-categories::-webkit-scrollbar-thumb:hover,.site-header__wide-default-categories::-webkit-scrollbar-thumb:hover,.site-header__wide-default-nav::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text-muted) 55%,transparent)}.site-header__mega-category,.site-header__wide-default-category,.site-header__wide-default-nav-link{width:100%;display:flex;align-items:center;gap:var(--space-10);padding:var(--space-12) var(--space-4) var(--space-12) var(--space-8);border-radius:var(--radius);transition:background-color .16s ease,color .16s ease}.site-header__mega-category,.site-header__wide-default-category{border:0;background:transparent;color:var(--text-secondary);text-align:left;cursor:pointer}.site-header__wide-default-nav-link{text-decoration:none;color:var(--text-secondary)}.site-header__mega-category:hover,.site-header__mega-category:focus-visible,.site-header__wide-default-category:hover,.site-header__wide-default-category:focus-visible,.site-header__wide-default-nav-link:hover,.site-header__wide-default-nav-link:focus-visible{background:var(--brand-opacity-20);color:var(--text-primary)}.site-header__mega-category.is-active,.site-header__wide-default-category.is-active{background:var(--brand-opacity-20);color:var(--brand)}.site-header__mega-category.is-active:hover,.site-header__mega-category.is-active:focus-visible,.site-header__wide-default-category.is-active:hover,.site-header__wide-default-category.is-active:focus-visible{color:var(--brand)}.site-header__mega-category:focus-visible,.site-header__wide-default-category:focus-visible{outline:2px solid color-mix(in srgb,var(--brand) 30%,transparent);outline-offset:2px}.site-header__mega-category-visual,.site-header__wide-default-category-visual,.site-header__wide-default-nav-icon{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;flex:none}.site-header__mega-category-icon,.site-header__wide-default-category-icon,.site-header__wide-default-nav-icon-img{display:block;width:35px;height:35px;object-fit:contain}.site-header__mega-category-label,.site-header__wide-default-category-label,.site-header__wide-default-nav-label{flex:1 1 auto;min-width:0;font-size:var(--text-nav);font-weight:600;line-height:1.4}.site-header__mega-category-label,.site-header__wide-default-category-label{display:block;color:var(--text-secondary)}.site-header__mega-category.is-active .site-header__mega-category-label,.site-header__wide-default-category.is-active .site-header__wide-default-category-label{color:var(--brand)}.site-header__mega-category-arrow,.site-header__wide-default-category-arrow{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--text-secondary);transition:transform .16s ease,color .16s ease}.site-header__mega-category.is-active .site-header__mega-category-arrow,.site-header__mega-category:hover .site-header__mega-category-arrow,.site-header__mega-category:focus-visible .site-header__mega-category-arrow,.site-header__wide-default-category.is-active .site-header__wide-default-category-arrow,.site-header__wide-default-category:hover .site-header__wide-default-category-arrow,.site-header__wide-default-category:focus-visible .site-header__wide-default-category-arrow{color:var(--brand)}.site-header__mega-category-arrow .icon,.site-header__wide-default-category-arrow .icon{width:7px;height:14px}.site-header__mega-panel[hidden]{display:none !important}@media (min-width:1281px){.site-header__mega-categories{grid-column:1;grid-row:1;display:flex;flex-direction:column;align-self:stretch;min-height:0;overflow-x:hidden;overflow-y:auto}.site-header__mega-category-block{display:block;flex:none}.site-header__mega-panels{grid-column:2;grid-row:1;display:block;position:relative;align-self:stretch;min-height:0;overflow:hidden}.site-header__mega-panels[hidden]{display:none !important}.site-header__mega-panel{position:absolute;inset:0;min-height:0;min-width:0;padding-top:var(--space-6);padding-left:var(--space-18);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text-muted) 45%,transparent) transparent}.site-header__mega-panel[hidden]{display:none !important}.site-header__mega-panel::-webkit-scrollbar{width:8px}.site-header__mega-panel::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-muted) 35%,transparent);border-radius:999px}.site-header__mega-panel::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text-muted) 55%,transparent)}.site-header__mega-aside{grid-column:3;grid-row:1;align-self:stretch;min-height:0}}.site-header__mega-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-10)}.site-header__mega-link{display:block;font-size:var(--text-nav);font-weight:600;text-decoration:none;color:var(--text-muted);line-height:1.4;padding:0;transition:color .16s ease}.site-header__mega-link:hover,.site-header__mega-link:focus-visible{color:var(--brand-dark)}.site-header__mega-aside{min-width:0;max-width:var(--site-header-mega-aside-max);width:100%;justify-self:stretch;align-self:stretch;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:auto auto;gap:var(--space-28);align-content:start;min-height:0;max-height:none;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text-muted) 45%,transparent) transparent;padding-bottom:var(--space-16);scroll-padding-bottom:var(--space-16)}.site-header__mega-aside::-webkit-scrollbar{width:8px}.site-header__mega-aside::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-muted) 35%,transparent);border-radius:999px}.site-header__mega-aside::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text-muted) 55%,transparent)}.site-header__mega-aside:not(:has(.site-header__mega-shortcut--popular)) .site-header__mega-shortcuts{border-left:1px solid var(--ui-border-soft)}.site-header__mega-shortcut--popular{display:grid;grid-template-columns:var(--site-header-mega-shortcut-icon-box) minmax(0,1fr);column-gap:var(--space-16);row-gap:var(--space-16);align-content:start;grid-column:1;grid-row:1;padding-bottom:0;padding-left:var(--space-14);padding-right:var(--space-16);border-bottom:0;border-left:1px solid var(--ui-border-soft);border-right:1px solid var(--ui-border-soft)}.site-header__mega-shortcut--popular .site-header__mega-shortcut-head{display:contents}.site-header__mega-shortcut--popular .site-header__mega-shortcut-icon{grid-column:1;grid-row:1;align-self:center}.site-header__mega-shortcut--popular .site-header__mega-shortcut-title{grid-column:2;grid-row:1;align-self:center}.site-header__mega-shortcut--popular .site-header__mega-shortcut-list{grid-column:2;grid-row:2}.site-header__mega-shortcut-head{display:flex;align-items:center;gap:var(--space-16);margin-bottom:var(--space-16)}.site-header__mega-shortcuts{display:flex;flex-direction:column;gap:var(--space-18);grid-column:2;grid-row:1;align-self:start}.site-header__mega-shortcut{text-decoration:none;color:var(--text-primary)}a.site-header__mega-shortcut{display:flex;align-items:center;gap:var(--space-16)}a.site-header__mega-shortcut:has(.site-header__mega-shortcut-text){align-items:flex-start}.site-header__mega-aside > .site-header__mega-shortcut--popular{display:grid}.site-header__mega-shortcut-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--site-header-mega-shortcut-icon-box);height:var(--site-header-mega-shortcut-icon-box);border-radius:var(--radius);background:var(--brand-surface-soft);color:var(--brand);flex:none}.site-header__mega-shortcut-icon .icon{width:var(--site-header-mega-shortcut-icon-glyph);height:var(--site-header-mega-shortcut-icon-glyph)}.site-header__mega-shortcut-icon--image,.site-header__wide-default-shortcut-icon--image{background:transparent;color:inherit;padding:0;overflow:hidden}.site-header__mega-shortcut-icon--image .site-header__mega-shortcut-icon-img,.site-header__wide-default-shortcut-icon--image .site-header__wide-default-shortcut-icon-img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center;border-radius:inherit}.site-header__mega-category-visual--image,.site-header__wide-default-category-visual--image,.site-header__wide-default-nav-icon--image{overflow:hidden;border-radius:var(--radius)}.site-header__mega--icon-display-image .site-header__mega-category-visual,.site-header__wide-default--icon-display-image .site-header__wide-default-category-visual,.site-header__wide-default--icon-display-image .site-header__wide-default-nav-icon{overflow:hidden;border-radius:0}.site-header__mega-category-visual--image .site-header__mega-category-icon,.site-header__wide-default-category-visual--image .site-header__wide-default-category-icon,.site-header__mega--icon-display-image .site-header__mega-category-icon,.site-header__wide-default--icon-display-image .site-header__wide-default-category-icon,.site-header__wide-default--icon-display-image .site-header__wide-default-nav-icon-img{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center}.site-header__mega-shortcut-copy{display:flex;flex-direction:column;gap:var(--space-4)}.site-header__mega-shortcut-title{color:var(--text-secondary);font-size:var(--text-nav);font-weight:600;line-height:1.2;text-transform:uppercase}.site-header__mega-shortcut-text{color:var(--text-muted);font-size:var(--text-body-sm);line-height:1.3}.site-header__mega-shortcut-list-link:hover,.site-header__mega-shortcut-list-link:focus-visible{color:var(--brand-dark)}.site-header__mega-shortcut-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-12)}.site-header__mega-shortcut-list-link{color:var(--text-muted);font-size:var(--text-body-sm);text-decoration:none;line-height:1.4}.site-header__mega-promo{grid-column:1 \/ -1;grid-row:2;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:minmax(0,auto);gap:var(--space-24);align-items:stretch;align-self:start;width:100%;overflow:visible;min-height:176px;height:fit-content;border-radius:var(--radius);background:var(--brand-surface-soft)}.site-header__mega-promo-visual-wrap{grid-row:1;grid-column:1;align-self:stretch;justify-self:start;display:flex;min-height:0}.site-header__mega-promo-visual{position:relative;height:100%;width:auto;aspect-ratio:274 \/ 276;min-height:0;overflow:hidden;border-radius:var(--radius);background:var(--brand-surface-soft)}.site-header__mega-promo-image{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;object-position:center;border-radius:inherit}.site-header__mega-promo-copy{grid-row:1;grid-column:2;min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--space-14);padding:var(--space-28) var(--space-28) var(--space-28) 0}.site-header__mega-promo-title{margin:0;font-family:var(--font-heading);font-size:var(--text-lead-xl);font-weight:var(--font-weight-heading);line-height:1.2;color:var(--text-secondary)}.site-header__mega-promo-text{margin:0;color:var(--text-muted);font-size:var(--text-body-sm);line-height:1.3}.site-header__mega-promo-cta{margin-top:var(--space-4)}@media (max-width:1600px){.site-header__mega{--site-header-mega-aside-max:clamp(300px,36vw,580px);--site-header-mega-cat-min:240px;--site-header-mega-panels-min:200px;--site-header-mega-shortcut-icon-box:40px;--site-header-mega-shortcut-icon-glyph:22px;--site-header-mega-promo-image:160px}.site-header__mega-body{gap:0 var(--space-20)}.site-header__mega-aside{gap:var(--space-20)}.site-header__mega-categories{padding-right:var(--space-24)}.site-header__mega-shortcut--popular{column-gap:var(--space-12);row-gap:var(--space-12);padding-right:var(--space-14)}.site-header__mega-shortcuts{gap:var(--space-12);padding-left:var(--space-12);padding-right:var(--space-8)}.site-header__mega-promo-title{font-size:var(--text-lead)}}@media (max-width:1500px){.site-header__mega{--site-header-mega-aside-max:clamp(280px,32vw,480px);--site-header-mega-cat-min:220px;--site-header-mega-panels-min:180px;--site-header-mega-shortcut-icon-box:38px;--site-header-mega-shortcut-icon-glyph:21px;--site-header-mega-promo-image:140px}.site-header__mega-promo-copy{padding:var(--space-12) var(--space-14) var(--space-16) 0}.site-header__mega-promo-title{font-size:var(--text-body-lg)}.site-header__mega-shortcut--popular{padding-right:var(--space-14)}.site-header__mega-shortcuts{padding-left:var(--space-12);padding-right:var(--space-6)}}@media (max-width:1600px){.site-header__mega-shortcut-title,.site-header__wide-default-shortcut-title{font-size:var(--text-body-md)}}@media (max-width:1500px){.site-header__mega-shortcut-title,.site-header__wide-default-shortcut-title{font-size:var(--text-body-sm)}}@media (min-width:1281px) and (max-width:1600px){.site-header__mega-promo{align-items:flex-start;min-height:0;gap:var(--space-16);padding:var(--space-10) var(--space-12);box-sizing:border-box}.site-header__mega-promo-visual-wrap{width:var(--site-header-mega-promo-image);height:auto;align-self:flex-start}.site-header__mega-promo-visual{width:100%;height:auto;aspect-ratio:274 \/ 276}.site-header__mega-promo-copy{align-self:stretch;justify-content:flex-start}}@media (max-width:1366px){.site-header__mega{--site-header-mega-aside-max:clamp(252px,30vw,380px);--site-header-mega-cat-min:200px;--site-header-mega-panels-min:160px;--site-header-mega-shortcut-icon-box:36px;--site-header-mega-shortcut-icon-glyph:20px;--site-header-mega-promo-image:120px}.site-header__mega-body{gap:0 var(--space-16)}.site-header__mega-aside{gap:var(--space-16)}.site-header__mega-shortcut--popular{column-gap:var(--space-12)}.site-header__mega-shortcuts{gap:var(--space-12)}.site-header__mega-categories{padding-right:var(--space-20)}.site-header__mega-panel{padding-left:var(--space-14)}.site-header__mega-promo-copy{padding:var(--space-10) var(--space-12) var(--space-14) 0;gap:var(--space-12)}.site-header__mega-promo-cta.btn{padding-block:var(--space-8);padding-inline:var(--space-16);min-height:40px}.site-header__mega-shortcut--popular{padding-right:var(--space-14);row-gap:var(--space-10)}.site-header__mega-shortcuts{gap:var(--space-10)}}@media (max-width:1200px){.site-header__top{gap:var(--space-16)}.site-header__brand-row{gap:var(--space-24)}.site-header__tools{gap:var(--space-12)}.site-header__tool{padding-right:var(--space-12)}.site-header__tool-label{width:92px}.site-header__cta{padding-inline:24px}}@media (max-width:1600px){.site-header__brand-row{gap:var(--space-24)}.site-header__location{max-width:244px}.site-header__tools{gap:var(--space-12)}.site-header__tool{padding-right:var(--space-16)}}@media (max-width:992px){.site-header__shell{padding-top:0}.site-header__top{flex-wrap:wrap;padding:var(--space-8) 0}.site-header__brand-row,.site-header__tools{width:100%}.site-header__tools{justify-content:space-between}.site-header__location{white-space:normal;max-width:none;overflow:visible;text-overflow:clip}.site-header__tool-label{width:auto;max-width:90px}.site-header__menu{justify-content:flex-start}}@media (max-width:1366px) and (min-width:1281px){.site-header__tool-label{display:none}}@media (min-width:1281px) and (max-width:1366px){.site-header__brand-row{gap:var(--space-24)}.site-header__shell{padding-top:var(--space-8)}.site-header__top{padding-bottom:var(--space-12);gap:var(--space-16)}.site-header__tool{min-height:48px;padding-right:var(--space-12)}.site-header__menu{min-height:48px;padding:var(--space-10) 0;gap:var(--space-12) clamp(var(--space-12),1.8vw,var(--space-24))}.site-header__mega-aside{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto}.site-header__mega-shortcut--popular{grid-column:1;grid-row:1;border-right:0;border-bottom:0;padding-right:var(--space-14)}.site-header__mega-shortcuts{grid-column:1;grid-row:2;border-left:1px solid var(--ui-border-soft);padding-left:var(--space-14);padding-right:var(--space-14)}.site-header__mega-aside:not(:has(.site-header__mega-shortcut--popular)) .site-header__mega-shortcuts{grid-row:1;border-left:1px solid var(--ui-border-soft)}.site-header__mega-promo{grid-row:3}.site-header__mega-aside:not(:has(.site-header__mega-shortcut--popular)) .site-header__mega-promo{grid-row:2}.site-header__mega-promo{gap:var(--space-12);padding:var(--space-8) var(--space-10)}.site-header__mega-promo-copy{padding:var(--space-6) var(--space-10) var(--space-10) 0}}@media (max-width:1280px){.page.page--with-header{padding-top:var(--site-header-h,0px)}html.is-menu-open .page.page--with-header{padding-top:0}html.is-menu-open{overflow:hidden}.site-header:not(.is-menu-open){position:fixed;top:0;left:0;right:0;z-index:20;flex-shrink:0}.site-header__shell{padding-top:0}.site-header__top{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--space-12);padding:var(--space-8) 0;position:relative}.site-header__brand-row{width:auto;min-width:0;gap:var(--space-16)}.site-header__location,.site-header__tool,.site-header__phone,.site-header__cta{display:none}.site-header__logo{max-width:168px;max-height:36px}.site-header__tools{width:auto;gap:0}.site-header__burger{display:block;width:44px;height:44px}.site-header__burger{border:0;background:transparent;box-shadow:none}.site-header__nav-wrap{display:none;border-top:1px solid color-mix(in srgb,var(--ui-border-soft) 90%,transparent);position:static;background:transparent}.site-header.is-menu-open .site-header__nav-wrap{display:block;flex:none;overflow:visible;border-top:0}.site-header.is-menu-open{box-shadow:none;position:fixed;inset:0;height:100dvh;display:flex;flex-direction:column;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.site-header.is-menu-open .site-header__shell{display:flex;flex-direction:column;flex:0 0 auto;min-height:auto;overflow:visible;background:var(--bg-fill-soft)}.site-header.is-menu-open .site-header__shell > .container{flex:none;position:sticky;top:0;z-index:2;background:var(--bg-fill-soft);border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 90%,transparent)}.site-header.is-menu-open .site-header__top{display:block;padding:var(--space-16) 0 var(--space-16)}.site-header.is-menu-open .site-header__brand{position:static;padding:0;margin:0;border:0;background:transparent}.site-header.is-menu-open .site-header__brand-row{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-12);width:100%;padding-right:64px;box-sizing:border-box}.site-header.is-menu-open .site-header__location{display:flex;width:100%;line-height:1.3;color:var(--text-secondary);white-space:normal;max-width:none;overflow:visible;text-overflow:clip}.site-header.is-menu-open .site-header__tools{width:100%;margin-top:var(--space-16);display:flex;flex-wrap:wrap;gap:var(--space-12);align-items:stretch}.site-header.is-menu-open .site-header__tool{display:flex;width:calc(50% - (var(--space-12) \/ 2));min-height:52px;padding:var(--space-10) var(--space-10);border-radius:var(--radius);background:color-mix(in srgb,var(--brand) 8%,transparent);border-right:0;padding-right:0;color:var(--text-secondary);text-decoration:none}.site-header.is-menu-open .site-header__tool-icon{width:40px;height:40px}.site-header-v1--tool-icon-bg.site-header.is-menu-open .site-header__tool-icon{background:var(--brand-opacity-20)}.site-header.is-menu-open .site-header__tool-icon .icon{width:20px;height:20px}.site-header.is-menu-open .site-header__tool-label{max-width:none;width:auto;line-height:1.15;color:var(--text-secondary)}.site-header.is-menu-open .site-header__phone{display:flex;width:100%;align-items:flex-start;gap:var(--space-2);padding-left:var(--space-4)}.site-header.is-menu-open .site-header__cta{display:inline-flex;width:100%;justify-content:center}.site-header.is-menu-open .site-header__burger{position:absolute;top:var(--space-16);right:0;z-index:2}.site-header.is-menu-open .site-header__burger span:nth-child(1){transform:translateY(var(--space-6)) rotate(45deg)}.site-header.is-menu-open .site-header__burger span:nth-child(2){opacity:0}.site-header.is-menu-open .site-header__burger span:nth-child(3){transform:translateY(calc(-1 * var(--space-6))) rotate(-45deg)}.site-header.is-menu-open .site-header__menu-item--mega.is-open,.site-header.is-menu-open .site-header__menu-item--wide-default.is-open,.site-header.is-menu-open .site-header__mega-category-block,.site-header.is-menu-open .site-header__wide-default-category-block{scroll-margin-top:calc(var(--site-mobile-menu-sticky-h,var(--site-header-top-h,0px)) + var(--space-8))}.site-header__menu{flex-direction:column;align-items:stretch;gap:0;min-height:0;padding:var(--space-8) 0 var(--space-32)}.site-header__menu-item{display:block;border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 85%,transparent)}.site-header__menu-link{justify-content:space-between;width:100%;padding:var(--space-16) 0}.site-header__menu-dot{margin-left:auto}.site-header__dropdown{position:static;opacity:1;transform:none;pointer-events:auto;transition:none;display:none;padding:0 0 var(--space-12);margin-top:var(--space-8);width:100%;box-sizing:border-box}.site-header__menu-item.is-open>.site-header__dropdown{display:block}.site-header__dropdown--small,.site-header__dropdown--mega,.site-header__dropdown--wide-default{left:auto;right:auto;width:auto;min-width:0;max-width:none;transform:none;padding-top:0}.site-header__menu-item.is-open>.site-header__dropdown--small{transform:none}.site-header__dropdown--small,.site-header__mega,.site-header__wide-default{box-shadow:none;border:0;border-radius:0;background:transparent;padding:0}.site-header__mega-pointer,.site-header__wide-default-pointer,.site-header__dropdown-pointer{display:none}.site-header__dropdown--small{padding-left:0}.site-header__menu-item.is-open > .site-header__menu-link--toggle{padding-bottom:var(--space-8)}.site-header__menu-item.is-open > .site-header__dropdown--small{margin-top:0;padding-bottom:var(--space-20)}.site-header__dropdown--small .site-header__dropdown-item:first-child .site-header__dropdown-link{padding-top:var(--space-8)}.site-header__dropdown--small .site-header__dropdown-item{border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 65%,transparent)}.site-header__dropdown--small .site-header__dropdown-item:last-child{border-bottom:0}.site-header__dropdown-link{justify-content:flex-start;padding:var(--space-12) 0 var(--space-12) var(--space-16);border-radius:0}.site-header__dropdown--small .site-header__dropdown-link.bodytext-strong,.site-header__mega-link.bodytext-sm,.site-header__wide-default-link.bodytext-sm{font-size:var(--text-body-sm);line-height:1.35}.site-header__dropdown--mega,.site-header__dropdown--wide-default{width:100%;max-width:none;margin-left:0;margin-right:0;padding:0}.site-header__dropdown--mega>.container,.site-header__dropdown--wide-default>.container{width:100%;max-width:none;padding-left:0;padding-right:0;margin:0}.site-header__menu-item--mega .site-header__mega,.site-header__menu-item--mega .site-header__mega-body,.site-header__menu-item--mega .site-header__mega-categories{width:100%;max-width:none}.site-header__mega{max-height:none;overflow:visible}.site-header__mega-head{display:none}.site-header__mega-body{display:flex;flex-direction:column;gap:0;flex:none;overflow:visible;padding-bottom:0;scrollbar-width:auto}.site-header__mega-panels{display:none}.site-header__mega-categories,.site-header__wide-default-categories,.site-header__wide-default-nav{display:flex;flex-direction:column;gap:0;padding-right:0;border-right:0;overflow:visible;background-image:none}.site-header__wide-default-nav{width:100%;max-width:none}.site-header__mega-category-block,.site-header__wide-default-category-block{display:block;border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 65%,transparent)}.site-header__mega-category-block:last-child,.site-header__wide-default-category-block:last-child{border-bottom:0}.site-header__mega-panel[hidden],.site-header__wide-default-panel[hidden]{display:none !important}.site-header__mega-category,.site-header__wide-default-category,.site-header__wide-default-nav-link{gap:var(--space-12);min-height:56px;padding:var(--space-10) 0;border-radius:0;width:100%}.site-header__wide-default-nav-link{color:var(--text-primary)}.site-header__mega-category:hover,.site-header__mega-category:focus-visible,.site-header__mega-category.is-active,.site-header__wide-default-category:hover,.site-header__wide-default-category:focus-visible,.site-header__wide-default-category.is-active,.site-header__wide-default-nav-link:hover,.site-header__wide-default-nav-link:focus-visible{background:transparent}.site-header__mega-category-block.is-open .site-header__mega-category,.site-header__wide-default-category-block.is-open .site-header__wide-default-category{padding-bottom:var(--space-6)}.site-header__mega-category-block.is-open .site-header__mega-category-arrow,.site-header__wide-default-category-block.is-open .site-header__wide-default-category-arrow{transform:rotate(90deg);color:var(--brand)}.site-header__mega-category-label,.site-header__wide-default-category-label,.site-header__wide-default-nav-label{font-size:var(--text-body-sm);line-height:1.35}.site-header__mega-category:not(.is-active) .site-header__mega-category-label,.site-header__wide-default-category:not(.is-active) .site-header__wide-default-category-label{color:var(--text-secondary)}.site-header__mega-category.is-active .site-header__mega-category-label,.site-header__wide-default-category.is-active .site-header__wide-default-category-label{color:var(--brand)}.site-header__mega-category-visual,.site-header__mega--icon-display-image .site-header__mega-category-visual,.site-header__wide-default-category-visual,.site-header__wide-default--icon-display-image .site-header__wide-default-category-visual,.site-header__wide-default-nav-icon,.site-header__wide-default--icon-display-image .site-header__wide-default-nav-icon{width:28px;height:28px}.site-header__mega-category-icon,.site-header__mega--icon-display-image .site-header__mega-category-icon,.site-header__wide-default-category-icon,.site-header__wide-default--icon-display-image .site-header__wide-default-category-icon,.site-header__wide-default-nav-icon-img,.site-header__wide-default--icon-display-image .site-header__wide-default-nav-icon-img{width:28px;height:28px;max-width:28px;max-height:28px;object-fit:contain;object-position:center}.site-header__mega-category-arrow,.site-header__wide-default-category-arrow{width:20px;height:20px}.site-header__mega-category-arrow .icon,.site-header__wide-default-category-arrow .icon{width:6px;height:12px}.site-header__mega-panel{position:static;inset:auto;margin:0;padding:0 0 var(--space-8);border-top:0;overflow:visible;overscroll-behavior:auto}.site-header__mega-list{gap:0}.site-header__mega-item{border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 65%,transparent)}.site-header__mega-item:last-child{border-bottom:0}.site-header__mega-link{padding:var(--space-14) 0 var(--space-14) var(--space-16)}.site-header__menu-item--mega.is-open>.site-header__dropdown{margin-top:0;padding-bottom:0}.site-header__mega-aside{display:none}.site-header__mega-promo{grid-template-columns:1fr;min-height:0}.site-header__mega-promo-visual-wrap{grid-column:1;grid-row:1;width:100%;height:auto;align-self:stretch}.site-header__mega-promo-visual{width:100%;height:auto;aspect-ratio:274 \/ 276}.site-header__mega-promo-copy{grid-column:1;grid-row:2}.site-header__mega-promo-copy{padding:0 var(--space-16) var(--space-16)}.site-header__mega-close{display:none}}.site-header__menu-item--wide-default{position:static}.site-header__dropdown--wide-default{left:0;right:0;width:100%;top:calc(100% + 8px);padding-top:0}.site-header__dropdown--wide-default>.container{position:relative;display:flex;justify-content:flex-end}.site-header__wide-default{position:relative;z-index:2;width:100%;max-width:min(1640px,calc(100vw - var(--space-32)));margin-left:auto;margin-right:0;background:var(--white);border:1px solid color-mix(in srgb,var(--ui-border-soft) 85%,transparent);border-radius:var(--radius);box-shadow:var(--shadow-dropdown);padding:var(--space-16) var(--space-24) 0;display:flex;flex-direction:column;gap:var(--space-20);max-height:min(70vh,660px);overflow:hidden;--site-header-wide-default-aside-max:707px;--site-header-wide-default-cat-min:280px;--site-header-wide-default-mid-min:260px;--site-header-wide-default-promo-max:340px;--site-header-wide-default-panels-min:240px;--site-header-wide-default-shortcut-icon-box:44px;--site-header-wide-default-shortcut-icon-glyph:24px;--site-header-wide-default-promo-image:184px}.site-header__wide-default-head{display:flex;align-items:flex-end;gap:var(--space-16);position:sticky;top:0;z-index:2;background:var(--white);padding:0 0 var(--space-10);border-bottom:1px solid color-mix(in srgb,var(--ui-divider) 85%,transparent)}.site-header__wide-default-close{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:58px;height:58px;border:0;border-radius:32px;background:transparent;color:var(--text-muted);cursor:pointer;transition:background-color .16s ease,color .16s ease}.site-header__wide-default-close .icon{width:24px;height:24px}.site-header__wide-default-close:hover,.site-header__wide-default-close:focus-visible{background:color-mix(in srgb,var(--brand) 9%,transparent);color:var(--text-secondary)}.site-header__wide-default-head-title{margin:0;font-family:var(--font-heading);font-size:var(--text-lead-xl);font-weight:var(--font-weight-heading);letter-spacing:-0.02em;color:var(--text-secondary);line-height:1.2}.site-header__wide-default-head-link{font-size:var(--text-body-sm);font-weight:400;line-height:1.2;color:var(--text-muted);text-decoration:none}.site-header__wide-default-head-link:hover,.site-header__wide-default-head-link:focus-visible{color:var(--brand-dark);text-decoration:underline}.site-header__wide-default-body{display:grid;grid-template-columns:minmax(var(--site-header-wide-default-cat-min),1fr) minmax(var(--site-header-wide-default-mid-min),1fr) minmax(0,var(--site-header-wide-default-promo-max));grid-template-rows:minmax(0,1fr);gap:0 var(--space-24);align-items:stretch;flex:1 1 auto;min-height:0;padding-bottom:var(--space-24);overflow:hidden}.site-header__wide-default-panel[hidden]{display:none !important}@media (min-width:1281px){.site-header__wide-default-categories{grid-column:1;grid-row:1;display:flex;flex-direction:column;align-self:stretch;min-height:0;overflow-x:hidden;overflow-y:auto}.site-header__wide-default-category-block{display:block;flex:none}.site-header__wide-default-aside{grid-column:2;grid-row:1;align-self:stretch;min-height:0}.site-header__wide-default-promo-col{grid-column:3;grid-row:1;align-self:stretch;min-width:0;min-height:0}.site-header__wide-default-panel{position:static;inset:auto;min-height:0;min-width:0;padding:0 0 var(--space-8) var(--space-8);overflow:visible;overscroll-behavior:auto;scrollbar-width:auto}.site-header__wide-default-panel[hidden]{display:none !important}}.site-header__wide-default-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-10)}.site-header__wide-default-link{display:block;font-size:var(--text-nav);font-weight:600;text-decoration:none;color:var(--text-muted);line-height:1.4;padding:0;transition:color .16s ease}.site-header__wide-default-link:hover,.site-header__wide-default-link:focus-visible{color:var(--brand-dark)}.site-header__wide-default-aside{min-width:0;max-width:none;width:100%;justify-self:stretch;align-self:stretch;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;gap:0;align-content:start;min-height:0;max-height:none;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text-muted) 45%,transparent) transparent;padding-bottom:var(--space-16);scroll-padding-bottom:var(--space-16);border-left:1px solid var(--ui-border-soft);border-right:1px solid var(--ui-border-soft)}.site-header__wide-default-promo-col{min-width:0;width:100%;align-self:stretch;display:flex;flex-direction:column;min-height:0}.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-copy{grid-column:1;grid-row:2;padding:var(--space-16) var(--space-16) var(--space-20)}.site-header__wide-default-aside::-webkit-scrollbar{width:8px}.site-header__wide-default-aside::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-muted) 35%,transparent);border-radius:999px}.site-header__wide-default-aside::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text-muted) 55%,transparent)}.site-header__wide-default-aside:not(:has(.site-header__wide-default-shortcut--popular)) .site-header__wide-default-shortcuts{grid-row:1;border-top:0}.site-header__wide-default-shortcut--popular{display:grid;grid-template-columns:var(--site-header-wide-default-shortcut-icon-box) minmax(0,1fr);column-gap:var(--space-16);row-gap:var(--space-16);align-content:start;grid-column:1;grid-row:1;padding:var(--space-14) var(--space-14) var(--space-16);border-bottom:1px solid var(--ui-border-soft);border-left:0;border-right:0}.site-header__wide-default-shortcut--popular .site-header__wide-default-shortcut-head{display:contents}.site-header__wide-default-shortcut--popular .site-header__wide-default-shortcut-icon{grid-column:1;grid-row:1;align-self:center}.site-header__wide-default-shortcut--popular .site-header__wide-default-shortcut-title{grid-column:2;grid-row:1;align-self:center}.site-header__wide-default-shortcut--popular .site-header__wide-default-shortcut-list{grid-column:2;grid-row:2}.site-header__wide-default-shortcut-head{display:flex;align-items:center;gap:var(--space-16);margin-bottom:var(--space-16)}.site-header__wide-default-shortcuts{display:flex;flex-direction:column;gap:var(--space-18);grid-column:1;grid-row:2;align-self:start;padding:var(--space-14) var(--space-14) var(--space-16);border-left:0}.site-header__wide-default-shortcut{text-decoration:none;color:var(--text-primary)}a.site-header__wide-default-shortcut{display:flex;align-items:center;gap:var(--space-16)}a.site-header__wide-default-shortcut:has(.site-header__wide-default-shortcut-text){align-items:flex-start}.site-header__wide-default-aside > .site-header__wide-default-shortcut--popular{display:grid}.site-header__wide-default-shortcut-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--site-header-wide-default-shortcut-icon-box);height:var(--site-header-wide-default-shortcut-icon-box);border-radius:var(--radius);background:var(--brand-surface-soft);color:var(--brand);flex:none}.site-header__wide-default-shortcut-icon .icon{width:var(--site-header-wide-default-shortcut-icon-glyph);height:var(--site-header-wide-default-shortcut-icon-glyph)}.site-header__wide-default-shortcut-copy{display:flex;flex-direction:column;gap:var(--space-4)}.site-header__wide-default-shortcut-title{color:var(--text-secondary);font-size:var(--text-nav);font-weight:600;line-height:1.2;text-transform:uppercase}.site-header__wide-default-shortcut-text{color:var(--text-muted);font-size:var(--text-body-sm);line-height:1.3}.site-header__wide-default-shortcut-list-link:hover,.site-header__wide-default-shortcut-list-link:focus-visible{color:var(--brand-dark)}.site-header__wide-default-shortcut-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-12)}.site-header__wide-default-shortcut-list-link{color:var(--text-muted);font-size:var(--text-body-sm);text-decoration:none;line-height:1.4}.site-header__wide-default-promo{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:minmax(0,auto);gap:var(--space-24);align-items:stretch;align-self:stretch;width:100%;overflow:visible;min-height:176px;height:fit-content;border-radius:var(--radius);background:var(--brand-surface-soft)}.site-header__wide-default-promo-visual-wrap{grid-row:1;grid-column:1;align-self:stretch;justify-self:start;display:flex;min-height:0}.site-header__wide-default-promo-visual{position:relative;height:100%;width:auto;aspect-ratio:274 \/ 276;min-height:0;overflow:hidden;border-radius:var(--radius);background:var(--brand-surface-soft)}.site-header__wide-default-promo-image{position:absolute;inset:0;display:block;width:100%;height:100%;max-width:none;object-fit:cover;object-position:center;border-radius:inherit}.site-header__wide-default-promo.site-header__wide-default-promo--banner-col{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);gap:0;width:100%;max-width:100%;min-height:0;overflow:hidden}.site-header__wide-default-promo.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-visual-wrap{display:block;grid-column:1;grid-row:1;width:100%;max-width:none;min-width:0;margin:0;padding:0;justify-self:stretch;align-self:stretch}.site-header__wide-default-promo.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-visual{position:relative;display:block;width:100%;max-width:none;min-width:0;height:auto;aspect-ratio:274 \/ 276;overflow:hidden;border-radius:0;background:transparent}.site-header__wide-default-promo.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-image{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:cover;object-position:center;border-radius:0}.site-header__wide-default-promo.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-copy{grid-column:1;grid-row:2}.site-header__wide-default-promo-copy{grid-row:1;grid-column:2;min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--space-14);padding:var(--space-28) var(--space-28) var(--space-28) 0}.site-header__wide-default-promo-title{margin:0;font-family:var(--font-heading);font-size:var(--text-lead-xl);font-weight:var(--font-weight-heading);line-height:1.2;color:var(--text-secondary)}.site-header__wide-default-promo-text{margin:0;color:var(--text-muted);font-size:var(--text-body-sm);line-height:1.3}.site-header__wide-default-promo-cta{margin-top:var(--space-4)}.site-header__wide-default--figma{--site-header-wide-default-figma-divider:#f1f3f2;--site-header-wide-default-figma-surface:#f4fbf7;--site-header-wide-default-col-nav:clamp(220px,24vw,377px);--site-header-wide-default-col-faq:clamp(200px,22vw,349px);--site-header-wide-default-col-shortcuts:clamp(240px,23vw,361px);--site-header-wide-default-col-promo:clamp(220px,26vw,413px)}.site-header__wide-default--figma .site-header__wide-default-body{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,var(--site-header-wide-default-col-nav)) minmax(0,var(--site-header-wide-default-col-faq)) clamp(var(--space-8),1vw,var(--space-20)) minmax(0,var(--site-header-wide-default-col-shortcuts)) clamp(var(--space-12),1.5vw,var(--space-56)) minmax(0,var(--site-header-wide-default-col-promo));gap:0}.site-header__wide-default--figma .site-header__wide-default-promo-col{min-width:0}.site-header__wide-default-nav-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-10)}.site-header__wide-default-faq{min-width:0;min-height:0;align-self:stretch;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;border-left:1px solid var(--site-header-wide-default-figma-divider)}.site-header__wide-default-faq .site-header__wide-default-shortcut--popular{grid-column:1;grid-row:1;margin:0;padding:var(--space-14) var(--space-24) var(--space-16);border:0}.site-header__wide-default-faq .site-header__wide-default-shortcut--popular .site-header__wide-default-shortcut-icon{border-radius:4px}.site-header__wide-default--figma .site-header__wide-default-aside{grid-template-rows:auto;border-left:1px solid var(--site-header-wide-default-figma-divider);border-right:0}.site-header__wide-default--figma .site-header__wide-default-aside .site-header__wide-default-shortcuts{grid-row:1;border-top:0;padding:var(--space-14) var(--space-24) var(--space-16)}.site-header__wide-default--figma .site-header__wide-default-shortcut-icon{border-radius:var(--radius);background:var(--site-header-wide-default-figma-surface)}.site-header__wide-default--figma .site-header__wide-default-promo--banner-col{background:var(--brand-surface-soft);border-radius:var(--radius);overflow:hidden}.site-header__wide-default--figma .site-header__wide-default-promo--banner-col .site-header__wide-default-promo-visual{aspect-ratio:auto;height:150px}.site-header__wide-default--figma .site-header__wide-default-promo--banner-col .site-header__wide-default-promo-visual-wrap{border-radius:var(--radius) var(--radius) 0 0;overflow:hidden}@media (min-width:1281px){.site-header__wide-default--figma .site-header__wide-default-nav{grid-column:1;grid-row:1}.site-header__wide-default--figma .site-header__wide-default-faq{grid-column:2;grid-row:1}.site-header__wide-default--figma .site-header__wide-default-aside{grid-column:4;grid-row:1}.site-header__wide-default--figma .site-header__wide-default-promo-col{grid-column:6;grid-row:1}}@media (max-width:1600px){.site-header__wide-default{--site-header-wide-default-aside-max:clamp(300px,36vw,580px);--site-header-wide-default-cat-min:240px;--site-header-wide-default-panels-min:200px;--site-header-wide-default-shortcut-icon-box:40px;--site-header-wide-default-shortcut-icon-glyph:22px;--site-header-wide-default-promo-image:160px}.site-header__wide-default-body{gap:0 var(--space-20)}.site-header__wide-default--figma{--site-header-wide-default-col-nav:clamp(200px,22vw,320px);--site-header-wide-default-col-faq:clamp(180px,20vw,300px);--site-header-wide-default-col-shortcuts:clamp(200px,21vw,300px);--site-header-wide-default-col-promo:clamp(200px,24vw,340px)}.site-header__wide-default--figma .site-header__wide-default-faq .site-header__wide-default-shortcut--popular,.site-header__wide-default--figma .site-header__wide-default-aside .site-header__wide-default-shortcuts{padding-left:var(--space-16);padding-right:var(--space-16)}.site-header__wide-default--figma .site-header__wide-default-promo--banner-col .site-header__wide-default-promo-copy{padding:var(--space-12) var(--space-12) var(--space-16)}.site-header__wide-default-categories{padding-right:var(--space-24)}.site-header__wide-default-shortcut--popular{column-gap:var(--space-12);row-gap:var(--space-12);padding-right:var(--space-14)}.site-header__wide-default-shortcuts{gap:var(--space-12);padding-left:var(--space-12);padding-right:var(--space-8)}.site-header__wide-default-promo-title{font-size:var(--text-lead)}}@media (max-width:1500px){.site-header__wide-default{--site-header-wide-default-aside-max:clamp(280px,32vw,480px);--site-header-wide-default-cat-min:220px;--site-header-wide-default-panels-min:180px;--site-header-wide-default-shortcut-icon-box:38px;--site-header-wide-default-shortcut-icon-glyph:21px;--site-header-wide-default-promo-image:140px}.site-header__wide-default--figma{--site-header-wide-default-col-nav:clamp(180px,21vw,300px);--site-header-wide-default-col-faq:clamp(168px,19vw,280px);--site-header-wide-default-col-shortcuts:clamp(180px,20vw,280px);--site-header-wide-default-col-promo:clamp(180px,22vw,320px)}.site-header__wide-default-promo-copy{padding:var(--space-12) var(--space-14) var(--space-16) 0}.site-header__wide-default-promo-title{font-size:var(--text-body-lg)}.site-header__wide-default-shortcut--popular{padding-right:var(--space-14)}.site-header__wide-default-shortcuts{padding-left:var(--space-12);padding-right:var(--space-6)}}@media (min-width:1281px) and (max-width:1600px){.site-header__wide-default-promo:not(.site-header__wide-default-promo--banner-col){align-items:flex-start;min-height:0;gap:var(--space-16);padding:var(--space-10) var(--space-12);box-sizing:border-box}.site-header__wide-default-promo:not(.site-header__wide-default-promo--banner-col) .site-header__wide-default-promo-visual-wrap{width:var(--site-header-wide-default-promo-image);height:auto;align-self:flex-start}.site-header__wide-default-promo:not(.site-header__wide-default-promo--banner-col) .site-header__wide-default-promo-visual{width:100%;height:auto;aspect-ratio:274 \/ 276}.site-header__wide-default-promo:not(.site-header__wide-default-promo--banner-col) .site-header__wide-default-promo-copy{align-self:stretch;justify-content:flex-start}}@media (max-width:1366px){.site-header__wide-default{--site-header-wide-default-aside-max:clamp(252px,30vw,380px);--site-header-wide-default-cat-min:200px;--site-header-wide-default-panels-min:160px;--site-header-wide-default-shortcut-icon-box:36px;--site-header-wide-default-shortcut-icon-glyph:20px;--site-header-wide-default-promo-image:120px}.site-header__wide-default--figma{--site-header-wide-default-col-nav:clamp(160px,20vw,280px);--site-header-wide-default-col-faq:clamp(152px,18vw,260px);--site-header-wide-default-col-shortcuts:clamp(160px,19vw,260px);--site-header-wide-default-col-promo:clamp(160px,21vw,300px)}.site-header__wide-default--figma .site-header__wide-default-promo--banner-col .site-header__wide-default-promo-visual{height:132px}.site-header__wide-default-body{gap:0 var(--space-16)}.site-header__wide-default-shortcut--popular{column-gap:var(--space-12)}.site-header__wide-default-shortcuts{gap:var(--space-12)}.site-header__wide-default-categories{padding-right:var(--space-20)}.site-header__wide-default-panel{padding-left:var(--space-14)}.site-header__wide-default-promo-copy{padding:var(--space-10) var(--space-12) var(--space-14) 0;gap:var(--space-12)}.site-header__wide-default-shortcut--popular{padding-right:var(--space-14);row-gap:var(--space-10)}.site-header__wide-default-shortcuts{gap:var(--space-10)}}@media (min-width:1281px) and (max-width:1366px){.site-header__brand-row{gap:var(--space-24)}.site-header__shell{padding-top:var(--space-8)}.site-header__top{padding-bottom:var(--space-12);gap:var(--space-16)}.site-header__tool{min-height:48px;padding-right:var(--space-12)}.site-header__menu{min-height:48px;padding:var(--space-10) 0;gap:var(--space-12) clamp(var(--space-12),1.8vw,var(--space-24))}.site-header__wide-default-aside{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto}.site-header__wide-default-body{grid-template-columns:minmax(var(--site-header-wide-default-cat-min),1fr) minmax(220px,1fr) minmax(0,300px)}.site-header__wide-default-shortcut--popular{grid-column:1;grid-row:1;border-right:0;border-bottom:1px solid var(--ui-border-soft);padding-right:var(--space-14)}.site-header__wide-default-shortcuts{grid-column:1;grid-row:2;border-left:0;padding-left:var(--space-14);padding-right:var(--space-14)}.site-header__wide-default-aside:not(:has(.site-header__wide-default-shortcut--popular)) .site-header__wide-default-shortcuts{grid-row:1}.site-header__wide-default-promo--banner-col{gap:0;padding:0}.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-copy{padding:var(--space-10) var(--space-10) var(--space-12)}}@media (max-width:1280px){.site-header.is-menu-open .site-header__menu-item--wide-default.is-open,.site-header.is-menu-open .site-header__wide-default-category-block{scroll-margin-top:calc(var(--site-mobile-menu-sticky-h,var(--site-header-top-h,0px)) + var(--space-8))}.site-header__dropdown--wide-default{width:100%;max-width:none;margin-left:0;margin-right:0;padding:0}.site-header__dropdown--wide-default>.container{width:100%;max-width:none;padding-left:0;padding-right:0;margin:0}.site-header__menu-item--wide-default .site-header__wide-default,.site-header__menu-item--wide-default .site-header__wide-default-body,.site-header__menu-item--wide-default .site-header__wide-default-categories,.site-header__menu-item--wide-default .site-header__wide-default-nav{width:100%;max-width:none}.site-header__menu-item--wide-default .site-header__wide-default,.site-header__wide-default.site-header__wide-default--figma{background:transparent;border:0;box-shadow:none;border-radius:0;padding:0}.site-header__wide-default-pointer,.site-header__dropdown-pointer{display:none}.site-header__wide-default{max-height:none;overflow:visible}.site-header__wide-default-head{display:none}.site-header__wide-default-body{display:flex;flex-direction:column;gap:0;flex:none;overflow:visible;padding-bottom:0;scrollbar-width:auto}.site-header__wide-default--figma .site-header__wide-default-body{display:flex;flex-direction:column;grid-template-columns:none}.site-header__wide-default-panel{position:static;inset:auto;margin:0;padding:0 0 var(--space-8);border-top:0;overflow:visible;overscroll-behavior:auto}.site-header__wide-default-list{gap:0}.site-header__wide-default-item{border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 65%,transparent)}.site-header__wide-default-item:last-child{border-bottom:0}.site-header__wide-default-link{padding:var(--space-14) 0 var(--space-14) var(--space-16)}.site-header__menu-item--wide-default.is-open>.site-header__dropdown{margin-top:0;padding-bottom:0}.site-header__wide-default-aside{display:none}.site-header__wide-default-promo-col{width:100%;max-width:420px;align-self:flex-start;box-sizing:border-box;padding:var(--space-16) 0 var(--space-20)}.site-header__wide-default-promo,.site-header__wide-default-promo--banner-col{grid-template-columns:1fr;min-height:0;width:100%;max-width:420px}.site-header__wide-default-promo-visual-wrap{grid-column:1;grid-row:1;width:100%;max-width:100%;height:auto;align-self:stretch;justify-self:stretch}.site-header__wide-default-promo-visual{width:100%;max-width:100%;height:auto;aspect-ratio:auto}.site-header__wide-default-promo--banner-col .site-header__wide-default-promo-image,.site-header__wide-default--figma .site-header__wide-default-promo--banner-col .site-header__wide-default-promo-image{width:100%;max-width:100%;height:100%;object-fit:cover;object-position:center}.site-header__wide-default--figma .site-header__wide-default-promo--banner-col .site-header__wide-default-promo-visual{height:150px;width:100%;max-width:100%}.site-header__wide-default-promo-copy{grid-column:1;grid-row:2}.site-header__wide-default-promo-copy{padding:0 var(--space-16) var(--space-16)}.site-header__wide-default-close{display:none}.site-header__wide-default--figma .site-header__wide-default-faq{display:none}.site-header__wide-default-nav-list{gap:0}.site-header__wide-default-nav-item{border-bottom:1px solid color-mix(in srgb,var(--ui-border-soft) 65%,transparent)}.site-header__wide-default-nav-item:last-child{border-bottom:0}}.footer-v1{position:relative;box-sizing:border-box;background:var(--bg-fill-footer);padding:var(--section-y-top) 0 var(--section-y-bottom);overflow:hidden;--footer-brand-max:263px;--footer-nav-max:320px;--footer-popular-max:340px;--footer-cta-min:320px;--footer-col-gap:var(--space-56);--footer-row-gap:var(--space-48);--footer-spacer:var(--space-40);--footer-cols:minmax(200px,var(--footer-brand-max)) var(--footer-spacer) minmax(120px,var(--footer-nav-max)) minmax(120px,var(--footer-popular-max)) minmax(var(--footer-cta-min),1fr)}.footer-v1 > .container{position:relative;z-index:1}.footer-v1__bg{position:absolute;top:0;right:0;bottom:0;z-index:0;display:block;width:clamp(480px,52vw,880px);height:auto;max-height:100%;pointer-events:none;opacity:0.2;object-fit:contain;object-position:right top}.footer-v1__top{position:relative;display:grid;grid-template-columns:var(--footer-cols);gap:var(--footer-row-gap) var(--footer-col-gap);align-items:start}.footer-v1__brand{position:relative;z-index:1;grid-column:1;display:flex;flex-direction:column;gap:var(--space-18);min-width:0}.footer-v1__menus{position:relative;z-index:1;grid-column:3 \/ 5;display:grid;grid-template-columns:minmax(120px,var(--footer-nav-max)) minmax(120px,var(--footer-popular-max));gap:var(--footer-col-gap);min-width:0;align-items:start}.footer-v1__nav,.footer-v1__popular{min-width:0}.footer-v1__cta{position:relative;z-index:1;grid-column:5;min-width:0}.footer-v1__logo-link{display:inline-flex;align-items:flex-start;text-decoration:none}.footer-v1__logo{display:block;width:var(--logo-w);max-width:100%;height:auto}.footer-v1__tagline{margin:0;max-width:263px;color:var(--brand-dark);line-height:1.3}.footer-v1__contacts{--footer-contact-icon:24px;display:flex;flex-direction:column;align-items:stretch;gap:var(--space-10)}.footer-v1__contact-row{display:grid;grid-template-columns:var(--footer-contact-icon) minmax(0,1fr);column-gap:var(--space-6);align-items:center;margin:0;color:var(--text-secondary);text-decoration:none;text-align:left}.footer-v1__contact-row--phone:hover,.footer-v1__contact-row--phone:focus-visible{color:var(--brand-dark)}.footer-v1__contact-icon{display:block;width:19px;height:var(--footer-contact-icon);justify-self:center;color:var(--brand)}.footer-v1__contact-row--phone .footer-v1__contact-icon{width:16px;height:16px}.footer-v1__hours{margin:0;padding-left:calc(var(--footer-contact-icon) + var(--space-6));color:var(--text-muted);text-align:left}.footer-v1__col-title{margin:0 0 var(--space-24);font-weight:600;color:var(--text-primary)}.footer-v1__list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-12)}.footer-v1__link{text-decoration:none;color:var(--text-secondary)}.footer-v1__link:hover,.footer-v1__link:focus-visible{color:var(--brand-dark);text-decoration:underline}.footer-v1__cta-card{width:100%;max-width:520px;min-width:0;border-radius:var(--radius);background:var(--white-opacity-40);backdrop-filter:blur(var(--glass-blur-mobile));-webkit-backdrop-filter:blur(var(--glass-blur-mobile));padding:var(--space-24) var(--space-28);box-sizing:border-box}.footer-v1__cta-title{margin:0;color:var(--text-primary)}.footer-v1__cta-lead{margin:0;max-width:350px;color:var(--text-secondary)}.footer-v1__form{display:flex;flex-direction:column;gap:var(--space-16);margin-top:var(--space-20)}.footer-v1__form-row{display:flex;flex-wrap:wrap;gap:var(--space-10);align-items:stretch}.footer-v1__field{flex:1 1 252px;min-width:230px;max-width:100%}.footer-v1__input{width:100%;min-width:0;min-height:54px;border-color:color-mix(in srgb,var(--text-muted) 55%,var(--ui-border-soft));background:color-mix(in srgb,var(--bg-fill-surface) 55%,transparent)}.footer-v1__submit{flex:1 1 201px;min-width:201px;max-width:100%;width:auto;min-height:54px;padding-inline:var(--space-32);text-transform:uppercase}.footer-v1__consent{display:flex;gap:var(--space-24);align-items:flex-start;color:var(--text-muted);cursor:pointer}.footer-v1__checkbox{width:20px;height:20px;flex:none;margin:0;border-radius:var(--radius-sm);accent-color:var(--brand)}.footer-v1__consent-text{line-height:1.3;max-width:420px}.footer-v1__consent-link{color:inherit;text-decoration:underline;text-underline-offset:2px;transition:color .16s ease,text-decoration-color .16s ease}.footer-v1__consent-link:hover,.footer-v1__consent-link:focus-visible{color:var(--brand-dark);text-decoration-color:currentColor}.footer-v1__divider{position:relative;z-index:1;height:1px;width:100%;margin-top:var(--space-40);background:var(--ui-divider)}.footer-v1__bottom{position:relative;z-index:1;display:grid;grid-template-columns:var(--footer-cols);gap:var(--footer-row-gap) var(--footer-col-gap);align-items:start;padding-top:var(--space-32)}.footer-v1__meta{grid-column:1}.footer-v1__bottom-links{grid-column:2 \/ 5;display:flex;gap:var(--space-32);flex-wrap:wrap;align-items:center}.footer-v1__aside{grid-column:5;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--space-16) var(--space-24);min-width:0}.footer-v1__dev{flex:0 0 auto}.footer-v1__meta-line{margin:0 0 var(--space-8);color:var(--text-muted)}.footer-v1__meta-line:last-child{margin-bottom:0}.footer-v1__bottom-link{text-decoration:none;color:var(--text-muted);line-height:1.3}.footer-v1__bottom-link:hover,.footer-v1__bottom-link:focus-visible{color:var(--text-secondary);text-decoration:underline}.footer-v1__accessibility{display:flex;align-items:center;gap:var(--space-14);flex:0 1 auto;min-width:max-content;max-width:100%;text-decoration:none;color:var(--text-muted)}.footer-v1__accessibility-label{overflow-wrap:normal}.footer-v1__accessibility:hover,.footer-v1__accessibility:focus-visible{color:var(--text-secondary)}.footer-v1__accessibility-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--brand);flex:none}.footer-v1__accessibility-icon .icon{width:24px;height:24px}.footer-v1__dev-logo{display:block;width:221px;max-width:100%;height:auto}.footer-v1__legal{position:relative;z-index:1;display:grid;grid-template-columns:var(--footer-cols);gap:var(--footer-row-gap) var(--footer-col-gap);margin-top:var(--space-40)}.footer-v1__legal-text{grid-column:2 \/ -1;margin:0;padding-top:var(--space-32);border-top:1px solid var(--ui-divider);text-align:left;text-transform:uppercase;font-weight:400;color:var(--ui-border-strong);letter-spacing:-0.02em}@media (min-width:1801px){.footer-v1__aside{flex-wrap:nowrap;gap:var(--space-16)}.footer-v1__accessibility{flex:0 1 auto;max-width:none}.footer-v1__accessibility-label{white-space:nowrap}}@media (max-width:1800px){.footer-v1{--footer-nav-max:280px;--footer-popular-max:300px;--footer-col-gap:var(--space-48);--footer-row-gap:var(--space-40);--footer-spacer:var(--space-32)}}@media (max-width:1600px){.footer-v1{--footer-brand-max:240px;--footer-nav-max:220px;--footer-popular-max:240px;--footer-cta-min:380px;--footer-col-gap:var(--space-32);--footer-row-gap:var(--space-32);--footer-spacer:var(--space-16)}.footer-v1__dev-logo{width:180px}}@media (min-width:1366px){.footer-v1__nav,.footer-v1__popular{overflow-wrap:anywhere}}@media (max-width:1365px){.footer-v1{--footer-cols:minmax(240px,263px) minmax(0,1fr);--footer-col-gap:var(--space-32);--footer-row-gap:var(--space-28);--footer-spacer:var(--space-20)}.footer-v1__top{grid-template-columns:var(--footer-cols)}.footer-v1__brand{grid-column:1;grid-row:1 \/ span 2}.footer-v1__menus{grid-column:2;grid-row:1;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.footer-v1__cta{grid-column:2;grid-row:2}.footer-v1__bottom,.footer-v1__legal{grid-template-columns:var(--footer-cols)}.footer-v1__bottom-links{grid-column:2}.footer-v1__aside{grid-column:2;grid-row:2}}@media (max-width:1200px){.footer-v1{--footer-col-gap:var(--space-24);--footer-row-gap:var(--space-32)}.footer-v1__top{grid-template-columns:1fr 1fr}.footer-v1__brand{grid-column:1;grid-row:1}.footer-v1__menus{grid-column:2;grid-row:1;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.footer-v1__cta{grid-column:1 \/ -1;grid-row:2}.footer-v1__bottom{grid-template-columns:1fr 1fr;grid-template-areas:\"meta meta\" \"links links\" \"aside aside\"}.footer-v1__meta{grid-area:meta;grid-column:auto}.footer-v1__bottom-links{grid-area:links;grid-column:auto}.footer-v1__aside{grid-area:aside;grid-column:auto;grid-row:auto;justify-content:flex-end}.footer-v1__legal{grid-template-columns:1fr}.footer-v1__legal-text{grid-column:auto}}@media (max-width:991px){.footer-v1{padding:var(--section-y-mobile) 0;--footer-col-gap:var(--space-24);--footer-row-gap:var(--space-24);text-align:center;overflow-x:clip;overflow-y:visible}.footer-v1__dev-logo{width:221px;margin-inline:auto}.footer-v1__dev{justify-self:center;display:flex;justify-content:center;width:100%}.footer-v1__bg{top:0;bottom:0;right:0;width:367px;height:auto;min-height:0;overflow:visible}.footer-v1__top{grid-template-columns:1fr}.footer-v1__brand,.footer-v1__menus,.footer-v1__cta{grid-column:auto;grid-row:auto}.footer-v1__brand{align-items:center}.footer-v1__logo-link{justify-content:center}.footer-v1__contacts{align-self:center;width:max-content;max-width:100%}.footer-v1__menus{grid-template-columns:1fr;gap:var(--space-16)}.footer-v1__col-title{margin-bottom:var(--space-12);font-size:var(--text-body-sm)}.footer-v1__list{align-items:center;gap:var(--space-8)}.footer-v1__link{font-size:var(--text-body-sm)}.footer-v1__cta{display:flex;justify-content:center}.footer-v1__cta-card{padding:var(--space-20);text-align:center}.footer-v1__cta-head{align-items:center}.footer-v1__cta-lead{max-width:none}.footer-v1__consent{justify-content:center;text-align:center}.footer-v1__consent-text{max-width:none;text-align:center}.footer-v1__input{text-align:left}.footer-v1__divider{margin-top:var(--space-32)}.footer-v1__bottom{grid-template-columns:1fr;grid-template-areas:\"meta\" \"links\" \"aside\"}.footer-v1__meta,.footer-v1__bottom-links,.footer-v1__aside{grid-column:auto;grid-row:auto}.footer-v1__meta{grid-area:meta}.footer-v1__bottom-links{grid-area:links;justify-content:center}.footer-v1__aside{grid-area:aside;justify-content:center}.footer-v1__accessibility{min-width:0;max-width:100%;justify-content:center}.footer-v1__legal{grid-template-columns:1fr}.footer-v1__legal-text{grid-column:auto;text-align:center}}.back-to-top{position:fixed;right:18px;bottom:60px;z-index:9999;width:52px;height:52px;padding:0;border:0;border-radius:var(--radius-full);background:var(--brand);color:var(--text-on-brand);cursor:pointer;box-shadow:var(--shadow-dropdown);opacity:0;transform:translateY(6px);pointer-events:none;transition:opacity .16s ease,transform .16s ease,background-color .16s ease}.back-to-top:hover,.back-to-top:focus-visible{background:var(--brand-dark);outline:none}.back-to-top.is-visible{opacity:1;transform:translateY(0);pointer-events:auto}.back-to-top__icon{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1;font-weight:700;transform:translateY(-1px)}@media (max-width:1280px){.back-to-top{right:14px;width:48px;height:48px}}@media (max-width:768px){.back-to-top{bottom:var(--space-56)}}",
    "data": {
        "hero-variant-2": "\n\n$deps = ['swiper'];\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n\n$form_exports = [];\n$slides = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $index => $item) {\n        $cta_id = 'slide-' . ($index + 1) . '-cta';\n        $form_config = [\n            'popup_form_title' => $item->title ?? '',\n            'popup_form_lead' => $item->description ?? '',\n            'popup_form_submit_label' => $item->link_title ?? '',\n        ];\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $form_config['popup_form_image'] = $item->image_obj->getImage();\n        }\n        $form_exports[] = ['id' => $cta_id, 'type' => 'form-appointment', 'config' => $form_config];\n\n        $benefits = [];\n        if (!empty($item->subitems_real)) {\n            foreach ($item->subitems_real as $benefit) {\n                $benefits[] = [\n                    'text' => $benefit->title ?? '',\n                    'icon' => !empty($benefit->icon) && !empty($benefit->icon->file_obj)\n                        ? $benefit->icon->file_obj->getImage()\n                        : '',\n                ];\n            }\n        }\n\n        $slides[] = [\n            'eyebrow' => $item->eyebrow ?? '',\n            'title' => $item->title ?? '',\n            'subtitle' => $item->description ?? '',\n            'cta' => $item->link_title ?? '',\n            'cta_form' => 'form-appointment--' . $cta_id,\n            'bg_image' => (!empty($item->image) && !empty($item->image_obj))\n                ? $item->image_obj->getImage()\n                : '',\n            'bg_alt' => $item->image_alt ?? '',\n            'bg_video' => trim((string) ($item->video ?? '')),\n            'benefits' => $benefits,\n        ];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'form_exports' => $form_exports,\n    'slides' => $slides,\n];",
        "benefits-variant-2": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page-alt'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$default_card_icon_src = '\/assets\/src\/img\/benefits\/benefits-icon-cross.svg';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card_icon_src = '';\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $card_icon_src = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'icon_src' => $card_icon_src,\n        ];\n    }\n}\n\n$bg_texture = '\/assets\/src\/img\/grayscale-background.webp';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $bg_texture = trim((string) $block->image_obj->getImage());\n}\n\n$decor_svg = '\/assets\/src\/img\/our-approach\/decor.svg';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $decor_svg = trim((string) $block->icon->file_obj->getImage());\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'default_card_icon_src' => $default_card_icon_src,\n    'items' => $items,\n    'section_bg' => $section_bg,\n    'bg_texture' => $bg_texture,\n    'decor_svg' => $decor_svg,\n];\n",
        "our-approach-variant-2": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$badge_text = $block->title3 ?? '';\n$badge_icon = '';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $badge_icon = trim((string) $block->icon->file_obj->getImage());\n}\nif ($badge_icon === '') {\n    $badge_icon = '\/assets\/src\/img\/our-approach\/our-approach-v2-badge-icon.svg';\n}\n$steps_num_style = $block->view ?? 'slash';\n\n$hero_image = '';\n$hero_alt = $block->image_alt ?? '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $hero_image = trim((string) $block->image_obj->getImage());\n}\n\n$steps = [];\nif (!empty($block->items_1_real)) {\n    $stepNum = 1;\n    foreach ($block->items_1_real as $item) {\n        $steps[] = [\n            'num' => str_pad((string) $stepNum, 2, '0', STR_PAD_LEFT),\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n        ];\n        $stepNum++;\n    }\n}\n\n$cta_eyebrow = $block->eyebrow2 ?? '';\n$cta_title = $block->title2 ?? '';\n$cta_subtitle = $block->description2 ?? '';\n$cta_btn = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$cta_phone_label = '+7 (___)-___-__-__';\n$cta_consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"our-approach-v2__consent-link text-decoration-fade\" href=\"\/policy\" onclick=\"event.stopPropagation()\">политикой обработки персональных данных<\/a>';\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'badge_text' => $badge_text,\n    'badge_icon' => $badge_icon,\n    'hero_image' => $hero_image,\n    'hero_alt' => $hero_alt,\n    'steps_num_style' => $steps_num_style,\n    'steps' => $steps,\n    'cta_eyebrow' => $cta_eyebrow,\n    'cta_title' => $cta_title,\n    'cta_subtitle' => $cta_subtitle,\n    'cta_btn' => $cta_btn,\n    'form_exports' => $form_exports,\n    'cta_phone_label' => $cta_phone_label,\n    'cta_consent_html' => $cta_consent_html,\n];\n",
        "services-variant-3": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$cta_label = $block->link_title ?? '';\n$all_link_label = $block->title2 ?? '';\n$all_link_url = $block->link ?? '\/services\/';\n$tab_active_style = trim((string) ($block->view ?? 'filled'));\nif (!in_array($tab_active_style, ['filled', 'soft'], true)) {\n    $tab_active_style = 'filled';\n}\n$section_bg = $block->view2 ?? 'bg-gradient-page';\n\n$fallback_image = '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $fallback_image = trim((string) $block->image_obj->getImage());\n}\n\n$items = [];\n$services = \\app\\models\\Service::find()\n    ->where(['depth' => 1])\n    ->orderBy('lft ASC')\n    ->published()\n    ->all();\n\nforeach ($services as $service) {\n    $image = $fallback_image;\n    if (!empty($service->image) && !empty($service->image_obj)) {\n        $image = trim((string) $service->image_obj->getImage());\n    }\n\n    $items[] = [\n        'name' => $service->title ?? '',\n        'text' => $service->description ?? '',\n        'url' => $service->selfUrl ?? '#',\n        'image' => $image,\n    ];\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'cta_label' => $cta_label,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'tab_active_style' => $tab_active_style,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "cases-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$section_bg = $block->view2 ?? 'surface';\n\n$cases = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $case_item = [\n            'category' => $item->description ?? '',\n            'title' => $item->title ?? '',\n            'text' => $item->description2 ?? '',\n            'before_image' => '',\n            'after_image' => '',\n            'meta' => [],\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $case_item['before_image'] = trim((string) $item->image_obj->getImage());\n        }\n        if (!empty($item->image2) && !empty($item->image2_obj)) {\n            $case_item['after_image'] = trim((string) $item->image2_obj->getImage());\n        }\n\n        if (!empty($item->subitems_real)) {\n            foreach ($item->subitems_real as $subitem) {\n                $case_item['meta'][] = [\n                    'label' => $subitem->title ?? '',\n                    'value' => $subitem->param1 ?? '',\n                ];\n            }\n        }\n\n        $cases[] = $case_item;\n    }\n}\n\n$handle_src = '\/assets\/src\/img\/cases\/handle.svg';\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'cases' => $cases,\n    'handle_src' => $handle_src,\n    'section_bg' => $section_bg,\n];\n",
        "doctors-variant-4": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '';\n$section_bg = $block->view2 ?? 'surface'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$doctors_back_image = '\/assets\/src\/img\/doctors\/doctors-back.jpg';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $doctors_back_image = $block->image_obj->getImage();\n}\n\n$featured_card_bg = false;\n$list_card_bg = false;\n$badge_style = $block->param1 ?? 'border';\n\n$form_exports = [];\n$doctors = [];\n$members = \\app\\models\\Member::find()->published()->ordered()->all();\n\nforeach ($members as $index => $member) {\n    $cta_id = 'doctor-' . ($index + 1) . '-cta';\n    $form_exports[] = ['id' => $cta_id, 'type' => 'form-appointment', 'config' => []];\n\n    $image = '';\n    if (!empty($member->image) && !empty($member->image_obj)) {\n        $image = $member->image_obj->getImage();\n    }\n\n    $doctors[] = [\n        'name_last' => $member->last_name ?? '',\n        'name_first' => $member->first_name ?? '',\n        'specialty' => $member->speciality ?? '',\n        'role' => $member->position ?? '',\n        'experience' => $member->experience_label ?? '',\n        'rating' => $member->rating ?? '',\n        'focus' => $member->focus ?? '',\n        'image' => $image,\n        'image_has_bg' => !empty($member->image_has_bg),\n        'url' => $member->selfUrl ?? '#',\n        'cta_form' => $cta_id,\n    ];\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'form_exports' => $form_exports,\n    'section_bg' => $section_bg,\n    'doctors_back_image' => $doctors_back_image,\n    'featured_card_bg' => $featured_card_bg,\n    'list_card_bg' => $list_card_bg,\n    'badge_style' => $badge_style,\n    'doctors' => $doctors,\n];\n",
        "quiz-variant-1": "\n\/* ==== DATA ==== *\/\n$heading_level = 'h2';\n\n$step_current = 1;\n$step_total   = 4;\n$step_label   = \"Шаг {$step_current} из {$step_total}\";\n\n$eyebrow = 'подберём решение именно для вас';\n\n$title   = 'Узнайте, <span class=\"accent\">какой вариант имплантации подойдет именно вам<\/span>';\n$lead    = 'Ответьте на несколько вопросов — и мы подготовим персональные рекомендации и план действий для вашей ситуации.';\n\n$decor_image = '\/assets\/src\/img\/quiz\/decor.png';\n\n$promo_tag  = 'для новых пациентов';\n$promo_text = 'Консультация имплантолога и 3D-диагностика в подарок';\n$promo_gift = '\/assets\/src\/img\/quiz\/gift.svg';\n\n$step1_question = 'Что вас беспокоит больше всего?';\n$step1_options  = [\n    [\n        'value' => 'missing',\n        'label' => 'Не хватает одного или нескольких зубов',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step1-icon1.svg',\n    ],\n    [\n        'value' => 'smile',\n        'label' => 'Не устраивает внешний вид улыбки',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step1-icon2.svg',\n    ],\n    [\n        'value' => 'pain',\n        'label' => 'Дискомфорт или боль при жевании',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step1-icon3.svg',\n    ],\n    [\n        'value' => 'full-jaw',\n        'label' => 'Хочу восстановить зубы на всю челюсть',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step1-icon4.svg',\n    ],\n    [\n        'value' => 'explore',\n        'label' => 'Просто хочу узнать свои варианты',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step1-icon5.svg',\n    ],\n];\n\n$step2_question = 'Сколько зубов нужно восстановить?';\n$step2_options  = [\n    [\n        'value' => '1',\n        'label' => '1 зуб',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step2-icon1.svg',\n    ],\n    [\n        'value' => '2-3',\n        'label' => '2–3 зуба',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step2-icon2.svg',\n    ],\n    [\n        'value' => '4-6',\n        'label' => '4–6 зубов',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step2-icon3.svg',\n    ],\n    [\n        'value' => 'full-row',\n        'label' => 'Почти все \/ весь ряд',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step2-icon4.svg',\n    ],\n    [\n        'value' => 'unknown',\n        'label' => 'Точно не знаю (нужна диагностика)',\n        'icon'  => '\/assets\/src\/img\/quiz\/quiz-v1-step2-icon5.svg',\n    ],\n];\n\n$step3_question = 'Когда вы хотите начать лечение?';\n$step3_options  = [\n    [\n        'value' => 'asap',\n        'label' => 'Как можно скорее (в ближайшие 1–2 недели)',\n    ],\n    [\n        'value' => 'month',\n        'label' => 'В течение месяца',\n    ],\n    [\n        'value' => '2-3-months',\n        'label' => 'В ближайшие 2–3 месяца',\n    ],\n    [\n        'value' => 'later',\n        'label' => 'Пока просто узнаю варианты \/ планирую позже',\n    ],\n    [\n        'value' => 'cost',\n        'label' => 'Зависит от стоимости — хочу рассчитать',\n    ],\n];\n\n$step4_question     = 'Куда отправить результат?';\n$step4_name_label   = 'Ваше имя';\n$step4_phone_label  = '+7(___) ___-__-__';\n$step4_email_label  = 'Email (необязательно)';\n$step4_consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n$step4_submit_label = 'Получить рекомендации';\n$step4_bonus_tag    = 'ваш бонус';\n$step4_bonus_text   = 'Консультация имплантолога и 3D-диагностика в подарок';\n$step4_bonus_doctor = '\/assets\/src\/img\/quiz\/quiz-v1-step4-doctor.jpg';\n\n$step4_eyebrow       = 'спасибо за ваши ответы';\n$step4_title         = 'Мы подобрали решения <span class=\"accent\">именно для вас<\/span>';\n$step4_lead          = 'Оставьте контактные данные — и наш координатор свяжется с вами, чтобы пригласить на консультацию и ответить на любые вопросы.';\n$step4_callback_text = 'Свяжемся с вами в течение 15 минут в рабочее время';\n\n$continue_label = 'Продолжить';\n$back_label     = 'Назад';\n$privacy_text   = 'Ваши данные защищены и не передаются третьим лицам.';\n$show_privacy_icon = true;\n\n$section_bg = 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'step_current' => $step_current,\n    'step_total' => $step_total,\n    'step_label' => $step_label,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'decor_image' => $decor_image,\n    'promo_tag' => $promo_tag,\n    'promo_text' => $promo_text,\n    'promo_gift' => $promo_gift,\n    'step1_question' => $step1_question,\n    'step1_options' => $step1_options,\n    'step2_question' => $step2_question,\n    'step2_options' => $step2_options,\n    'step3_question' => $step3_question,\n    'step3_options' => $step3_options,\n    'step4_question' => $step4_question,\n    'step4_name_label' => $step4_name_label,\n    'step4_phone_label' => $step4_phone_label,\n    'step4_email_label' => $step4_email_label,\n    'step4_consent_html' => $step4_consent_html,\n    'step4_submit_label' => $step4_submit_label,\n    'step4_bonus_tag' => $step4_bonus_tag,\n    'step4_bonus_text' => $step4_bonus_text,\n    'step4_bonus_doctor' => $step4_bonus_doctor,\n    'step4_eyebrow' => $step4_eyebrow,\n    'step4_title' => $step4_title,\n    'step4_lead' => $step4_lead,\n    'step4_callback_text' => $step4_callback_text,\n    'continue_label' => $continue_label,\n    'back_label' => $back_label,\n    'privacy_text' => $privacy_text,\n    'show_privacy_icon' => $show_privacy_icon,\n    'section_bg' => $section_bg\n];",
        "choosing-teeth-variant-1": "\n\/* ==== DATA ==== *\/\n$heading_level = 'span'; \/\/ 'h1' — только если блок главный на странице\n\n$step_current = 1;\n$step_total   = 3;\n$step_label   = \"Шаг {$step_current} из {$step_total}\";\n$step1_label  = \"Шаг 1 из {$step_total}\";\n$step2_label  = \"Шаг 2 из {$step_total}\";\n$step3_label  = \"Шаг 3 из {$step_total}\";\n\n$left_title = 'Выберите зубы, которые требуют внимания';\n$left_hint  = 'Можно выбрать несколько зубов';\n$jaw_upper_label = 'Верхняя челюсть';\n$jaw_lower_label = 'Нижняя челюсть';\n$step1_mobile_lead = 'Ответьте на несколько вопросов и мы покажем необходимые вам услуги для решения проблемы';\n\n$error_pick_tooth = 'Выберите хотя бы один зуб';\n$error_pick_concern = 'Выберите, что вас беспокоит';\n\n$selected_label = 'Выбрано зубов:';\n$next_label     = 'Продолжить';\n$back_label     = 'Назад к выбору зубов';\n$back_short_label = 'Назад';\n\n$step2_question = 'Что вас беспокоит больше всего?';\n$step2_options  = [\n    ['key' => 'pain', 'label' => 'Боль'],\n    ['key' => 'aesthetics', 'label' => 'Эстетика'],\n    ['key' => 'missing', 'label' => 'Отсутствие зубов'],\n    ['key' => 'gums', 'label' => 'Кровоточивость десен'],\n    ['key' => 'multiple', 'label' => 'Несколько проблем сразу'],\n];\n$step2_image = '\/assets\/src\/img\/choosing-teeth\/tooth-step2.png';\n\n$step3_intro = 'Мы подобрали возможные варианты лечения на основе ваших ответов.';\n$step3_hint  = 'Оставьте контакты — администратор уточнит детали, а врач подберет подходящие варианты лечения после консультации и диагностики.';\n$step3_services_title = 'Для вашей ситуации подходят услуги:';\n$step3_disclaimer = 'Точный план лечения и стоимость врач подбирает после консультации';\n$step3_services = [\n    'Лечение кариеса',\n    'Лечение каналов',\n    'Консультация терапевта',\n];\n\n$step3_form_name_label = 'Ваше имя';\n$step3_form_phone_label = '+7(___) ___-__-__';\n$step3_form_email_label = 'Email (необязательно)';\n$step3_form_consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n$step3_submit_label = 'Получить план лечения';\n\n$step3_title = '<span class=\"choosing-teeth-v1__title-muted\">Получите предварительный<\/span><br>план лечения и расчет стоимости';\n$step3_icon_teeth = '\/assets\/src\/img\/choosing-teeth\/step3-stat-teeth.svg';\n$step3_icon_concern_bg = '\/assets\/src\/img\/choosing-teeth\/step3-stat-concern-bg.svg';\n$step3_icon_concern = '\/assets\/src\/img\/choosing-teeth\/step3-stat-concern.svg';\n$step3_icon_service = '\/assets\/src\/img\/choosing-teeth\/step3-service.svg';\n\n$title = '<span class=\"choosing-teeth-v1__title-muted\">Получите бесплатную консультацию<\/span><br>и расчет стоимости по вашей ситуации';\n$lead  = 'Что вы получите, ответив на несколько вопросов квиза:';\n\n$benefits = [\n    ['icon' => '\/assets\/src\/img\/choosing-teeth\/right1.svg', 'text' => 'Персональный план лечения'],\n    ['icon' => '\/assets\/src\/img\/choosing-teeth\/right2.svg', 'text' => 'Предварительный расчет стоимости'],\n    ['icon' => '\/assets\/src\/img\/choosing-teeth\/right3.svg', 'text' => 'Подбор оптимального лечения'],\n];\n\n$promo_tag  = 'для новых пациентов';\n$promo_text = 'Консультация имплантолога и 3D-диагностика в подарок';\n$promo_gift = '\/assets\/src\/img\/choosing-teeth\/gift.svg';\n\n$section_bg = 'page-alt'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'step_current' => $step_current,\n    'step_total' => $step_total,\n    'step_label' => $step_label,\n    'step1_label' => $step1_label,\n    'step2_label' => $step2_label,\n    'step3_label' => $step3_label,\n    'left_title' => $left_title,\n    'left_hint' => $left_hint,\n    'jaw_upper_label' => $jaw_upper_label,\n    'jaw_lower_label' => $jaw_lower_label,\n    'step1_mobile_lead' => $step1_mobile_lead,\n    'error_pick_tooth' => $error_pick_tooth,\n    'error_pick_concern' => $error_pick_concern,\n    'selected_label' => $selected_label,\n    'next_label' => $next_label,\n    'back_label' => $back_label,\n    'back_short_label' => $back_short_label,\n    'step2_question' => $step2_question,\n    'step2_options' => $step2_options,\n    'step2_image' => $step2_image,\n    'step3_intro' => $step3_intro,\n    'step3_hint' => $step3_hint,\n    'step3_services_title' => $step3_services_title,\n    'step3_disclaimer' => $step3_disclaimer,\n    'step3_services' => $step3_services,\n    'step3_form_name_label' => $step3_form_name_label,\n    'step3_form_phone_label' => $step3_form_phone_label,\n    'step3_form_email_label' => $step3_form_email_label,\n    'step3_form_consent_html' => $step3_form_consent_html,\n    'step3_submit_label' => $step3_submit_label,\n    'step3_title' => $step3_title,\n    'step3_icon_teeth' => $step3_icon_teeth,\n    'step3_icon_concern_bg' => $step3_icon_concern_bg,\n    'step3_icon_concern' => $step3_icon_concern,\n    'step3_icon_service' => $step3_icon_service,\n    'title' => $title,\n    'lead' => $lead,\n    'benefits' => $benefits,\n    'promo_tag' => $promo_tag,\n    'promo_text' => $promo_text,\n    'promo_gift' => $promo_gift,\n    'section_bg' => $section_bg\n];",
        "reviews-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#reviews';\n$platforms_title = $block->title2 ?? '';\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$card_bg = $block->param1 ?? 'mix';\n\n$leave_review_label = 'Оставить отзыв';\n$cta_title = $block->title3 ?? 'У каждого пациента своя история. Давайте обсудим вашу.';\n$cta_text = $block->description2 ?? 'Оставьте заявку — мы подберем решение, которое подходит именно вам, и ответим на все ваши вопросы.';\n$cta_btn_label = 'получить консультацию';\n$cta_notes = ['Конфиденциально', 'Без навязывания услуг'];\n$form_exports = [\n    ['id' => 'leave-review', 'type' => 'form-review', 'config' => []],\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$chat_icon_src = '\/assets\/src\/img\/reviews\/icon-chat.svg';\n$cta_pattern_src = '\/assets\/src\/img\/reviews\/cta-pattern.webp';\n\n$review_limit = (int) ($block->number1 ?? 12);\nif ($review_limit <= 0) {\n    $review_limit = 12;\n}\n\n$text_reviews = [];\n$review_models = \\app\\models\\Review::find()\n    ->published()\n    ->orderBy(['created_at' => SORT_DESC])\n    ->limit($review_limit)\n    ->all();\n\nforeach ($review_models as $review) {\n    $card = [\n        'name' => $review->title ?? '',\n        'age' => $review->age ?? '',\n        'rating' => (float) ($review->rating ?? 5),\n        'text' => $review->text ?? '',\n    ];\n\n    if (!empty($review->service)) {\n        $card['service'] = $review->service->title ?? '';\n    }\n    if (!empty($review->member)) {\n        $card['doctor'] = $review->member->title ?? '';\n    }\n    if (!empty($review->review_source) && !empty($review->review_source->image) && !empty($review->review_source->image_obj)) {\n        $card['source_logo'] = $review->review_source->image_obj->getImage();\n    }\n    if (!empty($review->created_at)) {\n        $card['date'] = date('d.m.y', strtotime($review->created_at));\n    }\n\n    $text_reviews[] = $card;\n}\n\n$video_review = null;\nif (!empty($block->video)) {\n    $video_review = [\n        'name' => $block->title3 ?? '',\n        'age' => $block->param2 ?? '',\n        'rating' => (float) ($block->number3 ?? 5),\n        'poster' => '',\n        'video_src' => $block->video,\n        'service' => $block->description3 ?? '',\n    ];\n\n    if (!empty($block->image) && !empty($block->image_obj)) {\n        $video_review['poster'] = $block->image_obj->getImage();\n    }\n}\n$video_review_position = (int) ($block->number2 ?? 2);\n\n$platforms = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $platform = [\n            'logo' => '',\n            'logo_w' => (int) ($item->param2 ?? 196),\n            'logo_h' => (int) ($item->param3 ?? 42),\n            'rating' => $item->param1 ?? '5.0',\n            'count' => $item->title ?? '',\n            'url' => $item->link ?? '#',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $platform['logo'] = $item->image_obj->getImage();\n        }\n\n        $platforms[] = $platform;\n    }\n} else {\n    $sources = \\app\\models\\ReviewSource::find()->published()->ordered()->all();\n    foreach ($sources as $source) {\n        $logo = '';\n        if (!empty($source->image) && !empty($source->image_obj)) {\n            $logo = $source->image_obj->getImage();\n        }\n\n        $count = (int) \\app\\models\\Review::find()\n            ->published()\n            ->andWhere(['review_source_id' => $source->id])\n            ->count();\n\n        $platforms[] = [\n            'logo' => $logo,\n            'logo_w' => 196,\n            'logo_h' => 42,\n            'rating' => (string) ($source->rating ?? '5.0'),\n            'count' => $count . ' ' . \\app\\helpers\\base\\TextHelper::getNumEnding($count, ['отзыв', 'отзыва', 'отзывов']),\n            'url' => $source->url ?? '#',\n        ];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'platforms_title' => $platforms_title,\n    'leave_review_label' => $leave_review_label,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'cta_btn_label' => $cta_btn_label,\n    'cta_notes' => $cta_notes,\n    'form_exports' => $form_exports,\n    'chat_icon_src' => $chat_icon_src,\n    'cta_pattern_src' => $cta_pattern_src,\n    'section_bg' => $section_bg,\n    'card_bg' => $card_bg,\n    'text_reviews' => $text_reviews,\n    'video_review' => $video_review,\n    'video_review_position' => $video_review_position,\n    'platforms' => $platforms,\n];\n",
        "treatment-plans-variant-1": "\n\/* ==== DATA ==== *\/\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$trust_label = $block->title2 ?? '';\n$disclaimer = $block->description2 ?? '';\n\n$plans = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $features = [];\n        if (!empty($item->description2)) {\n            foreach (explode(\"\\n\", $item->description2) as $line) {\n                $line = trim($line);\n                if ($line !== '') {\n                    $features[] = $line;\n                }\n            }\n        }\n\n        $plans[] = [\n            'title' => $item->title ?? '',\n            'summary' => $item->description ?? '',\n            'icon' => !empty($item->icon) && !empty($item->icon->file_obj)\n                ? trim((string) $item->icon->file_obj->getImage())\n                : '',\n            'image' => !empty($item->image) && !empty($item->image_obj)\n                ? $item->image_obj->getImage()\n                : '',\n            'price' => !empty($item->price)\n                ? (\\app\\helpers\\base\\TextHelper::price($item->price) . '  ₽')\n                : '',\n            'url' => $item->link ?? '#',\n            'features' => $features,\n        ];\n    }\n}\n\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'trust_label' => $trust_label,\n    'disclaimer' => $disclaimer,\n    'plans' => $plans,\n    'section_bg' => $section_bg,\n];\n",
        "brands-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light';\n\n$slides = [];\nif (!empty($block->items_1_real)) {\n    $slide_page = [];\n    foreach ($block->items_1_real as $item) {\n        if (empty($item->image) || empty($item->image_obj)) {\n            continue;\n        }\n\n        $slide_page[] = [\n            'src' => trim((string) $item->image_obj->getImage()),\n            'alt' => trim((string) (!empty($item->image_alt) ? $item->image_alt : ($item->title ?? ''))),\n        ];\n\n        if (count($slide_page) === 4) {\n            $slides[] = $slide_page;\n            $slide_page = [];\n        }\n    }\n    if ($slide_page !== []) {\n        $slides[] = $slide_page;\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'slides' => $slides,\n    'section_bg' => $section_bg,\n];\n",
        "utp-in-numbers-variant-2": "\n\n$section_id = 'utp-in-numbers-' . $block->id;\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$assets_dir = '\/assets\/src\/img\/utp-in-numbers';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $image = '';\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $image = trim((string) $item->image_obj->getImage());\n        }\n\n        $items[] = [\n            'value' => $item->title2 ?? '',\n            'label' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'image' => $image,\n            'alt' => $item->image_alt ?? '',\n        ];\n    }\n}\n\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'section_id' => $section_id,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'assets_dir' => $assets_dir,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "gallery-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$cta_label = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card = [\n            'src' => '',\n            'alt' => $item->image_alt ?? '',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $card['src'] = trim((string) $item->image_obj->getImage());\n        }\n\n        $items[] = $card;\n    }\n}\n\n$initial_index = 0;\n$initial_index = max(0, min(count($items) - 1, (int) $initial_index));\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'cta_label' => $cta_label,\n    'form_exports' => $form_exports,\n    'items' => $items,\n    'initial_index' => $initial_index,\n    'section_bg' => $section_bg,\n];\n",
        "about-variant-1": "\n$heading_level = $block->is_h1?'h1':'h2';\n$eyebrow       = $block->eyebrow;\n$title         = $block->title;\n$lead          = $block->description;\n\n$paragraphs = \\app\\helpers\\base\\TextHelper::textArray($block->description2);\n$closing = $block->description3;\n\n$more_label = trim((string) ($block->link_title ?? ''));\n$more_url   = trim((string) ($block->link ?? ''));\n$expand_label = \\app\\models\\SystemSettings::getParam('common', 'read_more', 'Читать полностью');\n$collapse_label = \\app\\models\\SystemSettings::getParam('common', 'read_more_collapse', 'Свернуть');\n\n$doctor_name = '';\n$doctor_role = '';\n$doctor_photo = '';\nif ($block->member) {\n    $doctor_name = $block->member->first_name;\n    $doctor_role = $block->member->position;\n    $doctor_photo = $block->member->image_obj->getImage();\n}\n$doctor_signature = $block->image_obj->getImage();\n\n$profile_side = $block->view ?? 'right';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'paragraphs' => $paragraphs,\n    'closing' => $closing,\n    'more_label' => $more_label,\n    'more_url' => $more_url,\n    'expand_label' => $expand_label,\n    'collapse_label' => $collapse_label,\n    'doctor_name' => $doctor_name,\n    'doctor_role' => $doctor_role,\n    'doctor_photo' => $doctor_photo,\n    'doctor_signature' => $doctor_signature,\n    'profile_side' => $profile_side,\n    'section_bg' => $section_bg\n];",
        "news-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#news';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$items = [];\n$articles = \\app\\models\\Article::find()->published()->orderBy('date DESC')->limit(6)->all();\n\nforeach ($articles as $article) {\n    $item = [\n        'url' => $article->selfUrl ?? '#',\n        'title' => $article->title ?? '',\n        'category' => $article->category ?? '',\n        'expert' => '',\n        'date' => '',\n        'read_time' => $article->read_time ?? '',\n    ];\n\n    if (!empty($article->date)) {\n        $item['date'] = $article->date_obj->format('j [' . date('n', $article->date_obj->timeStamp()) . '] Y');\n    }\n\n    if (!empty($article->image) && !empty($article->image_obj)) {\n        $item['image'] = $article->image_obj->getImage();\n    }\n\n    if (!empty($article->member)) {\n        $member_name = $article->member->title ?? '';\n        if ($member_name !== '') {\n            $item['expert'] = 'Эксперт: ' . $member_name;\n        }\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "promo-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#promo';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$card_icons = [\n    '\/assets\/src\/img\/promo\/promo-v2-icon-checkup.svg',\n    '\/assets\/src\/img\/promo\/promo-v2-icon-gift.svg',\n];\n$card_variants = ['overlay', 'tint'];\n\n$getActionImage = static function ($action) {\n    if (!empty($action->image_detail) && !empty($action->image_detail_obj)) {\n        return trim((string) $action->image_detail_obj->getImage());\n    }\n    if (!empty($action->image) && !empty($action->image_obj)) {\n        return trim((string) $action->image_obj->getImage());\n    }\n\n    return '';\n};\n\n$slides = [];\n$actions = \\app\\models\\Action::find()\n    ->published()\n    ->active_by_dates()\n    ->limit(9)\n    ->all();\n\nfor ($i = 0, $count = count($actions); $i < $count; $i += 3) {\n    $featuredAction = $actions[$i];\n    $featured = [\n        'badge' => trim((string) ($featuredAction->title2 ?? '')),\n        'badge_icon' => '',\n        'title' => $featuredAction->title ?? '',\n        'text' => $featuredAction->description ?? '',\n        'button_label' => $featuredAction->button ?? 'узнать подробнее',\n        'button_url' => !empty($featuredAction->selfUrl) ? $featuredAction->selfUrl : '#',\n        'image' => $getActionImage($featuredAction),\n    ];\n\n    $cards = [];\n    for ($j = 1; $j <= 2; $j++) {\n        if (!isset($actions[$i + $j])) {\n            break;\n        }\n\n        $action = $actions[$i + $j];\n        $cards[] = [\n            'title' => $action->title ?? '',\n            'text' => $action->description ?? '',\n            'image' => $getActionImage($action),\n            'icon' => $card_icons[($j - 1) % count($card_icons)],\n            'url' => !empty($action->selfUrl) ? $action->selfUrl : '#',\n            'variant' => $card_variants[($j - 1) % count($card_variants)],\n        ];\n    }\n\n    $slides[] = [\n        'featured' => $featured,\n        'cards' => $cards,\n    ];\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'slides' => $slides,\n    'section_bg' => $section_bg,\n];\n",
        "cta-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$layout = $block->view ?? 'fullwidth';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$bg_image = '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $bg_image = trim((string) $block->image_obj->getImage());\n}\n\n$bg_image_mobile = '';\nif (!empty($block->image2) && !empty($block->image2_obj)) {\n    $bg_image_mobile = trim((string) $block->image2_obj->getImage());\n}\n\n$bg_alt = $block->image_alt ?? '';\n\n$features = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $features[] = [\n            'icon' => !empty($item->icon) && !empty($item->icon->file_obj)\n                ? $item->icon->file_obj->getImage()\n                : '',\n            'text' => $item->title ?? $item->description ?? '',\n        ];\n    }\n}\n\n$concerns_label = \\app\\models\\SystemSettings::getParamArray('form', 'concerns', [\n    'Кариес \/ боль',\n    'Имплантация',\n    'Протезирование',\n    'Прикус \/ ортодонтия',\n]);\n$concerns = [\n    'Что вас беспокоит?' => '',\n];\nforeach ($concerns_label as $concern_label) {\n    $concerns[$concern_label] = $concern_label;\n}\n\n$form_name_label = 'Ваше имя';\n$form_phone_label = '+7 (___)-___-__-__';\n$form_submit_label = $block->link_title ?? 'Получить консультацию';\n$consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light';\n\n$form = new \\app\\models\\forms\\RequestAppointmentForm();\n$form_data = \\app\\blocks\\Data::processForm($form, 'block-' . $block->id);\n\n$form_exports[] = ['id' => 'block-'.$block->id, 'type' => 'form-appointment', 'view' => 'inline', 'config' => []];\n\nreturn [\n    'heading_level' => $heading_level,\n    'layout' => $layout,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'bg_image' => $bg_image,\n    'bg_image_mobile' => $bg_image_mobile,\n    'bg_alt' => $bg_alt,\n    'features' => $features,\n    'concerns' => $concerns,\n    'form_name_label' => $form_name_label,\n    'form_phone_label' => $form_phone_label,\n    'form_submit_label' => $form_submit_label,\n    'form_data' => $form_data,\n    'consent_html' => $consent_html,\n    'section_bg' => $section_bg,\n    'form_exports' => $form_exports,\n];\n",
        "navigation-variant-1": "\n\n$section_id = 'navigation-' . $block->id;\n$nav_label = trim((string) ($block->title ?? 'Разделы страницы'));\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $icon = '';\n        if (!empty($item->icon_id) && !empty($item->icon) && !empty($item->icon->file)) {\n            $icon = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'url' => $item->link ?? '',\n            'icon' => $icon,\n        ];\n    }\n}\n\n$section_bg = $block->view2 ?? 'page';\n$white_surface = !empty($block->flag1);\n\nreturn [\n    'section_id' => $section_id,\n    'nav_label' => $nav_label,\n    'items' => $items,\n    'section_bg' => $section_bg,\n    'white_surface' => $white_surface,\n];",
        "services-variant-4": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page';\n\n$chip_style = trim((string) ($block->view3 ?? 'surface'));\nif (!in_array($chip_style, ['surface', 'decor-outline'], true)) {\n    $chip_style = 'surface';\n}\n\n$mobile_limit = (int) ($block->number1 ?? 4);\nif ($mobile_limit <= 0) {\n    $mobile_limit = 4;\n}\n\n$desktop_rows = (int) ($block->number2 ?? 2);\nif ($desktop_rows <= 0) {\n    $desktop_rows = 2;\n}\n\n$more_label = $block->link_title ?? '';\nif ($more_label === '') {\n    $more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n}\n\n$show_search = !empty($block->flag1);\n$search_placeholder = $block->title2 ?? 'Какую услугу вы ищите?';\n$search_icon_src = '\/assets\/src\/img\/services\/services-search.svg';\n$empty_label = 'По выбранному направлению пока нет услуг.';\n$empty_search_label = 'По запросу ничего не найдено.';\n\n$filters = [\n    [\n        'key' => 'all',\n        'label' => 'Все услуги',\n        'icon' => '\/assets\/src\/img\/cases\/cases-filter-all.svg',\n    ],\n];\n\n$direction_keys = [];\n$directions = \\app\\models\\Service::find()\n    ->where(['depth' => 1])\n    ->orderBy('lft ASC')\n    ->published()\n    ->all();\n\nforeach ($directions as $direction) {\n    $key = (string) $direction->id;\n    $filter = [\n        'key' => $key,\n        'label' => $direction->title ?? '',\n    ];\n\n    if (!empty($direction->icon) && !empty($direction->icon->file_obj)) {\n        $icon = trim((string) $direction->icon->file_obj->getImage());\n        if ($icon !== '') {\n            $filter['icon'] = $icon;\n        }\n    }\n\n    $filters[] = $filter;\n    $direction_keys[(int) $direction->id] = $key;\n}\n\n$items = [];\n$services = \\app\\models\\Service::find()\n    ->where(['depth' => 2])\n    ->orderBy('lft ASC')\n    ->published()\n    ->all();\n\nforeach ($services as $service) {\n    $item = [\n        'name' => $service->title ?? '',\n        'url' => $service->selfUrl ?? '#',\n        'filters' => [],\n    ];\n\n    $parent = $service->parents(1)->one();\n    if ($parent && !empty($direction_keys[(int) $parent->id])) {\n        $item['filters'][] = $direction_keys[(int) $parent->id];\n    }\n\n    if (!empty($service->image) && !empty($service->image_obj)) {\n        $image = trim((string) $service->image_obj->getImage());\n        if ($image !== '') {\n            $item['image'] = $image;\n        }\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'section_bg' => $section_bg,\n    'chip_style' => $chip_style,\n    'more_label' => $more_label,\n    'mobile_limit' => $mobile_limit,\n    'desktop_rows' => $desktop_rows,\n    'show_search' => $show_search,\n    'search_placeholder' => $search_placeholder,\n    'search_icon_src' => $search_icon_src,\n    'empty_label' => $empty_label,\n    'empty_search_label' => $empty_search_label,\n    'filters' => $filters,\n    'items' => $items,\n];\n",
        "promo-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#promo';\n$icon_src = '\/assets\/src\/img\/promo\/promo-icon.svg';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$items = [];\n$actions = \\app\\models\\Action::find()\n    ->published()\n    ->active_by_dates()\n    ->limit(10)\n    ->all();\n\nforeach ($actions as $index => $action) {\n    $item = [\n        'title' => $action->title ?? '',\n        'text' => $action->description ?? '',\n        'image' => '',\n        'url' => !empty($action->selfUrl) ? $action->selfUrl : '#',\n        'variant' => ($index % 2 === 0) ? 'gradient' : 'default',\n    ];\n\n    if (!empty($action->image) && !empty($action->image_obj)) {\n        $item['image'] = trim((string) $action->image_obj->getImage());\n    } elseif (!empty($action->image_detail) && !empty($action->image_detail_obj)) {\n        $item['image'] = trim((string) $action->image_detail_obj->getImage());\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'icon_src' => $icon_src,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "text-variant-1": "\n$section_id = 'text-' . $block->id;\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$title = $block->title ?? '';\n\n$text_main = [];\nif (!empty($block->text)) {\n    $text_main = [$block->text];\n}\n\n$text_spoiler = [];\nif (!empty($block->text2)) {\n    $text_spoiler = [$block->text2];\n}\n\n$more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n$less_label = \\app\\models\\SystemSettings::getParam('common', 'hide_label', 'Скрыть');\n\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'section_id' => $section_id,\n    'heading_level' => $heading_level,\n    'title' => $title,\n    'text_main' => $text_main,\n    'text_spoiler' => $text_spoiler,\n    'more_label' => $more_label,\n    'less_label' => $less_label,\n    'section_bg' => $section_bg\n];",
        "hero-variant-6": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$subtitle = $block->description ?? '';\n$cta = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$bg_image = (!empty($block->image) && !empty($block->image_obj))\n    ? $block->image_obj->getImage()\n    : '\/assets\/src\/img\/hero\/hero6-back.webp';\n$bg_alt = $block->image_alt ?? '';\n\n$benefits = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $benefits[] = [\n            'text' => $item->description ?? '',\n            'icon' => !empty($item->icon) && !empty($item->icon->file_obj)\n                ? $item->icon->file_obj->getImage()\n                : '',\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'subtitle' => $subtitle,\n    'cta' => $cta,\n    'form_exports' => $form_exports,\n    'bg_image' => $bg_image,\n    'bg_alt' => $bg_alt,\n    'benefits' => $benefits,\n];\n",
        "progression-stages-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$notice = trim((string) ($block->description ?? ''));\n\n$notice_icon = '\/assets\/src\/img\/progression-stages\/notice-icon.svg';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $notice_icon = $block->image_obj->getImage();\n}\n\n$icon_problem = '\/assets\/src\/img\/progression-stages\/icon-problem.svg';\n$icon_solution = '\/assets\/src\/img\/progression-stages\/icon-solution.svg';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card = [\n            'badge' => $item->title ?? '',\n            'image' => '',\n            'image_alt' => $item->image_alt ?? '',\n            'problem' => $item->description ?? '',\n            'solution' => $item->description2 ?? '',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $card['image'] = $item->image_obj->getImage();\n        }\n\n        $items[] = $card;\n    }\n}\n\n$cta_eyebrow = 'консультация';\n$cta_title = 'Не откладывайте лечение!';\n$cta_lead = 'Это поможет сохранить ваши зубы, здоровье и бюджет.';\n$cta_text = 'Запишитесь на консультацию и получите план лечения от наших специалистов.';\n$cta_phone_label = '+7(___) ___-__-__';\n$cta_btn = 'записаться на консультацию';\n$cta_bg = trim((string) ($block->view2 ?? 'glass'));\nif (!in_array($cta_bg, ['glass', 'brand-soft'], true)) {\n    $cta_bg = 'glass';\n}\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$cta_consent_html = 'Нажимая на кнопку вы соглашаетесь с&nbsp;<a class=\"progression-stages-v1__consent-link text-decoration-fade\" href=\"\/policy\" onclick=\"event.stopPropagation()\">политикой обработки персональных данных<\/a>';\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'notice' => $notice,\n    'notice_icon' => $notice_icon,\n    'icon_problem' => $icon_problem,\n    'icon_solution' => $icon_solution,\n    'items' => $items,\n    'cta_eyebrow' => $cta_eyebrow,\n    'cta_title' => $cta_title,\n    'cta_lead' => $cta_lead,\n    'cta_text' => $cta_text,\n    'cta_phone_label' => $cta_phone_label,\n    'cta_btn' => $cta_btn,\n    'cta_bg' => $cta_bg,\n    'form_exports' => $form_exports,\n    'cta_consent_html' => $cta_consent_html,\n];\n",
        "progression-stages-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$notice = trim((string) ($block->title2 ?? ''));\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$notice_bg = trim((string) ($block->view3 ?? 'default'));\nif (!in_array($notice_bg, ['default', 'brand-soft'], true)) {\n    $notice_bg = 'default';\n}\n\n$notice_icon = '\/assets\/src\/img\/progression-stages\/notice-icon.svg';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $notice_icon = $block->image_obj->getImage();\n}\n\n$stages_caries = [];\n$stages_pulpitis = [];\n$stages_default = [];\n\n$directions = [];\n$direction_map = [];\nif (!empty($block->items_2_real)) {\n    foreach ($block->items_2_real as $direction) {\n        $id = $direction->id;\n        $icon = '';\n        if (!empty($direction->icon) && !empty($direction->icon->file_obj)) {\n            $icon = $direction->icon->file_obj->getImage();\n        }\n\n        $direction_map[$id] = [\n            'title' => $direction->title ?? '',\n            'icon' => $icon,\n            'mob_label_max' => $direction->param1 ?? '88px',\n            'stages' => [],\n        ];\n        $directions[] = $id;\n    }\n}\n\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $stageData = [\n            'title' => $item->title ?? '',\n            'image' => '',\n            'image_alt' => $item->image_alt ?? '',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $stageData['image'] = $item->image_obj->getImage();\n        }\n\n        if (!empty($item->page_block_item_own_id) && isset($direction_map[$item->page_block_item_own_id])) {\n            $direction_map[$item->page_block_item_own_id]['stages'][] = $stageData;\n        }\n    }\n}\n\n$directionsFinal = [];\nforeach ($directions as $id) {\n    if (isset($direction_map[$id])) {\n        $directionsFinal[] = $direction_map[$id];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'notice' => $notice,\n    'notice_icon' => $notice_icon,\n    'notice_bg' => $notice_bg,\n    'stages_caries' => $stages_caries,\n    'stages_pulpitis' => $stages_pulpitis,\n    'stages_default' => $stages_default,\n    'directions' => $directionsFinal,\n    'section_bg' => $section_bg,\n];\n",
        "prices-variant-2": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'prices-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$all_label = $block->title2 ?? '';\n$all_url = $block->link ?? '\/prices\/';\n$note_text = $block->description2 ?? '';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light';\n$deps = ['swiper'];\n\n$items = [];\nif (!empty($block->services)) {\n    foreach ($block->services as $service) {\n        if (empty($service->public)) {\n            continue;\n        }\n\n        $item = [\n            'icon' => '',\n            'title' => $service->title ?? '',\n            'text' => $service->description ?? '',\n            'price' => '',\n            'price_from' => !empty($service->price_from),\n            'old_price' => '',\n        ];\n\n        if (!empty($service->icon) && !empty($service->icon->file_obj)) {\n            $item['icon'] = trim((string) $service->icon->file_obj->getImage());\n        }\n\n        if ($service->price === null || $service->price === '') {\n            $item['price'] = '';\n        } elseif ((float) $service->price === 0.0) {\n            $item['price'] = 'Бесплатно';\n            $item['price_from'] = false;\n        } else {\n            $item['price'] = \\app\\helpers\\base\\TextHelper::price($service->price) . ' ₽';\n        }\n\n        $items[] = $item;\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'all_label' => $all_label,\n    'all_url' => $all_url,\n    'items' => $items,\n    'note_text' => $note_text,\n    'deps' => $deps,\n    'section_bg' => $section_bg,\n];\n",
        "linking-services-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$desktop_grid_rows = (int) ($block->number2 ?? 3);\n$desktop_grid_cols = (int) ($block->number3 ?? 2);\nif ($desktop_grid_rows <= 0) {\n    $desktop_grid_rows = 3;\n}\nif ($desktop_grid_cols <= 0) {\n    $desktop_grid_cols = 2;\n}\n\n$mobile_limit = (int) ($block->number1 ?? 6);\nif ($mobile_limit <= 0) {\n    $mobile_limit = 6;\n}\n\n$more_label = $block->link_title2 ?? '';\nif ($more_label === '') {\n    $more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n}\n\n$cta_eyebrow = $block->eyebrow2 ?? '';\n$cta_title = $block->title2 ?? '';\n$cta_text = $block->description2 ?? '';\n$phone_label = '+7(___) ___-__-__';\n$cta_btn_label = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$cta_consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n\n$items = [];\n$services = \\app\\models\\Service::find()\n    ->where(['depth' => 1])\n    ->orderBy('lft ASC')\n    ->published()\n    ->all();\n\nforeach ($services as $service) {\n    $item = [\n        'name' => $service->title ?? '',\n        'url' => $service->selfUrl ?? '#',\n        'text' => $service->description ?? '',\n    ];\n\n    if (!empty($service->icon) && !empty($service->icon->file_obj)) {\n        $card_icon = trim((string) $service->icon->file_obj->getImage());\n        if ($card_icon !== '') {\n            $item['icon'] = $card_icon;\n        }\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'section_bg' => $section_bg,\n    'desktop_grid_rows' => $desktop_grid_rows,\n    'desktop_grid_cols' => $desktop_grid_cols,\n    'mobile_limit' => $mobile_limit,\n    'more_label' => $more_label,\n    'cta_eyebrow' => $cta_eyebrow,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'phone_label' => $phone_label,\n    'cta_btn_label' => $cta_btn_label,\n    'form_exports' => $form_exports,\n    'cta_consent_html' => $cta_consent_html,\n    'items' => $items,\n];\n",
        "cases-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$section_bg = $block->view2 ?? 'page';\n\n$cases = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $case_item = [\n            'category' => $item->description ?? '',\n            'title' => $item->title ?? '',\n            'text' => $item->description2 ?? '',\n            'before_image' => '',\n            'after_image' => '',\n            'meta' => [],\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $case_item['before_image'] = trim((string) $item->image_obj->getImage());\n        }\n        if (!empty($item->image2) && !empty($item->image2_obj)) {\n            $case_item['after_image'] = trim((string) $item->image2_obj->getImage());\n        }\n\n        if (!empty($item->subitems_real)) {\n            foreach ($item->subitems_real as $subitem) {\n                $case_item['meta'][] = [\n                    'label' => $subitem->title ?? '',\n                    'value' => $subitem->param1 ?? '',\n                ];\n            }\n        }\n\n        $cases[] = $case_item;\n    }\n}\n\n$handle_src = '\/assets\/src\/img\/cases\/handle.svg';\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'cases' => $cases,\n    'handle_src' => $handle_src,\n    'section_bg' => $section_bg,\n];\n",
        "doctors-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '';\n\n$panel_eyebrow = $block->eyebrow2 ?? '';\n$panel_features = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $panel_features[] = [\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n        ];\n    }\n}\n\n$panel_stats = [];\nif (!empty($block->items_2_real)) {\n    foreach ($block->items_2_real as $item) {\n        $panel_stats[] = [\n            'value' => $item->description ?? '',\n            'label' => $item->title ?? '',\n        ];\n    }\n}\n\n$medal_src = '\/assets\/src\/img\/doctors\/medal.svg';\n$doctors_back_image = '\/assets\/src\/img\/doctors\/doctors-back.jpg';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $doctors_back_image = $block->image_obj->getImage();\n}\n$section_bg = $block->view2 ?? 'surface'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$badge_style = $block->param1 ?? 'fill';\n\n$form_exports = [];\n$doctors = [];\n$members = \\app\\models\\Member::find()->published()->ordered()->all();\n\nforeach ($members as $index => $member) {\n    $cta_id = 'doctor-' . ($index + 1) . '-cta';\n    $form_exports[] = ['id' => $cta_id, 'type' => 'form-appointment', 'config' => []];\n\n    $image = '';\n    if (!empty($member->image) && !empty($member->image_obj)) {\n        $image = $member->image_obj->getImage();\n    }\n\n    $doctors[] = [\n        'name_last' => $member->last_name ?? '',\n        'name_first' => $member->first_name ?? '',\n        'specialty' => $member->speciality ?? '',\n        'role' => $member->position ?? '',\n        'experience' => $member->experience_label ?? '',\n        'rating' => $member->rating ?? '',\n        'image' => $image,\n        'image_has_bg' => !empty($member->image_has_bg),\n        'url' => $member->selfUrl ?? '#',\n        'cta_form' => $cta_id,\n    ];\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'panel_eyebrow' => $panel_eyebrow,\n    'panel_features' => $panel_features,\n    'panel_stats' => $panel_stats,\n    'medal_src' => $medal_src,\n    'doctors_back_image' => $doctors_back_image,\n    'badge_style' => $badge_style,\n    'form_exports' => $form_exports,\n    'doctors' => $doctors,\n    'section_bg' => $section_bg,\n];\n",
        "reviews-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#reviews';\n$platforms_title = $block->title2 ?? '';\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$card_bg = $block->param1 ?? 'mix';\n$reviews_list_visible_count = (int) ($block->number1 ?? 3);\nif ($reviews_list_visible_count <= 0) {\n    $reviews_list_visible_count = 3;\n}\n\n$leave_review_label = 'Оставить отзыв';\n$cta_title = $block->title3 ?? 'У каждого пациента своя история. Давайте обсудим вашу.';\n$cta_text = $block->description2 ?? 'Оставьте заявку — мы подберем решение, которое подходит именно вам, и ответим на все ваши вопросы.';\n$cta_btn_label = 'получить консультацию';\n$cta_notes = ['Конфиденциально', 'Без навязывания услуг'];\n$form_exports = [\n    ['id' => 'leave-review', 'type' => 'form-review', 'config' => []],\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$chat_icon_src = '\/assets\/src\/img\/reviews\/icon-chat.svg';\n$cta_pattern_src = '\/assets\/src\/img\/reviews\/cta-pattern.webp';\n\n$text_reviews = [];\n$review_models = \\app\\models\\Review::find()\n    ->published()\n    ->orderBy(['created_at' => SORT_DESC])\n    ->limit(12)\n    ->all();\n\nforeach ($review_models as $review) {\n    $card = [\n        'name' => $review->title ?? '',\n        'age' => $review->age ?? '',\n        'rating' => (float) ($review->rating ?? 5),\n        'text' => $review->text ?? '',\n    ];\n\n    if (!empty($review->service)) {\n        $card['service'] = $review->service->title ?? '';\n    }\n    if (!empty($review->member)) {\n        $card['doctor'] = $review->member->title ?? '';\n    }\n    if (!empty($review->review_source) && !empty($review->review_source->image) && !empty($review->review_source->image_obj)) {\n        $card['source_logo'] = $review->review_source->image_obj->getImage();\n    }\n    if (!empty($review->created_at)) {\n        $card['date'] = date('d.m.y', strtotime($review->created_at));\n    }\n\n    $text_reviews[] = $card;\n}\n\n$platforms = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $platform = [\n            'logo' => '',\n            'logo_w' => (int) ($item->param2 ?? 196),\n            'logo_h' => (int) ($item->param3 ?? 42),\n            'rating' => $item->param1 ?? '5.0',\n            'count' => $item->title ?? '',\n            'url' => $item->link ?? '#',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $platform['logo'] = $item->image_obj->getImage();\n        }\n\n        $platforms[] = $platform;\n    }\n} else {\n    $sources = \\app\\models\\ReviewSource::find()->published()->ordered()->all();\n    foreach ($sources as $source) {\n        $logo = '';\n        if (!empty($source->image) && !empty($source->image_obj)) {\n            $logo = $source->image_obj->getImage();\n        }\n\n        $count = (int) \\app\\models\\Review::find()\n            ->published()\n            ->andWhere(['review_source_id' => $source->id])\n            ->count();\n\n        $platforms[] = [\n            'logo' => $logo,\n            'logo_w' => 196,\n            'logo_h' => 42,\n            'rating' => (string) ($source->rating ?? '5.0'),\n            'count' => $count . ' ' . \\app\\helpers\\base\\TextHelper::getNumEnding($count, ['отзыв', 'отзыва', 'отзывов']),\n            'url' => $source->url ?? '#',\n        ];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'platforms_title' => $platforms_title,\n    'leave_review_label' => $leave_review_label,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'cta_btn_label' => $cta_btn_label,\n    'cta_notes' => $cta_notes,\n    'form_exports' => $form_exports,\n    'chat_icon_src' => $chat_icon_src,\n    'cta_pattern_src' => $cta_pattern_src,\n    'section_bg' => $section_bg,\n    'card_bg' => $card_bg,\n    'text_reviews' => $text_reviews,\n    'reviews_list_visible_count' => $reviews_list_visible_count,\n    'platforms' => $platforms,\n];\n",
        "linking-services-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$default_card_text = 'Комплексное лечение заболеваний зубов и дёсен';\n\n$items = [];\n$services = \\app\\models\\Service::find()\n    ->where(['depth' => 1])\n    ->orderBy('lft ASC')\n    ->published()\n    ->all();\n\nforeach ($services as $service) {\n    $item = [\n        'name' => $service->title ?? '',\n        'url' => $service->selfUrl ?? '#',\n        'text' => $service->description ?? '',\n    ];\n\n    if (!empty($service->image) && !empty($service->image_obj)) {\n        $card_image = trim((string) $service->image_obj->getImage());\n        if ($card_image !== '') {\n            $item['image'] = $card_image;\n        }\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'section_bg' => $section_bg,\n    'default_card_text' => $default_card_text,\n    'items' => $items,\n];\n",
        "expert-advice-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'expert-advice-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$quote_icon_sprite = 'icon-quote';\n$quote_icon_src = '';\n$quote_paragraphs = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($block->description ?? '')))));\n$note_text = trim((string) ($block->description2 ?? ''));\n$note_icon_sprite = 'icon-info';\n$note_icon_src = '';\n$show_doctor_info = !empty($block->flag1);\n$photo_side = $block->view ?? 'right';\n$section_bg = $block->view2 ?? 'page';\n\n$doctor_photo = '';\n$doctor_name = '';\n$doctor_meta = [];\n\nif (!empty($block->member_id) && !empty($block->member)) {\n    $member = $block->member;\n    if (!empty($member->image) && !empty($member->image_obj)) {\n        $doctor_photo = trim((string) $member->image_obj->getImage());\n    }\n    $doctor_name = $member->title ?? '';\n\n    if (!empty($member->position)) {\n        $doctor_meta[] = $member->position;\n    }\n    if (!empty($member->speciality)) {\n        $doctor_meta[] = $member->speciality;\n    }\n    if (!empty($member->experience)) {\n        $doctor_meta[] = $member->experience . ' ' . \\app\\helpers\\base\\TextHelper::getNumEnding($member->experience, ['год', 'года', 'лет']) . ' опыта';\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'quote_icon_sprite' => $quote_icon_sprite,\n    'quote_icon_src' => $quote_icon_src,\n    'quote_paragraphs' => $quote_paragraphs,\n    'note_text' => $note_text,\n    'note_icon_sprite' => $note_icon_sprite,\n    'note_icon_src' => $note_icon_src,\n    'doctor_photo' => $doctor_photo,\n    'doctor_name' => $doctor_name,\n    'doctor_meta' => $doctor_meta,\n    'show_doctor_info' => $show_doctor_info,\n    'photo_side' => $photo_side,\n    'section_bg' => $section_bg,\n];\n",
        "promo-variant-3": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#promo';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$mobile_limit = (int) ($block->number1 ?? 3);\n\n$promo_v3_badge_tones = ['gold', 'warm', 'cool'];\n\n$items = [];\n$actions = \\app\\models\\Action::find()\n    ->published()\n    ->active_by_dates()\n    ->limit(10)\n    ->all();\n\nforeach ($actions as $index => $action) {\n    $image = '';\n    if (!empty($action->image) && !empty($action->image_obj)) {\n        $image = trim((string) $action->image_obj->getImage());\n    } elseif (!empty($action->image_detail) && !empty($action->image_detail_obj)) {\n        $image = trim((string) $action->image_detail_obj->getImage());\n    }\n\n    $link_label = $action->button ?? 'Узнать подробнее';\n    $link_url = !empty($action->selfUrl) ? $action->selfUrl : '#';\n    $offer = [];\n\n    if (!empty($action->price) || !empty($action->price_old)) {\n        $price = '';\n        if (!empty($action->price_res)) {\n            $price = $action->price_res;\n        } elseif ($action->price !== '' && $action->price !== null) {\n            if (class_exists(\\app\\helpers\\base\\TextHelper::class)) {\n                $price = \\app\\helpers\\base\\TextHelper::price($action->price) . ' ₽';\n            } else {\n                $price = (string) $action->price . ' ₽';\n            }\n        }\n\n        $old_price = '';\n        if (!empty($action->price_old)) {\n            if (class_exists(\\app\\helpers\\base\\TextHelper::class)) {\n                $old_price = \\app\\helpers\\base\\TextHelper::price($action->price_old) . ' ₽';\n            } else {\n                $old_price = (string) $action->price_old . ' ₽';\n            }\n        }\n\n        $offer = [\n            'type' => 'price',\n            'price' => $price,\n            'old_price' => $old_price,\n            'link_label' => $link_label,\n            'link_url' => $link_url,\n        ];\n    } elseif (!empty($action->profit)) {\n        $offer = [\n            'type' => 'discount',\n            'label' => 'Скидка',\n            'value' => $action->profit,\n            'link_label' => $link_label,\n            'link_url' => $link_url,\n        ];\n    } else {\n        $offer = [\n            'type' => 'gift',\n            'label' => 'В подарок',\n            'icon' => '',\n            'link_label' => $link_label,\n            'link_url' => $link_url,\n        ];\n    }\n\n    $item = [\n        'badge' => trim((string) ($action->title2 ?? '')),\n        'badge_tone' => $promo_v3_badge_tones[$index % count($promo_v3_badge_tones)],\n        'badge_icon' => '',\n        'title' => $action->title ?? '',\n        'text' => $action->description ?? '',\n        'image' => $image,\n        'offer' => $offer,\n    ];\n\n    if (!empty($action->view2) && $action->view2 === 'wide') {\n        $item['image_fit'] = 'wide';\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'promo_v3_badge_tones' => $promo_v3_badge_tones,\n    'items' => $items,\n    'mobile_limit' => $mobile_limit,\n    'section_bg' => $section_bg,\n];\n",
        "faq-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$initial_visible = (int) ($block->number1 ?? 5);\nif ($initial_visible < 1) {\n    $initial_visible = 5;\n}\n$reveal_step = (int) ($block->number2 ?? 5);\nif ($reveal_step < 1) {\n    $reveal_step = 5;\n}\n\n$sidebar_title = $block->title2 ?? '';\n$sidebar_text = $block->description2 ?? '';\n$sidebar_btn = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'sidebar-cta', 'type' => 'form-question', 'config' => []],\n];\n\n$sidebar_phone = \\app\\models\\SystemSettings::getParam('adminbase', 'site_phone', '+7 (000) 000-11-11');\n$sidebar_phone_href = !empty($sidebar_phone)\n    ? 'tel:' . \\app\\helpers\\base\\TextHelper::tel($sidebar_phone)\n    : 'tel:+70000001111';\n$sidebar_hours = 'Ежедневно с 9:00 до 21:00';\n$sidebar_icon_sprite = '';\n$sidebar_phone_icon_sprite = '';\n$sidebar_icon = '';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $sidebar_icon = trim((string) $block->icon->file_obj->getImage());\n}\n$sidebar_phone_icon = '';\nif (!empty($block->icon2) && !empty($block->icon2->file_obj)) {\n    $sidebar_phone_icon = trim((string) $block->icon2->file_obj->getImage());\n}\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $itemData = [\n            'question' => $item->title ?? '',\n            'answer' => $item->description ?? '',\n        ];\n\n        if (!empty($item->subitems_real)) {\n            $itemData['materials'] = [];\n            foreach ($item->subitems_real as $material) {\n                $itemData['materials'][] = [\n                    'title' => $material->title ?? '',\n                    'url' => $material->link ?? '#',\n                ];\n            }\n        }\n\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $itemData['icon'] = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = $itemData;\n    }\n}\n\n$section_bg = $block->view2 ?? 'page';\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'initial_visible' => $initial_visible,\n    'reveal_step' => $reveal_step,\n    'sidebar_title' => $sidebar_title,\n    'sidebar_text' => $sidebar_text,\n    'sidebar_btn' => $sidebar_btn,\n    'form_exports' => $form_exports,\n    'sidebar_phone' => $sidebar_phone,\n    'sidebar_phone_href' => $sidebar_phone_href,\n    'sidebar_hours' => $sidebar_hours,\n    'sidebar_icon_sprite' => $sidebar_icon_sprite,\n    'sidebar_phone_icon_sprite' => $sidebar_phone_icon_sprite,\n    'sidebar_icon' => $sidebar_icon,\n    'sidebar_phone_icon' => $sidebar_phone_icon,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "hero-variant-5": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$subtitle = $block->description ?? '';\n$cta = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$bg_image = (!empty($block->image) && !empty($block->image_obj))\n    ? $block->image_obj->getImage()\n    : '\/assets\/src\/img\/hero\/hero5-back.webp';\n$bg_alt = $block->image_alt ?? '';\n\n$facts = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $facts[] = [\n            'label' => $item->description ?? '',\n            'value' => $item->title ?? '',\n            'icon' => $item->view ?? '',\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'subtitle' => $subtitle,\n    'cta' => $cta,\n    'form_exports' => $form_exports,\n    'bg_image' => $bg_image,\n    'bg_alt' => $bg_alt,\n    'facts' => $facts,\n];\n",
        "benefits-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page';\n\n$default_card_icon_src = '\/assets\/src\/img\/benefits\/benefits-icon-cross.svg';\n\n$decor_src = '';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $decor_src = trim((string) $block->icon->file_obj->getImage());\n}\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card_icon_src = '';\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $card_icon_src = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'icon_src' => $card_icon_src,\n        ];\n    }\n}\n\n$article = false;\nif (!empty($block->article_id) && !empty($block->article)) {\n    $articleModel = $block->article;\n    $article = [\n        'title' => $articleModel->title ?? '',\n        'text' => trim((string) ($articleModel->description ?? '')),\n        'link_label' => trim((string) ($articleModel->link_title ?? '')),\n        'url' => trim((string) ($articleModel->selfUrl ?? '')),\n        'icon_src' => '\/assets\/src\/img\/benefits\/open-book.svg',\n    ];\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'default_card_icon_src' => $default_card_icon_src,\n    'decor_src' => $decor_src,\n    'items' => $items,\n    'section_bg' => $section_bg,\n    'article' => $article,\n];\n",
        "patient-errors-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$badge_label = $block->link_title ?? 'Ошибка';\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $icon = '';\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $icon = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'icon' => $icon,\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'badge_label' => $badge_label,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "content-strip-link-variant-1": "\n\n$title = $block->title ?? '';\n$description = $block->description ?? '';\n$link_label = $block->link_title ?? '';\n$url = $block->link ?? '';\n$icon = $block->icon_obj ? $block->icon_obj->getImage() : '';\n$section_bg = $block->view2 ?? 'page-alt';\n\nreturn [\n    'title' => $title,\n    'description' => $description,\n    'link_label' => $link_label,\n    'url' => $url,\n    'icon' => $icon,\n    'section_bg' => $section_bg,\n];",
        "treatment-technologies-variant-1": "\n\/* ==== DATA ==== *\/\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $items[] = [\n            'title' => $item->title ?? '',\n            'image' => $item->image_obj ? $item->image_obj->getImage() : '',\n            'text' => $item->description ?? '',\n            'badge' => $item->param1 ?? '',\n        ];\n    }\n}\n\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'items' => $items,\n    'section_bg' => $section_bg\n];",
        "doctors-variant-6": "\n\n$section_bg = $block->view2 ?? 'page-alt'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$more_label = 'Показать еще';\n$mobile_limit = (int) ($block->number1 ?? 4);\nif ($mobile_limit <= 0) {\n    $mobile_limit = 4;\n}\n$desktop_rows = (int) ($block->number2 ?? 4);\nif ($desktop_rows <= 0) {\n    $desktop_rows = 4;\n}\n$shown_before = 'Показано';\n$shown_mid = 'из';\n$shown_after = 'врачей';\n\n$book_label = 'Записаться на приём';\n$more_link_label = 'Подробнее';\n$available_label = 'Доступна запись на сегодня';\n\n$form_exports = [\n    ['id' => 'book', 'type' => 'form-appointment', 'config' => []],\n];\n\n$doctors_back_image = '\/assets\/src\/img\/doctors\/doctors-back.jpg';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $doctors_back_image = $block->image_obj->getImage();\n}\n$badge_style = $block->param1 ?? 'fill';\n\n$show_team_banner = true;\n$banner_after = 10;\n$banner_title = 'Познакомьтесь с нашей командой';\n$banner_lead = 'Наши врачи — это команда профессионалов с многолетним опытом, которые работают в едином стандарте качества.';\n$banner_video_label = 'Смотреть видео';\n$banner_video_src = '\/assets\/src\/img\/hero\/hero-video.mp4';\n$banner_image = '\/assets\/src\/img\/doctors\/doctors-back.jpg';\n\n$show_filters = true;\n$show_filter_specialty = true;\n$show_filter_direction = true;\n$show_filter_online = true;\n$show_filter_today = true;\n$show_filter_pediatric = true;\n$show_filter_gender = true;\n$show_filter_experience = true;\n$search_placeholder = 'Найдите врача, специальность или направление лечения';\n$search_placeholder_mobile = 'Поиск по врачам и направлениям';\n$search_icon_src = '\/assets\/src\/img\/services\/services-search.svg';\n$more_params_label = 'Еще параметры';\n$filters_label = 'Фильтры';\n$collapse_params_label = 'Свернуть';\n$toggle_online_label = 'Онлайн-консультация';\n$toggle_today_label = 'Принимает сегодня';\n$toggle_pediatric_label = 'Детский приём';\n$found_prefix = 'Найдено:';\n$found_suffix_one = 'специалист';\n$found_suffix_few = 'специалиста';\n$found_suffix_many = 'специалистов';\n$reset_label = 'Сбросить все';\n$empty_filter_label = 'По выбранным фильтрам врачи не найдены.';\n$empty_search_label = 'По запросу ничего не найдено.';\n\n$directions = [\n    ['key' => 'all', 'label' => 'Все направления'],\n];\n$genders = [\n    ['key' => 'all', 'label' => 'Пол врача'],\n    ['key' => 'female', 'label' => 'Женский'],\n    ['key' => 'male', 'label' => 'Мужской'],\n];\n$experience_filters = [\n    ['key' => 'all', 'label' => 'Стаж'],\n    ['key' => '5', 'label' => 'от 5 лет'],\n    ['key' => '10', 'label' => 'от 10 лет'],\n    ['key' => '15', 'label' => 'от 15 лет'],\n    ['key' => '20', 'label' => 'от 20 лет'],\n];\n\n$specialties = [['key' => 'all', 'label' => 'Все специальности']];\n$specialty_keys = [];\n$doctors = [];\n$members = \\app\\models\\Member::find()->published()->ordered()->all();\n\nforeach ($members as $member) {\n    $specialty = trim((string) ($member->speciality ?? ''));\n    $specialty_key = 'all';\n    if ($specialty !== '') {\n        $specialty_key = md5($specialty);\n        if (!isset($specialty_keys[$specialty_key])) {\n            $specialty_keys[$specialty_key] = true;\n            $specialties[] = ['key' => $specialty_key, 'label' => $specialty];\n        }\n    }\n\n    $image = '';\n    if (!empty($member->image) && !empty($member->image_obj)) {\n        $image = $member->image_obj->getImage();\n    }\n\n    $doctors[] = [\n        'name_last' => $member->last_name ?? '',\n        'name_first' => $member->first_name ?? '',\n        'specialty' => $specialty,\n        'specialty_key' => $specialty_key,\n        'direction_key' => $specialty_key,\n        'role' => $member->position ?? '',\n        'experience' => $member->experience_label ?? '',\n        'rating' => $member->rating ?? '',\n        'image' => $image,\n        'image_has_bg' => !empty($member->image_has_bg),\n        'url' => $member->selfUrl ?? '#',\n        'available_today' => false,\n    ];\n}\n\nreturn [\n    'section_bg' => $section_bg,\n    'more_label' => $more_label,\n    'mobile_limit' => $mobile_limit,\n    'desktop_rows' => $desktop_rows,\n    'shown_before' => $shown_before,\n    'shown_mid' => $shown_mid,\n    'shown_after' => $shown_after,\n    'book_label' => $book_label,\n    'more_link_label' => $more_link_label,\n    'available_label' => $available_label,\n    'form_exports' => $form_exports,\n    'doctors_back_image' => $doctors_back_image,\n    'badge_style' => $badge_style,\n    'show_team_banner' => $show_team_banner,\n    'banner_after' => $banner_after,\n    'banner_title' => $banner_title,\n    'banner_lead' => $banner_lead,\n    'banner_video_label' => $banner_video_label,\n    'banner_video_src' => $banner_video_src,\n    'banner_image' => $banner_image,\n    'show_filters' => $show_filters,\n    'show_filter_specialty' => $show_filter_specialty,\n    'show_filter_direction' => $show_filter_direction,\n    'show_filter_online' => $show_filter_online,\n    'show_filter_today' => $show_filter_today,\n    'show_filter_pediatric' => $show_filter_pediatric,\n    'show_filter_gender' => $show_filter_gender,\n    'show_filter_experience' => $show_filter_experience,\n    'search_placeholder' => $search_placeholder,\n    'search_placeholder_mobile' => $search_placeholder_mobile,\n    'search_icon_src' => $search_icon_src,\n    'more_params_label' => $more_params_label,\n    'filters_label' => $filters_label,\n    'collapse_params_label' => $collapse_params_label,\n    'toggle_online_label' => $toggle_online_label,\n    'toggle_today_label' => $toggle_today_label,\n    'toggle_pediatric_label' => $toggle_pediatric_label,\n    'found_prefix' => $found_prefix,\n    'found_suffix_one' => $found_suffix_one,\n    'found_suffix_few' => $found_suffix_few,\n    'found_suffix_many' => $found_suffix_many,\n    'reset_label' => $reset_label,\n    'empty_filter_label' => $empty_filter_label,\n    'empty_search_label' => $empty_search_label,\n    'specialties' => $specialties,\n    'directions' => $directions,\n    'genders' => $genders,\n    'experience_filters' => $experience_filters,\n    'doctors' => $doctors,\n];\n",
        "prices-variant-3": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'prices-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$search_placeholder = $block->title2 ?? '';\n$download_label = $block->link_title2 ?? '';\n$download_url = $block->link ?? '';\n$form_exports = [\n    ['id' => 'book', 'type' => 'form-appointment', 'config' => []],\n];\n$book_label = $block->link_title ?? '';\n$note_text = $block->description2 ?? '';\n$search_icon_src = '\/assets\/src\/img\/prices\/prices-v3-search.svg';\n$section_bg = $block->view2 ?? 'page';\n\n$appendServiceRows = static function (array &$rows, $service, bool $allow_group = true): void {\n    $price_rows = [];\n    if (!empty($service->prices_real)) {\n        foreach ($service->prices_real as $price_row) {\n            $price_label = '';\n            if ($price_row->price !== null && $price_row->price !== '') {\n                if ((float) $price_row->price === 0.0) {\n                    $price_label = 'Бесплатно';\n                } else {\n                    $price_label = \\app\\helpers\\base\\TextHelper::price($price_row->price) . ' ₽';\n                }\n            }\n\n            $price_rows[] = [\n                'code' => $price_row->code ?? '',\n                'title' => $price_row->title ?? '',\n                'price' => $price_label,\n                'old_price' => '',\n            ];\n        }\n    }\n\n    if ($price_rows === []) {\n        $fallback_price = '';\n        if ($service->price !== null && $service->price !== '') {\n            if ((float) $service->price === 0.0) {\n                $fallback_price = 'Бесплатно';\n            } else {\n                $fallback_price = \\app\\helpers\\base\\TextHelper::price($service->price) . ' ₽';\n                if (!empty($service->price_from)) {\n                    $fallback_price = 'от ' . $fallback_price;\n                }\n            }\n        }\n\n        if ($fallback_price !== '') {\n            $rows[] = [\n                'type' => 'service',\n                'code' => '',\n                'title' => $service->title ?? '',\n                'price' => $fallback_price,\n            ];\n        }\n        return;\n    }\n\n    if (count($price_rows) === 1 || !$allow_group) {\n        foreach ($price_rows as $single) {\n            $rows[] = [\n                'type' => 'service',\n                'code' => $single['code'],\n                'title' => $single['title'] !== '' ? $single['title'] : ($service->title ?? ''),\n                'price' => $single['price'],\n                'old_price' => $single['old_price'],\n            ];\n        }\n        return;\n    }\n\n    $rows[] = [\n        'type' => 'group',\n        'title' => $service->title ?? '',\n        'items' => $price_rows,\n    ];\n};\n\n$categories = [];\n$directions = \\app\\models\\Service::find()\n    ->where(['depth' => 1])\n    ->orderBy('lft ASC')\n    ->published()\n    ->all();\n\nforeach ($directions as $direction) {\n    $category = [\n        'key' => (string) $direction->id,\n        'label' => $direction->title ?? '',\n        'rows' => [],\n    ];\n\n    if (!empty($direction->icon) && !empty($direction->icon->file_obj)) {\n        $icon = trim((string) $direction->icon->file_obj->getImage());\n        if ($icon !== '') {\n            $category['icon'] = $icon;\n        }\n    }\n\n    $services = \\app\\models\\Service::find()\n        ->where(['depth' => 2])\n        ->andWhere(['>', 'lft', $direction->lft])\n        ->andWhere(['<', 'rgt', $direction->rgt])\n        ->orderBy('lft ASC')\n        ->published()\n        ->all();\n\n    foreach ($services as $service) {\n        $appendServiceRows($category['rows'], $service);\n    }\n\n    $appendServiceRows($category['rows'], $direction, false);\n\n    if ($category['rows'] !== []) {\n        $categories[] = $category;\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'search_placeholder' => $search_placeholder,\n    'download_label' => $download_label,\n    'download_url' => $download_url,\n    'form_exports' => $form_exports,\n    'book_label' => $book_label,\n    'note_text' => $note_text,\n    'search_icon_src' => $search_icon_src,\n    'categories' => $categories,\n    'section_bg' => $section_bg,\n];\n",
        "promo-banners-variant-1": "\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card = [\n            'tag' => trim((string) ($item->eyebrow ?? '')),\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'image' => '',\n            'image_alt' => $item->image_alt ?? '',\n            'image_object_position' => $item->param1 ?? 'center',\n            'cta_label' => $item->link_title ?? '',\n            'cta_url' => $item->link ?? '#',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $card['image'] = trim((string) $item->image_obj->getImage());\n        }\n\n        $items[] = $card;\n    }\n}\n\nreturn [\n    'items' => $items,\n];\n",
        "hero-variant-7": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$bg_mode = $block->view ?? 'color';\n$bg_image = (!empty($block->image) && !empty($block->image_obj))\n    ? $block->image_obj->getImage()\n    : '\/assets\/src\/img\/cta\/cta-v2-bg.png';\n$bg_alt = $block->image_alt ?? '';\n$visual_image = (!empty($block->image2) && !empty($block->image2_obj))\n    ? $block->image2_obj->getImage()\n    : '\/assets\/src\/img\/hero\/hero7-visual.webp';\n$visual_alt = $block->image2_alt ?? '';\n\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$title_url = null;\n$subtitle = $block->description ?? '';\n$cta = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$promo_label = 'Акция действует до:';\n$promo_date = '';\n$promo_icon_sprite = '';\n$badge_label = '';\n$badge_value = '';\n\nif (!empty($block->action)) {\n    $action = $block->action;\n    if (!empty($action->selfUrl)) {\n        $title_url = $action->selfUrl;\n    }\n    if (!empty($action->active_to)) {\n        $promo_date = $action->active_to_obj->format('d.m.Y');\n    }\n    $badge_value = trim((string) ($action->profit ?? ''));\n    if ($badge_value !== '') {\n        $badge_label = 'Ваша выгода до';\n    }\n}\n\n$benefits = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $benefits[] = [\n            'text' => $item->description ?? $item->title ?? '',\n            'icon' => !empty($item->icon) && !empty($item->icon->file_obj)\n                ? $item->icon->file_obj->getImage()\n                : '',\n        ];\n    }\n}\n\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'bg_mode' => $bg_mode,\n    'bg_image' => $bg_image,\n    'bg_alt' => $bg_alt,\n    'visual_image' => $visual_image,\n    'visual_alt' => $visual_alt,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'title_url' => $title_url,\n    'subtitle' => $subtitle,\n    'cta' => $cta,\n    'form_exports' => $form_exports,\n    'promo_label' => $promo_label,\n    'promo_date' => $promo_date,\n    'promo_icon_sprite' => $promo_icon_sprite,\n    'badge_label' => $badge_label,\n    'badge_value' => $badge_value,\n    'benefits' => $benefits,\n    'section_bg' => $section_bg,\n];\n",
        "text-variant-3": "\n\n$section_id = 'text-offer-' . $block->id;\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$widget_side = $block->view ?? 'right';\n\n$cta_image = '\/assets\/src\/img\/text\/text-v3-cta.webp';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $cta_image = trim((string) $block->image_obj->getImage());\n}\n\n$cta_title = $block->title2 ?? 'Хотите подробнее узнать об акции?';\n$cta_text = $block->description2 ?? 'Оставьте нам свои данные и мы свяжемся с вами в ближайшее время';\n$cta_btn = $block->link_title ?? 'Узнать подробнее про акцию';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $section) {\n        $sectionType = (string) ($section->view ?? 'list');\n        if ($sectionType !== 'numeric') {\n            $sectionType = 'list';\n        }\n\n        $sectionItems = [];\n        if (!empty($section->subitems_real)) {\n            $num = 1;\n            foreach ($section->subitems_real as $item) {\n                $paragraphs = [];\n                if (!empty($item->description)) {\n                    foreach (explode(\"\\n\", $item->description) as $line) {\n                        $line = trim($line);\n                        if ($line !== '') {\n                            $paragraphs[] = $line;\n                        }\n                    }\n                }\n\n                $entry = [\n                    'title' => $item->title ?? '',\n                    'paragraphs' => $paragraphs,\n                ];\n                if ($sectionType === 'numeric') {\n                    $entry['num'] = str_pad((string) $num, 2, '0', STR_PAD_LEFT);\n                    $num++;\n                }\n\n                $sectionItems[] = $entry;\n            }\n        }\n\n        $items[] = [\n            'title' => $section->title ?? '',\n            'type' => $sectionType,\n            'items' => $sectionItems,\n        ];\n    }\n}\n\nreturn [\n    'section_id' => $section_id,\n    'heading_level' => $heading_level,\n    'items' => $items,\n    'cta_image' => $cta_image,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'cta_btn' => $cta_btn,\n    'form_exports' => $form_exports,\n    'widget_side' => $widget_side,\n];\n",
        "text-variant-2": "\n\n$section_id = 'text-benefits-' . $block->id;\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    $num = 1;\n    foreach ($block->items_1_real as $item) {\n        $items[] = [\n            'num' => str_pad((string) $num, 2, '0', STR_PAD_LEFT),\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n        ];\n        $num++;\n    }\n}\n\nreturn [\n    'section_id' => $section_id,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'items' => $items,\n];\n",
        "prices-variant-4": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'prices-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$col_without_label = $block->title2 ?? '';\n$col_with_label = $block->title3 ?? '';\n$total_label = $block->link_title ?? '';\n$section_bg = $block->view2 ?? 'page';\n\n$formatPrice = static function ($value): string {\n    if ($value === null || $value === '') {\n        return '';\n    }\n    if ((float) $value === 0.0) {\n        return '0 ₽';\n    }\n\n    return \\app\\helpers\\base\\TextHelper::price($value) . ' ₽';\n};\n\n$items = [];\n$total_regular_sum = 0.0;\n$total_promo_sum = 0.0;\n$has_regular_total = false;\n$has_promo_total = false;\n\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $price_item = $item->price_item ?? null;\n        if (empty($price_item) || empty($price_item->public)) {\n            continue;\n        }\n\n        $title_value = trim((string) ($item->title ?? ''));\n        if ($title_value === '') {\n            $title_value = trim((string) ($price_item->title ?? ''));\n        }\n\n        $price_regular_raw = $price_item->price_old;\n        $price_promo_raw = $price_item->price;\n        $price_regular = $formatPrice($price_regular_raw);\n        $price_promo = $formatPrice($price_promo_raw);\n\n        if ($price_regular === '' && $price_promo_raw !== null && $price_promo_raw !== '') {\n            $price_regular = $price_promo;\n        }\n\n        if ($price_regular_raw !== null && $price_regular_raw !== '') {\n            $total_regular_sum += (float) $price_regular_raw;\n            $has_regular_total = true;\n        } elseif ($price_promo_raw !== null && $price_promo_raw !== '') {\n            $total_regular_sum += (float) $price_promo_raw;\n            $has_regular_total = true;\n        }\n\n        if ($price_promo_raw !== null && $price_promo_raw !== '') {\n            $total_promo_sum += (float) $price_promo_raw;\n            $has_promo_total = true;\n        }\n\n        $promo_highlight = false;\n        if ($price_promo_raw !== null && $price_promo_raw !== '') {\n            if ((float) $price_promo_raw === 0.0) {\n                $promo_highlight = true;\n            } elseif ($price_regular_raw !== null && $price_regular_raw !== '' && (float) $price_promo_raw < (float) $price_regular_raw) {\n                $promo_highlight = true;\n            }\n        }\n\n        $icon = '';\n        $service = $price_item->service ?? null;\n        if (!empty($service) && !empty($service->icon) && !empty($service->icon->file_obj)) {\n            $icon = trim((string) $service->icon->file_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $title_value,\n            'icon' => $icon,\n            'price_regular' => $price_regular,\n            'price_promo' => $price_promo,\n            'promo_highlight' => $promo_highlight,\n        ];\n    }\n}\n\n$total_regular = $has_regular_total ? $formatPrice($total_regular_sum) : '';\n$total_promo = $has_promo_total ? $formatPrice($total_promo_sum) : '';\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'col_without_label' => $col_without_label,\n    'col_with_label' => $col_with_label,\n    'total_label' => $total_label,\n    'items' => $items,\n    'total_regular' => $total_regular,\n    'total_promo' => $total_promo,\n    'section_bg' => $section_bg,\n    'item_icon_src' => false,\n];\n",
        "cases-variant-3": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$section_bg = $block->view2 ?? 'bg-gradient-page';\n\n$filters = [\n    [\n        'key' => 'all',\n        'label' => $block->param1 ?? 'Все случаи',\n        'icon' => '',\n    ],\n];\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $filters[0]['icon'] = trim((string) $block->image_obj->getImage());\n}\n\n$cases = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        if (empty($item->subitems_real)) {\n            continue;\n        }\n\n        $filter_icon = '';\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $filter_icon = trim((string) $item->image_obj->getImage());\n        }\n\n        $category_key = 'category-' . $block->id . '-' . $item->id;\n        $filters[] = [\n            'key' => $category_key,\n            'label' => $item->title ?? '',\n            'icon' => $filter_icon,\n        ];\n\n        foreach ($item->subitems_real as $subitem) {\n            $before_image = '';\n            $after_image = '';\n            if (!empty($subitem->image) && !empty($subitem->image_obj)) {\n                $before_image = trim((string) $subitem->image_obj->getImage());\n            }\n            if (!empty($subitem->image2) && !empty($subitem->image2_obj)) {\n                $after_image = trim((string) $subitem->image2_obj->getImage());\n            }\n\n            $cases[] = [\n                'category' => $category_key,\n                'title' => $subitem->title ?? '',\n                'text' => $subitem->description2 ?? '',\n                'before_image' => $before_image,\n                'after_image' => $after_image,\n            ];\n        }\n    }\n}\n\n$handle_src = '\/assets\/src\/img\/cases\/handle.svg';\n\n$desktop_slides = (int) ($block->number1 ?? 3);\nif (!in_array($desktop_slides, [2, 3, 4], true)) {\n    $desktop_slides = 3;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'filters' => $filters,\n    'cases' => $cases,\n    'handle_src' => $handle_src,\n    'desktop_slides' => $desktop_slides,\n    'section_bg' => $section_bg,\n];\n",
        "text-variant-5": "\n\n$section_id = 'text-description-' . $block->id;\n$text = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page';\n\nreturn [\n    'section_id' => $section_id,\n    'text' => $text,\n    'section_bg' => $section_bg,\n];\n",
        "patients-variant-1": "\n\n$more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n$visible_count = (int) ($block->number1 ?? 4);\nif ($visible_count < 1) {\n    $visible_count = 1;\n}\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card = [\n            'icon' => '',\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'url' => $item->link ?? '#',\n        ];\n\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $card['icon'] = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = $card;\n    }\n}\n\nreturn [\n    'more_label' => $more_label,\n    'visible_count' => $visible_count,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "patients-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$title = $block->title ?? '';\n$download_label = $block->link_title ?? 'Скачать';\n$document_icon_sprite = 'icon-patients-document';\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $meta = '';\n        if (!empty($item->file)) {\n            $file = \\Yii::getAlias('@app\/web') . $item->file;\n            $ext = strtoupper(pathinfo($file, PATHINFO_EXTENSION));\n            $size = file_exists($file) ? number_format(filesize($file) \/ 1024, 0) : '0';\n            $meta = $ext . ' \/ ' . $size . ' Кб';\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'meta' => $meta,\n            'url' => $item->file ?? '#',\n        ];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'title' => $title,\n    'download_label' => $download_label,\n    'document_icon_sprite' => $document_icon_sprite,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "cta-variant-3": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$bg_image = '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $bg_image = trim((string) $block->image_obj->getImage());\n}\n\n$icon_src = '';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $icon_src = trim((string) $block->icon->file_obj->getImage());\n}\n\n$btn_label = $block->link_title ?? 'получить консультацию';\n\n$notes = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $note = trim((string) ($item->title ?? ''));\n        if ($note === '') {\n            continue;\n        }\n        $notes[] = $note;\n    }\n}\n\n$section_bg = $block->view2 ?? 'page';\n\n$form_id = 'cta-' . $block->id;\n$form_popup = $form_id;\n$form_exports = [\n    [\n        'id' => $form_id,\n        'type' => 'form-appointment',\n        'config' => [\n            'popup_form_title' => $title,\n            'popup_form_lead' => $lead,\n            'popup_form_submit_label' => $btn_label,\n        ],\n    ],\n];\n\nreturn [\n    'heading_level' => $heading_level,\n    'title' => $title,\n    'lead' => $lead,\n    'form_exports' => $form_exports,\n    'bg_image' => $bg_image,\n    'icon_src' => $icon_src,\n    'btn_label' => $btn_label,\n    'notes' => $notes,\n    'form_popup' => $form_popup,\n    'section_bg' => $section_bg,\n];\n",
        "patients-variant-3": "\n\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $tab) {\n        $icon = '';\n        if (!empty($tab->icon) && !empty($tab->icon->file_obj)) {\n            $icon = trim((string) $tab->icon->file_obj->getImage());\n        }\n\n        $sections = [];\n        if (!empty($tab->subitems_real)) {\n            foreach ($tab->subitems_real as $section) {\n                $type = (string) ($section->view ?? 'intro');\n                if (!in_array($type, ['intro', 'list', 'steps'], true)) {\n                    $type = 'intro';\n                }\n\n                $sectionData = [\n                    'type' => $type,\n                    'title' => $section->title ?? '',\n                    'text' => $section->description ?? '',\n                ];\n\n                if ($type === 'list') {\n                    $listItems = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($section->description2 ?? '')))));\n                    if ($listItems !== []) {\n                        $sectionData['items'] = $listItems;\n                    }\n                }\n\n                if ($type === 'steps' && !empty($section->subitems_real)) {\n                    $steps = [];\n                    foreach ($section->subitems_real as $step) {\n                        $steps[] = [\n                            'title' => $step->title ?? '',\n                            'text' => $step->description ?? '',\n                        ];\n                    }\n                    if ($steps !== []) {\n                        $sectionData['steps'] = $steps;\n                    }\n                }\n\n                $sections[] = $sectionData;\n            }\n        }\n\n        $items[] = [\n            'icon' => $icon,\n            'title' => $tab->title ?? '',\n            'sections' => $sections,\n        ];\n    }\n}\n\nreturn [\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "patients-variant-4": "\n\n$document_icon_sprite = 'icon-patients-document';\n$cta_icon = '';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $cta_icon = trim((string) $block->icon->file_obj->getImage());\n}\n$cta_title = $block->title2 ?? '';\n$cta_text = $block->description2 ?? '';\n$cta_btn_label = $block->link_title ?? '';\n$cta_url = $block->link ?? '';\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $tab) {\n        $icon = '';\n        if (!empty($tab->icon) && !empty($tab->icon->file_obj)) {\n            $icon = trim((string) $tab->icon->file_obj->getImage());\n        }\n\n        $type = (string) ($tab->view ?? 'cards-3');\n        if (!in_array($type, ['cards-3', 'cards-2', 'documents', 'steps'], true)) {\n            $type = 'cards-3';\n        }\n\n        $item = [\n            'id' => 'patients-v4-section-' . ($tab->id ?? (count($items) + 1)),\n            'icon' => $icon,\n            'title' => $tab->title ?? '',\n            'panel_title' => $tab->title2 ?? ($tab->title ?? ''),\n            'panel_text' => $tab->description ?? '',\n            'type' => $type,\n        ];\n\n        if (($type === 'cards-3' || $type === 'cards-2') && !empty($tab->subitems_real)) {\n            $cards = [];\n            foreach ($tab->subitems_real as $card) {\n                $cardIcon = '';\n                if (!empty($card->icon) && !empty($card->icon->file_obj)) {\n                    $cardIcon = trim((string) $card->icon->file_obj->getImage());\n                }\n                $cards[] = [\n                    'icon' => $cardIcon,\n                    'title' => $card->title ?? '',\n                    'text' => $card->description ?? '',\n                ];\n            }\n            $item['cards'] = $cards;\n        }\n\n        if ($type === 'documents' && !empty($tab->subitems_real)) {\n            $documents = [];\n            foreach ($tab->subitems_real as $doc) {\n                $meta = '';\n                if (!empty($doc->file)) {\n                    $file = \\Yii::getAlias('@app\/web') . $doc->file;\n                    $ext = strtoupper(pathinfo($file, PATHINFO_EXTENSION));\n                    $size = file_exists($file) ? number_format(filesize($file) \/ 1024, 0) : '0';\n                    $meta = $ext . ' \/ ' . $size . ' Кб';\n                }\n                $fileUrl = trim((string) ($doc->file ?? ''));\n                $viewUrl = trim((string) ($doc->link ?? ''));\n                if ($viewUrl === '' && $fileUrl !== '') {\n                    $viewUrl = $fileUrl;\n                }\n                if ($viewUrl === '') {\n                    $viewUrl = '#';\n                }\n                $documents[] = [\n                    'title' => $doc->title ?? '',\n                    'meta' => $meta,\n                    'view_url' => $viewUrl,\n                    'file_url' => $fileUrl,\n                ];\n            }\n            $item['documents'] = $documents;\n        }\n\n        if ($type === 'steps' && !empty($tab->subitems_real)) {\n            $steps = [];\n            foreach ($tab->subitems_real as $step) {\n                $steps[] = [\n                    'title' => $step->title ?? '',\n                    'text' => $step->description ?? '',\n                ];\n            }\n            $item['steps'] = $steps;\n        }\n\n        $items[] = $item;\n    }\n}\n\nreturn [\n    'document_icon_sprite' => $document_icon_sprite,\n    'cta_icon' => $cta_icon,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'cta_btn_label' => $cta_btn_label,\n    'cta_url' => $cta_url,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "patients-variant-5": "\n\n$document_icon_sprite = 'icon-patients-document';\n$cta_icon = '';\nif (!empty($block->icon) && !empty($block->icon->file_obj)) {\n    $cta_icon = trim((string) $block->icon->file_obj->getImage());\n}\n$cta_title = $block->title2 ?? '';\n$cta_text = $block->description2 ?? '';\n$cta_btn_label = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n$more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n$desktop_limit = (int) ($block->number1 ?? 9);\nif ($desktop_limit <= 0) {\n    $desktop_limit = 9;\n}\n$section_bg = $block->view2 ?? 'page';\n\n$categories = [];\n$category_map = [];\nif (!empty($block->items_2_real)) {\n    foreach ($block->items_2_real as $cat) {\n        $key = 'cat-' . $cat->id;\n        $category_map[$cat->id] = $key;\n        $categories[] = [\n            'id' => $key,\n            'title' => $cat->title ?? '',\n            'count' => 0,\n        ];\n    }\n}\n\narray_unshift($categories, [\n    'id' => 'all',\n    'title' => 'Все документы',\n    'count' => 0,\n]);\n\n$documents = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $docCategories = ['all'];\n        if (!empty($item->page_block_item_own_id) && isset($category_map[$item->page_block_item_own_id])) {\n            $docCategories[] = $category_map[$item->page_block_item_own_id];\n        }\n\n        $meta = '';\n        if (!empty($item->file)) {\n            $file = \\Yii::getAlias('@app\/web') . $item->file;\n            $ext = strtoupper(pathinfo($file, PATHINFO_EXTENSION));\n            $size = file_exists($file) ? number_format(filesize($file) \/ 1024, 0) : '0';\n            $meta = $ext . ' \/ ' . $size . ' Кб';\n        }\n\n        $fileUrl = trim((string) ($item->file ?? ''));\n        $viewUrl = trim((string) ($item->link ?? ''));\n        if ($viewUrl === '' && $fileUrl !== '') {\n            $viewUrl = $fileUrl;\n        }\n        if ($viewUrl === '') {\n            $viewUrl = '#';\n        }\n\n        $documents[] = [\n            'title' => $item->title ?? '',\n            'meta' => $meta,\n            'view_url' => $viewUrl,\n            'file_url' => $fileUrl,\n            'categories' => $docCategories,\n        ];\n    }\n}\n\nforeach ($categories as &$category) {\n    if ($category['id'] === 'all') {\n        $category['count'] = count($documents);\n        continue;\n    }\n    $count = 0;\n    foreach ($documents as $doc) {\n        if (in_array($category['id'], $doc['categories'] ?? [], true)) {\n            $count++;\n        }\n    }\n    $category['count'] = $count;\n}\nunset($category);\n\nreturn [\n    'document_icon_sprite' => $document_icon_sprite,\n    'cta_icon' => $cta_icon,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'cta_btn_label' => $cta_btn_label,\n    'form_exports' => $form_exports,\n    'more_label' => $more_label,\n    'desktop_limit' => $desktop_limit,\n    'categories' => $categories,\n    'documents' => $documents,\n    'section_bg' => $section_bg,\n];\n",
        "hero-variant-8": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$title = $block->title ?? '';\n$subtitle = $block->description ?? '';\n$cta = $block->link_title ?? '';\n$cta_url = $block->link ?? '\/about\/';\n$video_label = $block->eyebrow ?? '';\n$video_media = $block->video ?? '\/assets\/src\/img\/hero\/hero-video.mp4';\n$bg_image = (!empty($block->image) && !empty($block->image_obj))\n    ? $block->image_obj->getImage()\n    : '\/assets\/src\/img\/hero\/hero8-back.webp';\n$bg_alt = $block->image_alt ?? '';\n\n$benefits = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $benefits[] = [\n            'text' => $item->description ?? $item->title ?? '',\n            'icon' => !empty($item->icon) && !empty($item->icon->file_obj)\n                ? $item->icon->file_obj->getImage()\n                : '',\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'title' => $title,\n    'subtitle' => $subtitle,\n    'cta' => $cta,\n    'cta_url' => $cta_url,\n    'video_label' => $video_label,\n    'video_media' => $video_media,\n    'bg_image' => $bg_image,\n    'bg_alt' => $bg_alt,\n    'benefits' => $benefits,\n];\n",
        "benefits-variant-3": "\n\n$section_bg = $block->view2 ?? 'page';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card_icon_src = '';\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $card_icon_src = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'icon_src' => $card_icon_src,\n        ];\n    }\n}\n\nreturn [\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "expert-advice-variant-2": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'expert-advice-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$show_doctor_info = !empty($block->flag1);\n$photo_side = $block->view ?? 'left';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light';\n\n$paragraphs = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($block->description ?? '')))));\n\n$team_photo = '';\n$doctor_name = '';\n$doctor_meta = '';\n\nif (!empty($block->member_id) && !empty($block->member)) {\n    $member = $block->member;\n    if (!empty($member->image) && !empty($member->image_obj)) {\n        $team_photo = trim((string) $member->image_obj->getImage());\n    }\n    $doctor_name = $member->title ?? '';\n    $doctor_meta = $member->position ?? '';\n}\n\n$stats = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $stats[] = [\n            'value' => $item->title ?? '',\n            'label' => $item->description ?? '',\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'paragraphs' => $paragraphs,\n    'stats' => $stats,\n    'team_photo' => $team_photo,\n    'doctor_name' => $doctor_name,\n    'doctor_meta' => $doctor_meta,\n    'show_doctor_info' => $show_doctor_info,\n    'photo_side' => $photo_side,\n    'section_bg' => $section_bg,\n];\n",
        "treatment-technologies-variant-2": "\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$slides = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $benefits = [];\n        if (!empty($item->description)) {\n            $benefits = explode(\"\\n\", $item->description);\n        }\n\n        $slides[] = [\n            'brand' => $item->title2 ?? '',\n            'title' => $item->title ?? '',\n            'image' => $item->image_obj ? $item->image_obj->getImage() : '',\n            'alt' => $item->image_alt ?? '',\n            'benefits' => $benefits,\n        ];\n    }\n}\n\n$initial_index = 0;\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'slides' => $slides,\n    'initial_index' => $initial_index,\n];",
        "treatment-technologies-variant-3": "\n\/* ==== DATA ==== *\/\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $items[] = [\n            'icon' => $item->icon_obj ? $item->icon_obj->getImage() : '',\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'items' => $items,\n];",
        "reviews-variant-4": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$highlights = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $highlight = [\n            'icon' => '',\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n        ];\n\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $highlight['icon'] = $item->icon->file_obj->getImage();\n        }\n\n        $highlights[] = $highlight;\n    }\n}\n\n$clinic_name = $block->title2 ?? '';\n$clinic_location = $block->description2 ?? '';\n\n$widget_rating = 5.0;\n$widget_reviews_count_all = 0;\n$widget_reviews_count_positive = 0;\n$widget_reviews_count_negative = 0;\n$widget_logo_src = '';\n$widget_logo_w = 196;\n$widget_logo_h = 42;\n$widget_footer_logo_w = 155;\n$widget_footer_logo_h = 27;\n$widget_read_url = $block->link ?? '#';\n\n$widget_title = 'Отзывы пациентов';\n$widget_source_label = 'Все отзывы на';\n$widget_read_label = 'Читать';\n$widget_filter_all_label = 'Все отзывы';\n$widget_filter_positive_label = 'Положительные';\n$widget_filter_negative_label = 'Отрицательные';\n\n$widget_source = null;\nif (!empty($block->items_2_real[0])) {\n    $widget_source = $block->items_2_real[0];\n    if (!empty($widget_source->image) && !empty($widget_source->image_obj)) {\n        $widget_logo_src = $widget_source->image_obj->getImage();\n    }\n    $widget_logo_w = (int) ($widget_source->param2 ?? 196);\n    $widget_logo_h = (int) ($widget_source->param3 ?? 42);\n    if (!empty($widget_source->param1)) {\n        $widget_rating = (float) $widget_source->param1;\n    }\n    if (!empty($widget_source->link)) {\n        $widget_read_url = $widget_source->link;\n    }\n} else {\n    $default_source = \\app\\models\\ReviewSource::find()->published()->ordered()->one();\n    if ($default_source) {\n        $widget_source = $default_source;\n        if (!empty($default_source->image) && !empty($default_source->image_obj)) {\n            $widget_logo_src = $default_source->image_obj->getImage();\n        }\n        $widget_rating = (float) ($default_source->rating ?? 5.0);\n        if (!empty($default_source->url)) {\n            $widget_read_url = $default_source->url;\n        }\n    }\n}\n\n$widget_reviews_positive = [];\n$widget_reviews_negative = [];\n$review_models = \\app\\models\\Review::find()\n    ->published()\n    ->orderBy(['created_at' => SORT_DESC])\n    ->limit(20)\n    ->all();\n\nforeach ($review_models as $review) {\n    $rating = (float) ($review->rating ?? 5);\n    $card = [\n        'name' => $review->title ?? '',\n        'rating' => $rating,\n        'text' => $review->text ?? '',\n        'date' => '',\n    ];\n\n    if (!empty($review->created_at_obj)) {\n        $card['date'] = $review->created_at_obj->format('j [' . date('n', $review->created_at_obj->timeStamp()) . '] Y');\n    } elseif (!empty($review->created_at)) {\n        $card['date'] = date('d.m.Y', strtotime($review->created_at));\n    }\n\n    if ($rating >= 4) {\n        $widget_reviews_positive[] = $card;\n        $widget_reviews_count_positive++;\n    } else {\n        $widget_reviews_negative[] = $card;\n        $widget_reviews_count_negative++;\n    }\n}\n\n$widget_reviews_count_all = count($review_models);\n$widget_reviews_label = $widget_reviews_count_all . ' отзывов';\n$widget_filters = [\n    ['id' => 'all', 'label' => $widget_filter_all_label . ' (' . $widget_reviews_count_all . ')'],\n    ['id' => 'positive', 'label' => $widget_filter_positive_label . ' (' . $widget_reviews_count_positive . ')'],\n    ['id' => 'negative', 'label' => $widget_filter_negative_label . ' (' . $widget_reviews_count_negative . ')'],\n];\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'highlights' => $highlights,\n    'clinic_name' => $clinic_name,\n    'clinic_location' => $clinic_location,\n    'widget_rating' => $widget_rating,\n    'widget_reviews_count_all' => $widget_reviews_count_all,\n    'widget_reviews_count_positive' => $widget_reviews_count_positive,\n    'widget_reviews_count_negative' => $widget_reviews_count_negative,\n    'widget_reviews_label' => $widget_reviews_label,\n    'widget_filter_all_label' => $widget_filter_all_label,\n    'widget_filter_positive_label' => $widget_filter_positive_label,\n    'widget_filter_negative_label' => $widget_filter_negative_label,\n    'widget_filters' => $widget_filters,\n    'widget_logo_src' => $widget_logo_src,\n    'widget_logo_w' => $widget_logo_w,\n    'widget_logo_h' => $widget_logo_h,\n    'widget_footer_logo_w' => $widget_footer_logo_w,\n    'widget_footer_logo_h' => $widget_footer_logo_h,\n    'widget_title' => $widget_title,\n    'widget_source_label' => $widget_source_label,\n    'widget_read_label' => $widget_read_label,\n    'widget_read_url' => $widget_read_url,\n    'widget_reviews_positive' => $widget_reviews_positive,\n    'widget_reviews_negative' => $widget_reviews_negative,\n    'section_bg' => $section_bg,\n];\n",
        "certificates-variant-2": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page';\n$download_label = \\app\\models\\SystemSettings::getParam('common', 'download_label', 'Скачать');\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $image = '';\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $image = trim((string) $item->image_obj->getImage());\n        }\n\n        $items[] = [\n            'type' => $item->title ?? '',\n            'image' => $image,\n            'file' => trim((string) ($item->file ?? '')),\n        ];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'download_label' => $download_label,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "faq-variant-2": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title_accent = (string) ($block->title ?? '');\n$title_plain = (string) ($block->title2 ?? '');\n$title = '';\nif ($title_accent !== '') {\n    $title .= '<span class=\"accent\">' . $title_accent . '<\/span>';\n}\nif ($title_plain !== '') {\n    $title .= ($title !== '' ? ' ' : '') . $title_plain;\n}\n$lead = $block->description ?? '';\n$initial_visible = (int) ($block->number1 ?? 5);\nif ($initial_visible < 1) {\n    $initial_visible = 5;\n}\n$reveal_step = (int) ($block->number2 ?? 5);\nif ($reveal_step < 1) {\n    $reveal_step = 5;\n}\n$more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n$section_bg = $block->view2 ?? 'page';\n\n$tabs = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $tab) {\n        $tabData = [\n            'key' => 'tab-' . ($tab->id ?? (count($tabs) + 1)),\n            'label' => $tab->title ?? '',\n            'items' => [],\n        ];\n\n        if (!empty($tab->subitems_real)) {\n            foreach ($tab->subitems_real as $item) {\n                $itemData = [\n                    'question' => $item->title ?? '',\n                    'answer' => $item->description ?? '',\n                ];\n\n                if (!empty($item->subitems_real)) {\n                    $itemData['materials'] = [];\n                    foreach ($item->subitems_real as $material) {\n                        $itemData['materials'][] = [\n                            'title' => $material->title ?? '',\n                            'url' => $material->link ?? '#',\n                        ];\n                    }\n                }\n\n                if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n                    $itemData['icon'] = trim((string) $item->icon->file_obj->getImage());\n                }\n\n                $tabData['items'][] = $itemData;\n            }\n        }\n\n        $tabs[] = $tabData;\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'initial_visible' => $initial_visible,\n    'reveal_step' => $reveal_step,\n    'more_label' => $more_label,\n    'tabs' => $tabs,\n    'section_bg' => $section_bg,\n];\n",
        "vacancies-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'vacancies-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$team_image = '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $team_image = trim((string) $block->image_obj->getImage());\n}\n$team_alt = $block->image_alt ?? '';\n\n$resume_title = $block->title2 ?? '';\n$resume_text = $block->description2 ?? '';\n$resume_cta = $block->link_title ?? '';\n$form_exports = [\n    ['id' => 'resume', 'type' => 'form-appointment', 'config' => []],\n];\n\n$vacancies = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $details = [];\n        if (!empty($item->subitems_real)) {\n            foreach ($item->subitems_real as $sub) {\n                $kind = (string) ($sub->view ?? 'p');\n                if ($kind === 'text') {\n                    $text = trim((string) ($sub->description ?? ''));\n                    if ($text !== '') {\n                        $details[] = $text;\n                    }\n                    continue;\n                }\n\n                if ($kind === 'columns') {\n                    $columns = [];\n                    if (!empty($sub->subitems_real)) {\n                        foreach ($sub->subitems_real as $column) {\n                            $columnTitle = trim((string) ($column->title ?? ''));\n                            $columnItems = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($column->description ?? '')))));\n                            if ($columnTitle === '' && $columnItems === []) {\n                                continue;\n                            }\n                            $columns[] = [\n                                'title' => $columnTitle,\n                                'items' => $columnItems,\n                            ];\n                        }\n                    }\n                    if ($columns !== []) {\n                        $details[] = [\n                            'kind' => 'columns',\n                            'columns' => $columns,\n                        ];\n                    }\n                    continue;\n                }\n\n                $blockData = ['kind' => $kind];\n                $blockTitle = trim((string) ($sub->title ?? ''));\n                if ($blockTitle !== '') {\n                    $blockData['title'] = $blockTitle;\n                }\n\n                if ($kind === 'ul' || $kind === 'ol') {\n                    $listItems = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($sub->description ?? '')))));\n                    $blockData['items'] = $listItems;\n                } else {\n                    $blockData['text'] = (string) ($sub->description ?? '');\n                }\n\n                $details[] = $blockData;\n            }\n        }\n\n        $vacancies[] = [\n            'title' => $item->title ?? '',\n            'salary' => $item->title2 ?? '',\n            'employment' => $item->description ?? '',\n            'details' => $details,\n            'city' => $item->param1 ?? '',\n            'address' => $item->param2 ?? '',\n        ];\n    }\n}\n\n$more_label = $block->link_title2 ?? 'Смотреть больше вакансий';\n$more_url = $block->link ?? '';\n$apply_cta = $block->param1 ?? 'Откликнуться';\n$section_bg = $block->view2 ?? 'page';\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'team_image' => $team_image,\n    'team_alt' => $team_alt,\n    'resume_title' => $resume_title,\n    'resume_text' => $resume_text,\n    'resume_cta' => $resume_cta,\n    'form_exports' => $form_exports,\n    'vacancies' => $vacancies,\n    'more_label' => $more_label,\n    'more_url' => $more_url,\n    'apply_cta' => $apply_cta,\n    'section_bg' => $section_bg,\n];\n",
        "certificates-variant-4": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'certificates-' . $block->id;\n$title = $block->title ?? '';\n$notice_title = $block->title2 ?? '';\n$notice_text = trim((string) ($block->description ?? ''));\n$notice_icon_sprite = 'icon-shield';\n$notice_icon_src = '';\n$section_bg = $block->view2 ?? 'page';\n\n$view_label = \\app\\models\\SystemSettings::getParam('common', 'view_label', 'Посмотреть');\n$download_label = \\app\\models\\SystemSettings::getParam('common', 'download_label', 'Скачать');\n$sample_file = '\/assets\/src\/img\/certificates\/sample.pdf';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $image = '';\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $image = trim((string) $item->image_obj->getImage());\n        }\n\n        $items[] = [\n            'title' => $item->title ?? '',\n            'number' => $item->title2 ?? '',\n            'issued_prefix' => $item->param2 ?? 'Выдан',\n            'issued' => $item->param1 ?? '',\n            'issuer' => $item->description ?? '',\n            'image' => $image,\n            'file' => trim((string) ($item->file ?? '')),\n        ];\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'title' => $title,\n    'view_label' => $view_label,\n    'download_label' => $download_label,\n    'notice_title' => $notice_title,\n    'notice_text' => $notice_text,\n    'notice_icon_sprite' => $notice_icon_sprite,\n    'notice_icon_src' => $notice_icon_src,\n    'sample_file' => $sample_file,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "certificates-variant-3": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'certificates-' . $block->id;\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$initial_limit = (int) ($block->number1 ?? 4);\nif ($initial_limit <= 0) {\n    $initial_limit = 4;\n}\n\n$cta_title = $block->title2 ?? '';\n$cta_text = $block->description2 ?? '';\n$cta_btn_label = $block->link_title ?? '';\n$cta_btn_url = $block->link ?? '';\n$cta_icon_sprite = 'icon-info';\n$cta_icon_src = '';\n\n$search_placeholder = \\app\\models\\SystemSettings::getParam('common', 'search_document_label', 'Поиск по документам');\n$view_label = \\app\\models\\SystemSettings::getParam('common', 'view_label', 'Посмотреть');\n$download_label = \\app\\models\\SystemSettings::getParam('common', 'download_label', 'Скачать');\n$more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n$search_icon_src = '\/assets\/src\/img\/prices\/prices-v3-search.svg';\n$sample_file = '\/assets\/src\/img\/certificates\/sample.pdf';\n\n$category_defs = [];\n$category_map = [];\nif (!empty($block->items_2_real)) {\n    foreach ($block->items_2_real as $cat) {\n        $key = 'cat-' . $cat->id;\n        $category_map[$cat->id] = $key;\n        $category_defs[] = [\n            'key' => $key,\n            'label' => $cat->title ?? '',\n        ];\n    }\n}\n\narray_unshift($category_defs, [\n    'key' => 'all',\n    'label' => 'Все документы',\n]);\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $categoryKey = 'all';\n        if (!empty($item->page_block_item_own_id) && isset($category_map[$item->page_block_item_own_id])) {\n            $categoryKey = $category_map[$item->page_block_item_own_id];\n        }\n\n        $image = '';\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $image = trim((string) $item->image_obj->getImage());\n        }\n\n        $items[] = [\n            'category' => $categoryKey,\n            'title' => $item->title ?? '',\n            'number' => $item->title2 ?? '',\n            'issued' => $item->param1 ?? '',\n            'issuer' => $item->description ?? '',\n            'image' => $image,\n            'file' => trim((string) ($item->file ?? '')),\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'search_placeholder' => $search_placeholder,\n    'view_label' => $view_label,\n    'download_label' => $download_label,\n    'more_label' => $more_label,\n    'initial_limit' => $initial_limit,\n    'cta_title' => $cta_title,\n    'cta_text' => $cta_text,\n    'cta_btn_label' => $cta_btn_label,\n    'cta_btn_url' => $cta_btn_url,\n    'cta_icon_sprite' => $cta_icon_sprite,\n    'cta_icon_src' => $cta_icon_src,\n    'search_icon_src' => $search_icon_src,\n    'sample_file' => $sample_file,\n    'category_defs' => $category_defs,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "vacancies-variant-3": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_id = 'vacancies-' . $block->id;\n$list_title = $block->title ?? '';\n$list_title_id = ltrim(trim((string) ($block->param1 ?? '')), '#');\n$apply_cta = $block->link_title ?? 'Откликнуться';\n$form_exports = [\n    ['id' => 'resume', 'type' => 'form-appointment', 'config' => []],\n];\n\n$vacancies = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $details = [];\n        if (!empty($item->subitems_real)) {\n            foreach ($item->subitems_real as $sub) {\n                $kind = (string) ($sub->view ?? 'p');\n                if ($kind === 'text') {\n                    $text = trim((string) ($sub->description ?? ''));\n                    if ($text !== '') {\n                        $details[] = $text;\n                    }\n                    continue;\n                }\n\n                if ($kind === 'columns') {\n                    $columns = [];\n                    if (!empty($sub->subitems_real)) {\n                        foreach ($sub->subitems_real as $column) {\n                            $columnTitle = trim((string) ($column->title ?? ''));\n                            $columnItems = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($column->description ?? '')))));\n                            if ($columnTitle === '' && $columnItems === []) {\n                                continue;\n                            }\n                            $columns[] = [\n                                'title' => $columnTitle,\n                                'items' => $columnItems,\n                            ];\n                        }\n                    }\n                    if ($columns !== []) {\n                        $details[] = [\n                            'kind' => 'columns',\n                            'columns' => $columns,\n                        ];\n                    }\n                    continue;\n                }\n\n                $blockData = ['kind' => $kind];\n                $blockTitle = trim((string) ($sub->title ?? ''));\n                if ($blockTitle !== '') {\n                    $blockData['title'] = $blockTitle;\n                }\n\n                if ($kind === 'ul' || $kind === 'ol') {\n                    $listItems = array_values(array_filter(array_map('trim', explode(\"\\n\", (string) ($sub->description ?? '')))));\n                    $blockData['items'] = $listItems;\n                } else {\n                    $blockData['text'] = (string) ($sub->description ?? '');\n                }\n\n                $details[] = $blockData;\n            }\n        }\n\n        $vacancies[] = [\n            'title' => $item->title ?? '',\n            'excerpt' => $item->description2 ?? '',\n            'salary' => $item->title2 ?? '',\n            'employment' => $item->description ?? '',\n            'details' => $details,\n            'city' => $item->param1 ?? '',\n            'address' => $item->param2 ?? '',\n        ];\n    }\n}\n\n$section_bg = $block->view2 ?? 'page';\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'list_title' => $list_title,\n    'list_title_id' => $list_title_id,\n    'apply_cta' => $apply_cta,\n    'form_exports' => $form_exports,\n    'vacancies' => $vacancies,\n    'section_bg' => $section_bg,\n];\n",
        "cta-variant-5": "\n\/* ==== DATA ==== *\/\n$heading_level = 'h2'; \/\/ 'h1' — только если блок главный на странице\n$eyebrow       = 'отправьте резюме';\n\n$title         = 'Не нашли <span class=\"accent\">подходящую вакансию?<\/span>';\n$lead          = 'Мы готовы помочь вам разобраться, с чего начать, какие шаги предпринять и организовать удобное время для консультации.';\n\n$bg_image = '\/assets\/src\/img\/cta\/cta-v5-bg.png';\n$clip_icon_src = '\/assets\/src\/img\/cta\/cta-v5-clip.svg';\n\n$form_name_label    = 'Ваше имя';\n$form_phone_label   = '+7 (___)-___-__-__';\n$form_email_label   = 'Ваш email';\n$form_file_label    = 'Прикрепите ваше резюме';\n$form_submit_label  = 'Отправить резюме';\n$form_file_accept   = '.pdf,.doc,.docx,.rtf';\n\n$consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n\n$section_bg = 'bg-gradient-page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'bg_image' => $bg_image,\n    'clip_icon_src' => $clip_icon_src,\n    'form_name_label' => $form_name_label,\n    'form_phone_label' => $form_phone_label,\n    'form_email_label' => $form_email_label,\n    'form_file_label' => $form_file_label,\n    'form_submit_label' => $form_submit_label,\n    'form_file_accept' => $form_file_accept,\n    'consent_html' => $consent_html,\n    'section_bg' => $section_bg\n];",
        "cases-variant-4": "\n\n$deps = [];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$section_bg = $block->view2 ?? 'page';\n\n$filters = [\n    [\n        'key' => 'all',\n        'label' => $block->param1 ?? 'Все',\n        'icon' => '',\n    ],\n];\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $filters[0]['icon'] = trim((string) $block->image_obj->getImage());\n}\n\n$cases = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        if (empty($item->subitems_real)) {\n            continue;\n        }\n\n        $filter_icon = '';\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $filter_icon = trim((string) $item->image_obj->getImage());\n        }\n\n        $category_key = 'category-' . $block->id . '-' . $item->id;\n        $filters[] = [\n            'key' => $category_key,\n            'label' => $item->title ?? '',\n            'icon' => $filter_icon,\n        ];\n\n        foreach ($item->subitems_real as $subitem) {\n            $before_image = '';\n            $after_image = '';\n            if (!empty($subitem->image) && !empty($subitem->image_obj)) {\n                $before_image = trim((string) $subitem->image_obj->getImage());\n            }\n            if (!empty($subitem->image2) && !empty($subitem->image2_obj)) {\n                $after_image = trim((string) $subitem->image2_obj->getImage());\n            }\n\n            $cases[] = [\n                'category' => $category_key,\n                'title' => $subitem->title ?? '',\n                'text' => $subitem->description2 ?? '',\n                'before_image' => $before_image,\n                'after_image' => $after_image,\n            ];\n        }\n    }\n}\n\n$handle_src = '\/assets\/src\/img\/cases\/handle.svg';\n$more_label = $block->param2 ?? 'Показать еще';\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'filters' => $filters,\n    'cases' => $cases,\n    'handle_src' => $handle_src,\n    'more_label' => $more_label,\n    'section_bg' => $section_bg,\n];\n",
        "cta-variant-2": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$layout = $block->view ?? 'contained';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$bg_image = '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $bg_image = trim((string) $block->image_obj->getImage());\n}\n\n$bg_image_mobile = '';\nif (!empty($block->image2) && !empty($block->image2_obj)) {\n    $bg_image_mobile = trim((string) $block->image2_obj->getImage());\n}\n\n$bg_alt = $block->image_alt ?? '';\n\n$features = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $features[] = [\n            'icon' => !empty($item->icon) && !empty($item->icon->file_obj)\n                ? $item->icon->file_obj->getImage()\n                : '',\n            'text' => $item->title ?? $item->description ?? '',\n        ];\n    }\n}\n\n$concerns_label = \\app\\models\\SystemSettings::getParamArray('form', 'concerns', [\n    'Кариес \/ боль',\n    'Имплантация',\n    'Протезирование',\n    'Прикус \/ ортодонтия',\n]);\n$concerns = [];\nforeach ($concerns_label as $concern_label) {\n    $concerns[$concern_label] = $concern_label;\n}\n\n$form_concern_label = 'Какая услуга вас интересует?';\n$form_name_label = 'Ваше имя';\n$form_phone_label = '+7 (___)-___-__-__';\n$form_submit_label = $block->link_title ?? 'Получить консультацию';\n$consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n\n$section_bg = $block->view2 ?? 'page';\n\n$form = new \\app\\models\\forms\\RequestAppointmentForm();\n$form_data = \\app\\blocks\\Data::processForm($form, 'block-' . $block->id);\n\n$form_exports[] = ['id' => 'block-'.$block->id, 'type' => 'form-appointment', 'view' => 'inline', 'config' => []];\n\nreturn [\n    'heading_level' => $heading_level,\n    'layout' => $layout,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'bg_image' => $bg_image,\n    'bg_image_mobile' => $bg_image_mobile,\n    'bg_alt' => $bg_alt,\n    'features' => $features,\n    'concerns' => $concerns,\n    'form_concern_label' => $form_concern_label,\n    'form_name_label' => $form_name_label,\n    'form_phone_label' => $form_phone_label,\n    'form_submit_label' => $form_submit_label,\n    'form_data' => $form_data,\n    'consent_html' => $consent_html,\n    'section_bg' => $section_bg,\n    'form_exports' => $form_exports,\n];\n",
        "news-article-variant-1": "\n\/* ==== DATA ==== *\/\n$deps = ['swiper'];\n\n$heading_level = 'h2';\n$toc_title     = 'содержание';\n$form_exports = [\n    ['id' => 'doctor-cta', 'type' => 'form-appointment', 'config' => []],\n];\n\n$toc = [\n    ['id' => 'section-1', 'label' => 'Что такое имплантация зубов и когда она необходима?'],\n    ['id' => 'section-2', 'label' => 'Виды зубных имплантов: в чем различия?'],\n    ['id' => 'section-3', 'label' => 'Как проходит процедура имплантации?'],\n    ['id' => 'section-4', 'label' => 'Больно ли устанавливать имплант?'],\n    ['id' => 'section-5', 'label' => 'Сколько длится лечение и когда будет результат?'],\n    ['id' => 'section-6', 'label' => 'Какие есть противопоказания?'],\n    ['id' => 'section-7', 'label' => 'Сколько стоит имплантация зубов?'],\n    ['id' => 'section-8', 'label' => 'Как ухаживать за имплантами после установки?'],\n    ['id' => 'section-9', 'label' => 'Ответы на частые вопросы'],\n];\n\n$doctor = [\n    'photo'    => '\/assets\/src\/img\/news-article\/doctor.webp',\n    'name'     => 'Иванов А.А.',\n    'role'     => 'Хирург - ортодонт',\n    'experience' => 'Стаж: 15 лет',\n    'schedule_label' => 'Принимает:',\n    'schedule' => 'Пн-Пт 9:00 - 19:00',\n    'cta_label' => 'Записаться на прием к врачу',\n];\n\n$lorem = 'Под эмалью находится дентин — пористый слой, пронизанный тысячами микроскопических канальцев, которые ведут к нервному центру зуба (пульпе). Когда дентин оголяется, эти канальцы становятся открытыми «воротами» для внешних раздражителей (холодного, горячего, кислого), которые напрямую воздействуют на нерв, вызывая резкую боль.';\n\n$blocks = [\n    [\n        'type'  => 'text',\n        'id'    => 'section-1',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'paragraphs' => [\n            $lorem,\n            'Острая, стреляющая боль от глотка холодного напитка или ложки горячего супа — знакомое чувство для многих. Повышенная чувствительность зубов, или гиперестезия, — распространенная проблема, которая может всерьез испортить удовольствие от еды и питья. Но почему это происходит? Зубная эмаль — самая твердая ткань в организме, и сама по себе она не может болеть. Боль возникает тогда, когда внутренний слой зуба (дентин) теряет свою защиту.',\n        ],\n    ],\n    [\n        'type'  => 'text-cols',\n        'id'    => 'section-2',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'columns' => [\n            $lorem,\n            'Острая, стреляющая боль от глотка холодного напитка или ложки горячего супа — знакомое чувство для многих. Повышенная чувствительность зубов, или гиперестезия, — распространенная проблема, которая может всерьез испортить удовольствие от еды и питья.',\n        ],\n    ],\n    [\n        'type'  => 'media-text',\n        'id'    => 'section-3',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'image' => '\/assets\/src\/img\/news-article\/implant.webp',\n        'caption' => 'Имплант в разрезе, коронка',\n        'text' => 'Острая, стреляющая боль от глотка холодного напитка или ложки горячего супа — знакомое чувство для многих. Повышенная чувствительность зубов, или гиперестезия, — распространенная проблема, которая может всерьез испортить удовольствие от еды и питья. Но почему это происходит? Зубная эмаль — самая твердая ткань в организме, и сама по себе она не может болеть. Боль возникает тогда, когда внутренний слой зуба (дентин) теряет свою защиту.',\n    ],\n    [\n        'type'  => 'lists',\n        'id'    => 'section-6',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'intro' => $lorem,\n        'outro' => $lorem,\n        'cards' => [\n            [\n                'tone'  => 'danger',\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-abs.svg',\n                'title' => 'Абсолютные противопоказания:',\n                'items' => [\n                    'Онкологические заболевания',\n                    'Нарушения свёртываемости крови',\n                    'Туберкулёз в активной форме',\n                    'Тяжёлый сахарный диабет',\n                ],\n            ],\n            [\n                'tone'  => 'ok',\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-rel.svg',\n                'title' => 'Относительные (требуют подготовки):',\n                'items' => [\n                    'Сахарный диабет в компенсации',\n                    'Беременность',\n                    'Курение (усложняет приживаемость)',\n                    'Недостаточный объём кости',\n                ],\n            ],\n        ],\n    ],\n    [\n        'type'  => 'table',\n        'id'    => 'section-5',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'intro' => $lorem,\n        'headers' => ['Тип имплантации', 'Срок', 'Для кого'],\n        'rows' => [\n            ['Классический двухэтапный', '3–6 месяцев приживание', 'Большинство пациентов'],\n            ['Одноэтапный (экспресс)', '1 день', 'Хороший объём кости'],\n            ['Базальный', '3–5 дней', 'Атрофия кости, сложные случаи'],\n        ],\n    ],\n    [\n        'type'  => 'quote',\n        'id'    => 'section-4',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'intro' => $lorem,\n        'photo' => '\/assets\/src\/img\/news-article\/doctor.webp',\n        'text'  => 'Не стоит откладывать визит к врачу, даже если дискомфорт кажется незначительным. На начальных этапах болезни зубов поддаются лечению гораздо быстрее и эффективнее, а главное — это позволяет сохранить естественный зуб.',\n        'author' => 'Иванов А.А.',\n        'role'   => 'Хирург - ортодонт',\n    ],\n    [\n        'type'  => 'steps',\n        'id'    => 'section-3b',\n        'title' => 'Что такое дентин и как возникает боль?',\n        'intro' => 'Имплантация — это поэтапный процесс, в котором каждый шаг важен для достижения надёжного и долговечного результата. Рассказываем, как всё проходит от первой консультации до установки коронки.',\n        'items' => [\n            [\n                'label' => 'Шаг 1',\n                'title' => 'Диагностика и план лечения',\n                'text'  => 'Консультация, КТ \/ 3D-диагностика, оценка костной ткани и составление индивидуального плана.',\n            ],\n            [\n                'label' => 'Шаг 2',\n                'title' => 'Анестезия',\n                'text'  => 'Местная анестезия: процедура проходит комфортно, без боли.',\n            ],\n            [\n                'label' => 'Шаг 3',\n                'title' => 'Установка имплантата',\n                'text'  => 'Хирургическая установка титанового корня (обычно 20–60 минут) и наложение швов.',\n            ],\n            [\n                'label' => 'Шаг 4',\n                'title' => 'Период приживления',\n                'text'  => 'Остеоинтеграция 3–6 месяцев. При необходимости — временная коронка.',\n            ],\n            [\n                'label' => 'Шаг 5',\n                'title' => 'Установка коронки',\n                'text'  => 'Фиксация абатмента и постоянной коронки — финальный этап лечения.',\n            ],\n        ],\n    ],\n    [\n        'type'  => 'features',\n        'id'    => 'section-7',\n        'title' => 'Что влияет на стоимость имплантации?',\n        'intro' => \"Стоимость имплантации зависит от нескольких факторов.\\nОни определяют сложность лечения, используемые материалы и итоговый результат.\",\n        'items' => [\n            [\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-feature-brand.svg',\n                'title' => 'Бренд импланта',\n                'text'  => 'Импланты премиальных брендов имеют высокую приживаемость и длительный срок службы, что влияет на их стоимость.',\n            ],\n            [\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-feature-material.svg',\n                'title' => 'Материал коронки',\n                'text'  => 'Коронки из циркония или керамики прочнее и эстетичнее, чем металлокерамика. Материал влияет на долговечность и внешний вид.',\n            ],\n            [\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-feature-doctor.svg',\n                'title' => 'Опыт врача',\n                'text'  => 'Опыт и квалификация имплантолога влияют на точность установки, безопасность и прогноз результата.',\n            ],\n            [\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-feature-bone.svg',\n                'title' => 'Состояние кости',\n                'text'  => 'При недостаточном объёме кости может потребоваться костная пластика, которая увеличивает стоимость лечения.',\n            ],\n        ],\n    ],\n    [\n        'type'  => 'warning',\n        'title' => 'Важно знать!',\n        'text'  => 'Не принимайте аспирин за 7 дней до операции — он разжижает кровь и увеличивает риск кровотечения. Сообщите врачу о всех препаратах, которые принимаете.',\n        'icon'  => '\/assets\/src\/img\/news-article\/icon-warning.svg',\n    ],\n    [\n        'type'  => 'facts',\n        'id'    => 'section-8',\n        'title' => 'Факты про имплантацию',\n        'intro' => \"Стоимость имплантации зависит от нескольких факторов.\\nОни определяют сложность лечения, используемые материалы и итоговый результат.\",\n        'items' => [\n            ['value' => '98%', 'text' => 'приживаемость имплантов при отсутствии противопоказаний'],\n            ['value' => '25+ лет', 'text' => 'средний срок службы качественного импланта'],\n            ['value' => '1 из 100', 'text' => 'пациентов сталкивается с отторжением'],\n        ],\n    ],\n    [\n        'type'  => 'form',\n        'eyebrow' => 'Хотите узнать подходит ли вам имплантация?',\n        'title'   => 'Запишитесь на бесплатную консультацию',\n        'icon'    => '\/assets\/src\/img\/news-article\/icon-form.svg',\n        'name_label'  => 'Ваше имя',\n        'phone_label' => '+7 (___)-___-__-__',\n        'submit_label'=> 'Записаться',\n        'consent_html'=> 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>',\n    ],\n    [\n        'type'  => 'related',\n        'id'    => 'section-9',\n        'title' => 'Интересное по теме',\n        'link_label' => 'Читать статью',\n        'items' => [\n            [\n                'url'   => '#',\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-related.svg',\n                'title' => 'Как подготовиться к имплантации?',\n            ],\n            [\n                'url'   => '#',\n                'icon'  => '\/assets\/src\/img\/news-article\/icon-related.svg',\n                'title' => 'Уход за имплантом после операции',\n            ],\n        ],\n    ],\n    [\n        'type'  => 'video',\n        'title' => 'Как проходит установка импланта?',\n        'lead'  => 'Посмотрите как мы это делаем — 4 минуты',\n        'cta'   => 'Смотреть видео с операции',\n        'image' => '\/assets\/src\/img\/news-article\/video.webp',\n        'src'   => 'https:\/\/www.youtube.com\/watch?v=dQw4w9WgXcQ',\n    ],\n    [\n        'type'  => 'gallery',\n        'title' => 'Фото по теме',\n        'items' => [\n            ['src' => '\/assets\/src\/img\/news-article\/gallery-1.webp', 'alt' => 'Имплант в разрезе'],\n            ['src' => '\/assets\/src\/img\/news-article\/gallery-2.webp', 'alt' => 'Имплант в разрезе'],\n            ['src' => '\/assets\/src\/img\/news-article\/gallery-1.webp', 'alt' => 'Имплант в разрезе'],\n            ['src' => '\/assets\/src\/img\/news-article\/gallery-2.webp', 'alt' => 'Имплант в разрезе'],\n        ],\n    ],\n];\n\n$nav = [\n    'prev' => [\n        'url'   => '#',\n        'label' => 'Предыдущая статья',\n        'title' => 'Как подготовиться к имплантации?',\n        'image' => '\/assets\/src\/img\/news-article\/nav-1.webp',\n    ],\n    'next' => [\n        'url'   => '#',\n        'label' => 'Следующая статья',\n        'title' => 'Уход за имплантом после операции',\n        'image' => '\/assets\/src\/img\/news-article\/nav-2.webp',\n    ],\n];\n$section_bg = 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'toc_title' => $toc_title,\n    'form_exports' => $form_exports,\n    'toc' => $toc,\n    'doctor' => $doctor,\n    'lorem' => $lorem,\n    'blocks' => $blocks,\n    'nav' => $nav,\n    'section_bg' => $section_bg\n];",
        "contacts-variant-1": "\n\n$deps = ['swiper'];\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n\n$branches_title = $block->title ?? 'Наши филиалы';\n$callback_label = $block->link_title ?? 'Заказать звонок';\n$form_exports = [\n    ['id' => 'callback', 'type' => 'form-appointment', 'config' => []],\n];\n\n$address_eyebrow = \\app\\models\\SystemSettings::getParam('common', 'address_eyebrow', 'Адрес');\n$phone_eyebrow = \\app\\models\\SystemSettings::getParam('common', 'phone_eyebrow', 'Телефон');\n$hours_eyebrow = \\app\\models\\SystemSettings::getParam('common', 'hours_eyebrow', 'Режим работы');\n$address_icon = '#icon-contacts-address';\n$phone_icon = '#icon-contacts-call';\n$hours_icon = '#icon-contacts-hours';\n$route_label = \\app\\models\\SystemSettings::getParam('common', 'route_label', 'Построить маршрут');\n$branch_call_label = \\app\\models\\SystemSettings::getParam('common', 'branch_call_label', 'Позвонить');\n$branch_route_label = \\app\\models\\SystemSettings::getParam('common', 'branch_route_label', 'Маршрут');\n$directions_title = \\app\\models\\SystemSettings::getParam('common', 'directions_title', 'Как нас найти');\n$map_api_key = \\app\\models\\SystemSettings::getParam('common', 'map_api_key', 'c0d81455-dfb9-4117-8391-8219706daacf');\n$site_logo_src = \\app\\models\\SystemSettings::getParam('common', 'site_logo_src', '\/assets\/src\/img\/logo.svg');\n\n$map_height = (int) ($block->number1 ?? 635);\n$map_zoom = (int) ($block->number2 ?? 16);\n$map_focus_zoom_offset = (int) ($block->number3 ?? 1);\n\n$branches = [];\n$filials = \\app\\models\\Filial::find()->published()->ordered()->all();\n\nforeach ($filials as $filial) {\n    $address_lines = [];\n    if (!empty($filial->address)) {\n        $address_lines = array_values(array_filter(array_map('trim', explode(\"\\n\", $filial->address))));\n    }\n\n    $hours_rows = [];\n    if (!empty($filial->hours)) {\n        foreach (explode(\"\\n\", $filial->hours) as $line) {\n            $line = trim($line);\n            if ($line === '' || strpos($line, ':') === false) {\n                continue;\n            }\n            [$label, $value] = explode(':', $line, 2);\n            $hours_rows[] = [\n                'label' => trim($label),\n                'value' => trim($value),\n            ];\n        }\n    }\n\n    $coords = [56.0106, 92.8525];\n    if (!empty($filial->map_coords)) {\n        $parts = explode(',', $filial->map_coords);\n        if (count($parts) >= 2) {\n            $coords = [(float) trim($parts[0]), (float) trim($parts[1])];\n        }\n    }\n\n    $map_photo = '';\n    if (!empty($filial->image) && !empty($filial->image_obj)) {\n        $map_photo = $filial->image_obj->getImage();\n    }\n\n    $branches[] = [\n        'badge' => $filial->badge ?? '',\n        'title' => $filial->title ?? '',\n        'address_short' => $filial->address_short ?? '',\n        'status' => [\n            'text' => $filial->status_text ?? '',\n            'tone' => $filial->status_tone ?? 'open',\n        ],\n        'phone_href' => $filial->phone_href ?? '',\n        'route_url' => $filial->route_url ?? '',\n        'address_lines' => $address_lines,\n        'phone_number' => $filial->phone_number ?? '',\n        'phone_note' => $filial->phone_note ?? '',\n        'whatsapp_url' => $filial->whatsapp_url ?? '',\n        'telegram_url' => $filial->telegram_url ?? '',\n        'hours_rows' => $hours_rows,\n        'map' => [\n            'placemark' => $coords,\n            'balloon' => $filial->map_balloon ?? '',\n            'photo' => $map_photo,\n            'photo_alt' => $filial->image_alt ?? '',\n            'entrance_text' => $filial->map_entrance ?? '',\n        ],\n    ];\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'branches_title' => $branches_title,\n    'callback_label' => $callback_label,\n    'form_exports' => $form_exports,\n    'address_eyebrow' => $address_eyebrow,\n    'phone_eyebrow' => $phone_eyebrow,\n    'hours_eyebrow' => $hours_eyebrow,\n    'address_icon' => $address_icon,\n    'phone_icon' => $phone_icon,\n    'hours_icon' => $hours_icon,\n    'route_label' => $route_label,\n    'branch_call_label' => $branch_call_label,\n    'branch_route_label' => $branch_route_label,\n    'directions_title' => $directions_title,\n    'map_height' => $map_height,\n    'map_zoom' => $map_zoom,\n    'map_focus_zoom_offset' => $map_focus_zoom_offset,\n    'map_api_key' => $map_api_key,\n    'site_logo_src' => $site_logo_src,\n    'branches' => $branches,\n];\n",
        "contacts-variant-2": "﻿\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n\n$branches_title = $block->title ?? 'Наши филиалы';\n$map_section_title = $block->title2 ?? 'Клиника на карте';\n$directions_title = $block->title3 ?? 'Как нас найти';\n\n$callback_label = $block->link_title ?? 'Заказать звонок';\n$form_exports = [\n    ['id' => 'callback', 'type' => 'form-appointment', 'config' => []],\n];\n\n$address_eyebrow = \\app\\models\\SystemSettings::getParam('common', 'address_eyebrow', 'Адрес');\n$phone_eyebrow = \\app\\models\\SystemSettings::getParam('common', 'phone_eyebrow', 'Телефон');\n$hours_eyebrow = \\app\\models\\SystemSettings::getParam('common', 'hours_eyebrow', 'Режим работы');\n$address_icon = '#icon-contacts-address';\n$phone_icon = '#icon-contacts-call';\n$hours_icon = '#icon-contacts-hours';\n$route_label = \\app\\models\\SystemSettings::getParam('common', 'route_label', 'Построить маршрут');\n$branch_call_label = \\app\\models\\SystemSettings::getParam('common', 'branch_call_label', 'Позвонить');\n$branch_route_label = \\app\\models\\SystemSettings::getParam('common', 'branch_route_label', 'Маршрут');\n$map_api_key = \\app\\models\\SystemSettings::getParam('common', 'map_api_key', 'c0d81455-dfb9-4117-8391-8219706daacf');\n$site_logo_src = \\app\\models\\SystemSettings::getParam('common', 'site_logo_src', '\/assets\/src\/img\/logo.svg');\n\n$map_height = (int) ($block->number1 ?? 635);\n$map_zoom = (int) ($block->number2 ?? 16);\n$map_focus_zoom_offset = (int) ($block->number3 ?? 1);\n\n$branches = [];\n$filials = \\app\\models\\Filial::find()->published()->ordered()->all();\n\nforeach ($filials as $filial) {\n    $address_lines = [];\n    if (!empty($filial->address)) {\n        $address_lines = array_values(array_filter(array_map('trim', explode(\"\\n\", $filial->address))));\n    }\n\n    $hours_rows = [];\n    if (!empty($filial->hours)) {\n        foreach (explode(\"\\n\", $filial->hours) as $line) {\n            $line = trim($line);\n            if ($line === '' || strpos($line, ':') === false) {\n                continue;\n            }\n            [$label, $value] = explode(':', $line, 2);\n            $hours_rows[] = [\n                'label' => trim($label),\n                'value' => trim($value),\n            ];\n        }\n    }\n\n    $coords = [56.0106, 92.8525];\n    if (!empty($filial->map_coords)) {\n        $parts = explode(',', $filial->map_coords);\n        if (count($parts) >= 2) {\n            $coords = [(float) trim($parts[0]), (float) trim($parts[1])];\n        }\n    }\n\n    $directions = [];\n    if (!empty($filial->directions)) {\n        $decoded = json_decode($filial->directions, true);\n        if (is_array($decoded)) {\n            $directions = $decoded;\n        }\n    }\n\n    $map_photo = '';\n    if (!empty($filial->image) && !empty($filial->image_obj)) {\n        $map_photo = $filial->image_obj->getImage();\n    }\n\n    $branches[] = [\n        'badge' => $filial->badge ?? '',\n        'title' => $filial->title ?? '',\n        'address_short' => $filial->address_short ?? '',\n        'status' => [\n            'text' => $filial->status_text ?? '',\n            'tone' => $filial->status_tone ?? 'open',\n        ],\n        'phone_href' => $filial->phone_href ?? '',\n        'route_url' => $filial->route_url ?? '',\n        'address_lines' => $address_lines,\n        'phone_number' => $filial->phone_number ?? '',\n        'phone_note' => $filial->phone_note ?? '',\n        'whatsapp_url' => $filial->whatsapp_url ?? '',\n        'telegram_url' => $filial->telegram_url ?? '',\n        'hours_rows' => $hours_rows,\n        'map' => [\n            'placemark' => $coords,\n            'balloon' => $filial->map_balloon ?? '',\n            'photo' => $map_photo,\n            'photo_alt' => $filial->image_alt ?? '',\n            'entrance_text' => $filial->map_entrance ?? '',\n        ],\n        'directions' => $directions,\n    ];\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'branches_title' => $branches_title,\n    'map_section_title' => $map_section_title,\n    'directions_title' => $directions_title,\n    'callback_label' => $callback_label,\n    'form_exports' => $form_exports,\n    'address_eyebrow' => $address_eyebrow,\n    'phone_eyebrow' => $phone_eyebrow,\n    'hours_eyebrow' => $hours_eyebrow,\n    'address_icon' => $address_icon,\n    'phone_icon' => $phone_icon,\n    'hours_icon' => $hours_icon,\n    'route_label' => $route_label,\n    'branch_call_label' => $branch_call_label,\n    'branch_route_label' => $branch_route_label,\n    'map_height' => $map_height,\n    'map_zoom' => $map_zoom,\n    'map_focus_zoom_offset' => $map_focus_zoom_offset,\n    'map_api_key' => $map_api_key,\n    'site_logo_src' => $site_logo_src,\n    'branches' => $branches,\n];\n",
        "news-variant-3": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_title = $block->title ?? '';\n$show_head_icon = !empty($block->flag1);\n\n$limit = (int) ($block->number1 ?? 6);\nif ($limit <= 0) {\n    $limit = 6;\n}\n\n$items = [];\n$articles = \\app\\models\\Article::find()->published()->orderBy('date DESC')->limit($limit)->all();\n\nforeach ($articles as $article) {\n    $item = [\n        'url' => $article->selfUrl ?? '#',\n        'image' => '',\n        'title' => $article->title ?? '',\n        'category' => $article->category ?? '',\n        'expert' => '',\n        'date' => '',\n        'read_time' => $article->read_time ?? '',\n    ];\n\n    if (!empty($article->date)) {\n        $item['date'] = $article->date_obj->format('j [' . date('n', $article->date_obj->timeStamp()) . '] Y');\n    }\n\n    if (!empty($article->image) && !empty($article->image_obj)) {\n        $item['image'] = $article->image_obj->getImage();\n    }\n\n    if (!empty($article->member)) {\n        $member_name = $article->member->title ?? '';\n        if ($member_name !== '') {\n            $item['expert'] = 'Эксперт: ' . $member_name;\n        }\n    }\n\n    $items[] = $item;\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'section_title' => $section_title,\n    'show_head_icon' => $show_head_icon,\n    'items' => $items,\n];\n",
        "news-variant-4": "\n\n$section_label = $block->eyebrow ?? $block->title ?? '';\n\n$filters = [\n    ['key' => 'all', 'label' => 'Все'],\n];\n\n$more_label = \\app\\models\\SystemSettings::getParam('common', 'show_more_label', 'Показать ещё');\n$initial_limit = (int) ($block->number1 ?? 6);\n\n$items = [];\n$category_filters = [];\n$articles = \\app\\models\\Article::find()->published()->orderBy('date DESC')->limit(6)->all();\n\nforeach ($articles as $article) {\n    $category_label = '';\n    $category_key = '';\n\n    if (!empty($article->category)) {\n        if (is_object($article->category)) {\n            $category_label = $article->category->title ?? '';\n            $category_key = $article->category->handle ?? (string) ($article->category->id ?? $category_label);\n        } else {\n            $category_label = (string) $article->category;\n            $category_key = $category_label;\n        }\n    }\n\n    $item = [\n        'url' => $article->selfUrl ?? '#',\n        'title' => $article->title ?? '',\n        'type' => $category_key,\n        'category' => $category_label,\n        'excerpt' => $article->description ?? '',\n        'date' => '',\n        'datetime' => '',\n        'read_time' => $article->read_time ?? '',\n    ];\n\n    if (!empty($article->date)) {\n        $item['datetime'] = $article->date_obj->format('Y-m-d');\n        $item['date'] = $article->date_obj->format('j [' . date('n', $article->date_obj->timeStamp()) . '] Y');\n    }\n\n    if (!empty($article->image) && !empty($article->image_obj)) {\n        $item['image'] = $article->image_obj->getImage();\n    }\n\n    if ($category_key !== '' && !isset($category_filters[$category_key])) {\n        $category_filters[$category_key] = $category_label;\n    }\n\n    $items[] = $item;\n}\n\nforeach ($category_filters as $key => $label) {\n    $filters[] = ['key' => $key, 'label' => $label];\n}\n\n$cta_title = $block->title2 ?? '';\n$cta_lead = $block->description2 ?? '';\n\n$concerns = [\n    'Что вас беспокоит?' => '',\n    'Кариес \/ боль' => 'caries',\n    'Имплантация' => 'implant',\n    'Протезирование' => 'prosthetics',\n    'Прикус \/ ортодонтия' => 'bite',\n];\n\n$form_name_label = 'Ваше имя';\n$form_phone_label = '+7 (___)-___-__-__';\n$form_submit_label = $block->link_title ?? '';\n$consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'section_label' => $section_label,\n    'filters' => $filters,\n    'more_label' => $more_label,\n    'initial_limit' => $initial_limit,\n    'items' => $items,\n    'cta_title' => $cta_title,\n    'cta_lead' => $cta_lead,\n    'concerns' => $concerns,\n    'form_name_label' => $form_name_label,\n    'form_phone_label' => $form_phone_label,\n    'form_submit_label' => $form_submit_label,\n    'consent_html' => $consent_html,\n    'section_bg' => $section_bg,\n];\n",
        "knowledge-variant-1": "\n\/* ==== DATA ==== *\/\n$heading_level = 'h2'; \/\/ 'h1' — только если блок главный на странице\n$section_id    = 'knowledge';\n\n$title = 'База знаний <span class=\"accent\">о здоровье зубов<\/span>';\n$lead  = 'Проверенная информация от врачей клиники Аленте. Симптомы, болезни, процедуры и советы по уходу — всё, что нужно знать о здоровье полости рта.';\n\n$search_placeholder = 'Найти заболевание или симптом';\n$search_button_label = 'Найти';\n$search_action_url = '#'; \/\/ реальный URL поиска \/ каталога знаний\n\n$bg_image = '\/assets\/src\/img\/knowledge\/knowledge-v1-hero.png';\n$bg_alt   = '';\n$search_icon_src = '\/assets\/src\/img\/knowledge\/knowledge-v1-search.svg';\n$search_button_src = '\/assets\/src\/img\/knowledge\/knowledge-v1-submit.svg';\n\n$section_bg = $section_bg??'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$search_input_id = 'knowledge-v1-search-input';\n\n$show_topics = true; \/\/ true | false — рубрикатор категорий под hero\n\n$topics_heading_level = 'h3';\n$topics_title = 'Выберите интересующую тему';\n$topics = [\n    [\n        'id' => 'diseases',\n        'title' => 'Заболевания и диагнозы',\n        'count_label' => '24 материала',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-diseases.svg',\n        'url' => '#knowledge-topic-diseases',\n    ],\n    [\n        'id' => 'symptoms',\n        'title' => 'Симптомы и признаки',\n        'count_label' => '24 материала',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-symptoms.svg',\n        'url' => '#knowledge-topic-symptoms',\n    ],\n    [\n        'id' => 'procedures',\n        'title' => 'Процедуры и методы',\n        'count_label' => '31 материал',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-procedures.svg',\n        'url' => '#knowledge-topic-procedures',\n    ],\n    [\n        'id' => 'care',\n        'title' => 'Уход за зубами',\n        'count_label' => '15 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-care.svg',\n        'url' => '#knowledge-topic-care',\n    ],\n    [\n        'id' => 'kids',\n        'title' => 'Детская стоматология',\n        'count_label' => '1 материал',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-kids.svg',\n        'url' => '#knowledge-topic-kids',\n    ],\n    [\n        'id' => 'materials',\n        'title' => 'Материалы и импланты',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-materials.svg',\n        'url' => '#knowledge-topic-materials',\n    ],\n];\n\n$show_alphabet = true; \/\/ true | false — алфавитный рубрикатор\n\n$alphabet_heading_level = 'h3';\n$alphabet_title = 'Все материалы по алфавиту';\n$alphabet_lead = 'Быстрый переход к нужному термину';\n$alphabet_default_letter = 'А';\n$alphabet_letters = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Э', 'Я'];\n$alphabet_items = [\n    'А' => [\n        ['title' => 'Абсцесс зуба', 'url' => '#'],\n        ['title' => 'Аномалии прикуса', 'url' => '#'],\n        ['title' => 'Анестезия в стоматологии', 'url' => '#'],\n        ['title' => 'Афтозный стоматит', 'url' => '#'],\n    ],\n    'Б' => [\n        ['title' => 'Бруксизм', 'url' => '#'],\n        ['title' => 'Болезнь дёсен', 'url' => '#'],\n    ],\n    'В' => [\n        ['title' => 'Виниры', 'url' => '#'],\n        ['title' => 'Временная коронка', 'url' => '#'],\n    ],\n    'Г' => [\n        ['title' => 'Гингивит', 'url' => '#'],\n        ['title' => 'Герметизация фиссур', 'url' => '#'],\n    ],\n    'Д' => [\n        ['title' => 'Дентальная имплантация', 'url' => '#'],\n        ['title' => 'Детская стоматология', 'url' => '#'],\n    ],\n    'К' => [\n        ['title' => 'Кариес', 'url' => '#'],\n        ['title' => 'Коронка на зуб', 'url' => '#'],\n    ],\n    'П' => [\n        ['title' => 'Пародонтит', 'url' => '#'],\n        ['title' => 'Пломбирование зуба', 'url' => '#'],\n        ['title' => 'Пульпит', 'url' => '#'],\n    ],\n];\n\n$show_catalog = true; \/\/ true | false — аккордеон тем под алфавитом\n\n$catalog_heading_level = 'h3';\n$catalog_title = 'Все темы базы знаний';\n$catalog_groups = [\n    [\n        'id' => 'diseases',\n        'title' => 'Заболевания и диагнозы',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-diseases.svg',\n        'items' => [\n            ['title' => 'Абсцесс зуба', 'url' => '#'],\n            ['title' => 'Аномалии прикуса', 'url' => '#'],\n            ['title' => 'Анестезия в стоматологии', 'url' => '#'],\n            ['title' => 'Афтозный стоматит', 'url' => '#'],\n            ['title' => 'Гингивит', 'url' => '#'],\n            ['title' => 'Кариес', 'url' => '#'],\n            ['title' => 'Пародонтит', 'url' => '#'],\n            ['title' => 'Периодонтит', 'url' => '#'],\n            ['title' => 'Пульпит', 'url' => '#'],\n        ],\n    ],\n    [\n        'id' => 'symptoms',\n        'title' => 'Симптомы и признаки',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-symptoms.svg',\n        'items' => [\n            ['title' => 'Боль при жевании', 'url' => '#'],\n            ['title' => 'Чувствительность к холоду', 'url' => '#'],\n            ['title' => 'Кровоточивость дёсен', 'url' => '#'],\n            ['title' => 'Неприятный запах изо рта', 'url' => '#'],\n            ['title' => 'Отёк десны', 'url' => '#'],\n            ['title' => 'Подвижность зуба', 'url' => '#'],\n        ],\n    ],\n    [\n        'id' => 'procedures',\n        'title' => 'Процедуры и методы',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-procedures.svg',\n        'items' => [\n            ['title' => 'Профессиональная гигиена', 'url' => '#'],\n            ['title' => 'Лечение кариеса', 'url' => '#'],\n            ['title' => 'Имплантация', 'url' => '#'],\n            ['title' => 'Удаление зуба', 'url' => '#'],\n            ['title' => 'Отбеливание', 'url' => '#'],\n            ['title' => 'Установка виниров', 'url' => '#'],\n        ],\n    ],\n    [\n        'id' => 'care',\n        'title' => 'Уход за зубами',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-care.svg',\n        'items' => [\n            ['title' => 'Как правильно чистить зубы', 'url' => '#'],\n            ['title' => 'Выбор зубной пасты', 'url' => '#'],\n            ['title' => 'Использование зубной нити', 'url' => '#'],\n            ['title' => 'Ирригатор: нужен ли он', 'url' => '#'],\n            ['title' => 'Питание и здоровье зубов', 'url' => '#'],\n        ],\n    ],\n    [\n        'id' => 'kids',\n        'title' => 'Детская стоматология',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-kids.svg',\n        'items' => [\n            ['title' => 'Первый визит ребёнка к стоматологу', 'url' => '#'],\n        ],\n    ],\n    [\n        'id' => 'materials',\n        'title' => 'Материалы и импланты',\n        'count_label' => '9 материалов',\n        'icon_src' => '\/assets\/src\/img\/knowledge\/knowledge-v1-cat-materials.svg',\n        'items' => [\n            ['title' => 'Виды имплантов', 'url' => '#'],\n            ['title' => 'Керамические коронки', 'url' => '#'],\n            ['title' => 'Композитные пломбы', 'url' => '#'],\n            ['title' => 'Съёмные протезы', 'url' => '#'],\n            ['title' => 'Брекет-системы', 'url' => '#'],\n        ],\n    ],\n];\n\n$results_empty_label = 'По запросу ничего не найдено. Попробуйте изменить формулировку.';\n$results_more_label = 'Показать еще';\n$results_page_size = 6;\n\n$results_sidebar_title = 'Остались вопросы?';\n$results_sidebar_lead = 'Оставьте заявку — мы подберем решение, которое подходит именно вам, и ответим на все ваши вопросы.';\n$results_sidebar_concerns = [\n    'Что вас беспокоит?' => '',\n    'Болит зуб' => 'toothache',\n    'Кариес \/ боль' => 'caries',\n    'Имплантация' => 'implant',\n    'Протезирование' => 'prosthetics',\n];\n$results_sidebar_name_label = 'Ваше имя';\n$results_sidebar_phone_label = '+7 (___)-___-__-__';\n$results_sidebar_submit_label = 'Получить консультацию';\n$results_sidebar_consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\">политикой обработки персональных данных<\/a>';\n\n$search_result_defaults = [\n    'excerpt' => 'Возможные причины и когда необходимо срочно обратиться к врачу.',\n    'date' => '28 апреля 2026',\n    'datetime' => '2026-04-28',\n    'read_time' => '6 мин',\n];\n\n$search_demo_items = [\n    [\n        'title' => 'Болит зуб — что делать?',\n        'url' => '#',\n        'excerpt' => 'Возможные причины боли и когда необходимо срочно обратиться к врачу',\n        'category' => 'Заболевания и диагнозы',\n        'category_id' => 'diseases',\n        'date' => '28 апреля 2026',\n        'datetime' => '2026-04-28',\n        'read_time' => '6 мин',\n    ],\n    [\n        'title' => 'Болит зуб при накусывании',\n        'url' => '#',\n        'excerpt' => 'Почему появляется боль при жевании и какие обследования нужны в первую очередь',\n        'category' => 'Симптомы и признаки',\n        'category_id' => 'symptoms',\n        'date' => '28 апреля 2026',\n        'datetime' => '2026-04-28',\n        'read_time' => '6 мин',\n    ],\n    [\n        'title' => 'Острая зубная боль ночью',\n        'url' => '#',\n        'excerpt' => 'Что можно сделать до визита к стоматологу и когда нужна срочная помощь',\n        'category' => 'Симптомы и признаки',\n        'category_id' => 'symptoms',\n        'date' => '20 апреля 2026',\n        'datetime' => '2026-04-20',\n        'read_time' => '5 мин',\n    ],\n];\n\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_id' => $section_id,\n    'title' => $title,\n    'lead' => $lead,\n    'search_placeholder' => $search_placeholder,\n    'search_button_label' => $search_button_label,\n    'search_action_url' => $search_action_url,\n    'bg_image' => $bg_image,\n    'bg_alt' => $bg_alt,\n    'search_icon_src' => $search_icon_src,\n    'search_button_src' => $search_button_src,\n    'section_bg' => $section_bg,\n    'search_input_id' => $search_input_id,\n    'show_topics' => $show_topics,\n    'topics_heading_level' => $topics_heading_level,\n    'topics_title' => $topics_title,\n    'topics' => $topics,\n    'show_alphabet' => $show_alphabet,\n    'alphabet_heading_level' => $alphabet_heading_level,\n    'alphabet_title' => $alphabet_title,\n    'alphabet_lead' => $alphabet_lead,\n    'alphabet_default_letter' => $alphabet_default_letter,\n    'alphabet_letters' => $alphabet_letters,\n    'alphabet_items' => $alphabet_items,\n    'show_catalog' => $show_catalog,\n    'catalog_heading_level' => $catalog_heading_level,\n    'catalog_title' => $catalog_title,\n    'catalog_groups' => $catalog_groups,\n    'results_empty_label' => $results_empty_label,\n    'results_more_label' => $results_more_label,\n    'results_page_size' => $results_page_size,\n    'results_sidebar_title' => $results_sidebar_title,\n    'results_sidebar_lead' => $results_sidebar_lead,\n    'results_sidebar_concerns' => $results_sidebar_concerns,\n    'results_sidebar_name_label' => $results_sidebar_name_label,\n    'results_sidebar_phone_label' => $results_sidebar_phone_label,\n    'results_sidebar_submit_label' => $results_sidebar_submit_label,\n    'results_sidebar_consent_html' => $results_sidebar_consent_html,\n    'search_result_defaults' => $search_result_defaults,\n    'search_demo_items' => $search_demo_items\n];",
        "not-found-variant-1": "\n\/* ==== DATA ==== *\/\n$heading_level = 'h1';\n\n$form_exports = [\n    ['id' => 'booking', 'type' => 'form-appointment', 'config' => []],\n];\n\n$code_image    = '\/assets\/src\/img\/not-found\/not-found-v1-code.svg';\n$illustration  = '\/assets\/src\/img\/not-found\/not-found-v1-illustration.png';\n$illustration_alt = '';\n\n$title = 'Страница не найдена';\n$text  = 'Упс! Похоже, что страница, которую вы ищете, не найдена. Возможно, она была удалена или перемещена. Проверьте адрес или вернитесь на главную страницу.';\n\n$home_url     = '\/';\n$home_label   = 'На главную';\n$services_url = '\/services';\n$services_label = 'Все услуги';\n\n$useful_title = 'Вам может быть полезно';\n\n$links = [\n    [\n        'icon'  => '\/assets\/src\/img\/not-found\/not-found-v1-icon-articles.svg',\n        'title' => 'Статьи',\n        'text'  => 'Полезные материалы для зубов',\n        'url'   => '\/articles',\n    ],\n    [\n        'icon'  => '\/assets\/src\/img\/not-found\/not-found-v1-icon-doctors.svg',\n        'title' => 'Врачи',\n        'text'  => 'Команда профессиональных специалистов',\n        'url'   => '\/doctors',\n    ],\n    [\n        'icon'  => '\/assets\/src\/img\/not-found\/not-found-v1-icon-booking.svg',\n        'title' => 'Онлайн запись',\n        'text'  => 'Удобная запись на прием к любому специалисту',\n        'url'   => '#',\n        'form_id' => 'booking',\n    ],\n];\n$section_bg = $section_bg??'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\nreturn [\n    'heading_level' => $heading_level,\n    'form_exports' => $form_exports,\n    'code_image' => $code_image,\n    'illustration' => $illustration,\n    'illustration_alt' => $illustration_alt,\n    'title' => $title,\n    'text' => $text,\n    'home_url' => $home_url,\n    'home_label' => $home_label,\n    'services_url' => $services_url,\n    'services_label' => $services_label,\n    'useful_title' => $useful_title,\n    'links' => $links,\n    'section_bg' => $section_bg\n];",
        "hero-variant-10": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$section_bg = $block->view2 ?? 'bg-gradient-page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n\n$expert_image = '\/assets\/src\/img\/hero\/hero10-expert.webp';\n$expert_alt = '';\n$expert_name = '';\n$expert_role = '';\n\nif (!empty($block->member_id) && $block->member) {\n    $member = $block->member;\n    $member_name = $member->title ?? '';\n\n    $expert_alt = $member_name;\n    if ($member->image_obj && !empty($member->image)) {\n        $expert_image = $member->image_obj->getImage();\n    }\n    $expert_name = 'Эксперт: ' . $member_name;\n    $expert_role = $member->position ?? '';\n}\n\n$date = '';\n$date_iso = '';\n$read_time = '';\n\nif (!empty($block->article_id) && $block->article) {\n    $article = $block->article;\n\n    if (!empty($article->date)) {\n        $date_iso = $article->date_obj->format('Y-m-d');\n        $date = $article->date_obj->format('j [' . date('n', $article->date_obj->timeStamp()) . '] Y');\n    }\n\n    $read_time = trim((string) ($article->read_time ?? ''));\n}\n\n$image = (!empty($block->image2) && !empty($block->image2_obj))\n    ? $block->image2_obj->getImage()\n    : '\/assets\/src\/img\/hero\/hero10-photo.webp';\n$image_alt = $block->image2_alt ?? '';\n\nreturn [\n    'heading_level' => $heading_level,\n    'section_bg' => $section_bg,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'expert_image' => $expert_image,\n    'expert_alt' => $expert_alt,\n    'expert_name' => $expert_name,\n    'expert_role' => $expert_role,\n    'date' => $date,\n    'date_iso' => $date_iso,\n    'read_time' => $read_time,\n    'image' => $image,\n    'image_alt' => $image_alt,\n];\n",
        "news-variant-1": "\n\n$deps = ['swiper'];\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$all_link_label = $block->link_title ?? '';\n$all_link_url = $block->link ?? '#news';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$featured = [\n    'url' => '#',\n    'image' => '',\n    'category' => '',\n    'expert' => '',\n    'title' => '',\n    'date' => '',\n    'read_time' => '',\n];\n$items = [];\n\n$articles = \\app\\models\\Article::find()->published()->orderBy('date DESC')->limit(6)->all();\n$article_cards = [];\n\nforeach ($articles as $article) {\n    $card = [\n        'url' => $article->selfUrl ?? '#',\n        'title' => $article->title ?? '',\n        'category' => $article->category ?? '',\n        'expert' => '',\n        'date' => '',\n        'read_time' => $article->read_time ?? '',\n    ];\n\n    if (!empty($article->date)) {\n        $card['date'] = $article->date_obj->format('j [' . date('n', $article->date_obj->timeStamp()) . '] Y');\n    }\n\n    if (!empty($article->image) && !empty($article->image_obj)) {\n        $card['image'] = $article->image_obj->getImage();\n    }\n\n    if (!empty($article->member)) {\n        $member_name = $article->member->title ?? '';\n        if ($member_name !== '') {\n            $card['expert'] = 'Эксперт: ' . $member_name;\n        }\n    }\n\n    $article_cards[] = $card;\n}\n\nif (!empty($article_cards)) {\n    $featured = $article_cards[0];\n    $items = array_slice($article_cards, 1);\n}\n\nreturn [\n    'deps' => $deps,\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'all_link_label' => $all_link_label,\n    'all_link_url' => $all_link_url,\n    'featured' => $featured,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "hero-variant-12": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$cta = $block->link_title ?? 'Оставить отзыв';\n$trust_text = $block->title2 ?? 'Все отзывы — только от реальных пациентов';\n\n$background_image = '\/assets\/src\/img\/hero\/hero3-back.webp';\n$background_alt = $block->image_alt ?? '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $image = trim((string) $block->image_obj->getImage());\n    if ($image !== '') {\n        $background_image = $image;\n    }\n}\n\n$trust_icon = '\/assets\/src\/img\/hero\/hero-v12\/icon-shield.svg';\nif (!empty($block->image2) && !empty($block->image2_obj)) {\n    $image = trim((string) $block->image2_obj->getImage());\n    if ($image !== '') {\n        $trust_icon = $image;\n    }\n}\n\n\/\/ Статистика из items_1_real (первый список)\n$stats = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $icon = '';\n        if (!empty($item->icon_id) && !empty($item->icon) && !empty($item->icon->file)) {\n            $icon = trim((string) $item->icon->file_obj->getImage());\n        }\n\n        $stats[] = [\n            'value' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'icon' => $icon,\n            'icon_width' => max(1, (int) ($item->param1 ?? 54)),\n            'icon_height' => max(1, (int) ($item->param2 ?? 54)),\n        ];\n    }\n}\n\n$form_exports = [\n    ['id' => 'leave-review', 'type' => 'form-review', 'config' => []],\n];\n\nreturn [\n    'heading_level' => $heading_level,\n    'title' => $title,\n    'lead' => $lead,\n    'cta' => $cta,\n    'trust_text' => $trust_text,\n    'trust_icon' => $trust_icon,\n    'background_image' => $background_image,\n    'background_alt' => $background_alt,\n    'form_exports' => $form_exports,\n    'stats' => $stats,\n];",
        "reviews-variant-6": "\n\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$card_bg = $block->param1 ?? 'mix';\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$title = $block->title ?? '';\n\n$platforms = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $platform = [\n            'rating' => (float) ($item->param1 ?? 5),\n            'logo' => '',\n            'logo_w' => (int) ($item->param2 ?? 200),\n            'logo_h' => (int) ($item->param3 ?? 43),\n            'url' => $item->link ?? '#',\n        ];\n\n        if (!empty($item->image) && !empty($item->image_obj)) {\n            $platform['logo'] = $item->image_obj->getImage();\n        }\n\n        $platforms[] = $platform;\n    }\n} else {\n    $sources = \\app\\models\\ReviewSource::find()->published()->ordered()->all();\n    foreach ($sources as $source) {\n        $logo = '';\n        if (!empty($source->image) && !empty($source->image_obj)) {\n            $logo = $source->image_obj->getImage();\n        }\n\n        $platforms[] = [\n            'rating' => (float) ($source->rating ?? 5),\n            'logo' => $logo,\n            'logo_w' => 200,\n            'logo_h' => 43,\n            'url' => $source->url ?? '#',\n        ];\n    }\n}\n\nreturn [\n    'section_bg' => $section_bg,\n    'card_bg' => $card_bg,\n    'heading_level' => $heading_level,\n    'title' => $title,\n    'platforms' => $platforms,\n];\n",
        "reviews-variant-5": "\n\n$section_bg = $block->view2 ?? 'page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n$card_bg = $block->param1 ?? 'mix';\n$initial_limit = (int) ($block->number1 ?? 6);\nif ($initial_limit <= 0) {\n    $initial_limit = 6;\n}\n\n$more_label = 'Показать еще';\n$read_full_label = 'Читать отзыв полностью';\n$filters_title = 'Фильтры по отзывам';\n$filter_submit_label = 'Показать отзывы';\n$empty_label = 'По выбранным фильтрам отзывов не найдено.';\n$meta_service_label = 'Услуга:';\n$meta_doctor_label = 'Врач:';\n\n$filter_action_url = '#';\n$reviews_api_url = '';\n$page_param = 'page';\n$limit_param = 'limit';\n$current_page = 1;\n$active_filters = [\n    'source' => 'all',\n    'service' => 'all',\n    'doctor' => 'all',\n    'rating' => 'all',\n];\n\n$reviews = [];\n$source_options = ['all' => 'Все площадки'];\n$service_options = ['all' => 'Все услуги'];\n$doctor_options = ['all' => 'Все врачи'];\n\n$review_models = \\app\\models\\Review::find()\n    ->published()\n    ->orderBy(['created_at' => SORT_DESC])\n    ->all();\n\nforeach ($review_models as $review) {\n    $source_key = 'all';\n    $service_key = 'all';\n    $doctor_key = 'all';\n\n    if (!empty($review->review_source_id)) {\n        $source_key = (string) $review->review_source_id;\n        if (!isset($source_options[$source_key]) && !empty($review->review_source)) {\n            $source_options[$source_key] = $review->review_source->title ?? $source_key;\n        }\n    }\n    if (!empty($review->service_id)) {\n        $service_key = (string) $review->service_id;\n        if (!isset($service_options[$service_key]) && !empty($review->service)) {\n            $service_options[$service_key] = $review->service->title ?? $service_key;\n        }\n    }\n    if (!empty($review->member_id)) {\n        $doctor_key = (string) $review->member_id;\n        if (!isset($doctor_options[$doctor_key]) && !empty($review->member)) {\n            $doctor_options[$doctor_key] = $review->member->title ?? $doctor_key;\n        }\n    }\n\n    $card = [\n        'id' => (int) $review->id,\n        'name' => $review->title ?? '',\n        'age' => $review->age ?? '',\n        'rating' => (float) ($review->rating ?? 5),\n        'text' => $review->text ?? '',\n        'source' => $source_key !== 'all' ? $source_key : '',\n        'service_key' => $service_key !== 'all' ? $service_key : '',\n        'doctor_key' => $doctor_key !== 'all' ? $doctor_key : '',\n    ];\n\n    if (!empty($review->service)) {\n        $card['service'] = $review->service->title ?? '';\n    }\n    if (!empty($review->member)) {\n        $card['doctor'] = $review->member->title ?? '';\n    }\n    if (!empty($review->review_source) && !empty($review->review_source->image) && !empty($review->review_source->image_obj)) {\n        $card['source_logo'] = $review->review_source->image_obj->getImage();\n    }\n    if (!empty($review->created_at)) {\n        $card['date'] = date('d.m.y', strtotime($review->created_at));\n    }\n\n    $reviews[] = $card;\n}\n\n$filter_fields = [];\n$option_sets = [\n    ['id' => 'source', 'label' => 'Источник', 'options' => $source_options],\n    ['id' => 'service', 'label' => 'Услуга', 'options' => $service_options],\n    ['id' => 'doctor', 'label' => 'Врач', 'options' => $doctor_options],\n    ['id' => 'rating', 'label' => 'Оценка', 'options' => [\n        'all' => 'Все оценки',\n        '5' => '5 звёзд',\n        '4' => '4 звёзды',\n        '3' => '3 звёзды',\n        '2' => '2 звёзды',\n        '1' => '1 звезда',\n    ]],\n];\n\nforeach ($option_sets as $set) {\n    $options = [];\n    foreach ($set['options'] as $value => $label) {\n        $options[] = ['value' => $value, 'label' => $label];\n    }\n    $filter_fields[] = [\n        'id' => $set['id'],\n        'label' => $set['label'],\n        'options' => $options,\n    ];\n}\n\nreturn [\n    'section_bg' => $section_bg,\n    'card_bg' => $card_bg,\n    'initial_limit' => $initial_limit,\n    'more_label' => $more_label,\n    'read_full_label' => $read_full_label,\n    'filters_title' => $filters_title,\n    'filter_submit_label' => $filter_submit_label,\n    'empty_label' => $empty_label,\n    'meta_service_label' => $meta_service_label,\n    'meta_doctor_label' => $meta_doctor_label,\n    'filter_action_url' => $filter_action_url,\n    'reviews_api_url' => $reviews_api_url,\n    'page_param' => $page_param,\n    'limit_param' => $limit_param,\n    'current_page' => $current_page,\n    'active_filters' => $active_filters,\n    'reviews' => $reviews,\n    'filter_fields' => $filter_fields,\n];\n",
        "hero-variant-9": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n\n$bg_image = (!empty($block->image) && !empty($block->image_obj))\n    ? $block->image_obj->getImage()\n    : '\/assets\/src\/img\/hero\/hero9-back.webp';\n$bg_alt = $block->image_alt ?? 'Интерьер стоматологической клиники';\n\n$rating = null;\n$reviews_count = 0;\n$reviews_url = '#reviews';\n$experience_badge = '';\n$title = '';\n$specialties = [];\n$doctor_image = '\/assets\/src\/img\/hero\/hero9-doctor.png';\n$doctor_alt = '';\n\n$stat_experience = '';\n$stat_qualify = '';\n$stat_price = '';\n\n$video_media = '';\n$video_duration = '';\n\nif (!empty($block->member_id) && $block->member) {\n    $member = $block->member;\n\n    $member_name = $member->title ?? '';\n\n    $title = $member_name;\n    $doctor_alt = $member_name;\n    $doctor_image = (!empty($member->image) && !empty($member->image_obj))\n        ? $member->image_obj->getImage()\n        : $doctor_image;\n\n    $experience_label = trim((string) ($member->experience_label ?? ''));\n    $experience_badge = \\app\\generator\\ContentPresence::hasText($experience_label) ? 'Опыт работы ' . $experience_label : '';\n    $stat_experience = $member->experience_label ?? '';\n\n    if (!empty($member->specials_arr)) {\n        $specialties = $member->specials_arr;\n    } elseif (!empty($member->speciality)) {\n        $specialties[] = $member->speciality;\n    }\n\n    if (isset($member->rating) && is_numeric($member->rating)) {\n        $rating = (float) $member->rating;\n    }\n    if (!empty($member->reviews_real)) {\n        $reviews_count = count($member->reviews_real);\n    }\n    if (!empty($member->selfUrl)) {\n        $reviews_url = $member->selfUrl . '#reviews';\n    }\n\n    if (!empty($member->qualify)) {\n        if (is_object($member->qualify) && !empty($member->qualify->title)) {\n            $stat_qualify = $member->qualify->title;\n        } elseif (is_string($member->qualify)) {\n            $stat_qualify = $member->qualify;\n        }\n    }\n\n    $member_price = null;\n    if (isset($member->price) && $member->price !== '' && $member->price !== null) {\n        $member_price = $member->price;\n    } elseif (isset($member->min_price) && $member->min_price !== '' && $member->min_price !== null) {\n        $member_price = $member->min_price;\n    }\n    if ($member_price !== null && $member_price !== '') {\n        $stat_price = \\app\\helpers\\base\\TextHelper::price($member_price) . ' ₽';\n    }\n\n    if (!empty($member->video)) {\n        $video_media = trim((string) $member->video);\n    }\n    if (!empty($member->video_duration)) {\n        $video_duration = $member->video_duration;\n    }\n}\n\n$stats = [\n    [\n        'icon' => '\/assets\/src\/img\/hero\/hero-v9-icon-experience.svg',\n        'label_top' => 'Опыт работы',\n        'value' => $stat_experience,\n        'label_bottom' => 'практики',\n    ],\n    [\n        'icon' => '\/assets\/src\/img\/hero\/hero-v9-icon-diploma.svg',\n        'label_top' => 'Квалификация',\n        'value' => $stat_qualify,\n        'label_bottom' => 'категория',\n    ],\n    [\n        'icon' => '\/assets\/src\/img\/hero\/hero-v9-icon-teeth.svg',\n        'label_top' => 'Консультация',\n        'value' => $stat_price,\n        'label_bottom' => '',\n    ],\n];\n\n$cta = $block->link_title ?? 'Записаться на консультацию';\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n    ['id' => 'question', 'type' => 'form-appointment', 'config' => []],\n];\n$question_label = trim((string) \\app\\models\\SystemSettings::getParam('common', 'member_question', 'Задать вопрос врачу'));\n$video_label = \\app\\models\\SystemSettings::getParam('common', 'video_label', 'Смотреть видеовизитку');\n\nif ($doctor_alt === '') {\n    $doctor_alt = $title;\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'bg_image' => $bg_image,\n    'bg_alt' => $bg_alt,\n    'rating' => $rating,\n    'reviews_count' => $reviews_count,\n    'reviews_url' => $reviews_url,\n    'experience_badge' => $experience_badge,\n    'title' => $title,\n    'specialties' => $specialties,\n    'stats' => $stats,\n    'cta' => $cta,\n    'form_exports' => $form_exports,\n    'question_label' => $question_label,\n    'doctor_image' => $doctor_image,\n    'doctor_alt' => $doctor_alt,\n    'video_label' => $video_label,\n    'video_duration' => $video_duration,\n    'video_media' => $video_media,\n];\n",
        "progression-stages-variant-3": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$notice = trim((string) ($block->description ?? ''));\n$section_bg = $block->view2 ?? 'bg-gradient-page'; \/\/ page | white | page-alt | surface | bg-gradient-page | bg-gradient-bottom-light | bg-gradient-top-light\n\n$notice_icon = '\/assets\/src\/img\/progression-stages\/icon-v3-heart.svg';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $notice_icon = $block->image_obj->getImage();\n}\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $card = [\n            'title' => $item->title ?? '',\n            'text' => $item->description ?? '',\n            'icon' => '',\n        ];\n\n        if (!empty($item->icon) && !empty($item->icon->file_obj)) {\n            $card['icon'] = $item->icon->file_obj->getImage();\n        }\n\n        $items[] = $card;\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'notice' => $notice,\n    'notice_icon' => $notice_icon,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "education-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'bg-gradient-page';\n\n$medal_src = '';\nif (!empty($block->image) && !empty($block->image_obj)) {\n    $medal_src = trim((string) $block->image_obj->getImage());\n}\n\n$stats = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $stats[] = [\n            'value' => $item->title ?? '',\n            'label' => $item->description ?? '',\n        ];\n    }\n}\n\n$groups = [];\nif (!empty($block->items_2_real)) {\n    foreach ($block->items_2_real as $group) {\n        $groupData = [\n            'title' => $group->title ?? '',\n        ];\n\n        $bulletsRaw = trim((string) ($group->description ?? ''));\n        if ($bulletsRaw !== '') {\n            $groupData['bullets'] = array_values(array_filter(array_map('trim', explode(\"\\n\", $bulletsRaw))));\n        }\n\n        if (!empty($group->subitems_real)) {\n            $groupData['items'] = [];\n            foreach ($group->subitems_real as $item) {\n                $groupData['items'][] = [\n                    'period' => $item->title ?? '',\n                    'text' => $item->description ?? '',\n                ];\n            }\n        }\n\n        $groups[] = $groupData;\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'medal_src' => $medal_src,\n    'stats' => $stats,\n    'groups' => $groups,\n    'section_bg' => $section_bg,\n];\n",
        "certificates-variant-1": "\n\n$heading_level = !empty($block->is_h1) ? 'h1' : 'h2';\n$eyebrow = $block->eyebrow ?? '';\n$title = $block->title ?? '';\n$lead = $block->description ?? '';\n$section_bg = $block->view2 ?? 'bg-gradient-bottom-light';\n\n$download_label = \\app\\models\\SystemSettings::getParam('common', 'download_label', 'Скачать');\n$type_label = $block->param1 ?? 'Сертификат';\n$pdf_icon_src = '\/assets\/src\/img\/certificates\/icon-pdf.svg';\n\n$items = [];\nif (!empty($block->items_1_real)) {\n    foreach ($block->items_1_real as $item) {\n        $items[] = [\n            'title' => $item->title ?? '',\n            'file' => trim((string) ($item->file ?? '')),\n        ];\n    }\n}\n\nreturn [\n    'heading_level' => $heading_level,\n    'eyebrow' => $eyebrow,\n    'title' => $title,\n    'lead' => $lead,\n    'download_label' => $download_label,\n    'type_label' => $type_label,\n    'pdf_icon_src' => $pdf_icon_src,\n    'items' => $items,\n    'section_bg' => $section_bg,\n];\n",
        "header": "\n$deps = ['bvi'];\n\n$form_exports = [\n    [\n        'id' => 'cta',\n        'type' => 'form-appointment',\n        'config' => [\n            'popup_form_show_service' => true,\n            'popup_form_show_name' => true,\n            'popup_form_title' => 'Рассчитать стоимость',\n            'popup_form_lead' => 'Выберите услугу и оставьте контакты — мы перезвоним и подготовим расчёт.',\n            'popup_form_submit_label' => 'Рассчитать стоимость',\n            'popup_form_offer_html' => 'Нажимая кнопку «Рассчитать стоимость», я&nbsp;принимаю условия <a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/offer\" onclick=\"event.stopPropagation()\">Публичной оферты.<\/a>',\n        ],\n    ],\n];\n\n$header_logo_url = '\/';\n$header_address = 'ул. Ленина, 21, г. Красноярск';\n$header_phone = '+7 (000) 000-11-11';\n$header_hours = 'Ежедневно с 9:00 до 21:00';\n$header_cta = 'Рассчитать стоимость';\n$header_tool_icon_bg = true;\nif (!empty($project) && is_object($project) && method_exists($project, 'getHeader_tool_icon_bg')) {\n    $header_tool_icon_bg = (bool) $project->header_tool_icon_bg;\n}\n$header_menu = [];\n\n$menu = \\app\\helpers\\base\\MenuHelper::menu()->getArray('top');\nif (!empty($menu)) {\n    foreach ($menu as $k1 => $v1) {\n        $row1 = [\n            'label' => $v1['name'],\n            'url' => $v1['url'],\n        ];\n        $submenu1 = [];\n        if (!empty($v1['children'])) {\n            if ($v1['is_service']) {\n                $submenu1 = [\n                    'type' => 'mega',\n                    'mega' => [\n                        'title' => $v1['title3'],\n                        'all' => ['label' => $v1['title2'], 'url' => $v1['url']],\n                        'columns' => [],\n                    ],\n                ];\n                foreach ($v1['children'] as $k2 => $v2) {\n                    $submenu2 = [\n                        'url' => $v2['url'],\n                        'title' => $v2['name'],\n                    ];\n                    if (!empty($v2['children'])) {\n                        foreach ($v2['children'] as $k3 => $v3) {\n                            $submenu2['items'][] = [\n                                'label' => $v3['name'],\n                                'url' => $v3['url'],\n                            ];\n                        }\n                    }\n                    $submenu1['mega']['columns'][] = $submenu2;\n                }\n            } else {\n                $submenu1 = [\n                    'type' => 'small',\n                    'items' => [],\n                ];\n                foreach ($v1['children'] as $k2 => $v2) {\n                    $submenu1['items'][] = [\n                        'url' => $v2['url'],\n                        'label' => $v2['name'],\n                    ];\n                }\n            }\n        }\n        if (!empty($submenu1)) $row1['submenu'] = $submenu1;\n\n        $header_menu[] = $row1;\n    }\n}\n\nreturn [\n    'deps' => $deps,\n    'form_exports' => $form_exports,\n    'header_logo_url' => $header_logo_url,\n    'header_address' => $header_address,\n    'header_phone' => $header_phone,\n    'header_hours' => $header_hours,\n    'header_cta' => $header_cta,\n    'header_tool_icon_bg' => $header_tool_icon_bg,\n    'header_menu' => $header_menu,\n];",
        "footer": "\n$deps = ['bvi'];\n\n$form_exports = [\n    ['id' => 'cta', 'type' => 'form-appointment', 'config' => []],\n];\n\n$footer_logo_url = '\/';\n$footer_tagline  = 'Современная стоматология с вниманием к деталям и заботой о каждом пациенте';\n$footer_address  = 'ул. Ленина, 21, г. Красноярск';\n$footer_phone    = '+7 (000) 000-11-11';\n$footer_hours    = 'Ежедневно с 9:00 до 21:00';\n\n$footer_nav_title = 'Навигация';\n$footer_nav_cols = [\n    [\n        ['label' => 'Услуги', 'url' => '#services'],\n        ['label' => 'Специалисты', 'url' => '#doctors'],\n        ['label' => 'Акции', 'url' => '#promo'],\n    ],\n    [\n        ['label' => 'О клинике', 'url' => '#about'],\n        ['label' => 'Прайс - лист', 'url' => '#prices'],\n        ['label' => 'Пациентам', 'url' => '#patients'],\n    ],\n];\n\n$footer_popular_title = 'Популярные услуги';\n$footer_popular_cols = [\n    [\n        ['label' => 'Детская стоматология', 'url' => '#services-kids'],\n        ['label' => 'Лечение зубов', 'url' => '#services-therapy'],\n        ['label' => 'Хирургия', 'url' => '#services-surgery'],\n    ],\n    [\n        ['label' => 'Ортодонтия', 'url' => '#services-ortho'],\n        ['label' => 'Протезирование', 'url' => '#services-prosthetics'],\n        ['label' => 'Лечение десен', 'url' => '#services-parodont'],\n    ],\n];\n\n$footer_form_title = 'Записаться на консультацию';\n$footer_form_lead  = 'Оставьте заявку и мы свяжемся с вами в ближайшее время.';\n$footer_form_btn   = 'Продолжить';\n$footer_form_consent_html = 'Нажимая на кнопку, вы соглашаетесь с&nbsp;<a class=\"footer-v1__consent-link text-decoration-fade\" href=\"\/policy\" onclick=\"event.stopPropagation()\">политикой обработки персональных данных<\/a>';\n\n$footer_copyright = '© 2026 Аленте';\n$footer_company   = 'ООО «Аленте», сеть стоматологических клиник';\n$footer_links = [\n    ['label' => 'Лицензии', 'url' => '#licenses'],\n    ['label' => 'Правовая информация', 'url' => '#legal'],\n    ['label' => 'Политика конфиденциальности', 'url' => '#privacy'],\n];\n$footer_accessibility_label = 'Версия для слабовидящих';\n$footer_accessibility_url   = '#';\n\n$footer_dev_logo = '\/assets\/src\/img\/footer\/developer.svg';\n\n$footer_disclaimer = 'ИМЕЮТСЯ ПРОТИВОПОКАЗАНИЯ, НЕОБХОДИМА КОНСУЛЬТАЦИЯ СПЕЦИАЛИСТА';\n$footer_decor = '\/assets\/src\/img\/footer\/decor.svg';\n\nreturn [\n    'deps' => $deps,\n    'form_exports' => $form_exports,\n    'footer_logo_url' => $footer_logo_url,\n    'footer_tagline' => $footer_tagline,\n    'footer_address' => $footer_address,\n    'footer_phone' => $footer_phone,\n    'footer_hours' => $footer_hours,\n    'footer_nav_title' => $footer_nav_title,\n    'footer_nav_cols' => $footer_nav_cols,\n    'footer_popular_title' => $footer_popular_title,\n    'footer_popular_cols' => $footer_popular_cols,\n    'footer_form_title' => $footer_form_title,\n    'footer_form_lead' => $footer_form_lead,\n    'footer_form_btn' => $footer_form_btn,\n    'footer_form_consent_html' => $footer_form_consent_html,\n    'footer_copyright' => $footer_copyright,\n    'footer_company' => $footer_company,\n    'footer_links' => $footer_links,\n    'footer_accessibility_label' => $footer_accessibility_label,\n    'footer_accessibility_url' => $footer_accessibility_url,\n    'footer_dev_logo' => $footer_dev_logo,\n    'footer_disclaimer' => $footer_disclaimer,\n    'footer_decor' => $footer_decor,\n];",
        "back-to-top": "\nreturn [];"
    },
    "view": {
        "blocks": {
            "hero-variant-2": "<?php $lcp_image = $slides[0]['bg_image'] ?? ''; ?>\n<section class=\"hero-v2\">\n  <div class=\"hero-v2__card swiper\">\n    <div class=\"swiper-wrapper\">\n      <?php foreach ($slides as $slide_index => $slide): ?>\n        <?php\n          $slide_title_tag = $slide_index === 0 ? $heading_level : 'p';\n          $bg_image = trim((string) ($slide['bg_image'] ?? ''));\n          $bg_video = trim((string) ($slide['bg_video'] ?? ''));\n          $has_bg_video = $bg_video !== '';\n          $has_bg_image = $bg_image !== '';\n        ?>\n        <div class=\"swiper-slide\">\n          <article class=\"hero-v2__slide has-block-bg section-pad-y\">\n            <?php if ($has_bg_video || $has_bg_image): ?>\n              <div class=\"hero-v2__slide-bg block-bg\" aria-hidden=\"true\">\n                <?php if ($has_bg_image): ?>\n                  <img\n                    class=\"<?= $has_bg_video ? 'hero-v2__slide-poster' : '' ?>\"\n                    src=\"<?= htmlspecialchars($bg_image) ?>\"\n                    alt=\"<?= htmlspecialchars($slide['bg_alt'] ?? '') ?>\"\n                    <?= \\app\\generator\\PageCriticalResources::imgAttrs($bg_image) ?>\n                  >\n                <?php endif; ?>\n                <?php if ($has_bg_video): ?>\n                  <video\n                    class=\"hero-v2__slide-video\"\n                    muted\n                    loop\n                    playsinline\n                    webkit-playsinline\n                    preload=\"none\"\n                  >\n                    <source data-src=\"<?= htmlspecialchars($bg_video) ?>\" type=\"video\/mp4\">\n                  <\/video>\n                <?php endif; ?>\n              <\/div>\n            <?php endif; ?>\n            <div class=\"container\">\n              <div class=\"hero-v2__slide-inner stack stack--xl\">\n                <div class=\"hero-v2__lead stack stack--xl\">\n                  <?= \\app\\generator\\Eyebrow::renderBlock($slide['eyebrow'], '') ?>\n                  <div class=\"titles\">\n                    <<?= $slide_title_tag ?> class=\"hero-v2__title megatext-lg\">\n                      <?= $slide['title'] ?>\n                    <\/<?= $slide_title_tag ?>>\n                    <p class=\"hero-v2__subtitle leadtext-xl\"><?= htmlspecialchars($slide['subtitle']) ?><\/p>\n                  <\/div>\n                  <div class=\"hero-v2__actions actions-row\">\n                    <button type=\"button\" class=\"btn btn--primary hero-v2__cta\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id($slide['cta_form'])) ?>\" data-remote=\"1\"><?= htmlspecialchars($slide['cta']) ?><\/button>\n                  <\/div>\n                <\/div>\n                <ul class=\"hero-v2__benefits\">\n                  <?php foreach ($slide['benefits'] ?? [] as $benefit): ?>\n                    <?php\n                      $benefit_icon = trim((string) ($benefit['icon'] ?? ''));\n                      $has_benefit_icon = $benefit_icon !== '';\n                    ?>\n                    <li class=\"hero-v2__benefit<?= $has_benefit_icon ? '' : ' hero-v2__benefit--no-icon' ?>\">\n                      <?php if ($has_benefit_icon): ?>\n                        <span class=\"hero-v2__benefit-icon\" aria-hidden=\"true\">\n                          <img src=\"<?= htmlspecialchars($benefit_icon) ?>\" alt=\"\" width=\"31\" height=\"31\" loading=\"lazy\" decoding=\"async\">\n                        <\/span>\n                      <?php endif; ?>\n                      <span class=\"hero-v2__benefit-text bodytext-lg\"><?= htmlspecialchars($benefit['text']) ?><\/span>\n                    <\/li>\n                  <?php endforeach; ?>\n                <\/ul>\n              <\/div>\n            <\/div>\n          <\/article>\n        <\/div>\n      <?php endforeach; ?>\n    <\/div>\n\n    <?php if (count($slides) > 1): ?>\n      <div class=\"slider-nav slider-nav--brand hero-v2__slider-nav\">\n        <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий слайд\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n            <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <\/button>\n        <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий слайд\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n            <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <\/button>\n      <\/div>\n      <div class=\"slider-pagination-host\">\n        <div class=\"hero-v2__slider-pagination slider-pagination--dots swiper-pagination\"><\/div>\n      <\/div>\n    <?php endif; ?>\n  <\/div>\n<\/section>",
            "benefits-variant-2": "<?php\n  $benefits_v2_cards_count = count($items);\n  $benefits_v2_cards_cols = max(1, min(4, $benefits_v2_cards_count));\n  $default_card_icon_src = trim((string) ($default_card_icon_src ?? ''));\n?>\n<section class=\"benefits-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <?php if ($bg_texture !== ''): ?>\n    <div\n      class=\"benefits-v2__texture\"\n      aria-hidden=\"true\"\n      style=\"background-image: url('<?= htmlspecialchars($bg_texture, ENT_QUOTES) ?>')\"\n    ><\/div>\n  <?php endif; ?>\n  <?php if ($decor_svg !== ''): ?>\n    <img\n      class=\"benefits-v2__decor\"\n      src=\"<?= htmlspecialchars($decor_svg) ?>\"\n      alt=\"\"\n      aria-hidden=\"true\"\n      loading=\"lazy\"\n      decoding=\"async\"\n    >\n  <?php endif; ?>\n\n  <div class=\"container\">\n    <div class=\"benefits-v2__inner stack stack--xl\">\n      <div class=\"benefits-v2__head\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'benefits-v2__eyebrow') ?>\n        <div class=\"benefits-v2__lead titles\">\n          <<?= $heading_level ?> class=\"benefits-v2__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n          <p class=\"benefits-v2__subtitle leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <ul class=\"benefits-v2__cards benefits-v2__cards--cols-<?= (int) $benefits_v2_cards_cols ?>\">\n        <?php foreach ($items as $item): ?>\n          <?php\n            $card_icon_src = trim((string) ($item['icon_src'] ?? ''));\n            if ($card_icon_src === '') {\n                $card_icon_src = $default_card_icon_src;\n            }\n            $has_card_icon = $card_icon_src !== '';\n          ?>\n          <li class=\"benefits-v2__card<?= $has_card_icon ? '' : ' benefits-v2__card--no-icon' ?>\">\n            <?php if ($has_card_icon): ?>\n              <span class=\"benefits-v2__icon\" aria-hidden=\"true\">\n                <img\n                  class=\"benefits-v2__icon-img\"\n                  src=\"<?= htmlspecialchars($card_icon_src) ?>\"\n                  alt=\"\"\n                  width=\"18\"\n                  height=\"19\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <div class=\"benefits-v2__card-body stack stack--sm\">\n              <p class=\"benefits-v2__card-title leadtext-xl\"><?= htmlspecialchars($item['title']) ?><\/p>\n              <p class=\"benefits-v2__card-text bodytext-lg\"><?= htmlspecialchars($item['text']) ?><\/p>\n            <\/div>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>",
            "our-approach-variant-2": "<?php\n  $hero_image = trim((string) ($hero_image ?? ''));\n  $has_hero_image = $hero_image !== '';\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $badge_text = trim((string) ($badge_text ?? ''));\n  $badge_icon = trim((string) ($badge_icon ?? ''));\n  $has_badge = $has_text($badge_text);\n?>\n<section class=\"our-approach-v2 our-approach-v2--steps-num-<?= htmlspecialchars($steps_num_style) ?> section-space-y-lg\">\n  <div class=\"container\">\n    <div class=\"our-approach-v2__top\">\n      <div class=\"our-approach-v2__lead stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'our-approach-v2__eyebrow') ?>\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"our-approach-v2__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n          <p class=\"our-approach-v2__subtitle leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n        <?php if ($has_badge): ?>\n          <div class=\"our-approach-v2__badge\">\n            <?php if ($badge_icon !== ''): ?>\n              <span class=\"our-approach-v2__badge-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"our-approach-v2__badge-icon-img\"\n                  src=\"<?= htmlspecialchars($badge_icon) ?>\"\n                  alt=\"\"\n                  width=\"33\"\n                  height=\"33\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <p class=\"our-approach-v2__badge-text leadtext\"><?= htmlspecialchars($badge_text) ?><\/p>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <ol class=\"our-approach-v2__steps\">\n        <?php foreach ($steps as $step): ?>\n          <li class=\"our-approach-v2__step\">\n            <div class=\"our-approach-v2__step-num\">\n              <span class=\"our-approach-v2__step-i bodytext\"><?= htmlspecialchars($step['num']) ?><\/span>\n              <span class=\"our-approach-v2__step-slash leadtext-xl\" aria-hidden=\"true\">\/<\/span>\n            <\/div>\n            <p class=\"our-approach-v2__step-title bodytext-lg\"><?= htmlspecialchars($step['title']) ?><\/p>\n            <p class=\"our-approach-v2__step-text bodytext-lg\"><?= htmlspecialchars($step['text']) ?><\/p>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ol>\n    <\/div>\n\n    <div class=\"our-approach-v2__bottom<?= $has_hero_image ? '' : ' our-approach-v2__bottom--no-media' ?>\">\n      <?php if ($has_hero_image): ?>\n        <div class=\"our-approach-v2__media\">\n          <img\n            class=\"our-approach-v2__media-img\"\n            src=\"<?= htmlspecialchars($hero_image) ?>\"\n            alt=\"<?= htmlspecialchars($hero_alt) ?>\"\n            loading=\"lazy\"\n            decoding=\"async\"\n          >\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"our-approach-v2__cta\">\n        <div class=\"our-approach-v2__cta-inner stack stack--md\">\n          <div class=\"our-approach-v2__cta-copy stack stack--sm\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($cta_eyebrow, 'our-approach-v2__cta-eyebrow') ?>\n            <p class=\"our-approach-v2__cta-title megatext\"><?= htmlspecialchars($cta_title) ?><\/p>\n            <p class=\"our-approach-v2__cta-subtitle bodytext-strong\"><?= htmlspecialchars($cta_subtitle) ?><\/p>\n          <\/div>\n\n          <form class=\"our-approach-v2__cta-form stack stack--sm popup-form--consent-gated\" action=\"#\" method=\"post\">\n            <div class=\"our-approach-v2__cta-row\">\n              <label class=\"our-approach-v2__field\" aria-label=\"Телефон\">\n                <input\n                  class=\"field__input our-approach-v2__input\"\n                  type=\"tel\"\n                  name=\"phone\"\n                  aria-label=\"Телефон\"\n                  placeholder=\"<?= htmlspecialchars($cta_phone_label) ?>\"\n                  autocomplete=\"tel\"\n                  required\n                >\n              <\/label>\n              <button\n                type=\"submit\"\n                class=\"btn btn--primary our-approach-v2__cta-btn popup-form__submit uibtntext\"\n              >\n                <?= htmlspecialchars($cta_btn) ?>\n              <\/button>\n            <\/div>\n\n            <label class=\"our-approach-v2__consent popup-form__consent\">\n              <input class=\"our-approach-v2__checkbox popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n              <span class=\"our-approach-v2__consent-text bodytext\"><?= $cta_consent_html ?><\/span>\n            <\/label>\n          <\/form>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "services-variant-3": "<section class=\"services-v3 services-v3--tab-active-<?= htmlspecialchars($tab_active_style) ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y-lg\">\n  <div class=\"container\">\n    <div class=\"services-v3__head\">\n      <div class=\"services-v3__head-main stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'services-v3__eyebrow') ?>\n        <<?= $heading_level ?> class=\"services-v3__title megatext\">\n          <?= $title ?>\n        <\/<?= $heading_level ?>>\n        <p class=\"services-v3__head-lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/div>\n\n      <a class=\"services-v3__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n        <?= htmlspecialchars($all_link_label) ?>\n        <svg class=\"icon services-v3__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n          <use href=\"#icon-arrow-right\"><\/use>\n        <\/svg>\n      <\/a>\n    <\/div>\n\n    <div class=\"services-v3__body\">\n      <div class=\"services-v3__list\" role=\"tablist\" aria-label=\"<?= htmlspecialchars($eyebrow) ?>\">\n        <?php foreach ($items as $index => $item): ?>\n          <?php\n          $tab_id   = 'services-v3-tab-' . $index;\n          $panel_id = 'services-v3-panel-' . $index;\n          $is_first = $index === 0;\n          ?>\n          <div class=\"services-v3__item\">\n            <button\n              type=\"button\"\n              class=\"services-v3__tab megatext-sm<?= $is_first ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($tab_id) ?>\"\n              role=\"tab\"\n              aria-selected=\"<?= $is_first ? 'true' : 'false' ?>\"\n              aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              data-services-v3-tab\n              data-services-v3-index=\"<?= $index ?>\"\n              tabindex=\"<?= $is_first ? '0' : '-1' ?>\"\n              style=\"--services-v3-tab-row: <?= $index + 1 ?>\"\n            >\n              <span class=\"services-v3__tab-label\"><?= htmlspecialchars($item['name']) ?><\/span>\n              <span class=\"services-v3__tab-arrow\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"21\" height=\"22\">\n                  <use href=\"#icon-arrow-diagonal\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/button>\n\n            <article\n              class=\"services-v3__panel<?= $is_first ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($panel_id) ?>\"\n              role=\"tabpanel\"\n              aria-labelledby=\"<?= htmlspecialchars($tab_id) ?>\"\n              data-services-v3-panel\n              data-services-v3-index=\"<?= $index ?>\"\n              aria-hidden=\"<?= $is_first ? 'false' : 'true' ?>\"\n              <?= $is_first ? '' : ' hidden' ?>\n            >\n              <div class=\"services-v3__panel-inner\">\n                <div class=\"services-v3__media\">\n                  <img\n                    class=\"services-v3__media-img\"\n                    src=\"<?= htmlspecialchars($item['image']) ?>\"\n                    alt=\"\"\n                    width=\"800\"\n                    height=\"592\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <\/div>\n\n                <div class=\"services-v3__detail-foot\">\n                  <p class=\"services-v3__detail-text bodytext-lg-regular\"><?= htmlspecialchars($item['text']) ?><\/p>\n                  <a class=\"services-v3__more link-arrow bodytext-md\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                    <?= htmlspecialchars($cta_label) ?>\n                    <svg class=\"icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-arrow-right\"><\/use>\n                    <\/svg>\n                  <\/a>\n                <\/div>\n              <\/div>\n            <\/article>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cases-variant-1": "<?php $cases_v1_case_count = count($cases); ?>\n<section\n  class=\"cases-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  style=\"--cases-v1-count: <?= (int) $cases_v1_case_count ?>\"\n>\n  <div class=\"container\">\n    <div class=\"cases-v1__inner stack stack--xl\">\n      <div class=\"cases-v1__head\">\n        <div class=\"cases-v1__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cases-v1__eyebrow') ?>\n          <<?= $heading_level ?> class=\"cases-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n        <\/div>\n\n        <?php if (count($cases) > 1): ?>\n          <div class=\"cases-v1__head-actions\">\n            <div class=\"cases-v1__slider-nav slider-nav\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий кейс\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий кейс\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <div class=\"cases-v1__slider-foot slider-foot\">\n        <div class=\"cases-v1__carousel\">\n          <div class=\"cases-v1__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($cases as $case_index => $case): ?>\n                <?php\n                  $panel_class = 'cases-v1__panel';\n                  if ($case_index % 2 === 1) {\n                      $panel_class .= ' cases-v1__panel--reverse';\n                  }\n                  $index_label = str_pad((string) ($case_index + 1), 2, '0', STR_PAD_LEFT);\n                ?>\n                <div\n                  class=\"swiper-slide cases-v1__slide\"\n                  style=\"--cases-v1-card-index: <?= (int) $case_index ?>\"\n                >\n                  <article class=\"<?= htmlspecialchars($panel_class) ?>\">\n                    <div class=\"cases-v1__body stack stack--lg\">\n                      <div class=\"cases-v1__body-top\">\n                        <p class=\"cases-v1__index\" aria-hidden=\"true\">\n                          <span class=\"cases-v1__index-num bodytext-strong\"><?= htmlspecialchars($index_label) ?><\/span>\n                          <span class=\"cases-v1__index-sep\">\/<\/span>\n                        <\/p>\n                        <p class=\"cases-v1__category titletext-sm\"><?= htmlspecialchars($case['category']) ?><\/p>\n                      <\/div>\n\n                      <div class=\"cases-v1__copy stack stack--md\">\n                        <p class=\"cases-v1__card-title megatext-md\"><?= htmlspecialchars($case['title']) ?><\/p>\n                        <p class=\"cases-v1__card-text bodytext-lg\"><?= htmlspecialchars($case['text']) ?><\/p>\n                      <\/div>\n\n                      <?php if (!empty($case['meta']) && is_array($case['meta'])): ?>\n                        <div class=\"cases-v1__meta\">\n                          <?php foreach ($case['meta'] as $meta_item): ?>\n                            <div class=\"cases-v1__meta-item\">\n                              <p class=\"cases-v1__meta-label bodytext-strong\"><?= htmlspecialchars($meta_item['label'] ?? '') ?><\/p>\n                              <p class=\"cases-v1__meta-value bodytext-strong\"><?= htmlspecialchars($meta_item['value'] ?? '') ?><\/p>\n                            <\/div>\n                          <?php endforeach; ?>\n                        <\/div>\n                      <?php endif; ?>\n                    <\/div>\n\n                    <div class=\"cases-v1__media\">\n                      <img class=\"cases-v1__img cases-v1__img--after\" src=\"<?= htmlspecialchars($case['after_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                      <img class=\"cases-v1__img cases-v1__img--before\" src=\"<?= htmlspecialchars($case['before_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\" aria-hidden=\"true\">\n                      <span class=\"cases-v1__divider\" aria-hidden=\"true\"><\/span>\n                      <span class=\"cases-v1__badge cases-v1__badge--before titletext-sm\">До<\/span>\n                      <span class=\"cases-v1__badge cases-v1__badge--after titletext-sm\">После<\/span>\n                      <button\n                        type=\"button\"\n                        class=\"cases-v1__handle\"\n                        aria-label=\"Сравнить до\/после\"\n                        aria-valuemin=\"0\"\n                        aria-valuemax=\"100\"\n                        aria-valuenow=\"50\"\n                      >\n                        <img src=\"<?= htmlspecialchars($handle_src) ?>\" alt=\"\" width=\"86\" height=\"86\" loading=\"lazy\" decoding=\"async\">\n                      <\/button>\n                    <\/div>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($cases) > 1): ?>\n          <div class=\"slider-pagination-host\">\n            <div class=\"cases-v1__pagination slider-pagination--dots swiper-pagination\"><\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "doctors-variant-4": "<?php\n  $doctors_v4_section_classes = ['doctors-v4', \\app\\generator\\SectionBg::classString($section_bg)];\n  if (!$featured_card_bg) {\n      $doctors_v4_section_classes[] = 'doctors-v4--featured-no-card-bg';\n  }\n  if (!$list_card_bg) {\n      $doctors_v4_section_classes[] = 'doctors-v4--list-no-card-bg';\n  }\n  $doctors_v4_section_classes[] = 'doctors-v4--badge-' . $badge_style;\n  $has_lead = trim((string) $lead) !== '';\n  $has_all_link = trim((string) $all_link_label) !== '';\n  $has_title = trim(strip_tags((string) $title)) !== '';\n?>\n<?php\nif (!function_exists('doctors_v4_has_experience')) {\n    function doctors_v4_has_experience(array $doctor): bool\n    {\n        return trim((string)($doctor['experience'] ?? '')) !== '';\n    }\n}\n\nif (!function_exists('doctors_v4_has_rating')) {\n    function doctors_v4_has_rating(array $doctor): bool\n    {\n        $rating_value = trim((string)($doctor['rating'] ?? ''));\n        $rating_number = str_replace(',', '.', $rating_value);\n\n        return $rating_value !== '' && !(is_numeric($rating_number) && (float)$rating_number <= 0);\n    }\n}\n\nif (!function_exists('doctors_v4_featured_markup')) {\n    function doctors_v4_featured_markup(array $doctor, string $article_class = 'doctors-v4__featured', string $article_attrs = ''): void\n    {\n        $doctor_name = trim(($doctor['name_last'] ?? '') . ' ' . ($doctor['name_first'] ?? ''));\n        $image = trim((string)($doctor['image'] ?? ''));\n        $has_image = $image !== '';\n        $image_has_bg = $has_image && !empty($doctor['image_has_bg']);\n        $experience_value = trim((string)($doctor['experience'] ?? ''));\n        $rating_value = trim((string)($doctor['rating'] ?? ''));\n        $has_experience = doctors_v4_has_experience($doctor);\n        $has_rating = doctors_v4_has_rating($doctor);\n        $show_badges = $has_experience || $has_rating;\n        $specialty = trim((string)($doctor['specialty'] ?? ''));\n        $role = trim((string)($doctor['role'] ?? ''));\n        $focus = trim((string)($doctor['focus'] ?? ''));\n        $more_url = trim((string)($doctor['url'] ?? ''));\n        ?>\n        <article class=\"<?= htmlspecialchars($article_class) ?>\"<?= $article_attrs ? ' ' . $article_attrs : '' ?>>\n            <div class=\"doctors-v4__featured-photo<?= $image_has_bg ? ' doctors-v4__featured-photo--has-bg' : '' ?>\">\n                <?php if ($has_image): ?>\n                    <img\n                            class=\"doctors-v4__featured-img\"\n                            src=\"<?= htmlspecialchars($image) ?>\"\n                            alt=\"<?= htmlspecialchars($doctor_name) ?>\"\n                            width=\"745\"\n                            height=\"441\"\n                            loading=\"lazy\"\n                            decoding=\"async\"\n                    >\n                <?php endif; ?>\n                <?php if ($show_badges): ?>\n                    <div class=\"doctors-v4__featured-badges\">\n                        <?php if ($has_experience): ?>\n                            <span class=\"doctors-v4__badge doctors-v4__badge--exp bodytext-strong\"><?= htmlspecialchars($experience_value) ?><\/span>\n                        <?php endif; ?>\n                        <?php if ($has_rating): ?>\n                            <span class=\"doctors-v4__badge doctors-v4__badge--rating bodytext-strong\">\n            <svg class=\"icon doctors-v4__badge-star\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-star\"><\/use>\n            <\/svg>\n            <span><?= htmlspecialchars($rating_value) ?><\/span>\n          <\/span>\n                        <?php endif; ?>\n                    <\/div>\n                <?php endif; ?>\n            <\/div>\n\n            <div class=\"doctors-v4__featured-foot\">\n                <div class=\"doctors-v4__featured-copy stack stack--sm\">\n                    <h3 class=\"doctors-v4__featured-name megatext-sm\">\n                        <span class=\"doctors-v4__featured-name-line\"><?= htmlspecialchars(trim((string)($doctor['name_last'] ?? ''))) ?><\/span>\n                        <span class=\"doctors-v4__featured-name-line\"><?= htmlspecialchars(trim((string)($doctor['name_first'] ?? ''))) ?><\/span>\n                    <\/h3>\n                    <?php if ($specialty !== '' || $role !== ''): ?>\n                        <p class=\"doctors-v4__featured-meta bodytext\">\n                            <?php if ($specialty !== ''): ?>\n                                <span><?= htmlspecialchars($specialty) ?><\/span><?php endif; ?>\n                            <?php if ($specialty !== '' && $role !== ''): ?><span class=\"doctors-v4__meta-dot\"\n                                                                                  aria-hidden=\"true\"><\/span><?php endif; ?>\n                            <?php if ($role !== ''): ?><span><?= htmlspecialchars($role) ?><\/span><?php endif; ?>\n                        <\/p>\n                    <?php endif; ?>\n                    <?php if ($focus !== ''): ?>\n                        <p class=\"doctors-v4__featured-focus bodytext\"><?= htmlspecialchars($focus) ?><\/p>\n                    <?php endif; ?>\n                <\/div>\n\n                <div class=\"doctors-v4__featured-actions stack stack--sm\">\n                    <button\n                            type=\"button\"\n                            class=\"btn btn--primary doctors-v4__featured-btn bodytext-sm\"\n                            data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id($doctor['cta_form'])) ?>\"\n                            data-remote=\"1\"\n                    >\n                        Записаться на приём\n                    <\/button>\n                    <?php if ($more_url !== ''): ?>\n                        <a\n                                class=\"btn btn--secondary doctors-v4__featured-more bodytext-sm\"\n                                href=\"<?= htmlspecialchars($more_url) ?>\"\n                        >\n                            Подробнее о враче\n                        <\/a>\n                    <?php endif; ?>\n                <\/div>\n            <\/div>\n        <\/article>\n        <?php\n    }\n}\n\nif (!function_exists('doctors_v4_controls_markup')) {\n    function doctors_v4_controls_markup(string $modifier = ''): void\n    {\n        $class = 'doctors-v4__controls slider-nav--glass' . ($modifier ? ' doctors-v4__controls' . $modifier : '');\n        ?>\n        <div class=\"<?= htmlspecialchars($class) ?>\">\n            <button type=\"button\"\n                    class=\"doctors-v4__nav-btn doctors-v4__nav-btn--prev slider-nav__btn slider-nav__btn--prev\"\n                    aria-label=\"Предыдущий врач\">\n        <span class=\"doctors-v4__arrow doctors-v4__arrow--prev\" aria-hidden=\"true\">\n          <svg class=\"icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n            <use href=\"#icon-arrow-right\"><\/use>\n          <\/svg>\n        <\/span>\n            <\/button>\n\n            <div class=\"doctors-v4__pagination-host slider-pagination-host\">\n                <div class=\"doctors-v4__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n            <\/div>\n\n            <button type=\"button\"\n                    class=\"doctors-v4__nav-btn doctors-v4__nav-btn--next slider-nav__btn slider-nav__btn--next\"\n                    aria-label=\"Следующий врач\">\n        <span class=\"doctors-v4__arrow doctors-v4__arrow--next\" aria-hidden=\"true\">\n          <svg class=\"icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n            <use href=\"#icon-arrow-right\"><\/use>\n          <\/svg>\n        <\/span>\n            <\/button>\n        <\/div>\n        <?php\n    }\n}\n?>\n<section class=\"<?= htmlspecialchars(implode(' ', $doctors_v4_section_classes)) ?>\">\n  <div class=\"container\">\n    <div class=\"doctors-v4__inner stack stack--xl\">\n      <header class=\"doctors-v4__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'doctors-v4__eyebrow') ?>\n        <div class=\"doctors-v4__head-row\">\n          <?php if ($has_title): ?>\n          <<?= $heading_level ?> class=\"doctors-v4__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <?php endif; ?>\n          <?php if ($has_lead || $has_all_link): ?>\n            <div class=\"doctors-v4__intro stack stack--xl\">\n              <?php if ($has_lead): ?>\n                <p class=\"doctors-v4__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n              <?php endif; ?>\n              <?php if ($has_all_link): ?>\n                <a class=\"doctors-v4__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars(trim((string) $all_link_url) !== '' ? $all_link_url : '#') ?>\">\n                  <?= htmlspecialchars($all_link_label) ?>\n                  <svg class=\"icon doctors-v4__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-arrow-right\"><\/use>\n                  <\/svg>\n                <\/a>\n              <?php endif; ?>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/header>\n\n      <div class=\"doctors-v4__body\">\n        <div class=\"doctors-v4__featured-col\">\n          <div class=\"doctors-v4__featured-host\" data-doctors-v4-featured-host><\/div>\n\n          <div class=\"doctors-v4__featured-mobile swiper\">\n            <div class=\"swiper-wrapper\" data-doctors-v4-mobile-track><\/div>\n          <\/div>\n\n          <?php if (count($doctors) > 1): ?>\n            <?php doctors_v4_controls_markup('--mobile'); ?>\n          <?php endif; ?>\n        <\/div>\n\n        <div class=\"doctors-v4__list-col\">\n          <div class=\"doctors-v4__carousel\">\n            <div class=\"doctors-v4__slider swiper\">\n              <div class=\"swiper-wrapper\" data-doctors-v4-list-track>\n                <?php foreach ($doctors as $index => $doctor): ?>\n                  <?php doctors_v4_featured_markup(\n                      $doctor,\n                      'doctors-v4__featured doctors-v4__doctor doctors-v4__card swiper-slide' . ($index === 0 ? ' is-active' : ''),\n                      'data-doctors-v4-doctor data-doctors-v4-card data-doctors-v4-slide data-doctor-index=\"' . (int) $index . '\"'\n                  ); ?>\n                <?php endforeach; ?>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <?php if (count($doctors) > 1): ?>\n            <?php doctors_v4_controls_markup('--desktop'); ?>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "quiz-variant-1": "<section\n  class=\"quiz-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  data-quiz-v1-step=\"<?= (int) $step_current ?>\"\n  data-quiz-v1-total=\"<?= (int) $step_total ?>\"\n>\n  <div class=\"container\">\n    <div class=\"quiz-v1__layout\">\n      <div class=\"quiz-v1__intro\">\n        <div class=\"quiz-v1__intro-top stack stack--md\" data-quiz-v1-intro-part=\"default\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'quiz-v1__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"quiz-v1__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n            <p class=\"quiz-v1__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"quiz-v1__intro-top stack stack--md\" data-quiz-v1-intro-part=\"final\" hidden>\n          <?= \\app\\generator\\Eyebrow::renderBlock($step4_eyebrow, 'quiz-v1__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"quiz-v1__title quiz-v1__title--final megatext\">\n              <?= $step4_title ?>\n            <\/<?= $heading_level ?>>\n            <p class=\"quiz-v1__lead leadtext-xl\"><?= htmlspecialchars($step4_lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"quiz-v1__promo\" data-quiz-v1-intro-part=\"default\">\n          <?php if (trim((string)$promo_gift) !== ''): ?>\n            <span class=\"quiz-v1__promo-gift\" aria-hidden=\"true\">\n              <img\n                class=\"quiz-v1__promo-gift-img\"\n                src=\"<?= htmlspecialchars($promo_gift) ?>\"\n                alt=\"\"\n                width=\"50\"\n                height=\"50\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <\/span>\n          <?php endif; ?>\n          <div class=\"quiz-v1__promo-body stack stack--sm\">\n            <?php if (trim((string)$promo_tag) !== ''): ?>\n              <span class=\"quiz-v1__promo-tag bodytext-sm\"><?= htmlspecialchars($promo_tag) ?><\/span>\n            <?php endif; ?>\n            <p class=\"quiz-v1__promo-text leadtext\"><?= htmlspecialchars($promo_text) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <?php if (trim((string)$step4_callback_text) !== ''): ?>\n          <div class=\"quiz-v1__callback\" data-quiz-v1-intro-part=\"final\" hidden>\n            <span class=\"quiz-v1__callback-icon\" aria-hidden=\"true\">\n              <svg class=\"icon quiz-v1__callback-icon-svg\" width=\"50\" height=\"50\" aria-hidden=\"true\">\n                <use href=\"#icon-clock-circle\"><\/use>\n              <\/svg>\n            <\/span>\n            <p class=\"quiz-v1__callback-text leadtext\"><?= htmlspecialchars($step4_callback_text) ?><\/p>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <div class=\"quiz-v1__figure\" aria-hidden=\"true\">\n        <div class=\"quiz-v1__figure-frame\">\n          <img\n            class=\"quiz-v1__figure-img\"\n            src=\"<?= htmlspecialchars($decor_image) ?>\"\n            alt=\"\"\n            width=\"1073\"\n            height=\"721\"\n            loading=\"lazy\"\n            decoding=\"async\"\n          >\n        <\/div>\n      <\/div>\n\n      <div class=\"quiz-v1__panel\">\n        <div class=\"quiz-v1__panel-inner\">\n          <span class=\"quiz-v1__step bodytext-strong\" data-quiz-v1-step-label><?= htmlspecialchars($step_label) ?><\/span>\n\n          <div class=\"quiz-v1__step-panel\" data-quiz-v1-step-panel=\"1\">\n          <form class=\"quiz-v1__form stack stack--md\" action=\"#\" method=\"post\" data-quiz-v1-form=\"1\">\n            <fieldset class=\"quiz-v1__fieldset stack stack--sm\">\n              <legend class=\"quiz-v1__question megatext-md\"><?= htmlspecialchars($step1_question) ?><\/legend>\n\n              <div class=\"quiz-v1__options\" role=\"radiogroup\" aria-label=\"<?= htmlspecialchars($step1_question) ?>\">\n                <?php foreach ($step1_options as $option): ?>\n                  <label class=\"quiz-v1__option\">\n                    <input\n                      class=\"quiz-v1__option-input\"\n                      type=\"radio\"\n                      name=\"concern\"\n                      value=\"<?= htmlspecialchars($option['value']) ?>\"\n                      data-quiz-v1-option\n                    >\n                    <?php if (trim((string)($option['icon'] ?? '')) !== ''): ?>\n                      <span class=\"quiz-v1__option-icon\" aria-hidden=\"true\">\n                        <img\n                          class=\"quiz-v1__option-icon-img\"\n                          src=\"<?= htmlspecialchars($option['icon']) ?>\"\n                          alt=\"\"\n                          width=\"26\"\n                          height=\"26\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/span>\n                    <?php endif; ?>\n                    <span class=\"quiz-v1__option-label bodytext-strong\"><?= htmlspecialchars($option['label']) ?><\/span>\n                  <\/label>\n                <?php endforeach; ?>\n              <\/div>\n            <\/fieldset>\n\n            <div class=\"quiz-v1__actions stack stack--md\">\n              <button\n                type=\"button\"\n                class=\"quiz-v1__continue btn btn--primary uibtntext\"\n                data-quiz-v1-continue\n                disabled\n              >\n                <?= htmlspecialchars($continue_label) ?>\n              <\/button>\n\n              <p class=\"quiz-v1__privacy bodytext-strong\">\n                <?php if ($show_privacy_icon): ?>\n                  <svg class=\"icon quiz-v1__privacy-icon\" width=\"22\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-shield\"><\/use>\n                  <\/svg>\n                <?php endif; ?>\n                <?= htmlspecialchars($privacy_text) ?>\n              <\/p>\n            <\/div>\n          <\/form>\n          <\/div>\n\n          <div class=\"quiz-v1__step-panel\" data-quiz-v1-step-panel=\"2\" hidden>\n            <form class=\"quiz-v1__form stack stack--md\" action=\"#\" method=\"post\" data-quiz-v1-form=\"2\">\n              <fieldset class=\"quiz-v1__fieldset stack stack--sm\">\n                <legend class=\"quiz-v1__question megatext-md\"><?= htmlspecialchars($step2_question) ?><\/legend>\n\n                <div class=\"quiz-v1__options\" role=\"radiogroup\" aria-label=\"<?= htmlspecialchars($step2_question) ?>\">\n                  <?php foreach ($step2_options as $option): ?>\n                    <label class=\"quiz-v1__option\">\n                      <input\n                        class=\"quiz-v1__option-input\"\n                        type=\"radio\"\n                        name=\"teeth_count\"\n                        value=\"<?= htmlspecialchars($option['value']) ?>\"\n                        data-quiz-v1-option\n                      >\n                      <?php if (trim((string)($option['icon'] ?? '')) !== ''): ?>\n                        <span class=\"quiz-v1__option-icon\" aria-hidden=\"true\">\n                          <img\n                            class=\"quiz-v1__option-icon-img\"\n                            src=\"<?= htmlspecialchars($option['icon']) ?>\"\n                            alt=\"\"\n                            width=\"26\"\n                            height=\"26\"\n                            loading=\"lazy\"\n                            decoding=\"async\"\n                          >\n                        <\/span>\n                      <?php endif; ?>\n                      <span class=\"quiz-v1__option-label bodytext-strong\"><?= htmlspecialchars($option['label']) ?><\/span>\n                    <\/label>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/fieldset>\n\n              <div class=\"quiz-v1__actions stack stack--md\">\n                <div class=\"quiz-v1__nav\">\n                  <button type=\"button\" class=\"quiz-v1__back link-arrow\" data-quiz-v1-back>\n                    <svg class=\"icon link-arrow__icon quiz-v1__back-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-arrow-right\"><\/use>\n                    <\/svg>\n                    <span class=\"bodytext-strong\"><?= htmlspecialchars($back_label) ?><\/span>\n                  <\/button>\n\n                  <button\n                    type=\"button\"\n                    class=\"quiz-v1__continue btn btn--primary uibtntext quiz-v1__continue--compact\"\n                    data-quiz-v1-continue\n                    disabled\n                  >\n                    <?= htmlspecialchars($continue_label) ?>\n                  <\/button>\n                <\/div>\n\n                <p class=\"quiz-v1__privacy bodytext-strong\">\n                  <?php if ($show_privacy_icon): ?>\n                    <svg class=\"icon quiz-v1__privacy-icon\" width=\"22\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-shield\"><\/use>\n                    <\/svg>\n                  <?php endif; ?>\n                  <?= htmlspecialchars($privacy_text) ?>\n                <\/p>\n              <\/div>\n            <\/form>\n          <\/div>\n\n          <div class=\"quiz-v1__step-panel\" data-quiz-v1-step-panel=\"3\" hidden>\n            <form class=\"quiz-v1__form stack stack--md\" action=\"#\" method=\"post\" data-quiz-v1-form=\"3\">\n              <fieldset class=\"quiz-v1__fieldset stack stack--sm\">\n                <legend class=\"quiz-v1__question megatext-md\"><?= htmlspecialchars($step3_question) ?><\/legend>\n\n                <div class=\"quiz-v1__options\" role=\"radiogroup\" aria-label=\"<?= htmlspecialchars($step3_question) ?>\">\n                  <?php foreach ($step3_options as $option): ?>\n                    <label class=\"quiz-v1__option quiz-v1__option--radio\">\n                      <input\n                        class=\"quiz-v1__option-input\"\n                        type=\"radio\"\n                        name=\"start_time\"\n                        value=\"<?= htmlspecialchars($option['value']) ?>\"\n                        data-quiz-v1-option\n                      >\n                      <span class=\"quiz-v1__option-marker\" aria-hidden=\"true\"><\/span>\n                      <span class=\"quiz-v1__option-label bodytext-strong\"><?= htmlspecialchars($option['label']) ?><\/span>\n                    <\/label>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/fieldset>\n\n              <div class=\"quiz-v1__actions stack stack--md\">\n                <div class=\"quiz-v1__nav\">\n                  <button type=\"button\" class=\"quiz-v1__back link-arrow\" data-quiz-v1-back>\n                    <svg class=\"icon link-arrow__icon quiz-v1__back-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-arrow-right\"><\/use>\n                    <\/svg>\n                    <span class=\"bodytext-strong\"><?= htmlspecialchars($back_label) ?><\/span>\n                  <\/button>\n\n                  <button\n                    type=\"button\"\n                    class=\"quiz-v1__continue btn btn--primary uibtntext quiz-v1__continue--compact\"\n                    data-quiz-v1-continue\n                    disabled\n                  >\n                    <?= htmlspecialchars($continue_label) ?>\n                  <\/button>\n                <\/div>\n\n                <p class=\"quiz-v1__privacy bodytext-strong\">\n                  <?php if ($show_privacy_icon): ?>\n                    <svg class=\"icon quiz-v1__privacy-icon\" width=\"22\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-shield\"><\/use>\n                    <\/svg>\n                  <?php endif; ?>\n                  <?= htmlspecialchars($privacy_text) ?>\n                <\/p>\n              <\/div>\n            <\/form>\n          <\/div>\n\n          <div class=\"quiz-v1__step-panel\" data-quiz-v1-step-panel=\"4\" hidden>\n            <form class=\"quiz-v1__form quiz-v1__form--lead stack stack--md popup-form--consent-gated\" action=\"#\" method=\"post\" data-quiz-v1-form=\"4\">\n              <p class=\"quiz-v1__question megatext-md\"><?= htmlspecialchars($step4_question) ?><\/p>\n\n              <div class=\"quiz-v1__fields stack stack--sm\">\n                <label class=\"field quiz-v1__field\">\n                  <input\n                    class=\"field__input quiz-v1__input\"\n                    type=\"text\"\n                    name=\"name\"\n                    placeholder=\"<?= htmlspecialchars($step4_name_label) ?>\"\n                    autocomplete=\"name\"\n                    required\n                    data-quiz-v1-field\n                  >\n                <\/label>\n                <label class=\"field quiz-v1__field\">\n                  <input\n                    class=\"field__input quiz-v1__input\"\n                    type=\"tel\"\n                    name=\"phone\"\n                    placeholder=\"<?= htmlspecialchars($step4_phone_label) ?>\"\n                    autocomplete=\"tel\"\n                    required\n                    data-quiz-v1-field\n                  >\n                <\/label>\n                <label class=\"field quiz-v1__field\">\n                  <input\n                    class=\"field__input quiz-v1__input\"\n                    type=\"email\"\n                    name=\"email\"\n                    placeholder=\"<?= htmlspecialchars($step4_email_label) ?>\"\n                    autocomplete=\"email\"\n                    data-quiz-v1-field\n                  >\n                <\/label>\n              <\/div>\n\n              <div class=\"quiz-v1__lead-actions stack stack--md\">\n                <label class=\"popup-form__consent quiz-v1__consent bodytext\">\n                  <input\n                    class=\"popup-form__consent-input\"\n                    type=\"checkbox\"\n                    name=\"consent\"\n                    required\n                    data-quiz-v1-consent\n                  >\n                  <span class=\"popup-form__consent-text\"><?= $step4_consent_html ?><\/span>\n                <\/label>\n\n                <button\n                  type=\"submit\"\n                  class=\"quiz-v1__submit btn btn--primary uibtntext\"\n                  data-quiz-v1-submit\n                  disabled\n                >\n                  <?= htmlspecialchars($step4_submit_label) ?>\n                <\/button>\n              <\/div>\n\n              <div class=\"quiz-v1__bonus\">\n                <?php\n                  $has_bonus_doctor = trim((string)$step4_bonus_doctor) !== '';\n                  $has_bonus_gift = trim((string)$promo_gift) !== '';\n                ?>\n                <?php if ($has_bonus_doctor || $has_bonus_gift): ?>\n                  <div class=\"quiz-v1__bonus-visual\" aria-hidden=\"true\">\n                    <?php if ($has_bonus_doctor): ?>\n                      <img\n                        class=\"quiz-v1__bonus-doctor\"\n                        src=\"<?= htmlspecialchars($step4_bonus_doctor) ?>\"\n                        alt=\"\"\n                        width=\"102\"\n                        height=\"102\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <?php endif; ?>\n                    <?php if ($has_bonus_gift): ?>\n                      <img\n                        class=\"quiz-v1__bonus-gift\"\n                        src=\"<?= htmlspecialchars($promo_gift) ?>\"\n                        alt=\"\"\n                        width=\"50\"\n                        height=\"50\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <?php endif; ?>\n                  <\/div>\n                <?php endif; ?>\n                <div class=\"quiz-v1__bonus-body stack stack--sm\">\n                  <?php if (trim((string)$step4_bonus_tag) !== ''): ?>\n                    <span class=\"quiz-v1__bonus-tag bodytext-sm\"><?= htmlspecialchars($step4_bonus_tag) ?><\/span>\n                  <?php endif; ?>\n                  <p class=\"quiz-v1__bonus-text leadtext\"><?= htmlspecialchars($step4_bonus_text) ?><\/p>\n                <\/div>\n              <\/div>\n            <\/form>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "choosing-teeth-variant-1": "<?php\n$step3_icon_teeth = trim((string)$step3_icon_teeth);\n$step3_icon_concern_bg = trim((string)$step3_icon_concern_bg);\n$step3_icon_concern = trim((string)$step3_icon_concern);\n$step3_icon_service = trim((string)$step3_icon_service);\n$has_step3_icon_teeth = $step3_icon_teeth !== '';\n$has_step3_icon_concern = $step3_icon_concern !== '';\n$has_step3_icon_service = $step3_icon_service !== '';\n$has_step3_disclaimer = trim((string) $step3_disclaimer) !== '';\n?>\n<section\n  class=\"choosing-teeth-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  data-step1-label=\"<?= htmlspecialchars($step1_label) ?>\"\n  data-step2-label=\"<?= htmlspecialchars($step2_label) ?>\"\n  data-step3-label=\"<?= htmlspecialchars($step3_label) ?>\"\n  data-error-pick-tooth=\"<?= htmlspecialchars($error_pick_tooth) ?>\"\n  data-error-pick-concern=\"<?= htmlspecialchars($error_pick_concern) ?>\"\n>\n  <div class=\"container\">\n    <div class=\"choosing-teeth-v1__card\">\n      <div class=\"choosing-teeth-v1__grid\">\n        <div class=\"choosing-teeth-v1__left\" aria-label=\"Квиз: выбор зубов, шаг 1\" role=\"group\">\n          <div class=\"choosing-teeth-v1__step\">\n            <span class=\"choosing-teeth-v1__step-chip bodytext-strong\" data-choosing-teeth-v1-step-label><?= htmlspecialchars($step_label) ?><\/span>\n          <\/div>\n\n          <div class=\"choosing-teeth-v1__stage\" data-choosing-teeth-v1-stage>\n            <div class=\"choosing-teeth-v1__panel choosing-teeth-v1__panel--step1\" data-choosing-teeth-v1-panel=\"1\">\n            <div class=\"choosing-teeth-v1__jaw-switch\" role=\"tablist\" aria-label=\"Челюсть\">\n              <button type=\"button\" class=\"choosing-teeth-v1__jaw-tab is-active\" role=\"tab\" aria-selected=\"true\" data-choosing-teeth-v1-jaw=\"upper\"><?= htmlspecialchars($jaw_upper_label) ?><\/button>\n              <button type=\"button\" class=\"choosing-teeth-v1__jaw-tab\" role=\"tab\" aria-selected=\"false\" data-choosing-teeth-v1-jaw=\"lower\"><?= htmlspecialchars($jaw_lower_label) ?><\/button>\n            <\/div>\n            <div class=\"choosing-teeth-v1__teeth-viewport\">\n            <div class=\"choosing-teeth-v1__teeth-map\" aria-label=\"Выбор зубов\">\n              <div class=\"choosing-teeth-v1__jaw choosing-teeth-v1__jaw--top\" aria-label=\"Верхняя челюсть\">\n                <div class=\"choosing-teeth-v1__jaw-art\">\n                  <img class=\"choosing-teeth-v1__jaw-img\" src=\"\/assets\/src\/img\/choosing-teeth\/up.png\" alt=\"\" width=\"967\" height=\"796\" loading=\"lazy\" decoding=\"async\">\n                <!-- tooth 18 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"18\" aria-label=\"Зуб 18\" style=\"--x:5.89%;--y:77.09%;--w:13.63%;--h:14.95%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 132 119\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M6.71062 22.4C-0.389382 42.3 -2.38938 63 3.31062 83.8C6.41062 95.2001 13.3106 103.6 24.5106 107.2C37.3106 111.3 50.3106 114.8 63.5106 117.8C74.4106 120.2 85.5106 118.6 96.2106 115.7C110.511 111.9 120.611 102.9 125.611 88.9C127.811 82.7 129.511 76.1 130.711 69.6C135.311 45 124.811 25.8 101.811 16C100.811 15.6 99.8106 15.1 98.6106 14.6C98.7106 14.5 98.8106 14.5 98.8106 14.4L36.4106 0C22.3106 1.6 11.5106 9.00002 6.71062 22.4ZM58.6106 6.5C64.6106 8.3 70.7106 10.1 76.7106 11.9C76.7106 12.2 76.6106 12.5 76.6106 12.8C76.5106 12.8 76.4106 12.7 76.3106 12.7C76.3106 12.8 76.3106 12.9 76.3106 13C70.2106 11.3 64.1106 9.50005 58.0106 7.80005C58.1106 7.40005 58.2106 7.10001 58.3106 6.70001C58.4106 6.70001 58.5106 6.70005 58.6106 6.80005C58.5106 6.70005 58.6106 6.6 58.6106 6.5Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 17 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"17\" aria-label=\"Зуб 17\" style=\"--x:7.27%;--y:63.23%;--w:13.86%;--h:15.67%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 135 125\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M33.6069 1C16.5069 4.9 7.30687 16.7 4.10687 33.2C2.10687 43.6 0.706868 54.3 0.106868 64.9C-1.09313 86 7.80687 99.7 27.1069 108.3C28.3069 108.8 29.4069 109.5 30.6069 110C28.0069 109.9 25.4069 110 23.0069 110.3L85.4069 124.7C85.8069 124.4 85.9069 124.3 86.0069 124.3C87.2069 124.2 88.3069 124.2 89.5069 124.1C104.907 123.3 117.007 116.8 123.607 102.7C127.607 94.2 130.507 85 132.607 75.8C137.507 54.6 129.607 36.3 111.307 24.6C108.407 22.8 105.407 21.2 101.807 19.1C102.107 19.1 102.407 19.1 102.607 19.1L45.3069 0C41.0069 0.3 37.2069 0.2 33.6069 1Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 16 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"16\" aria-label=\"Зуб 16\" style=\"--x:9.04%;--y:49.57%;--w:14.39%;--h:16.11%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 140 129\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M5.25688 32.0383C2.95688 40.1383 1.25688 48.6383 0.356879 57.0383C-1.74312 77.4383 5.35688 93.6383 23.4569 104.338C25.7569 105.738 28.0569 107.038 30.7569 108.738C29.8569 108.838 29.0569 108.838 28.2569 108.838L85.5569 127.938C91.1569 128.038 96.1569 128.538 100.857 127.838C113.057 125.938 122.557 119.438 128.457 108.438C139.157 88.2383 144.357 67.6382 131.857 46.2382C125.957 36.1382 118.157 27.8383 108.657 21.1383C107.757 20.4383 106.857 19.7383 106.657 19.6383C107.457 19.5383 108.157 19.5383 108.957 19.5383L52.2569 0.438254C29.7569 -2.46175 11.8569 9.13826 5.25688 32.0383Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 15 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"15\" aria-label=\"Зуб 15\" style=\"--x:12.54%;--y:39.02%;--w:12.99%;--h:12.97%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 126 104\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M2.96562 28.8673C-0.834379 39.8673 -1.03437 51.0673 2.66563 62.2673C6.46563 73.8673 14.6656 81.1673 25.8656 85.5673C25.0656 85.6673 24.4656 85.5673 23.7656 85.3673C21.8656 84.9673 20.0656 84.6673 18.2656 84.3673L75.0656 103.267C81.6656 102.967 88.5656 102.967 95.1656 101.667C113.366 98.2673 125.866 82.7673 125.566 64.2673C125.266 47.9673 118.066 34.8673 105.866 24.2673C104.266 22.8673 102.566 21.5673 101.366 20.5673L52.8656 0.867319C29.5656 -3.53268 9.76562 9.26732 2.96562 28.8673Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 14 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"14\" aria-label=\"Зуб 14\" style=\"--x:16.1%;--y:28.38%;--w:11.89%;--h:13.23%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 115 106\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M6.84844 20.5058C0.448443 31.5058 -1.05155 43.7058 0.648446 56.3058C2.34845 69.2058 9.54845 78.7058 20.1484 85.9058C19.6484 85.8058 19.0484 85.7058 18.5484 85.6058L67.0484 105.306C66.9484 105.206 66.7484 105.106 66.6484 105.006C72.0484 105.006 77.6484 105.306 83.2484 104.906C104.448 103.406 116.748 88.7058 114.748 67.5058C112.948 47.7058 103.648 31.9058 88.7484 19.1058C87.8484 18.3058 86.8484 17.5058 85.4484 16.3058C86.0484 16.4058 86.6484 16.5058 87.2484 16.6058L57.4484 1.30576C34.0484 -2.99424 16.7484 3.30576 6.84844 20.5058Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 13 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"13\" aria-label=\"Зуб 13\" style=\"--x:21.12%;--y:16.24%;--w:11.57%;--h:14.9%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 112 119\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M54.4453 1.55658C46.2453 4.35658 38.2453 7.75658 30.2453 10.9566C23.0453 13.8566 17.8453 19.0566 14.9453 25.9566C10.2453 37.3566 5.54532 48.7566 2.04532 60.5566C-2.05468 74.5566 -0.554688 87.7566 11.7453 97.7566C11.9453 97.8566 11.8453 98.3566 11.8453 98.6566C10.8453 98.4566 9.94531 98.2566 9.04531 98.0566L38.8453 113.357C45.3453 114.657 51.3453 115.957 57.3453 116.757C64.1453 117.657 70.9453 118.457 77.7453 118.557C92.7453 118.857 103.945 111.057 108.845 98.0566C112.045 89.6566 112.845 81.1566 110.545 72.5566C108.245 63.8566 105.445 55.3566 102.445 46.8566C100.045 40.3566 97.0453 34.0566 94.4453 28.0566L77.2453 4.75658C70.2453 -0.14342 62.7453 -1.34342 54.4453 1.55658Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 12 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"12\" aria-label=\"Зуб 12\" style=\"--x:28.95%;--y:8.01%;--w:10.26%;--h:15.46%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 100 124\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M90.2965 11.9359C85.4965 0.635942 76.0965 -2.66406 63.1965 2.13594C55.0965 5.23594 47.1965 8.83594 39.3965 12.5359C25.6965 18.9359 14.5965 28.7359 5.39648 40.5359C-0.303524 47.9359 -1.40352 56.2359 1.69648 65.1359C2.59648 67.6359 3.59647 70.0359 4.49647 72.5359C3.49647 71.6359 2.49647 70.8359 1.49647 70.1359L18.5965 93.5359C18.4965 93.3359 18.3965 93.1359 18.2965 92.8359C24.8965 98.6359 31.3965 104.836 38.3965 110.436C45.2965 116.036 52.7965 120.636 61.6965 122.436C75.0965 125.136 88.3965 118.336 93.3965 105.736C94.9965 101.636 96.2965 97.1359 96.6965 92.7359C98.7965 72.6359 101.096 52.5359 96.7965 32.4359L90.7965 12.4359C90.5965 12.3359 90.3965 12.1359 90.2965 11.9359Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 11 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"11\" aria-label=\"Зуб 11\" style=\"--x:38.35%;--y:3.69%;--w:11.65%;--h:17.46%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 113 139\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M112.1 20.9327C110.3 9.83272 103.9 3.73272 92.7 1.83272C63 -3.26728 35.4 2.33272 9.70001 17.9327C3.80001 21.5327 1.00001 27.5327 0.700012 34.3327C0.500012 38.5327 0.700012 42.8327 0.700012 47.4327C0.400012 47.2327 0.2 47.0327 0 46.8327L6 66.8327C5.8 66.0327 5.7 65.2327 5.5 64.5327C6.2 65.3327 6.7 66.1327 7 67.1327C14.2 88.1327 25.9 106.733 38.8 124.633C53.4 144.833 77.2 143.633 89 121.633C99.9 101.233 107.9 79.7327 111.7 56.8327C111.9 55.7327 111.9 54.5327 112.1 53.3327C112.3 52.2327 111.8 51.4327 112.2 49.3327L112.7 30.4327L112.6 22.8327C112.3 22.0327 112.2 21.6327 112.1 20.9327Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 21 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"21\" aria-label=\"Зуб 21\" style=\"--x:49.99%;--y:3.64%;--w:11.78%;--h:17.26%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 114 138\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M113.2 47.4288C112.9 46.0288 113.2 44.9288 113.3 43.8288C115.5 27.2288 111.7 20.1288 97 12.3288C74.4 0.32878 50.5 -1.97122 25.5 1.42878C12.3 3.22878 2.69999 8.62878 0.899994 23.1288C0.899994 23.2288 0.700012 23.2288 0.200012 23.5288L0 30.7288L0.100006 49.2288C0.600006 50.8288 0.899994 51.3288 0.899994 51.7288C3.19999 73.4288 10.3 93.6288 20.2 112.829C23.1 118.429 26.4 123.929 30.4 128.729C37.1 136.829 46.1 139.029 56.2 136.329C63.8 134.329 69.7 129.329 73.8 123.029C83.7 107.829 93.1 92.3288 102.5 76.8288C104 74.3288 105.1 71.5288 106 69.0288L113.3 47.1288C113.3 47.2288 113.2 47.3288 113.2 47.4288Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 22 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"22\" aria-label=\"Зуб 22\" style=\"--x:60.86%;--y:7.7%;--w:10.33%;--h:15.51%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 100 124\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M94.4573 74.6934C100.757 62.7934 102.457 51.3934 94.9573 40.3934C79.4573 17.6934 56.0572 7.19341 30.6572 0.593413C22.7572 -1.50659 15.9572 2.09341 11.5572 9.39341C10.4572 11.1934 9.35724 13.0934 8.25724 14.8934L0.95725 36.7934C1.45725 35.5934 1.85724 34.3934 2.25724 33.2934C1.45724 43.0934 -0.342775 53.8934 0.0572252 64.5934C0.557225 77.7934 1.75721 91.2934 4.85721 104.093C8.45721 119.193 21.8572 126.193 37.0572 122.493C42.5572 121.093 48.1572 118.793 52.9572 115.593C61.8572 109.693 70.2572 102.893 78.6572 96.5934L95.0572 74.3934C94.8572 74.4934 94.6572 74.5934 94.4573 74.6934Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 23 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"23\" aria-label=\"Зуб 23\" style=\"--x:67.21%;--y:16.21%;--w:11.57%;--h:14.91%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 112 119\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M98.527 98.8452C111.527 88.8452 113.327 76.5452 111.027 63.2452C108.627 49.3452 104.127 36.0452 96.327 24.2452C93.327 19.6452 89.127 15.1452 84.427 12.6452C75.927 8.14518 66.827 4.84518 57.727 1.54518C49.427 -1.45482 41.627 -0.154815 35.027 6.04519C34.727 6.34519 34.327 6.44519 33.627 6.74519L17.227 28.9452C17.327 28.8452 17.427 28.8452 17.427 28.7452C14.827 34.2452 11.727 40.0452 9.32704 45.9452C3.52704 60.1452 -1.87298 74.5452 0.627024 90.4452C3.42702 107.645 15.027 118.145 32.327 118.645C36.927 118.845 41.627 118.445 46.327 117.845C54.827 116.745 63.227 115.345 72.427 114.045L98.527 98.8452Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 24 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"24\" aria-label=\"Зуб 24\" style=\"--x:71.77%;--y:28.34%;--w:11.92%;--h:13.13%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 116 105\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M110.306 25.7757C99.5065 3.07571 80.4065 -4.22429 54.5065 2.27571L28.3065 17.4757C28.4065 17.4757 28.5065 17.4757 28.6065 17.4757C27.4065 18.3757 26.8065 18.8757 26.2065 19.3757C9.80651 33.3757 -0.293497 50.4757 0.00650273 72.5757C0.206503 89.7757 10.5065 101.776 27.5065 104.076C34.5065 104.976 41.8065 104.276 49.9065 104.276L96.2065 85.1757C114.807 67.1757 120.306 46.8757 110.306 25.7757Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 25 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"25\" aria-label=\"Зуб 25\" style=\"--x:74.31%;--y:39.04%;--w:12.86%;--h:13.06%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 125 104\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M118.623 68.6434C125.423 57.2434 125.223 45.1434 122.923 32.8434C121.223 23.8434 116.823 15.8434 109.723 9.84342C98.423 0.243416 85.123 -1.65659 70.223 1.24341C70.623 0.84341 71.023 0.443404 71.423 0.143404L25.1231 19.2434H25.223C11.523 28.9434 3.22303 41.3434 0.723026 56.9434C-2.67697 78.4434 5.62306 98.9434 31.8231 103.143C34.9231 103.643 38.123 103.943 41.223 103.943C44.223 104.043 47.1231 103.643 51.3231 103.443L103.623 82.5434C109.723 79.2434 114.823 75.0434 118.623 68.6434Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 26 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"26\" aria-label=\"Зуб 26\" style=\"--x:76.24%;--y:49.38%;--w:14.18%;--h:16.42%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 138 131\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M112.065 108.4C130.765 98.4 138.865 82.4 136.865 61.7C135.865 51.3 133.765 40.9 130.765 30.9C123.665 7.19999 102.565 -3.6 78.9655 3.5C76.0655 4.4 73.2654 5.2 70.3654 6C75.5654 4.3 80.5655 2.5 85.1655 0L32.8654 20.9C30.8654 22.2 29.8655 22.7 28.9655 23.4C11.4655 35.9 -1.63452 51.5 0.165479 74.4C1.06548 85.8 4.36545 97.4 8.76545 108C15.6655 124.5 32.8655 132.8 50.6655 130.2C52.3655 130 54.0655 129.7 55.7655 129.4C55.6655 129.5 55.4654 129.7 55.3654 129.8L108.865 110.1C110.665 109.2 111.365 108.8 112.065 108.4Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 27 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"27\" aria-label=\"Зуб 27\" style=\"--x:78.69%;--y:63.21%;--w:13.85%;--h:15.76%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 134 126\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M110.83 106.52C123.23 100.02 131.53 90.3203 133.23 76.0203C135.23 58.7203 133.03 41.6203 128.03 25.1203C122.93 8.12025 107.63 -1.17975 89.8304 0.120253C88.7304 0.220253 87.5303 0.120253 85.2303 0.120253C85.3303 0.120253 85.3304 0.0202771 85.4304 0.0202771L31.9304 19.7203C30.9304 20.7203 29.7304 21.3203 28.6304 21.9203C12.4304 30.7203 1.13037 43.3203 0.130368 62.5203C-0.669632 76.8203 2.23038 90.7203 8.33038 103.82C13.2304 114.22 21.6304 120.42 32.4304 123.22C37.9304 124.62 43.7304 124.72 49.0304 125.42L105.13 109.52C107.13 108.42 109.03 107.52 110.83 106.52Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 28 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"28\" aria-label=\"Зуб 28\" style=\"--x:80.25%;--y:76.96%;--w:13.69%;--h:15.1%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 133 121\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M129.917 34C125.517 11.3 111.017 0.3 87.0171 1.5C88.1171 1 89.0171 0.5 90.0171 0L33.9171 15.9C34.0171 15.9 34.017 15.9 34.117 15.9C34.317 15.7 34.117 16.1 33.817 16.2C32.617 16.8 31.4171 17.3 30.2171 17.8C14.4171 24.9 3.91705 36.5 1.01705 53.8C-1.18295 66.9 0.217079 79.8 4.91708 92.2C8.81708 102.7 15.8171 110.4 26.2171 114.9C36.7171 119.5 47.9171 121.2 59.0171 119.6C73.6171 117.5 88.1171 114.1 102.417 110.4C117.317 106.6 126.217 96.3 129.817 81.5C133.517 65.8 132.917 49.8 129.917 34Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <\/div>\n              <\/div>\n\n              <div class=\"choosing-teeth-v1__jaw choosing-teeth-v1__jaw--bottom\" aria-label=\"Нижняя челюсть\">\n                <div class=\"choosing-teeth-v1__jaw-art\">\n                  <img class=\"choosing-teeth-v1__jaw-img\" src=\"\/assets\/src\/img\/choosing-teeth\/down.png\" alt=\"\" width=\"967\" height=\"795\" loading=\"lazy\" decoding=\"async\">\n                <!-- tooth 48 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"48\" aria-label=\"Зуб 48\" style=\"--x:6.05%;--y:7.8%;--w:14.12%;--h:15.88%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 137 127\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M132.769 85.8789C139.669 65.8789 136.869 46.5789 126.669 28.5789C113.669 5.77889 91.0686 -4.12111 65.5686 1.57889C52.8685 4.37889 40.4686 8.47885 28.0686 11.9788C13.6686 16.0788 5.76855 26.0789 2.06855 40.2789C-2.13145 56.0789 0.868554 71.4789 3.96855 86.7789C8.86855 111.079 19.8686 121.879 43.9686 126.279L114.769 109.279C123.169 103.879 129.269 96.0789 132.769 85.8789Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 47 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"47\" aria-label=\"Зуб 47\" style=\"--x:7.92%;--y:21.51%;--w:14.2%;--h:16.6%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 138 132\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M112.203 110.8C128.903 100.5 139.003 86.3 137.103 65.9C136.503 59.5 135.003 53.1 133.303 46.8C126.603 23.3 112.203 8.29999 86.5031 5.79999C87.5031 5.39999 88.6031 5 89.6031 4.5C92.7031 3.2 95.6031 1.7 98.3031 0L27.5031 17.1C28.2031 17.2 28.8031 17.3 29.5031 17.5C28.5031 18 28.0031 18.3 27.4031 18.6C9.20313 26.4 -0.196874 40.8 0.0031259 60.1C0.103126 73.8 2.70312 87.6 5.30312 101.1C7.10312 110.4 12.7031 118.1 20.6031 123.9C29.0031 130.1 38.5031 131.3 49.6031 130.6C48.7031 131.1 48.0031 131.6 47.4031 132L111.103 111.6C111.403 111.3 111.803 111 112.203 110.8Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 46 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"46\" aria-label=\"Зуб 46\" style=\"--x:10.29%;--y:35.72%;--w:14.16%;--h:16.59%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 137 132\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M70.6699 125.2C77.0699 123 83.4699 120.7 89.8699 118.5C89.9699 118.7 89.9699 118.8 90.0699 119L110.87 111.2C111.77 110.7 112.47 110.3 113.07 109.9C128.87 100.1 138.57 86.3 136.67 67.4C135.47 55 131.77 42.7 128.07 30.6C124.57 19.4 116.37 11.6 105.47 7.29999C98.9699 4.69999 91.9699 3.4 85.2699 1.5C85.9699 1.1 86.8699 0.5 87.8699 0L24.1699 20.4C23.1699 21.1 22.2699 21.6 21.4699 22.1C9.26991 29.8 1.26991 40.5 0.269909 54.9C-1.33009 76 4.26991 95.8999 14.7699 114.2C21.6699 126.1 32.7699 131.6 46.5699 131.4C49.7699 131.4 52.9699 131.4 56.0699 131.4C55.8699 131.6 55.7699 131.7 55.5699 131.9L71.0699 126.1C70.8699 125.8 70.7699 125.5 70.6699 125.2Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 45 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"45\" aria-label=\"Зуб 45\" style=\"--x:13.91%;--y:49.43%;--w:12.98%;--h:13.44%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 126 107\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M123.309 28.2C116.209 4.99995 96.9092 1.20005 74.7092 1.30005C75.6092 0.800049 76.3092 0.4 76.9092 0L56.1092 7.80005C56.2092 8.00005 56.2092 8.10005 56.3092 8.30005C49.9092 10.6 43.5092 12.8 37.1092 15.1C37.1092 15.1 37.1092 15 37.0092 15L21.5092 20.8C-1.3908 40.5 -5.6908 59.3 7.1092 83.1C16.6092 100.6 32.1092 113.6 62.8092 103.1C62.5092 103.5 62.2092 103.8 61.9092 104.2L107.909 77.4C122.109 64.8 129.409 48.5 123.309 28.2ZM36.6092 96.7C36.5092 96.3999 36.4092 96 36.2092 95.7C42.6092 93.5 49.0092 91.2 55.4092 89C55.5092 89.3 55.6092 89.6 55.7092 90C49.4092 92.2 43.0092 94.5 36.6092 96.7Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 44 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"44\" aria-label=\"Зуб 44\" style=\"--x:18.57%;--y:59.37%;--w:12.17%;--h:13.35%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 118 107\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M90.5875 83.9906C91.7875 82.8906 92.5875 82.1906 93.2875 81.5906C104.188 71.5906 112.688 60.0907 116.288 45.4907C122.288 20.6907 108.688 1.59062 83.1875 0.090624C75.0875 -0.409376 66.8875 1.29065 59.6875 1.99065C60.3875 1.39065 60.9875 0.890697 61.6875 0.290697L15.6875 27.0906C-2.71249 49.9906 -4.81248 68.7907 8.78752 89.1907C20.0875 106.091 38.7875 110.391 65.2875 101.991C65.0875 102.291 64.8875 102.591 64.7875 102.891L90.9875 83.9906C90.7875 83.9906 90.6875 83.9906 90.5875 83.9906Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 43 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"43\" aria-label=\"Зуб 43\" style=\"--x:24.46%;--y:68.43%;--w:10.68%;--h:14.03%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 104 112\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M91.8073 82.9492C93.8073 76.5492 95.7073 70.9493 97.3073 65.1493C98.9073 59.2493 100.707 53.2493 101.507 47.1493C102.507 39.4493 103.807 31.5492 103.007 23.8492C101.207 7.24921 88.5073 -1.95079 72.0073 0.349214C67.1073 1.04921 62.1073 2.04926 57.3073 3.14926C49.7073 4.94926 42.2073 7.14924 34.1073 9.24924L7.9073 28.1493C0.607299 40.6493 -1.49271 46.7493 1.00729 57.1493C7.20729 81.9493 19.7073 101.749 46.2073 109.549C58.4073 113.149 69.2073 112.349 78.7073 103.249C78.9073 103.049 79.4073 103.049 80.2073 102.849C79.9073 103.649 79.7073 104.349 79.4073 104.949L92.6073 81.9492C92.3073 82.3492 92.1073 82.6492 91.8073 82.9492Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 42 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"42\" aria-label=\"Зуб 42\" style=\"--x:32.32%;--y:74.72%;--w:8.83%;--h:14.11%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 86 113\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M82.3885 79.7776C85.2885 62.4776 86.5884 45.0776 83.8885 27.5776C82.6885 19.4776 78.8884 12.7776 73.2884 7.07765C65.6884 -0.622351 56.0885 -2.32242 46.8885 3.37758C41.1885 6.87758 35.9885 11.5776 31.1885 16.2776C25.7885 21.6776 20.9885 27.6776 15.5885 33.8776L2.38845 56.8776C2.18845 57.2776 2.08846 57.6776 1.98846 58.0776C-1.81154 68.3776 -0.211527 77.3776 7.18847 85.8776C19.5885 99.7776 34.9885 107.878 52.9885 111.478C64.5885 113.778 70.9884 110.478 76.8885 99.9777C77.0884 99.5777 77.3884 99.2776 77.7884 98.7776L81.9885 82.3776C82.0885 81.2776 82.1885 80.4776 82.3885 79.7776Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 41 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"41\" aria-label=\"Зуб 41\" style=\"--x:40.59%;--y:77.11%;--w:9.4%;--h:14.81%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 91 118\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M89.9 69.1146C87.6 50.8146 83.1 33.1147 74.9 16.5147C73.8 14.3147 72.5 12.1146 71 10.1146C61.3 -2.68537 44.4 -3.68537 34.2 9.11463C27.2 17.9146 21.7 27.9147 16.3 37.8147C11.7 46.2147 8.29999 55.2147 3.89999 64.8147C3.99999 64.1147 4.10001 63.6146 4.20001 63.1146L0 79.5147C0.2 79.3147 0.3 79.1147 0.5 78.9147C-1.1 93.9147 1.90002 99.2147 14.8 106.315C31.3 115.315 49 118.215 67.4 117.715C81.7 117.315 87.4 112.215 90.2 98.2146C90.2 98.0146 90.5 97.8146 90.9 97.2146L90.7 72.7146C90.1 71.5146 90 70.3146 89.9 69.1146Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 31 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"31\" aria-label=\"Зуб 31\" style=\"--x:50.01%;--y:76.98%;--w:9.46%;--h:14.96%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 92 119\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M75.3 38.8666C69.6 28.3666 64 17.5666 56.4 8.46656C46 -4.13344 29.6 -2.23339 20.4 11.2666C19.2 13.0666 18.1 14.9666 17.1 16.8666C8.40001 33.8666 3.60001 51.9666 1.20001 70.7666C1.00001 72.3666 0.700024 73.8666 0.400024 75.4666C0.300024 75.1666 0.1 74.9665 0 74.6665L0.200012 99.1665C0.600012 100.467 0.900006 101.367 1.10001 102.267C4.00001 113.767 8.6 118.167 20.5 118.767C28.9 119.167 37.5 118.567 45.9 117.767C58.6 116.667 70.1 112.067 80.9 105.267C87 101.367 89.9 96.1665 90.3 89.1665C90.4 86.6665 90.3 84.1666 90.3 80.4666C90.7 81.1666 91.1 81.7666 91.5 82.3666L85.8 61.9666C82.3 54.2666 79.4 46.2666 75.3 38.8666Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 32 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"32\" aria-label=\"Зуб 32\" style=\"--x:58.69%;--y:74.47%;--w:8.71%;--h:14.33%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 85 114\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M68.9029 35.4456C68.1029 34.3456 67.3029 33.1457 66.3029 32.0457C57.9029 23.0457 50.2029 13.2457 40.9029 5.34567C30.2029 -3.75433 16.0029 -0.854279 8.60291 11.1457C5.70291 15.8457 3.5029 21.3457 2.4029 26.7457C-0.897101 43.2457 -0.397095 59.8457 1.5029 76.5457C1.7029 78.4457 2.00289 80.4457 2.30289 82.3457C2.10289 82.0457 2.0029 81.7457 1.9029 81.4456L7.60291 101.846C15.0029 113.646 20.1029 115.546 33.5029 112.746C51.4029 108.946 66.1029 99.8457 78.1029 86.0457C84.0029 79.1457 85.2029 71.5457 83.5029 63.1457C83.1029 60.9457 82.1029 58.7457 81.0029 55.1457C81.1029 55.3457 81.3029 55.4457 81.4029 55.5457L69.0029 35.3457C68.9029 35.3457 68.9029 35.3456 68.9029 35.4456Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 33 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"33\" aria-label=\"Зуб 33\" style=\"--x:64.79%;--y:68.68%;--w:10.68%;--h:14.09%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 104 113\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M65.7174 8.50776C53.7174 5.70776 41.9174 1.90768 29.7174 0.307682C14.5174 -1.79232 3.11738 7.00773 0.717383 22.1077C-0.482617 29.5077 -0.0826169 37.5077 1.21738 44.9077C3.41738 57.3077 7.01741 69.5077 10.1174 81.8077L22.5174 102.008C34.1174 114.908 46.9174 113.108 60.5174 108.908C80.4174 102.808 91.0174 87.9077 98.8174 70.2077C105.317 55.6077 105.117 41.4077 95.1174 28.2077C95.0174 28.1077 95.1174 27.7078 95.2174 27.5078C95.3174 27.5078 95.4174 27.6077 95.4174 27.6077L68.9174 9.30768C67.7174 9.20768 66.7174 8.80776 65.7174 8.50776Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 34 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"34\" aria-label=\"Зуб 34\" style=\"--x:69.45%;--y:59.5%;--w:12.05%;--h:13.35%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 117 107\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M35.7025 0.0390892C8.2025 1.13909 -6.39751 23.7392 2.70249 49.7392C7.40249 62.9392 15.4025 73.6391 25.7025 83.0391H25.6025L52.1025 101.339C76.3025 110.339 94.7025 106.739 107.103 89.9391C114.503 79.9391 117.103 68.3391 116.403 55.9391C115.703 43.2391 109.203 33.6391 100.103 25.4391C100.603 25.5391 101.103 25.6391 101.603 25.8391L58.0025 2.03909C50.8025 1.23909 43.2025 -0.260911 35.7025 0.0390892Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 35 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"35\" aria-label=\"Зуб 35\" style=\"--x:73.17%;--y:49.81%;--w:12.82%;--h:13.22%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 124 106\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M90.3995 14.5282C81.9995 11.5282 73.5995 8.52817 65.1995 5.52817C65.2995 5.42817 65.2995 5.22815 65.3995 5.12815L50.1995 0.0281716C31.5995 -0.271828 14.0996 1.52817 5.09955 20.0282C-6.20045 43.1282 2.39954 62.1281 19.8995 77.7281H19.7995L63.3995 101.528C65.4995 102.128 67.3995 102.828 69.2995 103.328C84.9995 108.028 101.8 103.128 110.9 91.2281C117.1 83.1281 121.1 74.0282 123 64.1282C126.5 45.7281 120.6 31.0282 104.9 20.5282C104.2 20.0282 103.5 19.4281 101.9 18.2281C103 18.3281 103.8 18.3282 104.5 18.4282L90.8995 13.8281C90.6995 13.9281 90.4995 14.2282 90.3995 14.5282ZM89.9995 96.1282C81.5995 93.1282 73.1995 90.1282 64.7995 87.1282C64.9995 86.7281 65.1995 86.3282 65.3995 86.0282C73.7995 89.0282 82.0995 91.9282 90.4995 94.9282C90.2995 95.2282 90.1995 95.6282 89.9995 96.1282Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 36 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"36\" aria-label=\"Зуб 36\" style=\"--x:74.78%;--y:35.63%;--w:14.47%;--h:16.23%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 140 129\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M101.264 13.2C99.3636 12.6 97.3636 12 95.4636 11.3L55.6636 0C54.9636 0 54.2636 0 53.6636 0C52.3636 0 50.9636 3.66196e-05 49.6636 0.100037C29.2636 1.90004 14.5636 11.6 7.36359 31.3C5.36359 36.9 3.36359 42.6 1.86359 48.4C-4.23641 72.2 4.86359 94 25.8636 106.7C27.8636 107.9 29.9636 109.1 32.3636 110.5C31.9636 110.5 31.6636 110.5 31.2636 110.5L46.4636 115.6C46.5636 115.4 46.6636 115.1 46.8636 114.9C55.2636 117.9 63.5636 120.8 71.9636 123.8C71.9636 123.9 71.8636 124 71.8636 124.1L85.4636 128.7C86.0636 128.7 86.5636 128.8 86.9636 128.8C107.764 130.4 121.664 122.9 129.164 103.5C134.064 90.9001 137.764 77.5 139.464 64.1C141.964 44.7 134.564 28.8 117.064 18.6C116.364 18.2 115.764 17.7 114.564 16.8L101.264 13C101.364 13 101.364 13.1 101.264 13.2ZM100.864 94.8C93.5636 92.5 86.2636 90.1 78.9636 87.8C79.0636 87.5 79.1636 87.2 79.2636 86.8C86.6636 89.1 94.0636 91.4 101.364 93.7C101.264 94 101.064 94.4 100.864 94.8Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 37 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"37\" aria-label=\"Зуб 37\" style=\"--x:77.76%;--y:21.88%;--w:13.92%;--h:15.85%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 135 126\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M92.408 10.5C85.308 8.8 78.1081 6.99999 71.0081 5.29999L45.908 0C46.408 0.2 46.8081 0.399976 47.3081 0.599976C47.9081 0.799976 48.4081 1.4 49.1081 2C28.0081 4.3 13.7081 15 6.60805 34.6C4.10805 41.6 2.20804 49 0.908039 56.3C-2.09196 72.9 2.30805 87.5 14.6081 99.1C18.6081 102.9 23.508 105.8 28.408 109.3C27.908 109.3 27.408 109.3 26.908 109.3L66.708 120.6C61.308 118.9 56.0081 117.2 50.6081 115.4C50.708 115.1 50.808 114.8 50.908 114.4C58.308 116.7 65.7081 119 73.0081 121.3C72.9081 121.6 72.708 121.9 72.608 122.2L85.908 126C85.708 125.9 85.5081 125.7 85.3081 125.6C87.5081 125.6 88.608 125.6 89.708 125.6C108.008 125.6 121.308 116.6 127.608 99.4C133.108 84.2 135.408 68.3 134.408 52.2C133.208 34.2 124.208 21.2 107.308 14.1C106.508 13.8 105.708 13.2 104.808 12.7C104.908 12.6 105.108 12.6 105.208 12.5L92.8081 9.90002C92.6081 10.1 92.508 10.3 92.408 10.5ZM92.0081 92.1C84.8081 90.3 77.608 88.6 70.408 86.8C70.508 86.5 70.608 86.2 70.608 85.8C77.9081 87.6 85.208 89.4 92.408 91.2C92.308 91.5 92.2081 91.8 92.0081 92.1Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <!-- tooth 38 -->\n                  <button type=\"button\" class=\"choosing-teeth-v1__tooth\" data-tooth=\"38\" aria-label=\"Зуб 38\" style=\"--x:79.46%;--y:7.55%;--w:13.82%;--h:15.91%;\">\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 134 127\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M92.5349 125.67C107.735 123.87 118.935 115.87 124.735 101.97C131.735 85.1701 134.835 67.4701 133.235 49.1701C132.835 44.5701 131.535 39.97 130.135 35.57C126.535 23.87 118.735 16.0701 107.135 12.4701C95.0349 8.77006 82.9349 4.87008 70.6349 1.87008C46.8349 -3.92992 23.8349 3.97007 12.5349 22.6701C2.53493 39.1701 -1.56507 57.6701 0.534934 76.8701C2.53493 94.9701 12.6349 107.17 29.3349 113.87L54.4349 119.17C54.3349 119.17 54.3349 119.17 54.2349 119.17C54.3349 118.87 54.4349 118.57 54.4349 118.17C61.7349 119.97 69.0349 121.77 76.2349 123.57C76.2349 123.67 76.1349 123.77 76.1349 123.87L88.5349 126.47C88.9349 126.27 89.1349 126.07 89.4349 126.07C90.5349 125.87 91.5349 125.77 92.5349 125.67Z\" fill=\"var(--brand-decor)\"\/>\n                  <\/svg>\n                <\/button>\n                <\/div>\n              <\/div>\n\n              <div class=\"choosing-teeth-v1__teeth-overlay\" data-choosing-teeth-v1-instruction-desktop>\n                <div class=\"choosing-teeth-v1__instruction\" data-choosing-teeth-v1-instruction>\n                <p class=\"choosing-teeth-v1__question bodytext-md\"><?= htmlspecialchars($left_title) ?><\/p>\n                <p class=\"choosing-teeth-v1__hint bodytext-sm\"><?= htmlspecialchars($left_hint) ?><\/p>\n              <\/div>\n              <\/div>\n            <\/div>\n            <\/div>\n              <div class=\"choosing-teeth-v1__selected choosing-teeth-v1__selected--map\" aria-live=\"polite\">\n                <span class=\"bodytext-strong\"><?= htmlspecialchars($selected_label) ?><\/span>\n                <span class=\"choosing-teeth-v1__selected-count-row\">\n                  <span class=\"choosing-teeth-v1__selected-count bodytext-strong\" data-choosing-teeth-v1-count>0<\/span>\n                  <svg class=\"icon choosing-teeth-v1__selected-icon\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n                    <use href=\"#icon-check-circle\"><\/use>\n                  <\/svg>\n                <\/span>\n            <\/div>\n            <\/div>\n\n            <div class=\"choosing-teeth-v1__panel choosing-teeth-v1__panel--step2\" data-choosing-teeth-v1-panel=\"2\" hidden>\n              <div class=\"choosing-teeth-v1__step2 stack stack--md\">\n                <p class=\"choosing-teeth-v1__step2-question titletext-sm\"><?= htmlspecialchars($step2_question) ?><\/p>\n\n                <div class=\"choosing-teeth-v1__options stack stack--sm\" role=\"group\" aria-label=\"<?= htmlspecialchars($step2_question) ?>\">\n                  <?php foreach ($step2_options as $opt): ?>\n                    <label class=\"choosing-teeth-v1__option\">\n                      <input class=\"choosing-teeth-v1__option-input\" type=\"checkbox\" value=\"<?= htmlspecialchars($opt['key']) ?>\" data-choosing-teeth-v1-concern>\n                      <span class=\"choosing-teeth-v1__option-label bodytext-md\"><?= htmlspecialchars($opt['label']) ?><\/span>\n                    <\/label>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/div>\n            <\/div>\n\n            <div class=\"choosing-teeth-v1__panel choosing-teeth-v1__panel--step3\" data-choosing-teeth-v1-panel=\"3\" hidden>\n              <div class=\"choosing-teeth-v1__step3\">\n                <div class=\"choosing-teeth-v1__step3-head stack stack--md\">\n                <p class=\"choosing-teeth-v1__step3-intro titletext-sm\"><?= htmlspecialchars($step3_intro) ?><\/p>\n\n                <div class=\"choosing-teeth-v1__summary\" aria-label=\"Сводка ответов\">\n                  <div class=\"choosing-teeth-v1__summary-item\">\n                      <?php if ($has_step3_icon_teeth): ?>\n                        <span class=\"choosing-teeth-v1__summary-icon\" aria-hidden=\"true\">\n                          <img class=\"choosing-teeth-v1__summary-icon-img\" src=\"<?= htmlspecialchars($step3_icon_teeth) ?>\" alt=\"\" width=\"44\" height=\"44\" loading=\"lazy\" decoding=\"async\">\n                        <\/span>\n                      <?php endif; ?>\n                      <span class=\"choosing-teeth-v1__summary-copy\">\n                    <span class=\"choosing-teeth-v1__summary-label bodytext\">Выбрано зубов:<\/span>\n                    <span class=\"choosing-teeth-v1__summary-value bodytext-strong\" data-choosing-teeth-v1-summary-teeth>0<\/span>\n                      <\/span>\n                  <\/div>\n                  <div class=\"choosing-teeth-v1__summary-item\">\n                      <?php if ($has_step3_icon_concern): ?>\n                        <span class=\"choosing-teeth-v1__summary-icon choosing-teeth-v1__summary-icon--concern\" aria-hidden=\"true\">\n                          <img class=\"choosing-teeth-v1__summary-icon-leaf\" src=\"<?= htmlspecialchars($step3_icon_concern) ?>\" alt=\"\" width=\"26\" height=\"26\" loading=\"lazy\" decoding=\"async\">\n                        <\/span>\n                      <?php endif; ?>\n                      <span class=\"choosing-teeth-v1__summary-copy\">\n                    <span class=\"choosing-teeth-v1__summary-label bodytext\">Беспокоит:<\/span>\n                    <span class=\"choosing-teeth-v1__summary-value bodytext-strong\" data-choosing-teeth-v1-summary-concerns>0<\/span>\n                      <\/span>\n                    <\/div>\n                  <\/div>\n                <\/div>\n\n                <div class=\"choosing-teeth-v1__services stack stack--md\">\n                  <p class=\"choosing-teeth-v1__services-title bodytext-lg\"><?= htmlspecialchars($step3_services_title) ?><\/p>\n                  <ul class=\"choosing-teeth-v1__services-list\">\n                    <?php foreach ($step3_services as $service): ?>\n                      <li class=\"choosing-teeth-v1__service\">\n                        <?php if ($has_step3_icon_service): ?>\n                          <span class=\"choosing-teeth-v1__service-icon\" aria-hidden=\"true\">\n                            <img class=\"choosing-teeth-v1__service-icon-img\" src=\"<?= htmlspecialchars($step3_icon_service) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n                          <\/span>\n                        <?php endif; ?>\n                        <span class=\"choosing-teeth-v1__service-text bodytext-md\"><?= htmlspecialchars($service) ?><\/span>\n                      <\/li>\n                    <?php endforeach; ?>\n                  <\/ul>\n                <\/div>\n\n                <?php if ($has_step3_disclaimer): ?>\n                <div class=\"choosing-teeth-v1__disclaimer\">\n                  <svg class=\"icon choosing-teeth-v1__disclaimer-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-info\"><\/use>\n                  <\/svg>\n                  <p class=\"choosing-teeth-v1__disclaimer-text bodytext\"><?= htmlspecialchars($step3_disclaimer) ?><\/p>\n                <\/div>\n                <?php endif; ?>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"choosing-teeth-v1__bottom-block\" data-choosing-teeth-v1-bottom=\"1\">\n            <div class=\"choosing-teeth-v1__bottom\">\n              <div class=\"choosing-teeth-v1__selected\" aria-live=\"polite\">\n                <span class=\"bodytext-strong\"><?= htmlspecialchars($selected_label) ?><\/span>\n                <span class=\"choosing-teeth-v1__selected-count bodytext-strong\" data-choosing-teeth-v1-count>0<\/span>\n                <svg class=\"icon choosing-teeth-v1__selected-icon\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n                  <use href=\"#icon-check-circle\"><\/use>\n                <\/svg>\n              <\/div>\n\n              <button type=\"button\" class=\"choosing-teeth-v1__next link-arrow\" data-choosing-teeth-v1-next disabled>\n                <span class=\"bodytext-strong\"><?= htmlspecialchars($next_label) ?><\/span>\n                <svg class=\"icon link-arrow__icon\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n\n            <div class=\"choosing-teeth-v1__step1-foot\" data-choosing-teeth-v1-instruction-mobile><\/div>\n\n            <p class=\"choosing-teeth-v1__error bodytext-sm\" data-choosing-teeth-v1-error hidden><\/p>\n          <\/div>\n\n          <div class=\"choosing-teeth-v1__bottom-block\" data-choosing-teeth-v1-bottom=\"2\" hidden>\n            <div class=\"choosing-teeth-v1__bottom\">\n              <button type=\"button\" class=\"choosing-teeth-v1__back link-arrow\" data-choosing-teeth-v1-back>\n                <svg class=\"icon link-arrow__icon choosing-teeth-v1__back-icon\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n                <span class=\"bodytext-strong choosing-teeth-v1__back-text-full\"><?= htmlspecialchars($back_label) ?><\/span>\n                <span class=\"bodytext-strong choosing-teeth-v1__back-text-short\"><?= htmlspecialchars($back_short_label) ?><\/span>\n              <\/button>\n\n              <button type=\"button\" class=\"choosing-teeth-v1__next link-arrow is-locked\" data-choosing-teeth-v1-next-step2 disabled aria-disabled=\"true\">\n                <span class=\"bodytext-strong\"><?= htmlspecialchars($next_label) ?><\/span>\n                <svg class=\"icon link-arrow__icon\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n            <p class=\"choosing-teeth-v1__error bodytext-sm\" data-choosing-teeth-v1-error hidden><\/p>\n          <\/div>\n\n          <div class=\"choosing-teeth-v1__bottom-block\" data-choosing-teeth-v1-bottom=\"3\" hidden>\n            <div class=\"choosing-teeth-v1__bottom\">\n              <button type=\"button\" class=\"choosing-teeth-v1__back link-arrow\" data-choosing-teeth-v1-back-step3>\n                <svg class=\"icon link-arrow__icon choosing-teeth-v1__back-icon\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n                <span class=\"bodytext-strong choosing-teeth-v1__back-text-full\"><?= htmlspecialchars($back_label) ?><\/span>\n                <span class=\"bodytext-strong choosing-teeth-v1__back-text-short\"><?= htmlspecialchars($back_short_label) ?><\/span>\n              <\/button>\n\n              <button type=\"button\" class=\"choosing-teeth-v1__next choosing-teeth-v1__submit-mobile\" data-choosing-teeth-v1-submit>\n                <span class=\"bodytext-strong\"><?= htmlspecialchars($step3_submit_label) ?><\/span>\n              <\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"choosing-teeth-v1__right\">\n          <div class=\"choosing-teeth-v1__right-inner\">\n            <div class=\"choosing-teeth-v1__right-panel\" data-choosing-teeth-v1-right=\"12\">\n              <<?= $heading_level ?> class=\"choosing-teeth-v1__title megatext-md\"><?= $title ?><\/<?= $heading_level ?>>\n              <p class=\"choosing-teeth-v1__mobile-lead bodytext-md\"><?= htmlspecialchars($step1_mobile_lead) ?><\/p>\n\n              <div class=\"choosing-teeth-v1__benefits stack stack--sm\">\n                <p class=\"choosing-teeth-v1__benefits-head bodytext-lg\"><?= htmlspecialchars($lead) ?><\/p>\n                <ul class=\"choosing-teeth-v1__benefits-list\">\n                  <?php foreach ($benefits as $benefit): ?>\n                    <li class=\"choosing-teeth-v1__benefit\">\n                      <?php if (trim((string) ($benefit['icon'] ?? '')) !== ''): ?>\n                      <span class=\"choosing-teeth-v1__benefit-icon\" aria-hidden=\"true\">\n                        <img\n                          class=\"choosing-teeth-v1__benefit-icon-img\"\n                          src=\"<?= htmlspecialchars($benefit['icon']) ?>\"\n                          alt=\"\"\n                          width=\"24\"\n                          height=\"24\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/span>\n                      <?php endif; ?>\n                      <span class=\"choosing-teeth-v1__benefit-text bodytext-lg\"><?= htmlspecialchars($benefit['text']) ?><\/span>\n                    <\/li>\n                  <?php endforeach; ?>\n                <\/ul>\n              <\/div>\n            <\/div>\n\n            <div class=\"choosing-teeth-v1__right-panel\" data-choosing-teeth-v1-right=\"3\" hidden>\n              <<?= $heading_level ?> class=\"choosing-teeth-v1__title megatext-md\"><?= $step3_title ?><\/<?= $heading_level ?>>\n              <p class=\"choosing-teeth-v1__step3-hint bodytext-lg\"><?= htmlspecialchars($step3_hint) ?><\/p>\n\n              <form class=\"choosing-teeth-v1__form popup-form--consent-gated\" action=\"#\" method=\"post\">\n                <div class=\"choosing-teeth-v1__form-row\">\n                  <label class=\"field choosing-teeth-v1__field\">\n                    <input class=\"field__input choosing-teeth-v1__input\" type=\"text\" name=\"name\" placeholder=\"<?= htmlspecialchars($step3_form_name_label) ?>\" required>\n                  <\/label>\n                  <label class=\"field choosing-teeth-v1__field\">\n                    <input class=\"field__input choosing-teeth-v1__input\" type=\"tel\" name=\"phone\" placeholder=\"<?= htmlspecialchars($step3_form_phone_label) ?>\" required>\n                  <\/label>\n                  <label class=\"field choosing-teeth-v1__field choosing-teeth-v1__field--email\">\n                    <input class=\"field__input choosing-teeth-v1__input\" type=\"email\" name=\"email\" placeholder=\"<?= htmlspecialchars($step3_form_email_label) ?>\" autocomplete=\"email\">\n                  <\/label>\n                <\/div>\n\n                <div class=\"choosing-teeth-v1__form-row choosing-teeth-v1__form-row--actions\">\n                  <label class=\"popup-form__consent choosing-teeth-v1__consent\">\n                    <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n                    <span class=\"popup-form__consent-text\"><?= $step3_form_consent_html ?><\/span>\n                  <\/label>\n\n                  <button type=\"submit\" class=\"btn btn--primary choosing-teeth-v1__submit popup-form__submit bodytext-sm\">\n                    <?= htmlspecialchars($step3_submit_label) ?>\n                  <\/button>\n                <\/div>\n              <\/form>\n            <\/div>\n\n            <div class=\"choosing-teeth-v1__promo\">\n              <?php if (trim((string) $promo_gift) !== ''): ?>\n              <span class=\"choosing-teeth-v1__promo-gift\" aria-hidden=\"true\">\n                <img\n                  class=\"choosing-teeth-v1__promo-gift-img\"\n                  src=\"<?= htmlspecialchars($promo_gift) ?>\"\n                  alt=\"\"\n                  width=\"50\"\n                  height=\"50\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n              <?php endif; ?>\n              <div class=\"choosing-teeth-v1__promo-body stack stack--sm\">\n                <?php if (trim((string) $promo_tag) !== ''): ?>\n                <span class=\"choosing-teeth-v1__promo-tag bodytext-sm\"><?= htmlspecialchars($promo_tag) ?><\/span>\n                <?php endif; ?>\n                <p class=\"choosing-teeth-v1__promo-text leadtext\"><?= htmlspecialchars($promo_text) ?><\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"choosing-teeth-v1__form-scrim\" data-choosing-teeth-v1-form-scrim hidden><\/div>\n<\/section>",
            "reviews-variant-1": "<?php\n  $reviews = $text_reviews;\n  if ($video_review) {\n      $video_review['type'] = 'video';\n      $position = max(0, min(count($text_reviews), (int) $video_review_position));\n      $reviews = array_merge(\n          array_slice($text_reviews, 0, $position),\n          [$video_review],\n          array_slice($text_reviews, $position)\n      );\n  }\n?>\n<?php\n$reviews_v1_author = static function (array $review): string {\n    $name = trim($review['name'] ?? '');\n    $age = trim($review['age'] ?? '');\n    if ($name !== '' && $age !== '') {\n        return $name . ', ' . $age;\n    }\n\n    return $name !== '' ? $name : $age;\n};\n\n$reviews_v1_normalize_rating = static function (array $review): float {\n    $raw = $review['rating'] ?? 5;\n    if (!is_numeric($raw)) {\n        return 5.0;\n    }\n\n    return round(max(1, min(5, (float) $raw)), 1);\n};\n\n$reviews_v1_rating_stars = static function (float $rating): int {\n    return max(0, min(5, (int) floor($rating + 0.001)));\n};\n\n$reviews_v1_rating_label = static function (array $review) use ($reviews_v1_normalize_rating, $reviews_v1_rating_stars): string {\n    $custom = trim($review['rating_label'] ?? '');\n    if ($custom !== '') {\n        return $custom;\n    }\n\n    $rating = $reviews_v1_normalize_rating($review);\n    $tier = max(1, $reviews_v1_rating_stars($rating));\n    $labels = [\n        5 => 'Отлично',\n        4 => 'Хорошо',\n        3 => 'Нормально',\n        2 => 'Плохо',\n        1 => 'Ужасно',\n    ];\n\n    return ($labels[$tier] ?? 'Отлично') . ' \/ ' . number_format($rating, 1, '.', '');\n};\n\n$reviews_v1_render_stars = static function (float $rating, string $size = 'sm'): void {\n    $rating = max(0, min(5, round($rating, 1)));\n    ?>\n    <span\n      class=\"stars-rating stars-rating--<?= htmlspecialchars($size) ?>\"\n      style=\"--stars-rating-value: <?= htmlspecialchars(number_format($rating, 1, '.', '')) ?>\"\n      aria-hidden=\"true\"\n    >\n      <span class=\"stars-rating__layer stars-rating__layer--empty\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n      <span class=\"stars-rating__layer stars-rating__layer--fill\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n    <\/span>\n    <?php\n};\n?>\n<?php\n$has_cta_icon = trim((string) $chat_icon_src) !== '';\n$reviews_v1_section_style = $has_cta_icon\n  ? '--reviews-v1-chat-icon-src: url(\\'' . htmlspecialchars($chat_icon_src) . '\\')'\n  : '';\n?>\n<section class=\"reviews-v1 <?= htmlspecialchars(trim(\\app\\generator\\SectionBg::classString($section_bg) . ' ' . \\app\\generator\\ReviewCardBg::classString($card_bg, 'reviews-v1'))) ?>\"<?php if ($reviews_v1_section_style !== ''): ?> style=\"<?= $reviews_v1_section_style ?>\"<?php endif; ?>>\n  <div class=\"container\">\n    <div class=\"reviews-v1__inner stack stack--xl\">\n      <div class=\"reviews-v1__head\">\n        <div class=\"reviews-v1__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'reviews-v1__eyebrow') ?>\n          <div class=\"titles stack stack--md\">\n            <<?= $heading_level ?> class=\"reviews-v1__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n            <p class=\"reviews-v1__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"reviews-v1__head-actions\">\n          <a class=\"reviews-v1__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n            <?= htmlspecialchars($all_link_label) ?>\n            <svg class=\"icon reviews-v1__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n\n          <?php if (count($reviews) > 1): ?>\n            <div class=\"reviews-v1__slider-nav slider-nav slider-nav--glass\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий отзыв\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий отзыв\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"reviews-v1__body stack stack--xl\">\n        <div class=\"reviews-v1__slider-foot slider-foot\">\n          <div class=\"reviews-v1__carousel\">\n            <div class=\"reviews-v1__slider swiper\">\n              <div class=\"swiper-wrapper\">\n              <?php foreach ($reviews as $review): ?>\n                <?php\n                  $author_line = $reviews_v1_author($review);\n                  $rating = $reviews_v1_normalize_rating($review);\n                  $rating_value = number_format($rating, 1, '.', '');\n                ?>\n                <div class=\"swiper-slide\">\n                  <?php if (($review['type'] ?? '') === 'video'): ?>\n                    <article class=\"reviews-v1__card reviews-v1__card--video\">\n                      <button\n                        type=\"button\"\n                        class=\"reviews-v1__video-trigger\"\n                        data-popup-open=\"media\"\n                        data-popup-src=\"<?= htmlspecialchars($review['video_src']) ?>\"\n                        data-popup-kind=\"video\"\n                        data-popup-poster=\"<?= htmlspecialchars($review['poster'] ?? '') ?>\"\n                        data-popup-author=\"<?= htmlspecialchars($author_line) ?>\"\n                        data-popup-service=\"<?= htmlspecialchars($review['service'] ?? '') ?>\"\n                        data-popup-rating=\"<?= htmlspecialchars($rating_value) ?>\"\n                        aria-label=\"Смотреть видеоотзыв пациента <?= htmlspecialchars($review['name'] ?? '') ?>\"\n                      >\n                        <span class=\"reviews-v1__video-media\">\n                          <img class=\"reviews-v1__video-poster\" src=\"<?= htmlspecialchars($review['poster']) ?>\" alt=\"<?= htmlspecialchars('Видеоотзыв пациента ' . ($review['name'] ?? '')) ?>\" loading=\"lazy\" decoding=\"async\">\n                          <span class=\"reviews-v1__video-play\" aria-hidden=\"true\">\n                            <img src=\"\/assets\/src\/img\/reviews\/play-btn.svg\" alt=\"\" width=\"48\" height=\"48\" loading=\"lazy\" decoding=\"async\">\n                          <\/span>\n                        <\/span>\n                      <\/button>\n\n                      <div class=\"reviews-v1__video-foot stack stack--sm\">\n                        <div class=\"reviews-v1__video-author-row\">\n                          <?php if ($author_line !== ''): ?>\n                            <p class=\"reviews-v1__video-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                          <?php endif; ?>\n                          <?php $reviews_v1_render_stars($rating, 'sm'); ?>\n                        <\/div>\n                        <?php if (!empty($review['service'])): ?>\n                          <p class=\"reviews-v1__meta bodytext-strong\">\n                            <span class=\"reviews-v1__meta-label\">Услуга:<\/span>\n                            <span class=\"reviews-v1__meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                          <\/p>\n                        <?php endif; ?>\n                      <\/div>\n                    <\/article>\n                  <?php else: ?>\n                    <article class=\"reviews-v1__card reviews-v1__card--text stack stack--md\">\n                      <div class=\"reviews-v1__card-top\">\n                        <div class=\"reviews-v1__rating-head\" aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> из 5\">\n                          <p class=\"reviews-v1__rating-label bodytext-md\"><?= htmlspecialchars($reviews_v1_rating_label($review)) ?><\/p>\n                          <?php $reviews_v1_render_stars($rating, 'sm'); ?>\n                        <\/div>\n                        <?php if ($author_line !== ''): ?>\n                          <p class=\"reviews-v1__card-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                        <?php endif; ?>\n                      <\/div>\n\n                      <div class=\"reviews-v1__card-content stack stack--md\">\n                        <div class=\"reviews-v1__quote-block stack stack--sm\">\n                          <p class=\"reviews-v1__quote bodytext-md\"><?= htmlspecialchars($review['text']) ?><\/p>\n                          <button type=\"button\" class=\"reviews-v1__read-more\" data-reviews-v1-read-full hidden>\n                            Читать отзыв полностью\n                          <\/button>\n                        <\/div>\n\n                        <?php if (!empty($review['service']) || !empty($review['doctor'])): ?>\n                          <div class=\"reviews-v1__details stack stack--sm\">\n                            <?php if (!empty($review['service'])): ?>\n                              <p class=\"reviews-v1__meta bodytext-strong\">\n                                <span class=\"reviews-v1__meta-label\">Услуга:<\/span>\n                                <span class=\"reviews-v1__meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                              <\/p>\n                            <?php endif; ?>\n                            <?php if (!empty($review['doctor'])): ?>\n                              <p class=\"reviews-v1__meta bodytext-strong\">\n                                <span class=\"reviews-v1__meta-label\">Врач:<\/span>\n                                <span class=\"reviews-v1__meta-value\"><?= htmlspecialchars($review['doctor']) ?><\/span>\n                              <\/p>\n                            <?php endif; ?>\n                          <\/div>\n                        <?php endif; ?>\n\n                        <?php if (!empty($review['source_logo']) || !empty($review['date'])): ?>\n                          <div class=\"reviews-v1__card-foot\">\n                            <?php if (!empty($review['source_logo'])): ?>\n                              <img class=\"reviews-v1__source-logo\" src=\"<?= htmlspecialchars($review['source_logo']) ?>\" alt=\"\" width=\"124\" height=\"21\" loading=\"lazy\" decoding=\"async\">\n                            <?php else: ?>\n                              <span aria-hidden=\"true\"><\/span>\n                            <?php endif; ?>\n                            <?php if (!empty($review['date'])): ?>\n                              <p class=\"reviews-v1__date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                            <?php endif; ?>\n                          <\/div>\n                        <?php endif; ?>\n                      <\/div>\n\n                      <template class=\"reviews-v1__full-template\">\n                        <div class=\"popup__review-head\">\n                          <?php $reviews_v1_render_stars($rating, 'sm'); ?>\n                          <?php if ($author_line !== ''): ?>\n                            <p class=\"popup__review-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                          <?php endif; ?>\n                        <\/div>\n                        <div class=\"popup__review-quote\" data-reviews-v1-popup-quote><\/div>\n                        <?php if (!empty($review['service'])): ?>\n                          <p class=\"popup__review-meta-row bodytext-strong\">\n                            <span class=\"popup__review-meta-label\">Услуга:<\/span>\n                            <span class=\"popup__review-meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                          <\/p>\n                        <?php endif; ?>\n                        <?php if (!empty($review['doctor'])): ?>\n                          <p class=\"popup__review-meta-row bodytext-strong\">\n                            <span class=\"popup__review-meta-label\">Врач:<\/span>\n                            <span class=\"popup__review-meta-value\"><?= htmlspecialchars($review['doctor']) ?><\/span>\n                          <\/p>\n                        <?php endif; ?>\n                        <?php if (!empty($review['source_logo']) || !empty($review['date'])): ?>\n                          <div class=\"popup__review-foot\">\n                            <?php if (!empty($review['source_logo'])): ?>\n                              <img class=\"popup__review-source\" src=\"<?= htmlspecialchars($review['source_logo']) ?>\" alt=\"\" width=\"124\" height=\"21\" loading=\"lazy\" decoding=\"async\">\n                            <?php endif; ?>\n                            <?php if (!empty($review['date'])): ?>\n                              <p class=\"popup__review-date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                            <?php endif; ?>\n                          <\/div>\n                        <?php endif; ?>\n                      <\/template>\n                    <\/article>\n                  <?php endif; ?>\n                <\/div>\n              <?php endforeach; ?>\n              <\/div>\n              <div class=\"slider-pagination-host\">\n                <div class=\"reviews-v1__pagination slider-pagination--dots swiper-pagination\"><\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"reviews-v1__platforms\">\n          <div class=\"reviews-v1__platforms-lead stack stack--md\">\n            <p class=\"reviews-v1__platforms-title megatext-md\">\n              <?= $platforms_title ?>\n            <\/p>\n            <button type=\"button\" class=\"reviews-v1__leave-review bodytext-strong\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('leave-review')) ?>\" data-remote=\"1\">\n              <?= htmlspecialchars($leave_review_label) ?>\n            <\/button>\n          <\/div>\n\n          <div class=\"reviews-v1__platforms-grid\">\n            <?php foreach ($platforms as $platform): ?>\n              <?php\n                $platform_logo_w = max(1, (int) ($platform['logo_w'] ?? 196));\n                $platform_logo_h = max(1, (int) ($platform['logo_h'] ?? 42));\n              ?>\n              <a class=\"reviews-v1__platform\" href=\"<?= htmlspecialchars($platform['url']) ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <img\n                  class=\"reviews-v1__platform-logo\"\n                  src=\"<?= htmlspecialchars($platform['logo']) ?>\"\n                  alt=\"\"\n                  width=\"<?= $platform_logo_w ?>\"\n                  height=\"<?= $platform_logo_h ?>\"\n                  style=\"--reviews-v1-platform-logo-w: <?= $platform_logo_w ?>px; --reviews-v1-platform-logo-h: <?= $platform_logo_h ?>px\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n                <div class=\"reviews-v1__platform-rating\">\n                  <span class=\"reviews-v1__platform-score bodytext-lg\"><?= htmlspecialchars($platform['rating']) ?><\/span>\n                  <?php $reviews_v1_render_stars((float) $platform['rating'], 'lg'); ?>\n                <\/div>\n                <p class=\"reviews-v1__platform-count bodytext-strong\"><?= htmlspecialchars($platform['count']) ?><\/p>\n              <\/a>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"reviews-v1__cta\">\n        <div class=\"reviews-v1__cta-inner\">\n          <div class=\"reviews-v1__cta-bg\" aria-hidden=\"true\">\n            <img class=\"reviews-v1__cta-pattern\" src=\"<?= htmlspecialchars($cta_pattern_src) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n          <\/div>\n\n          <?php if ($has_cta_icon): ?>\n          <span class=\"reviews-v1__cta-icon\" aria-hidden=\"true\">\n            <span class=\"reviews-v1__cta-icon-mark\"><\/span>\n          <\/span>\n          <?php endif; ?>\n\n          <div class=\"reviews-v1__cta-copy stack stack--sm\">\n            <p class=\"reviews-v1__cta-title megatext-md\"><?= htmlspecialchars($cta_title) ?><\/p>\n            <p class=\"reviews-v1__cta-text bodytext-lg\"><?= htmlspecialchars($cta_text) ?><\/p>\n          <\/div>\n\n          <div class=\"reviews-v1__cta-actions stack stack--md\">\n            <button type=\"button\" class=\"btn btn--white\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\">\n              <?= htmlspecialchars($cta_btn_label) ?>\n            <\/button>\n            <div class=\"reviews-v1__cta-notes bodytext\">\n              <?php foreach ($cta_notes as $index => $note): ?>\n                <?php if ($index > 0): ?>\n                  <span class=\"reviews-v1__cta-dot\" aria-hidden=\"true\"><\/span>\n                <?php endif; ?>\n                <span><?= htmlspecialchars($note) ?><\/span>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"reviews-v1__mobile-actions\">\n        <a class=\"btn btn--secondary reviews-v1__all-btn\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n          <?= htmlspecialchars($all_link_label) ?>\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "treatment-plans-variant-1": "<?php\n  $plan_count = count($plans);\n  $is_scrollable_track = $plan_count > 3;\n?>\n<section\n  class=\"treatment-plans-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?><?= $is_scrollable_track ? ' treatment-plans-v1--scrollable' : '' ?>\"\n  style=\"--treatment-plans-v1-visible-count: <?= (int) $plan_count ?>; --treatment-plans-v1-check-icon-src: url('<?= htmlspecialchars('\/assets\/src\/img\/treatment-plans\/icon-check.svg') ?>')\"\n  data-plan-count=\"<?= (int) $plan_count ?>\"\n>\n  <div class=\"container\">\n    <div class=\"treatment-plans-v1__inner stack stack--xl\">\n      <div class=\"treatment-plans-v1__head\">\n        <div class=\"treatment-plans-v1__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'treatment-plans-v1__eyebrow') ?>\n          <<?= $heading_level ?> class=\"treatment-plans-v1__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n          <p class=\"treatment-plans-v1__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n\n        <div class=\"treatment-plans-v1__head-aside\">\n          <div class=\"treatment-plans-v1__trust\">\n            <svg class=\"icon treatment-plans-v1__trust-icon\" width=\"26\" height=\"40\" aria-hidden=\"true\">\n              <use href=\"#icon-shield\"><\/use>\n            <\/svg>\n            <p class=\"treatment-plans-v1__trust-text bodytext-lg-compact\"><?= htmlspecialchars($trust_label) ?><\/p>\n          <\/div>\n          <div class=\"treatment-plans-v1__slider-toolbar\">\n            <div class=\"treatment-plans-v1__slider-nav slider-nav slider-nav--glass\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий план лечения\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий план лечения\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"treatment-plans-v1__slider-foot slider-foot\">\n        <div class=\"treatment-plans-v1__carousel\">\n          <div class=\"treatment-plans-v1__slider swiper\">\n            <div class=\"swiper-wrapper\">\n            <?php foreach ($plans as $index => $plan): ?>\n              <?php\n              $trigger_id = 'treatment-plans-v1-trigger-' . ($index + 1);\n              $panel_id = 'treatment-plans-v1-panel-' . ($index + 1);\n              $plan_icon = trim((string) ($plan['icon'] ?? ''));\n              $has_plan_icon = $plan_icon !== '';\n              $plan_features = [];\n              foreach (($plan['features'] ?? []) as $feature) {\n                  $feature_text = trim((string) $feature);\n                  if ($feature_text !== '') {\n                      $plan_features[] = $feature_text;\n                  }\n              }\n              ?>\n              <div class=\"swiper-slide\">\n                <article class=\"treatment-plans-v1__card\">\n                  <button\n                    type=\"button\"\n                    class=\"treatment-plans-v1__plan-trigger\"\n                    id=\"<?= htmlspecialchars($trigger_id) ?>\"\n                    aria-expanded=\"false\"\n                    aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n                    data-treatment-plans-v1-trigger\n                  >\n                    <span class=\"treatment-plans-v1__plan-icon\" aria-hidden=\"true\">\n                      <span\n                        class=\"treatment-plans-v1__plan-icon-glyph\"\n                        style=\"--treatment-plans-v1-plan-icon-src: url('<?= htmlspecialchars($plan['icon']) ?>')\"\n                      ><\/span>\n                    <\/span>\n                    <span class=\"treatment-plans-v1__plan-heading\">\n                      <span class=\"treatment-plans-v1__plan-title megatext-sm\"><?= htmlspecialchars($plan['title']) ?><\/span>\n                      <span class=\"treatment-plans-v1__plan-price bodytext-lg\">от <?= htmlspecialchars($plan['price']) ?><\/span>\n                    <\/span>\n                    <svg class=\"icon treatment-plans-v1__plan-chevron\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-chevron-down\"><\/use>\n                    <\/svg>\n                  <\/button>\n\n                  <div\n                    class=\"treatment-plans-v1__plan-panel\"\n                    id=\"<?= htmlspecialchars($panel_id) ?>\"\n                    role=\"region\"\n                    aria-labelledby=\"<?= htmlspecialchars($trigger_id) ?>\"\n                  >\n                    <div class=\"treatment-plans-v1__plan-panel-inner\">\n                      <div class=\"treatment-plans-v1__card-media\">\n                        <img\n                          class=\"treatment-plans-v1__card-photo\"\n                          src=\"<?= htmlspecialchars($plan['image']) ?>\"\n                          alt=\"\"\n                          width=\"520\"\n                          height=\"290\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/div>\n\n                      <div class=\"treatment-plans-v1__card-body stack stack--sm\">\n                        <div class=\"treatment-plans-v1__card-head<?= $has_plan_icon ? '' : ' treatment-plans-v1__card-head--no-icon' ?>\">\n                          <?php if ($has_plan_icon): ?>\n                            <span class=\"treatment-plans-v1__card-icon\" aria-hidden=\"true\">\n                              <img src=\"<?= htmlspecialchars($plan_icon) ?>\" alt=\"\" width=\"39\" height=\"39\" loading=\"lazy\" decoding=\"async\">\n                            <\/span>\n                          <?php endif; ?>\n                          <h3 class=\"treatment-plans-v1__card-title megatext-md\"><?= htmlspecialchars($plan['title']) ?><\/h3>\n                        <\/div>\n                        <p class=\"treatment-plans-v1__card-summary bodytext-lg\"><?= htmlspecialchars($plan['summary']) ?><\/p>\n\n                        <?php if ($plan_features !== []): ?>\n                        <div class=\"treatment-plans-v1__features\">\n                          <div class=\"treatment-plans-v1__features-divider\" aria-hidden=\"true\"><\/div>\n                          <ul class=\"treatment-plans-v1__features-list\">\n                            <?php foreach ($plan_features as $feature_text): ?>\n                              <li class=\"treatment-plans-v1__feature\">\n                                <span class=\"treatment-plans-v1__feature-icon\" aria-hidden=\"true\"><\/span>\n                                <span class=\"treatment-plans-v1__feature-text bodytext-md\"><?= htmlspecialchars($feature_text) ?><\/span>\n                              <\/li>\n                            <?php endforeach; ?>\n                          <\/ul>\n                          <div class=\"treatment-plans-v1__features-divider\" aria-hidden=\"true\"><\/div>\n                        <\/div>\n                        <?php endif; ?>\n\n                        <div class=\"treatment-plans-v1__card-foot\">\n                          <div class=\"treatment-plans-v1__price\">\n                            <span class=\"treatment-plans-v1__price-label bodytext-md\">от<\/span>\n                            <span class=\"treatment-plans-v1__price-value megatext\"><?= htmlspecialchars($plan['price']) ?><\/span>\n                          <\/div>\n                          <a class=\"treatment-plans-v1__more link-arrow bodytext-md\" href=\"<?= htmlspecialchars($plan['url']) ?>\">\n                            Подробнее\n                            <svg class=\"icon treatment-plans-v1__more-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                              <use href=\"#icon-arrow-right\"><\/use>\n                            <\/svg>\n                          <\/a>\n                          <a class=\"btn btn--primary treatment-plans-v1__plan-more\" href=\"<?= htmlspecialchars($plan['url']) ?>\">Подробнее<\/a>\n                        <\/div>\n                      <\/div>\n                    <\/div>\n                  <\/div>\n                <\/article>\n              <\/div>\n            <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"slider-pagination-host\">\n          <div class=\"treatment-plans-v1__pagination slider-pagination--dots swiper-pagination\"><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"treatment-plans-v1__disclaimer\">\n        <svg class=\"icon treatment-plans-v1__disclaimer-icon\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n          <use href=\"#icon-info\"><\/use>\n        <\/svg>\n        <p class=\"treatment-plans-v1__disclaimer-text bodytext-md\"><?= htmlspecialchars($disclaimer) ?><\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "brands-variant-2": "<section class=\"brands-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y\">\n  <div class=\"container\">\n    <div class=\"brands-v2__inner\">\n      <div class=\"brands-v2__copy stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'brands-v2__eyebrow') ?>\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"brands-v2__title megatext\"><?= nl2br(htmlspecialchars($title)) ?><\/<?= $heading_level ?>>\n          <p class=\"brands-v2__subtitle leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"brands-v2__carousel-col\">\n        <div class=\"brands-v2__slider swiper\">\n          <div class=\"swiper-wrapper\">\n            <?php foreach ($slides as $slide): ?>\n              <div class=\"swiper-slide\">\n                <div class=\"brands-v2__slide-track\">\n                  <ul class=\"brands-v2__grid\" aria-label=\"Бренды и технологии\">\n                  <?php foreach ($slide as $logo): ?>\n                    <li class=\"brands-v2__card\">\n                      <img\n                        class=\"brands-v2__logo\"\n                        src=\"<?= htmlspecialchars($logo['src']) ?>\"\n                        alt=\"<?= htmlspecialchars($logo['alt'] ?? '') ?>\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/li>\n                  <?php endforeach; ?>\n                  <\/ul>\n                <\/div>\n              <\/div>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n\n        <?php if (count($slides) > 1): ?>\n          <div class=\"brands-v2__controls slider-controls slider-nav--glass\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий слайд\">\n              <svg class=\"icon brands-v2__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                <use href=\"#icon-slider-arrow\"><\/use>\n              <\/svg>\n            <\/button>\n\n            <div class=\"slider-pagination-host\">\n              <div class=\"brands-v2__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n            <\/div>\n\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий слайд\">\n              <svg class=\"icon brands-v2__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                <use href=\"#icon-slider-arrow\"><\/use>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "utp-in-numbers-variant-2": "<section class=\"utp-numbers-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"utp-numbers-v2__inner\">\n      <header class=\"utp-numbers-v2__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'utp-numbers-v2__eyebrow') ?>\n        <<?= $heading_level ?> class=\"utp-numbers-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n      <\/header>\n\n      <div class=\"utp-numbers-v2__scroll\">\n        <div class=\"utp-numbers-v2__track\">\n          <div class=\"utp-numbers-v2__divider\" aria-hidden=\"true\">\n            <div class=\"utp-numbers-v2__divider-grid\">\n              <?php foreach ($items as $_): ?>\n                <span class=\"utp-numbers-v2__dot\"><\/span>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n\n          <div class=\"utp-numbers-v2__grid\">\n            <?php foreach ($items as $item): ?>\n              <?php\n                $item_image = trim((string) ($item['image'] ?? ''));\n                $has_item_image = $item_image !== '';\n              ?>\n              <article class=\"utp-numbers-v2__item<?= $has_item_image ? '' : ' utp-numbers-v2__item--no-image' ?>\">\n                <div class=\"utp-numbers-v2__stat\">\n                  <p class=\"utp-numbers-v2__value megatext\"><?= htmlspecialchars($item['value']) ?><\/p>\n                  <p class=\"utp-numbers-v2__label bodytext-strong\"><?= htmlspecialchars($item['label']) ?><\/p>\n                <\/div>\n                <p class=\"utp-numbers-v2__text bodytext\"><?= htmlspecialchars($item['text']) ?><\/p>\n                <?php if ($has_item_image): ?>\n                  <div class=\"utp-numbers-v2__media\">\n                    <img\n                      class=\"utp-numbers-v2__img\"\n                      src=\"<?= htmlspecialchars($item_image) ?>\"\n                      alt=\"<?= htmlspecialchars($item['alt'] ?? '') ?>\"\n                      loading=\"lazy\"\n                      decoding=\"async\"\n                    >\n                  <\/div>\n                <?php endif; ?>\n              <\/article>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "gallery-variant-1": "<?php\n  $gallery_v1_initial_index = max(0, min(count($items) - 1, (int) $initial_index));\n?>\n<section class=\"gallery-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"gallery-v1__inner stack stack--xl\">\n      <div class=\"gallery-v1__top\">\n        <div class=\"gallery-v1__copy stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'gallery-v1__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"gallery-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n            <p class=\"gallery-v1__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n\n          <button type=\"button\" class=\"btn btn--primary gallery-v1__cta\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\">\n            <?= htmlspecialchars($cta_label) ?>\n          <\/button>\n        <\/div>\n\n        <div class=\"gallery-v1__hero swiper\">\n          <div class=\"swiper-wrapper\">\n            <?php foreach ($items as $item): ?>\n              <div class=\"swiper-slide gallery-v1__hero-slide\">\n                <img\n                  class=\"gallery-v1__hero-img\"\n                  src=\"<?= htmlspecialchars($item['src'] ?? '') ?>\"\n                  alt=\"<?= htmlspecialchars($item['alt'] ?? '') ?>\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/div>\n            <?php endforeach; ?>\n          <\/div>\n          <span class=\"gallery-v1__hero-loader ui-preloader-overlay\" data-gallery-v1-hero-loader aria-hidden=\"true\">\n            <span class=\"ui-preloader\"><\/span>\n          <\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"gallery-v1__bottom\">\n        <div class=\"gallery-v1__carousel\">\n          <div class=\"gallery-v1__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($items as $i => $item): ?>\n                <?php\n                  $is_active = $i === $gallery_v1_initial_index;\n                  $thumb_class = 'gallery-v1__thumb';\n                  if ($is_active) $thumb_class .= ' is-active';\n                  $thumb_alt = trim((string) ($item['alt'] ?? ''));\n                  $thumb_label = $thumb_alt !== ''\n                    ? 'Показать фото: ' . $thumb_alt\n                    : 'Показать фото ' . ($i + 1);\n                ?>\n                <div class=\"swiper-slide gallery-v1__slide\">\n                  <button\n                    type=\"button\"\n                    class=\"<?= htmlspecialchars($thumb_class) ?>\"\n                    data-gallery-v1-thumb\n                    data-gallery-v1-index=\"<?= (int) $i ?>\"\n                    aria-label=\"<?= htmlspecialchars($thumb_label) ?>\"\n                    <?= $is_active ? 'aria-current=\"true\"' : '' ?>\n                  >\n                    <span class=\"gallery-v1__thumb-frame\" aria-hidden=\"true\">\n                      <span class=\"gallery-v1__thumb-inner\">\n                        <img\n                          class=\"gallery-v1__thumb-img\"\n                          src=\"<?= htmlspecialchars($item['src'] ?? '') ?>\"\n                          alt=\"<?= htmlspecialchars($item['alt'] ?? '') ?>\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                          data-gallery-v1-src=\"<?= htmlspecialchars($item['src'] ?? '') ?>\"\n                          data-gallery-v1-alt=\"<?= htmlspecialchars($item['alt'] ?? '') ?>\"\n                        >\n                      <\/span>\n                    <\/span>\n                  <\/button>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($items) > 1): ?>\n          <div class=\"gallery-v1__controls slider-controls slider-nav--glass\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущее фото\">\n              <svg class=\"icon gallery-v1__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                <use href=\"#icon-slider-arrow\"><\/use>\n              <\/svg>\n            <\/button>\n\n            <div class=\"slider-pagination-host\">\n              <div class=\"gallery-v1__pagination slider-pagination--dots is-always swiper-pagination\" aria-hidden=\"true\"><\/div>\n            <\/div>\n\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующее фото\">\n              <svg class=\"icon gallery-v1__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                <use href=\"#icon-slider-arrow\"><\/use>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "about-variant-1": "<?php\n  $more_url = trim((string) $more_url);\n  $has_more_link = $more_url !== '';\n?>\n<section class=\"about-v1 about-v1--profile-<?= htmlspecialchars($profile_side) ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"about-v1__grid\">\n      <div class=\"about-v1__main\">\n        <div class=\"about-v1__copy-head stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'about-v1__eyebrow') ?>\n          <<?= $heading_level ?> class=\"about-v1__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n        <\/div>\n\n        <div class=\"about-v1__scroll\">\n          <div class=\"about-v1__copy-viewport\" tabindex=\"0\">\n            <div class=\"about-v1__copy-body stack stack--md\">\n              <p class=\"about-v1__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n              <div class=\"about-v1__text bodytext-md\">\n                <?php foreach ($paragraphs as $paragraph): ?>\n                  <p><?= htmlspecialchars($paragraph) ?><\/p>\n                <?php endforeach; ?>\n              <\/div>\n              <p class=\"about-v1__closing leadtext-xl\"><?= htmlspecialchars($closing) ?><\/p>\n            <\/div>\n          <\/div>\n          <div class=\"about-v1__copy-fade\" aria-hidden=\"true\"><\/div>\n          <div class=\"about-v1__scrollbar\" aria-hidden=\"true\">\n            <div class=\"about-v1__scrollbar-thumb\"><\/div>\n          <\/div>\n        <\/div>\n\n        <button\n          type=\"button\"\n          class=\"about-v1__toggle bodytext-md\"\n          data-about-v1-toggle\n          data-expand-label=\"<?= htmlspecialchars($expand_label) ?>\"\n          data-collapse-label=\"<?= htmlspecialchars($collapse_label) ?>\"\n          aria-expanded=\"false\"\n          hidden\n        >\n          <span data-about-v1-toggle-label><?= htmlspecialchars($expand_label) ?><\/span>\n        <\/button>\n\n        <?php if ($has_more_link): ?>\n          <a class=\"about-v1__more link-arrow bodytext-md\" href=\"<?= htmlspecialchars($more_url) ?>\">\n            <?= htmlspecialchars($more_label) ?>\n            <svg class=\"icon about-v1__more-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n        <?php endif; ?>\n      <\/div>\n\n      <aside class=\"about-v1__profile\">\n        <div class=\"about-v1__profile-media\">\n          <img\n            class=\"about-v1__profile-photo\"\n            src=\"<?= htmlspecialchars($doctor_photo) ?>\"\n            alt=\"\"\n            width=\"660\"\n            height=\"518\"\n            loading=\"lazy\"\n            decoding=\"async\"\n          >\n        <\/div>\n        <div class=\"about-v1__profile-foot\">\n          <div class=\"about-v1__profile-meta stack stack--sm\">\n            <p class=\"about-v1__profile-name leadtext-xl\"><?= htmlspecialchars($doctor_name) ?><\/p>\n            <p class=\"about-v1__profile-role bodytext-md\"><?= htmlspecialchars($doctor_role) ?><\/p>\n          <\/div>\n          <img\n            class=\"about-v1__profile-sign\"\n            src=\"<?= htmlspecialchars($doctor_signature) ?>\"\n            alt=\"\"\n            width=\"214\"\n            height=\"102\"\n            loading=\"lazy\"\n            decoding=\"async\"\n          >\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "news-variant-2": "<section class=\"news-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"news\">\n  <div class=\"container\">\n    <div class=\"news-v2__inner\">\n      <div class=\"news-v2__head\">\n        <div class=\"news-v2__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'news-v2__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"news-v2__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <a class=\"news-v2__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n        <?= htmlspecialchars($all_link_label) ?>\n        <svg class=\"icon news-v2__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n          <use href=\"#icon-arrow-right\"><\/use>\n        <\/svg>\n      <\/a>\n\n      <div class=\"news-v2__slider-foot slider-foot\">\n        <div class=\"news-v2__carousel\">\n          <div class=\"news-v2__slider swiper\">\n            <div class=\"swiper-wrapper news-v2__grid\">\n              <?php foreach ($items as $item): ?>\n                <div class=\"swiper-slide\">\n                  <a\n                    class=\"news-v2__card\"\n                    href=\"<?= htmlspecialchars($item['url']) ?>\"\n                  >\n                    <div class=\"news-v2__card-media\">\n                      <img\n                        class=\"news-v2__card-img\"\n                        src=\"<?= htmlspecialchars($item['image']) ?>\"\n                        alt=\"\"\n                        width=\"290\"\n                        height=\"288\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/div>\n                    <div class=\"news-v2__card-content\">\n                      <?php\n                        $has_tag = trim((string)($item['category'] ?? '')) !== '';\n                        $has_expert = trim((string)($item['expert'] ?? '')) !== '';\n                        $has_date = trim((string)($item['date'] ?? '')) !== '';\n                        $has_read = trim((string)($item['read_time'] ?? '')) !== '';\n                      ?>\n                      <?php if ($has_tag || $has_expert): ?>\n                        <div class=\"news-v2__card-tags\">\n                          <?php if ($has_tag): ?>\n                            <span class=\"news-v2__tag bodytext-md\"><?= htmlspecialchars($item['category']) ?><\/span>\n                          <?php endif; ?>\n                          <?php if ($has_expert): ?>\n                            <span class=\"news-v2__expert bodytext-sm\"><?= htmlspecialchars($item['expert']) ?><\/span>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endif; ?>\n                      <p class=\"news-v2__card-title titletext-sm\"><?= htmlspecialchars($item['title']) ?><\/p>\n                      <?php if ($has_date || $has_read): ?>\n                        <div class=\"news-v2__meta bodytext\">\n                          <?php if ($has_date): ?>\n                            <time class=\"news-v2__meta-date\"><?= htmlspecialchars($item['date']) ?><\/time>\n                          <?php endif; ?>\n                          <?php if ($has_date && $has_read): ?>\n                            <span class=\"news-v2__meta-dot\" aria-hidden=\"true\"><\/span>\n                          <?php endif; ?>\n                          <?php if ($has_read): ?>\n                            <span class=\"news-v2__meta-read\">\n                              <svg class=\"icon news-v2__meta-clock\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                                <use href=\"#icon-clock\"><\/use>\n                              <\/svg>\n                              <span><?= htmlspecialchars($item['read_time']) ?><\/span>\n                            <\/span>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endif; ?>\n                    <\/div>\n                  <\/a>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"news-v2__pagination-host slider-pagination-host\">\n          <div class=\"news-v2__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "promo-variant-2": "<section\n  class=\"promo-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n>\n  <div class=\"container\">\n    <div class=\"promo-v2__inner stack stack--xl\">\n      <div class=\"promo-v2__head\">\n        <div class=\"promo-v2__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'promo-v2__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"promo-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <\/div>\n        <\/div>\n\n        <div class=\"promo-v2__head-actions\">\n          <a class=\"promo-v2__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n            <?= htmlspecialchars($all_link_label) ?>\n            <svg class=\"icon promo-v2__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n\n          <?php if (count($slides) > 1): ?>\n            <div class=\"promo-v2__slider-nav slider-nav slider-nav--brand\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущие предложения\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующие предложения\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"promo-v2__slider-foot slider-foot\">\n        <div class=\"promo-v2__carousel\">\n          <div class=\"promo-v2__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($slides as $slide): ?>\n                <?php\n                  $featured = $slide['featured'] ?? [];\n                  $cards = $slide['cards'] ?? [];\n                  $featured_image = trim((string) ($featured['image'] ?? ''));\n                  $has_featured_image = $featured_image !== '';\n                  $featured_badge = trim((string) ($featured['badge'] ?? ''));\n                  $has_featured_badge = $featured_badge !== '';\n                  $badge_icon = trim((string) ($featured['badge_icon'] ?? ''));\n                  $has_badge_icon = $badge_icon !== '';\n                ?>\n                <div class=\"swiper-slide\">\n                  <div class=\"promo-v2__grid\">\n                    <article class=\"promo-v2__featured<?= $has_featured_image ? '' : ' promo-v2__featured--no-image' ?>\">\n                      <?php if ($has_featured_image): ?>\n                        <div class=\"promo-v2__featured-media\" aria-hidden=\"true\">\n                          <img\n                            src=\"<?= htmlspecialchars($featured_image) ?>\"\n                            alt=\"\"\n                            loading=\"lazy\"\n                            decoding=\"async\"\n                          >\n                        <\/div>\n                        <div class=\"promo-v2__featured-overlay\" aria-hidden=\"true\"><\/div>\n                      <?php endif; ?>\n\n                      <div class=\"promo-v2__featured-body\">\n                        <?php if ($has_featured_badge): ?>\n                          <p class=\"promo-v2__badge uibtntext<?= $has_badge_icon ? '' : ' promo-v2__badge--no-mark' ?>\">\n                            <?php if ($has_badge_icon): ?>\n                              <span\n                                class=\"promo-v2__badge-mark\"\n                                style=\"--promo-v2-badge-icon-src: url('<?= htmlspecialchars($badge_icon, ENT_QUOTES) ?>')\"\n                                aria-hidden=\"true\"\n                              >\n                                <span class=\"promo-v2__badge-icon-glyph\"><\/span>\n                              <\/span>\n                            <?php endif; ?>\n                            <span class=\"promo-v2__badge-text\"><?= htmlspecialchars($featured_badge) ?><\/span>\n                          <\/p>\n                        <?php endif; ?>\n\n                        <div class=\"promo-v2__featured-copy stack stack--sm\">\n                          <p class=\"promo-v2__featured-title megatext-md\"><?= $featured['title'] ?? '' ?><\/p>\n                          <p class=\"promo-v2__featured-text bodytext-lg-regular\"><?= htmlspecialchars($featured['text'] ?? '') ?><\/p>\n                        <\/div>\n\n                        <a class=\"promo-v2__featured-btn btn btn--primary uibtntext\" href=\"<?= htmlspecialchars($featured['button_url'] ?? '#') ?>\">\n                          <?= htmlspecialchars($featured['button_label'] ?? '') ?>\n                        <\/a>\n                      <\/div>\n                    <\/article>\n\n                    <?php foreach ($cards as $card): ?>\n                      <?php\n                        $card_image = trim((string) ($card['image'] ?? ''));\n                        $has_card_image = $card_image !== '';\n                        $card_icon = trim((string) ($card['icon'] ?? ''));\n                        $has_card_icon = $card_icon !== '';\n                        $card_class = 'promo-v2__card';\n                        if (($card['variant'] ?? '') === 'tint') {\n                            $card_class .= ' promo-v2__card--tint';\n                        } else {\n                            $card_class .= ' promo-v2__card--overlay';\n                        }\n                        if (!$has_card_image) {\n                            $card_class .= ' promo-v2__card--no-image';\n                        }\n                      ?>\n                      <a class=\"<?= htmlspecialchars($card_class) ?>\" href=\"<?= htmlspecialchars($card['url']) ?>\">\n                        <?php if ($has_card_image): ?>\n                          <div class=\"promo-v2__card-media\" aria-hidden=\"true\">\n                            <img\n                              src=\"<?= htmlspecialchars($card_image) ?>\"\n                              alt=\"\"\n                              loading=\"lazy\"\n                              decoding=\"async\"\n                            >\n                          <\/div>\n                        <?php endif; ?>\n                        <?php if (($card['variant'] ?? '') === 'overlay' && $has_card_image): ?>\n                          <div class=\"promo-v2__card-overlay\" aria-hidden=\"true\"><\/div>\n                        <?php endif; ?>\n\n                        <span class=\"promo-v2__card-icon<?= $has_card_icon ? '' : ' promo-v2__card-icon--no-icon' ?>\" aria-hidden=\"true\">\n                          <?php if ($has_card_icon): ?>\n                            <img\n                              class=\"promo-v2__card-icon-img\"\n                              src=\"<?= htmlspecialchars($card_icon) ?>\"\n                              alt=\"\"\n                              width=\"32\"\n                              height=\"32\"\n                              loading=\"lazy\"\n                              decoding=\"async\"\n                            >\n                          <?php endif; ?>\n                        <\/span>\n\n                        <div class=\"promo-v2__card-body stack stack--sm\">\n                          <p class=\"promo-v2__card-title megatext-md\"><?= htmlspecialchars($card['title']) ?><\/p>\n                          <p class=\"promo-v2__card-text bodytext-lg-regular\"><?= htmlspecialchars($card['text']) ?><\/p>\n                        <\/div>\n                      <\/a>\n                    <?php endforeach; ?>\n                  <\/div>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($slides) > 1): ?>\n          <div class=\"slider-pagination-host\">\n            <div class=\"promo-v2__pagination slider-pagination--dots swiper-pagination\"><\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cta-variant-1": "<?php\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $features = \\app\\generator\\ContentPresence::items($features, ['text']);\n  $has_intro = $has_text($eyebrow) || $has_text($title) || $has_text($lead);\n?>\n<?php\n  $bg_image = trim((string) $bg_image);\n  $bg_image_mobile = trim((string) $bg_image_mobile);\n  $has_bg_image = $bg_image !== '' || $bg_image_mobile !== '';\n  $bg_image_fallback = $bg_image !== '' ? $bg_image : $bg_image_mobile;\n  $cta_v1_section_classes = ['cta-v1'];\n  if ($layout === 'fullwidth') {\n      $cta_v1_section_classes[] = 'cta-v1--fullwidth';\n      if ($has_bg_image) {\n          $cta_v1_section_classes[] = 'has-block-bg';\n      }\n  } else {\n      $cta_v1_section_classes = array_merge($cta_v1_section_classes, \\app\\generator\\SectionBg::classes($section_bg));\n  }\n?>\n<section class=\"<?= htmlspecialchars(implode(' ', $cta_v1_section_classes)) ?>\">\n  <?php if ($layout === 'fullwidth'): ?>\n    <div class=\"cta-v1__bg block-bg\" aria-hidden=\"true\">\n      <picture>\n        <?php if (!empty($bg_image_mobile)): ?>\n          <source media=\"(max-width: 768px)\" srcset=\"<?= htmlspecialchars($bg_image_mobile) ?>\">\n        <?php endif; ?>\n        <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" loading=\"lazy\" decoding=\"async\">\n      <\/picture>\n    <\/div>\n\n    <div class=\"container\">\n      <div class=\"cta-v1__inner\">\n  <?php else: ?>\n  <div class=\"container\">\n    <div class=\"cta-v1__card\">\n      <?php if ($has_bg_image): ?>\n        <div class=\"cta-v1__bg\" aria-hidden=\"true\">\n          <picture>\n            <?php if ($bg_image_mobile !== '' && $bg_image !== ''): ?>\n              <source media=\"(max-width: 768px)\" srcset=\"<?= htmlspecialchars($bg_image_mobile) ?>\">\n            <?php endif; ?>\n            <img src=\"<?= htmlspecialchars($bg_image_fallback) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" loading=\"lazy\" decoding=\"async\">\n          <\/picture>\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"cta-v1__inner\">\n  <?php endif; ?>\n        <?php if ($has_intro): ?><div class=\"cta-v1__intro stack stack--md\">\n          <?php if ($has_text($eyebrow) || $has_text($title)): ?><div class=\"cta-v1__head\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cta-v1__eyebrow') ?>\n            <?php if ($has_text($title)): ?><<?= $heading_level ?> class=\"cta-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>><?php endif; ?>\n          <\/div><?php endif; ?>\n          <?php if ($has_text($lead)): ?><p class=\"cta-v1__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p><?php endif; ?>\n        <\/div><?php endif; ?>\n\n        <?php if ($features !== []): ?><ul class=\"cta-v1__features\">\n          <?php foreach ($features as $feature): ?>\n            <?php\n            $feature_icon = trim((string) ($feature['icon'] ?? ''));\n            $has_feature_icon = $feature_icon !== '';\n            ?>\n            <li class=\"cta-v1__feature<?= $has_feature_icon ? '' : ' cta-v1__feature--no-icon' ?>\">\n              <?php if ($has_feature_icon): ?>\n                <span class=\"cta-v1__feature-icon\" aria-hidden=\"true\">\n                  <img src=\"<?= htmlspecialchars($feature_icon) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n                <\/span>\n              <?php endif; ?>\n              <span class=\"cta-v1__feature-text bodytext-lg\"><?= htmlspecialchars($feature['text']) ?><\/span>\n            <\/li>\n          <?php endforeach; ?>\n        <\/ul><?php endif; ?>\n\n        <form class=\"cta-v1__form popup-form--consent-gated\" action=\"<?=$form_data['action']?>\" method=\"post\" <?=$form_data['attr']?>>\n          <div class=\"cta-v1__form-grid\">\n            <label class=\"cta-v1__field\">\n                <select class=\"cta-v1__input cta-v1__select field__input\" name=\"<?=$form_data['fields']['concern']['name']?>\" aria-label=\"Что вас беспокоит?\">\n                    <?php foreach ($concerns as $label => $value): ?>\n                        <option value=\"<?= htmlspecialchars($value) ?>\"<?=$value==$form_data['fields']['concern']['value']?' selected':''?><?=$value===''?' disabled':''?>>\n                            <?= htmlspecialchars($label) ?>\n                        <\/option>\n                    <?php endforeach; ?>\n                <\/select>\n              <span class=\"cta-v1__select-icon\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                  <use href=\"#icon-chevron-down\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/label>\n\n              <label class=\"cta-v1__field\">\n                  <input class=\"cta-v1__input field__input\" type=\"text\" name=\"<?=$form_data['fields']['name']['name']?>\" value=\"<?=$form_data['fields']['name']['value']?>\" aria-label=\"Имя\" placeholder=\"<?= htmlspecialchars($form_name_label) ?>\" autocomplete=\"name\" required>\n              <\/label>\n\n              <label class=\"cta-v1__field\">\n                  <input class=\"cta-v1__input field__input\" type=\"tel\" name=\"<?=$form_data['fields']['phone']['name']?>\" value=\"<?=$form_data['fields']['phone']['value']?>\" aria-label=\"Телефон\" placeholder=\"<?= htmlspecialchars($form_phone_label) ?>\" autocomplete=\"tel\" required>\n              <\/label>\n\n            <button type=\"submit\" class=\"cta-v1__submit popup-form__submit btn btn--primary\">\n              <?= htmlspecialchars($form_submit_label) ?>\n            <\/button>\n          <\/div>\n\n          <label class=\"cta-v1__consent popup-form__consent bodytext-sm\">\n            <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n            <span class=\"popup-form__consent-text\"><?= $consent_html ?><\/span>\n          <\/label>\n        <\/form>\n      <\/div>\n  <?php if ($layout === 'fullwidth'): ?>\n    <\/div>\n  <?php else: ?>\n    <\/div>\n  <\/div>\n  <?php endif; ?>\n<\/section>",
            "navigation-variant-1": "<?php\n  $nav_label = trim((string) $nav_label);\n  $white_surface = !empty($white_surface);\n  $visible_items = [];\n  foreach ($items as $item) {\n    $title = trim((string) ($item['title'] ?? ''));\n    if ($title === '') {\n      continue;\n    }\n    $url = \\app\\generator\\AnchorId::href(\n      (string) ($item['url'] ?? ''),\n      $title,\n      ''\n    );\n    $icon = trim((string) ($item['icon'] ?? ''));\n    $visible_items[] = [\n      'title' => $title,\n      'url' => $url,\n      'icon' => $icon,\n    ];\n  }\n?>\n<?php if ($visible_items !== []): ?>\n<section\n  class=\"navigation-v1 section-no-gap-top<?= $white_surface ? ' navigation-v1--surface-white' : '' ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  id=\"<?= htmlspecialchars($section_id) ?>\"\n  data-navigation-v1\n>\n  <div class=\"container\">\n    <div class=\"navigation-v1__viewport\">\n      <button\n        class=\"navigation-v1__overflow-btn navigation-v1__overflow-btn--prev\"\n        type=\"button\"\n        data-navigation-v1-prev\n        aria-label=\"Прокрутить влево\"\n        hidden\n      >\n        <span class=\"navigation-v1__overflow-btn-icon\" aria-hidden=\"true\"><\/span>\n      <\/button>\n      <div class=\"navigation-v1__scroll\" data-navigation-v1-scroll>\n        <nav class=\"navigation-v1__bar\" <?= $nav_label !== '' ? 'aria-label=\"' . htmlspecialchars($nav_label) . '\"' : '' ?>>\n          <div class=\"navigation-v1__desktop\" data-navigation-v1-desktop>\n          <ul class=\"navigation-v1__list\">\n            <?php foreach ($visible_items as $item): ?>\n              <li class=\"navigation-v1__item\">\n                <?php if ($item['url'] !== ''): ?>\n                  <a\n                    class=\"navigation-v1__link\"\n                    href=\"<?= htmlspecialchars($item['url']) ?>\"\n                    data-navigation-v1-link\n                  >\n                    <?php if ($item['icon'] !== ''): ?>\n                      <span class=\"navigation-v1__icon\" aria-hidden=\"true\">\n                        <img\n                          class=\"navigation-v1__icon-img\"\n                          src=\"<?= htmlspecialchars($item['icon']) ?>\"\n                          alt=\"\"\n                          width=\"44\"\n                          height=\"44\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/span>\n                    <?php endif; ?>\n                    <span class=\"navigation-v1__title bodytext-lg-regular\"><?= htmlspecialchars($item['title']) ?><\/span>\n                  <\/a>\n                <?php else: ?>\n                  <span class=\"navigation-v1__link\">\n                    <?php if ($item['icon'] !== ''): ?>\n                      <span class=\"navigation-v1__icon\" aria-hidden=\"true\">\n                        <img\n                          class=\"navigation-v1__icon-img\"\n                          src=\"<?= htmlspecialchars($item['icon']) ?>\"\n                          alt=\"\"\n                          width=\"44\"\n                          height=\"44\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/span>\n                    <?php endif; ?>\n                    <span class=\"navigation-v1__title bodytext-lg-regular\"><?= htmlspecialchars($item['title']) ?><\/span>\n                  <\/span>\n                <?php endif; ?>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ul>\n          <\/div>\n\n          <?php $navigation_v1_mobile_panel_id = htmlspecialchars($section_id . '-mobile-panel', ENT_QUOTES, 'UTF-8'); ?>\n          <div class=\"navigation-v1__mobile\" data-navigation-v1-mobile>\n            <button\n              type=\"button\"\n              class=\"navigation-v1__mobile-trigger\"\n              data-navigation-v1-mobile-trigger\n              aria-expanded=\"false\"\n              aria-haspopup=\"listbox\"\n              aria-controls=\"<?= $navigation_v1_mobile_panel_id ?>\"\n            >\n              <span class=\"navigation-v1__icon navigation-v1__mobile-trigger-icon-wrap\" aria-hidden=\"true\">\n                <img\n                  class=\"navigation-v1__icon-img navigation-v1__mobile-trigger-icon\"\n                  data-navigation-v1-mobile-trigger-icon\n                  src=\"\"\n                  alt=\"\"\n                  width=\"26\"\n                  height=\"26\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n              <span class=\"navigation-v1__mobile-trigger-title bodytext-lg-regular\" data-navigation-v1-mobile-trigger-title><\/span>\n              <span class=\"navigation-v1__mobile-trigger-chevron\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                  <path d=\"M3 5L7 9L11 5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/span>\n            <\/button>\n            <div\n              class=\"navigation-v1__mobile-panel\"\n              id=\"<?= $navigation_v1_mobile_panel_id ?>\"\n              data-navigation-v1-mobile-panel\n              hidden\n            >\n              <ul class=\"navigation-v1__mobile-list\" role=\"listbox\" aria-label=\"<?= htmlspecialchars($nav_label !== '' ? $nav_label : 'Разделы страницы') ?>\">\n                <?php foreach ($visible_items as $item): ?>\n                  <li class=\"navigation-v1__item navigation-v1__mobile-item\" role=\"none\">\n                    <?php if ($item['url'] !== ''): ?>\n                      <a\n                        class=\"navigation-v1__link navigation-v1__mobile-link\"\n                        href=\"<?= htmlspecialchars($item['url']) ?>\"\n                        data-navigation-v1-link\n                        role=\"option\"\n                      >\n                        <?php if ($item['icon'] !== ''): ?>\n                          <span class=\"navigation-v1__icon\" aria-hidden=\"true\">\n                            <img\n                              class=\"navigation-v1__icon-img\"\n                              src=\"<?= htmlspecialchars($item['icon']) ?>\"\n                              alt=\"\"\n                              width=\"26\"\n                              height=\"26\"\n                              loading=\"lazy\"\n                              decoding=\"async\"\n                            >\n                          <\/span>\n                        <?php endif; ?>\n                        <span class=\"navigation-v1__title bodytext-lg-regular\"><?= htmlspecialchars($item['title']) ?><\/span>\n                      <\/a>\n                    <?php else: ?>\n                      <span class=\"navigation-v1__link navigation-v1__mobile-link\" role=\"option\">\n                        <?php if ($item['icon'] !== ''): ?>\n                          <span class=\"navigation-v1__icon\" aria-hidden=\"true\">\n                            <img\n                              class=\"navigation-v1__icon-img\"\n                              src=\"<?= htmlspecialchars($item['icon']) ?>\"\n                              alt=\"\"\n                              width=\"26\"\n                              height=\"26\"\n                              loading=\"lazy\"\n                              decoding=\"async\"\n                            >\n                          <\/span>\n                        <?php endif; ?>\n                        <span class=\"navigation-v1__title bodytext-lg-regular\"><?= htmlspecialchars($item['title']) ?><\/span>\n                      <\/span>\n                    <?php endif; ?>\n                  <\/li>\n                <?php endforeach; ?>\n              <\/ul>\n            <\/div>\n          <\/div>\n        <\/nav>\n      <\/div>\n      <button\n        class=\"navigation-v1__overflow-btn navigation-v1__overflow-btn--next\"\n        type=\"button\"\n        data-navigation-v1-next\n        aria-label=\"Прокрутить вправо\"\n        hidden\n      >\n        <span class=\"navigation-v1__overflow-btn-icon\" aria-hidden=\"true\"><\/span>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "services-variant-4": "<section\n  class=\"services-v4 services-v4--chip-<?= htmlspecialchars($chip_style === 'decor-outline' ? 'decor-outline' : 'surface') ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  data-services-v4-mobile-limit=\"<?= (int) $mobile_limit ?>\"\n  data-services-v4-desktop-rows=\"<?= (int) $desktop_rows ?>\"\n>\n  <div class=\"container\">\n    <div class=\"services-v4__inner stack stack--xl\">\n      <header class=\"services-v4__head stack stack--md<?= $show_search ? ' services-v4__head--with-search' : '' ?>\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'services-v4__eyebrow') ?>\n        <<?= $heading_level ?> class=\"services-v4__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n        <?php if ($show_search): ?>\n          <label class=\"services-v4__search field\">\n            <input\n              class=\"field__input services-v4__search-input bodytext\"\n              type=\"search\"\n              name=\"services-v4-search\"\n              placeholder=\"<?= htmlspecialchars($search_placeholder) ?>\"\n              autocomplete=\"off\"\n              data-services-v4-search\n              aria-label=\"<?= htmlspecialchars($search_placeholder) ?>\"\n            >\n            <span class=\"services-v4__search-icon\" aria-hidden=\"true\">\n              <img src=\"<?= htmlspecialchars($search_icon_src) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n            <\/span>\n          <\/label>\n        <?php endif; ?>\n        <p class=\"services-v4__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/header>\n\n      <?php if (!empty($filters)): ?>\n        <label class=\"services-v4__filter-select-wrap field\">\n          <select\n            class=\"field__input services-v4__filter-select bodytext-strong\"\n            data-services-v4-select\n            aria-label=\"<?= htmlspecialchars($eyebrow) ?>\"\n          >\n            <?php foreach ($filters as $filter): ?>\n              <option value=\"<?= htmlspecialchars($filter['key']) ?>\"<?= ($filter['key'] ?? '') === 'all' ? ' selected' : '' ?>>\n                <?= htmlspecialchars($filter['label']) ?>\n              <\/option>\n            <?php endforeach; ?>\n          <\/select>\n          <svg class=\"icon services-v4__filter-select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n            <use href=\"#icon-chevron-down\"><\/use>\n          <\/svg>\n        <\/label>\n\n        <div class=\"services-v4__filters\" role=\"group\" aria-label=\"<?= htmlspecialchars($eyebrow) ?>\">\n          <?php foreach ($filters as $filter): ?>\n            <?php\n              $is_active = ($filter['key'] ?? '') === 'all';\n              $filter_icon = trim((string) ($filter['icon'] ?? ''));\n              $has_filter_icon = $filter_icon !== '';\n              $chip_class = 'services-v4__chip bodytext-strong';\n              if ($is_active) {\n                  $chip_class .= ' is-active';\n              }\n              if (!$has_filter_icon) {\n                  $chip_class .= ' services-v4__chip--no-icon';\n              }\n            ?>\n            <button\n              type=\"button\"\n              class=\"<?= htmlspecialchars($chip_class) ?>\"\n              data-services-v4-filter=\"<?= htmlspecialchars($filter['key']) ?>\"\n              aria-pressed=\"<?= $is_active ? 'true' : 'false' ?>\"\n            >\n              <?php if ($has_filter_icon): ?>\n                <img\n                  class=\"services-v4__chip-icon\"\n                  src=\"<?= htmlspecialchars($filter_icon) ?>\"\n                  alt=\"\"\n                  width=\"24\"\n                  height=\"24\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <?php endif; ?>\n              <span class=\"services-v4__chip-label\"><?= htmlspecialchars($filter['label']) ?><\/span>\n            <\/button>\n          <?php endforeach; ?>\n        <\/div>\n      <?php endif; ?>\n\n      <ul class=\"services-v4__grid\" data-services-v4-grid>\n        <?php foreach ($items as $item): ?>\n          <?php\n            $item_filters = $item['filters'] ?? [];\n            $filter_attr  = implode(',', $item_filters);\n            $search_haystack = mb_strtolower(trim((string) ($item['name'] ?? '')), 'UTF-8');\n          ?>\n          <li\n            class=\"services-v4__item\"\n            data-services-v4-item\n            data-services-v4-filters=\"<?= htmlspecialchars($filter_attr) ?>\"\n            data-services-v4-search-item=\"<?= htmlspecialchars($search_haystack) ?>\"\n          >\n            <a class=\"services-v4__card\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n              <?php if (!empty($item['image'])): ?>\n                <div class=\"services-v4__card-photo\">\n                  <img\n                    class=\"services-v4__card-img\"\n                    src=\"<?= htmlspecialchars($item['image']) ?>\"\n                    alt=\"\"\n                    width=\"380\"\n                    height=\"222\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <\/div>\n              <?php endif; ?>\n\n              <h3 class=\"services-v4__card-title bodytext-lg\"><?= htmlspecialchars($item['name']) ?><\/h3>\n            <\/a>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n\n      <button\n        type=\"button\"\n        class=\"services-v4__more btn btn--secondary bodytext-sm\"\n        data-services-v4-more\n        hidden\n      >\n        <?= htmlspecialchars($more_label) ?>\n      <\/button>\n\n      <p\n        class=\"services-v4__empty bodytext\"\n        data-services-v4-empty\n        data-services-v4-empty-filter=\"<?= htmlspecialchars($empty_label) ?>\"\n        data-services-v4-empty-search=\"<?= htmlspecialchars($empty_search_label) ?>\"\n        hidden\n      ><?= htmlspecialchars($empty_label) ?><\/p>\n    <\/div>\n  <\/div>\n<\/section>",
            "promo-variant-1": "<?php\n  $icon_src = trim((string) $icon_src);\n  $has_card_icon = $icon_src !== '';\n?>\n<section class=\"promo-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"<?= $has_card_icon ? ' style=\"--promo-v1-icon-src: url(\\'' . htmlspecialchars($icon_src, ENT_QUOTES) . '\\')\"' : '' ?>>\n  <div class=\"container\">\n    <div class=\"promo-v1__inner stack stack--xl\">\n      <div class=\"promo-v1__head\">\n        <div class=\"promo-v1__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'promo-v1__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"promo-v1__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n          <\/div>\n        <\/div>\n\n        <div class=\"promo-v1__head-actions\">\n          <a class=\"promo-v1__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n            <?= htmlspecialchars($all_link_label) ?>\n            <svg class=\"icon promo-v1__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n\n          <?php if (count($items) > 2): ?>\n            <div class=\"promo-v1__slider-nav slider-nav slider-nav--brand\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущая акция\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующая акция\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"promo-v1__slider-foot slider-foot\">\n        <div class=\"promo-v1__carousel\">\n          <div class=\"promo-v1__slider swiper\">\n            <div class=\"swiper-wrapper\">\n            <?php foreach ($items as $item): ?>\n              <?php\n                $card_image = trim((string) ($item['image'] ?? ''));\n                $has_card_image = $card_image !== '';\n                $card_class = 'promo-v1__card';\n                if (($item['variant'] ?? '') === 'gradient') {\n                    $card_class .= ' promo-v1__card--gradient';\n                }\n                if (!$has_card_image) {\n                    $card_class .= ' promo-v1__card--no-image';\n                }\n              ?>\n              <div class=\"swiper-slide\">\n                <a class=\"<?= htmlspecialchars($card_class) ?>\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                  <?php if ($has_card_image): ?>\n                    <div class=\"promo-v1__card-bg\" aria-hidden=\"true\">\n                      <img class=\"promo-v1__card-img\" src=\"<?= htmlspecialchars($card_image) ?>\" alt=\"<?= htmlspecialchars($item['title'] ?? '') ?>\" loading=\"lazy\" decoding=\"async\">\n                    <\/div>\n                  <?php endif; ?>\n                  <div class=\"promo-v1__card-icon<?= $has_card_icon ? '' : ' promo-v1__card-icon--no-icon' ?>\" aria-hidden=\"true\">\n                    <?php if ($has_card_icon): ?>\n                      <span class=\"promo-v1__card-icon-img\"><\/span>\n                    <?php endif; ?>\n                  <\/div>\n                  <div class=\"promo-v1__card-body stack stack--sm\">\n                    <p class=\"promo-v1__card-title megatext-md\"><?= htmlspecialchars($item['title']) ?><\/p>\n                    <p class=\"promo-v1__card-text bodytext-lg-regular\"><?= htmlspecialchars($item['text']) ?><\/p>\n                  <\/div>\n                <\/a>\n              <\/div>\n            <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"slider-pagination-host\">\n          <div class=\"promo-v1__pagination slider-pagination--dots swiper-pagination\"><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"promo-v1__mobile-actions\">\n        <a class=\"btn btn--secondary promo-v1__all-btn\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n          <?= htmlspecialchars($all_link_label) ?>\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "text-variant-1": "<section class=\"text-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"text-v1__inner\" data-text-v1>\n      <<?= $heading_level ?> class=\"text-v1__title displaytext-sm\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n\n      <div class=\"text-v1__body\">\n        <div class=\"text-v1__content wysiwyg bodytext-lg\">\n          <?php foreach ($text_main as $chunk): ?>\n            <?php if (is_string($chunk) && strpos($chunk, '<') !== false): ?>\n              <?= $chunk ?>\n            <?php else: ?>\n              <p><?= htmlspecialchars((string) $chunk) ?><\/p>\n            <?php endif; ?>\n          <?php endforeach; ?>\n        <\/div>\n\n        <?php if (!empty($text_spoiler)): ?>\n          <div class=\"text-v1__content wysiwyg bodytext-lg\" id=\"<?= htmlspecialchars($section_id) ?>-spoiler\" data-text-v1-spoiler hidden>\n            <?php foreach ($text_spoiler as $chunk): ?>\n              <?php if (is_string($chunk) && strpos($chunk, '<') !== false): ?>\n                <?= $chunk ?>\n              <?php else: ?>\n                <p><?= htmlspecialchars((string) $chunk) ?><\/p>\n              <?php endif; ?>\n            <?php endforeach; ?>\n          <\/div>\n\n          <button class=\"text-v1__toggle bodytext-strong\" type=\"button\" data-text-v1-toggle aria-expanded=\"false\" aria-controls=\"<?= htmlspecialchars($section_id) ?>-spoiler\">\n            <?= htmlspecialchars($more_label) ?>\n          <\/button>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "hero-variant-6": "<?php $lcp_image = $bg_image; ?>\n<section class=\"hero-v6 has-block-bg section-pad-y-lg\">\n  <div class=\"hero-v6__bg block-bg\" aria-hidden=\"true\">\n    <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" <?= \\app\\generator\\PageCriticalResources::imgAttrs($bg_image) ?>>\n  <\/div>\n  <div class=\"container\">\n    <div class=\"hero-v6__inner stack stack--xl\">\n      <div class=\"hero-v6__head stack stack--md\">\n        <div class=\"hero-v6__lead stack stack--sm\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'hero-v6__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"hero-v6__title megatext\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n            <p class=\"hero-v6__subtitle leadtext\"><?= htmlspecialchars($subtitle) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <?php if (!empty($benefits)): ?>\n          <ul class=\"hero-v6__benefits\">\n            <?php foreach ($benefits as $benefit): ?>\n              <?php\n                $benefit_icon = trim((string) ($benefit['icon'] ?? ''));\n                $has_benefit_icon = $benefit_icon !== '';\n              ?>\n              <li class=\"hero-v6__benefit<?= $has_benefit_icon ? '' : ' hero-v6__benefit--no-icon' ?>\">\n                <?php if ($has_benefit_icon): ?>\n                  <span class=\"hero-v6__benefit-icon\" aria-hidden=\"true\" style=\"--hero-v6-icon-src: url('<?= htmlspecialchars($benefit_icon, ENT_QUOTES) ?>')\"><\/span>\n                <?php endif; ?>\n                <span class=\"hero-v6__benefit-text bodytext-lg\"><?= htmlspecialchars($benefit['text']) ?><\/span>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ul>\n        <?php endif; ?>\n      <\/div>\n\n      <button type=\"button\" class=\"btn btn--primary\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\"><?= htmlspecialchars($cta) ?><\/button>\n    <\/div>\n  <\/div>\n<\/section>",
            "progression-stages-variant-1": "<?php\n  $notice = trim((string) $notice);\n  $has_notice = $notice !== '';\n  $has_notice_icon = trim((string) $notice_icon) !== '';\n  $has_icon_problem = trim((string) $icon_problem) !== '';\n  $has_icon_solution = trim((string) $icon_solution) !== '';\n?>\n<section class=\"progression-stages-v1 section-bg\">\n  <div class=\"container\">\n    <div class=\"progression-stages-v1__inner stack stack--xl\">\n      <div class=\"progression-stages-v1__head\">\n        <div class=\"progression-stages-v1__lead stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'progression-stages-v1__eyebrow') ?>\n          <<?= $heading_level ?> class=\"progression-stages-v1__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n        <\/div>\n\n        <?php if ($has_notice): ?>\n        <aside class=\"progression-stages-v1__notice<?= $has_notice_icon ? '' : ' progression-stages-v1__notice--no-icon' ?>\">\n          <?php if ($has_notice_icon): ?>\n            <span class=\"progression-stages-v1__notice-icon\" aria-hidden=\"true\">\n              <img\n                class=\"progression-stages-v1__notice-icon-img\"\n                src=\"<?= htmlspecialchars(trim((string) $notice_icon)) ?>\"\n                alt=\"\"\n                width=\"40\"\n                height=\"40\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <\/span>\n          <?php endif; ?>\n          <p class=\"progression-stages-v1__notice-text bodytext-lg\"><?= htmlspecialchars($notice) ?><\/p>\n        <\/aside>\n        <?php endif; ?>\n      <\/div>\n\n      <ul class=\"progression-stages-v1__cards\">\n        <?php foreach ($items as $item): ?>\n          <li class=\"progression-stages-v1__card\">\n            <div class=\"progression-stages-v1__media\">\n              <img\n                class=\"progression-stages-v1__media-img\"\n                src=\"<?= htmlspecialchars($item['image']) ?>\"\n                alt=\"<?= htmlspecialchars($item['image_alt']) ?>\"\n                width=\"362\"\n                height=\"237\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n              <?php $badge_text = trim((string) ($item['badge'] ?? '')); ?>\n              <?php if ($badge_text !== ''): ?>\n                <span class=\"progression-stages-v1__badge bodytext-md\"><?= htmlspecialchars($badge_text) ?><\/span>\n              <?php endif; ?>\n            <\/div>\n\n            <ul class=\"progression-stages-v1__points\">\n              <?php\n              $problem_text = trim((string) ($item['problem'] ?? ''));\n              $solution_text = trim((string) ($item['solution'] ?? ''));\n              $show_problem_icon = $has_icon_problem && $problem_text !== '';\n              $show_solution_icon = $has_icon_solution && $solution_text !== '';\n              ?>\n              <?php if ($problem_text !== ''): ?>\n                <li class=\"progression-stages-v1__point<?= $show_problem_icon ? '' : ' progression-stages-v1__point--no-icon' ?>\">\n                  <?php if ($show_problem_icon): ?>\n                    <span class=\"progression-stages-v1__point-icon\" aria-hidden=\"true\">\n                      <img\n                        class=\"progression-stages-v1__point-icon-img\"\n                        src=\"<?= htmlspecialchars(trim((string) $icon_problem)) ?>\"\n                        alt=\"\"\n                        width=\"16\"\n                        height=\"16\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/span>\n                  <?php endif; ?>\n                  <p class=\"progression-stages-v1__point-text bodytext-lg-regular\"><?= htmlspecialchars($problem_text) ?><\/p>\n                <\/li>\n              <?php endif; ?>\n              <?php if ($solution_text !== ''): ?>\n                <li class=\"progression-stages-v1__point<?= $show_solution_icon ? '' : ' progression-stages-v1__point--no-icon' ?>\">\n                  <?php if ($show_solution_icon): ?>\n                    <span class=\"progression-stages-v1__point-icon\" aria-hidden=\"true\">\n                      <img\n                        class=\"progression-stages-v1__point-icon-img\"\n                        src=\"<?= htmlspecialchars(trim((string) $icon_solution)) ?>\"\n                        alt=\"\"\n                        width=\"17\"\n                        height=\"17\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/span>\n                  <?php endif; ?>\n                  <p class=\"progression-stages-v1__point-text bodytext-lg-regular\"><?= htmlspecialchars($solution_text) ?><\/p>\n                <\/li>\n              <?php endif; ?>\n            <\/ul>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n\n      <div class=\"progression-stages-v1__cta<?= $cta_bg === 'brand-soft' ? ' progression-stages-v1__cta--bg-brand-soft' : '' ?>\">\n        <div class=\"progression-stages-v1__cta-copy stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($cta_eyebrow, 'progression-stages-v1__cta-eyebrow') ?>\n          <div class=\"progression-stages-v1__cta-titles stack stack--sm\">\n            <p class=\"progression-stages-v1__cta-title megatext\"><?= htmlspecialchars($cta_title) ?><\/p>\n            <p class=\"progression-stages-v1__cta-lead bodytext-lg\"><?= htmlspecialchars($cta_lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <form class=\"progression-stages-v1__cta-form stack stack--md popup-form--consent-gated\" action=\"#\" method=\"post\">\n          <p class=\"progression-stages-v1__cta-text bodytext-md\"><?= htmlspecialchars($cta_text) ?><\/p>\n\n          <div class=\"progression-stages-v1__cta-row\">\n            <label class=\"progression-stages-v1__field\" aria-label=\"Телефон\">\n              <input\n                class=\"field__input progression-stages-v1__input\"\n                type=\"tel\"\n                name=\"phone\"\n                aria-label=\"Телефон\"\n                placeholder=\"<?= htmlspecialchars($cta_phone_label) ?>\"\n                autocomplete=\"tel\"\n                required\n              >\n            <\/label>\n            <button\n              type=\"submit\"\n              class=\"btn btn--primary progression-stages-v1__cta-btn popup-form__submit uibtntext\"\n            >\n              <?= htmlspecialchars($cta_btn) ?>\n            <\/button>\n          <\/div>\n\n          <label class=\"progression-stages-v1__consent popup-form__consent\">\n            <input class=\"progression-stages-v1__checkbox popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n            <span class=\"progression-stages-v1__consent-text bodytext\"><?= $cta_consent_html ?><\/span>\n          <\/label>\n        <\/form>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "progression-stages-variant-2": "<?php\n  $notice = trim((string) $notice);\n  $has_notice = $notice !== '';\n  $has_notice_icon = trim((string) $notice_icon) !== '';\n  $uid = 'psv2-' . substr(md5(uniqid((string) mt_rand(), true)), 0, 8);\n  $show_direction_tabs = count($directions) > 1;\n  $notice_bg_class = $notice_bg === 'brand-soft' ? ' progression-stages-v2__notice--bg-brand-soft' : '';\n?>\n<section class=\"progression-stages-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"progression-stages-v2__inner stack stack--xl\">\n      <div class=\"progression-stages-v2__head\">\n        <div class=\"progression-stages-v2__lead stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'progression-stages-v2__eyebrow') ?>\n          <<?= $heading_level ?> class=\"progression-stages-v2__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n          <p class=\"progression-stages-v2__subtitle leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n\n        <?php if ($has_notice): ?>\n        <aside class=\"progression-stages-v2__notice<?= $has_notice_icon ? '' : ' progression-stages-v2__notice--no-icon' ?><?= $notice_bg_class ?>\">\n          <?php if ($has_notice_icon): ?>\n            <span class=\"progression-stages-v2__notice-icon\" aria-hidden=\"true\">\n              <img\n                class=\"progression-stages-v2__notice-icon-img\"\n                src=\"<?= htmlspecialchars(trim((string) $notice_icon)) ?>\"\n                alt=\"\"\n                width=\"40\"\n                height=\"40\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <\/span>\n          <?php endif; ?>\n          <p class=\"progression-stages-v2__notice-text bodytext-lg\"><?= htmlspecialchars($notice) ?><\/p>\n        <\/aside>\n        <?php endif; ?>\n      <\/div>\n\n      <div class=\"progression-stages-v2__body stack stack--md<?= $show_direction_tabs ? '' : ' progression-stages-v2__body--no-tabs' ?>\">\n        <?php if ($show_direction_tabs): ?>\n        <div class=\"progression-stages-v2__tabs-block\">\n          <div\n            class=\"progression-stages-v2__tabs\"\n            role=\"tablist\"\n            aria-label=\"Направления лечения\"\n            data-progression-stages-v2-tabs\n          >\n            <?php foreach ($directions as $index => $direction): ?>\n              <button\n                type=\"button\"\n                class=\"progression-stages-v2__tab<?= $index === 0 ? ' is-active' : '' ?>\"\n                id=\"<?= htmlspecialchars($uid) ?>-tab-<?= (int) $index ?>\"\n                role=\"tab\"\n                aria-selected=\"<?= $index === 0 ? 'true' : 'false' ?>\"\n                aria-controls=\"<?= htmlspecialchars($uid) ?>-panel-<?= (int) $index ?>\"\n                data-progression-stages-v2-tab\n                data-index=\"<?= (int) $index ?>\"\n                tabindex=\"<?= $index === 0 ? '0' : '-1' ?>\"\n                style=\"--progression-stages-v2-tab-label-max: <?= htmlspecialchars($direction['mob_label_max']) ?>\"\n              >\n                <span\n                  class=\"progression-stages-v2__tab-icon\"\n                  style=\"--progression-stages-v2-tab-icon-src: url('<?= htmlspecialchars($direction['icon']) ?>?v=4')\"\n                  aria-hidden=\"true\"\n                ><\/span>\n                <span class=\"progression-stages-v2__tab-label progression-stages-v2__tab-label--desk bodytext\"><?= htmlspecialchars($direction['title']) ?><\/span>\n                <span class=\"progression-stages-v2__tab-label progression-stages-v2__tab-label--mob uimeta\" aria-hidden=\"true\"><?= htmlspecialchars($direction['title']) ?><\/span>\n              <\/button>\n            <?php endforeach; ?>\n          <\/div>\n          <div class=\"progression-stages-v2__tabs-track\" aria-hidden=\"true\">\n            <div class=\"progression-stages-v2__tabs-thumb\" data-progression-stages-v2-tabs-thumb><\/div>\n          <\/div>\n        <\/div>\n        <?php endif; ?>\n\n        <div class=\"progression-stages-v2__panels\">\n          <?php foreach ($directions as $index => $direction): ?>\n            <div\n              class=\"progression-stages-v2__panel<?= $index === 0 ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($uid) ?>-panel-<?= (int) $index ?>\"\n              <?php if ($show_direction_tabs): ?>\n                role=\"tabpanel\"\n                aria-labelledby=\"<?= htmlspecialchars($uid) ?>-tab-<?= (int) $index ?>\"\n              <?php endif; ?>\n              data-progression-stages-v2-panel\n              data-index=\"<?= (int) $index ?>\"\n              <?= ($show_direction_tabs && $index !== 0) ? 'hidden' : '' ?>\n            >\n              <div class=\"progression-stages-v2__slider-foot slider-foot\">\n                <div class=\"progression-stages-v2__slider swiper\" data-progression-stages-v2-slider>\n                  <div class=\"swiper-wrapper\">\n                    <?php foreach ($direction['stages'] as $stage_index => $stage): ?>\n                      <?php $num = str_pad((string) ($stage_index + 1), 2, '0', STR_PAD_LEFT); ?>\n                      <div class=\"swiper-slide progression-stages-v2__slide\">\n                        <article class=\"progression-stages-v2__card\">\n                          <div class=\"progression-stages-v2__card-media\">\n                            <img\n                              class=\"progression-stages-v2__card-img\"\n                              src=\"<?= htmlspecialchars($stage['image']) ?>\"\n                              alt=\"<?= htmlspecialchars($stage['image_alt']) ?>\"\n                              width=\"312\"\n                              height=\"461\"\n                              loading=\"lazy\"\n                              decoding=\"async\"\n                            >\n                          <\/div>\n                          <div class=\"progression-stages-v2__card-overlay\" aria-hidden=\"true\"><\/div>\n                          <div class=\"progression-stages-v2__card-content\">\n                            <span class=\"progression-stages-v2__card-num bodytext-lg\"><?= htmlspecialchars($num) ?><\/span>\n                            <p class=\"progression-stages-v2__card-title bodytext-lg\"><?= htmlspecialchars($stage['title']) ?><\/p>\n                          <\/div>\n                        <\/article>\n                      <\/div>\n                    <?php endforeach; ?>\n                  <\/div>\n                <\/div>\n\n                <div class=\"slider-pagination-host progression-stages-v2__pagination-host\">\n                  <div\n                    class=\"progression-stages-v2__pagination slider-pagination--dots swiper-pagination\"\n                    data-progression-stages-v2-pagination\n                  ><\/div>\n                <\/div>\n              <\/div>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "prices-variant-2": "<?php\n  $note_text = trim((string) $note_text);\n  $has_note_text = $note_text !== '';\n  $use_slider = count($items) > 4;\n?>\n<section\n  class=\"prices-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?><?= $use_slider ? ' prices-v2--slider' : '' ?>\"\n  id=\"<?= htmlspecialchars($section_id) ?>\"\n>\n  <div class=\"container\">\n    <div class=\"prices-v2__inner stack stack--xl\">\n      <div class=\"prices-v2__head\">\n        <div class=\"prices-v2__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'prices-v2__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"prices-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n            <p class=\"prices-v2__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"prices-v2__head-actions\">\n          <a class=\"prices-v2__all link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_url) ?>\">\n            <span><?= htmlspecialchars($all_label) ?><\/span>\n            <svg class=\"icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n\n          <?php if ($use_slider): ?>\n            <div class=\"prices-v2__slider-nav slider-nav slider-nav--glass\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущие услуги\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующие услуги\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"prices-v2__body stack stack--xl\">\n        <?php if ($use_slider): ?>\n          <div class=\"prices-v2__carousel\">\n            <div class=\"prices-v2__slider swiper\">\n              <div class=\"swiper-wrapper\">\n                <?php foreach ($items as $item): ?>\n                  <?php $is_text_price = preg_match('\/\\\\d\/u', ($item['price'] ?? '')) !== 1; ?>\n                  <div class=\"swiper-slide\">\n                    <article class=\"prices-v2__card\">\n                      <div class=\"prices-v2__card-top\">\n                        <?php if (trim((string) ($item['icon'] ?? '')) !== ''): ?>\n                        <span class=\"prices-v2__card-icon\" aria-hidden=\"true\">\n                          <img src=\"<?= htmlspecialchars($item['icon']) ?>\" alt=\"\" width=\"44\" height=\"44\" loading=\"lazy\" decoding=\"async\">\n                        <\/span>\n                        <?php endif; ?>\n                        <div class=\"prices-v2__card-copy stack stack--sm\">\n                          <p class=\"prices-v2__card-title leadtext-xl\"><?= htmlspecialchars($item['title']) ?><\/p>\n                          <p class=\"prices-v2__card-text bodytext-lg\"><?= htmlspecialchars($item['text']) ?><\/p>\n                        <\/div>\n                      <\/div>\n                      <div class=\"prices-v2__price<?= $is_text_price ? ' prices-v2__price--text' : '' ?>\" aria-label=\"<?= htmlspecialchars('Стоимость: ' . ($item['price_from'] ? 'от ' : '') . $item['price']) ?>\">\n                        <?php if (!empty($item['price_from'])): ?>\n                          <span class=\"prices-v2__price-from bodytext-lg\">от<\/span>\n                        <?php endif; ?>\n                        <span class=\"prices-v2__price-value <?= $is_text_price ? 'megatext-sm' : 'megatext' ?>\">\n                          <?= htmlspecialchars($item['price']) ?>\n                        <\/span>\n                        <?php if (!empty($item['old_price'])): ?>\n                          <span class=\"prices-v2__price-old megatext-sm\"><?= htmlspecialchars($item['old_price']) ?><\/span>\n                        <?php endif; ?>\n                      <\/div>\n                    <\/article>\n                  <\/div>\n                <?php endforeach; ?>\n              <\/div>\n            <\/div>\n          <\/div>\n        <?php else: ?>\n          <ul class=\"prices-v2__grid\">\n            <?php foreach ($items as $item): ?>\n              <?php $is_text_price = preg_match('\/\\\\d\/u', ($item['price'] ?? '')) !== 1; ?>\n              <li class=\"prices-v2__grid-item\">\n                <article class=\"prices-v2__card\">\n                  <div class=\"prices-v2__card-top\">\n                    <?php if (trim((string) ($item['icon'] ?? '')) !== ''): ?>\n                    <span class=\"prices-v2__card-icon\" aria-hidden=\"true\">\n                      <img src=\"<?= htmlspecialchars($item['icon']) ?>\" alt=\"\" width=\"44\" height=\"44\" loading=\"lazy\" decoding=\"async\">\n                    <\/span>\n                    <?php endif; ?>\n                    <div class=\"prices-v2__card-copy stack stack--sm\">\n                      <p class=\"prices-v2__card-title leadtext-xl\"><?= htmlspecialchars($item['title']) ?><\/p>\n                      <p class=\"prices-v2__card-text bodytext-lg\"><?= htmlspecialchars($item['text']) ?><\/p>\n                    <\/div>\n                  <\/div>\n                  <div class=\"prices-v2__price<?= $is_text_price ? ' prices-v2__price--text' : '' ?>\" aria-label=\"<?= htmlspecialchars('Стоимость: ' . ($item['price_from'] ? 'от ' : '') . $item['price']) ?>\">\n                    <?php if (!empty($item['price_from'])): ?>\n                      <span class=\"prices-v2__price-from bodytext-lg\">от<\/span>\n                    <?php endif; ?>\n                    <span class=\"prices-v2__price-value <?= $is_text_price ? 'megatext-sm' : 'megatext' ?>\">\n                      <?= htmlspecialchars($item['price']) ?>\n                    <\/span>\n                    <?php if (!empty($item['old_price'])): ?>\n                      <span class=\"prices-v2__price-old megatext-sm\"><?= htmlspecialchars($item['old_price']) ?><\/span>\n                    <?php endif; ?>\n                  <\/div>\n                <\/article>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ul>\n        <?php endif; ?>\n\n        <?php if ($has_note_text): ?>\n        <div class=\"prices-v2__note\">\n          <svg class=\"icon prices-v2__note-icon\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n            <use href=\"#icon-info\"><\/use>\n          <\/svg>\n          <p class=\"prices-v2__note-text bodytext-lg\"><?= htmlspecialchars($note_text) ?><\/p>\n        <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "linking-services-variant-2": "<?php\n  $desktop_visible = $desktop_grid_rows * $desktop_grid_cols;\n  $use_desktop_slider = count($items) > $desktop_visible;\n  $desktop_pages = array_chunk($items, $desktop_visible);\n?>\n<?php\n$linking_services_v2_render_item = static function (array $item): void {\n    $card_icon = trim((string) ($item['icon'] ?? ''));\n    $has_card_icon = $card_icon !== '';\n    ?>\n    <div class=\"linking-services-v2__item\" role=\"listitem\" data-linking-services-v2-item>\n      <a class=\"linking-services-v2__card\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n        <span class=\"linking-services-v2__card-main<?= $has_card_icon ? '' : ' linking-services-v2__card-main--no-icon' ?>\">\n          <?php if ($has_card_icon): ?>\n            <span class=\"linking-services-v2__card-icon\" aria-hidden=\"true\">\n              <img\n                class=\"linking-services-v2__card-icon-img\"\n                src=\"<?= htmlspecialchars($card_icon) ?>\"\n                alt=\"\"\n                width=\"44\"\n                height=\"44\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <\/span>\n          <?php endif; ?>\n          <span class=\"linking-services-v2__card-copy\">\n            <h3 class=\"linking-services-v2__card-title leadtext-xl\"><?= htmlspecialchars($item['name']) ?><\/h3>\n            <p class=\"linking-services-v2__card-text bodytext\"><?= htmlspecialchars($item['text']) ?><\/p>\n          <\/span>\n        <\/span>\n        <span class=\"linking-services-v2__card-action\" aria-hidden=\"true\">\n          <svg class=\"icon linking-services-v2__card-arrow\" width=\"32\" height=\"31\" aria-hidden=\"true\">\n            <use href=\"#icon-linking-services-arrow\"><\/use>\n          <\/svg>\n        <\/span>\n      <\/a>\n    <\/div>\n    <?php\n};\n?>\n<section\n  class=\"linking-services-v2<?= $use_desktop_slider ? ' linking-services-v2--has-slider' : ' linking-services-v2--static' ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  data-linking-services-v2-mobile-limit=\"<?= (int) $mobile_limit ?>\"\n>\n  <div class=\"container\">\n    <div class=\"linking-services-v2__inner stack stack--xl\">\n      <header class=\"linking-services-v2__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'linking-services-v2__eyebrow') ?>\n\n        <div class=\"linking-services-v2__head-row\">\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"linking-services-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n            <p class=\"linking-services-v2__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n\n          <?php if ($use_desktop_slider): ?>\n            <div class=\"linking-services-v2__nav slider-nav slider-nav--glass\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущие услуги\">\n                <svg class=\"icon linking-services-v2__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                  <use href=\"#icon-slider-arrow\"><\/use>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующие услуги\">\n                <svg class=\"icon linking-services-v2__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                  <use href=\"#icon-slider-arrow\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/header>\n\n      <div class=\"linking-services-v2__body stack stack--xl\">\n        <div class=\"linking-services-v2__list-wrap\">\n          <div class=\"linking-services-v2__carousel\">\n            <?php if ($use_desktop_slider): ?>\n              <div class=\"linking-services-v2__slider swiper\" data-linking-services-v2-slider>\n                <div class=\"linking-services-v2__pages swiper-wrapper\">\n                  <?php foreach ($desktop_pages as $page_items): ?>\n                    <div class=\"linking-services-v2__page swiper-slide\">\n                      <div class=\"linking-services-v2__grid\" role=\"list\">\n                        <?php foreach ($page_items as $item): ?>\n                          <?php $linking_services_v2_render_item($item); ?>\n                        <?php endforeach; ?>\n                      <\/div>\n                    <\/div>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/div>\n            <?php else: ?>\n              <div class=\"linking-services-v2__grid\" role=\"list\">\n                <?php foreach ($items as $item): ?>\n                  <?php $linking_services_v2_render_item($item); ?>\n                <?php endforeach; ?>\n              <\/div>\n            <?php endif; ?>\n          <\/div>\n\n          <?php if (count($items) > $mobile_limit): ?>\n            <button\n              type=\"button\"\n              class=\"linking-services-v2__more btn btn--secondary bodytext-sm\"\n              data-linking-services-v2-more\n            >\n              <?= htmlspecialchars($more_label) ?>\n            <\/button>\n          <?php endif; ?>\n        <\/div>\n\n        <div class=\"linking-services-v2__cta <?= htmlspecialchars(\\app\\generator\\SectionBg::classString('bg-gradient-top-light')) ?>\">\n          <div class=\"linking-services-v2__cta-grid\">\n            <div class=\"linking-services-v2__cta-copy stack stack--sm\">\n              <?= \\app\\generator\\Eyebrow::renderBlock($cta_eyebrow, 'linking-services-v2__cta-eyebrow') ?>\n              <p class=\"linking-services-v2__cta-title megatext-sm\"><?= htmlspecialchars($cta_title) ?><\/p>\n              <p class=\"linking-services-v2__cta-text bodytext-lg\"><?= htmlspecialchars($cta_text) ?><\/p>\n            <\/div>\n\n            <form class=\"linking-services-v2__cta-form stack stack--md popup-form--consent-gated\" action=\"#\" method=\"post\">\n              <div class=\"linking-services-v2__cta-row\">\n                <label class=\"field linking-services-v2__field\">\n                  <input\n                    class=\"field__input linking-services-v2__input bodytext\"\n                    type=\"tel\"\n                    name=\"phone\"\n                    aria-label=\"Телефон\"\n                    placeholder=\"<?= htmlspecialchars($phone_label) ?>\"\n                    autocomplete=\"tel\"\n                    required\n                  >\n                <\/label>\n                <button\n                  type=\"submit\"\n                  class=\"btn btn--primary linking-services-v2__cta-btn popup-form__submit uibtntext\"\n                >\n                  <?= htmlspecialchars($cta_btn_label) ?>\n                <\/button>\n              <\/div>\n\n              <label class=\"popup-form__consent linking-services-v2__consent\">\n                <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n                <span class=\"popup-form__consent-text bodytext\"><?= $cta_consent_html ?><\/span>\n              <\/label>\n            <\/form>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cases-variant-2": "<section class=\"cases-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"cases-v2__layout\">\n      <aside class=\"cases-v2__aside\">\n        <div class=\"cases-v2__aside-head stack stack--xl\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cases-v2__eyebrow') ?>\n          <<?= $heading_level ?> class=\"cases-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n        <\/div>\n\n        <?php if (count($cases) > 1): ?>\n          <div class=\"cases-v2__aside-nav slider-nav slider-nav--glass\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий кейс\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий кейс\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <?php endif; ?>\n      <\/aside>\n\n      <div class=\"cases-v2__stage\">\n        <div class=\"cases-v2__carousel\">\n          <div class=\"cases-v2__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($cases as $case_index => $case): ?>\n                <?php $index_label = str_pad((string) ($case_index + 1), 2, '0', STR_PAD_LEFT); ?>\n                <div class=\"swiper-slide cases-v2__slide\">\n                  <article class=\"cases-v2__panel\">\n                    <div class=\"cases-v2__panel-grid\">\n                      <div class=\"cases-v2__body\">\n                        <div class=\"cases-v2__body-top\">\n                          <p class=\"cases-v2__index\" aria-hidden=\"true\">\n                            <span class=\"cases-v2__index-num bodytext-strong\"><?= htmlspecialchars($index_label) ?><\/span>\n                            <span class=\"cases-v2__index-sep\">\/<\/span>\n                          <\/p>\n                          <p class=\"cases-v2__category titletext-sm\"><?= htmlspecialchars($case['category']) ?><\/p>\n                        <\/div>\n\n                        <div class=\"cases-v2__copy stack stack--md\">\n                          <p class=\"cases-v2__card-title megatext-md\"><?= htmlspecialchars($case['title']) ?><\/p>\n                          <p class=\"cases-v2__card-text bodytext-lg\"><?= htmlspecialchars($case['text']) ?><\/p>\n                        <\/div>\n                      <\/div>\n\n                      <div class=\"cases-v2__media\">\n                        <img class=\"cases-v2__img cases-v2__img--after\" src=\"<?= htmlspecialchars($case['after_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                        <div class=\"cases-v2__before\" aria-hidden=\"true\">\n                          <img class=\"cases-v2__img cases-v2__img--before\" src=\"<?= htmlspecialchars($case['before_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                        <\/div>\n                        <span class=\"cases-v2__divider\" aria-hidden=\"true\"><\/span>\n                        <span class=\"cases-v2__badge cases-v2__badge--before titletext-sm\">До<\/span>\n                        <span class=\"cases-v2__badge cases-v2__badge--after titletext-sm\">После<\/span>\n                        <button\n                          type=\"button\"\n                          class=\"cases-v2__handle\"\n                          aria-label=\"Сравнить до\/после\"\n                          aria-valuemin=\"0\"\n                          aria-valuemax=\"100\"\n                          aria-valuenow=\"50\"\n                        >\n                          <img src=\"<?= htmlspecialchars($handle_src) ?>\" alt=\"\" width=\"86\" height=\"86\" loading=\"lazy\" decoding=\"async\">\n                        <\/button>\n                      <\/div>\n\n                      <?php if (!empty($case['meta']) && is_array($case['meta'])): ?>\n                        <div class=\"cases-v2__meta\">\n                          <?php foreach ($case['meta'] as $meta_item): ?>\n                            <div class=\"cases-v2__meta-item\">\n                              <p class=\"cases-v2__meta-label bodytext-strong\"><?= htmlspecialchars($meta_item['label'] ?? '') ?><\/p>\n                              <p class=\"cases-v2__meta-value bodytext-strong\"><?= htmlspecialchars($meta_item['value'] ?? '') ?><\/p>\n                            <\/div>\n                          <?php endforeach; ?>\n                        <\/div>\n                      <?php endif; ?>\n                    <\/div>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($cases) > 1): ?>\n          <div class=\"slider-pagination-host cases-v2__pagination-host\">\n            <div class=\"cases-v2__pagination slider-pagination--dots swiper-pagination\"><\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "doctors-variant-1": "<?php\n  $lead = trim((string) $lead);\n  $all_link_label = trim((string) $all_link_label);\n  $all_link_url = trim((string) $all_link_url);\n  $has_title = trim(strip_tags((string) $title)) !== '';\n  $has_all_link = $all_link_label !== '';\n  $has_panel_medal = trim((string) $medal_src) !== '';\n?>\n<section class=\"doctors-v1 doctors-v1--badge-<?= htmlspecialchars($badge_style) ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" style=\"--doctors-v1-photo-back: url('<?= htmlspecialchars($doctors_back_image) ?>')<?php if ($has_panel_medal): ?>; --doctors-v1-panel-medal-src: url('<?= htmlspecialchars($medal_src) ?>')<?php endif; ?>\">\n  <div class=\"container\">\n    <div class=\"doctors-v1__layout\">\n      <div class=\"doctors-v1__main stack stack--xl\">\n        <div class=\"doctors-v1__head stack stack--md\">\n          <div class=\"doctors-v1__head-top stack stack--md\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'doctors-v1__eyebrow') ?>\n            <?php if ($has_title): ?>\n              <<?= $heading_level ?> class=\"doctors-v1__title megatext\">\n                <?= $title ?>\n              <\/<?= $heading_level ?>>\n            <?php endif; ?>\n          <\/div>\n\n          <div class=\"doctors-v1__intro-row\">\n            <?php if ($lead !== ''): ?>\n              <p class=\"doctors-v1__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n            <?php endif; ?>\n\n            <div class=\"doctors-v1__head-actions\">\n              <?php if ($has_all_link): ?>\n              <a class=\"doctors-v1__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url !== '' ? $all_link_url : '#') ?>\">\n                <?= htmlspecialchars($all_link_label) ?>\n                <svg class=\"icon doctors-v1__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n              <\/a>\n              <?php endif; ?>\n\n              <div class=\"doctors-v1__slider-nav slider-nav slider-nav--glass\">\n                <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий врач\">\n                  <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                  <\/svg>\n                <\/button>\n                <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий врач\">\n                  <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                  <\/svg>\n                <\/button>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"doctors-v1__slider-foot slider-foot\">\n          <div class=\"doctors-v1__carousel\">\n            <div class=\"doctors-v1__slider swiper\">\n              <div class=\"swiper-wrapper\">\n              <?php foreach ($doctors as $doctor): ?>\n                <?php\n                  $specialty = trim((string) ($doctor['specialty'] ?? ''));\n                  $role = trim((string) ($doctor['role'] ?? ''));\n                  $image = trim((string) ($doctor['image'] ?? ''));\n                  $has_image = $image !== '';\n                  $image_has_bg = $has_image && !empty($doctor['image_has_bg']);\n                  $experience_value = trim((string) ($doctor['experience'] ?? ''));\n                  $has_experience = $experience_value !== '';\n                  $rating_value = trim((string) ($doctor['rating'] ?? ''));\n                  $rating_number = str_replace(',', '.', $rating_value);\n                  $has_rating = $rating_value !== '' && !(is_numeric($rating_number) && (float) $rating_number <= 0);\n                  $more_url = trim((string) ($doctor['url'] ?? ''));\n                ?>\n                <div class=\"swiper-slide\">\n                  <article class=\"doctors-v1__card\">\n                    <?php if ($has_image): ?>\n                    <div class=\"doctors-v1__card-photo<?= $image_has_bg ? ' doctors-v1__card-photo--has-bg' : '' ?><?= $has_experience ? '' : ' doctors-v1__card-photo--no-exp' ?>\">\n                      <img class=\"doctors-v1__card-img<?= $image_has_bg ? ' doctors-v1__card-img--has-bg' : '' ?>\" src=\"<?= htmlspecialchars($image) ?>\" alt=\"<?= htmlspecialchars(trim($doctor['name_first'] . ' ' . $doctor['name_last']) . ($specialty !== '' ? ' — ' . $specialty : '')) ?>\" width=\"343\" height=\"380\" loading=\"lazy\" decoding=\"async\">\n                      <?php if ($has_experience): ?>\n                      <span class=\"doctors-v1__badge doctors-v1__badge--exp bodytext-strong\"><?= htmlspecialchars($experience_value) ?><\/span>\n                      <?php endif; ?>\n                      <?php if ($has_rating): ?>\n                      <span class=\"doctors-v1__badge doctors-v1__badge--rating bodytext-strong\">\n                        <svg class=\"icon doctors-v1__badge-star\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                          <use href=\"#icon-star\"><\/use>\n                        <\/svg>\n                        <?= htmlspecialchars($rating_value) ?>\n                      <\/span>\n                      <?php endif; ?>\n                    <\/div>\n                    <?php endif; ?>\n\n                    <div class=\"doctors-v1__card-body stack stack--sm\">\n                      <p class=\"doctors-v1__card-name bodytext-lg\">\n                        <span class=\"doctors-v1__card-name-line\"><?= htmlspecialchars($doctor['name_last']) ?><\/span>\n                        <span class=\"doctors-v1__card-name-line\"><?= htmlspecialchars($doctor['name_first']) ?><\/span>\n                      <\/p>\n\n                      <?php if ($specialty !== '' || $role !== ''): ?>\n                      <p class=\"doctors-v1__card-meta bodytext\">\n                        <?php if ($specialty !== ''): ?>\n                          <span><?= htmlspecialchars($specialty) ?><\/span>\n                        <?php endif; ?>\n                        <?php if ($specialty !== '' && $role !== ''): ?>\n                          <span class=\"doctors-v1__meta-dot\" aria-hidden=\"true\"><\/span>\n                        <?php endif; ?>\n                        <?php if ($role !== ''): ?>\n                          <span><?= htmlspecialchars($role) ?><\/span>\n                        <?php endif; ?>\n                      <\/p>\n                      <?php endif; ?>\n\n                      <div class=\"doctors-v1__card-actions\">\n                        <button type=\"button\" class=\"btn btn--primary doctors-v1__card-btn bodytext-sm\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id($doctor['cta_form'])) ?>\" data-remote=\"1\">\n                          Записаться на приём\n                        <\/button>\n                        <?php if ($more_url !== ''): ?>\n                        <a class=\"doctors-v1__card-more bodytext-strong\" href=\"<?= htmlspecialchars($more_url) ?>\">\n                          Подробнее\n                          <svg class=\"icon doctors-v1__card-more-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                            <use href=\"#icon-arrow-right\"><\/use>\n                          <\/svg>\n                        <\/a>\n                        <?php endif; ?>\n                      <\/div>\n                    <\/div>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n              <\/div>\n              <div class=\"slider-pagination-host\">\n                <div class=\"doctors-v1__pagination slider-pagination--dots swiper-pagination\"><\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if ($has_all_link): ?>\n        <div class=\"doctors-v1__mobile-actions\">\n          <a class=\"btn btn--secondary doctors-v1__all-btn\" href=\"<?= htmlspecialchars($all_link_url !== '' ? $all_link_url : '#') ?>\">\n            <?= htmlspecialchars($all_link_label) ?>\n          <\/a>\n        <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <aside class=\"doctors-v1__panel\">\n        <div class=\"doctors-v1__panel-inner\">\n          <div class=\"doctors-v1__panel-top stack stack--xl\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($panel_eyebrow, 'doctors-v1__panel-eyebrow') ?>\n\n            <div class=\"doctors-v1__panel-features stack stack--lg\">\n              <?php foreach ($panel_features as $feature): ?>\n                <div class=\"doctors-v1__feature stack stack--sm\">\n                  <p class=\"doctors-v1__feature-title bodytext-lg\"><?= htmlspecialchars($feature['title']) ?><\/p>\n                  <p class=\"doctors-v1__feature-text bodytext-md\"><?= htmlspecialchars($feature['text']) ?><\/p>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n\n          <div class=\"doctors-v1__panel-bottom\">\n            <div class=\"doctors-v1__panel-stats\">\n              <?php foreach ($panel_stats as $stat): ?>\n                <div class=\"doctors-v1__stat\">\n                  <p class=\"doctors-v1__stat-value megatext-md\"><?= htmlspecialchars($stat['value']) ?><\/p>\n                  <p class=\"doctors-v1__stat-label bodytext-strong\"><?= htmlspecialchars($stat['label']) ?><\/p>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n\n            <?php if ($has_panel_medal): ?>\n            <span class=\"doctors-v1__panel-medal\" aria-hidden=\"true\"><\/span>\n            <?php endif; ?>\n          <\/div>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "reviews-variant-2": "<?php\n$reviews_v2_author = static function (array $review): string {\n    $name = trim($review['name'] ?? '');\n    $age = trim($review['age'] ?? '');\n    if ($name !== '' && $age !== '') {\n        return $name . ', ' . $age;\n    }\n\n    return $name !== '' ? $name : $age;\n};\n\n$reviews_v2_normalize_rating = static function (array $review): float {\n    $raw = $review['rating'] ?? 5;\n    if (!is_numeric($raw)) {\n        return 5.0;\n    }\n\n    return round(max(1, min(5, (float) $raw)), 1);\n};\n\n$reviews_v2_rating_stars = static function (float $rating): int {\n    return max(0, min(5, (int) floor($rating + 0.001)));\n};\n\n$reviews_v2_rating_label = static function (array $review) use ($reviews_v2_normalize_rating, $reviews_v2_rating_stars): string {\n    $custom = trim($review['rating_label'] ?? '');\n    if ($custom !== '') {\n        return $custom;\n    }\n\n    $rating = $reviews_v2_normalize_rating($review);\n    $tier = max(1, $reviews_v2_rating_stars($rating));\n    $labels = [\n        5 => 'Отлично',\n        4 => 'Хорошо',\n        3 => 'Нормально',\n        2 => 'Плохо',\n        1 => 'Ужасно',\n    ];\n\n    return ($labels[$tier] ?? 'Отлично') . ' \/ ' . number_format($rating, 1, '.', '');\n};\n\n$reviews_v2_render_stars = static function (float $rating, string $size = 'sm'): void {\n    $rating = max(0, min(5, round($rating, 1)));\n    ?>\n    <span\n      class=\"stars-rating stars-rating--<?= htmlspecialchars($size) ?>\"\n      style=\"--stars-rating-value: <?= htmlspecialchars(number_format($rating, 1, '.', '')) ?>\"\n      aria-hidden=\"true\"\n    >\n      <span class=\"stars-rating__layer stars-rating__layer--empty\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n      <span class=\"stars-rating__layer stars-rating__layer--fill\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n    <\/span>\n    <?php\n};\n?>\n<?php\n$has_cta_icon = trim((string) $chat_icon_src) !== '';\n$reviews_v2_section_style = $has_cta_icon\n  ? '--reviews-v2-chat-icon-src: url(\\'' . htmlspecialchars($chat_icon_src) . '\\')'\n  : '';\n?>\n<section class=\"reviews-v2 <?= htmlspecialchars(trim(\\app\\generator\\SectionBg::classString($section_bg) . ' ' . \\app\\generator\\ReviewCardBg::classString($card_bg, 'reviews-v2'))) ?>\"<?php if ($reviews_v2_section_style !== ''): ?> style=\"<?= $reviews_v2_section_style ?>\"<?php endif; ?> data-reviews-list-visible=\"<?= (int) $reviews_list_visible_count ?>\">\n  <div class=\"container\">\n    <div class=\"reviews-v2__inner stack stack--xl\">\n      <div class=\"reviews-v2__head\">\n        <div class=\"reviews-v2__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'reviews-v2__eyebrow') ?>\n          <div class=\"titles stack stack--md\">\n            <<?= $heading_level ?> class=\"reviews-v2__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n            <p class=\"reviews-v2__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"reviews-v2__head-actions\">\n          <a class=\"reviews-v2__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n            <?= htmlspecialchars($all_link_label) ?>\n            <svg class=\"icon reviews-v2__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n        <\/div>\n      <\/div>\n\n      <div class=\"reviews-v2__body stack stack--xl\">\n        <?php if (!empty($text_reviews)): ?>\n          <div class=\"reviews-v2__main\">\n            <div class=\"reviews-v2__featured-col\">\n              <div class=\"reviews-v2__carousel\">\n                <div class=\"reviews-v2__slider swiper\">\n                  <div class=\"swiper-wrapper\">\n                    <?php foreach ($text_reviews as $review_index => $review): ?>\n                      <?php\n                        $author_line = $reviews_v2_author($review);\n                        $rating = $reviews_v2_normalize_rating($review);\n                        $rating_value = number_format($rating, 1, '.', '');\n                      ?>\n                      <div class=\"swiper-slide\" data-reviews-v2-slide=\"<?= (int) $review_index ?>\">\n                        <article class=\"reviews-v2__card reviews-v2__card--featured stack stack--md\">\n                          <div class=\"reviews-v2__featured-head\">\n                            <div class=\"reviews-v2__featured-stars\" aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> из 5\">\n                              <?php $reviews_v2_render_stars($rating, 'sm'); ?>\n                            <\/div>\n                            <?php if ($author_line !== ''): ?>\n                              <p class=\"reviews-v2__featured-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                            <?php endif; ?>\n                          <\/div>\n\n                          <div class=\"reviews-v2__featured-body stack stack--md\">\n                            <div class=\"reviews-v2__quote-wrap stack stack--sm\">\n                              <div class=\"reviews-v2__quote wysiwyg bodytext-md\"><?= $review['text'] ?><\/div>\n                              <button type=\"button\" class=\"reviews-v2__read-more\" data-reviews-v2-read-full hidden>\n                                Читать отзыв полностью\n                              <\/button>\n                            <\/div>\n\n                            <?php if (!empty($review['service'])): ?>\n                              <p class=\"reviews-v2__meta bodytext-strong\">\n                                <span class=\"reviews-v2__meta-label\">Услуга:<\/span>\n                                <span class=\"reviews-v2__meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                              <\/p>\n                            <?php endif; ?>\n\n                            <?php if (!empty($review['source_logo']) || !empty($review['date'])): ?>\n                              <div class=\"reviews-v2__featured-source\">\n                                <?php if (!empty($review['source_logo'])): ?>\n                                  <img class=\"reviews-v2__source-logo\" src=\"<?= htmlspecialchars($review['source_logo']) ?>\" alt=\"\" width=\"124\" height=\"21\" loading=\"lazy\" decoding=\"async\">\n                                <?php endif; ?>\n                                <?php if (!empty($review['date'])): ?>\n                                  <p class=\"reviews-v2__date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                                <?php endif; ?>\n                              <\/div>\n                            <?php endif; ?>\n                          <\/div>\n\n                          <template class=\"reviews-v2__full-template\">\n                            <div class=\"popup__review-head\">\n                              <?php $reviews_v2_render_stars($rating, 'sm'); ?>\n                              <?php if ($author_line !== ''): ?>\n                                <p class=\"popup__review-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                              <?php endif; ?>\n                            <\/div>\n                            <div class=\"popup__review-quote\" data-reviews-v2-popup-quote><\/div>\n                            <?php if (!empty($review['service'])): ?>\n                              <p class=\"popup__review-meta-row bodytext-strong\">\n                                <span class=\"popup__review-meta-label\">Услуга:<\/span>\n                                <span class=\"popup__review-meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                              <\/p>\n                            <?php endif; ?>\n                            <?php if (!empty($review['doctor'])): ?>\n                              <p class=\"popup__review-meta-row bodytext-strong\">\n                                <span class=\"popup__review-meta-label\">Врач:<\/span>\n                                <span class=\"popup__review-meta-value\"><?= htmlspecialchars($review['doctor']) ?><\/span>\n                              <\/p>\n                            <?php endif; ?>\n                            <?php if (!empty($review['source_logo']) || !empty($review['date'])): ?>\n                              <div class=\"popup__review-foot\">\n                                <?php if (!empty($review['source_logo'])): ?>\n                                  <img class=\"popup__review-source\" src=\"<?= htmlspecialchars($review['source_logo']) ?>\" alt=\"\" width=\"124\" height=\"21\" loading=\"lazy\" decoding=\"async\">\n                                <?php endif; ?>\n                                <?php if (!empty($review['date'])): ?>\n                                  <p class=\"popup__review-date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                                <?php endif; ?>\n                              <\/div>\n                            <?php endif; ?>\n                          <\/template>\n                        <\/article>\n                      <\/div>\n                    <?php endforeach; ?>\n                  <\/div>\n                <\/div>\n              <\/div>\n\n              <?php if (count($text_reviews) > 1): ?>\n                <div class=\"reviews-v2__controls slider-controls slider-nav--glass\">\n                  <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий отзыв\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                      <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                    <\/svg>\n                  <\/button>\n                  <div class=\"slider-pagination-host\">\n                    <div class=\"reviews-v2__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n                  <\/div>\n                  <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий отзыв\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                      <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                    <\/svg>\n                  <\/button>\n                <\/div>\n              <?php endif; ?>\n            <\/div>\n\n            <div class=\"reviews-v2__list-viewport\">\n              <div class=\"reviews-v2__list\" role=\"tablist\" aria-label=\"Список отзывов\">\n              <?php foreach ($text_reviews as $review_index => $review): ?>\n                <?php\n                  $author_line = $reviews_v2_author($review);\n                  $rating = $reviews_v2_normalize_rating($review);\n                  $rating_value = number_format($rating, 1, '.', '');\n                  $is_active = $review_index === 0;\n                ?>\n                <button\n                  type=\"button\"\n                  class=\"reviews-v2__list-item<?= $is_active ? ' is-active' : '' ?>\"\n                  role=\"tab\"\n                  aria-selected=\"<?= $is_active ? 'true' : 'false' ?>\"\n                  data-reviews-v2-index=\"<?= (int) $review_index ?>\"\n                >\n                  <div class=\"reviews-v2__list-main stack stack--md\">\n                    <div class=\"reviews-v2__list-top\">\n                      <div class=\"reviews-v2__list-rating\" aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> из 5\">\n                        <p class=\"reviews-v2__list-rating-label\"><?= htmlspecialchars($reviews_v2_rating_label($review)) ?><\/p>\n                        <svg class=\"icon reviews-v2__list-star\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n                          <use href=\"#icon-star\"><\/use>\n                        <\/svg>\n                      <\/div>\n                      <?php if ($author_line !== ''): ?>\n                        <p class=\"reviews-v2__list-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                      <?php endif; ?>\n                    <\/div>\n\n                    <div class=\"reviews-v2__list-row\">\n                      <div class=\"reviews-v2__list-text wysiwyg bodytext\"><?= $review['text'] ?><\/div>\n                      <div class=\"reviews-v2__list-side\">\n                        <?php if (!empty($review['source_logo'])): ?>\n                          <img class=\"reviews-v2__source-logo\" src=\"<?= htmlspecialchars($review['source_logo']) ?>\" alt=\"\" width=\"124\" height=\"21\" loading=\"lazy\" decoding=\"async\">\n                        <?php endif; ?>\n                        <?php if (!empty($review['date'])): ?>\n                          <p class=\"reviews-v2__date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                        <?php endif; ?>\n                      <\/div>\n                    <\/div>\n                  <\/div>\n\n                  <?php if (!empty($review['service']) || !empty($review['doctor'])): ?>\n                    <div class=\"reviews-v2__list-meta\">\n                      <?php if (!empty($review['service'])): ?>\n                        <p class=\"reviews-v2__meta bodytext-strong\">\n                          <span class=\"reviews-v2__meta-label\">Услуга:<\/span>\n                          <span class=\"reviews-v2__meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                        <\/p>\n                      <?php endif; ?>\n                      <?php if (!empty($review['service']) && !empty($review['doctor'])): ?>\n                        <span class=\"reviews-v2__list-meta-sep\" aria-hidden=\"true\"><\/span>\n                      <?php endif; ?>\n                      <?php if (!empty($review['doctor'])): ?>\n                        <p class=\"reviews-v2__meta bodytext-strong\">\n                          <span class=\"reviews-v2__meta-label\">Врач:<\/span>\n                          <span class=\"reviews-v2__meta-value\"><?= htmlspecialchars($review['doctor']) ?><\/span>\n                        <\/p>\n                      <?php endif; ?>\n                    <\/div>\n                  <?php endif; ?>\n                <\/button>\n              <?php endforeach; ?>\n              <\/div>\n            <\/div>\n          <\/div>\n        <?php endif; ?>\n\n        <div class=\"reviews-v2__platforms\">\n          <div class=\"reviews-v2__platforms-lead stack stack--md\">\n            <p class=\"reviews-v2__platforms-title megatext-md\">\n              <?= $platforms_title ?>\n            <\/p>\n            <button type=\"button\" class=\"reviews-v2__leave-review bodytext-strong\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('leave-review')) ?>\" data-remote=\"1\">\n              <?= htmlspecialchars($leave_review_label) ?>\n            <\/button>\n          <\/div>\n\n          <div class=\"reviews-v2__platforms-grid\">\n            <?php foreach ($platforms as $platform): ?>\n              <?php\n                $platform_logo_w = max(1, (int) ($platform['logo_w'] ?? 196));\n                $platform_logo_h = max(1, (int) ($platform['logo_h'] ?? 42));\n              ?>\n              <a class=\"reviews-v2__platform\" href=\"<?= htmlspecialchars($platform['url']) ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <img\n                  class=\"reviews-v2__platform-logo\"\n                  src=\"<?= htmlspecialchars($platform['logo']) ?>\"\n                  alt=\"\"\n                  width=\"<?= $platform_logo_w ?>\"\n                  height=\"<?= $platform_logo_h ?>\"\n                  style=\"--reviews-v2-platform-logo-w: <?= $platform_logo_w ?>px; --reviews-v2-platform-logo-h: <?= $platform_logo_h ?>px\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n                <div class=\"reviews-v2__platform-rating\">\n                  <span class=\"reviews-v2__platform-score bodytext-lg\"><?= htmlspecialchars($platform['rating']) ?><\/span>\n                  <?php $reviews_v2_render_stars((float) $platform['rating'], 'lg'); ?>\n                <\/div>\n                <p class=\"reviews-v2__platform-count bodytext-strong\"><?= htmlspecialchars($platform['count']) ?><\/p>\n              <\/a>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"reviews-v2__cta\">\n        <div class=\"reviews-v2__cta-inner\">\n          <div class=\"reviews-v2__cta-bg\" aria-hidden=\"true\">\n            <img class=\"reviews-v2__cta-pattern\" src=\"<?= htmlspecialchars($cta_pattern_src) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n          <\/div>\n\n          <?php if ($has_cta_icon): ?>\n          <span class=\"reviews-v2__cta-icon\" aria-hidden=\"true\">\n            <span class=\"reviews-v2__cta-icon-mark\"><\/span>\n          <\/span>\n          <?php endif; ?>\n\n          <div class=\"reviews-v2__cta-copy stack stack--sm\">\n            <p class=\"reviews-v2__cta-title megatext-md\"><?= htmlspecialchars($cta_title) ?><\/p>\n            <p class=\"reviews-v2__cta-text bodytext-lg\"><?= htmlspecialchars($cta_text) ?><\/p>\n          <\/div>\n\n          <div class=\"reviews-v2__cta-actions stack stack--md\">\n            <button type=\"button\" class=\"btn btn--white\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\">\n              <?= htmlspecialchars($cta_btn_label) ?>\n            <\/button>\n            <div class=\"reviews-v2__cta-notes bodytext\">\n              <?php foreach ($cta_notes as $index => $note): ?>\n                <?php if ($index > 0): ?>\n                  <span class=\"reviews-v2__cta-dot\" aria-hidden=\"true\"><\/span>\n                <?php endif; ?>\n                <span><?= htmlspecialchars($note) ?><\/span>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"reviews-v2__mobile-actions\">\n        <a class=\"btn btn--secondary reviews-v2__all-btn\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n          <?= htmlspecialchars($all_link_label) ?>\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "linking-services-variant-1": "<section class=\"linking-services-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"linking-services-v1__inner stack stack--md\">\n      <div class=\"linking-services-v1__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'linking-services-v1__eyebrow') ?>\n\n        <div class=\"linking-services-v1__head-row\">\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"linking-services-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n            <p class=\"linking-services-v1__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n\n          <?php if (count($items) > 1): ?>\n            <div class=\"linking-services-v1__nav slider-nav slider-nav--glass\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущие направления\">\n                <svg class=\"icon linking-services-v1__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                  <use href=\"#icon-slider-arrow\"><\/use>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующие направления\">\n                <svg class=\"icon linking-services-v1__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                  <use href=\"#icon-slider-arrow\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"linking-services-v1__slider-foot slider-foot\">\n        <div class=\"linking-services-v1__carousel\">\n          <div class=\"linking-services-v1__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($items as $item): ?>\n                <?php\n                  $card_image = trim((string) ($item['image'] ?? ''));\n                  $has_card_image = $card_image !== '';\n                ?>\n                <div class=\"swiper-slide\">\n                  <a class=\"linking-services-v1__card<?= $has_card_image ? '' : ' linking-services-v1__card--no-image' ?>\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                    <div class=\"linking-services-v1__card-copy\">\n                      <h3 class=\"linking-services-v1__card-title bodytext-lg\"><?= htmlspecialchars($item['name']) ?><\/h3>\n                      <p class=\"linking-services-v1__card-text bodytext\"><?= htmlspecialchars($item['text'] ?? $default_card_text) ?><\/p>\n                    <\/div>\n\n                    <?php if ($has_card_image): ?>\n                      <div class=\"linking-services-v1__card-photo\">\n                        <img\n                          class=\"linking-services-v1__card-img\"\n                          src=\"<?= htmlspecialchars($card_image) ?>\"\n                          alt=\"\"\n                          width=\"380\"\n                          height=\"222\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/div>\n                    <?php endif; ?>\n                  <\/a>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($items) > 1): ?>\n          <div class=\"slider-pagination-host\">\n            <div class=\"linking-services-v1__pagination slider-pagination--dots swiper-pagination\"><\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "expert-advice-variant-1": "<?php\n  $note_text = trim((string) $note_text);\n  $has_note_text = $note_text !== '';\n  $note_icon_src = trim((string) $note_icon_src);\n  $note_icon_sprite = trim((string) $note_icon_sprite);\n  $has_note_icon = $note_icon_src !== '' || $note_icon_sprite !== '';\n\n  $quote_icon_src = trim((string) $quote_icon_src);\n  $quote_icon_sprite = trim((string) $quote_icon_sprite);\n  $has_quote_icon = $quote_icon_src !== '' || $quote_icon_sprite !== '';\n?>\n<section class=\"expert-advice-v1 expert-advice-v1--photo-<?= htmlspecialchars($photo_side) ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"expert-advice-v1__grid\">\n      <div class=\"expert-advice-v1__main stack stack--xl\">\n        <div class=\"expert-advice-v1__head stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'expert-advice-v1__eyebrow') ?>\n          <<?= $heading_level ?> class=\"expert-advice-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n        <\/div>\n\n        <div class=\"expert-advice-v1__quote<?= $has_quote_icon ? '' : ' expert-advice-v1__quote--no-icon' ?>\">\n          <?php if ($has_quote_icon): ?>\n            <?php if ($quote_icon_src !== ''): ?>\n              <img\n                class=\"expert-advice-v1__quote-icon expert-advice-v1__quote-icon-img\"\n                src=\"<?= htmlspecialchars($quote_icon_src) ?>\"\n                alt=\"\"\n                width=\"44\"\n                height=\"44\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <?php else: ?>\n              <svg class=\"icon expert-advice-v1__quote-icon\" width=\"44\" height=\"44\" aria-hidden=\"true\">\n                <use href=\"#<?= htmlspecialchars($quote_icon_sprite) ?>\"><\/use>\n              <\/svg>\n            <?php endif; ?>\n          <?php endif; ?>\n          <div class=\"expert-advice-v1__quote-text bodytext-md\">\n            <?php foreach ($quote_paragraphs as $p): ?>\n              <p><?= htmlspecialchars($p) ?><\/p>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n\n        <?php if ($has_note_text): ?>\n        <div class=\"expert-advice-v1__note<?= $has_note_icon ? '' : ' expert-advice-v1__note--no-icon' ?>\">\n          <?php if ($has_note_icon): ?>\n            <?php if ($note_icon_src !== ''): ?>\n              <img\n                class=\"expert-advice-v1__note-icon expert-advice-v1__note-icon-img\"\n                src=\"<?= htmlspecialchars($note_icon_src) ?>\"\n                alt=\"\"\n                width=\"40\"\n                height=\"40\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <?php else: ?>\n              <svg class=\"icon expert-advice-v1__note-icon\" width=\"40\" height=\"40\" aria-hidden=\"true\">\n                <use href=\"#<?= htmlspecialchars($note_icon_sprite) ?>\"><\/use>\n              <\/svg>\n            <?php endif; ?>\n          <?php endif; ?>\n          <p class=\"expert-advice-v1__note-text bodytext-lg\"><?= htmlspecialchars($note_text) ?><\/p>\n        <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <figure class=\"expert-advice-v1__doctor\">\n        <div class=\"expert-advice-v1__doctor-media\">\n          <img src=\"<?= htmlspecialchars($doctor_photo) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n          <?php if ($show_doctor_info): ?>\n            <figcaption class=\"expert-advice-v1__doctor-caption\">\n              <p class=\"expert-advice-v1__doctor-name megatext-sm\"><?= htmlspecialchars($doctor_name) ?><\/p>\n              <p class=\"expert-advice-v1__doctor-meta bodytext\">\n                <?php foreach ($doctor_meta as $i => $part): ?>\n                  <?php if ($i > 0): ?>\n                    <span class=\"expert-advice-v1__doctor-dot\" aria-hidden=\"true\"><\/span>\n                  <?php endif; ?>\n                  <span><?= htmlspecialchars($part) ?><\/span>\n                <?php endforeach; ?>\n              <\/p>\n            <\/figcaption>\n          <?php endif; ?>\n        <\/div>\n      <\/figure>\n    <\/div>\n  <\/div>\n<\/section>",
            "promo-variant-3": "<section\n  class=\"promo-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  data-promo-v3-mobile-limit=\"<?= (int) $mobile_limit ?>\"\n>\n  <div class=\"container\">\n    <div class=\"promo-v3__inner stack stack--xl\">\n      <div class=\"promo-v3__head\">\n        <div class=\"promo-v3__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'promo-v3__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"promo-v3__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <\/div>\n        <\/div>\n\n        <div class=\"promo-v3__head-actions\">\n          <a class=\"promo-v3__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n            <?= htmlspecialchars($all_link_label) ?>\n            <svg class=\"icon promo-v3__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n\n          <?php if (count($items) > 3): ?>\n            <div class=\"promo-v3__slider-nav slider-nav slider-nav--brand\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущие предложения\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующие предложения\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"promo-v3__slider-foot slider-foot\">\n        <div class=\"promo-v3__carousel\">\n          <div class=\"promo-v3__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($items as $item): ?>\n                <?php\n                  $offer = $item['offer'] ?? [];\n                  $badge_tone = $item['badge_tone'] ?? 'gold';\n                  if (!in_array($badge_tone, $promo_v3_badge_tones, true)) {\n                      $badge_tone = 'gold';\n                  }\n                  $item_badge = trim((string) ($item['badge'] ?? ''));\n                  $has_item_badge = $item_badge !== '';\n                  $badge_icon = trim((string) ($item['badge_icon'] ?? ''));\n                  $has_badge_icon = $badge_icon !== '';\n                  $card_class = 'promo-v3__card';\n                  if (($item['image_fit'] ?? '') === 'wide') {\n                      $card_class .= ' promo-v3__card--wide-media';\n                  }\n                  $offer_gift_icon = trim((string) ($offer['icon'] ?? ''));\n                  $has_offer_gift_icon = $offer_gift_icon !== '';\n                ?>\n                <div class=\"swiper-slide\">\n                  <article class=\"<?= htmlspecialchars($card_class) ?>\">\n                    <div class=\"promo-v3__card-media\" aria-hidden=\"true\">\n                      <img\n                        class=\"promo-v3__card-img\"\n                        src=\"<?= htmlspecialchars($item['image'] ?? '') ?>\"\n                        alt=\"\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/div>\n\n                    <div class=\"promo-v3__card-main\">\n                      <div class=\"promo-v3__card-copy stack stack--sm\">\n                        <?php if ($has_item_badge): ?>\n                          <p class=\"promo-v3__badge promo-v3__badge--<?= htmlspecialchars($badge_tone) ?><?= $has_badge_icon ? '' : ' promo-v3__badge--no-mark' ?> uibtntext\">\n                            <?php if ($has_badge_icon): ?>\n                              <span\n                                class=\"promo-v3__badge-mark\"\n                                style=\"--promo-v3-badge-icon-src: url('<?= htmlspecialchars($badge_icon, ENT_QUOTES) ?>')\"\n                                aria-hidden=\"true\"\n                              >\n                                <span class=\"promo-v3__badge-icon-glyph\"><\/span>\n                              <\/span>\n                            <?php endif; ?>\n                            <span class=\"promo-v3__badge-text\"><?= htmlspecialchars($item_badge) ?><\/span>\n                          <\/p>\n                        <?php endif; ?>\n\n                        <p class=\"promo-v3__card-title megatext-md\"><?= $item['title'] ?? '' ?><\/p>\n                        <p class=\"promo-v3__card-text bodytext-lg-regular\"><?= htmlspecialchars($item['text'] ?? '') ?><\/p>\n                      <\/div>\n\n                      <div class=\"promo-v3__offer\">\n                        <?php if (($offer['type'] ?? '') === 'discount'): ?>\n                          <div class=\"promo-v3__offer-head promo-v3__offer-head--discount\">\n                            <p class=\"promo-v3__offer-label uibtntext\"><?= htmlspecialchars($offer['label'] ?? '') ?><\/p>\n                            <p class=\"promo-v3__offer-value megatext-md\"><?= htmlspecialchars($offer['value'] ?? '') ?><\/p>\n                          <\/div>\n                        <?php elseif (($offer['type'] ?? '') === 'price'): ?>\n                          <div class=\"promo-v3__offer-head promo-v3__offer-head--price\">\n                            <p class=\"promo-v3__offer-price megatext-md\"><?= htmlspecialchars($offer['price'] ?? '') ?><\/p>\n                            <p class=\"promo-v3__offer-old megatext-md\"><?= htmlspecialchars($offer['old_price'] ?? '') ?><\/p>\n                          <\/div>\n                        <?php elseif (($offer['type'] ?? '') === 'gift'): ?>\n                          <div class=\"promo-v3__offer-head promo-v3__offer-head--gift<?= $has_offer_gift_icon ? '' : ' promo-v3__offer-head--no-icon' ?>\">\n                            <?php if ($has_offer_gift_icon): ?>\n                              <img\n                                class=\"promo-v3__offer-gift-icon\"\n                                src=\"<?= htmlspecialchars($offer_gift_icon) ?>\"\n                                alt=\"\"\n                                width=\"44\"\n                                height=\"44\"\n                                loading=\"lazy\"\n                                decoding=\"async\"\n                              >\n                            <?php endif; ?>\n                            <p class=\"promo-v3__offer-gift-label megatext-md\"><?= htmlspecialchars($offer['label'] ?? '') ?><\/p>\n                          <\/div>\n                        <?php endif; ?>\n\n                        <a class=\"promo-v3__offer-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($offer['link_url'] ?? '#') ?>\">\n                          <?= htmlspecialchars($offer['link_label'] ?? '') ?>\n                          <svg class=\"icon promo-v3__offer-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                            <use href=\"#icon-arrow-right\"><\/use>\n                          <\/svg>\n                        <\/a>\n                      <\/div>\n                    <\/div>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($items) > 3): ?>\n          <div class=\"slider-pagination-host\">\n            <div class=\"promo-v3__pagination slider-pagination--dots swiper-pagination\"><\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "faq-variant-1": "<?php\n  $sidebar_icon_sprite = trim((string) $sidebar_icon_sprite);\n  $sidebar_phone_icon_sprite = trim((string) $sidebar_phone_icon_sprite);\n  $sidebar_icon = trim((string) $sidebar_icon);\n  $sidebar_phone_icon = trim((string) $sidebar_phone_icon);\n  $has_sidebar_icon = $sidebar_icon_sprite !== '' || $sidebar_icon !== '';\n  $has_sidebar_phone_icon = $sidebar_phone_icon_sprite !== '' || $sidebar_phone_icon !== '';\n?>\n<section class=\"faq-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"faq-v1__head stack stack--sm\">\n      <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'faq-v1__eyebrow') ?>\n      <div class=\"titles\">\n        <<?= $heading_level ?> class=\"faq-v1__title megatext\">\n          <?= htmlspecialchars($title) ?>\n        <\/<?= $heading_level ?>>\n        <p class=\"faq-v1__lead bodytext-lg\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/div>\n    <\/div>\n\n    <div\n      class=\"faq-v1__grid\"\n      data-faq-v1-initial=\"<?= (int)$initial_visible ?>\"\n      data-faq-v1-step=\"<?= (int)$reveal_step ?>\"\n    >\n      <div class=\"faq-v1__main\">\n        <div class=\"faq-v1__accordion\" aria-label=\"FAQ\">\n          <?php foreach ($items as $index => $item): ?>\n            <?php\n              $trigger_id = 'faq-v1-trigger-' . ($index + 1);\n              $panel_id   = 'faq-v1-panel-' . ($index + 1);\n              $materials  = isset($item['materials']) && is_array($item['materials']) ? $item['materials'] : [];\n              $materials_count = count($materials);\n              $is_hidden = $index >= $initial_visible;\n              $question = (string)($item['question'] ?? '');\n              $question_is_html = strpos($question, '<') !== false;\n              $answer = (string)($item['answer'] ?? '');\n              $answer_is_html = strpos($answer, '<') !== false;\n              $item_icon_sprite = trim((string) ($item['icon_sprite'] ?? ''));\n              $item_icon = trim((string) ($item['icon'] ?? ''));\n              $has_q_icon = $item_icon_sprite !== '' || $item_icon !== '';\n            ?>\n            <div class=\"faq-v1__item\" data-faq-v1-item<?= $is_hidden ? ' hidden' : '' ?>>\n              <div\n                class=\"faq-v1__trigger\"\n                role=\"button\"\n                tabindex=\"0\"\n                id=\"<?= htmlspecialchars($trigger_id) ?>\"\n                aria-expanded=\"false\"\n                aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              >\n                <span class=\"faq-v1__left<?= $has_q_icon ? '' : ' faq-v1__left--no-icon' ?>\">\n                  <?php if ($has_q_icon): ?>\n                    <span class=\"faq-v1__q-icon\" aria-hidden=\"true\">\n                      <?php if ($item_icon !== ''): ?>\n                        <img class=\"faq-v1__q-icon-svg\" src=\"<?= htmlspecialchars($item_icon) ?>\" alt=\"\" width=\"38\" height=\"42\" loading=\"lazy\" decoding=\"async\">\n                      <?php else: ?>\n                        <svg class=\"icon faq-v1__q-icon-svg\" width=\"38\" height=\"42\" aria-hidden=\"true\">\n                          <use href=\"#<?= htmlspecialchars($item_icon_sprite) ?>\"><\/use>\n                        <\/svg>\n                      <?php endif; ?>\n                    <\/span>\n                  <?php endif; ?>\n                  <span class=\"faq-v1__question bodytext-lg\">\n                    <?= $question_is_html ? $question : htmlspecialchars($question) ?>\n                  <\/span>\n                <\/span>\n\n                <span class=\"faq-v1__right\">\n                  <?php if ($materials_count > 0): ?>\n                    <span class=\"faq-v1__meta bodytext\"><?= htmlspecialchars($materials_count) ?> материалов<\/span>\n                  <?php endif; ?>\n                  <span class=\"faq-v1__chevron\" aria-hidden=\"true\">\n                    <svg class=\"icon faq-v1__chevron-svg\" width=\"31\" height=\"32\" aria-hidden=\"true\">\n                      <use href=\"#icon-faq-arrow\"><\/use>\n                    <\/svg>\n                  <\/span>\n                <\/span>\n              <\/div>\n              <div\n                class=\"faq-v1__panel\"\n                id=\"<?= htmlspecialchars($panel_id) ?>\"\n                role=\"region\"\n                aria-labelledby=\"<?= htmlspecialchars($trigger_id) ?>\"\n                hidden\n              >\n                <div class=\"faq-v1__panel-inner\">\n                  <div class=\"faq-v1__panel-body\">\n                    <?php if ($answer_is_html): ?>\n                      <div class=\"faq-v1__answer wysiwyg bodytext\"><?= $answer ?><\/div>\n                    <?php else: ?>\n                      <p class=\"faq-v1__answer bodytext\"><?= htmlspecialchars($answer) ?><\/p>\n                    <?php endif; ?>\n                    <?php if ($materials_count > 0): ?>\n                      <div class=\"faq-v1__materials\" aria-label=\"Материалы\">\n                        <?php foreach ($materials as $material): ?>\n                          <a class=\"faq-v1__material bodytext text-decoration-fade\" href=\"<?= htmlspecialchars($material['url']) ?>\">\n                            <?= htmlspecialchars($material['title']) ?>\n                          <\/a>\n                        <?php endforeach; ?>\n                      <\/div>\n                    <?php endif; ?>\n                  <\/div>\n                <\/div>\n              <\/div>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n\n        <div class=\"faq-v1__more-row\">\n          <button type=\"button\" class=\"btn btn--secondary faq-v1__more uibtntext\" data-faq-v1-more hidden>\n            Показать ещё\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <aside class=\"faq-v1__aside\" aria-label=\"Связаться\">\n        <div class=\"faq-v1__aside-card\">\n          <div class=\"faq-v1__aside-head<?= $has_sidebar_icon ? '' : ' faq-v1__aside-head--no-icon' ?>\">\n            <?php if ($has_sidebar_icon): ?>\n              <span class=\"faq-v1__aside-icon\" aria-hidden=\"true\">\n                <?php if ($sidebar_icon !== ''): ?>\n                  <img class=\"faq-v1__aside-icon-svg\" src=\"<?= htmlspecialchars($sidebar_icon) ?>\" alt=\"\" width=\"34\" height=\"34\" loading=\"lazy\" decoding=\"async\">\n                <?php else: ?>\n                  <svg class=\"icon faq-v1__aside-icon-svg\" width=\"34\" height=\"34\" aria-hidden=\"true\">\n                    <use href=\"#<?= htmlspecialchars($sidebar_icon_sprite) ?>\"><\/use>\n                  <\/svg>\n                <?php endif; ?>\n              <\/span>\n            <?php endif; ?>\n            <div class=\"faq-v1__aside-text stack stack--sm\">\n              <p class=\"faq-v1__aside-title leadtext\"><?= htmlspecialchars($sidebar_title) ?><\/p>\n              <p class=\"faq-v1__aside-desc bodytext\"><?= htmlspecialchars($sidebar_text) ?><\/p>\n            <\/div>\n          <\/div>\n\n          <button\n            type=\"button\"\n            class=\"btn btn--primary faq-v1__aside-btn uibtntext\"\n            data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('sidebar-cta')) ?>\"\n            data-remote=\"1\"\n          >\n            <?= htmlspecialchars(mb_strtoupper($sidebar_btn, 'UTF-8')) ?>\n          <\/button>\n\n          <div class=\"faq-v1__aside-foot<?= $has_sidebar_phone_icon ? '' : ' faq-v1__aside-foot--no-icon' ?>\">\n            <?php if ($has_sidebar_phone_icon): ?>\n              <span class=\"faq-v1__aside-phone-icon\" aria-hidden=\"true\">\n                <?php if ($sidebar_phone_icon !== ''): ?>\n                  <img class=\"faq-v1__aside-phone-icon-svg\" src=\"<?= htmlspecialchars($sidebar_phone_icon) ?>\" alt=\"\" width=\"16\" height=\"16\" loading=\"lazy\" decoding=\"async\">\n                <?php else: ?>\n                  <svg class=\"icon faq-v1__aside-phone-icon-svg\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                    <use href=\"#<?= htmlspecialchars($sidebar_phone_icon_sprite) ?>\"><\/use>\n                  <\/svg>\n                <?php endif; ?>\n              <\/span>\n            <?php endif; ?>\n            <div class=\"faq-v1__aside-phone-text stack stack--sm\">\n              <a class=\"faq-v1__aside-phone bodytext-lg text-decoration-fade\" href=\"<?= htmlspecialchars($sidebar_phone_href) ?>\">\n                <?= htmlspecialchars($sidebar_phone) ?>\n              <\/a>\n              <p class=\"faq-v1__aside-hours bodytext-sm\"><?= htmlspecialchars($sidebar_hours) ?><\/p>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "hero-variant-5": "<?php $lcp_image = $bg_image; ?>\n<section class=\"hero-v5 has-block-bg section-pad-y-lg\">\n  <div class=\"hero-v5__bg block-bg\" aria-hidden=\"true\">\n    <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" <?= \\app\\generator\\PageCriticalResources::imgAttrs($bg_image) ?>>\n  <\/div>\n  <div class=\"container\">\n    <div class=\"hero-v5__inner stack stack--xl\">\n    <div class=\"hero-v5__head stack stack--md\">\n      <div class=\"hero-v5__lead stack stack--sm\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'hero-v5__eyebrow') ?>\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"hero-v5__title megatext\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n          <p class=\"hero-v5__subtitle leadtext\"><?= htmlspecialchars($subtitle) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"hero-v5__facts\">\n        <?php foreach ($facts as $fact): ?>\n          <?php\n            $fact_icon = trim((string) ($fact['icon'] ?? ''));\n            $has_fact_icon = $fact_icon !== '';\n          ?>\n          <div class=\"hero-v5__fact<?= $has_fact_icon ? '' : ' hero-v5__fact--no-icon' ?>\">\n            <?php if ($has_fact_icon): ?>\n              <span class=\"hero-v5__icon\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"44\" height=\"44\" aria-hidden=\"true\">\n                  <use href=\"#icon-<?= htmlspecialchars($fact_icon) ?>\"><\/use>\n                <\/svg>\n              <\/span>\n            <?php endif; ?>\n            <div class=\"hero-v5__fact-text\">\n              <span class=\"hero-v5__fact-label bodytext-strong\"><?= htmlspecialchars($fact['label']) ?><\/span>\n              <span class=\"hero-v5__fact-value bodytext-lg\"><?= htmlspecialchars($fact['value']) ?><\/span>\n            <\/div>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n\n    <button type=\"button\" class=\"btn btn--primary\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\"><?= htmlspecialchars($cta) ?><\/button>\n    <\/div>\n  <\/div>\n<\/section>",
            "benefits-variant-1": "<?php\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $items = \\app\\generator\\ContentPresence::items($items, ['title', 'text']);\n  $has_intro = $has_text($eyebrow) || $has_text($title) || $has_text($lead);\n  $decor_src = trim((string) ($decor_src ?? ''));\n  $has_decor = $decor_src !== '';\n?>\n<?php\n  $benefits_v1_show_article = false;\n  $has_article_icon = false;\n  $has_article_link = false;\n  $article_text = '';\n  $article_url = '';\n  $article_link_label = '';\n  $article_icon_src = '';\n\n  if (is_array($article)) {\n      $article_text = trim((string) ($article['text'] ?? ''));\n      $benefits_v1_show_article = $has_text($article_text);\n\n      if ($benefits_v1_show_article) {\n          $article_icon_src = trim((string) ($article['icon_src'] ?? ''));\n          $has_article_icon = $article_icon_src !== '';\n          $article_link_label = trim((string) ($article['link_label'] ?? ''));\n          $article_url = trim((string) ($article['url'] ?? ''));\n          $has_article_link = $article_url !== '' && $has_text($article_link_label);\n      }\n  }\n?>\n<?php if ($has_intro || $benefits_v1_show_article || $items !== []): ?>\n<section class=\"benefits-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <?php if ($has_decor): ?>\n    <img\n      class=\"benefits-v1__decor\"\n      src=\"<?= htmlspecialchars($decor_src) ?>\"\n      alt=\"\"\n      aria-hidden=\"true\"\n      width=\"1289\"\n      height=\"537\"\n      loading=\"lazy\"\n      decoding=\"async\"\n    >\n  <?php endif; ?>\n  <div class=\"container\">\n    <div class=\"benefits-v1__grid\">\n      <?php if ($has_intro || $benefits_v1_show_article): ?><div class=\"benefits-v1__left\">\n        <?php if ($has_intro): ?><div class=\"benefits-v1__lead stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'benefits-v1__eyebrow') ?>\n          <?php if ($has_text($title) || $has_text($lead)): ?><div class=\"titles\">\n            <?php if ($has_text($title)): ?><<?= $heading_level ?> class=\"benefits-v1__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>><?php endif; ?>\n            <?php if ($has_text($lead)): ?><p class=\"benefits-v1__subtitle leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p><?php endif; ?>\n          <\/div><?php endif; ?>\n        <\/div><?php endif; ?>\n\n        <?php if ($benefits_v1_show_article): ?>\n          <div class=\"benefits-v1__article<?= $has_article_icon ? '' : ' benefits-v1__article--no-icon' ?>\">\n            <?php if ($has_article_icon): ?>\n              <span class=\"benefits-v1__article-icon\" aria-hidden=\"true\">\n                <img\n                  src=\"<?= htmlspecialchars($article_icon_src) ?>\"\n                  alt=\"\"\n                  width=\"38\"\n                  height=\"38\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <div class=\"benefits-v1__article-body stack stack--sm\">\n              <?php if ($has_text($article['title'] ?? '')): ?><p class=\"benefits-v1__article-title bodytext-lg\"><?= htmlspecialchars($article['title']) ?><\/p><?php endif; ?>\n              <?php if ($has_text($article_text)): ?><p class=\"benefits-v1__article-text bodytext-md\"><?= htmlspecialchars($article_text) ?><\/p><?php endif; ?>\n              <?php if ($has_article_link): ?>\n                <a class=\"benefits-v1__article-link link-arrow bodytext-strong\" href=\"<?= htmlspecialchars($article_url) ?>\">\n                  <?= htmlspecialchars($article_link_label) ?>\n                  <svg class=\"icon benefits-v1__article-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-arrow-right\"><\/use>\n                  <\/svg>\n                <\/a>\n              <?php endif; ?>\n            <\/div>\n          <\/div>\n        <?php endif; ?>\n      <\/div><?php endif; ?>\n\n      <?php $default_card_icon_src = trim((string) ($default_card_icon_src ?? '')); ?>\n      <?php if ($items !== []): ?><ul class=\"benefits-v1__cards\">\n        <?php foreach ($items as $item): ?>\n          <?php\n            $card_icon_src = trim((string) ($item['icon_src'] ?? ''));\n            if ($card_icon_src === '') {\n                $card_icon_src = $default_card_icon_src;\n            }\n            $has_card_icon = $card_icon_src !== '';\n          ?>\n          <li class=\"benefits-v1__card<?= $has_card_icon ? '' : ' benefits-v1__card--no-icon' ?>\">\n            <?php if ($has_card_icon): ?>\n              <span class=\"benefits-v1__icon\" aria-hidden=\"true\">\n                <img\n                  class=\"benefits-v1__icon-img\"\n                  src=\"<?= htmlspecialchars($card_icon_src) ?>\"\n                  alt=\"\"\n                  width=\"18\"\n                  height=\"19\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <div class=\"benefits-v1__card-body stack stack--sm\">\n              <?php if ($has_text($item['title'] ?? '')): ?><p class=\"benefits-v1__card-title leadtext-xl\"><?= htmlspecialchars($item['title']) ?><\/p><?php endif; ?>\n              <?php if ($has_text($item['text'] ?? '')): ?><p class=\"benefits-v1__card-text bodytext-lg\"><?= htmlspecialchars($item['text']) ?><\/p><?php endif; ?>\n            <\/div>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul><?php endif; ?>\n    <\/div>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "patient-errors-variant-1": "<section class=\"patient-errors-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"patient-errors-v1__inner stack stack--xl\">\n      <div class=\"patient-errors-v1__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'patient-errors-v1__eyebrow') ?>\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"patient-errors-v1__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n          <p class=\"patient-errors-v1__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <ul class=\"patient-errors-v1__cards\">\n        <?php foreach ($items as $item): ?>\n          <?php\n          $item_icon = trim((string) ($item['icon'] ?? ''));\n          $has_item_icon = $item_icon !== '';\n          ?>\n          <li class=\"patient-errors-v1__card-item\">\n            <article class=\"patient-errors-v1__card<?= $has_item_icon ? '' : ' patient-errors-v1__card--no-icon' ?>\">\n              <span class=\"patient-errors-v1__badge bodytext-md\"><?= htmlspecialchars($badge_label) ?><\/span>\n              <?php if ($has_item_icon): ?>\n                <span class=\"patient-errors-v1__icon\" aria-hidden=\"true\">\n                  <img\n                    class=\"patient-errors-v1__icon-img\"\n                    src=\"<?= htmlspecialchars($item_icon) ?>\"\n                    alt=\"\"\n                    width=\"48\"\n                    height=\"48\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <\/span>\n              <?php endif; ?>\n              <div class=\"patient-errors-v1__card-body\">\n                <p class=\"patient-errors-v1__card-title bodytext\"><?= htmlspecialchars($item['title']) ?><\/p>\n                <p class=\"patient-errors-v1__card-text bodytext-md\"><?= htmlspecialchars($item['text']) ?><\/p>\n              <\/div>\n            <\/article>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>",
            "content-strip-link-variant-1": "<?php\n  $title = trim((string) $title);\n  $description = trim((string) $description);\n  $link_label = trim((string) $link_label);\n  $url = trim((string) $url);\n  $icon = trim((string) $icon);\n  $has_link = $url !== '';\n  $tag = $has_link ? 'a' : 'div';\n?>\n<?php if ($title !== '' || $description !== ''): ?>\n<section class=\"content-strip-link-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <<?= $tag ?>\n      class=\"content-strip-link-v1__inner\"\n      <?php if ($has_link): ?>href=\"<?= htmlspecialchars($url) ?>\"<?php endif; ?>\n    >\n      <span class=\"content-strip-link-v1__main\">\n        <?php if ($icon !== ''): ?>\n          <span class=\"content-strip-link-v1__icon\" aria-hidden=\"true\">\n            <img\n              class=\"content-strip-link-v1__icon-img\"\n              src=\"<?= htmlspecialchars($icon) ?>\"\n              alt=\"\"\n              width=\"38\"\n              height=\"38\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/span>\n        <?php endif; ?>\n\n        <span class=\"content-strip-link-v1__copy\">\n          <?php if ($title !== ''): ?>\n            <span class=\"content-strip-link-v1__title leadtext-xl\"><?= htmlspecialchars($title) ?><\/span>\n          <?php endif; ?>\n          <?php if ($description !== ''): ?>\n            <span class=\"content-strip-link-v1__description bodytext-lg-regular\"><?= htmlspecialchars($description) ?><\/span>\n          <?php endif; ?>\n        <\/span>\n      <\/span>\n\n      <?php if ($has_link && $link_label !== ''): ?>\n        <span class=\"content-strip-link-v1__link bodytext-strong\">\n          <span><?= htmlspecialchars($link_label) ?><\/span>\n          <svg class=\"icon content-strip-link-v1__link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n            <use href=\"#icon-arrow-right\"><\/use>\n          <\/svg>\n        <\/span>\n      <?php endif; ?>\n    <\/<?= $tag ?>>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "treatment-technologies-variant-1": "<section class=\"treatment-technologies-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"treatment-technologies-v1__head\">\n      <div class=\"treatment-technologies-v1__head-main stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'treatment-technologies-v1__eyebrow') ?>\n        <<?= $heading_level ?> class=\"treatment-technologies-v1__title megatext\">\n          <?= $title ?>\n        <\/<?= $heading_level ?>>\n      <\/div>\n      <p class=\"treatment-technologies-v1__head-lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n    <\/div>\n\n    <div class=\"treatment-technologies-v1__body\">\n      <div class=\"treatment-technologies-v1__list\" role=\"tablist\" aria-label=\"<?= htmlspecialchars($eyebrow) ?>\">\n        <?php foreach ($items as $index => $item): ?>\n          <?php\n          $tab_id   = 'treatment-technologies-v1-tab-' . $index;\n          $panel_id = 'treatment-technologies-v1-panel-' . $index;\n          $is_first = $index === 0;\n          ?>\n          <div class=\"treatment-technologies-v1__item\">\n            <button\n              type=\"button\"\n              class=\"treatment-technologies-v1__tab megatext-sm<?= $is_first ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($tab_id) ?>\"\n              role=\"tab\"\n              aria-selected=\"<?= $is_first ? 'true' : 'false' ?>\"\n              aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              data-treatment-technologies-tab\n              data-treatment-technologies-index=\"<?= $index ?>\"\n              tabindex=\"<?= $is_first ? '0' : '-1' ?>\"\n            >\n              <span class=\"treatment-technologies-v1__tab-label\"><?= htmlspecialchars($item['title']) ?><\/span>\n              <span class=\"treatment-technologies-v1__tab-arrow\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"32\" height=\"31\" aria-hidden=\"true\">\n                  <use href=\"#icon-linking-services-arrow\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/button>\n\n            <article\n              class=\"treatment-technologies-v1__panel<?= $is_first ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($panel_id) ?>\"\n              role=\"tabpanel\"\n              aria-labelledby=\"<?= htmlspecialchars($tab_id) ?>\"\n              data-treatment-technologies-panel\n              data-treatment-technologies-index=\"<?= $index ?>\"\n              aria-hidden=\"<?= $is_first ? 'false' : 'true' ?>\"\n              <?= $is_first ? '' : ' hidden' ?>\n            >\n              <div class=\"treatment-technologies-v1__panel-inner\">\n                <div class=\"treatment-technologies-v1__media\">\n                  <img\n                    class=\"treatment-technologies-v1__media-img\"\n                    src=\"<?= htmlspecialchars($item['image']) ?>\"\n                    alt=\"\"\n                    width=\"800\"\n                    height=\"516\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <\/div>\n\n                <div class=\"treatment-technologies-v1__detail-foot\">\n                  <p class=\"treatment-technologies-v1__detail-text bodytext-lg-regular\"><?= htmlspecialchars($item['text']) ?><\/p>\n                  <?php if (trim((string) ($item['badge'] ?? '')) !== ''): ?>\n                  <p class=\"treatment-technologies-v1__badge bodytext-lg-regular\">\n                    <span class=\"treatment-technologies-v1__badge-icon\" aria-hidden=\"true\"><\/span>\n                    <span class=\"treatment-technologies-v1__badge-text\"><?= htmlspecialchars($item['badge']) ?><\/span>\n                  <\/p>\n                  <?php endif; ?>\n                <\/div>\n              <\/div>\n            <\/article>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "doctors-variant-6": "<?php\n  $book_popup_id = \\app\\generator\\PageForms::id('book');\n  $doctors_total = count($doctors);\n  $banner_offset = (int) $banner_after;\n  $banner_inserted = false;\n  $doctor_index = 0;\n  $has_filter_specialty = !empty($show_filter_specialty);\n  $has_filter_direction = !empty($show_filter_direction);\n  $has_filter_online = !empty($show_filter_online);\n  $has_filter_today = !empty($show_filter_today);\n  $has_filter_pediatric = !empty($show_filter_pediatric);\n  $has_filter_gender = !empty($show_filter_gender);\n  $has_filter_experience = !empty($show_filter_experience);\n  $has_extra_toggles = $has_filter_online || $has_filter_today || $has_filter_pediatric;\n  $has_extra_panel = $has_extra_toggles || $has_filter_gender || $has_filter_experience;\n  $has_filters_expand = $has_filter_specialty || $has_filter_direction || $has_extra_panel;\n  $filters_row_selects = (int) $has_filter_specialty + (int) $has_filter_direction;\n  $available_label = trim((string) $available_label);\n  $has_available_label = $available_label !== '';\n\n  $render_team_banner = static function () use (\n    $banner_title,\n    $banner_lead,\n    $banner_video_label,\n    $banner_video_src,\n    $banner_image\n  ) {\n    $has_banner_video = trim((string) $banner_video_src) !== '';\n    $has_banner_image = trim((string) $banner_image) !== '';\n    ?>\n          <li class=\"doctors-v6__banner-item\">\n            <article class=\"doctors-v6__banner\">\n              <?php if ($has_banner_image): ?>\n              <div class=\"doctors-v6__banner-media\" aria-hidden=\"true\">\n                <img\n                  class=\"doctors-v6__banner-img\"\n                  src=\"<?= htmlspecialchars($banner_image) ?>\"\n                  alt=\"\"\n                  width=\"801\"\n                  height=\"508\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n                <span class=\"doctors-v6__banner-veil\"><\/span>\n                <span class=\"doctors-v6__banner-fade\"><\/span>\n              <\/div>\n              <?php endif; ?>\n              <div class=\"doctors-v6__banner-copy stack stack--xl\">\n                <div class=\"doctors-v6__banner-titles stack stack--md\">\n                  <p class=\"doctors-v6__banner-title megatext-md\"><?= htmlspecialchars($banner_title) ?><\/p>\n                  <?php if ($banner_lead !== ''): ?>\n                    <p class=\"doctors-v6__banner-lead bodytext-lg\"><?= htmlspecialchars($banner_lead) ?><\/p>\n                  <?php endif; ?>\n                <\/div>\n                <?php if ($has_banner_video): ?>\n                <a\n                  class=\"doctors-v6__banner-video\"\n                  href=\"#\"\n                  data-popup-open=\"media\"\n                  data-popup-src=\"<?= htmlspecialchars($banner_video_src) ?>\"\n                  data-popup-kind=\"video\"\n                  data-popup-alt=\"<?= htmlspecialchars($banner_video_label) ?>\"\n                >\n                  <span class=\"doctors-v6__banner-play\" aria-hidden=\"true\">\n                    <span class=\"doctors-v6__banner-play-bg\"><\/span>\n                    <svg class=\"icon doctors-v6__banner-play-icon\" width=\"9\" height=\"10\" aria-hidden=\"true\">\n                      <use href=\"#icon-play\"><\/use>\n                    <\/svg>\n                  <\/span>\n                  <span class=\"doctors-v6__banner-video-label bodytext-md\"><?= htmlspecialchars($banner_video_label) ?><\/span>\n                <\/a>\n                <?php endif; ?>\n              <\/div>\n            <\/article>\n          <\/li>\n    <?php\n  };\n?>\n<section\n  class=\"doctors-v6 doctors-v6--badge-<?= htmlspecialchars($badge_style) ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  style=\"--doctors-v6-photo-back: url('<?= htmlspecialchars($doctors_back_image) ?>')\"\n  data-doctors-v6-mobile-limit=\"<?= (int) $mobile_limit ?>\"\n  data-doctors-v6-desktop-rows=\"<?= (int) $desktop_rows ?>\"\n>\n  <div class=\"container\">\n    <div class=\"doctors-v6__inner stack stack--xl\">\n      <?php if (!empty($show_filters)): ?>\n        <div class=\"doctors-v6__filters\" data-doctors-v6-filters>\n          <span class=\"doctors-v6__filters-veil\" aria-hidden=\"true\"><\/span>\n          <div class=\"doctors-v6__filters-row doctors-v6__filters-row--selects-<?= (int) $filters_row_selects ?>\">\n            <label class=\"doctors-v6__search field\">\n              <input\n                class=\"field__input doctors-v6__search-input bodytext\"\n                type=\"search\"\n                name=\"doctors-v6-search\"\n                placeholder=\"\"\n                autocomplete=\"off\"\n                data-doctors-v6-search\n                data-doctors-v6-search-placeholder=\"<?= htmlspecialchars($search_placeholder) ?>\"\n                data-doctors-v6-search-placeholder-mobile=\"<?= htmlspecialchars($search_placeholder_mobile) ?>\"\n                aria-label=\"<?= htmlspecialchars($search_placeholder) ?>\"\n              >\n              <span class=\"doctors-v6__search-ph bodytext\" data-doctors-v6-search-ph aria-hidden=\"true\"><\/span>\n              <span class=\"doctors-v6__search-icon\" aria-hidden=\"true\">\n                <img src=\"<?= htmlspecialchars($search_icon_src) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n              <\/span>\n            <\/label>\n\n            <?php if ($has_filter_specialty): ?>\n            <div class=\"doctors-v6__select-wrap field\">\n              <select\n                class=\"field__input doctors-v6__select bodytext\"\n                data-doctors-v6-specialty\n                aria-label=\"<?= htmlspecialchars($specialties[0]['label'] ?? 'Специальность') ?>\"\n              >\n                <?php foreach ($specialties as $option): ?>\n                  <option value=\"<?= htmlspecialchars($option['key']) ?>\"<?= ($option['key'] ?? '') === 'all' ? ' selected' : '' ?>>\n                    <?= htmlspecialchars($option['label']) ?>\n                  <\/option>\n                <?php endforeach; ?>\n              <\/select>\n              <svg class=\"icon doctors-v6__select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                <use href=\"#icon-chevron-down\"><\/use>\n              <\/svg>\n              <button\n                type=\"button\"\n                class=\"doctors-v6__select-clear\"\n                data-doctors-v6-clear=\"specialty\"\n                aria-label=\"Сбросить специальность\"\n                hidden\n              >\n                <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                  <use href=\"#icon-close\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n            <?php endif; ?>\n\n            <?php if ($has_filter_direction): ?>\n            <div class=\"doctors-v6__select-wrap field\">\n              <select\n                class=\"field__input doctors-v6__select bodytext\"\n                data-doctors-v6-direction\n                aria-label=\"<?= htmlspecialchars($directions[0]['label'] ?? 'Направление') ?>\"\n              >\n                <?php foreach ($directions as $option): ?>\n                  <option value=\"<?= htmlspecialchars($option['key']) ?>\"<?= ($option['key'] ?? '') === 'all' ? ' selected' : '' ?>>\n                    <?= htmlspecialchars($option['label']) ?>\n                  <\/option>\n                <?php endforeach; ?>\n              <\/select>\n              <svg class=\"icon doctors-v6__select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                <use href=\"#icon-chevron-down\"><\/use>\n              <\/svg>\n              <button\n                type=\"button\"\n                class=\"doctors-v6__select-clear\"\n                data-doctors-v6-clear=\"direction\"\n                aria-label=\"Сбросить направление\"\n                hidden\n              >\n                <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                  <use href=\"#icon-close\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n            <?php endif; ?>\n          <\/div>\n\n          <?php if ($has_extra_panel): ?>\n          <div class=\"doctors-v6__filters-extra<?= $has_extra_toggles ? '' : ' doctors-v6__filters-extra--no-toggles' ?>\" data-doctors-v6-extra hidden>\n            <?php if ($has_extra_toggles): ?>\n            <div class=\"doctors-v6__toggles\">\n              <?php if ($has_filter_online): ?>\n              <label class=\"doctors-v6__toggle\">\n                <input class=\"doctors-v6__toggle-input\" type=\"checkbox\" data-doctors-v6-toggle=\"online\">\n                <span class=\"doctors-v6__switch\" aria-hidden=\"true\"><\/span>\n                <span class=\"doctors-v6__toggle-label bodytext-strong\"><?= htmlspecialchars($toggle_online_label) ?><\/span>\n              <\/label>\n              <?php endif; ?>\n              <?php if ($has_filter_today): ?>\n              <label class=\"doctors-v6__toggle\">\n                <input class=\"doctors-v6__toggle-input\" type=\"checkbox\" data-doctors-v6-toggle=\"today\">\n                <span class=\"doctors-v6__switch\" aria-hidden=\"true\"><\/span>\n                <span class=\"doctors-v6__toggle-label bodytext-strong\"><?= htmlspecialchars($toggle_today_label) ?><\/span>\n              <\/label>\n              <?php endif; ?>\n              <?php if ($has_filter_pediatric): ?>\n              <label class=\"doctors-v6__toggle\">\n                <input class=\"doctors-v6__toggle-input\" type=\"checkbox\" data-doctors-v6-toggle=\"pediatric\">\n                <span class=\"doctors-v6__switch\" aria-hidden=\"true\"><\/span>\n                <span class=\"doctors-v6__toggle-label bodytext-strong\"><?= htmlspecialchars($toggle_pediatric_label) ?><\/span>\n              <\/label>\n              <?php endif; ?>\n            <\/div>\n            <?php endif; ?>\n\n            <?php if ($has_filter_gender): ?>\n            <div class=\"doctors-v6__select-wrap field\">\n              <select\n                class=\"field__input doctors-v6__select bodytext\"\n                data-doctors-v6-gender\n                aria-label=\"<?= htmlspecialchars($genders[0]['label'] ?? 'Пол врача') ?>\"\n              >\n                <?php foreach ($genders as $option): ?>\n                  <option value=\"<?= htmlspecialchars($option['key']) ?>\"<?= ($option['key'] ?? '') === 'all' ? ' selected' : '' ?>>\n                    <?= htmlspecialchars($option['label']) ?>\n                  <\/option>\n                <?php endforeach; ?>\n              <\/select>\n              <svg class=\"icon doctors-v6__select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                <use href=\"#icon-chevron-down\"><\/use>\n              <\/svg>\n              <button\n                type=\"button\"\n                class=\"doctors-v6__select-clear\"\n                data-doctors-v6-clear=\"gender\"\n                aria-label=\"Сбросить пол врача\"\n                hidden\n              >\n                <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                  <use href=\"#icon-close\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n            <?php endif; ?>\n\n            <?php if ($has_filter_experience): ?>\n            <div class=\"doctors-v6__select-wrap field\">\n              <select\n                class=\"field__input doctors-v6__select bodytext\"\n                data-doctors-v6-experience\n                aria-label=\"<?= htmlspecialchars($experience_filters[0]['label'] ?? 'Стаж') ?>\"\n              >\n                <?php foreach ($experience_filters as $option): ?>\n                  <option value=\"<?= htmlspecialchars($option['key']) ?>\"<?= ($option['key'] ?? '') === 'all' ? ' selected' : '' ?>>\n                    <?= htmlspecialchars($option['label']) ?>\n                  <\/option>\n                <?php endforeach; ?>\n              <\/select>\n              <svg class=\"icon doctors-v6__select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                <use href=\"#icon-chevron-down\"><\/use>\n              <\/svg>\n              <button\n                type=\"button\"\n                class=\"doctors-v6__select-clear\"\n                data-doctors-v6-clear=\"experience\"\n                aria-label=\"Сбросить стаж\"\n                hidden\n              >\n                <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                  <use href=\"#icon-close\"><\/use>\n                <\/svg>\n              <\/button>\n            <\/div>\n            <?php endif; ?>\n          <\/div>\n          <?php endif; ?>\n\n          <div class=\"doctors-v6__filters-foot\">\n            <?php if ($has_filters_expand): ?>\n            <button\n              type=\"button\"\n              class=\"doctors-v6__more-params bodytext-strong<?= $has_extra_panel ? '' : ' doctors-v6__more-params--desktop-hidden' ?>\"\n              data-doctors-v6-more-params\n              data-doctors-v6-more-params-open=\"<?= htmlspecialchars($more_params_label) ?>\"\n              data-doctors-v6-more-params-close=\"<?= htmlspecialchars($collapse_params_label) ?>\"\n              data-doctors-v6-more-params-mobile=\"<?= htmlspecialchars($filters_label) ?>\"\n              aria-expanded=\"false\"\n            >\n              <svg class=\"icon doctors-v6__more-params-icon doctors-v6__more-params-icon--filter\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                <use href=\"#icon-filter\"><\/use>\n              <\/svg>\n              <span data-doctors-v6-more-params-label><?= htmlspecialchars($more_params_label) ?><\/span>\n              <svg class=\"icon doctors-v6__more-params-icon doctors-v6__more-params-icon--plus\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                <use href=\"#icon-plus\"><\/use>\n              <\/svg>\n            <\/button>\n            <?php endif; ?>\n            <div class=\"doctors-v6__filters-meta\" data-doctors-v6-meta hidden>\n              <p\n                class=\"doctors-v6__found bodytext-strong\"\n                data-doctors-v6-found\n                data-doctors-v6-found-prefix=\"<?= htmlspecialchars($found_prefix) ?>\"\n                data-doctors-v6-found-one=\"<?= htmlspecialchars($found_suffix_one) ?>\"\n                data-doctors-v6-found-few=\"<?= htmlspecialchars($found_suffix_few) ?>\"\n                data-doctors-v6-found-many=\"<?= htmlspecialchars($found_suffix_many) ?>\"\n              >\n                <?= htmlspecialchars($found_prefix) ?> 0 <?= htmlspecialchars($found_suffix_many) ?>\n              <\/p>\n              <button type=\"button\" class=\"doctors-v6__reset bodytext-strong\" data-doctors-v6-reset>\n                <?= htmlspecialchars($reset_label) ?>\n              <\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      <?php endif; ?>\n\n      <ul class=\"doctors-v6__grid\" data-doctors-v6-grid>\n        <?php foreach ($doctors as $doctor): ?>\n          <?php\n            if (!empty($show_team_banner) && !$banner_inserted && $doctor_index === $banner_offset) {\n              $render_team_banner();\n              $banner_inserted = true;\n            }\n\n            $specialty = trim((string) ($doctor['specialty'] ?? ''));\n            $role = trim((string) ($doctor['role'] ?? ''));\n            $image = trim((string) ($doctor['image'] ?? ''));\n            $has_image = $image !== '';\n            $more_url = trim((string) ($doctor['url'] ?? ''));\n            $doctor_alt = trim(($doctor['name_first'] ?? '') . ' ' . ($doctor['name_last'] ?? ''))\n              . ($specialty !== '' ? ' — ' . $specialty : '');\n            $image_has_bg = $has_image && !empty($doctor['image_has_bg']);\n            $available_today = !empty($doctor['available_today']);\n            $online = !empty($doctor['online']);\n            $pediatric = !empty($doctor['pediatric']) || (($doctor['specialty_key'] ?? '') === 'pediatric');\n            $name_first = $doctor['name_first'] ?? '';\n            $gender = $doctor['gender'] ?? (preg_match('\/вна|чна\/u', $name_first) ? 'female' : 'male');\n            $experience_value = trim((string) ($doctor['experience'] ?? ''));\n            $has_experience = $experience_value !== '';\n            $rating_value = trim((string) ($doctor['rating'] ?? ''));\n            $rating_number = str_replace(',', '.', $rating_value);\n            $has_rating = $rating_value !== '' && !(is_numeric($rating_number) && (float) $rating_number <= 0);\n            $experience_years = isset($doctor['experience_years'])\n              ? (int) $doctor['experience_years']\n              : (int) preg_replace('\/\\D+\/', '', $doctor['experience'] ?? '0');\n            $search_haystack = mb_strtolower(trim(\n              ($doctor['name_last'] ?? '') . ' ' .\n              ($doctor['name_first'] ?? '') . ' ' .\n              $specialty . ' ' .\n              $role\n            ), 'UTF-8');\n          ?>\n          <li\n            class=\"doctors-v6__item\"\n            data-doctors-v6-item\n            data-doctors-v6-specialty-key=\"<?= htmlspecialchars($doctor['specialty_key'] ?? '') ?>\"\n            data-doctors-v6-direction-key=\"<?= htmlspecialchars($doctor['direction_key'] ?? '') ?>\"\n            data-doctors-v6-gender=\"<?= htmlspecialchars($gender) ?>\"\n            data-doctors-v6-experience=\"<?= (int) $experience_years ?>\"\n            data-doctors-v6-online=\"<?= $online ? '1' : '0' ?>\"\n            data-doctors-v6-today=\"<?= $available_today ? '1' : '0' ?>\"\n            data-doctors-v6-pediatric=\"<?= $pediatric ? '1' : '0' ?>\"\n            data-doctors-v6-search-item=\"<?= htmlspecialchars($search_haystack) ?>\"\n          >\n            <article class=\"doctors-v6__card\">\n              <?php if ($has_image): ?>\n              <div class=\"doctors-v6__card-photo<?= $image_has_bg ? ' doctors-v6__card-photo--has-bg' : '' ?><?= $has_experience ? '' : ' doctors-v6__card-photo--no-exp' ?>\">\n                <img\n                  class=\"doctors-v6__card-img<?= $image_has_bg ? ' doctors-v6__card-img--has-bg' : '' ?>\"\n                  src=\"<?= htmlspecialchars($image) ?>\"\n                  alt=\"<?= htmlspecialchars($doctor_alt) ?>\"\n                  width=\"380\"\n                  height=\"380\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n                <?php if ($has_experience): ?>\n                  <span class=\"doctors-v6__badge doctors-v6__badge--exp bodytext-strong\">\n                    <?= htmlspecialchars($experience_value) ?>\n                  <\/span>\n                <?php endif; ?>\n                <?php if ($has_rating): ?>\n                  <span class=\"doctors-v6__badge doctors-v6__badge--rating bodytext-strong\">\n                    <svg class=\"icon doctors-v6__badge-star\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-star\"><\/use>\n                    <\/svg>\n                    <?= htmlspecialchars($rating_value) ?>\n                  <\/span>\n                <?php endif; ?>\n                <?php if ($available_today && $has_available_label): ?>\n                  <span class=\"doctors-v6__available glass glass--soft-mobile glass--surface-75 bodytext-strong\">\n                    <span class=\"doctors-v6__available-dot\" aria-hidden=\"true\"><\/span>\n                    <?= htmlspecialchars($available_label) ?>\n                  <\/span>\n                <?php endif; ?>\n              <\/div>\n              <?php endif; ?>\n\n              <div class=\"doctors-v6__card-copy stack stack--sm\">\n                <p class=\"doctors-v6__card-name bodytext-lg\">\n                  <span class=\"doctors-v6__card-name-line\"><?= htmlspecialchars($doctor['name_last']) ?><\/span>\n                  <span class=\"doctors-v6__card-name-line\"><?= htmlspecialchars($doctor['name_first']) ?><\/span>\n                <\/p>\n                <?php if ($specialty !== '' || $role !== ''): ?>\n                <p class=\"doctors-v6__card-meta bodytext\">\n                  <?php if ($specialty !== ''): ?>\n                    <span><?= htmlspecialchars($specialty) ?><\/span>\n                  <?php endif; ?>\n                  <?php if ($specialty !== '' && $role !== ''): ?>\n                    <span class=\"doctors-v6__meta-dot\" aria-hidden=\"true\"><\/span>\n                  <?php endif; ?>\n                  <?php if ($role !== ''): ?>\n                    <span><?= htmlspecialchars($role) ?><\/span>\n                  <?php endif; ?>\n                <\/p>\n                <?php endif; ?>\n              <\/div>\n\n              <div class=\"doctors-v6__actions\">\n                <button\n                  type=\"button\"\n                  class=\"btn btn--primary doctors-v6__book\"\n                  data-popup-open=\"<?= htmlspecialchars($book_popup_id) ?>\"\n                  data-remote=\"1\"\n                >\n                  <?= htmlspecialchars($book_label) ?>\n                <\/button>\n                <?php if ($more_url !== ''): ?>\n                <a class=\"doctors-v6__more-link link-arrow bodytext-sm\" href=\"<?= htmlspecialchars($more_url) ?>\">\n                  <?= htmlspecialchars($more_link_label) ?>\n                  <svg class=\"icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-arrow-right\"><\/use>\n                  <\/svg>\n                <\/a>\n                <?php endif; ?>\n              <\/div>\n            <\/article>\n          <\/li>\n          <?php $doctor_index++; ?>\n        <?php endforeach; ?>\n        <?php\n          if (!empty($show_team_banner) && !$banner_inserted) {\n            $render_team_banner();\n          }\n        ?>\n      <\/ul>\n\n      <p\n        class=\"doctors-v6__empty bodytext\"\n        data-doctors-v6-empty\n        data-doctors-v6-empty-filter=\"<?= htmlspecialchars($empty_filter_label) ?>\"\n        data-doctors-v6-empty-search=\"<?= htmlspecialchars($empty_search_label) ?>\"\n        hidden\n      >\n        <?= htmlspecialchars($empty_filter_label) ?>\n      <\/p>\n\n      <div class=\"doctors-v6__foot stack stack--md\">\n        <button\n          type=\"button\"\n          class=\"doctors-v6__more btn btn--secondary bodytext-sm\"\n          data-doctors-v6-more\n          hidden\n        >\n          <?= htmlspecialchars($more_label) ?>\n        <\/button>\n        <p\n          class=\"doctors-v6__count bodytext\"\n          data-doctors-v6-count\n          data-doctors-v6-count-before=\"<?= htmlspecialchars($shown_before) ?>\"\n          data-doctors-v6-count-mid=\"<?= htmlspecialchars($shown_mid) ?>\"\n          data-doctors-v6-count-after=\"<?= htmlspecialchars($shown_after) ?>\"\n          data-doctors-v6-count-total=\"<?= (int) $doctors_total ?>\"\n        >\n          <?= htmlspecialchars($shown_before) ?>\n          <?= (int) $doctors_total ?>\n          <?= htmlspecialchars($shown_mid) ?>\n          <?= (int) $doctors_total ?>\n          <?= htmlspecialchars($shown_after) ?>\n        <\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "prices-variant-3": "<?php\n  $note_text = trim((string) $note_text);\n  $has_note_text = $note_text !== '';\n?>\n<section class=\"prices-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y-lg\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"prices-v3__inner stack stack--xl\">\n      <div class=\"prices-v3__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'prices-v3__eyebrow') ?>\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"prices-v3__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <p class=\"prices-v3__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"prices-v3__grid\">\n      <aside class=\"prices-v3__sidebar\">\n        <label class=\"prices-v3__nav-select-wrap field\">\n          <select\n            class=\"field__input prices-v3__nav-select bodytext-strong\"\n            data-prices-v3-select\n            aria-label=\"Разделы прайса\"\n          >\n            <?php foreach ($categories as $cat_index => $category): ?>\n              <option value=\"<?= htmlspecialchars($category['key']) ?>\"<?= $cat_index === 0 ? ' selected' : '' ?>>\n                <?= htmlspecialchars($category['label']) ?>\n              <\/option>\n            <?php endforeach; ?>\n          <\/select>\n          <svg class=\"icon prices-v3__nav-select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n            <use href=\"#icon-chevron-down\"><\/use>\n          <\/svg>\n        <\/label>\n\n        <nav class=\"prices-v3__nav stack\" role=\"tablist\" aria-label=\"Разделы прайса\">\n          <?php foreach ($categories as $cat_index => $category): ?>\n            <?php $is_active = $cat_index === 0; ?>\n            <button\n              type=\"button\"\n              class=\"prices-v3__nav-item bodytext-strong<?= $is_active ? ' is-active' : '' ?>\"\n              role=\"tab\"\n              id=\"prices-v3-tab-<?= htmlspecialchars($category['key']) ?>\"\n              aria-selected=\"<?= $is_active ? 'true' : 'false' ?>\"\n              aria-controls=\"prices-v3-panel-<?= htmlspecialchars($category['key']) ?>\"\n              data-prices-v3-tab=\"<?= htmlspecialchars($category['key']) ?>\"\n            >\n              <?php if (trim((string) ($category['icon'] ?? '')) !== ''): ?>\n              <span class=\"prices-v3__nav-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"prices-v3__nav-icon-img\"\n                  src=\"<?= htmlspecialchars($category['icon']) ?>\"\n                  alt=\"\"\n                  width=\"35\"\n                  height=\"35\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n              <?php endif; ?>\n              <span class=\"prices-v3__nav-label\"><?= htmlspecialchars($category['label']) ?><\/span>\n            <\/button>\n          <?php endforeach; ?>\n        <\/nav>\n      <\/aside>\n\n      <div class=\"prices-v3__main stack stack--xl\">\n        <div class=\"prices-v3__toolbar\">\n          <label class=\"prices-v3__search field\">\n            <input\n              class=\"field__input prices-v3__search-input bodytext\"\n              type=\"search\"\n              name=\"prices-v3-search\"\n              aria-label=\"<?= htmlspecialchars($search_placeholder) ?>\"\n              placeholder=\"<?= htmlspecialchars($search_placeholder) ?>\"\n              autocomplete=\"off\"\n              data-prices-v3-search\n            >\n            <span class=\"prices-v3__search-icon\" aria-hidden=\"true\">\n              <img src=\"<?= htmlspecialchars($search_icon_src) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n            <\/span>\n          <\/label>\n\n          <?php if (trim((string) $download_url) !== ''): ?>\n          <a class=\"prices-v3__download bodytext-strong\" href=\"<?= htmlspecialchars($download_url) ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n            <span><?= htmlspecialchars($download_label) ?><\/span>\n            <svg class=\"icon prices-v3__download-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-download\"><\/use>\n            <\/svg>\n          <\/a>\n          <?php endif; ?>\n        <\/div>\n\n        <?php foreach ($categories as $cat_index => $category): ?>\n          <?php $is_active = $cat_index === 0; ?>\n          <div\n            class=\"prices-v3__panel stack stack--xl<?= $is_active ? ' is-active' : '' ?>\"\n            id=\"prices-v3-panel-<?= htmlspecialchars($category['key']) ?>\"\n            role=\"tabpanel\"\n            aria-labelledby=\"prices-v3-tab-<?= htmlspecialchars($category['key']) ?>\"\n            data-prices-v3-panel=\"<?= htmlspecialchars($category['key']) ?>\"\n            <?= $is_active ? '' : 'hidden' ?>\n          >\n            <ul class=\"prices-v3__list\">\n              <?php foreach ($category['rows'] as $row): ?>\n                <?php if (($row['type'] ?? '') === 'group'): ?>\n                  <?php $group_items = $row['items'] ?? []; ?>\n                  <li class=\"prices-v3__item prices-v3__item--group<?= $group_items === [] ? ' prices-v3__item--group-static' : '' ?>\" data-prices-v3-group data-prices-v3-search-item=\"<?= htmlspecialchars(mb_strtolower($row['title'])) ?>\">\n                    <button\n                      type=\"button\"\n                      class=\"prices-v3__group-trigger bodytext-strong\"\n                      aria-expanded=\"false\"\n                      data-prices-v3-group-trigger\n                    >\n                      <span class=\"prices-v3__group-title\"><?= htmlspecialchars($row['title']) ?><\/span>\n                      <span class=\"prices-v3__group-chevron\" aria-hidden=\"true\">\n                        <svg class=\"icon prices-v3__group-chevron-icon\" width=\"24\" height=\"24\">\n                          <use href=\"#icon-chevron-down\"><\/use>\n                        <\/svg>\n                      <\/span>\n                    <\/button>\n\n                    <?php if ($group_items !== []): ?>\n                      <div class=\"prices-v3__group-panel\" data-prices-v3-group-panel hidden>\n                        <ul class=\"prices-v3__group-list\">\n                          <?php foreach ($group_items as $item): ?>\n                            <li\n                              class=\"prices-v3__item prices-v3__item--service prices-v3__item--nested\"\n                              data-prices-v3-search-item=\"<?= htmlspecialchars(mb_strtolower(($item['code'] ?? '') . ' ' . ($item['title'] ?? ''))) ?>\"\n                            >\n                              <article class=\"prices-v3__service prices-v3__service--nested\">\n                                <div class=\"prices-v3__service-copy stack stack--sm\">\n                                  <?php if (!empty($item['code'])): ?>\n                                    <p class=\"prices-v3__service-code bodytext-sm\">Код: <?= htmlspecialchars($item['code']) ?><\/p>\n                                  <?php endif; ?>\n                                  <p class=\"prices-v3__service-title bodytext-strong\"><?= htmlspecialchars($item['title']) ?><\/p>\n                                <\/div>\n                                <div class=\"prices-v3__service-aside stack stack--sm\">\n                                  <div class=\"prices-v3__service-prices\">\n                                    <span class=\"prices-v3__service-price bodytext-strong\"><?= htmlspecialchars($item['price']) ?><\/span>\n                                    <?php if (!empty($item['old_price'])): ?>\n                                      <span class=\"prices-v3__service-price-old bodytext-md\"><?= htmlspecialchars($item['old_price']) ?><\/span>\n                                    <?php endif; ?>\n                                  <\/div>\n                                  <button type=\"button\" class=\"prices-v3__service-book bodytext-strong\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('book')) ?>\" data-remote=\"1\">\n                                    <?= htmlspecialchars($book_label) ?>\n                                  <\/button>\n                                <\/div>\n                              <\/article>\n                            <\/li>\n                          <?php endforeach; ?>\n                        <\/ul>\n                      <\/div>\n                    <?php endif; ?>\n                  <\/li>\n                <?php else: ?>\n                  <li\n                    class=\"prices-v3__item prices-v3__item--service\"\n                    data-prices-v3-search-item=\"<?= htmlspecialchars(mb_strtolower(($row['code'] ?? '') . ' ' . ($row['title'] ?? ''))) ?>\"\n                  >\n                    <article class=\"prices-v3__service\">\n                      <div class=\"prices-v3__service-copy stack stack--sm\">\n                        <?php if (!empty($row['code'])): ?>\n                          <p class=\"prices-v3__service-code bodytext-sm\">Код: <?= htmlspecialchars($row['code']) ?><\/p>\n                        <?php endif; ?>\n                        <p class=\"prices-v3__service-title bodytext-strong\"><?= htmlspecialchars($row['title']) ?><\/p>\n                      <\/div>\n                      <div class=\"prices-v3__service-aside stack stack--sm\">\n                        <div class=\"prices-v3__service-prices\">\n                          <span class=\"prices-v3__service-price bodytext-strong\"><?= htmlspecialchars($row['price']) ?><\/span>\n                          <?php if (!empty($row['old_price'])): ?>\n                            <span class=\"prices-v3__service-price-old bodytext-md\"><?= htmlspecialchars($row['old_price']) ?><\/span>\n                          <?php endif; ?>\n                        <\/div>\n                        <button type=\"button\" class=\"prices-v3__service-book bodytext-strong\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('book')) ?>\" data-remote=\"1\">\n                          <?= htmlspecialchars($book_label) ?>\n                        <\/button>\n                      <\/div>\n                    <\/article>\n                  <\/li>\n                <?php endif; ?>\n              <?php endforeach; ?>\n            <\/ul>\n\n          <\/div>\n        <?php endforeach; ?>\n\n        <?php if ($has_note_text): ?>\n        <div class=\"prices-v3__note\">\n          <svg class=\"icon prices-v3__note-icon\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n            <use href=\"#icon-info\"><\/use>\n          <\/svg>\n          <p class=\"prices-v3__note-text bodytext-lg\"><?= htmlspecialchars($note_text) ?><\/p>\n        <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "promo-banners-variant-1": "<section class=\"promo-banners-v1 section-space-y-lg\">\n  <div class=\"container\">\n    <ul class=\"promo-banners-v1__grid\">\n      <?php foreach ($items as $item): ?>\n        <?php\n          $item_tag = trim((string) ($item['tag'] ?? ''));\n          $has_tag = $item_tag !== '';\n          $item_image = trim((string) ($item['image'] ?? ''));\n          $has_image = $item_image !== '';\n        ?>\n        <li class=\"promo-banners-v1__item\">\n          <article\n            class=\"promo-banners-v1__card<?= $has_image ? '' : ' promo-banners-v1__card--no-bg' ?>\"\n            <?= $has_image ? 'style=\"--promo-banners-v1-img-pos: ' . htmlspecialchars($item['image_object_position'] ?? 'center', ENT_QUOTES) . '\"' : '' ?>\n          >\n            <?php if ($has_image): ?>\n              <div class=\"promo-banners-v1__bg\" aria-hidden=\"true\">\n                <img\n                  class=\"promo-banners-v1__img\"\n                  src=\"<?= htmlspecialchars($item_image) ?>\"\n                  alt=\"\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/div>\n            <?php endif; ?>\n\n            <div class=\"promo-banners-v1__body stack stack--md\">\n              <?php if ($has_tag): ?>\n                <span class=\"promo-banners-v1__tag bodytext-strong\"><?= htmlspecialchars($item_tag) ?><\/span>\n              <?php endif; ?>\n              <p class=\"promo-banners-v1__title megatext-sm\"><?= htmlspecialchars($item['title']) ?><\/p>\n              <p class=\"promo-banners-v1__text bodytext-lg-regular\"><?= htmlspecialchars($item['text']) ?><\/p>\n              <a class=\"promo-banners-v1__cta btn btn--primary\" href=\"<?= htmlspecialchars($item['cta_url']) ?>\">\n                <?= htmlspecialchars($item['cta_label']) ?>\n              <\/a>\n            <\/div>\n          <\/article>\n        <\/li>\n      <?php endforeach; ?>\n    <\/ul>\n  <\/div>\n<\/section>",
            "hero-variant-7": "<?php\n  $lcp_image = $bg_mode === 'image' ? $bg_image : $visual_image;\n  $promo_label = trim((string) $promo_label);\n  $promo_date = trim((string) $promo_date);\n  $promo_icon_sprite = trim((string) $promo_icon_sprite);\n  $badge_label = trim((string) $badge_label);\n  $badge_value = trim((string) $badge_value);\n  $has_promo = $promo_date !== '';\n  $has_promo_icon = $promo_icon_sprite !== '';\n  $has_badge = $badge_label !== '' || $badge_value !== '';\n  $hero_v7_section_classes = ['hero-v7', 'hero-v7--' . $bg_mode];\n  if ($bg_mode === 'image') {\n      $hero_v7_section_classes[] = 'has-block-bg';\n      $hero_v7_section_classes[] = 'section-pad-y-lg';\n  } else {\n      $hero_v7_section_classes = array_merge($hero_v7_section_classes, \\app\\generator\\SectionBg::classes($section_bg));\n      $hero_v7_section_classes[] = 'section-space-y-lg';\n  }\n?>\n<section class=\"<?= htmlspecialchars(implode(' ', $hero_v7_section_classes)) ?>\">\n  <?php if ($bg_mode === 'image'): ?>\n    <div class=\"hero-v7__bg block-bg\" aria-hidden=\"true\">\n      <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" <?= \\app\\generator\\PageCriticalResources::imgAttrs($bg_image) ?>>\n    <\/div>\n  <?php endif; ?>\n  <div class=\"container\">\n    <div class=\"hero-v7__grid\">\n        <div class=\"hero-v7__content stack\">\n          <div class=\"hero-v7__main stack stack--xl\">\n          <div class=\"hero-v7__lead stack stack--md\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, '') ?>\n            <div class=\"titles\">\n              <<?= $heading_level ?> class=\"hero-v7__title megatext\">\n                <?php if (!empty($title_url)): ?>\n                  <a class=\"hero-v7__title-link\" href=\"<?= htmlspecialchars($title_url) ?>\"><?= htmlspecialchars($title) ?><\/a>\n                <?php else: ?>\n                  <?= htmlspecialchars($title) ?>\n                <?php endif; ?>\n              <\/<?= $heading_level ?>>\n              <p class=\"hero-v7__subtitle leadtext\"><?= htmlspecialchars($subtitle) ?><\/p>\n            <\/div>\n          <\/div>\n\n          <ul class=\"hero-v7__benefits\">\n            <?php foreach ($benefits as $benefit): ?>\n              <?php\n                $benefit_icon = trim((string) ($benefit['icon'] ?? ''));\n                $has_benefit_icon = $benefit_icon !== '';\n              ?>\n              <li class=\"hero-v7__benefit<?= $has_benefit_icon ? '' : ' hero-v7__benefit--no-icon' ?>\">\n                <?php if ($has_benefit_icon): ?>\n                  <span class=\"hero-v7__benefit-icon\" aria-hidden=\"true\">\n                    <img src=\"<?= htmlspecialchars($benefit_icon) ?>\" alt=\"\" width=\"31\" height=\"31\" loading=\"lazy\" decoding=\"async\">\n                  <\/span>\n                <?php endif; ?>\n                <span class=\"hero-v7__benefit-text bodytext-lg\"><?= htmlspecialchars($benefit['text']) ?><\/span>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ul>\n        <\/div>\n\n        <div class=\"hero-v7__actions actions-row\">\n          <button type=\"button\" class=\"btn btn--primary\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\"><?= htmlspecialchars($cta) ?><\/button>\n          <?php if ($has_promo): ?>\n            <div class=\"hero-v7__promo<?= $has_promo_icon ? '' : ' hero-v7__promo--no-icon' ?>\">\n              <?php if ($has_promo_icon): ?>\n                <span class=\"hero-v7__promo-icon\" aria-hidden=\"true\">\n                  <svg class=\"icon\" width=\"32\" height=\"32\" aria-hidden=\"true\">\n                    <use href=\"#icon-<?= htmlspecialchars($promo_icon_sprite) ?>\"><\/use>\n                  <\/svg>\n                <\/span>\n              <?php endif; ?>\n              <div class=\"hero-v7__promo-text\">\n                <?php if ($promo_label !== ''): ?>\n                  <span class=\"hero-v7__promo-label bodytext-strong\"><?= htmlspecialchars($promo_label) ?><\/span>\n                <?php endif; ?>\n                <span class=\"hero-v7__promo-date bodytext-lg\"><?= htmlspecialchars($promo_date) ?><\/span>\n              <\/div>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"hero-v7__visual\">\n        <img class=\"hero-v7__visual-img\" src=\"<?= htmlspecialchars($visual_image) ?>\" alt=\"<?= htmlspecialchars($visual_alt) ?>\" <?= \\app\\generator\\PageCriticalResources::imgAttrs($visual_image) ?>>\n        <?php if ($has_badge): ?>\n          <div class=\"hero-v7__badge badge-scale\">\n            <?php if ($badge_label !== ''): ?>\n              <span class=\"hero-v7__badge-label badge-scale__label\"><?= htmlspecialchars($badge_label) ?><\/span>\n            <?php endif; ?>\n            <?php if ($badge_value !== ''): ?>\n              <span class=\"hero-v7__badge-value badge-scale__value\"><?= htmlspecialchars($badge_value) ?><\/span>\n            <?php endif; ?>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "text-variant-3": "<section class=\"text-v3 text-v3--widget-<?= htmlspecialchars($widget_side) ?> section-space-y-lg\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"text-v3__grid\">\n      <div class=\"text-v3__main\">\n        <?php foreach ($items as $section_index => $section): ?>\n          <?php\n            $section_title = trim((string) ($section['title'] ?? ''));\n            $section_type = (string) ($section['type'] ?? 'list');\n            $section_items = $section['items'] ?? [];\n            if ($section_title === '' && $section_items === []) {\n                continue;\n            }\n            $is_first_section = $section_index === 0;\n          ?>\n          <div class=\"text-v3__section stack stack--lg\">\n            <?php if ($section_title !== ''): ?>\n              <?php if ($is_first_section): ?>\n                <<?= $heading_level ?> class=\"text-v3__section-title megatext\"><?= htmlspecialchars($section_title) ?><\/<?= $heading_level ?>>\n              <?php else: ?>\n                <h3 class=\"text-v3__section-title megatext\"><?= htmlspecialchars($section_title) ?><\/h3>\n              <?php endif; ?>\n            <?php endif; ?>\n\n            <?php if ($section_type === 'numeric'): ?>\n              <ul class=\"text-v3__steps\">\n                <?php foreach ($section_items as $item): ?>\n                  <li class=\"text-v3__step stack stack--sm\">\n                    <div class=\"text-v3__step-head\">\n                      <span class=\"text-v3__step-num bodytext-lg\" aria-hidden=\"true\">\/<?= htmlspecialchars($item['num']) ?><\/span>\n                      <p class=\"text-v3__step-title bodytext-lg\"><?= htmlspecialchars($item['title']) ?><\/p>\n                    <\/div>\n                    <div class=\"text-v3__step-text bodytext-md\">\n                      <?php foreach (($item['paragraphs'] ?? []) as $p): ?>\n                        <p><?= htmlspecialchars($p) ?><\/p>\n                      <?php endforeach; ?>\n                    <\/div>\n                  <\/li>\n                <?php endforeach; ?>\n              <\/ul>\n            <?php else: ?>\n              <ul class=\"text-v3__benefits\">\n                <?php foreach ($section_items as $item): ?>\n                  <li class=\"text-v3__benefit stack stack--sm\">\n                    <div class=\"text-v3__benefit-head\">\n                      <span class=\"text-v3__benefit-icon\" aria-hidden=\"true\">\n                        <svg class=\"icon text-v3__benefit-icon-svg\" width=\"24\" height=\"24\">\n                          <use href=\"#icon-check-circle\"><\/use>\n                        <\/svg>\n                      <\/span>\n                      <p class=\"text-v3__benefit-title bodytext-lg\"><?= htmlspecialchars($item['title']) ?><\/p>\n                    <\/div>\n                    <div class=\"text-v3__benefit-text bodytext-md\">\n                      <?php foreach (($item['paragraphs'] ?? []) as $p): ?>\n                        <p><?= htmlspecialchars($p) ?><\/p>\n                      <?php endforeach; ?>\n                    <\/div>\n                  <\/li>\n                <?php endforeach; ?>\n              <\/ul>\n            <?php endif; ?>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n\n      <aside class=\"text-v3__aside\">\n        <div class=\"text-v3__widget stack stack--md\">\n          <div class=\"text-v3__widget-media\">\n            <img\n              class=\"text-v3__widget-img\"\n              src=\"<?= htmlspecialchars($cta_image) ?>\"\n              alt=\"\"\n              width=\"493\"\n              height=\"329\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/div>\n\n          <div class=\"text-v3__widget-copy stack\">\n            <p class=\"text-v3__widget-title leadtext-xl\"><?= htmlspecialchars($cta_title) ?><\/p>\n            <p class=\"text-v3__widget-text bodytext-md\"><?= htmlspecialchars($cta_text) ?><\/p>\n          <\/div>\n\n          <button\n            type=\"button\"\n            class=\"text-v3__widget-btn btn btn--primary uibtntext\"\n            data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\"\n            data-remote=\"1\"\n          >\n            <?= htmlspecialchars($cta_btn) ?>\n          <\/button>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "text-variant-2": "<section class=\"text-v2 section-space-y-lg\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"text-v2__inner stack stack--xl\">\n      <div class=\"text-v2__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'text-v2__eyebrow') ?>\n        <<?= $heading_level ?> class=\"text-v2__title megatext\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n      <\/div>\n\n      <ul class=\"text-v2__items\">\n        <?php foreach ($items as $item): ?>\n          <li class=\"text-v2__item stack stack--sm\">\n            <div class=\"text-v2__item-head\">\n              <span class=\"text-v2__item-num bodytext-lg\" aria-hidden=\"true\">\/<?= htmlspecialchars($item['num']) ?><\/span>\n              <p class=\"text-v2__item-title bodytext-lg\"><?= htmlspecialchars($item['title']) ?><\/p>\n            <\/div>\n            <p class=\"text-v2__item-text bodytext-md\"><?= htmlspecialchars($item['text']) ?><\/p>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>",
            "prices-variant-4": "<?php\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $items = \\app\\generator\\ContentPresence::items($items, ['title', 'price_regular', 'price_promo']);\n  foreach ($items as &$item) {\n      foreach (['title', 'icon', 'price_regular', 'price_promo'] as $field) {\n          $item[$field] = (string) ($item[$field] ?? '');\n      }\n  }\n  unset($item);\n  $has_total = $has_text($total_regular) || $has_text($total_promo);\n?>\n<?php if ($has_text($eyebrow) || $has_text($title) || $has_text($lead) || $items !== [] || $has_total): ?>\n<section class=\"prices-v4 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"prices-v4__grid\">\n      <?php if ($has_text($eyebrow) || $has_text($title) || $has_text($lead)): ?><div class=\"prices-v4__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'prices-v4__eyebrow') ?>\n        <?php if ($has_text($title) || $has_text($lead)): ?><div class=\"titles\">\n          <?php if ($has_text($title)): ?><<?= $heading_level ?> class=\"prices-v4__title megatext\"><?= $title ?><\/<?= $heading_level ?>><?php endif; ?>\n          <?php if ($has_text($lead)): ?><p class=\"prices-v4__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p><?php endif; ?>\n        <\/div><?php endif; ?>\n      <\/div><?php endif; ?>\n\n      <?php if ($items !== [] || $has_total): ?><div class=\"prices-v4__table-wrap\">\n        <div class=\"prices-v4__table\" role=\"table\" aria-label=\"<?= htmlspecialchars($eyebrow) ?>\">\n          <div class=\"prices-v4__row prices-v4__row--head\" role=\"row\">\n            <div class=\"prices-v4__cell prices-v4__cell--service\" role=\"columnheader\"><\/div>\n            <div class=\"prices-v4__cell prices-v4__cell--price\" role=\"columnheader\">\n              <span class=\"prices-v4__col-label leadtext\"><?= htmlspecialchars($col_without_label) ?><\/span>\n            <\/div>\n            <div class=\"prices-v4__cell prices-v4__cell--price\" role=\"columnheader\">\n              <span class=\"prices-v4__col-label leadtext\"><?= htmlspecialchars($col_with_label) ?><\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"prices-v4__body\">\n            <?php foreach ($items as $item): ?>\n              <div class=\"prices-v4__row\" role=\"row\">\n                <div class=\"prices-v4__cell prices-v4__cell--service\" role=\"cell\">\n                  <div class=\"prices-v4__service\">\n                    <?php if ($has_text($item['title'] ?? '') && trim((string) ($item['icon'] ?? '')) !== ''): ?>\n                    <span class=\"prices-v4__item-icon\" aria-hidden=\"true\">\n                      <img\n                        class=\"prices-v4__item-icon-img\"\n                        src=\"<?= htmlspecialchars($item['icon']) ?>\"\n                        alt=\"\"\n                        width=\"22\"\n                        height=\"31\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/span>\n                    <?php endif; ?>\n                    <span class=\"prices-v4__item-title bodytext-strong\"><?= htmlspecialchars($item['title']) ?><\/span>\n                  <\/div>\n                <\/div>\n                <div class=\"prices-v4__cell prices-v4__cell--price\" role=\"cell\" data-label=\"<?= htmlspecialchars($col_without_label) ?>\">\n                  <span class=\"prices-v4__price bodytext-strong\"><?= htmlspecialchars($item['price_regular']) ?><\/span>\n                <\/div>\n                <div class=\"prices-v4__cell prices-v4__cell--price\" role=\"cell\" data-label=\"<?= htmlspecialchars($col_with_label) ?>\">\n                  <span class=\"prices-v4__price bodytext-strong<?= !empty($item['promo_highlight']) && $has_text($item['price_promo'] ?? '') ? ' prices-v4__price--promo' : '' ?>\">\n                    <?= htmlspecialchars($item['price_promo']) ?>\n                  <\/span>\n                <\/div>\n              <\/div>\n            <?php endforeach; ?>\n          <\/div>\n\n          <?php if ($has_total): ?><div class=\"prices-v4__row prices-v4__row--total\" role=\"row\">\n            <div class=\"prices-v4__cell prices-v4__cell--service\" role=\"cell\">\n              <span class=\"prices-v4__total-label bodytext-strong\"><?= htmlspecialchars($total_label) ?><\/span>\n            <\/div>\n            <div class=\"prices-v4__cell prices-v4__cell--price\" role=\"cell\" data-label=\"<?= htmlspecialchars($col_without_label) ?>\">\n              <span class=\"prices-v4__price bodytext-strong\"><?= htmlspecialchars($total_regular) ?><\/span>\n            <\/div>\n            <div class=\"prices-v4__cell prices-v4__cell--price\" role=\"cell\" data-label=\"<?= htmlspecialchars($col_with_label) ?>\">\n              <?php if ($has_text($total_promo)): ?><span class=\"prices-v4__price bodytext-strong prices-v4__price--promo\"><?= htmlspecialchars($total_promo) ?><\/span><?php endif; ?>\n            <\/div>\n          <\/div><?php endif; ?>\n        <\/div>\n      <\/div><?php endif; ?>\n    <\/div>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "cases-variant-3": "<?php\n  $desktop_slides = (int) ($desktop_slides ?? 3);\n  if (!in_array($desktop_slides, [2, 3, 4], true)) $desktop_slides = 3;\n  $section_class = 'cases-v3 ' . \\app\\generator\\SectionBg::classString($section_bg) . ' cases-v3--slides-' . $desktop_slides;\n  $card_title_typo = $desktop_slides === 4 ? 'titletext-sm' : 'megatext-md';\n?>\n<section class=\"<?= htmlspecialchars($section_class) ?>\" data-cases-v3-desktop-slides=\"<?= $desktop_slides ?>\">\n  <div class=\"container\">\n    <div class=\"cases-v3__inner stack stack--xl\">\n      <div class=\"cases-v3__head\">\n        <div class=\"cases-v3__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cases-v3__eyebrow') ?>\n          <<?= $heading_level ?> class=\"cases-v3__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n        <\/div>\n\n        <div class=\"cases-v3__head-actions\">\n          <div class=\"cases-v3__slider-nav slider-nav\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий кейс\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий кейс\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"cases-v3__filters\" role=\"group\" aria-label=\"Фильтр кейсов\">\n        <?php foreach ($filters as $index => $filter): ?>\n          <?php\n            $is_active = ($filter['key'] ?? '') === 'all';\n            $filter_icon = trim((string) ($filter['icon'] ?? ''));\n            $has_filter_icon = $filter_icon !== '';\n            $chip_class = 'cases-v3__chip';\n            if ($is_active) $chip_class .= ' is-active';\n            if (!$has_filter_icon) $chip_class .= ' cases-v3__chip--no-icon';\n          ?>\n          <button\n            type=\"button\"\n            class=\"<?= htmlspecialchars($chip_class) ?>\"\n            data-cases-v3-filter=\"<?= htmlspecialchars($filter['key']) ?>\"\n            aria-pressed=\"<?= $is_active ? 'true' : 'false' ?>\"\n          >\n            <?php if ($has_filter_icon): ?>\n              <img\n                class=\"cases-v3__chip-icon\"\n                src=\"<?= htmlspecialchars($filter_icon) ?>\"\n                alt=\"\"\n                width=\"24\"\n                height=\"24\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <?php endif; ?>\n            <span class=\"cases-v3__chip-label bodytext-strong\"><?= htmlspecialchars($filter['label']) ?><\/span>\n          <\/button>\n        <?php endforeach; ?>\n      <\/div>\n\n      <div class=\"cases-v3__slider-foot slider-foot\">\n        <div class=\"cases-v3__carousel\">\n          <div class=\"cases-v3__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($cases as $case): ?>\n                <div class=\"swiper-slide cases-v3__slide\" data-case-category=\"<?= htmlspecialchars($case['category']) ?>\">\n                  <article class=\"cases-v3__card\">\n                    <div class=\"cases-v3__media\">\n                      <img class=\"cases-v3__img cases-v3__img--after\" src=\"<?= htmlspecialchars($case['after_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                      <img class=\"cases-v3__img cases-v3__img--before\" src=\"<?= htmlspecialchars($case['before_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\" aria-hidden=\"true\">\n                      <span class=\"cases-v3__divider\" aria-hidden=\"true\"><\/span>\n                      <span class=\"cases-v3__badge cases-v3__badge--before titletext-sm\">До<\/span>\n                      <span class=\"cases-v3__badge cases-v3__badge--after titletext-sm\">После<\/span>\n                      <button\n                        type=\"button\"\n                        class=\"cases-v3__handle\"\n                        aria-label=\"Сравнить до\/после\"\n                        aria-valuemin=\"0\"\n                        aria-valuemax=\"100\"\n                        aria-valuenow=\"50\"\n                      >\n                        <img src=\"<?= htmlspecialchars($handle_src) ?>\" alt=\"\" width=\"86\" height=\"86\" loading=\"lazy\" decoding=\"async\">\n                      <\/button>\n                    <\/div>\n\n                    <div class=\"cases-v3__body stack stack--sm\">\n                      <p class=\"cases-v3__card-title <?= htmlspecialchars($card_title_typo) ?>\"><?= htmlspecialchars($case['title']) ?><\/p>\n                      <p class=\"cases-v3__card-text bodytext-lg-regular\"><?= htmlspecialchars($case['text']) ?><\/p>\n                    <\/div>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"slider-pagination-host\">\n          <div class=\"cases-v3__pagination slider-pagination--dots swiper-pagination\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "text-variant-5": "<?php\n  $has_text = \\app\\generator\\ContentPresence::hasText($text);\n  $section_class = 'text-v5 ' . \\app\\generator\\SectionBg::classString($section_bg);\n?>\n<?php if ($has_text): ?>\n<section class=\"<?= htmlspecialchars($section_class) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"text-v5__text leadtext\"><?= $text ?><\/div>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "patients-variant-1": "<section class=\"patients-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" data-patients-v1-limit=\"<?= (int) $visible_count ?>\">\n  <div class=\"container\">\n    <div class=\"patients-v1__inner stack stack--xl\">\n      <ul class=\"patients-v1__cards\" data-patients-v1-cards>\n        <?php foreach ($items as $item): ?>\n          <?php\n            $url = trim((string)($item['url'] ?? ''));\n            $tag = $url !== '' ? 'a' : 'div';\n            $href_attr = $url !== '' ? ' href=\"' . htmlspecialchars($url) . '\"' : '';\n            $icon = trim((string)($item['icon'] ?? ''));\n            $has_icon = $icon !== '';\n          ?>\n          <li data-patients-v1-item>\n            <<?= $tag ?> class=\"patients-v1__card\"<?= $href_attr ?>>\n              <div class=\"patients-v1__card-head<?= $has_icon ? '' : ' patients-v1__card-head--no-icon' ?>\">\n                <?php if ($has_icon): ?>\n                  <span class=\"patients-v1__icon\" aria-hidden=\"true\">\n                    <img\n                      class=\"patients-v1__icon-img\"\n                      src=\"<?= htmlspecialchars($icon) ?>\"\n                      alt=\"\"\n                      width=\"42\"\n                      height=\"42\"\n                      loading=\"lazy\"\n                      decoding=\"async\"\n                    >\n                  <\/span>\n                <?php endif; ?>\n                <p class=\"patients-v1__card-title bodytext-lg\"><?= htmlspecialchars($item['title'] ?? '') ?><\/p>\n              <\/div>\n              <p class=\"patients-v1__card-text bodytext-md\"><?= htmlspecialchars($item['text'] ?? '') ?><\/p>\n            <\/<?= $tag ?>>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n\n      <button type=\"button\" class=\"patients-v1__more btn btn--secondary bodytext-sm\" data-patients-v1-more hidden>\n        <?= htmlspecialchars($more_label) ?>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/section>",
            "patients-variant-2": "<?php\n  $document_icon_sprite = trim((string) $document_icon_sprite);\n  $has_doc_icon = $document_icon_sprite !== '';\n?>\n<section class=\"patients-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"patients-v2__panel stack stack--md\">\n      <div class=\"patients-v2__head\">\n        <<?= $heading_level ?> class=\"patients-v2__title leadtext-xl\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n\n        <?php if (count($items) > 1): ?>\n          <div class=\"patients-v2__slider-nav slider-nav slider-nav--brand\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий документ\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий документ\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <div class=\"patients-v2__slider-foot slider-foot\">\n        <div class=\"patients-v2__carousel\">\n          <div class=\"patients-v2__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($items as $item): ?>\n                <div class=\"swiper-slide\">\n                  <article class=\"patients-v2__card\">\n                    <div class=\"patients-v2__card-row<?= $has_doc_icon ? '' : ' patients-v2__card-row--no-icon' ?>\">\n                      <?php if ($has_doc_icon): ?>\n                        <span class=\"patients-v2__icon\" aria-hidden=\"true\">\n                          <svg class=\"icon patients-v2__icon-svg\" width=\"23\" height=\"25\" aria-hidden=\"true\">\n                            <use href=\"#<?= htmlspecialchars($document_icon_sprite) ?>\"><\/use>\n                          <\/svg>\n                        <\/span>\n                      <?php endif; ?>\n\n                      <div class=\"patients-v2__card-body\">\n                        <div class=\"patients-v2__card-copy stack stack--sm\">\n                          <p class=\"patients-v2__card-title bodytext-lg\"><?= htmlspecialchars($item['title'] ?? '') ?><\/p>\n                          <p class=\"patients-v2__card-meta bodytext-md\"><?= htmlspecialchars($item['meta'] ?? '') ?><\/p>\n                        <\/div>\n\n                        <a\n                          class=\"patients-v2__download link-arrow bodytext-md\"\n                          href=\"<?= htmlspecialchars($item['url'] ?? '#') ?>\"\n                          download\n                        >\n                          <?= htmlspecialchars($download_label) ?>\n                          <svg class=\"icon patients-v2__download-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                            <use href=\"#icon-download\"><\/use>\n                          <\/svg>\n                        <\/a>\n                      <\/div>\n                    <\/div>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <?php if (count($items) > 1): ?>\n          <div class=\"patients-v2__pagination slider-pagination--dots swiper-pagination\"><\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cta-variant-3": "<?php\n  $bg_image = trim((string) $bg_image);\n  $icon_src = trim((string) $icon_src);\n  $has_bg_image = $bg_image !== '';\n  $has_icon = $icon_src !== '';\n?>\n<section class=\"cta-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y\">\n  <div class=\"container\">\n    <div class=\"cta-v3__card\">\n      <?php if ($has_bg_image): ?>\n        <div class=\"cta-v3__bg\" aria-hidden=\"true\">\n          <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"\" width=\"1640\" height=\"167\" loading=\"lazy\" decoding=\"async\">\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"cta-v3__inner\">\n        <?php if ($has_icon): ?>\n          <span class=\"cta-v3__icon\" aria-hidden=\"true\">\n            <img\n              class=\"cta-v3__icon-img\"\n              src=\"<?= htmlspecialchars($icon_src) ?>\"\n              alt=\"\"\n              width=\"35\"\n              height=\"35\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/span>\n        <?php endif; ?>\n\n        <div class=\"cta-v3__copy stack stack--sm\">\n          <<?= $heading_level ?> class=\"cta-v3__title megatext-md\"><?= $title ?><\/<?= $heading_level ?>>\n          <p class=\"cta-v3__lead bodytext-lg\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n\n        <div class=\"cta-v3__actions stack stack--md\">\n          <button type=\"button\" class=\"cta-v3__btn btn btn--white uibtntext\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id($form_popup)) ?>\" data-remote=\"1\">\n            <?= htmlspecialchars($btn_label) ?>\n          <\/button>\n          <?php if (is_array($notes) && $notes): ?>\n          <div class=\"cta-v3__notes bodytext\">\n            <?php foreach ($notes as $index => $note): ?>\n              <?php if ($index > 0): ?>\n                <span class=\"cta-v3__dot\" aria-hidden=\"true\"><\/span>\n              <?php endif; ?>\n              <span><?= htmlspecialchars($note) ?><\/span>\n            <?php endforeach; ?>\n          <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "patients-variant-3": "<?php\n$render_sections = static function (array $sections): void {\n    foreach ($sections as $section) {\n        $type = $section['type'] ?? 'intro';\n        ?>\n        <div class=\"patients-v3__section patients-v3__section--<?= htmlspecialchars($type) ?>\">\n          <?php if (!empty($section['title'])): ?>\n            <div class=\"patients-v3__section-head\">\n              <h3 class=\"patients-v3__section-title megatext-sm\"><?= htmlspecialchars($section['title']) ?><\/h3>\n              <span class=\"patients-v3__section-accent\" aria-hidden=\"true\"><\/span>\n            <\/div>\n          <?php endif; ?>\n\n          <?php if (!empty($section['text'])): ?>\n            <p class=\"patients-v3__section-text bodytext-md\"><?= htmlspecialchars($section['text']) ?><\/p>\n          <?php endif; ?>\n\n          <?php if ($type === 'list' && !empty($section['items'])): ?>\n            <ul class=\"patients-v3__list\">\n              <?php foreach ($section['items'] as $list_item): ?>\n                <li class=\"patients-v3__list-item\">\n                  <span class=\"patients-v3__list-dot\" aria-hidden=\"true\"><\/span>\n                  <span class=\"patients-v3__list-text bodytext-md\"><?= htmlspecialchars($list_item) ?><\/span>\n                <\/li>\n              <?php endforeach; ?>\n            <\/ul>\n          <?php endif; ?>\n\n          <?php if ($type === 'steps' && !empty($section['steps'])): ?>\n            <ol class=\"patients-v3__steps\">\n              <?php foreach ($section['steps'] as $step_index => $step): ?>\n                <li class=\"patients-v3__step\">\n                  <div class=\"patients-v3__step-badge-col\">\n                    <span class=\"patients-v3__step-badge bodytext-md\">Шаг <?= (int)$step_index + 1 ?><\/span>\n                  <\/div>\n                  <div class=\"patients-v3__step-body\">\n                    <p class=\"patients-v3__step-title bodytext-lg\"><?= htmlspecialchars($step['title'] ?? '') ?><\/p>\n                    <?php if (!empty($step['text'])): ?>\n                      <p class=\"patients-v3__step-text bodytext-md\"><?= htmlspecialchars($step['text']) ?><\/p>\n                    <?php endif; ?>\n                  <\/div>\n                <\/li>\n              <?php endforeach; ?>\n            <\/ol>\n          <?php endif; ?>\n        <\/div>\n        <?php\n    }\n};\n?>\n<section class=\"patients-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"patients-v3__body\">\n      <div class=\"patients-v3__list\" role=\"tablist\" aria-label=\"Разделы для пациентов\">\n        <?php foreach ($items as $index => $item): ?>\n          <?php\n          $tab_id    = 'patients-v3-tab-' . $index;\n          $panel_id  = 'patients-v3-panel-' . $index;\n          $is_active = $index === 0;\n          $icon = trim((string)($item['icon'] ?? ''));\n          $has_icon = $icon !== '';\n          ?>\n          <div class=\"patients-v3__item\" data-patients-v3-index=\"<?= $index ?>\">\n            <button\n              type=\"button\"\n              class=\"patients-v3__tab<?= $is_active ? ' is-active' : '' ?><?= $has_icon ? '' : ' patients-v3__tab--no-icon' ?>\"\n              id=\"<?= htmlspecialchars($tab_id) ?>\"\n              role=\"tab\"\n              aria-selected=\"<?= $is_active ? 'true' : 'false' ?>\"\n              aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              data-patients-v3-tab\n              data-patients-v3-index=\"<?= $index ?>\"\n              tabindex=\"<?= $is_active ? '0' : '-1' ?>\"\n            >\n              <?php if ($has_icon): ?>\n                <span class=\"patients-v3__tab-icon\" aria-hidden=\"true\">\n                  <img\n                    class=\"patients-v3__tab-icon-img\"\n                    src=\"<?= htmlspecialchars($icon) ?>\"\n                    alt=\"\"\n                    width=\"42\"\n                    height=\"42\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <\/span>\n              <?php endif; ?>\n              <span class=\"patients-v3__tab-label bodytext-md\"><?= htmlspecialchars($item['title'] ?? '') ?><\/span>\n              <span class=\"patients-v3__tab-chevron\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"16\" height=\"16\">\n                  <use href=\"#icon-chevron-down\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/button>\n\n            <article\n              class=\"patients-v3__panel<?= $is_active ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($panel_id) ?>\"\n              role=\"tabpanel\"\n              aria-labelledby=\"<?= htmlspecialchars($tab_id) ?>\"\n              data-patients-v3-panel\n              data-patients-v3-index=\"<?= $index ?>\"\n              aria-hidden=\"<?= $is_active ? 'false' : 'true' ?>\"\n              <?= $is_active ? '' : ' hidden' ?>\n            >\n              <div class=\"patients-v3__panel-inner\">\n                <?php $render_sections($item['sections'] ?? []); ?>\n              <\/div>\n            <\/article>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "patients-variant-4": "<?php\n$render_section_head = static function (string $title): void {\n    ?>\n    <div class=\"patients-v4__section-head\">\n      <h3 class=\"patients-v4__section-title megatext-sm\"><?= htmlspecialchars($title) ?><\/h3>\n      <span class=\"patients-v4__section-accent\" aria-hidden=\"true\"><\/span>\n    <\/div>\n    <?php\n};\n\n$render_who_cards = static function (array $cards): void {\n    ?>\n    <ul class=\"patients-v4__info-grid patients-v4__info-grid--3\">\n      <?php foreach ($cards as $card): ?>\n        <?php\n        $icon = trim((string)($card['icon'] ?? ''));\n        $has_icon = $icon !== '';\n        ?>\n        <li class=\"patients-v4__info-card\">\n          <div class=\"patients-v4__info-card-head<?= $has_icon ? '' : ' patients-v4__info-card-head--no-icon' ?>\">\n            <?php if ($has_icon): ?>\n              <span class=\"patients-v4__info-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"patients-v4__info-icon-img\"\n                  src=\"<?= htmlspecialchars($icon) ?>\"\n                  alt=\"\"\n                  width=\"44\"\n                  height=\"44\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <p class=\"patients-v4__info-title bodytext-lg\"><?= htmlspecialchars($card['title'] ?? '') ?><\/p>\n          <\/div>\n          <p class=\"patients-v4__info-text bodytext-md\"><?= htmlspecialchars($card['text'] ?? '') ?><\/p>\n        <\/li>\n      <?php endforeach; ?>\n    <\/ul>\n    <?php\n};\n\n$render_refund_cards = static function (array $cards): void {\n    ?>\n    <ul class=\"patients-v4__info-grid patients-v4__info-grid--2\">\n      <?php foreach ($cards as $card): ?>\n        <?php\n        $icon = trim((string)($card['icon'] ?? ''));\n        $has_icon = $icon !== '';\n        ?>\n        <li class=\"patients-v4__refund-card\">\n          <div class=\"patients-v4__refund-card-head<?= $has_icon ? '' : ' patients-v4__refund-card-head--no-icon' ?>\">\n            <?php if ($has_icon): ?>\n              <span class=\"patients-v4__info-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"patients-v4__info-icon-img\"\n                  src=\"<?= htmlspecialchars($icon) ?>\"\n                  alt=\"\"\n                  width=\"44\"\n                  height=\"44\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <p class=\"patients-v4__info-title bodytext-lg\"><?= htmlspecialchars($card['title'] ?? '') ?><\/p>\n          <\/div>\n          <p class=\"patients-v4__refund-text bodytext-md\"><?= htmlspecialchars($card['text'] ?? '') ?><\/p>\n        <\/li>\n      <?php endforeach; ?>\n    <\/ul>\n    <?php\n};\n\n$render_documents = static function (array $documents, string $document_icon_sprite): void {\n    $sprite_id = trim($document_icon_sprite);\n    $has_icon = $sprite_id !== '';\n    ?>\n    <ul class=\"patients-v4__docs\">\n      <?php foreach ($documents as $doc): ?>\n        <?php\n        $has_download = trim((string)($doc['file_url'] ?? '')) !== '';\n        ?>\n        <li>\n          <article class=\"patients-v4__doc\">\n            <div class=\"patients-v4__doc-row<?= $has_icon ? '' : ' patients-v4__doc-row--no-icon' ?>\">\n              <?php if ($has_icon): ?>\n                <span class=\"patients-v4__doc-icon\" aria-hidden=\"true\">\n                  <svg class=\"icon patients-v4__doc-icon-svg\" width=\"23\" height=\"25\" aria-hidden=\"true\">\n                    <use href=\"#<?= htmlspecialchars($sprite_id) ?>\"><\/use>\n                  <\/svg>\n                <\/span>\n              <?php endif; ?>\n              <div class=\"patients-v4__doc-body\">\n                <div class=\"patients-v4__doc-copy\">\n                  <p class=\"patients-v4__doc-title bodytext-lg\"><?= htmlspecialchars($doc['title'] ?? '') ?><\/p>\n                  <p class=\"patients-v4__doc-meta bodytext-md\"><?= htmlspecialchars($doc['meta'] ?? '') ?><\/p>\n                <\/div>\n                <div class=\"patients-v4__doc-actions\">\n                  <a class=\"patients-v4__doc-action link-arrow bodytext-md\" href=\"<?= htmlspecialchars($doc['view_url'] ?? '#') ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n                    Посмотреть\n                    <svg class=\"icon patients-v4__doc-action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                      <use href=\"#icon-eye\"><\/use>\n                    <\/svg>\n                  <\/a>\n                  <?php if ($has_download): ?>\n                    <a class=\"patients-v4__doc-action link-arrow bodytext-md\" href=\"<?= htmlspecialchars($doc['file_url'] ?? '#') ?>\" download>\n                      Скачать\n                      <svg class=\"icon patients-v4__doc-action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"#icon-download\"><\/use>\n                      <\/svg>\n                    <\/a>\n                  <?php endif; ?>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/article>\n        <\/li>\n      <?php endforeach; ?>\n    <\/ul>\n    <?php\n};\n\n$render_steps = static function (array $steps): void {\n    ?>\n    <ol class=\"patients-v4__steps\">\n      <?php foreach ($steps as $step_index => $step): ?>\n        <li class=\"patients-v4__step\">\n          <div class=\"patients-v4__step-badge-col\">\n            <span class=\"patients-v4__step-badge bodytext-md\">Этап <?= (int)$step_index + 1 ?><\/span>\n          <\/div>\n          <div class=\"patients-v4__step-body\">\n            <p class=\"patients-v4__step-title bodytext-lg\"><?= htmlspecialchars($step['title'] ?? '') ?><\/p>\n            <?php if (!empty($step['text'])): ?>\n              <p class=\"patients-v4__step-text bodytext-md\"><?= htmlspecialchars($step['text']) ?><\/p>\n            <?php endif; ?>\n          <\/div>\n        <\/li>\n      <?php endforeach; ?>\n    <\/ol>\n    <?php\n};\n\n$render_panel_content = static function (array $item) use (\n    $render_section_head,\n    $render_who_cards,\n    $render_refund_cards,\n    $render_documents,\n    $render_steps,\n    $document_icon_sprite\n): void {\n    $type = (string) ($item['type'] ?? '');\n    $panel_title = (string) ($item['panel_title'] ?? $item['title'] ?? '');\n    $panel_text = trim((string) ($item['panel_text'] ?? ''));\n\n    $render_section_head($panel_title);\n\n    if ($panel_text !== '') {\n        ?>\n        <p class=\"patients-v4__section-text bodytext-md\"><?= htmlspecialchars($panel_text) ?><\/p>\n        <?php\n    }\n\n    if ($type === 'cards-3') {\n        $render_who_cards($item['cards'] ?? []);\n        return;\n    }\n\n    if ($type === 'cards-2') {\n        $render_refund_cards($item['cards'] ?? []);\n        return;\n    }\n\n    if ($type === 'documents') {\n        $render_documents($item['documents'] ?? [], $document_icon_sprite);\n        return;\n    }\n\n    if ($type === 'steps') {\n        $render_steps($item['steps'] ?? []);\n    }\n};\n?>\n<section class=\"patients-v4 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"patients-v4__body\">\n      <div class=\"patients-v4__rail\">\n        <div class=\"patients-v4__list\">\n          <?php foreach ($items as $index => $item): ?>\n            <?php\n            $section_id = !empty($item['id']) ? (string) $item['id'] : 'patients-v4-section-' . $index;\n            $tab_id = 'patients-v4-tab-' . $index;\n            $is_first = $index === 0;\n            $section_mod = ($item['type'] ?? '') === 'cards-3' ? ' patients-v4__section--who' : '';\n            $icon = trim((string)($item['icon'] ?? ''));\n            $has_icon = $icon !== '';\n            ?>\n            <div class=\"patients-v4__item\" data-patients-v4-index=\"<?= $index ?>\">\n              <button\n                type=\"button\"\n                class=\"patients-v4__nav-item<?= $is_first ? ' is-active' : '' ?><?= $has_icon ? '' : ' patients-v4__nav-item--no-icon' ?>\"\n                id=\"<?= htmlspecialchars($tab_id) ?>\"\n                data-patients-v4-nav=\"<?= htmlspecialchars($section_id) ?>\"\n                data-patients-v4-accordion-tab\n                data-patients-v4-index=\"<?= $index ?>\"\n                aria-controls=\"<?= htmlspecialchars($section_id) ?>\"\n                aria-expanded=\"false\"\n                aria-current=\"<?= $is_first ? 'true' : 'false' ?>\"\n              >\n                <?php if ($has_icon): ?>\n                  <span class=\"patients-v4__nav-icon\" aria-hidden=\"true\">\n                    <img\n                      class=\"patients-v4__nav-icon-img\"\n                      src=\"<?= htmlspecialchars($icon) ?>\"\n                      alt=\"\"\n                      width=\"42\"\n                      height=\"42\"\n                      loading=\"lazy\"\n                      decoding=\"async\"\n                    >\n                  <\/span>\n                <?php endif; ?>\n                <span class=\"patients-v4__nav-label bodytext-md\"><?= htmlspecialchars($item['title'] ?? '') ?><\/span>\n                <span class=\"patients-v4__nav-chevron\" aria-hidden=\"true\">\n                  <svg class=\"icon\" width=\"16\" height=\"16\">\n                    <use href=\"#icon-chevron-down\"><\/use>\n                  <\/svg>\n                <\/span>\n              <\/button>\n\n              <section\n                class=\"patients-v4__panel patients-v4__section<?= $section_mod ?>\"\n                id=\"<?= htmlspecialchars($section_id) ?>\"\n                data-patients-v4-section=\"<?= htmlspecialchars($section_id) ?>\"\n                data-patients-v4-panel\n                data-patients-v4-index=\"<?= $index ?>\"\n                aria-labelledby=\"<?= htmlspecialchars($tab_id) ?>\"\n                aria-hidden=\"true\"\n                hidden\n              >\n                <div class=\"patients-v4__panel-inner\">\n                  <?php $render_panel_content($item); ?>\n                <\/div>\n              <\/section>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n\n        <div class=\"patients-v4__cta\">\n          <?php $has_cta_icon = trim((string) $cta_icon) !== ''; ?>\n          <div class=\"patients-v4__cta-row<?= $has_cta_icon ? '' : ' patients-v4__cta-row--no-icon' ?>\">\n            <?php if ($has_cta_icon): ?>\n              <span class=\"patients-v4__cta-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"patients-v4__cta-icon-img\"\n                  src=\"<?= htmlspecialchars(trim((string) $cta_icon)) ?>\"\n                  alt=\"\"\n                  width=\"34\"\n                  height=\"34\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <div class=\"patients-v4__cta-copy\">\n              <p class=\"patients-v4__cta-title\"><?= htmlspecialchars($cta_title) ?><\/p>\n              <p class=\"patients-v4__cta-text bodytext-md\"><?= htmlspecialchars($cta_text) ?><\/p>\n            <\/div>\n          <\/div>\n          <a class=\"patients-v4__cta-btn btn btn--primary uibtntext\" href=\"<?= htmlspecialchars($cta_url) ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n            <?= htmlspecialchars($cta_btn_label) ?>\n          <\/a>\n        <\/div>\n      <\/div>\n\n      <div class=\"patients-v4__main\" data-patients-v4-main><\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "patients-variant-5": "<?php\n  $documents_by_category = [];\n  foreach ($categories as $category) {\n      $documents_by_category[$category['id']] = [];\n  }\n  foreach ($documents as $doc) {\n      foreach (($doc['categories'] ?? []) as $category_id) {\n          if (isset($documents_by_category[$category_id])) {\n              $documents_by_category[$category_id][] = $doc;\n          }\n      }\n  }\n?>\n<?php $render_document_list = static function (array $items, string $document_icon_sprite, int $limit = 0) use ($more_label): void {\n    $count = count($items);\n    $initial = $limit > 0 ? min($limit, $count) : $count;\n    $sprite_id = trim($document_icon_sprite);\n    $has_icon = $sprite_id !== '';\n    ?>\n    <div class=\"patients-v5__docs-wrap\" data-patients-v5-list data-initial-visible=\"<?= $initial ?>\">\n      <ul class=\"patients-v5__docs\">\n        <?php foreach ($items as $index => $doc): ?>\n          <?php $has_download = trim((string)($doc['file_url'] ?? '')) !== ''; ?>\n          <li class=\"patients-v5__doc-item<?= $index >= $initial ? ' is-hidden' : '' ?>\" data-patients-v5-doc-item>\n            <article class=\"patients-v5__doc\">\n              <div class=\"patients-v5__doc-row<?= $has_icon ? '' : ' patients-v5__doc-row--no-icon' ?>\">\n                <?php if ($has_icon): ?>\n                  <span class=\"patients-v5__doc-icon\" aria-hidden=\"true\">\n                    <svg class=\"icon patients-v5__doc-icon-svg\" width=\"23\" height=\"25\" aria-hidden=\"true\">\n                      <use href=\"#<?= htmlspecialchars($sprite_id) ?>\"><\/use>\n                    <\/svg>\n                  <\/span>\n                <?php endif; ?>\n                <div class=\"patients-v5__doc-body\">\n                  <div class=\"patients-v5__doc-copy\">\n                    <p class=\"patients-v5__doc-title bodytext-lg\"><?= htmlspecialchars($doc['title'] ?? '') ?><\/p>\n                    <p class=\"patients-v5__doc-meta bodytext-md\"><?= htmlspecialchars($doc['meta'] ?? '') ?><\/p>\n                  <\/div>\n                  <div class=\"patients-v5__doc-actions\">\n                    <a class=\"patients-v5__doc-action link-arrow bodytext-md\" href=\"<?= htmlspecialchars($doc['view_url'] ?? '#') ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n                      Посмотреть\n                      <svg class=\"icon patients-v5__doc-action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"#icon-eye\"><\/use>\n                      <\/svg>\n                    <\/a>\n                    <?php if ($has_download): ?>\n                      <a class=\"patients-v5__doc-action link-arrow bodytext-md\" href=\"<?= htmlspecialchars($doc['file_url'] ?? '#') ?>\" download>\n                        Скачать\n                        <svg class=\"icon patients-v5__doc-action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                          <use href=\"#icon-download\"><\/use>\n                        <\/svg>\n                      <\/a>\n                    <?php endif; ?>\n                  <\/div>\n                <\/div>\n              <\/div>\n            <\/article>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n      <?php if ($limit > 0 && $count > $initial): ?>\n        <button type=\"button\" class=\"patients-v5__more btn btn--secondary bodytext-sm\" data-patients-v5-more>\n          <?= htmlspecialchars($more_label) ?>\n        <\/button>\n      <?php endif; ?>\n    <\/div>\n    <?php\n};\n?>\n<section class=\"patients-v5 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"patients-v5__body\">\n      <aside class=\"patients-v5__sidebar\">\n        <div class=\"patients-v5__list\" aria-label=\"Категории документов\">\n        <?php foreach ($categories as $index => $category): ?>\n          <?php\n          $category_id = $category['id'];\n          $tab_id = 'patients-v5-tab-' . $index;\n          $panel_id = 'patients-v5-panel-' . $index;\n          $is_active = $index === 0;\n          $category_docs = $documents_by_category[$category_id] ?? [];\n          $category_limit = $category_id === 'all' ? $desktop_limit : 0;\n          ?>\n          <div class=\"patients-v5__item<?= $is_active ? ' is-open' : '' ?>\" data-patients-v5-index=\"<?= $index ?>\">\n            <button\n              type=\"button\"\n              class=\"patients-v5__nav-item<?= $is_active ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($tab_id) ?>\"\n              aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              aria-expanded=\"<?= $is_active ? 'true' : 'false' ?>\"\n              aria-current=\"<?= $is_active ? 'true' : 'false' ?>\"\n              data-patients-v5-tab=\"<?= htmlspecialchars($category_id) ?>\"\n              data-patients-v5-index=\"<?= $index ?>\"\n            >\n              <span class=\"patients-v5__nav-count bodytext-lg\"><?= (int)$category['count'] ?><\/span>\n              <span class=\"patients-v5__nav-label bodytext-md\"><?= htmlspecialchars($category['title']) ?><\/span>\n              <span class=\"patients-v5__nav-chevron\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"16\" height=\"16\">\n                  <use href=\"#icon-chevron-down\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/button>\n\n            <div\n              class=\"patients-v5__panel<?= $is_active ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($panel_id) ?>\"\n              data-patients-v5-panel=\"<?= htmlspecialchars($category_id) ?>\"\n              data-patients-v5-index=\"<?= $index ?>\"\n              aria-labelledby=\"<?= htmlspecialchars($tab_id) ?>\"\n              aria-hidden=\"<?= $is_active ? 'false' : 'true' ?>\"\n              <?= $is_active ? '' : ' hidden' ?>\n            >\n              <div class=\"patients-v5__panel-inner\">\n                <?php $render_document_list($category_docs, $document_icon_sprite, $category_limit); ?>\n              <\/div>\n            <\/div>\n          <\/div>\n        <?php endforeach; ?>\n        <\/div>\n\n        <div class=\"patients-v5__cta\">\n          <?php $has_cta_icon = trim((string) $cta_icon) !== ''; ?>\n          <div class=\"patients-v5__cta-row<?= $has_cta_icon ? '' : ' patients-v5__cta-row--no-icon' ?>\">\n            <?php if ($has_cta_icon): ?>\n              <span class=\"patients-v5__cta-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"patients-v5__cta-icon-img\"\n                  src=\"<?= htmlspecialchars(trim((string) $cta_icon)) ?>\"\n                  alt=\"\"\n                  width=\"34\"\n                  height=\"34\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <div class=\"patients-v5__cta-copy\">\n              <p class=\"patients-v5__cta-title\"><?= htmlspecialchars($cta_title) ?><\/p>\n              <p class=\"patients-v5__cta-text bodytext-md\"><?= htmlspecialchars($cta_text) ?><\/p>\n            <\/div>\n          <\/div>\n          <button type=\"button\" class=\"patients-v5__cta-btn btn btn--primary uibtntext\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\">\n            <?= htmlspecialchars($cta_btn_label) ?>\n          <\/button>\n        <\/div>\n      <\/aside>\n\n      <div class=\"patients-v5__main\" data-patients-v5-main><\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "hero-variant-8": "<?php $lcp_image = $bg_image; ?>\n<section class=\"hero-v8 has-block-bg section-pad-y-lg\">\n  <div class=\"hero-v8__bg block-bg\" aria-hidden=\"true\">\n    <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" <?= \\app\\generator\\PageCriticalResources::imgAttrs($bg_image) ?>>\n  <\/div>\n  <div class=\"container\">\n    <div class=\"hero-v8__inner stack\">\n      <div class=\"hero-v8__head stack stack--lg\">\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"hero-v8__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <p class=\"hero-v8__subtitle leadtext-xl\"><?= htmlspecialchars($subtitle) ?><\/p>\n        <\/div>\n\n        <?php if (!empty($benefits)): ?>\n          <ul class=\"hero-v8__benefits\">\n            <?php foreach ($benefits as $benefit): ?>\n              <?php\n                $benefit_icon = trim((string) ($benefit['icon'] ?? ''));\n                $has_benefit_icon = $benefit_icon !== '';\n              ?>\n              <li class=\"hero-v8__benefit<?= $has_benefit_icon ? '' : ' hero-v8__benefit--no-icon' ?>\">\n                <?php if ($has_benefit_icon): ?>\n                  <span class=\"hero-v8__benefit-icon\" aria-hidden=\"true\">\n                    <img src=\"<?= htmlspecialchars($benefit_icon) ?>\" alt=\"\" width=\"31\" height=\"31\" loading=\"lazy\" decoding=\"async\">\n                  <\/span>\n                <?php endif; ?>\n                <span class=\"hero-v8__benefit-text bodytext-lg\"><?= htmlspecialchars($benefit['text']) ?><\/span>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ul>\n        <?php endif; ?>\n      <\/div>\n\n      <div class=\"hero-v8__actions actions-row\">\n        <a class=\"btn btn--primary hero-v8__cta\" href=\"<?= htmlspecialchars($cta_url) ?>\">\n          <?= htmlspecialchars($cta) ?>\n        <\/a>\n\n        <a class=\"hero-v8__video\"\n           href=\"#\"\n           data-popup-open=\"media\"\n           data-popup-src=\"<?= htmlspecialchars($video_media) ?>\"\n           data-popup-kind=\"video\"\n           data-popup-alt=\"<?= htmlspecialchars($video_label) ?>\"\n        >\n          <span class=\"hero-v8__play-surface\" aria-hidden=\"true\">\n            <span class=\"hero-v8__play-bg\"><\/span>\n            <svg class=\"icon hero-v8__play-icon\" width=\"9\" height=\"10\" viewBox=\"0 0 9 10\" aria-hidden=\"true\">\n              <use href=\"#icon-play\"><\/use>\n            <\/svg>\n          <\/span>\n          <span class=\"hero-v8__video-label bodytext-lg\"><?= htmlspecialchars($video_label) ?><\/span>\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "benefits-variant-3": "<?php\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $items = \\app\\generator\\ContentPresence::items($items, ['title', 'text']);\n  $section_class = 'benefits-v3 ' . \\app\\generator\\SectionBg::classString($section_bg) . ' section-space-y';\n?>\n<?php if ($items !== []): ?>\n<section class=\"<?= htmlspecialchars($section_class) ?>\">\n  <div class=\"container\">\n    <ul class=\"benefits-v3__cards\">\n      <?php foreach ($items as $item): ?>\n        <?php\n          $card_icon_src = trim((string) ($item['icon_src'] ?? ''));\n          $has_card_icon = $card_icon_src !== '';\n          $icon_width = (int) ($item['icon_width'] ?? 42);\n          $icon_height = (int) ($item['icon_height'] ?? 42);\n          if ($icon_width < 1) $icon_width = 42;\n          if ($icon_height < 1) $icon_height = 42;\n          $card_class = 'benefits-v3__card';\n          if (!$has_card_icon) $card_class .= ' benefits-v3__card--no-icon';\n        ?>\n        <li class=\"<?= htmlspecialchars($card_class) ?>\">\n          <?php if ($has_card_icon): ?>\n            <span class=\"benefits-v3__icon\" aria-hidden=\"true\">\n              <img\n                class=\"benefits-v3__icon-img\"\n                src=\"<?= htmlspecialchars($card_icon_src) ?>\"\n                alt=\"\"\n                width=\"<?= $icon_width ?>\"\n                height=\"<?= $icon_height ?>\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <\/span>\n          <?php endif; ?>\n          <div class=\"benefits-v3__body\">\n            <?php if ($has_text($item['title'] ?? '')): ?>\n              <p class=\"benefits-v3__title uibtntext\"><?= htmlspecialchars($item['title']) ?><\/p>\n            <?php endif; ?>\n            <?php if ($has_text($item['text'] ?? '')): ?>\n              <p class=\"benefits-v3__text bodytext-strong\"><?= htmlspecialchars($item['text']) ?><\/p>\n            <?php endif; ?>\n          <\/div>\n        <\/li>\n      <?php endforeach; ?>\n    <\/ul>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "expert-advice-variant-2": "<section class=\"expert-advice-v2 expert-advice-v2--photo-<?= htmlspecialchars($photo_side) ?> <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"expert-advice-v2__grid\">\n      <figure class=\"expert-advice-v2__photo\">\n        <div class=\"expert-advice-v2__photo-media\">\n          <img\n            src=\"<?= htmlspecialchars($team_photo) ?>\"\n            alt=\"\"\n            loading=\"lazy\"\n            decoding=\"async\"\n          >\n          <?php if ($show_doctor_info): ?>\n            <figcaption class=\"expert-advice-v2__photo-badge\">\n              <p class=\"expert-advice-v2__photo-name megatext-sm\"><?= htmlspecialchars($doctor_name) ?><\/p>\n              <p class=\"expert-advice-v2__photo-meta bodytext\"><?= htmlspecialchars($doctor_meta) ?><\/p>\n            <\/figcaption>\n          <?php endif; ?>\n        <\/div>\n      <\/figure>\n\n      <div class=\"expert-advice-v2__main\">\n        <div class=\"expert-advice-v2__copy stack stack--xl\">\n          <div class=\"expert-advice-v2__head stack stack--md\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'expert-advice-v2__eyebrow') ?>\n            <<?= $heading_level ?> class=\"expert-advice-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <\/div>\n\n          <div class=\"expert-advice-v2__body bodytext-md\">\n            <?php foreach ($paragraphs as $p): ?>\n              <p><?= htmlspecialchars($p) ?><\/p>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n\n        <div class=\"expert-advice-v2__stats\">\n          <?php foreach ($stats as $stat): ?>\n            <div class=\"expert-advice-v2__stat\">\n              <p class=\"expert-advice-v2__stat-value megatext-md\"><?= htmlspecialchars($stat['value']) ?><\/p>\n              <p class=\"expert-advice-v2__stat-label bodytext-md\"><?= htmlspecialchars($stat['label']) ?><\/p>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "treatment-technologies-variant-2": "<?php\n  $treatment_technologies_v2_initial_index = max(0, min(count($slides) - 1, (int) $initial_index));\n?>\n<section class=\"treatment-technologies-v2 section-space-y-lg\">\n  <div class=\"container\">\n    <div class=\"treatment-technologies-v2__inner stack\">\n      <div class=\"treatment-technologies-v2__head\">\n        <div class=\"treatment-technologies-v2__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'treatment-technologies-v2__eyebrow') ?>\n          <<?= $heading_level ?> class=\"treatment-technologies-v2__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n        <\/div>\n        <p class=\"treatment-technologies-v2__head-lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/div>\n\n      <div class=\"treatment-technologies-v2__card\">\n        <div class=\"treatment-technologies-v2__slider swiper\">\n          <div class=\"swiper-wrapper\">\n            <?php foreach ($slides as $slide): ?>\n              <div class=\"swiper-slide\">\n                <div class=\"treatment-technologies-v2__slide\">\n                  <div class=\"treatment-technologies-v2__media\">\n                    <img\n                      class=\"treatment-technologies-v2__media-img\"\n                      src=\"<?= htmlspecialchars($slide['image'] ?? '') ?>\"\n                      alt=\"<?= htmlspecialchars($slide['alt'] ?? '') ?>\"\n                      width=\"771\"\n                      height=\"508\"\n                      loading=\"lazy\"\n                      decoding=\"async\"\n                    >\n                  <\/div>\n\n                  <div class=\"treatment-technologies-v2__copy\">\n                    <div class=\"treatment-technologies-v2__copy-main stack\">\n                      <div class=\"treatment-technologies-v2__brand-block stack stack--sm\">\n                        <p class=\"treatment-technologies-v2__brand megatext\"><?= htmlspecialchars($slide['brand'] ?? '') ?><\/p>\n                        <p class=\"treatment-technologies-v2__slide-title leadtext\"><?= htmlspecialchars($slide['title'] ?? '') ?><\/p>\n                      <\/div>\n\n                      <?php if (!empty($slide['benefits'])): ?>\n                        <ul class=\"treatment-technologies-v2__benefits\">\n                          <?php foreach ($slide['benefits'] as $benefit): ?>\n                            <li class=\"treatment-technologies-v2__benefit leadtext\">\n                              <span class=\"treatment-technologies-v2__benefit-dot\" aria-hidden=\"true\"><\/span>\n                              <span class=\"treatment-technologies-v2__benefit-text\"><?= htmlspecialchars($benefit) ?><\/span>\n                            <\/li>\n                          <?php endforeach; ?>\n                        <\/ul>\n                      <?php endif; ?>\n                    <\/div>\n                  <\/div>\n                <\/div>\n              <\/div>\n            <?php endforeach; ?>\n          <\/div>\n        <\/div>\n\n        <?php if (count($slides) > 1): ?>\n          <div class=\"treatment-technologies-v2__controls slider-nav--glass\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev treatment-technologies-v2__nav-btn\" aria-label=\"Предыдущая технология\">\n              <svg class=\"icon treatment-technologies-v2__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                <use href=\"#icon-slider-arrow\"><\/use>\n              <\/svg>\n            <\/button>\n\n            <div class=\"slider-pagination-host treatment-technologies-v2__pagination-host\">\n              <div class=\"treatment-technologies-v2__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n            <\/div>\n\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next treatment-technologies-v2__nav-btn\" aria-label=\"Следующая технология\">\n              <svg class=\"icon treatment-technologies-v2__arrow\" width=\"17\" height=\"11\" aria-hidden=\"true\">\n                <use href=\"#icon-slider-arrow\"><\/use>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "treatment-technologies-variant-3": "<section class=\"treatment-technologies-v3 section-space-y-lg\">\n  <div class=\"container\">\n    <div class=\"treatment-technologies-v3__inner stack\">\n      <div class=\"treatment-technologies-v3__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'treatment-technologies-v3__eyebrow') ?>\n        <<?= $heading_level ?> class=\"treatment-technologies-v3__title megatext\">\n          <?= $title ?>\n        <\/<?= $heading_level ?>>\n        <p class=\"treatment-technologies-v3__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/div>\n\n      <ul class=\"treatment-technologies-v3__features\">\n        <?php foreach ($items as $item): ?>\n          <li class=\"treatment-technologies-v3__feature\">\n            <?php if (trim((string) ($item['icon'] ?? '')) !== ''): ?>\n            <span class=\"treatment-technologies-v3__icon\" aria-hidden=\"true\">\n              <img\n                class=\"treatment-technologies-v3__icon-img\"\n                src=\"<?= htmlspecialchars($item['icon']) ?>\"\n                alt=\"\"\n                width=\"64\"\n                height=\"64\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <\/span>\n            <?php endif; ?>\n            <div class=\"treatment-technologies-v3__feature-copy stack stack--sm\">\n              <p class=\"treatment-technologies-v3__feature-title titletext-sm\"><?= htmlspecialchars($item['title'] ?? '') ?><\/p>\n              <p class=\"treatment-technologies-v3__feature-text bodytext-lg-regular\"><?= htmlspecialchars($item['text'] ?? '') ?><\/p>\n            <\/div>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>",
            "reviews-variant-4": "<?php\n$reviews_v4_initial = static function (string $name): string {\n    $name = trim($name);\n    if ($name === '') {\n        return '';\n    }\n\n    return mb_strtoupper(mb_substr($name, 0, 1));\n};\n\n$reviews_v4_normalize_rating = static function ($rating): float {\n    if (!is_numeric($rating)) {\n        return 5.0;\n    }\n\n    return round(max(1, min(5, (float) $rating)), 1);\n};\n\n$reviews_v4_render_stars = static function (float $rating, string $size = 'lg'): void {\n    $rating = max(0, min(5, round($rating, 1)));\n    ?>\n    <span\n      class=\"stars-rating stars-rating--<?= htmlspecialchars($size) ?>\"\n      style=\"--stars-rating-value: <?= htmlspecialchars(number_format($rating, 1, '.', '')) ?>\"\n      aria-hidden=\"true\"\n    >\n      <span class=\"stars-rating__layer stars-rating__layer--empty\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n      <span class=\"stars-rating__layer stars-rating__layer--fill\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n    <\/span>\n    <?php\n};\n\n$reviews_v4_render_widget_review = static function (array $review) use ($reviews_v4_initial, $reviews_v4_normalize_rating): void {\n    $rating = $reviews_v4_normalize_rating($review['rating'] ?? 5);\n    $rating_value = number_format($rating, 1, '.', '');\n    $initial = $reviews_v4_initial($review['name'] ?? '');\n    ?>\n    <article class=\"reviews-v4__review\">\n      <?php if ($initial !== ''): ?>\n        <div class=\"reviews-v4__avatar\" aria-hidden=\"true\">\n          <span class=\"reviews-v4__avatar-letter bodytext-lg\"><?= htmlspecialchars($initial) ?><\/span>\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"reviews-v4__review-body stack stack--md\">\n        <div class=\"reviews-v4__review-head\">\n          <div class=\"reviews-v4__review-meta stack stack--sm\">\n            <p class=\"reviews-v4__review-name bodytext-lg\"><?= htmlspecialchars($review['name']) ?><\/p>\n            <?php if (!empty($review['date'])): ?>\n              <p class=\"reviews-v4__review-date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n            <?php endif; ?>\n          <\/div>\n          <div class=\"reviews-v4__review-rating\" aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> из 5\">\n            <span class=\"reviews-v4__review-score bodytext-lg\"><?= htmlspecialchars($rating_value) ?><\/span>\n            <svg class=\"icon reviews-v4__review-star\" width=\"30\" height=\"30\" aria-hidden=\"true\">\n              <use href=\"#icon-star\"><\/use>\n            <\/svg>\n          <\/div>\n        <\/div>\n        <p class=\"reviews-v4__review-text bodytext-strong\"><?= htmlspecialchars($review['text']) ?><\/p>\n      <\/div>\n    <\/article>\n    <?php\n};\n?>\n<section class=\"reviews-v4 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"reviews-v4__grid\">\n      <div class=\"reviews-v4__lead-col stack stack--xl\">\n        <div class=\"reviews-v4__head stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'reviews-v4__eyebrow') ?>\n          <div class=\"titles stack stack--md\">\n            <<?= $heading_level ?> class=\"reviews-v4__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n            <p class=\"reviews-v4__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n        <\/div>\n\n        <ul class=\"reviews-v4__highlights\">\n          <?php foreach ($highlights as $highlight): ?>\n            <li class=\"reviews-v4__highlight\">\n              <?php if (trim((string) ($highlight['icon'] ?? '')) !== ''): ?>\n              <span class=\"reviews-v4__highlight-icon\" aria-hidden=\"true\">\n                <img\n                  class=\"reviews-v4__highlight-icon-img\"\n                  src=\"<?= htmlspecialchars($highlight['icon']) ?>\"\n                  alt=\"\"\n                  width=\"24\"\n                  height=\"24\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n              <?php endif; ?>\n              <div class=\"reviews-v4__highlight-body stack stack--sm reviews-v4__highlight-body--spaced\">\n                <p class=\"reviews-v4__highlight-title bodytext-md\"><?= htmlspecialchars($highlight['title']) ?><\/p>\n                <p class=\"reviews-v4__highlight-text bodytext-strong\"><?= htmlspecialchars($highlight['text']) ?><\/p>\n              <\/div>\n            <\/li>\n          <?php endforeach; ?>\n        <\/ul>\n      <\/div>\n\n      <aside class=\"reviews-v4__widget\" aria-label=\"Виджет отзывов\">\n        <div class=\"reviews-v4__widget-head\">\n          <div class=\"reviews-v4__widget-clinic stack stack--sm\">\n            <p class=\"reviews-v4__widget-clinic-name bodytext-lg\"><?= htmlspecialchars($clinic_name) ?><\/p>\n            <p class=\"reviews-v4__widget-clinic-location bodytext\"><?= htmlspecialchars($clinic_location) ?><\/p>\n          <\/div>\n\n          <div class=\"reviews-v4__widget-summary\">\n            <div class=\"reviews-v4__widget-rating-row\">\n              <div class=\"reviews-v4__widget-rating-score\">\n                <span class=\"reviews-v4__widget-score bodytext-lg\"><?= htmlspecialchars(number_format($widget_rating, 1, '.', '')) ?><\/span>\n                <?php $reviews_v4_render_stars($widget_rating, 'lg'); ?>\n              <\/div>\n              <p class=\"reviews-v4__widget-count bodytext\"><?= htmlspecialchars($widget_reviews_label) ?><\/p>\n            <\/div>\n            <img\n              class=\"reviews-v4__widget-logo\"\n              src=\"<?= htmlspecialchars($widget_logo_src) ?>\"\n              alt=\"\"\n              width=\"<?= (int) $widget_logo_w ?>\"\n              height=\"<?= (int) $widget_logo_h ?>\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/div>\n        <\/div>\n\n        <div class=\"reviews-v4__widget-divider\" aria-hidden=\"true\"><\/div>\n\n        <div class=\"reviews-v4__widget-body stack stack--md\">\n          <p class=\"reviews-v4__widget-title bodytext-lg\"><?= htmlspecialchars($widget_title) ?><\/p>\n\n          <div class=\"reviews-v4__filters\" role=\"group\" aria-label=\"Фильтр отзывов\">\n            <?php foreach ($widget_filters as $filter_index => $filter): ?>\n              <button\n                type=\"button\"\n                class=\"reviews-v4__chip bodytext-strong<?= $filter_index === 0 ? ' is-active' : '' ?>\"\n                aria-pressed=\"<?= $filter_index === 0 ? 'true' : 'false' ?>\"\n                data-reviews-v4-filter=\"<?= htmlspecialchars($filter['id']) ?>\"\n              >\n                <?= htmlspecialchars($filter['label']) ?>\n              <\/button>\n            <?php endforeach; ?>\n          <\/div>\n\n          <div class=\"reviews-v4__reviews-groups\">\n            <div class=\"reviews-v4__reviews\" data-reviews-v4-group=\"positive\">\n              <?php foreach ($widget_reviews_positive as $review): ?>\n                <?php $reviews_v4_render_widget_review($review); ?>\n              <?php endforeach; ?>\n            <\/div>\n\n            <div class=\"reviews-v4__reviews is-hidden\" data-reviews-v4-group=\"negative\">\n              <?php foreach ($widget_reviews_negative as $review): ?>\n                <?php $reviews_v4_render_widget_review($review); ?>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"reviews-v4__widget-foot\">\n          <div class=\"reviews-v4__widget-source\">\n            <span class=\"reviews-v4__widget-source-label bodytext-sm\"><?= htmlspecialchars($widget_source_label) ?><\/span>\n            <img\n              class=\"reviews-v4__widget-source-logo\"\n              src=\"<?= htmlspecialchars($widget_logo_src) ?>\"\n              alt=\"\"\n              width=\"<?= (int) $widget_footer_logo_w ?>\"\n              height=\"<?= (int) $widget_footer_logo_h ?>\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n          <\/div>\n          <a class=\"reviews-v4__widget-read link-arrow bodytext-strong\" href=\"<?= htmlspecialchars($widget_read_url) ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n            <?= htmlspecialchars($widget_read_label) ?>\n            <svg class=\"icon reviews-v4__widget-read-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-arrow-right\"><\/use>\n            <\/svg>\n          <\/a>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "certificates-variant-2": "<section class=\"certificates-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"certificates-v2__inner stack stack--xl\">\n      <div class=\"certificates-v2__head\">\n        <div class=\"certificates-v2__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'certificates-v2__eyebrow') ?>\n          <<?= $heading_level ?> class=\"certificates-v2__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n        <\/div>\n        <p class=\"certificates-v2__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/div>\n\n      <div class=\"certificates-v2__carousel\">\n        <div class=\"certificates-v2__slider-toolbar\">\n          <div class=\"certificates-v2__slider-nav slider-nav slider-nav--brand\">\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий сертификат\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n            <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий сертификат\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n              <\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"certificates-v2__slider-foot slider-foot\">\n          <div class=\"certificates-v2__slider swiper\">\n            <div class=\"certificates-v2__track swiper-wrapper\">\n              <?php foreach ($items as $item): ?>\n                <?php\n                  $item_file = trim((string) ($item['file'] ?? ''));\n                  $has_file = $item_file !== '';\n                ?>\n                <article class=\"certificates-v2__item swiper-slide\">\n                  <div class=\"certificates-v2__preview\">\n                    <img\n                      class=\"certificates-v2__preview-photo\"\n                      src=\"<?= htmlspecialchars($item['image']) ?>\"\n                      alt=\"\"\n                      width=\"357\"\n                      height=\"505\"\n                      loading=\"lazy\"\n                      decoding=\"async\"\n                    >\n                  <\/div>\n                  <div class=\"certificates-v2__foot\">\n                    <p class=\"certificates-v2__type bodytext-strong\"><?= htmlspecialchars($item['type']) ?><\/p>\n                    <?php if ($has_file): ?>\n                      <a\n                        class=\"certificates-v2__download bodytext-strong\"\n                        href=\"<?= htmlspecialchars($item_file) ?>\"\n                        target=\"_blank\"\n                        rel=\"noopener noreferrer\"\n                      >\n                        <span class=\"certificates-v2__download-label\"><?= htmlspecialchars($download_label) ?><\/span>\n                        <svg class=\"icon certificates-v2__download-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                          <use href=\"#icon-download\"><\/use>\n                        <\/svg>\n                      <\/a>\n                    <?php endif; ?>\n                  <\/div>\n                <\/article>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n          <div class=\"slider-pagination-host\">\n            <div class=\"certificates-v2__pagination slider-pagination--dots swiper-pagination\"><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "faq-variant-2": "<section class=\"faq-v2 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y-lg\">\n  <div class=\"container\">\n    <div class=\"faq-v2__inner stack stack--xl\">\n      <div class=\"faq-v2__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'faq-v2__eyebrow') ?>\n        <<?= $heading_level ?> class=\"faq-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n        <p class=\"faq-v2__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n      <\/div>\n\n      <div class=\"faq-v2__tabs\" role=\"tablist\" aria-label=\"<?= htmlspecialchars(trim(preg_replace('\/\\s+\/u', ' ', strip_tags($title)))) ?>\">\n        <?php foreach ($tabs as $tab_index => $tab): ?>\n          <?php\n            $tab_id = 'faq-v2-tab-' . $tab['key'];\n            $panel_id = 'faq-v2-tabpanel-' . $tab['key'];\n            $is_active = $tab_index === 0;\n          ?>\n          <button\n            type=\"button\"\n            class=\"faq-v2__tab bodytext-strong<?= $is_active ? ' is-active' : '' ?>\"\n            id=\"<?= $tab_id ?>\"\n            role=\"tab\"\n            aria-selected=\"<?= $is_active ? 'true' : 'false' ?>\"\n            aria-controls=\"<?= $panel_id ?>\"\n            data-faq-v2-tab=\"<?= htmlspecialchars($tab['key']) ?>\"\n            tabindex=\"<?= $is_active ? '0' : '-1' ?>\"\n          >\n            <?= htmlspecialchars($tab['label']) ?>\n          <\/button>\n        <?php endforeach; ?>\n      <\/div>\n\n      <div class=\"faq-v2__panels\">\n        <?php foreach ($tabs as $tab_index => $tab): ?>\n          <?php\n            $tab_id = 'faq-v2-tab-' . $tab['key'];\n            $panel_id = 'faq-v2-tabpanel-' . $tab['key'];\n            $is_active = $tab_index === 0;\n            $items = $tab['items'] ?? [];\n          ?>\n          <div\n            class=\"faq-v2__panel stack stack--md\"\n            id=\"<?= $panel_id ?>\"\n            role=\"tabpanel\"\n            aria-labelledby=\"<?= $tab_id ?>\"\n            data-faq-v2-tabpanel=\"<?= htmlspecialchars($tab['key']) ?>\"\n            data-faq-v2-initial=\"<?= (int)$initial_visible ?>\"\n            data-faq-v2-step=\"<?= (int)$reveal_step ?>\"\n            aria-hidden=\"<?= $is_active ? 'false' : 'true' ?>\"\n            <?= $is_active ? '' : ' hidden' ?>\n          >\n            <div class=\"faq-v2__accordion\" aria-label=\"<?= htmlspecialchars($tab['label']) ?>\">\n              <?php foreach ($items as $index => $item): ?>\n                <?php\n                  $trigger_id = 'faq-v2-' . $tab['key'] . '-trigger-' . ($index + 1);\n                  $item_panel_id = 'faq-v2-' . $tab['key'] . '-panel-' . ($index + 1);\n                  $materials = isset($item['materials']) && is_array($item['materials']) ? $item['materials'] : [];\n                  $materials_count = count($materials);\n                  $is_hidden = $index >= $initial_visible;\n                  $question = (string)($item['question'] ?? '');\n                  $question_is_html = strpos($question, '<') !== false;\n                  $answer = (string)($item['answer'] ?? '');\n                  $answer_is_html = strpos($answer, '<') !== false;\n                  $item_icon_sprite = trim((string) ($item['icon_sprite'] ?? ''));\n                  $item_icon = trim((string) ($item['icon'] ?? ''));\n                  $has_q_icon = $item_icon_sprite !== '' || $item_icon !== '';\n                ?>\n                <div class=\"faq-v2__item glass glass--desktop-only glass--surface-70\" data-faq-v2-item<?= $is_hidden ? ' hidden' : '' ?>>\n                  <div\n                    class=\"faq-v2__trigger\"\n                    role=\"button\"\n                    tabindex=\"0\"\n                    id=\"<?= htmlspecialchars($trigger_id) ?>\"\n                    aria-expanded=\"false\"\n                    aria-controls=\"<?= htmlspecialchars($item_panel_id) ?>\"\n                  >\n                    <span class=\"faq-v2__left<?= $has_q_icon ? '' : ' faq-v2__left--no-icon' ?>\">\n                      <?php if ($has_q_icon): ?>\n                        <span class=\"faq-v2__q-icon\" aria-hidden=\"true\">\n                          <?php if ($item_icon !== ''): ?>\n                            <img class=\"faq-v2__q-icon-svg\" src=\"<?= htmlspecialchars($item_icon) ?>\" alt=\"\" width=\"38\" height=\"42\" loading=\"lazy\" decoding=\"async\">\n                          <?php else: ?>\n                            <svg class=\"icon faq-v2__q-icon-svg\" width=\"38\" height=\"42\" aria-hidden=\"true\">\n                              <use href=\"#<?= htmlspecialchars($item_icon_sprite) ?>\"><\/use>\n                            <\/svg>\n                          <?php endif; ?>\n                        <\/span>\n                      <?php endif; ?>\n                      <span class=\"faq-v2__question bodytext-lg\">\n                        <?= $question_is_html ? $question : htmlspecialchars($question) ?>\n                      <\/span>\n                    <\/span>\n\n                    <span class=\"faq-v2__right\">\n                      <?php if ($materials_count > 0): ?>\n                        <span class=\"faq-v2__meta bodytext\"><?= htmlspecialchars($materials_count) ?> материалов<\/span>\n                      <?php endif; ?>\n                      <span class=\"faq-v2__chevron\" aria-hidden=\"true\">\n                        <svg class=\"icon faq-v2__chevron-svg\" width=\"31\" height=\"32\" aria-hidden=\"true\">\n                          <use href=\"#icon-faq-arrow\"><\/use>\n                        <\/svg>\n                      <\/span>\n                    <\/span>\n                  <\/div>\n                  <div\n                    class=\"faq-v2__item-panel\"\n                    id=\"<?= htmlspecialchars($item_panel_id) ?>\"\n                    role=\"region\"\n                    aria-labelledby=\"<?= htmlspecialchars($trigger_id) ?>\"\n                    hidden\n                  >\n                    <div class=\"faq-v2__item-panel-inner\">\n                      <div class=\"faq-v2__item-panel-body\">\n                        <?php if ($answer_is_html): ?>\n                          <div class=\"faq-v2__answer wysiwyg bodytext\"><?= $answer ?><\/div>\n                        <?php else: ?>\n                          <p class=\"faq-v2__answer bodytext\"><?= htmlspecialchars($answer) ?><\/p>\n                        <?php endif; ?>\n                        <?php if ($materials_count > 0): ?>\n                          <div class=\"faq-v2__materials\" aria-label=\"Материалы\">\n                            <?php foreach ($materials as $material): ?>\n                              <a class=\"faq-v2__material bodytext text-decoration-fade\" href=\"<?= htmlspecialchars($material['url']) ?>\">\n                                <?= htmlspecialchars($material['title']) ?>\n                              <\/a>\n                            <?php endforeach; ?>\n                          <\/div>\n                        <?php endif; ?>\n                      <\/div>\n                    <\/div>\n                  <\/div>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n\n            <div class=\"faq-v2__more-row\">\n              <button type=\"button\" class=\"btn btn--secondary faq-v2__more uibtntext\" data-faq-v2-more hidden>\n                <?= htmlspecialchars(mb_strtoupper($more_label, 'UTF-8')) ?>\n              <\/button>\n            <\/div>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "vacancies-variant-1": "<?php\n  $team_image = trim((string) $team_image);\n  $team_alt = trim((string) $team_alt);\n  $resume_title = trim((string) $resume_title);\n  $resume_text = trim((string) $resume_text);\n  $resume_cta = trim((string) $resume_cta);\n  $lead = trim((string) $lead);\n  $more_label = trim((string) $more_label);\n  $more_url = trim((string) $more_url);\n  $apply_cta = trim((string) $apply_cta);\n  $has_team_photo = $team_image !== '';\n  $has_resume_copy = $resume_title !== '' || $resume_text !== '';\n  $has_resume = $has_resume_copy || $resume_cta !== '';\n  $has_aside = $has_team_photo || $has_resume;\n  $has_title = trim(strip_tags((string) $title)) !== '';\n?>\n<section class=\"vacancies-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"vacancies-v1__grid\">\n      <?php if ($has_aside): ?>\n        <div class=\"vacancies-v1__aside<?= $has_team_photo ? '' : ' vacancies-v1__aside--no-photo' ?>\">\n          <?php if ($has_team_photo): ?>\n            <div class=\"vacancies-v1__photo\" aria-hidden=\"true\">\n              <img src=\"<?= htmlspecialchars($team_image) ?>\" alt=\"<?= htmlspecialchars($team_alt) ?>\" loading=\"lazy\" decoding=\"async\">\n            <\/div>\n          <?php endif; ?>\n\n          <?php if ($has_resume): ?>\n            <div class=\"vacancies-v1__resume\">\n              <div class=\"vacancies-v1__resume-inner stack stack--lg\">\n                <?php if ($has_resume_copy): ?>\n                  <div class=\"vacancies-v1__resume-copy stack stack--sm\">\n                    <?php if ($resume_title !== ''): ?>\n                      <p class=\"vacancies-v1__resume-title leadtext-xl\"><?= htmlspecialchars($resume_title) ?><\/p>\n                    <?php endif; ?>\n                    <?php if ($resume_text !== ''): ?>\n                      <p class=\"vacancies-v1__resume-text bodytext-lg\"><?= htmlspecialchars($resume_text) ?><\/p>\n                    <?php endif; ?>\n                  <\/div>\n                <?php endif; ?>\n                <?php if ($resume_cta !== ''): ?>\n                  <button type=\"button\" class=\"btn btn--primary vacancies-v1__resume-cta\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('resume')) ?>\" data-remote=\"1\">\n                    <?= htmlspecialchars($resume_cta) ?>\n                  <\/button>\n                <?php endif; ?>\n              <\/div>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"vacancies-v1__main\">\n        <div class=\"vacancies-v1__head stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'vacancies-v1__eyebrow') ?>\n          <?php if ($has_title): ?>\n            <<?= $heading_level ?> class=\"vacancies-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <?php endif; ?>\n          <?php if ($lead !== ''): ?>\n            <p class=\"vacancies-v1__lead bodytext-lg\"><?= htmlspecialchars($lead) ?><\/p>\n          <?php endif; ?>\n        <\/div>\n\n        <div class=\"vacancies-v1__list\" data-vacancies-v1-list>\n          <?php foreach ($vacancies as $index => $vacancy): ?>\n            <?php\n              $vacancy_title = trim((string) ($vacancy['title'] ?? ''));\n              if ($vacancy_title === '') {\n                continue;\n              }\n              $salary = trim((string) ($vacancy['salary'] ?? ''));\n              $employment = trim((string) ($vacancy['employment'] ?? ''));\n              $details = [];\n              $panel_columns = [];\n              foreach (($vacancy['details'] ?? []) as $block) {\n                if (is_string($block)) {\n                  $text = trim($block);\n                  if ($text !== '') {\n                    $details[] = $text;\n                  }\n                  continue;\n                }\n                if (!is_array($block)) {\n                  continue;\n                }\n                $kind = (string) ($block['kind'] ?? 'p');\n                $block_title = trim((string) ($block['title'] ?? ''));\n                if ($kind === 'columns') {\n                  foreach (($block['columns'] ?? []) as $column) {\n                    if (!is_array($column)) {\n                      continue;\n                    }\n                    $column_title = trim((string) ($column['title'] ?? ''));\n                    $column_items = [];\n                    foreach (($column['items'] ?? []) as $li) {\n                      $li = trim((string) $li);\n                      if ($li !== '') {\n                        $column_items[] = $li;\n                      }\n                    }\n                    if ($column_title === '' && $column_items === []) {\n                      continue;\n                    }\n                    $panel_columns[] = ['title' => $column_title, 'items' => $column_items];\n                  }\n                  continue;\n                }\n                if ($kind === 'ul' || $kind === 'ol') {\n                  $items = [];\n                  foreach (($block['items'] ?? []) as $li) {\n                    $li = trim((string) $li);\n                    if ($li !== '') {\n                      $items[] = $li;\n                    }\n                  }\n                  if ($block_title === '' && $items === []) {\n                    continue;\n                  }\n                  $details[] = ['kind' => $kind, 'title' => $block_title, 'items' => $items];\n                  continue;\n                }\n                $text = trim((string) ($block['text'] ?? ''));\n                if ($block_title === '' && $text === '') {\n                  continue;\n                }\n                $details[] = ['kind' => $kind, 'title' => $block_title, 'text' => $text];\n              }\n              $city = trim((string) ($vacancy['city'] ?? ''));\n              $address = trim((string) ($vacancy['address'] ?? ''));\n              $has_location = $city !== '' || $address !== '';\n              $has_apply = $apply_cta !== '';\n              $has_panel_foot = $panel_columns !== [] || $has_location || $has_apply;\n              $has_details = $details !== [] || $has_panel_foot;\n              $has_meta = $salary !== '' || $employment !== '';\n              $item_id = 'vacancies-v1-item-' . ($index + 1);\n              $panel_id = 'vacancies-v1-panel-' . ($index + 1);\n            ?>\n            <div class=\"vacancies-v1__item\">\n              <button\n                type=\"button\"\n                class=\"vacancies-v1__trigger glass glass--desktop-only glass--surface-70\"\n                id=\"<?= htmlspecialchars($item_id) ?>\"\n                aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n                aria-expanded=\"false\"\n                <?= $has_details ? '' : 'disabled' ?>\n                data-vacancies-v1-trigger\n              >\n                <span class=\"vacancies-v1__role bodytext-lg\"><?= htmlspecialchars($vacancy_title) ?><\/span>\n                <?php if ($has_meta): ?>\n                  <span class=\"vacancies-v1__meta bodytext-strong\">\n                    <?php if ($salary !== ''): ?>\n                      <span class=\"vacancies-v1__meta-part\"><?= htmlspecialchars($salary) ?><\/span>\n                    <?php endif; ?>\n                    <?php if ($salary !== '' && $employment !== ''): ?>\n                      <span class=\"vacancies-v1__dot\" aria-hidden=\"true\"><\/span>\n                    <?php endif; ?>\n                    <?php if ($employment !== ''): ?>\n                      <span class=\"vacancies-v1__meta-part\"><?= htmlspecialchars($employment) ?><\/span>\n                    <?php endif; ?>\n                  <\/span>\n                <?php endif; ?>\n              <\/button>\n\n              <?php if ($has_details): ?>\n                <div class=\"vacancies-v1__panel\" id=\"<?= htmlspecialchars($panel_id) ?>\" role=\"region\" aria-labelledby=\"<?= htmlspecialchars($item_id) ?>\" hidden>\n                  <div class=\"vacancies-v1__panel-inner glass glass--desktop-only glass--static glass--surface-70\">\n                    <?php foreach ($details as $block): ?>\n                      <?php if (is_string($block)): ?>\n                        <p class=\"vacancies-v1__panel-text bodytext-md\"><?= nl2br(htmlspecialchars($block), false) ?><\/p>\n                        <?php continue; ?>\n                      <?php endif; ?>\n\n                      <?php\n                        $kind = (string) ($block['kind'] ?? 'p');\n                        $block_title = (string) ($block['title'] ?? '');\n                      ?>\n\n                      <?php if ($block_title !== ''): ?>\n                        <p class=\"vacancies-v1__panel-title bodytext-md\"><?= htmlspecialchars($block_title) ?><\/p>\n                      <?php endif; ?>\n\n                      <?php if ($kind === 'ul' && !empty($block['items'])): ?>\n                        <ul class=\"vacancies-v1__panel-list bodytext-md\">\n                          <?php foreach ($block['items'] as $li): ?>\n                            <li class=\"vacancies-v1__panel-li\"><?= htmlspecialchars((string) $li) ?><\/li>\n                          <?php endforeach; ?>\n                        <\/ul>\n                      <?php elseif ($kind === 'ol' && !empty($block['items'])): ?>\n                        <ol class=\"vacancies-v1__panel-list vacancies-v1__panel-list--ol bodytext-md\">\n                          <?php foreach ($block['items'] as $li): ?>\n                            <li class=\"vacancies-v1__panel-li\"><?= htmlspecialchars((string) $li) ?><\/li>\n                          <?php endforeach; ?>\n                        <\/ol>\n                      <?php elseif ($kind === 'note' && trim((string) ($block['text'] ?? '')) !== ''): ?>\n                        <p class=\"vacancies-v1__panel-note bodytext-md\"><?= htmlspecialchars((string) $block['text']) ?><\/p>\n                      <?php elseif (trim((string) ($block['text'] ?? '')) !== ''): ?>\n                        <p class=\"vacancies-v1__panel-text bodytext-md\"><?= nl2br(htmlspecialchars((string) $block['text']), false) ?><\/p>\n                      <?php endif; ?>\n                    <?php endforeach; ?>\n\n                    <?php if ($has_panel_foot): ?>\n                      <div class=\"vacancies-v1__panel-foot\">\n                        <?php if ($panel_columns !== []): ?>\n                          <div class=\"vacancies-v1__panel-cols\">\n                            <?php foreach ($panel_columns as $column): ?>\n                              <div class=\"vacancies-v1__panel-col\">\n                                <?php if ($column['title'] !== ''): ?>\n                                  <p class=\"vacancies-v1__panel-col-title bodytext-md\"><?= htmlspecialchars($column['title']) ?><\/p>\n                                <?php endif; ?>\n                                <?php if ($column['items'] !== []): ?>\n                                  <ul class=\"vacancies-v1__panel-col-list\">\n                                    <?php foreach ($column['items'] as $li): ?>\n                                      <li class=\"vacancies-v1__panel-col-item bodytext-md\">\n                                        <span class=\"vacancies-v1__panel-col-dot\" aria-hidden=\"true\"><\/span>\n                                        <span class=\"vacancies-v1__panel-col-text\"><?= htmlspecialchars((string) $li) ?><\/span>\n                                      <\/li>\n                                    <?php endforeach; ?>\n                                  <\/ul>\n                                <?php endif; ?>\n                              <\/div>\n                            <?php endforeach; ?>\n                          <\/div>\n                        <?php endif; ?>\n\n                        <?php if ($has_location || $has_apply): ?>\n                          <div class=\"vacancies-v1__panel-aside\">\n                            <?php if ($has_location): ?>\n                              <div class=\"vacancies-v1__panel-location\">\n                                <?php if ($city !== ''): ?>\n                                  <p class=\"vacancies-v1__panel-city bodytext-md\"><?= htmlspecialchars($city) ?><\/p>\n                                <?php endif; ?>\n                                <?php if ($address !== ''): ?>\n                                  <p class=\"vacancies-v1__panel-address bodytext-md\"><?= htmlspecialchars($address) ?><\/p>\n                                <?php endif; ?>\n                              <\/div>\n                            <?php endif; ?>\n                            <?php if ($has_apply): ?>\n                              <button\n                                type=\"button\"\n                                class=\"btn btn--primary uibtntext vacancies-v1__apply\"\n                                data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('resume')) ?>\"\n                                data-remote=\"1\"\n                              >\n                                <?= htmlspecialchars($apply_cta) ?>\n                              <\/button>\n                            <?php endif; ?>\n                          <\/div>\n                        <?php endif; ?>\n                      <\/div>\n                    <?php endif; ?>\n                  <\/div>\n                <\/div>\n              <?php endif; ?>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n\n        <?php if ($more_label !== ''): ?>\n          <div class=\"vacancies-v1__more\">\n            <a class=\"btn btn--secondary vacancies-v1__more-btn bodytext-sm\" href=\"<?= htmlspecialchars($more_url !== '' ? $more_url : '#') ?>\">\n              <?= htmlspecialchars($more_label) ?>\n            <\/a>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "certificates-variant-4": "<?php\n  $notice_text = trim((string) $notice_text);\n  $has_notice_text = $notice_text !== '';\n  $notice_icon_src = trim((string) $notice_icon_src);\n  $notice_icon_sprite = trim((string) $notice_icon_sprite);\n  $has_notice_icon = $notice_icon_src !== '' || $notice_icon_sprite !== '';\n?>\n<section class=\"certificates-v4 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"certificates-v4__inner stack\">\n      <div class=\"certificates-v4__slider-block stack stack--md\">\n        <div class=\"certificates-v4__head\">\n          <<?= $heading_level ?> class=\"certificates-v4__title leadtext-xl\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n\n          <?php if (count($items) > 1): ?>\n            <div class=\"certificates-v4__nav-wrap\">\n              <div class=\"certificates-v4__nav slider-nav slider-nav--glass\">\n                <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий документ\">\n                  <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                  <\/svg>\n                <\/button>\n                <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий документ\">\n                  <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                    <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                  <\/svg>\n                <\/button>\n              <\/div>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n\n        <div class=\"certificates-v4__slider-foot slider-foot\">\n          <div class=\"certificates-v4__slider swiper\">\n            <div class=\"swiper-wrapper\">\n              <?php foreach ($items as $item): ?>\n                <?php\n                  $issued_prefix = trim($item['issued_prefix'] ?? 'Выдана');\n                  $item_file = trim((string) ($item['file'] ?? ''));\n                  $has_file = $item_file !== '';\n                  $item_image = trim((string) ($item['image'] ?? ''));\n                  $has_image = $item_image !== '';\n                ?>\n                <div class=\"swiper-slide\">\n                  <article class=\"certificates-v4__card\">\n                    <div class=\"certificates-v4__card-main\">\n                      <?php if ($has_image): ?>\n                        <div class=\"certificates-v4__preview\">\n                          <img\n                            class=\"certificates-v4__preview-img\"\n                            src=\"<?= htmlspecialchars($item_image) ?>\"\n                            alt=\"\"\n                            width=\"126\"\n                            height=\"178\"\n                            loading=\"lazy\"\n                            decoding=\"async\"\n                          >\n                        <\/div>\n                      <?php endif; ?>\n\n                      <div class=\"certificates-v4__card-copy stack stack--md\">\n                        <div class=\"certificates-v4__card-head stack stack--md\">\n                          <p class=\"certificates-v4__card-title bodytext-strong\"><?= htmlspecialchars($item['title']) ?><\/p>\n                          <p class=\"certificates-v4__card-number bodytext-strong\"><?= htmlspecialchars($item['number']) ?><\/p>\n                        <\/div>\n                        <p class=\"certificates-v4__card-meta bodytext-strong\">\n                          <?= htmlspecialchars($issued_prefix) ?>: <?= htmlspecialchars($item['issued']) ?><br>\n                          <?= htmlspecialchars($item['issuer']) ?>\n                        <\/p>\n                      <\/div>\n                    <\/div>\n\n                    <?php if ($has_image || $has_file): ?>\n                    <div class=\"certificates-v4__card-actions\">\n                      <?php if ($has_image): ?>\n                        <button\n                          type=\"button\"\n                          class=\"certificates-v4__action bodytext-strong\"\n                          data-popup-open=\"media\"\n                          data-popup-src=\"<?= htmlspecialchars($item_image) ?>\"\n                          data-popup-kind=\"image\"\n                          data-popup-alt=\"<?= htmlspecialchars($item['title']) ?>\"\n                        >\n                          <span><?= htmlspecialchars($view_label) ?><\/span>\n                          <svg class=\"icon certificates-v4__action-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                            <use href=\"#icon-eye\"><\/use>\n                          <\/svg>\n                        <\/button>\n                      <?php endif; ?>\n                      <?php if ($has_file): ?>\n                        <a\n                          class=\"certificates-v4__action bodytext-strong\"\n                          href=\"<?= htmlspecialchars($item_file) ?>\"\n                          target=\"_blank\"\n                          rel=\"noopener noreferrer\"\n                          download\n                        >\n                          <span><?= htmlspecialchars($download_label) ?><\/span>\n                          <svg class=\"icon certificates-v4__action-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                            <use href=\"#icon-download\"><\/use>\n                          <\/svg>\n                        <\/a>\n                      <?php endif; ?>\n                    <\/div>\n                    <?php endif; ?>\n                  <\/article>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n\n          <?php if (count($items) > 1): ?>\n            <div class=\"slider-pagination-host\">\n              <div class=\"certificates-v4__pagination slider-pagination--dots swiper-pagination\"><\/div>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <?php if ($has_notice_text): ?>\n      <div class=\"certificates-v4__notice<?= $has_notice_icon ? '' : ' certificates-v4__notice--no-icon' ?>\">\n        <?php if ($has_notice_icon): ?>\n          <span class=\"certificates-v4__notice-icon\" aria-hidden=\"true\">\n            <?php if ($notice_icon_src !== ''): ?>\n              <img\n                class=\"certificates-v4__notice-icon-img\"\n                src=\"<?= htmlspecialchars($notice_icon_src) ?>\"\n                alt=\"\"\n                width=\"26\"\n                height=\"28\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              >\n            <?php else: ?>\n              <svg class=\"icon certificates-v4__notice-icon-svg\" width=\"26\" height=\"28\" aria-hidden=\"true\">\n                <use href=\"#<?= htmlspecialchars($notice_icon_sprite) ?>\"><\/use>\n              <\/svg>\n            <?php endif; ?>\n          <\/span>\n        <?php endif; ?>\n        <div class=\"certificates-v4__notice-copy stack stack--md\">\n          <p class=\"certificates-v4__notice-title leadtext bodytext-strong\"><?= htmlspecialchars($notice_title) ?><\/p>\n          <p class=\"certificates-v4__notice-text bodytext\"><?= htmlspecialchars($notice_text) ?><\/p>\n        <\/div>\n      <\/div>\n      <?php endif; ?>\n    <\/div>\n  <\/div>\n<\/section>",
            "certificates-variant-3": "<?php\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $has_cta_copy = $has_text($cta_title) || $has_text($cta_text);\n  $has_cta_button = $has_text($cta_btn_label) && trim((string) $cta_btn_url) !== '';\n  $has_cta = $has_cta_copy || $has_cta_button;\n?>\n<?php\n  $category_counts = [];\n  foreach ($category_defs as $category_def) {\n      if ($category_def['key'] === 'all') {\n          continue;\n      }\n      $category_counts[$category_def['key']] = 0;\n  }\n  foreach ($items as $item) {\n      $item_category = $item['category'] ?? '';\n      if (array_key_exists($item_category, $category_counts)) {\n          $category_counts[$item_category] += 1;\n      }\n  }\n  $categories = [];\n  foreach ($category_defs as $category_def) {\n      $categories[] = [\n          'key'   => $category_def['key'],\n          'label' => $category_def['label'],\n          'count' => $category_def['key'] === 'all'\n              ? count($items)\n              : ($category_counts[$category_def['key']] ?? 0),\n      ];\n  }\n  $cta_icon_src = trim((string) $cta_icon_src);\n  $cta_icon_sprite = trim((string) $cta_icon_sprite);\n  $has_cta_icon = $cta_icon_src !== '' || $cta_icon_sprite !== '';\n?>\n<section\n  class=\"certificates-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  id=\"<?= htmlspecialchars($section_id) ?>\"\n  data-certificates-v3-limit=\"<?= (int) $initial_limit ?>\"\n>\n  <div class=\"container\">\n    <div class=\"certificates-v3__inner stack stack--xl\">\n      <?php if ($has_text($eyebrow) || $has_text($title) || $has_text($lead)): ?><div class=\"certificates-v3__head stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'certificates-v3__eyebrow') ?>\n        <?php if ($has_text($title) || $has_text($lead)): ?><div class=\"titles\">\n          <?php if ($has_text($title)): ?><<?= $heading_level ?> class=\"certificates-v3__title megatext\"><?= $title ?><\/<?= $heading_level ?>><?php endif; ?>\n          <?php if ($has_text($lead)): ?><p class=\"certificates-v3__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p><?php endif; ?>\n        <\/div><?php endif; ?>\n      <\/div><?php endif; ?>\n\n      <div class=\"certificates-v3__grid\">\n      <aside class=\"certificates-v3__sidebar stack stack--lg\">\n        <label class=\"certificates-v3__filter-select-wrap field\">\n          <select\n            class=\"field__input certificates-v3__filter-select bodytext-strong\"\n            data-certificates-v3-select\n            aria-label=\"Категории документов\"\n          >\n            <?php foreach ($categories as $cat_index => $category): ?>\n              <option value=\"<?= htmlspecialchars($category['key']) ?>\"<?= $cat_index === 0 ? ' selected' : '' ?>>\n                <?= htmlspecialchars($category['label']) ?> (<?= (int) $category['count'] ?>)\n              <\/option>\n            <?php endforeach; ?>\n          <\/select>\n          <svg class=\"icon certificates-v3__filter-select-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n            <use href=\"#icon-chevron-down\"><\/use>\n          <\/svg>\n        <\/label>\n\n        <nav class=\"certificates-v3__filters stack\" aria-label=\"Категории документов\">\n          <?php foreach ($categories as $cat_index => $category): ?>\n            <?php $is_active = $cat_index === 0; ?>\n            <button\n              type=\"button\"\n              class=\"certificates-v3__filter bodytext-strong<?= $is_active ? ' is-active' : '' ?>\"\n              aria-pressed=\"<?= $is_active ? 'true' : 'false' ?>\"\n              data-certificates-v3-filter=\"<?= htmlspecialchars($category['key']) ?>\"\n            >\n              <span class=\"certificates-v3__filter-count bodytext-strong\"><?= (int) $category['count'] ?><\/span>\n              <span class=\"certificates-v3__filter-main\">\n                <span class=\"certificates-v3__filter-label\"><?= htmlspecialchars($category['label']) ?><\/span>\n                <svg class=\"icon certificates-v3__filter-chevron\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/button>\n          <?php endforeach; ?>\n        <\/nav>\n\n        <?php if ($has_cta): ?><div class=\"certificates-v3__cta stack stack--lg\">\n          <?php if ($has_cta_copy): ?><div class=\"certificates-v3__cta-head<?= $has_cta_icon ? '' : ' certificates-v3__cta-head--no-icon' ?>\">\n            <?php if ($has_cta_icon): ?>\n              <span class=\"certificates-v3__cta-icon\" aria-hidden=\"true\">\n                <?php if ($cta_icon_src !== ''): ?>\n                  <img\n                    class=\"certificates-v3__cta-icon-img\"\n                    src=\"<?= htmlspecialchars($cta_icon_src) ?>\"\n                    alt=\"\"\n                    width=\"34\"\n                    height=\"34\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <?php else: ?>\n                  <svg class=\"icon certificates-v3__cta-icon-svg\" width=\"34\" height=\"34\" aria-hidden=\"true\">\n                    <use href=\"#<?= htmlspecialchars($cta_icon_sprite) ?>\"><\/use>\n                  <\/svg>\n                <?php endif; ?>\n              <\/span>\n            <?php endif; ?>\n            <div class=\"certificates-v3__cta-copy stack stack--sm\">\n              <?php if ($has_text($cta_title)): ?><p class=\"certificates-v3__cta-title leadtext\"><?= htmlspecialchars($cta_title) ?><\/p><?php endif; ?>\n              <?php if ($has_text($cta_text)): ?><p class=\"certificates-v3__cta-text bodytext-strong\"><?= htmlspecialchars($cta_text) ?><\/p><?php endif; ?>\n            <\/div>\n          <\/div><?php endif; ?>\n          <?php if ($has_cta_button): ?><a class=\"certificates-v3__cta-btn btn btn--primary uibtntext\" href=\"<?= htmlspecialchars($cta_btn_url) ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n            <?= htmlspecialchars($cta_btn_label) ?>\n          <\/a><?php endif; ?>\n        <\/div><?php endif; ?>\n      <\/aside>\n\n      <div class=\"certificates-v3__main stack stack--xl\">\n        <label class=\"certificates-v3__search field\">\n          <input\n            class=\"field__input certificates-v3__search-input bodytext\"\n            type=\"search\"\n            name=\"certificates-v3-search\"\n            aria-label=\"<?= htmlspecialchars($search_placeholder) ?>\"\n            placeholder=\"<?= htmlspecialchars($search_placeholder) ?>\"\n            autocomplete=\"off\"\n            data-certificates-v3-search\n          >\n          <span class=\"certificates-v3__search-icon\" aria-hidden=\"true\">\n            <img src=\"<?= htmlspecialchars($search_icon_src) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n          <\/span>\n        <\/label>\n\n        <ul class=\"certificates-v3__list\">\n          <?php foreach ($items as $index => $item): ?>\n            <?php\n              $hidden = $index >= $initial_limit;\n              $item_file = trim((string) ($item['file'] ?? ''));\n              $has_file = $item_file !== '';\n              $item_image = trim((string) ($item['image'] ?? ''));\n              $has_image = $item_image !== '';\n              $search_blob = mb_strtolower(implode(' ', [\n                  $item['title'] ?? '',\n                  $item['number'] ?? '',\n                  $item['issued'] ?? '',\n                  $item['issuer'] ?? '',\n              ]));\n            ?>\n            <li\n              class=\"certificates-v3__item<?= $hidden ? ' is-collapsed' : '' ?>\"\n              data-certificates-v3-item\n              data-certificates-v3-category=\"<?= htmlspecialchars($item['category']) ?>\"\n              data-certificates-v3-search-item=\"<?= htmlspecialchars($search_blob) ?>\"\n              <?= $hidden ? 'hidden' : '' ?>\n            >\n              <article class=\"certificates-v3__card\">\n                <div class=\"certificates-v3__card-main\">\n                  <?php if ($has_image): ?>\n                    <div class=\"certificates-v3__preview\">\n                      <img\n                        class=\"certificates-v3__preview-img\"\n                        src=\"<?= htmlspecialchars($item_image) ?>\"\n                        alt=\"\"\n                        width=\"126\"\n                        height=\"178\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/div>\n                  <?php endif; ?>\n\n                  <div class=\"certificates-v3__card-copy stack stack--md\">\n                    <div class=\"certificates-v3__card-head stack stack--md\">\n                      <p class=\"certificates-v3__card-title bodytext-strong\"><?= htmlspecialchars($item['title']) ?><\/p>\n                      <p class=\"certificates-v3__card-number bodytext-strong\"><?= htmlspecialchars($item['number']) ?><\/p>\n                    <\/div>\n                    <p class=\"certificates-v3__card-meta bodytext-strong\">\n                      Выдана: <?= htmlspecialchars($item['issued']) ?><br>\n                      <?= htmlspecialchars($item['issuer']) ?>\n                    <\/p>\n                  <\/div>\n                <\/div>\n\n                <?php if ($has_image || $has_file): ?>\n                <div class=\"certificates-v3__card-actions stack stack--lg\">\n                  <?php if ($has_image): ?>\n                    <button\n                      type=\"button\"\n                      class=\"certificates-v3__action bodytext-strong\"\n                      data-popup-open=\"media\"\n                      data-popup-src=\"<?= htmlspecialchars($item_image) ?>\"\n                      data-popup-kind=\"image\"\n                      data-popup-alt=\"<?= htmlspecialchars($item['title']) ?>\"\n                    >\n                      <span><?= htmlspecialchars($view_label) ?><\/span>\n                      <svg class=\"icon certificates-v3__action-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"#icon-eye\"><\/use>\n                      <\/svg>\n                    <\/button>\n                  <?php endif; ?>\n                  <?php if ($has_file): ?>\n                    <a\n                      class=\"certificates-v3__action bodytext-strong\"\n                      href=\"<?= htmlspecialchars($item_file) ?>\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      download\n                    >\n                      <span><?= htmlspecialchars($download_label) ?><\/span>\n                      <svg class=\"icon certificates-v3__action-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"#icon-download\"><\/use>\n                      <\/svg>\n                    <\/a>\n                  <?php endif; ?>\n                <\/div>\n                <?php endif; ?>\n              <\/article>\n            <\/li>\n          <?php endforeach; ?>\n        <\/ul>\n\n        <button\n          type=\"button\"\n          class=\"certificates-v3__more btn btn--secondary bodytext-sm\"\n          data-certificates-v3-more\n          hidden\n        >\n          <?= htmlspecialchars($more_label) ?>\n        <\/button>\n      <\/div>\n    <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "vacancies-variant-3": "<?php\n  $list_title = trim((string) $list_title);\n  $list_title_id = ltrim(trim((string) ($list_title_id ?? '')), '#');\n  if ($list_title_id === '') {\n    $list_title_id = \\app\\generator\\AnchorId::fromTitle($list_title);\n  }\n  $apply_cta = trim((string) $apply_cta);\n?>\n<section class=\"vacancies-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"<?= htmlspecialchars($section_id) ?>\">\n  <div class=\"container\">\n    <div class=\"vacancies-v3__inner stack stack--xl\">\n      <?php if ($list_title !== ''): ?>\n        <<?= $heading_level ?>\n          class=\"vacancies-v3__title megatext-sm\"\n          <?php if ($list_title_id !== ''): ?>id=\"<?= htmlspecialchars($list_title_id) ?>\" tabindex=\"-1\"<?php endif; ?>\n        ><?= htmlspecialchars($list_title) ?><\/<?= $heading_level ?>>\n      <?php endif; ?>\n\n      <div class=\"vacancies-v3__list\" data-vacancies-v3-list>\n        <?php foreach ($vacancies as $index => $vacancy): ?>\n          <?php\n            $vacancy_title = trim((string) ($vacancy['title'] ?? ''));\n            if ($vacancy_title === '') {\n              continue;\n            }\n            $excerpt = trim((string) ($vacancy['excerpt'] ?? ''));\n            $salary = trim((string) ($vacancy['salary'] ?? ''));\n            $employment = trim((string) ($vacancy['employment'] ?? ''));\n            $details = [];\n            $panel_columns = [];\n            foreach (($vacancy['details'] ?? []) as $block) {\n              if (is_string($block)) {\n                $text = trim($block);\n                if ($text !== '') {\n                  $details[] = $text;\n                }\n                continue;\n              }\n              if (!is_array($block)) {\n                continue;\n              }\n              $kind = (string) ($block['kind'] ?? 'p');\n              $block_title = trim((string) ($block['title'] ?? ''));\n              if ($kind === 'columns') {\n                foreach (($block['columns'] ?? []) as $column) {\n                  if (!is_array($column)) {\n                    continue;\n                  }\n                  $column_title = trim((string) ($column['title'] ?? ''));\n                  $column_items = [];\n                  foreach (($column['items'] ?? []) as $li) {\n                    $li = trim((string) $li);\n                    if ($li !== '') {\n                      $column_items[] = $li;\n                    }\n                  }\n                  if ($column_title === '' && $column_items === []) {\n                    continue;\n                  }\n                  $panel_columns[] = ['title' => $column_title, 'items' => $column_items];\n                }\n                continue;\n              }\n              if ($kind === 'ul' || $kind === 'ol') {\n                $items = [];\n                foreach (($block['items'] ?? []) as $li) {\n                  $li = trim((string) $li);\n                  if ($li !== '') {\n                    $items[] = $li;\n                  }\n                }\n                if ($block_title === '' && $items === []) {\n                  continue;\n                }\n                $details[] = ['kind' => $kind, 'title' => $block_title, 'items' => $items];\n                continue;\n              }\n              $text = trim((string) ($block['text'] ?? ''));\n              if ($block_title === '' && $text === '') {\n                continue;\n              }\n              $details[] = ['kind' => $kind, 'title' => $block_title, 'text' => $text];\n            }\n            $city = trim((string) ($vacancy['city'] ?? ''));\n            $address = trim((string) ($vacancy['address'] ?? ''));\n            $has_location = $city !== '' || $address !== '';\n            $has_apply = $apply_cta !== '';\n            $has_panel_foot = $panel_columns !== [] || $has_location || $has_apply;\n            $has_details = $details !== [] || $has_panel_foot;\n            $has_meta = $salary !== '' || $employment !== '';\n            $item_id = 'vacancies-v3-item-' . ($index + 1);\n            $panel_id = 'vacancies-v3-panel-' . ($index + 1);\n          ?>\n          <div class=\"vacancies-v3__item\">\n            <button\n              type=\"button\"\n              class=\"vacancies-v3__trigger\"\n              id=\"<?= htmlspecialchars($item_id) ?>\"\n              aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              aria-expanded=\"false\"\n              <?= $has_details ? '' : 'disabled' ?>\n              data-vacancies-v3-trigger\n            >\n              <span class=\"vacancies-v3__main\">\n                <span class=\"vacancies-v3__copy stack stack--sm\">\n                  <span class=\"vacancies-v3__role bodytext-lg\"><?= htmlspecialchars($vacancy_title) ?><\/span>\n                  <?php if ($excerpt !== ''): ?>\n                    <span class=\"vacancies-v3__excerpt bodytext\"><?= htmlspecialchars($excerpt) ?><\/span>\n                  <?php endif; ?>\n                <\/span>\n\n                <?php if ($has_meta): ?>\n                  <span class=\"vacancies-v3__meta stack\">\n                    <?php if ($salary !== ''): ?>\n                      <span class=\"vacancies-v3__salary bodytext-lg\"><?= htmlspecialchars($salary) ?><\/span>\n                    <?php endif; ?>\n                    <?php if ($employment !== ''): ?>\n                      <span class=\"vacancies-v3__employment bodytext-md\"><?= htmlspecialchars($employment) ?><\/span>\n                    <?php endif; ?>\n                  <\/span>\n                <?php endif; ?>\n              <\/span>\n\n              <?php if ($has_details): ?>\n                <span class=\"vacancies-v3__action\" aria-hidden=\"true\">\n                  <svg class=\"icon vacancies-v3__action-icon\" width=\"31\" height=\"32\" aria-hidden=\"true\">\n                    <use href=\"#icon-faq-arrow\"><\/use>\n                  <\/svg>\n                <\/span>\n              <?php endif; ?>\n            <\/button>\n\n            <?php if ($has_details): ?>\n              <div\n                class=\"vacancies-v3__panel\"\n                id=\"<?= htmlspecialchars($panel_id) ?>\"\n                role=\"region\"\n                aria-labelledby=\"<?= htmlspecialchars($item_id) ?>\"\n                hidden\n              >\n                <div class=\"vacancies-v3__panel-inner\">\n                  <?php foreach ($details as $block): ?>\n                    <?php if (is_string($block)): ?>\n                      <p class=\"vacancies-v3__panel-text bodytext-md\"><?= nl2br(htmlspecialchars($block), false) ?><\/p>\n                      <?php continue; ?>\n                    <?php endif; ?>\n\n                    <?php\n                      $kind = (string) ($block['kind'] ?? 'p');\n                      $block_title = (string) ($block['title'] ?? '');\n                    ?>\n\n                    <?php if ($block_title !== ''): ?>\n                      <p class=\"vacancies-v3__panel-title bodytext-md\"><?= htmlspecialchars($block_title) ?><\/p>\n                    <?php endif; ?>\n\n                    <?php if ($kind === 'ul' && !empty($block['items'])): ?>\n                      <ul class=\"vacancies-v3__panel-list bodytext-md\">\n                        <?php foreach ($block['items'] as $li): ?>\n                          <li class=\"vacancies-v3__panel-li\"><?= htmlspecialchars((string) $li) ?><\/li>\n                        <?php endforeach; ?>\n                      <\/ul>\n                    <?php elseif ($kind === 'ol' && !empty($block['items'])): ?>\n                      <ol class=\"vacancies-v3__panel-list vacancies-v3__panel-list--ol bodytext-md\">\n                        <?php foreach ($block['items'] as $li): ?>\n                          <li class=\"vacancies-v3__panel-li\"><?= htmlspecialchars((string) $li) ?><\/li>\n                        <?php endforeach; ?>\n                      <\/ol>\n                    <?php elseif ($kind === 'note' && trim((string) ($block['text'] ?? '')) !== ''): ?>\n                      <p class=\"vacancies-v3__panel-note bodytext-md\"><?= htmlspecialchars((string) $block['text']) ?><\/p>\n                    <?php elseif (trim((string) ($block['text'] ?? '')) !== ''): ?>\n                      <p class=\"vacancies-v3__panel-text bodytext-md\"><?= nl2br(htmlspecialchars((string) $block['text']), false) ?><\/p>\n                    <?php endif; ?>\n                  <?php endforeach; ?>\n\n                  <?php if ($has_panel_foot): ?>\n                    <div class=\"vacancies-v3__panel-foot\">\n                      <?php if ($panel_columns !== []): ?>\n                        <div class=\"vacancies-v3__panel-cols\">\n                          <?php foreach ($panel_columns as $column): ?>\n                            <div class=\"vacancies-v3__panel-col\">\n                              <?php if ($column['title'] !== ''): ?>\n                                <p class=\"vacancies-v3__panel-col-title bodytext-md\"><?= htmlspecialchars($column['title']) ?><\/p>\n                              <?php endif; ?>\n                              <?php if ($column['items'] !== []): ?>\n                                <ul class=\"vacancies-v3__panel-col-list\">\n                                  <?php foreach ($column['items'] as $li): ?>\n                                    <li class=\"vacancies-v3__panel-col-item bodytext-md\">\n                                      <span class=\"vacancies-v3__panel-col-dot\" aria-hidden=\"true\"><\/span>\n                                      <span class=\"vacancies-v3__panel-col-text\"><?= htmlspecialchars((string) $li) ?><\/span>\n                                    <\/li>\n                                  <?php endforeach; ?>\n                                <\/ul>\n                              <?php endif; ?>\n                            <\/div>\n                          <?php endforeach; ?>\n                        <\/div>\n                      <?php endif; ?>\n\n                      <?php if ($has_location || $has_apply): ?>\n                        <div class=\"vacancies-v3__panel-aside\">\n                          <?php if ($has_location): ?>\n                            <div class=\"vacancies-v3__panel-location\">\n                              <?php if ($city !== ''): ?>\n                                <p class=\"vacancies-v3__panel-city bodytext-md\"><?= htmlspecialchars($city) ?><\/p>\n                              <?php endif; ?>\n                              <?php if ($address !== ''): ?>\n                                <p class=\"vacancies-v3__panel-address bodytext-md\"><?= htmlspecialchars($address) ?><\/p>\n                              <?php endif; ?>\n                            <\/div>\n                          <?php endif; ?>\n                          <?php if ($has_apply): ?>\n                            <button\n                              type=\"button\"\n                              class=\"btn btn--primary uibtntext vacancies-v3__apply\"\n                              data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('resume')) ?>\"\n                              data-remote=\"1\"\n                            >\n                              <?= htmlspecialchars($apply_cta) ?>\n                            <\/button>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endif; ?>\n                    <\/div>\n                  <?php endif; ?>\n                <\/div>\n              <\/div>\n            <?php endif; ?>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cta-variant-5": "<?php\n  $bg_image = trim((string) $bg_image);\n  $has_bg_image = $bg_image !== '';\n?>\n<section class=\"cta-v5 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y\" style=\"--cta-v5-clip-src: url('<?= htmlspecialchars($clip_icon_src) ?>')\">\n  <div class=\"container\">\n    <div class=\"cta-v5__card\">\n      <?php if ($has_bg_image): ?>\n        <div class=\"cta-v5__bg\" aria-hidden=\"true\">\n          <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"\" width=\"1640\" height=\"492\" loading=\"lazy\" decoding=\"async\">\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"cta-v5__inner\">\n        <div class=\"cta-v5__copy stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cta-v5__eyebrow') ?>\n          <<?= $heading_level ?> class=\"cta-v5__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <p class=\"cta-v5__lead leadtext\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n\n        <form class=\"cta-v5__form popup-form--consent-gated\" action=\"#\" method=\"post\" enctype=\"multipart\/form-data\">\n          <div class=\"cta-v5__fields\">\n            <label class=\"cta-v5__field\">\n              <input class=\"cta-v5__input field__input\" type=\"text\" name=\"name\" aria-label=\"Имя\" placeholder=\"<?= htmlspecialchars($form_name_label) ?>\" autocomplete=\"name\" required>\n            <\/label>\n            <label class=\"cta-v5__field\">\n              <input class=\"cta-v5__input field__input\" type=\"tel\" name=\"phone\" aria-label=\"Телефон\" placeholder=\"<?= htmlspecialchars($form_phone_label) ?>\" autocomplete=\"tel\" required>\n            <\/label>\n            <label class=\"cta-v5__field\">\n              <input class=\"cta-v5__input field__input\" type=\"email\" name=\"email\" aria-label=\"Электронная почта\" placeholder=\"<?= htmlspecialchars($form_email_label) ?>\" autocomplete=\"email\" required>\n            <\/label>\n            <label class=\"cta-v5__file\">\n              <input class=\"cta-v5__file-input\" type=\"file\" name=\"resume\" accept=\"<?= htmlspecialchars($form_file_accept) ?>\">\n              <span class=\"cta-v5__file-face field__input\">\n                <span class=\"cta-v5__file-icon\" aria-hidden=\"true\"><\/span>\n                <span class=\"cta-v5__file-text\" data-cta-v5-file-label><?= htmlspecialchars($form_file_label) ?><\/span>\n              <\/span>\n            <\/label>\n          <\/div>\n\n          <div class=\"cta-v5__foot\">\n            <label class=\"cta-v5__consent popup-form__consent bodytext\">\n              <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n              <span class=\"popup-form__consent-text\"><?= $consent_html ?><\/span>\n            <\/label>\n            <button type=\"submit\" class=\"cta-v5__submit popup-form__submit btn btn--primary uibtntext\">\n              <?= htmlspecialchars($form_submit_label) ?>\n            <\/button>\n          <\/div>\n        <\/form>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cases-variant-4": "<?php\n  $has_eyebrow = trim((string) $eyebrow) !== '';\n  $has_title = trim(strip_tags((string) $title)) !== '';\n  $more_page = 9;\n  $has_more = count($cases) > $more_page;\n  $section_class = 'cases-v4 ' . \\app\\generator\\SectionBg::classString($section_bg) . ' section-space-y-lg';\n?>\n<section\n  class=\"<?= htmlspecialchars($section_class) ?>\"\n  data-cases-v4-page=\"<?= $more_page ?>\"\n>\n  <div class=\"container\">\n    <div class=\"cases-v4__inner stack stack--xl\">\n      <?php if ($has_eyebrow || $has_title): ?>\n        <div class=\"cases-v4__head stack stack--md\">\n          <?php if ($has_eyebrow): ?>\n            <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cases-v4__eyebrow') ?>\n          <?php endif; ?>\n          <?php if ($has_title): ?>\n            <<?= $heading_level ?> class=\"cases-v4__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <?php endif; ?>\n        <\/div>\n      <?php endif; ?>\n\n      <div class=\"cases-v4__body stack stack--md\">\n        <div class=\"cases-v4__filters\" role=\"group\" aria-label=\"Фильтр кейсов\">\n          <?php foreach ($filters as $filter): ?>\n            <?php\n              $is_active = ($filter['key'] ?? '') === 'all';\n              $filter_icon = trim((string) ($filter['icon'] ?? ''));\n              $has_filter_icon = $filter_icon !== '';\n              $chip_class = 'cases-v4__chip';\n              if ($is_active) $chip_class .= ' is-active';\n              if (!$has_filter_icon) $chip_class .= ' cases-v4__chip--no-icon';\n            ?>\n            <button\n              type=\"button\"\n              class=\"<?= htmlspecialchars($chip_class) ?>\"\n              data-cases-v4-filter=\"<?= htmlspecialchars($filter['key']) ?>\"\n              aria-pressed=\"<?= $is_active ? 'true' : 'false' ?>\"\n            >\n              <?php if ($has_filter_icon): ?>\n                <img\n                  class=\"cases-v4__chip-icon\"\n                  src=\"<?= htmlspecialchars($filter_icon) ?>\"\n                  alt=\"\"\n                  width=\"24\"\n                  height=\"24\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <?php endif; ?>\n              <span class=\"cases-v4__chip-label bodytext-strong\"><?= htmlspecialchars($filter['label']) ?><\/span>\n            <\/button>\n          <?php endforeach; ?>\n        <\/div>\n\n        <div class=\"cases-v4__grid\" role=\"list\">\n          <?php foreach ($cases as $case_index => $case): ?>\n            <article\n              class=\"cases-v4__item\"\n              role=\"listitem\"\n              data-case-category=\"<?= htmlspecialchars($case['category']) ?>\"\n              <?php if ($case_index >= $more_page): ?>hidden<?php endif; ?>\n            >\n              <div class=\"cases-v4__card\">\n                <div class=\"cases-v4__media\">\n                  <img class=\"cases-v4__img cases-v4__img--after\" src=\"<?= htmlspecialchars($case['after_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\">\n                  <img class=\"cases-v4__img cases-v4__img--before\" src=\"<?= htmlspecialchars($case['before_image']) ?>\" alt=\"\" loading=\"lazy\" decoding=\"async\" aria-hidden=\"true\">\n                  <span class=\"cases-v4__divider\" aria-hidden=\"true\"><\/span>\n                  <span class=\"cases-v4__badge cases-v4__badge--before titletext-sm\">До<\/span>\n                  <span class=\"cases-v4__badge cases-v4__badge--after titletext-sm\">После<\/span>\n                  <button\n                    type=\"button\"\n                    class=\"cases-v4__handle\"\n                    aria-label=\"Сравнить до\/после\"\n                    aria-valuemin=\"0\"\n                    aria-valuemax=\"100\"\n                    aria-valuenow=\"50\"\n                  >\n                    <img src=\"<?= htmlspecialchars($handle_src) ?>\" alt=\"\" width=\"86\" height=\"86\" loading=\"lazy\" decoding=\"async\">\n                  <\/button>\n                <\/div>\n\n                <div class=\"cases-v4__card-body stack stack--sm\">\n                  <p class=\"cases-v4__card-title megatext-md\"><?= htmlspecialchars($case['title']) ?><\/p>\n                  <p class=\"cases-v4__card-text bodytext-lg-regular\"><?= htmlspecialchars($case['text']) ?><\/p>\n                <\/div>\n              <\/div>\n            <\/article>\n          <?php endforeach; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"cases-v4__more-row\">\n        <button\n          type=\"button\"\n          class=\"cases-v4__more btn btn--secondary uibtntext\"\n          data-cases-v4-more\n          <?php if (!$has_more): ?>hidden<?php endif; ?>\n        >\n          <?= htmlspecialchars($more_label) ?>\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "cta-variant-2": "<?php\n  $bg_image = trim((string) $bg_image);\n  $bg_image_mobile = trim((string) $bg_image_mobile);\n  $has_bg_image = $bg_image !== '' || $bg_image_mobile !== '';\n  $bg_image_fallback = $bg_image !== '' ? $bg_image : $bg_image_mobile;\n  $cta_v2_section_classes = ['cta-v2'];\n  if ($layout === 'fullwidth') {\n      $cta_v2_section_classes[] = 'cta-v2--fullwidth';\n      if ($has_bg_image) {\n          $cta_v2_section_classes[] = 'has-block-bg';\n      }\n  } else {\n      $cta_v2_section_classes[] = 'section-space-y';\n      $cta_v2_section_classes = array_merge($cta_v2_section_classes, \\app\\generator\\SectionBg::classes($section_bg));\n  }\n?>\n<section class=\"<?= htmlspecialchars(implode(' ', $cta_v2_section_classes)) ?>\">\n  <?php if ($layout === 'fullwidth'): ?>\n    <?php if ($has_bg_image): ?>\n      <div class=\"cta-v2__bg block-bg\" aria-hidden=\"true\">\n        <picture>\n          <?php if ($bg_image_mobile !== '' && $bg_image !== ''): ?>\n            <source media=\"(max-width: 768px)\" srcset=\"<?= htmlspecialchars($bg_image_mobile) ?>\">\n          <?php endif; ?>\n          <img src=\"<?= htmlspecialchars($bg_image_fallback) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" loading=\"lazy\" decoding=\"async\">\n        <\/picture>\n      <\/div>\n    <?php endif; ?>\n\n    <div class=\"container\">\n      <div class=\"cta-v2__inner\">\n  <?php else: ?>\n  <div class=\"container\">\n    <div class=\"cta-v2__card\">\n      <div class=\"cta-v2__inner\">\n  <?php endif; ?>\n        <div class=\"cta-v2__intro stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'cta-v2__eyebrow') ?>\n          <<?= $heading_level ?> class=\"cta-v2__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <p class=\"cta-v2__lead leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n\n        <?php if (is_array($features) && $features): ?>\n        <ul class=\"cta-v2__features\">\n          <?php foreach ($features as $feature): ?>\n            <?php\n            $feature_icon = trim((string) ($feature['icon'] ?? ''));\n            $has_feature_icon = $feature_icon !== '';\n            ?>\n            <li class=\"cta-v2__feature<?= $has_feature_icon ? '' : ' cta-v2__feature--no-icon' ?>\">\n              <?php if ($has_feature_icon): ?>\n                <span class=\"cta-v2__feature-icon\" aria-hidden=\"true\">\n                  <img src=\"<?= htmlspecialchars($feature_icon) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n                <\/span>\n              <?php endif; ?>\n              <span class=\"cta-v2__feature-text bodytext-lg\"><?= htmlspecialchars($feature['text']) ?><\/span>\n            <\/li>\n          <?php endforeach; ?>\n        <\/ul>\n        <?php endif; ?>\n\n        <form class=\"cta-v2__form popup-form--consent-gated\" action=\"<?=$form_data['action']?>\" method=\"post\" <?=$form_data['attr']?>>\n          <div class=\"cta-v2__form-grid\">\n            <label class=\"cta-v2__field\">\n              <select class=\"cta-v2__input cta-v2__select field__input\" name=\"<?=$form_data['fields']['concern']['name']?>\" aria-label=\"<?= htmlspecialchars($form_concern_label) ?>\">\n                <option value=\"\"<?=$form_data['fields']['concern']['value']===''?' selected':''?> disabled><?= htmlspecialchars($form_concern_label) ?><\/option>\n                <?php foreach ($concerns as $label => $value): ?>\n                  <option value=\"<?= htmlspecialchars($value) ?>\"<?=$value==$form_data['fields']['concern']['value']?' selected':''?>><?= htmlspecialchars($label) ?><\/option>\n                <?php endforeach; ?>\n              <\/select>\n              <span class=\"cta-v2__select-icon\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                  <use href=\"#icon-chevron-down\"><\/use>\n                <\/svg>\n              <\/span>\n            <\/label>\n\n            <label class=\"cta-v2__field\">\n              <input class=\"cta-v2__input field__input\" type=\"text\" name=\"<?=$form_data['fields']['name']['name']?>\" value=\"<?=$form_data['fields']['name']['value']?>\" aria-label=\"Имя\" placeholder=\"<?= htmlspecialchars($form_name_label) ?>\" autocomplete=\"name\" required>\n            <\/label>\n\n            <label class=\"cta-v2__field\">\n              <input class=\"cta-v2__input field__input\" type=\"tel\" name=\"<?=$form_data['fields']['phone']['name']?>\" value=\"<?=$form_data['fields']['phone']['value']?>\" aria-label=\"Телефон\" placeholder=\"<?= htmlspecialchars($form_phone_label) ?>\" autocomplete=\"tel\" required>\n            <\/label>\n\n            <button type=\"submit\" class=\"cta-v2__submit popup-form__submit btn btn--primary uibtntext\">\n              <?= htmlspecialchars($form_submit_label) ?>\n            <\/button>\n          <\/div>\n\n          <label class=\"cta-v2__consent popup-form__consent bodytext-sm\">\n            <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n            <span class=\"popup-form__consent-text\"><?= $consent_html ?><\/span>\n          <\/label>\n        <\/form>\n      <\/div>\n      <?php if ($layout !== 'fullwidth' && $has_bg_image): ?>\n      <div class=\"cta-v2__bg\" aria-hidden=\"true\">\n        <picture>\n          <?php if ($bg_image_mobile !== '' && $bg_image !== ''): ?>\n            <source media=\"(max-width: 768px)\" srcset=\"<?= htmlspecialchars($bg_image_mobile) ?>\">\n          <?php endif; ?>\n          <img src=\"<?= htmlspecialchars($bg_image_fallback) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" width=\"1640\" height=\"695\" loading=\"lazy\" decoding=\"async\">\n        <\/picture>\n      <\/div>\n      <?php endif; ?>\n  <?php if ($layout === 'fullwidth'): ?>\n    <\/div>\n  <?php else: ?>\n    <\/div>\n  <\/div>\n  <?php endif; ?>\n<\/section>",
            "news-article-variant-1": "<section class=\"news-article-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-bottom\" id=\"news-article\">\n  <div class=\"container\">\n    <div class=\"news-article-v1__layout\">\n      <div class=\"news-article-v1__main\">\n        <nav class=\"news-article-v1__toc stack stack--md\" aria-label=\"<?= htmlspecialchars($toc_title) ?>\">\n          <p class=\"news-article-v1__toc-title bodytext-lg\"><?= htmlspecialchars($toc_title) ?><\/p>\n          <ol class=\"news-article-v1__toc-list\">\n            <?php foreach ($toc as $i => $item): ?>\n              <li class=\"news-article-v1__toc-item\">\n                <a class=\"news-article-v1__toc-link\" href=\"#<?= htmlspecialchars($item['id']) ?>\">\n                  <span class=\"news-article-v1__toc-num bodytext\"><?= htmlspecialchars(str_pad((string) ($i + 1), 2, '0', STR_PAD_LEFT)) ?><\/span>\n                  <span class=\"news-article-v1__toc-label bodytext-lg\"><?= htmlspecialchars($item['label']) ?><\/span>\n                <\/a>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ol>\n        <\/nav>\n\n        <div class=\"news-article-v1__content\">\n          <?php foreach ($blocks as $block): ?>\n            <?php\n              $type = $block['type'] ?? '';\n              $bid  = $block['id'] ?? '';\n              $btitle = $block['title'] ?? '';\n            ?>\n\n            <?php if ($type === 'text'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--text stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <div class=\"news-article-v1__prose stack stack--lg\">\n                  <?php foreach ($block['paragraphs'] as $p): ?>\n                    <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($p) ?><\/p>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/article>\n\n            <?php elseif ($type === 'text-cols'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--cols stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <div class=\"news-article-v1__cols\">\n                  <?php foreach ($block['columns'] as $col): ?>\n                    <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($col) ?><\/p>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/article>\n\n            <?php elseif ($type === 'media-text'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--media stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <div class=\"news-article-v1__media-row\">\n                  <figure class=\"news-article-v1__figure\">\n                    <div class=\"news-article-v1__figure-frame\">\n                      <img class=\"news-article-v1__figure-img\" src=\"<?= htmlspecialchars($block['image']) ?>\" alt=\"\" width=\"526\" height=\"347\" loading=\"lazy\" decoding=\"async\">\n                    <\/div>\n                    <?php if (!empty($block['caption'])): ?>\n                      <figcaption class=\"news-article-v1__caption bodytext\"><?= htmlspecialchars($block['caption']) ?><\/figcaption>\n                    <?php endif; ?>\n                  <\/figure>\n                  <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($block['text']) ?><\/p>\n                <\/div>\n              <\/article>\n\n            <?php elseif ($type === 'lists'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--lists stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <div class=\"news-article-v1__prose stack stack--lg\">\n                  <?php if (!empty($block['intro'])): ?>\n                    <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($block['intro']) ?><\/p>\n                  <?php endif; ?>\n                  <div class=\"news-article-v1__list-cards\">\n                    <?php foreach ($block['cards'] as $card): ?>\n                      <?php $tone = $card['tone'] === 'danger' ? 'danger' : 'ok'; ?>\n                      <div class=\"news-article-v1__list-card news-article-v1__list-card--<?= htmlspecialchars($tone) ?>\">\n                        <div class=\"news-article-v1__list-card-head\">\n                          <?php if (trim((string)($card['icon'] ?? '')) !== ''): ?>\n                            <span class=\"news-article-v1__list-card-icon\" aria-hidden=\"true\">\n                              <img src=\"<?= htmlspecialchars($card['icon']) ?>\" alt=\"\" width=\"36\" height=\"36\" loading=\"lazy\" decoding=\"async\">\n                            <\/span>\n                          <?php endif; ?>\n                          <p class=\"news-article-v1__list-card-title bodytext-lg\"><?= htmlspecialchars($card['title']) ?><\/p>\n                        <\/div>\n                        <div class=\"wysiwyg news-article-v1__list-card-wysiwyg\">\n                          <ul>\n                            <?php foreach ($card['items'] as $li): ?>\n                              <li class=\"bodytext-md\"><?= htmlspecialchars($li) ?><\/li>\n                            <?php endforeach; ?>\n                          <\/ul>\n                        <\/div>\n                      <\/div>\n                    <?php endforeach; ?>\n                  <\/div>\n                  <?php if (!empty($block['outro'])): ?>\n                    <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($block['outro']) ?><\/p>\n                  <?php endif; ?>\n                <\/div>\n              <\/article>\n\n            <?php elseif ($type === 'table'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--table stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <?php if (!empty($block['intro'])): ?>\n                  <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($block['intro']) ?><\/p>\n                <?php endif; ?>\n                <div class=\"wysiwyg news-article-v1__table-wrap\">\n                  <table>\n                    <thead>\n                      <tr>\n                        <?php foreach ($block['headers'] as $h): ?>\n                          <th class=\"bodytext-lg\" scope=\"col\"><?= htmlspecialchars($h) ?><\/th>\n                        <?php endforeach; ?>\n                      <\/tr>\n                    <\/thead>\n                    <tbody>\n                      <?php foreach ($block['rows'] as $row): ?>\n                        <tr>\n                          <?php foreach ($row as $cell): ?>\n                            <td class=\"bodytext-md\"><?= htmlspecialchars($cell) ?><\/td>\n                          <?php endforeach; ?>\n                        <\/tr>\n                      <?php endforeach; ?>\n                    <\/tbody>\n                  <\/table>\n                <\/div>\n              <\/article>\n\n            <?php elseif ($type === 'quote'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--quote stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <?php if (!empty($block['intro'])): ?>\n                  <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($block['intro']) ?><\/p>\n                <?php endif; ?>\n                <blockquote class=\"news-article-v1__quote\">\n                  <?php if (trim((string)($block['photo'] ?? '')) !== ''): ?>\n                    <img class=\"news-article-v1__quote-photo\" src=\"<?= htmlspecialchars($block['photo']) ?>\" alt=\"\" width=\"185\" height=\"185\" loading=\"lazy\" decoding=\"async\">\n                  <?php endif; ?>\n                  <div class=\"news-article-v1__quote-body\">\n                    <svg class=\"icon news-article-v1__quote-mark\" width=\"44\" height=\"44\" aria-hidden=\"true\">\n                      <use href=\"#icon-quote\"><\/use>\n                    <\/svg>\n                    <div class=\"news-article-v1__quote-main stack stack--sm\">\n                      <p class=\"news-article-v1__quote-text bodytext-md\"><?= htmlspecialchars($block['text']) ?><\/p>\n                      <footer class=\"news-article-v1__quote-foot\">\n                        <cite class=\"news-article-v1__quote-author bodytext-md\"><?= htmlspecialchars($block['author']) ?><\/cite>\n                        <span class=\"news-article-v1__quote-role bodytext-md\"><?= htmlspecialchars($block['role']) ?><\/span>\n                      <\/footer>\n                    <\/div>\n                  <\/div>\n                <\/blockquote>\n              <\/article>\n\n            <?php elseif ($type === 'steps'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--steps stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <?php if (!empty($block['intro'])): ?>\n                  <p class=\"news-article-v1__p bodytext-md\"><?= htmlspecialchars($block['intro']) ?><\/p>\n                <?php endif; ?>\n                <ol class=\"news-article-v1__steps\">\n                  <?php foreach ($block['items'] as $step): ?>\n                    <li class=\"news-article-v1__step\">\n                      <span class=\"news-article-v1__step-badge bodytext\"><?= htmlspecialchars($step['label']) ?><\/span>\n                      <div class=\"news-article-v1__step-body stack stack--sm\">\n                        <p class=\"news-article-v1__step-title bodytext-lg\"><?= htmlspecialchars($step['title']) ?><\/p>\n                        <p class=\"news-article-v1__step-text bodytext-md\"><?= htmlspecialchars($step['text']) ?><\/p>\n                      <\/div>\n                    <\/li>\n                  <?php endforeach; ?>\n                <\/ol>\n              <\/article>\n\n            <?php elseif ($type === 'features'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--features stack stack--lg\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <?php if (!empty($block['intro'])): ?>\n                  <p class=\"news-article-v1__p bodytext-md\"><?= nl2br(htmlspecialchars($block['intro'])) ?><\/p>\n                <?php endif; ?>\n                <ul class=\"news-article-v1__features\">\n                  <?php foreach ($block['items'] as $feat): ?>\n                    <li class=\"news-article-v1__feature\">\n                      <?php if (trim((string)($feat['icon'] ?? '')) !== ''): ?>\n                        <span class=\"news-article-v1__feature-icon\" aria-hidden=\"true\">\n                          <img src=\"<?= htmlspecialchars($feat['icon']) ?>\" alt=\"\" width=\"62\" height=\"62\" loading=\"lazy\" decoding=\"async\">\n                        <\/span>\n                      <?php endif; ?>\n                      <div class=\"news-article-v1__feature-body stack stack--sm\">\n                        <p class=\"news-article-v1__feature-title bodytext-lg\"><?= htmlspecialchars($feat['title']) ?><\/p>\n                        <p class=\"news-article-v1__feature-text bodytext-md\"><?= htmlspecialchars($feat['text']) ?><\/p>\n                      <\/div>\n                    <\/li>\n                  <?php endforeach; ?>\n                <\/ul>\n              <\/article>\n\n            <?php elseif ($type === 'warning'): ?>\n              <div class=\"news-article-v1__warning\">\n                <?php if (trim((string)($block['icon'] ?? '')) !== ''): ?>\n                  <span class=\"news-article-v1__warning-icon\" aria-hidden=\"true\">\n                    <img src=\"<?= htmlspecialchars($block['icon']) ?>\" alt=\"\" width=\"34\" height=\"34\" loading=\"lazy\" decoding=\"async\">\n                  <\/span>\n                <?php endif; ?>\n                <div class=\"news-article-v1__warning-body stack stack--sm\">\n                  <p class=\"news-article-v1__warning-title leadtext\"><?= htmlspecialchars($btitle) ?><\/p>\n                  <p class=\"news-article-v1__warning-text bodytext-md\"><?= htmlspecialchars($block['text']) ?><\/p>\n                <\/div>\n              <\/div>\n\n            <?php elseif ($type === 'facts'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--facts stack stack--md\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <div class=\"news-article-v1__facts-wrap stack stack--lg\">\n                  <?php if (!empty($block['intro'])): ?>\n                    <p class=\"news-article-v1__p bodytext-md\"><?= nl2br(htmlspecialchars($block['intro'])) ?><\/p>\n                  <?php endif; ?>\n                  <ul class=\"news-article-v1__facts\">\n                    <?php foreach ($block['items'] as $fact): ?>\n                      <li class=\"news-article-v1__fact\">\n                        <p class=\"news-article-v1__fact-value leadtext-xl\"><?= htmlspecialchars($fact['value']) ?><\/p>\n                        <p class=\"news-article-v1__fact-text bodytext-md\"><?= htmlspecialchars($fact['text']) ?><\/p>\n                      <\/li>\n                    <?php endforeach; ?>\n                  <\/ul>\n                <\/div>\n              <\/article>\n\n            <?php elseif ($type === 'form'): ?>\n              <?php\n                $form_icon_src = trim((string)($block['icon'] ?? '')) !== ''\n                  ? $block['icon']\n                  : '\/assets\/src\/img\/news-article\/icon-form.svg';\n              ?>\n              <div class=\"news-article-v1__form-card\">\n                <img class=\"news-article-v1__form-bg\" src=\"\/assets\/src\/img\/news-article\/form-bg.png\" alt=\"\" width=\"1024\" height=\"512\" loading=\"lazy\" decoding=\"async\" aria-hidden=\"true\">\n                <div class=\"news-article-v1__form-icon\" aria-hidden=\"true\">\n                  <img\n                    class=\"news-article-v1__form-icon-img\"\n                    src=\"<?= htmlspecialchars($form_icon_src) ?>\"\n                    alt=\"\"\n                    width=\"47\"\n                    height=\"40\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                <\/div>\n                <div class=\"news-article-v1__form-main\">\n                  <div class=\"news-article-v1__form-copy\">\n                    <p class=\"news-article-v1__form-eyebrow megatext-sm\"><?= htmlspecialchars($block['eyebrow']) ?><\/p>\n                    <p class=\"news-article-v1__form-title leadtext-xl\"><?= htmlspecialchars($btitle) ?><\/p>\n                  <\/div>\n                  <form class=\"news-article-v1__form popup-form--consent-gated\" action=\"#\" method=\"post\">\n                    <div class=\"news-article-v1__form-row\">\n                      <label class=\"news-article-v1__field\">\n                        <span class=\"visually-hidden\"><?= htmlspecialchars($block['name_label']) ?><\/span>\n                        <input class=\"news-article-v1__input field__input\" type=\"text\" name=\"name\" placeholder=\"<?= htmlspecialchars($block['name_label']) ?>\" autocomplete=\"name\" required>\n                      <\/label>\n                      <label class=\"news-article-v1__field\">\n                        <span class=\"visually-hidden\"><?= htmlspecialchars($block['phone_label']) ?><\/span>\n                        <input class=\"news-article-v1__input field__input\" type=\"tel\" name=\"phone\" placeholder=\"<?= htmlspecialchars($block['phone_label']) ?>\" autocomplete=\"tel\" required>\n                      <\/label>\n                      <button type=\"submit\" class=\"btn btn--primary news-article-v1__form-submit popup-form__submit\"><?= htmlspecialchars($block['submit_label']) ?><\/button>\n                    <\/div>\n                    <label class=\"news-article-v1__consent popup-form__consent bodytext\">\n                      <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n                      <span class=\"popup-form__consent-text\"><?= $block['consent_html'] ?><\/span>\n                    <\/label>\n                  <\/form>\n                <\/div>\n              <\/div>\n\n            <?php elseif ($type === 'related'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--related stack stack--md\"<?= $bid !== '' ? ' id=\"' . htmlspecialchars($bid) . '\"' : '' ?>>\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <ul class=\"news-article-v1__related\">\n                  <?php foreach ($block['items'] as $rel): ?>\n                    <li>\n                      <a class=\"news-article-v1__related-card\" href=\"<?= htmlspecialchars($rel['url']) ?>\">\n                        <?php if (trim((string)($rel['icon'] ?? '')) !== ''): ?>\n                          <span class=\"news-article-v1__related-icon\" aria-hidden=\"true\">\n                            <img src=\"<?= htmlspecialchars($rel['icon']) ?>\" alt=\"\" width=\"38\" height=\"38\" loading=\"lazy\" decoding=\"async\">\n                          <\/span>\n                        <?php endif; ?>\n                        <span class=\"news-article-v1__related-body\">\n                          <span class=\"news-article-v1__related-title bodytext-lg\"><?= htmlspecialchars($rel['title']) ?><\/span>\n                          <span class=\"news-article-v1__related-link bodytext-strong\">\n                            <?= htmlspecialchars($block['link_label']) ?>\n                            <svg class=\"icon news-article-v1__related-chevron\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                              <use href=\"#icon-chevron-down\"><\/use>\n                            <\/svg>\n                          <\/span>\n                        <\/span>\n                      <\/a>\n                    <\/li>\n                  <?php endforeach; ?>\n                <\/ul>\n              <\/article>\n\n            <?php elseif ($type === 'video'): ?>\n              <div class=\"news-article-v1__video\">\n                <img class=\"news-article-v1__video-bg\" src=\"<?= htmlspecialchars($block['image']) ?>\" alt=\"\" width=\"1080\" height=\"249\" loading=\"lazy\" decoding=\"async\">\n                <div class=\"news-article-v1__video-content\">\n                  <div class=\"news-article-v1__video-copy stack stack--sm\">\n                    <p class=\"news-article-v1__video-title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/p>\n                    <p class=\"news-article-v1__video-lead leadtext\"><?= htmlspecialchars($block['lead']) ?><\/p>\n                  <\/div>\n                  <?php if (trim((string)($block['cta'] ?? '')) !== ''): ?>\n                    <button\n                      type=\"button\"\n                      class=\"news-article-v1__video-cta\"\n                      data-popup-open=\"media\"\n                      data-popup-kind=\"video\"\n                      data-popup-src=\"<?= htmlspecialchars($block['src']) ?>\"\n                    >\n                      <span class=\"news-article-v1__video-play news-article-v1__play-surface\" aria-hidden=\"true\">\n                        <span class=\"news-article-v1__play-bg\"><\/span>\n                        <svg class=\"icon news-article-v1__play-icon\" width=\"9\" height=\"10\" viewBox=\"0 0 9 10\" aria-hidden=\"true\">\n                          <use href=\"#icon-play\"><\/use>\n                        <\/svg>\n                      <\/span>\n                      <span class=\"news-article-v1__video-cta-label bodytext-md\"><?= htmlspecialchars($block['cta']) ?><\/span>\n                    <\/button>\n                  <?php endif; ?>\n                <\/div>\n              <\/div>\n\n            <?php elseif ($type === 'gallery'): ?>\n              <article class=\"news-article-v1__block news-article-v1__block--gallery stack stack--lg\">\n                <div class=\"news-article-v1__heading\">\n                  <<?= $heading_level ?> class=\"news-article-v1__title megatext-sm\"><?= htmlspecialchars($btitle) ?><\/<?= $heading_level ?>>\n                  <span class=\"news-article-v1__rule\" aria-hidden=\"true\"><\/span>\n                <\/div>\n                <div class=\"news-article-v1__gallery-foot slider-foot\">\n                  <div class=\"news-article-v1__gallery swiper\">\n                    <div class=\"swiper-wrapper\">\n                      <?php foreach ($block['items'] as $slide): ?>\n                        <div class=\"swiper-slide\">\n                          <button\n                            type=\"button\"\n                            class=\"news-article-v1__gallery-open\"\n                            data-popup-open=\"media\"\n                            data-popup-kind=\"image\"\n                            data-popup-src=\"<?= htmlspecialchars($slide['src']) ?>\"\n                            data-popup-alt=\"<?= htmlspecialchars($slide['alt'] ?? '') ?>\"\n                            aria-label=\"<?= htmlspecialchars(($slide['alt'] ?? '') !== '' ? $slide['alt'] : 'Открыть фото') ?>\"\n                          >\n                            <span class=\"news-article-v1__gallery-slide\">\n                              <img\n                                class=\"news-article-v1__gallery-img\"\n                                src=\"<?= htmlspecialchars($slide['src']) ?>\"\n                                alt=\"<?= htmlspecialchars($slide['alt'] ?? '') ?>\"\n                                width=\"500\"\n                                height=\"330\"\n                                loading=\"lazy\"\n                                decoding=\"async\"\n                              >\n                            <\/span>\n                          <\/button>\n                        <\/div>\n                      <?php endforeach; ?>\n                    <\/div>\n                  <\/div>\n                  <div class=\"news-article-v1__gallery-controls slider-controls slider-nav--glass\">\n                    <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev news-article-v1__gallery-prev\" aria-label=\"Назад\">\n                      <svg class=\"icon\" width=\"17\" height=\"11\" aria-hidden=\"true\"><use href=\"#icon-slider-arrow\"><\/use><\/svg>\n                    <\/button>\n                    <div class=\"slider-pagination-host\">\n                      <div class=\"news-article-v1__gallery-pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n                    <\/div>\n                    <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next news-article-v1__gallery-next\" aria-label=\"Вперёд\">\n                      <svg class=\"icon\" width=\"17\" height=\"11\" aria-hidden=\"true\"><use href=\"#icon-slider-arrow\"><\/use><\/svg>\n                    <\/button>\n                  <\/div>\n                <\/div>\n              <\/article>\n            <?php endif; ?>\n          <?php endforeach; ?>\n        <\/div>\n\n        <nav class=\"news-article-v1__pager\" aria-label=\"Навигация по статьям\">\n          <a class=\"news-article-v1__pager-link news-article-v1__pager-link--prev slider-nav--glass\" href=\"<?= htmlspecialchars($nav['prev']['url']) ?>\">\n            <span class=\"news-article-v1__pager-img\" aria-hidden=\"true\">\n              <?php if (trim((string)($nav['prev']['image'] ?? '')) !== ''): ?>\n                <img src=\"<?= htmlspecialchars($nav['prev']['image']) ?>\" alt=\"\" width=\"114\" height=\"114\" loading=\"lazy\" decoding=\"async\">\n              <?php endif; ?>\n            <\/span>\n            <span class=\"news-article-v1__pager-arrow slider-nav__btn\" aria-hidden=\"true\">\n              <svg class=\"icon\" width=\"17\" height=\"11\" aria-hidden=\"true\"><use href=\"#icon-slider-arrow\"><\/use><\/svg>\n            <\/span>\n            <span class=\"news-article-v1__pager-copy\">\n              <span class=\"news-article-v1__pager-label bodytext\"><?= htmlspecialchars($nav['prev']['label']) ?><\/span>\n              <span class=\"news-article-v1__pager-title bodytext-lg\"><?= htmlspecialchars($nav['prev']['title']) ?><\/span>\n            <\/span>\n          <\/a>\n          <a class=\"news-article-v1__pager-link news-article-v1__pager-link--next slider-nav--glass\" href=\"<?= htmlspecialchars($nav['next']['url']) ?>\">\n            <span class=\"news-article-v1__pager-copy\">\n              <span class=\"news-article-v1__pager-label bodytext\"><?= htmlspecialchars($nav['next']['label']) ?><\/span>\n              <span class=\"news-article-v1__pager-title bodytext-lg\"><?= htmlspecialchars($nav['next']['title']) ?><\/span>\n            <\/span>\n            <span class=\"news-article-v1__pager-arrow slider-nav__btn\" aria-hidden=\"true\">\n              <svg class=\"icon\" width=\"17\" height=\"11\" aria-hidden=\"true\"><use href=\"#icon-slider-arrow\"><\/use><\/svg>\n            <\/span>\n            <span class=\"news-article-v1__pager-img\" aria-hidden=\"true\">\n              <?php if (trim((string)($nav['next']['image'] ?? '')) !== ''): ?>\n                <img src=\"<?= htmlspecialchars($nav['next']['image']) ?>\" alt=\"\" width=\"114\" height=\"114\" loading=\"lazy\" decoding=\"async\">\n              <?php endif; ?>\n            <\/span>\n          <\/a>\n        <\/nav>\n      <\/div>\n\n      <aside class=\"news-article-v1__aside\">\n        <div class=\"news-article-v1__doctor\">\n          <div class=\"news-article-v1__doctor-top\">\n            <img\n              class=\"news-article-v1__doctor-photo\"\n              src=\"<?= htmlspecialchars($doctor['photo']) ?>\"\n              alt=\"\"\n              width=\"160\"\n              height=\"160\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n            <div class=\"news-article-v1__doctor-meta stack stack--sm\">\n              <p class=\"news-article-v1__doctor-name bodytext-lg\"><?= htmlspecialchars($doctor['name']) ?><\/p>\n              <p class=\"news-article-v1__doctor-role bodytext-md\"><?= htmlspecialchars($doctor['role']) ?><\/p>\n              <p class=\"news-article-v1__doctor-exp bodytext-md\"><?= htmlspecialchars($doctor['experience']) ?><\/p>\n            <\/div>\n          <\/div>\n          <?php\n            $has_schedule_label = trim((string)($doctor['schedule_label'] ?? '')) !== '';\n            $has_schedule = trim((string)($doctor['schedule'] ?? '')) !== '';\n            $has_doctor_hours = $has_schedule_label || $has_schedule;\n          ?>\n          <?php if ($has_doctor_hours): ?>\n            <div class=\"news-article-v1__doctor-schedule\">\n              <span class=\"news-article-v1__doctor-cal\" aria-hidden=\"true\">\n                <svg class=\"icon\" width=\"24\" height=\"24\" aria-hidden=\"true\"><use href=\"#icon-calendar\"><\/use><\/svg>\n              <\/span>\n              <p class=\"news-article-v1__doctor-hours bodytext-md\">\n                <?php if ($has_schedule_label): ?>\n                  <?= htmlspecialchars($doctor['schedule_label']) ?>\n                <?php endif; ?>\n                <?php if ($has_schedule_label && $has_schedule): ?><br><?php endif; ?>\n                <?php if ($has_schedule): ?>\n                  <?= htmlspecialchars($doctor['schedule']) ?>\n                <?php endif; ?>\n              <\/p>\n            <\/div>\n          <?php endif; ?>\n          <button\n            type=\"button\"\n            class=\"btn btn--primary news-article-v1__doctor-cta\"\n            data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('doctor-cta')) ?>\"\n            data-remote=\"1\"\n          >\n            <?= htmlspecialchars($doctor['cta_label']) ?>\n          <\/button>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "contacts-variant-1": "<?php if (is_array($branches) && $branches !== []): ?>\n<?php\n  $show_branches = count($branches) > 1;\n  $branches_slider = count($branches) > 2;\n  $active_branch = $branches[0];\n  $contacts_has_phone = static function (array $branch): bool {\n      return trim((string) ($branch['phone_number'] ?? '')) !== ''\n        || trim((string) ($branch['phone_href'] ?? '')) !== '';\n  };\n  $contacts_has_route = static function (array $branch): bool {\n      return trim((string) ($branch['route_url'] ?? '')) !== '';\n  };\n  $contacts_has_coords = static function (array $branch): bool {\n      $placemark = $branch['map']['placemark'] ?? null;\n      return is_array($placemark)\n        && count($placemark) >= 2\n        && is_numeric($placemark[0])\n        && is_numeric($placemark[1]);\n  };\n  $active_map_photo = trim((string) ($active_branch['map']['photo'] ?? ''));\n  $active_map_text = trim((string) ($active_branch['map']['entrance_text'] ?? ''));\n  $active_has_map_card = $active_map_photo !== '' || $active_map_text !== '';\n  $branches_title = trim((string) $branches_title);\n  $address_eyebrow = trim((string) $address_eyebrow);\n  $phone_eyebrow = trim((string) $phone_eyebrow);\n  $hours_eyebrow = trim((string) $hours_eyebrow);\n  $address_icon = trim((string) $address_icon);\n  $phone_icon = trim((string) $phone_icon);\n  $hours_icon = trim((string) $hours_icon);\n  $route_label = trim((string) $route_label);\n  $callback_label = trim((string) $callback_label);\n  $branch_call_label = trim((string) $branch_call_label);\n  $branch_route_label = trim((string) $branch_route_label);\n  $contacts_text_lines = static function ($lines): array {\n      $out = [];\n      if (!is_array($lines)) {\n          return $out;\n      }\n      foreach ($lines as $line) {\n          $line = trim((string) $line);\n          if ($line !== '') {\n              $out[] = $line;\n          }\n      }\n      return $out;\n  };\n  $contacts_hours_rows = static function ($rows): array {\n      $out = [];\n      if (!is_array($rows)) {\n          return $out;\n      }\n      foreach ($rows as $row) {\n          if (!is_array($row)) {\n              continue;\n          }\n          $label = trim((string) ($row['label'] ?? ''));\n          $value = trim((string) ($row['value'] ?? ''));\n          if ($label === '' && $value === '') {\n              continue;\n          }\n          $out[] = ['label' => $label, 'value' => $value];\n      }\n      return $out;\n  };\n  $branches_json = json_encode(\n      array_map(static function (array $branch): array {\n          return ['title' => $branch['title'] ?? '', 'map' => $branch['map'] ?? []];\n      }, $branches),\n      JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP\n  );\n\nif (!function_exists('contacts_v1_render_directions')) {\nfunction contacts_v1_render_directions(array $directions): string\n{\n    $text = static function ($value): string {\n        return trim((string) $value);\n    };\n\n    $direction_icon_html = static function (string $icon): string {\n        $icon = trim($icon);\n        if ($icon === '') {\n            return '';\n        }\n\n        return '<span class=\"contacts-v1__direction-icon\" aria-hidden=\"true\"><svg class=\"icon contacts-v1__direction-icon-image\" width=\"23\" height=\"23\"><use href=\"' . htmlspecialchars($icon) . '\"><\/use><\/svg><\/span>';\n    };\n\n    $html = '';\n\n    $transport = is_array($directions['transport'] ?? null) ? $directions['transport'] : [];\n    $transport_title = $text($transport['title'] ?? '');\n    $transport_summary = $text($transport['summary'] ?? '');\n    $transport_routes = [];\n    if (!empty($transport['routes']) && is_array($transport['routes'])) {\n        foreach ($transport['routes'] as $route) {\n            $label = $text($route['label'] ?? '');\n            $value = $text($route['value'] ?? '');\n            if ($label === '' && $value === '') {\n                continue;\n            }\n            $transport_routes[] = ['label' => $label, 'value' => $value];\n        }\n    }\n    if ($transport_title !== '' || $transport_summary !== '' || $transport_routes !== []) {\n        $icon = array_key_exists('icon', $transport) ? $text($transport['icon']) : '#icon-contacts-address';\n        $html .= '<article class=\"contacts-v1__direction-card contacts-v1__direction-card--transport\">';\n        $html .= $direction_icon_html($icon);\n        $html .= '<div class=\"contacts-v1__direction-body\">';\n        if ($transport_title !== '' || $transport_summary !== '') {\n            $html .= '<div class=\"contacts-v1__direction-copy\">';\n            if ($transport_title !== '') {\n                $html .= '<p class=\"contacts-v1__direction-title bodytext-lg\">' . htmlspecialchars($transport_title) . '<\/p>';\n            }\n            if ($transport_summary !== '') {\n                $html .= '<p class=\"contacts-v1__direction-summary bodytext-md\">' . htmlspecialchars($transport_summary) . '<\/p>';\n            }\n            $html .= '<\/div>';\n        }\n        if ($transport_routes !== []) {\n            $html .= '<ul class=\"contacts-v1__direction-routes\">';\n            foreach ($transport_routes as $route) {\n                $html .= '<li class=\"contacts-v1__direction-route\">';\n                if ($route['label'] !== '') {\n                    $html .= '<span class=\"contacts-v1__direction-route-label bodytext-md\">' . htmlspecialchars($route['label']) . '<\/span>';\n                }\n                if ($route['value'] !== '') {\n                    $html .= '<span class=\"contacts-v1__direction-route-value bodytext-md\">' . htmlspecialchars($route['value']) . '<\/span>';\n                }\n                $html .= '<\/li>';\n            }\n            $html .= '<\/ul>';\n        }\n        $html .= '<\/div><\/article>';\n    }\n\n    foreach (['car' => '#icon-contacts-call', 'accessibility' => '#icon-contacts-hours'] as $key => $default_icon) {\n        $card = is_array($directions[$key] ?? null) ? $directions[$key] : [];\n        $title = $text($card['title'] ?? '');\n        $items = [];\n        if (!empty($card['items']) && is_array($card['items'])) {\n            foreach ($card['items'] as $item) {\n                $item_text = $text($item);\n                if ($item_text === '') {\n                    continue;\n                }\n                $items[] = $item_text;\n            }\n        }\n        if ($title === '' && $items === []) {\n            continue;\n        }\n        $icon = array_key_exists('icon', $card) ? $text($card['icon']) : $default_icon;\n        $html .= '<article class=\"contacts-v1__direction-card contacts-v1__direction-card--' . htmlspecialchars($key) . '\">';\n        $html .= $direction_icon_html($icon);\n        $html .= '<div class=\"contacts-v1__direction-body\">';\n        if ($title !== '') {\n            $html .= '<p class=\"contacts-v1__direction-title bodytext-lg\">' . htmlspecialchars($title) . '<\/p>';\n        }\n        if ($items !== []) {\n            $html .= '<ul class=\"contacts-v1__direction-list\">';\n            foreach ($items as $item) {\n                $html .= '<li class=\"contacts-v1__direction-item bodytext-md\">';\n                $html .= '<span class=\"contacts-v1__direction-check\" aria-hidden=\"true\">';\n                $html .= '<svg class=\"icon contacts-v1__direction-check-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\"><use href=\"#icon-contacts-check\"><\/use><\/svg>';\n                $html .= '<\/span>';\n                $html .= '<span class=\"contacts-v1__direction-item-text\">' . htmlspecialchars($item) . '<\/span>';\n                $html .= '<\/li>';\n            }\n            $html .= '<\/ul>';\n        }\n        $html .= '<\/div><\/article>';\n    }\n\n    return $html;\n}\n}\n\n  $directions_heading = trim((string) $directions_title);\n?>\n<section\n  class=\"contacts-v1<?= $show_branches ? ' contacts-v1--has-branches' : '' ?><?= $branches_slider ? ' contacts-v1--branches-slider' : '' ?>\"\n  data-contacts-v1-count=\"<?= count($branches) ?>\"\n  data-contacts-v1-map-height=\"<?= (int)$map_height ?>\"\n  data-contacts-v1-map-zoom=\"<?= (int)$map_zoom ?>\"\n  data-contacts-v1-map-focus-zoom=\"<?= (int)($map_zoom + $map_focus_zoom_offset) ?>\"\n  data-contacts-v1-map-api-key=\"<?= htmlspecialchars($map_api_key) ?>\"\n  data-contacts-v1-site-logo=\"<?= htmlspecialchars($site_logo_src) ?>\"\n>\n  <?php if ($show_branches): ?>\n    <div class=\"contacts-v1__branches\">\n      <div class=\"contacts-v1__branches-inner\">\n        <div class=\"contacts-v1__branches-head\">\n          <?php if ($branches_title !== ''): ?>\n            <div class=\"titles\">\n              <<?= $heading_level ?> class=\"contacts-v1__branches-title megatext\"><?= htmlspecialchars($branches_title) ?><\/<?= $heading_level ?>>\n            <\/div>\n          <?php endif; ?>\n\n          <?php if ($branches_slider): ?>\n            <div class=\"contacts-v1__branches-nav slider-nav slider-nav--brand\">\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--prev\" aria-label=\"Предыдущий филиал\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M9 2L4 7L9 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n              <button type=\"button\" class=\"slider-nav__btn slider-nav__btn--next\" aria-label=\"Следующий филиал\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                  <path d=\"M5 2L10 7L5 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n                <\/svg>\n              <\/button>\n            <\/div>\n          <?php endif; ?>\n        <\/div>\n\n        <?php if ($branches_slider): ?>\n          <div class=\"contacts-v1__branches-slider swiper\">\n            <div class=\"swiper-wrapper\" role=\"group\" aria-label=\"<?= htmlspecialchars($branches_title) ?>\">\n        <?php else: ?>\n          <div class=\"contacts-v1__branches-grid\" role=\"group\" aria-label=\"<?= htmlspecialchars($branches_title) ?>\">\n        <?php endif; ?>\n\n        <?php foreach ($branches as $index => $branch): ?>\n          <?php\n            $is_active = $index === 0;\n            $status_tone = $branch['status']['tone'] ?? 'open';\n            $branch_title = trim((string) ($branch['title'] ?? ''));\n            $branch_address = trim((string) ($branch['address_short'] ?? ''));\n            $status_text = trim((string) ($branch['status']['text'] ?? ''));\n            $branch_accessible_name = $branch_title !== '' ? $branch_title : 'Филиал ' . ($index + 1);\n            if ($branch_address !== '') $branch_accessible_name .= ', ' . $branch_address;\n          ?>\n          <?php if ($branches_slider): ?><div class=\"swiper-slide\"><?php endif; ?>\n\n          <div\n            class=\"contacts-v1__branch<?= $is_active ? ' is-active' : '' ?>\"\n            data-contacts-v1-branch=\"<?= (int)$index ?>\"\n          >\n            <button\n              type=\"button\"\n              class=\"contacts-v1__branch-select\"\n              id=\"contacts-v1-branch-<?= (int)$index ?>\"\n              aria-label=\"Показать филиал: <?= htmlspecialchars($branch_accessible_name) ?>\"\n              aria-controls=\"contacts-v1-panel\"\n              aria-pressed=\"<?= $is_active ? 'true' : 'false' ?>\"\n              data-contacts-v1-branch-select\n            ><\/button>\n            <?php if (trim((string) ($branch['badge'] ?? '')) !== ''): ?>\n            <span class=\"contacts-v1__branch-badge bodytext-md\"><?= htmlspecialchars($branch['badge']) ?><\/span>\n            <?php endif; ?>\n\n            <span class=\"contacts-v1__branch-main\">\n              <span class=\"contacts-v1__branch-copy stack stack--md\">\n                <?php if ($branch_title !== '' || $branch_address !== ''): ?>\n                  <span class=\"contacts-v1__branch-heading stack stack--sm\">\n                    <?php if ($branch_title !== ''): ?>\n                      <span class=\"contacts-v1__branch-title bodytext-lg\"><?= htmlspecialchars($branch_title) ?><\/span>\n                    <?php endif; ?>\n                    <?php if ($branch_address !== ''): ?>\n                      <span class=\"contacts-v1__branch-address bodytext-md\"><?= htmlspecialchars($branch_address) ?><\/span>\n                    <?php endif; ?>\n                  <\/span>\n                <?php endif; ?>\n\n                <?php if ($status_text !== ''): ?>\n                  <span class=\"contacts-v1__branch-status contacts-v1__branch-status--<?= htmlspecialchars($status_tone) ?>\">\n                    <span class=\"contacts-v1__branch-status-dot\" aria-hidden=\"true\"><\/span>\n                    <span class=\"contacts-v1__branch-status-text bodytext\"><?= htmlspecialchars($status_text) ?><\/span>\n                  <\/span>\n                <?php endif; ?>\n              <\/span>\n\n              <?php\n                $has_branch_phone = $contacts_has_phone($branch);\n                $has_branch_coords = $contacts_has_coords($branch);\n              ?>\n              <?php if ($has_branch_phone || $has_branch_coords): ?>\n              <span class=\"contacts-v1__branch-actions\">\n                <?php if ($has_branch_phone): ?>\n                <a\n                  class=\"contacts-v1__branch-action\"\n                  href=\"<?= htmlspecialchars($branch['phone_href']) ?>\"\n                >\n                  <svg class=\"icon contacts-v1__branch-action-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-contacts-call\"><\/use>\n                  <\/svg>\n                  <?php if ($branch_call_label !== ''): ?>\n                    <span class=\"contacts-v1__branch-action-label bodytext\"><?= htmlspecialchars($branch_call_label) ?><\/span>\n                  <?php endif; ?>\n                <\/a>\n                <?php endif; ?>\n\n                <?php if ($has_branch_coords): ?>\n                <a\n                  class=\"contacts-v1__branch-action\"\n                  href=\"<?= htmlspecialchars($branch['route_url']) ?>\"\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                >\n                  <svg class=\"icon contacts-v1__branch-action-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-contacts-route\"><\/use>\n                  <\/svg>\n                  <?php if ($branch_route_label !== ''): ?>\n                    <span class=\"contacts-v1__branch-action-label bodytext\"><?= htmlspecialchars($branch_route_label) ?><\/span>\n                  <?php endif; ?>\n                <\/a>\n                <?php endif; ?>\n              <\/span>\n              <?php endif; ?>\n            <\/span>\n          <\/div>\n\n          <?php if ($branches_slider): ?><\/div><?php endif; ?>\n        <?php endforeach; ?>\n\n        <?php if ($branches_slider): ?>\n            <\/div>\n          <\/div>\n\n          <div class=\"contacts-v1__branches-foot slider-foot\">\n            <div class=\"slider-pagination-host\">\n              <div class=\"contacts-v1__branches-pagination slider-pagination--dots swiper-pagination\"><\/div>\n            <\/div>\n          <\/div>\n        <?php else: ?>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n    <\/div>\n  <?php endif; ?>\n\n  <script type=\"application\/json\" class=\"contacts-v1__data\"><?= $branches_json ?><\/script>\n\n  <div\n    class=\"contacts-v1__panel is-active\"\n    id=\"contacts-v1-panel\"\n    role=\"region\"\n    aria-labelledby=\"<?= $show_branches ? 'contacts-v1-branch-0' : '' ?>\"\n    data-contacts-v1-panel\n  >\n    <div class=\"contacts-v1__inner\">\n      <?php foreach ($branches as $info_index => $active_branch): ?>\n      <?php\n        $active_address_lines = $contacts_text_lines($active_branch['address_lines'] ?? []);\n        $active_hours_rows = $contacts_hours_rows($active_branch['hours_rows'] ?? []);\n        $active_phone_number = trim((string) ($active_branch['phone_number'] ?? ''));\n        $active_phone_href = trim((string) ($active_branch['phone_href'] ?? ''));\n        $active_phone_note = trim((string) ($active_branch['phone_note'] ?? ''));\n        $active_whatsapp_url = trim((string) ($active_branch['whatsapp_url'] ?? ''));\n        $active_telegram_url = trim((string) ($active_branch['telegram_url'] ?? ''));\n        $has_route_action = $contacts_has_route($active_branch) && $route_label !== '';\n        $has_address_card = $active_address_lines !== [] || $has_route_action;\n        $has_phone_card = $active_phone_number !== ''\n          || $active_phone_note !== ''\n          || $active_whatsapp_url !== ''\n          || $active_telegram_url !== ''\n          || $callback_label !== '';\n        $has_hours_card = $active_hours_rows !== [];\n        $has_cards = $has_address_card || $has_phone_card || $has_hours_card;\n      ?>\n      <div class=\"contacts-v1__info-panel\" data-contacts-v1-info-index=\"<?= (int) $info_index ?>\"<?php if ($info_index !== 0): ?> hidden<?php endif; ?>>\n      <ul class=\"contacts-v1__cards\" data-contacts-v1-cards<?php if (!$has_cards): ?> hidden<?php endif; ?>>\n        <li class=\"contacts-v1__cards-item\" data-contacts-v1-card=\"address\"<?php if (!$has_address_card): ?> hidden<?php endif; ?>>\n          <article class=\"contacts-v1__card\">\n            <?php if ($address_icon !== ''): ?>\n            <span class=\"contacts-v1__icon\" aria-hidden=\"true\">\n              <svg class=\"icon contacts-v1__icon-image\" width=\"23\" height=\"23\" aria-hidden=\"true\">\n                <use href=\"<?= htmlspecialchars($address_icon) ?>\"><\/use>\n              <\/svg>\n            <\/span>\n            <?php endif; ?>\n\n            <div class=\"contacts-v1__body\">\n              <div class=\"contacts-v1__content stack stack--sm\">\n                <?php if ($address_eyebrow !== ''): ?>\n                  <p class=\"contacts-v1__label bodytext-sm\"><?= htmlspecialchars($address_eyebrow) ?><\/p>\n                <?php endif; ?>\n\n                <div class=\"contacts-v1__text-group\" data-contacts-v1-address-lines<?php if ($active_address_lines === []): ?> hidden<?php endif; ?>>\n                  <?php foreach ($active_address_lines as $line): ?>\n                    <p class=\"contacts-v1__text bodytext-lg-regular\"><?= htmlspecialchars($line) ?><\/p>\n                  <?php endforeach; ?>\n                <\/div>\n              <\/div>\n\n              <?php if ($route_label !== ''): ?>\n              <a\n                class=\"contacts-v1__action link-arrow bodytext-md\"\n                href=\"<?= htmlspecialchars($active_branch['route_url'] ?? '') ?>\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                data-contacts-v1-route\n                <?php if (!$has_route_action): ?>hidden<?php endif; ?>\n              >\n                <?= htmlspecialchars($route_label) ?>\n                <svg class=\"icon contacts-v1__action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n              <\/a>\n              <?php endif; ?>\n            <\/div>\n          <\/article>\n        <\/li>\n\n        <li class=\"contacts-v1__cards-item\" data-contacts-v1-card=\"phone\"<?php if (!$has_phone_card): ?> hidden<?php endif; ?>>\n          <article class=\"contacts-v1__card\">\n            <?php if ($phone_icon !== ''): ?>\n            <span class=\"contacts-v1__icon\" aria-hidden=\"true\">\n              <svg class=\"icon contacts-v1__icon-image\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                <use href=\"<?= htmlspecialchars($phone_icon) ?>\"><\/use>\n              <\/svg>\n            <\/span>\n            <?php endif; ?>\n\n            <div class=\"contacts-v1__body\">\n              <div class=\"contacts-v1__content stack stack--sm\">\n                <?php if ($phone_eyebrow !== ''): ?>\n                  <p class=\"contacts-v1__label bodytext-sm\"><?= htmlspecialchars($phone_eyebrow) ?><\/p>\n                <?php endif; ?>\n\n                <div class=\"contacts-v1__phone-block\">\n                  <div class=\"contacts-v1__text-group\" data-contacts-v1-phone-group<?php if ($active_phone_number === '' && $active_phone_note === ''): ?> hidden<?php endif; ?>>\n                    <a\n                      class=\"contacts-v1__phone bodytext-lg\"\n                      href=\"<?= htmlspecialchars($active_phone_href) ?>\"\n                      data-contacts-v1-phone\n                      <?php if ($active_phone_number === ''): ?>hidden<?php endif; ?>\n                    ><?= htmlspecialchars($active_phone_number) ?><\/a>\n                    <p class=\"contacts-v1__text bodytext-lg-regular\" data-contacts-v1-phone-note<?php if ($active_phone_note === ''): ?> hidden<?php endif; ?>><?= htmlspecialchars($active_phone_note) ?><\/p>\n                  <\/div>\n\n                  <div class=\"contacts-v1__socials\" data-contacts-v1-socials<?php if ($active_whatsapp_url === '' && $active_telegram_url === ''): ?> hidden<?php endif; ?>>\n                    <a\n                      class=\"contacts-v1__social\"\n                      href=\"<?= htmlspecialchars($active_whatsapp_url) ?>\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      aria-label=\"WhatsApp\"\n                      data-contacts-v1-whatsapp\n                      <?php if ($active_whatsapp_url === ''): ?>hidden<?php endif; ?>\n                    >\n                      <svg class=\"icon contacts-v1__social-logo\" width=\"27\" height=\"27\" aria-hidden=\"true\">\n                        <use href=\"#icon-contacts-whatsapp\"><\/use>\n                      <\/svg>\n                    <\/a>\n                    <a\n                      class=\"contacts-v1__social\"\n                      href=\"<?= htmlspecialchars($active_telegram_url) ?>\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      aria-label=\"Telegram\"\n                      data-contacts-v1-telegram\n                      <?php if ($active_telegram_url === ''): ?>hidden<?php endif; ?>\n                    >\n                      <svg class=\"icon contacts-v1__social-logo contacts-v1__social-logo--tg\" width=\"27\" height=\"27\" aria-hidden=\"true\">\n                        <use href=\"#icon-contacts-telegram\"><\/use>\n                      <\/svg>\n                    <\/a>\n                  <\/div>\n                <\/div>\n              <\/div>\n\n              <?php if ($callback_label !== ''): ?>\n              <button\n                type=\"button\"\n                class=\"contacts-v1__action link-arrow bodytext-md\"\n                data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('callback')) ?>\"\n                data-remote=\"1\"\n                data-contacts-v1-callback\n              >\n                <?= htmlspecialchars($callback_label) ?>\n                <svg class=\"icon contacts-v1__action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                  <use href=\"#icon-arrow-right\"><\/use>\n                <\/svg>\n              <\/button>\n              <?php endif; ?>\n            <\/div>\n          <\/article>\n        <\/li>\n\n        <li class=\"contacts-v1__cards-item\" data-contacts-v1-card=\"hours\"<?php if (!$has_hours_card): ?> hidden<?php endif; ?>>\n          <article class=\"contacts-v1__card\">\n            <?php if ($hours_icon !== ''): ?>\n            <span class=\"contacts-v1__icon\" aria-hidden=\"true\">\n              <svg class=\"icon contacts-v1__icon-image\" width=\"23\" height=\"23\" aria-hidden=\"true\">\n                <use href=\"<?= htmlspecialchars($hours_icon) ?>\"><\/use>\n              <\/svg>\n            <\/span>\n            <?php endif; ?>\n\n            <div class=\"contacts-v1__body\">\n              <div class=\"contacts-v1__content stack stack--sm\">\n                <?php if ($hours_eyebrow !== ''): ?>\n                  <p class=\"contacts-v1__label bodytext-sm\"><?= htmlspecialchars($hours_eyebrow) ?><\/p>\n                <?php endif; ?>\n\n                <dl class=\"contacts-v1__hours\" data-contacts-v1-hours<?php if ($active_hours_rows === []): ?> hidden<?php endif; ?>>\n                  <?php foreach ($active_hours_rows as $row): ?>\n                    <div class=\"contacts-v1__hours-row\">\n                      <?php if ($row['label'] !== ''): ?>\n                        <dt class=\"contacts-v1__hours-label bodytext-lg\"><?= htmlspecialchars($row['label']) ?><\/dt>\n                      <?php endif; ?>\n                      <?php if ($row['value'] !== ''): ?>\n                        <dd class=\"contacts-v1__hours-value bodytext-lg\"><?= htmlspecialchars($row['value']) ?><\/dd>\n                      <?php endif; ?>\n                    <\/div>\n                  <?php endforeach; ?>\n                <\/dl>\n              <\/div>\n            <\/div>\n          <\/article>\n        <\/li>\n      <\/ul>\n      <\/div>\n      <?php endforeach; ?>\n      <?php $active_branch = $branches[0]; ?>\n    <\/div>\n  <\/div>\n\n  <div class=\"contacts-v1__map\">\n    <div class=\"contacts-v1__map-stage\">\n      <div\n        class=\"contacts-v1__map-canvas\"\n        data-contacts-v1-map-canvas\n        aria-label=\"Карта проезда\"\n      ><\/div>\n\n      <aside class=\"contacts-v1__map-card\" data-contacts-v1-map-card<?php if (!$active_has_map_card): ?> hidden<?php endif; ?>>\n        <img\n          class=\"contacts-v1__map-photo\"\n          data-contacts-v1-map-photo\n          src=\"<?= htmlspecialchars($active_map_photo) ?>\"\n          alt=\"<?= htmlspecialchars($active_branch['map']['photo_alt'] ?? '') ?>\"\n          width=\"496\"\n          height=\"274\"\n          loading=\"lazy\"\n          decoding=\"async\"\n          <?php if ($active_map_photo === ''): ?>hidden<?php endif; ?>\n        >\n        <div class=\"contacts-v1__map-text-scroll\"<?php if ($active_map_text === ''): ?> hidden<?php endif; ?> data-contacts-v1-map-text-wrap>\n          <div class=\"contacts-v1__map-text-viewport\" data-contacts-v1-map-text-viewport>\n            <p class=\"contacts-v1__map-text\" data-contacts-v1-map-text><?= htmlspecialchars($active_map_text) ?><\/p>\n          <\/div>\n          <div class=\"contacts-v1__map-text-scrollbar\" aria-hidden=\"true\" data-contacts-v1-map-text-scrollbar>\n            <div class=\"contacts-v1__map-text-thumb\" data-contacts-v1-map-text-thumb><\/div>\n          <\/div>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n\n  <?php foreach ($branches as $info_index => $info_branch): ?>\n  <?php\n    $directions = $info_branch['directions'] ?? [];\n    $directions_html = contacts_v1_render_directions(is_array($directions) ? $directions : []);\n  ?>\n  <div class=\"contacts-v1__directions\" data-contacts-v1-directions-block data-contacts-v1-info-index=\"<?= (int) $info_index ?>\" data-contacts-v1-empty=\"<?= $directions_html === '' ? 'true' : 'false' ?>\"<?php if ($info_index !== 0 || $directions_html === ''): ?> hidden<?php endif; ?>>\n    <div class=\"contacts-v1__directions-inner\">\n      <?php if ($directions_heading !== ''): ?>\n        <h3 class=\"contacts-v1__directions-title leadtext-xl\"><?= htmlspecialchars($directions_heading) ?><\/h3>\n      <?php endif; ?>\n      <div class=\"contacts-v1__directions-grid\" data-contacts-v1-directions>\n        <?= $directions_html ?>\n      <\/div>\n    <\/div>\n  <\/div>\n  <?php endforeach; ?>\n<\/section>\n<?php endif; ?>",
            "contacts-variant-2": "<?php if (is_array($branches) && $branches !== []): ?>\n<?php\n  $show_branches = count($branches) > 1;\n  $deps = [];\n  $active_branch = $branches[0];\n  $contacts_has_route = static function (array $branch): bool {\n      return trim((string) ($branch['route_url'] ?? '')) !== '';\n  };\n  $contacts_has_coords = static function (array $branch): bool {\n      $placemark = $branch['map']['placemark'] ?? null;\n      return is_array($placemark)\n        && count($placemark) >= 2\n        && is_numeric($placemark[0])\n        && is_numeric($placemark[1]);\n  };\n  $active_map_photo = trim((string) ($active_branch['map']['photo'] ?? ''));\n  $active_map_text = trim((string) ($active_branch['map']['entrance_text'] ?? ''));\n  $active_has_map_card = $active_map_photo !== '' || $active_map_text !== '';\n  $branches_title = trim((string) $branches_title);\n  $address_eyebrow = trim((string) $address_eyebrow);\n  $phone_eyebrow = trim((string) $phone_eyebrow);\n  $hours_eyebrow = trim((string) $hours_eyebrow);\n  $address_icon = trim((string) $address_icon);\n  $phone_icon = trim((string) $phone_icon);\n  $hours_icon = trim((string) $hours_icon);\n  $route_label = trim((string) $route_label);\n  $callback_label = trim((string) $callback_label);\n  $map_section_title = trim((string) $map_section_title);\n  $contacts_text_lines = static function ($lines): array {\n      $out = [];\n      if (!is_array($lines)) {\n          return $out;\n      }\n      foreach ($lines as $line) {\n          $line = trim((string) $line);\n          if ($line !== '') {\n              $out[] = $line;\n          }\n      }\n      return $out;\n  };\n  $contacts_hours_rows = static function ($rows): array {\n      $out = [];\n      if (!is_array($rows)) {\n          return $out;\n      }\n      foreach ($rows as $row) {\n          if (!is_array($row)) {\n              continue;\n          }\n          $label = trim((string) ($row['label'] ?? ''));\n          $value = trim((string) ($row['value'] ?? ''));\n          if ($label === '' && $value === '') {\n              continue;\n          }\n          $out[] = ['label' => $label, 'value' => $value];\n      }\n      return $out;\n  };\n  $branches_json = json_encode(\n      array_map(static function (array $branch): array {\n          return ['title' => $branch['title'] ?? '', 'map' => $branch['map'] ?? []];\n      }, $branches),\n      JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP\n  );\n?>\n<?php\nif (!function_exists('contacts_v2_render_directions')) {\nfunction contacts_v2_render_directions(array $directions): string\n{\n    $text = static function ($value): string {\n        return trim((string) $value);\n    };\n\n    $direction_icon_html = static function (string $icon): string {\n        $icon = trim($icon);\n        if ($icon === '') {\n            return '';\n        }\n\n        return '<span class=\"contacts-v2__direction-icon\" aria-hidden=\"true\"><svg class=\"icon contacts-v2__direction-icon-image\" width=\"23\" height=\"23\"><use href=\"' . htmlspecialchars($icon) . '\"><\/use><\/svg><\/span>';\n    };\n\n    $html = '';\n\n    $transport = is_array($directions['transport'] ?? null) ? $directions['transport'] : [];\n    $transport_title = $text($transport['title'] ?? '');\n    $transport_summary = $text($transport['summary'] ?? '');\n    $transport_routes = [];\n    if (!empty($transport['routes']) && is_array($transport['routes'])) {\n        foreach ($transport['routes'] as $route) {\n            $label = $text($route['label'] ?? '');\n            $value = $text($route['value'] ?? '');\n            if ($label === '' && $value === '') {\n                continue;\n            }\n            $transport_routes[] = ['label' => $label, 'value' => $value];\n        }\n    }\n    if ($transport_title !== '' || $transport_summary !== '' || $transport_routes !== []) {\n        $icon = array_key_exists('icon', $transport) ? $text($transport['icon']) : '#icon-contacts-address';\n        $icon_html = $direction_icon_html($icon);\n        $html .= '<article class=\"contacts-v2__direction-card contacts-v2__direction-card--transport\">';\n        if ($icon_html !== '' || $transport_title !== '' || $transport_summary !== '') {\n            $html .= '<div class=\"contacts-v2__direction-head\">';\n            $html .= $icon_html;\n            if ($transport_title !== '' || $transport_summary !== '') {\n                $html .= '<div class=\"contacts-v2__direction-copy\">';\n                if ($transport_title !== '') {\n                    $html .= '<p class=\"contacts-v2__direction-title bodytext-lg\">' . htmlspecialchars($transport_title) . '<\/p>';\n                }\n                if ($transport_summary !== '') {\n                    $html .= '<p class=\"contacts-v2__direction-summary bodytext-md\">' . htmlspecialchars($transport_summary) . '<\/p>';\n                }\n                $html .= '<\/div>';\n            }\n            $html .= '<\/div>';\n        }\n        if ($transport_routes !== []) {\n            $html .= '<ul class=\"contacts-v2__direction-routes\">';\n            foreach ($transport_routes as $route) {\n                $html .= '<li class=\"contacts-v2__direction-route\">';\n                if ($route['label'] !== '') {\n                    $html .= '<span class=\"contacts-v2__direction-route-label bodytext-md\">' . htmlspecialchars($route['label']) . '<\/span>';\n                }\n                if ($route['value'] !== '') {\n                    $html .= '<span class=\"contacts-v2__direction-route-value bodytext-md\">' . htmlspecialchars($route['value']) . '<\/span>';\n                }\n                $html .= '<\/li>';\n            }\n            $html .= '<\/ul>';\n        }\n        $html .= '<\/article>';\n    }\n\n    foreach (['car' => '#icon-contacts-call', 'accessibility' => '#icon-contacts-hours'] as $key => $default_icon) {\n        $card = is_array($directions[$key] ?? null) ? $directions[$key] : [];\n        $title = $text($card['title'] ?? '');\n        $items = [];\n        if (!empty($card['items']) && is_array($card['items'])) {\n            foreach ($card['items'] as $item) {\n                $item_text = $text($item);\n                if ($item_text === '') {\n                    continue;\n                }\n                $items[] = $item_text;\n            }\n        }\n        if ($title === '' && $items === []) {\n            continue;\n        }\n        $icon = array_key_exists('icon', $card) ? $text($card['icon']) : $default_icon;\n        $icon_html = $direction_icon_html($icon);\n        $html .= '<article class=\"contacts-v2__direction-card contacts-v2__direction-card--' . htmlspecialchars($key) . '\">';\n        if ($icon_html !== '' || $title !== '') {\n            $html .= '<div class=\"contacts-v2__direction-head\">';\n            $html .= $icon_html;\n            if ($title !== '') {\n                $html .= '<p class=\"contacts-v2__direction-title bodytext-lg\">' . htmlspecialchars($title) . '<\/p>';\n            }\n            $html .= '<\/div>';\n        }\n        if ($items !== []) {\n            $html .= '<ul class=\"contacts-v2__direction-list\">';\n            foreach ($items as $item) {\n                $html .= '<li class=\"contacts-v2__direction-item bodytext-md\">';\n                $html .= '<span class=\"contacts-v2__direction-check\" aria-hidden=\"true\">';\n                $html .= '<svg class=\"icon contacts-v2__direction-check-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\"><use href=\"#icon-contacts-check\"><\/use><\/svg>';\n                $html .= '<\/span>';\n                $html .= '<span class=\"contacts-v2__direction-item-text\">' . htmlspecialchars($item) . '<\/span>';\n                $html .= '<\/li>';\n            }\n            $html .= '<\/ul>';\n        }\n        $html .= '<\/article>';\n    }\n\n    return $html;\n}\n}\n\n  $directions_heading = trim((string) $directions_title);\n?>\n<section\n  class=\"contacts-v2 section-space-y<?= $show_branches ? ' contacts-v2--has-branches' : '' ?>\"\n  data-contacts-v2-count=\"<?= count($branches) ?>\"\n  data-contacts-v2-map-height=\"<?= (int)$map_height ?>\"\n  data-contacts-v2-map-zoom=\"<?= (int)$map_zoom ?>\"\n  data-contacts-v2-map-focus-zoom=\"<?= (int)($map_zoom + $map_focus_zoom_offset) ?>\"\n  data-contacts-v2-map-api-key=\"<?= htmlspecialchars($map_api_key) ?>\"\n  data-contacts-v2-site-logo=\"<?= htmlspecialchars($site_logo_src) ?>\"\n>\n  <div class=\"container\">\n    <div class=\"contacts-v2__layout\">\n      <?php if ($show_branches): ?>\n        <aside class=\"contacts-v2__sidebar\">\n          <div class=\"contacts-v2__sidebar-head\">\n            <?php if ($branches_title !== ''): ?>\n              <<?= $heading_level ?> class=\"contacts-v2__sidebar-title leadtext-xl\"><?= htmlspecialchars($branches_title) ?><\/<?= $heading_level ?>>\n            <?php endif; ?>\n          <\/div>\n\n          <div\n            class=\"contacts-v2__sidebar-list\"\n            role=\"tablist\"\n            aria-label=\"<?= htmlspecialchars($branches_title) ?>\"\n            data-contacts-v2-sidebar-list\n          >\n            <?php foreach ($branches as $index => $branch): ?>\n              <?php\n                $is_active = $index === 0;\n                $status_tone = $branch['status']['tone'] ?? 'open';\n                $branch_title = trim((string) ($branch['title'] ?? ''));\n                $branch_address = trim((string) ($branch['address_short'] ?? ''));\n                $status_text = trim((string) ($branch['status']['text'] ?? ''));\n              ?>\n              <button\n                type=\"button\"\n                class=\"contacts-v2__branch<?= $is_active ? ' is-active' : '' ?>\"\n                role=\"tab\"\n                id=\"contacts-v2-branch-<?= (int)$index ?>\"\n                aria-controls=\"contacts-v2-panel\"\n                aria-selected=\"<?= $is_active ? 'true' : 'false' ?>\"\n                tabindex=\"<?= $is_active ? '0' : '-1' ?>\"\n                data-contacts-v2-branch=\"<?= (int)$index ?>\"\n              >\n                <?php if (trim((string) ($branch['badge'] ?? '')) !== ''): ?>\n                <span class=\"contacts-v2__branch-badge bodytext-md\"><?= htmlspecialchars($branch['badge']) ?><\/span>\n                <?php endif; ?>\n\n                <span class=\"contacts-v2__branch-copy\">\n                  <?php if ($branch_title !== '' || $branch_address !== ''): ?>\n                    <span class=\"contacts-v2__branch-heading\">\n                      <?php if ($branch_title !== ''): ?>\n                        <span class=\"contacts-v2__branch-title bodytext-lg\"><?= htmlspecialchars($branch_title) ?><\/span>\n                      <?php endif; ?>\n                      <?php if ($branch_address !== ''): ?>\n                        <span class=\"contacts-v2__branch-address bodytext-md\"><?= htmlspecialchars($branch_address) ?><\/span>\n                      <?php endif; ?>\n                    <\/span>\n                  <?php endif; ?>\n\n                  <?php if ($status_text !== ''): ?>\n                    <span class=\"contacts-v2__branch-status contacts-v2__branch-status--<?= htmlspecialchars($status_tone) ?>\">\n                      <span class=\"contacts-v2__branch-status-dot\" aria-hidden=\"true\"><\/span>\n                      <span class=\"contacts-v2__branch-status-text bodytext\"><?= htmlspecialchars($status_text) ?><\/span>\n                    <\/span>\n                  <?php endif; ?>\n                <\/span>\n              <\/button>\n            <?php endforeach; ?>\n          <\/div>\n        <\/aside>\n      <?php endif; ?>\n\n      <div class=\"contacts-v2__main\">\n        <script type=\"application\/json\" class=\"contacts-v2__data\"><?= $branches_json ?><\/script>\n\n        <div\n          class=\"contacts-v2__panel is-active\"\n          id=\"contacts-v2-panel\"\n          role=\"tabpanel\"\n          aria-labelledby=\"<?= $show_branches ? 'contacts-v2-branch-0' : '' ?>\"\n          data-contacts-v2-panel\n        >\n          <div class=\"contacts-v2__panel-inner\">\n      <?php foreach ($branches as $info_index => $active_branch): ?>\n      <?php\n        $active_address_lines = $contacts_text_lines($active_branch['address_lines'] ?? []);\n        $active_hours_rows = $contacts_hours_rows($active_branch['hours_rows'] ?? []);\n        $active_phone_number = trim((string) ($active_branch['phone_number'] ?? ''));\n        $active_phone_href = trim((string) ($active_branch['phone_href'] ?? ''));\n        $active_phone_note = trim((string) ($active_branch['phone_note'] ?? ''));\n        $active_whatsapp_url = trim((string) ($active_branch['whatsapp_url'] ?? ''));\n        $active_telegram_url = trim((string) ($active_branch['telegram_url'] ?? ''));\n        $active_branch_title = trim((string) ($active_branch['title'] ?? ''));\n        $has_route_action = $contacts_has_route($active_branch) && $route_label !== '';\n        $has_address_card = $active_address_lines !== [] || $has_route_action;\n        $has_phone_card = $active_phone_number !== ''\n          || $active_phone_note !== ''\n          || $active_whatsapp_url !== ''\n          || $active_telegram_url !== ''\n          || $callback_label !== '';\n        $has_hours_card = $active_hours_rows !== [];\n        $has_cards = $has_address_card || $has_phone_card || $has_hours_card;\n      ?>\n      <div class=\"contacts-v2__info-panel\" data-contacts-v2-info-index=\"<?= (int) $info_index ?>\"<?php if ($info_index !== 0): ?> hidden<?php endif; ?>>\n            <h3 class=\"contacts-v2__branch-current leadtext-xl\" data-contacts-v2-branch-title<?php if ($active_branch_title === ''): ?> hidden<?php endif; ?>><?= htmlspecialchars($active_branch_title) ?><\/h3>\n\n            <ul class=\"contacts-v2__cards\" data-contacts-v2-cards<?php if (!$has_cards): ?> hidden<?php endif; ?>>\n              <li class=\"contacts-v2__cards-item\" data-contacts-v2-card=\"address\"<?php if (!$has_address_card): ?> hidden<?php endif; ?>>\n                <article class=\"contacts-v2__card\">\n                  <?php if ($address_icon !== '' || $address_eyebrow !== ''): ?>\n                  <div class=\"contacts-v2__card-head\">\n                    <?php if ($address_icon !== ''): ?>\n                    <span class=\"contacts-v2__icon\" aria-hidden=\"true\">\n                      <svg class=\"icon contacts-v2__icon-image\" width=\"23\" height=\"23\" aria-hidden=\"true\">\n                        <use href=\"<?= htmlspecialchars($address_icon) ?>\"><\/use>\n                      <\/svg>\n                    <\/span>\n                    <?php endif; ?>\n                    <?php if ($address_eyebrow !== ''): ?>\n                      <p class=\"contacts-v2__label bodytext-sm\"><?= htmlspecialchars($address_eyebrow) ?><\/p>\n                    <?php endif; ?>\n                  <\/div>\n                  <?php endif; ?>\n\n                  <div class=\"contacts-v2__body\">\n                    <div class=\"contacts-v2__content\">\n                      <div class=\"contacts-v2__text-group\" data-contacts-v2-address-lines<?php if ($active_address_lines === []): ?> hidden<?php endif; ?>>\n                        <?php foreach ($active_address_lines as $line): ?>\n                          <p class=\"contacts-v2__text bodytext-lg\"><?= htmlspecialchars($line) ?><\/p>\n                        <?php endforeach; ?>\n                      <\/div>\n                    <\/div>\n\n                    <?php if ($route_label !== ''): ?>\n                    <a\n                      class=\"contacts-v2__action link-arrow bodytext-md\"\n                      href=\"<?= htmlspecialchars($active_branch['route_url'] ?? '') ?>\"\n                      target=\"_blank\"\n                      rel=\"noopener noreferrer\"\n                      data-contacts-v2-route\n                      <?php if (!$has_route_action): ?>hidden<?php endif; ?>\n                    >\n                      <?= htmlspecialchars($route_label) ?>\n                      <svg class=\"icon contacts-v2__action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"#icon-arrow-right\"><\/use>\n                      <\/svg>\n                    <\/a>\n                    <?php endif; ?>\n                  <\/div>\n                <\/article>\n              <\/li>\n\n              <li class=\"contacts-v2__cards-item\" data-contacts-v2-card=\"phone\"<?php if (!$has_phone_card): ?> hidden<?php endif; ?>>\n                <article class=\"contacts-v2__card\">\n                  <?php if ($phone_icon !== '' || $phone_eyebrow !== ''): ?>\n                  <div class=\"contacts-v2__card-head\">\n                    <?php if ($phone_icon !== ''): ?>\n                    <span class=\"contacts-v2__icon\" aria-hidden=\"true\">\n                      <svg class=\"icon contacts-v2__icon-image\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"<?= htmlspecialchars($phone_icon) ?>\"><\/use>\n                      <\/svg>\n                    <\/span>\n                    <?php endif; ?>\n                    <?php if ($phone_eyebrow !== ''): ?>\n                      <p class=\"contacts-v2__label bodytext-sm\"><?= htmlspecialchars($phone_eyebrow) ?><\/p>\n                    <?php endif; ?>\n                  <\/div>\n                  <?php endif; ?>\n\n                  <div class=\"contacts-v2__body\">\n                    <div class=\"contacts-v2__content\">\n                      <div class=\"contacts-v2__phone-block\">\n                        <div class=\"contacts-v2__text-group\" data-contacts-v2-phone-group<?php if ($active_phone_number === '' && $active_phone_note === ''): ?> hidden<?php endif; ?>>\n                          <a\n                            class=\"contacts-v2__phone bodytext-lg\"\n                            href=\"<?= htmlspecialchars($active_phone_href) ?>\"\n                            data-contacts-v2-phone\n                            <?php if ($active_phone_number === ''): ?>hidden<?php endif; ?>\n                          ><?= htmlspecialchars($active_phone_number) ?><\/a>\n                          <p class=\"contacts-v2__text bodytext-lg\" data-contacts-v2-phone-note<?php if ($active_phone_note === ''): ?> hidden<?php endif; ?>><?= htmlspecialchars($active_phone_note) ?><\/p>\n                        <\/div>\n\n                        <div class=\"contacts-v2__socials\" data-contacts-v2-socials<?php if ($active_whatsapp_url === '' && $active_telegram_url === ''): ?> hidden<?php endif; ?>>\n                          <a\n                            class=\"contacts-v2__social\"\n                            href=\"<?= htmlspecialchars($active_whatsapp_url) ?>\"\n                            target=\"_blank\"\n                            rel=\"noopener noreferrer\"\n                            aria-label=\"WhatsApp\"\n                            data-contacts-v2-whatsapp\n                            <?php if ($active_whatsapp_url === ''): ?>hidden<?php endif; ?>\n                          >\n                            <svg class=\"icon contacts-v2__social-logo\" width=\"21\" height=\"21\" aria-hidden=\"true\">\n                              <use href=\"#icon-contacts-whatsapp\"><\/use>\n                            <\/svg>\n                          <\/a>\n                          <a\n                            class=\"contacts-v2__social\"\n                            href=\"<?= htmlspecialchars($active_telegram_url) ?>\"\n                            target=\"_blank\"\n                            rel=\"noopener noreferrer\"\n                            aria-label=\"Telegram\"\n                            data-contacts-v2-telegram\n                            <?php if ($active_telegram_url === ''): ?>hidden<?php endif; ?>\n                          >\n                            <svg class=\"icon contacts-v2__social-logo contacts-v2__social-logo--tg\" width=\"21\" height=\"21\" aria-hidden=\"true\">\n                              <use href=\"#icon-contacts-telegram\"><\/use>\n                            <\/svg>\n                          <\/a>\n                        <\/div>\n                      <\/div>\n                    <\/div>\n\n                    <?php if ($callback_label !== ''): ?>\n                    <button\n                      type=\"button\"\n                      class=\"contacts-v2__action link-arrow bodytext-md\"\n                      data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('callback')) ?>\"\n                      data-remote=\"1\"\n                      data-contacts-v2-callback\n                    >\n                      <?= htmlspecialchars($callback_label) ?>\n                      <svg class=\"icon contacts-v2__action-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                        <use href=\"#icon-arrow-right\"><\/use>\n                      <\/svg>\n                    <\/button>\n                    <?php endif; ?>\n                  <\/div>\n                <\/article>\n              <\/li>\n\n              <li class=\"contacts-v2__cards-item\" data-contacts-v2-card=\"hours\"<?php if (!$has_hours_card): ?> hidden<?php endif; ?>>\n                <article class=\"contacts-v2__card contacts-v2__card--hours\">\n                  <?php if ($hours_icon !== '' || $hours_eyebrow !== ''): ?>\n                  <div class=\"contacts-v2__card-head\">\n                    <?php if ($hours_icon !== ''): ?>\n                    <span class=\"contacts-v2__icon\" aria-hidden=\"true\">\n                      <svg class=\"icon contacts-v2__icon-image\" width=\"23\" height=\"23\" aria-hidden=\"true\">\n                        <use href=\"<?= htmlspecialchars($hours_icon) ?>\"><\/use>\n                      <\/svg>\n                    <\/span>\n                    <?php endif; ?>\n                    <?php if ($hours_eyebrow !== ''): ?>\n                      <p class=\"contacts-v2__label bodytext-sm\"><?= htmlspecialchars($hours_eyebrow) ?><\/p>\n                    <?php endif; ?>\n                  <\/div>\n                  <?php endif; ?>\n\n                  <div class=\"contacts-v2__body\">\n                    <dl class=\"contacts-v2__hours\" data-contacts-v2-hours<?php if ($active_hours_rows === []): ?> hidden<?php endif; ?>>\n                      <?php foreach ($active_hours_rows as $row): ?>\n                        <div class=\"contacts-v2__hours-row\">\n                          <?php if ($row['label'] !== ''): ?>\n                            <dt class=\"contacts-v2__hours-label bodytext-lg\"><?= htmlspecialchars($row['label']) ?><\/dt>\n                          <?php endif; ?>\n                          <?php if ($row['value'] !== ''): ?>\n                            <dd class=\"contacts-v2__hours-value bodytext-lg\"><?= htmlspecialchars($row['value']) ?><\/dd>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endforeach; ?>\n                    <\/dl>\n                  <\/div>\n                <\/article>\n              <\/li>\n            <\/ul>\n      <\/div>\n      <?php endforeach; ?>\n      <?php $active_branch = $branches[0]; ?>\n\n            <div class=\"contacts-v2__map-block\">\n              <?php if ($map_section_title !== ''): ?>\n                <h3 class=\"contacts-v2__section-title leadtext-xl\"><?= htmlspecialchars($map_section_title) ?><\/h3>\n              <?php endif; ?>\n\n              <div class=\"contacts-v2__map-stage\">\n                <div\n                  class=\"contacts-v2__map-canvas\"\n                  data-contacts-v2-map-canvas\n                  aria-label=\"Карта проезда\"\n                ><\/div>\n\n                <aside class=\"contacts-v2__map-card\" data-contacts-v2-map-card<?php if (!$active_has_map_card): ?> hidden<?php endif; ?>>\n                  <img\n                    class=\"contacts-v2__map-photo\"\n                    data-contacts-v2-map-photo\n                    src=\"<?= htmlspecialchars($active_map_photo) ?>\"\n                    alt=\"<?= htmlspecialchars($active_branch['map']['photo_alt'] ?? '') ?>\"\n                    width=\"496\"\n                    height=\"274\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                    <?php if ($active_map_photo === ''): ?>hidden<?php endif; ?>\n                  >\n                  <div class=\"contacts-v2__map-text-scroll\"<?php if ($active_map_text === ''): ?> hidden<?php endif; ?> data-contacts-v2-map-text-wrap>\n                    <div class=\"contacts-v2__map-text-viewport\" data-contacts-v2-map-text-viewport>\n                      <p class=\"contacts-v2__map-text\" data-contacts-v2-map-text><?= htmlspecialchars($active_map_text) ?><\/p>\n                    <\/div>\n                    <div class=\"contacts-v2__map-text-scrollbar\" aria-hidden=\"true\" data-contacts-v2-map-text-scrollbar>\n                      <div class=\"contacts-v2__map-text-thumb\" data-contacts-v2-map-text-thumb><\/div>\n                    <\/div>\n                  <\/div>\n                <\/aside>\n              <\/div>\n            <\/div>\n\n            <?php foreach ($branches as $info_index => $info_branch): ?>\n  <?php\n    $directions = $info_branch['directions'] ?? [];\n    $directions_html = contacts_v2_render_directions(is_array($directions) ? $directions : []);\n  ?>\n  <div class=\"contacts-v2__directions\" data-contacts-v2-directions-block data-contacts-v2-info-index=\"<?= (int) $info_index ?>\" data-contacts-v2-empty=\"<?= $directions_html === '' ? 'true' : 'false' ?>\"<?php if ($info_index !== 0 || $directions_html === ''): ?> hidden<?php endif; ?>>\n              <?php if ($directions_heading !== ''): ?>\n                <h3 class=\"contacts-v2__section-title leadtext-xl\"><?= htmlspecialchars($directions_heading) ?><\/h3>\n              <?php endif; ?>\n              <div class=\"contacts-v2__directions-grid\" data-contacts-v2-directions>\n                <?= $directions_html ?>\n              <\/div>\n            <\/div>\n  <?php endforeach; ?>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n<?php endif; ?>",
            "news-variant-3": "<section class=\"news-v3 section-space-bottom\" id=\"news-highlights\">\n  <div class=\"container\">\n    <div class=\"news-v3__inner stack stack--md\">\n      <div class=\"news-v3__head\">\n        <?php if ($show_head_icon): ?>\n          <svg class=\"news-v3__head-icon\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" aria-hidden=\"true\">\n            <path d=\"M14.1172 2.69141C13.1878 1.66232 11.8044 1.01562 10.3086 1.01562H6.09375C3.2892 1.01562 1.01562 3.2892 1.01562 6.09375V19.9062C1.01562 22.7108 3.2892 24.9844 6.09375 24.9844H19.9062C22.7108 24.9844 24.9844 22.7108 24.9844 19.9062V10.2578C24.9844 8.01414 23.1655 6.19531 20.9219 6.19531H9.24219C6.99852 6.19531 5.17969 8.01414 5.17969 10.2578V20.4648M15.8407 12.1516L16.4157 13.2905C16.5554 13.5673 16.8256 13.7591 17.138 13.8035L18.4237 13.9861C19.2105 14.0979 19.5247 15.0431 18.9554 15.5857L18.0251 16.4722C17.799 16.6876 17.6958 16.998 17.7492 17.3022L17.9688 18.5539C18.1032 19.32 17.2807 19.9042 16.5769 19.5425L15.4269 18.9516C15.1474 18.808 14.8136 18.808 14.5341 18.9516L13.3841 19.5426C12.6803 19.9043 11.8578 19.32 11.9922 18.554L12.2118 17.3023C12.2652 16.9981 12.162 16.6877 11.9359 16.4722L11.0056 15.5857C10.4363 15.0432 10.7504 14.0979 11.5373 13.9862L12.823 13.8036C13.1354 13.7592 13.4055 13.5673 13.5453 13.2906L14.1203 12.1517C14.4721 11.4547 15.4888 11.4547 15.8407 12.1516Z\" stroke=\"currentColor\" stroke-width=\"2.03125\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <?php endif; ?>\n        <<?= $heading_level ?> class=\"news-v3__title titletext-sm\">\n          <?= htmlspecialchars($section_title) ?>\n        <\/<?= $heading_level ?>>\n      <\/div>\n\n      <div class=\"news-v3__slider-foot slider-foot\">\n        <div class=\"news-v3__carousel\">\n          <div class=\"news-v3__slider swiper\">\n            <div class=\"swiper-wrapper news-v3__list\">\n              <?php foreach ($items as $item): ?>\n                <div class=\"swiper-slide news-v3__slide\">\n                  <a\n                    class=\"news-v3__card\"\n                    href=\"<?= htmlspecialchars($item['url']) ?>\"\n                  >\n                    <div class=\"news-v3__card-top stack stack--md\">\n                      <div class=\"news-v3__card-media\">\n                        <img\n                          class=\"news-v3__card-img\"\n                          src=\"<?= htmlspecialchars($item['image']) ?>\"\n                          alt=\"\"\n                          width=\"500\"\n                          height=\"239\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <\/div>\n                      <?php\n                        $has_tag = trim((string)($item['category'] ?? '')) !== '';\n                        $has_expert = trim((string)($item['expert'] ?? '')) !== '';\n                        $has_date = trim((string)($item['date'] ?? '')) !== '';\n                        $has_read = trim((string)($item['read_time'] ?? '')) !== '';\n                      ?>\n                      <?php if ($has_tag || $has_expert): ?>\n                        <div class=\"news-v3__card-tags\">\n                          <?php if ($has_tag): ?>\n                            <span class=\"news-v3__tag bodytext-md\"><?= htmlspecialchars($item['category']) ?><\/span>\n                          <?php endif; ?>\n                          <?php if ($has_expert): ?>\n                            <span class=\"news-v3__expert bodytext-strong\"><?= htmlspecialchars($item['expert']) ?><\/span>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endif; ?>\n                    <\/div>\n                    <p class=\"news-v3__card-title bodytext-lg\"><?= htmlspecialchars($item['title']) ?><\/p>\n                    <?php if ($has_date || $has_read): ?>\n                      <div class=\"news-v3__meta bodytext\">\n                        <?php if ($has_date): ?>\n                          <time class=\"news-v3__meta-date\"><?= htmlspecialchars($item['date']) ?><\/time>\n                        <?php endif; ?>\n                        <?php if ($has_date && $has_read): ?>\n                          <span class=\"news-v3__meta-dot\" aria-hidden=\"true\"><\/span>\n                        <?php endif; ?>\n                        <?php if ($has_read): ?>\n                          <span class=\"news-v3__meta-read\">\n                            <svg class=\"icon news-v3__meta-clock\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                              <use href=\"#icon-clock\"><\/use>\n                            <\/svg>\n                            <span><?= htmlspecialchars($item['read_time']) ?><\/span>\n                          <\/span>\n                        <?php endif; ?>\n                      <\/div>\n                    <?php endif; ?>\n                  <\/a>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"slider-pagination-host\">\n          <div class=\"news-v3__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "news-variant-4": "<section\n  class=\"news-v4 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  id=\"news\"\n  aria-label=\"<?= htmlspecialchars($section_label) ?>\"\n  data-news-v4-limit=\"<?= (int) $initial_limit ?>\"\n>\n  <div class=\"container\">\n    <div class=\"news-v4__inner stack stack--md\">\n      <div class=\"news-v4__filters\" role=\"group\" aria-label=\"Фильтр публикаций\">\n        <?php foreach ($filters as $filter): ?>\n          <?php\n            $is_active = ($filter['key'] ?? '') === 'all';\n            $chip_class = 'news-v4__chip bodytext-strong';\n            if ($is_active) $chip_class .= ' is-active';\n          ?>\n          <button\n            type=\"button\"\n            class=\"<?= htmlspecialchars($chip_class) ?>\"\n            data-news-v4-filter=\"<?= htmlspecialchars($filter['key']) ?>\"\n            aria-pressed=\"<?= $is_active ? 'true' : 'false' ?>\"\n          >\n            <?= htmlspecialchars($filter['label']) ?>\n          <\/button>\n        <?php endforeach; ?>\n      <\/div>\n\n      <div class=\"news-v4__layout\">\n        <div class=\"news-v4__main stack stack--md\">\n          <div class=\"news-v4__list\">\n            <?php foreach ($items as $index => $item): ?>\n              <?php\n                $hidden = $index >= $initial_limit;\n                $item_class = 'news-v4__item';\n                if ($hidden) $item_class .= ' is-collapsed';\n              ?>\n              <div\n                class=\"<?= htmlspecialchars($item_class) ?>\"\n                data-news-v4-item\n                data-news-v4-type=\"<?= htmlspecialchars($item['type']) ?>\"\n                <?= $hidden ? 'hidden' : '' ?>\n              >\n                <a class=\"news-v4__card\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                  <div class=\"news-v4__card-media\">\n                    <img\n                      class=\"news-v4__card-img\"\n                      src=\"<?= htmlspecialchars($item['image']) ?>\"\n                      alt=\"\"\n                      width=\"345\"\n                      height=\"248\"\n                      loading=\"lazy\"\n                      decoding=\"async\"\n                    >\n                  <\/div>\n                  <div class=\"news-v4__card-body\">\n                    <div class=\"news-v4__card-copy\">\n                      <p class=\"news-v4__card-title titletext-sm\"><?= htmlspecialchars($item['title']) ?><\/p>\n                      <p class=\"news-v4__card-excerpt bodytext-md\"><?= htmlspecialchars($item['excerpt']) ?><\/p>\n                    <\/div>\n                    <?php\n                      $has_date = trim((string)($item['date'] ?? '')) !== '';\n                      $has_read = trim((string)($item['read_time'] ?? '')) !== '';\n                      $has_tag = trim((string)($item['category'] ?? '')) !== '';\n                    ?>\n                    <?php if ($has_date || $has_read || $has_tag): ?>\n                      <div class=\"news-v4__card-foot\">\n                        <?php if ($has_date || $has_read): ?>\n                          <div class=\"news-v4__meta bodytext\">\n                            <?php if ($has_date): ?>\n                              <time class=\"news-v4__meta-date\" datetime=\"<?= htmlspecialchars((string)($item['datetime'] ?? '')) ?>\"><?= htmlspecialchars($item['date']) ?><\/time>\n                            <?php endif; ?>\n                            <?php if ($has_date && $has_read): ?>\n                              <span class=\"news-v4__meta-dot\" aria-hidden=\"true\"><\/span>\n                            <?php endif; ?>\n                            <?php if ($has_read): ?>\n                              <span class=\"news-v4__meta-read\">\n                                <svg class=\"icon news-v4__meta-clock\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                                  <use href=\"#icon-clock\"><\/use>\n                                <\/svg>\n                                <span><?= htmlspecialchars($item['read_time']) ?><\/span>\n                              <\/span>\n                            <?php endif; ?>\n                          <\/div>\n                        <?php endif; ?>\n                        <?php if ($has_tag): ?>\n                          <span class=\"news-v4__tag bodytext-md\"><?= htmlspecialchars($item['category']) ?><\/span>\n                        <?php endif; ?>\n                      <\/div>\n                    <?php endif; ?>\n                  <\/div>\n                <\/a>\n              <\/div>\n            <?php endforeach; ?>\n          <\/div>\n\n          <?php if (count($items) > $initial_limit): ?>\n            <button type=\"button\" class=\"news-v4__more btn btn--secondary bodytext-sm\" data-news-v4-more>\n              <?= htmlspecialchars($more_label) ?>\n            <\/button>\n          <?php endif; ?>\n        <\/div>\n\n        <aside class=\"news-v4__aside\">\n          <div class=\"news-v4__cta\">\n            <div class=\"news-v4__cta-copy stack stack--sm\">\n              <p class=\"news-v4__cta-title megatext-md\"><?= htmlspecialchars($cta_title) ?><\/p>\n              <p class=\"news-v4__cta-lead bodytext-lg-regular\"><?= htmlspecialchars($cta_lead) ?><\/p>\n            <\/div>\n\n            <form class=\"news-v4__form stack stack--md popup-form--consent-gated\" action=\"#\" method=\"post\">\n              <div class=\"news-v4__fields stack stack--md\">\n                <label class=\"news-v4__field\">\n                  <select class=\"news-v4__input news-v4__select field__input\" name=\"concern\" aria-label=\"Что вас беспокоит?\">\n                    <?php foreach ($concerns as $label => $value): ?>\n                      <option value=\"<?= htmlspecialchars($value) ?>\" <?= $value === '' ? 'selected disabled' : '' ?>>\n                        <?= htmlspecialchars($label) ?>\n                      <\/option>\n                    <?php endforeach; ?>\n                  <\/select>\n                  <span class=\"news-v4__select-icon\" aria-hidden=\"true\">\n                    <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                      <use href=\"#icon-chevron-down\"><\/use>\n                    <\/svg>\n                  <\/span>\n                <\/label>\n\n                <label class=\"news-v4__field\">\n                  <input class=\"news-v4__input field__input\" type=\"text\" name=\"name\" aria-label=\"Имя\" placeholder=\"<?= htmlspecialchars($form_name_label) ?>\" autocomplete=\"name\" required>\n                <\/label>\n\n                <label class=\"news-v4__field\">\n                  <input class=\"news-v4__input field__input\" type=\"tel\" name=\"phone\" aria-label=\"Телефон\" placeholder=\"<?= htmlspecialchars($form_phone_label) ?>\" autocomplete=\"tel\" required>\n                <\/label>\n\n                <button type=\"submit\" class=\"news-v4__submit popup-form__submit btn btn--white bodytext-md\">\n                  <?= htmlspecialchars($form_submit_label) ?>\n                <\/button>\n              <\/div>\n\n              <label class=\"news-v4__consent popup-form__consent bodytext\">\n                <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n                <span class=\"popup-form__consent-text\"><?= $consent_html ?><\/span>\n              <\/label>\n            <\/form>\n          <\/div>\n        <\/aside>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "knowledge-variant-1": "<?php\n  $results_more_label = $results_more_label ?? 'Показать еще';\n  $results_page_size = (int) ($results_page_size ?? 6);\n  if ($results_page_size < 1) {\n      $results_page_size = 6;\n  }\n\n  $results_filters = [\n      ['key' => 'all', 'label' => 'Все'],\n  ];\n  foreach ($catalog_groups as $group) {\n      $group_id = (string) ($group['id'] ?? '');\n      if ($group_id === '') {\n          continue;\n      }\n      $results_filters[] = [\n          'key' => $group_id,\n          'label' => (string) ($group['title'] ?? ''),\n      ];\n  }\n\n  $search_index = [];\n  $search_index_seen = [];\n  $append_search_index_item = static function (array $item) use (&$search_index, &$search_index_seen, $search_result_defaults): void {\n      $item_title = trim((string) ($item['title'] ?? ''));\n      if ($item_title === '') {\n          return;\n      }\n      $item_url = trim((string) ($item['url'] ?? ''));\n      if ($item_url === '') {\n          $item_url = '#';\n      }\n      $item_key = mb_strtolower($item_title, 'UTF-8') . '|' . $item_url;\n      if (isset($search_index_seen[$item_key])) {\n          return;\n      }\n      $search_index_seen[$item_key] = true;\n      $search_index[] = [\n          'title' => $item_title,\n          'url' => $item_url,\n          'excerpt' => trim((string) ($item['excerpt'] ?? $search_result_defaults['excerpt'])),\n          'category' => trim((string) ($item['category'] ?? '')),\n          'category_id' => trim((string) ($item['category_id'] ?? '')),\n          'date' => trim((string) ($item['date'] ?? $search_result_defaults['date'])),\n          'datetime' => trim((string) ($item['datetime'] ?? $search_result_defaults['datetime'])),\n          'read_time' => trim((string) ($item['read_time'] ?? $search_result_defaults['read_time'])),\n      ];\n  };\n\n  foreach ($catalog_groups as $group) {\n      $category_title = (string) ($group['title'] ?? '');\n      $category_id = (string) ($group['id'] ?? '');\n      $group_items = isset($group['items']) && is_array($group['items']) ? $group['items'] : [];\n      foreach ($group_items as $item) {\n          $append_search_index_item([\n              'title' => $item['title'] ?? '',\n              'url' => $item['url'] ?? '#',\n              'category' => $category_title,\n              'category_id' => $category_id,\n          ]);\n      }\n  }\n  if (is_array($alphabet_items)) {\n      foreach ($alphabet_items as $letter_items) {\n          if (!is_array($letter_items)) {\n              continue;\n          }\n          foreach ($letter_items as $item) {\n              $append_search_index_item([\n                  'title' => $item['title'] ?? '',\n                  'url' => $item['url'] ?? '#',\n              ]);\n          }\n      }\n  }\n  foreach ($search_demo_items as $demo_item) {\n      $append_search_index_item($demo_item);\n  }\n\n  $knowledge_v1_search_mode = ($search_action_url === '' || $search_action_url === '#') ? 'client' : 'server';\n?>\n<section\n  class=\"knowledge-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"\n  id=\"<?= htmlspecialchars($section_id) ?>\"\n  data-knowledge-v1-search-mode=\"<?= htmlspecialchars($knowledge_v1_search_mode) ?>\"\n  data-knowledge-v1-results-page=\"<?= (int) $results_page_size ?>\"\n>\n  <div class=\"container\">\n    <div class=\"knowledge-v1__card\">\n      <div class=\"knowledge-v1__bg\" aria-hidden=\"true\">\n        <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" width=\"1920\" height=\"537\" loading=\"lazy\" decoding=\"async\">\n      <\/div>\n\n      <div class=\"knowledge-v1__inner\">\n        <div class=\"knowledge-v1__copy stack stack--md\">\n          <<?= $heading_level ?> class=\"knowledge-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <p class=\"knowledge-v1__lead bodytext-lg\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n\n        <form\n          class=\"knowledge-v1__search\"\n          action=\"<?= htmlspecialchars($search_action_url) ?>\"\n          method=\"get\"\n          role=\"search\"\n          data-knowledge-v1-search\n        >\n          <div class=\"knowledge-v1__search-field\">\n            <span class=\"knowledge-v1__search-icon\" aria-hidden=\"true\">\n              <img src=\"<?= htmlspecialchars($search_icon_src) ?>\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\">\n            <\/span>\n            <input\n              id=\"<?= htmlspecialchars($search_input_id) ?>\"\n              class=\"knowledge-v1__search-input field__input bodytext\"\n              type=\"text\"\n              name=\"q\"\n              placeholder=\"<?= htmlspecialchars($search_placeholder) ?>\"\n              aria-label=\"<?= htmlspecialchars($search_placeholder) ?>\"\n              autocomplete=\"off\"\n              inputmode=\"search\"\n              data-knowledge-v1-input\n            >\n            <button class=\"knowledge-v1__search-submit\" type=\"submit\" aria-label=\"<?= htmlspecialchars($search_button_label) ?>\">\n              <img src=\"<?= htmlspecialchars($search_button_src) ?>\" alt=\"\" width=\"72\" height=\"48\" loading=\"lazy\" decoding=\"async\">\n            <\/button>\n          <\/div>\n        <\/form>\n      <\/div>\n    <\/div>\n\n    <div class=\"knowledge-v1__results stack stack--lg\" data-knowledge-v1-results hidden>\n      <p class=\"knowledge-v1__results-summary bodytext-lg\" data-knowledge-v1-results-summary><\/p>\n\n      <div\n        class=\"knowledge-v1__results-filters\"\n        role=\"group\"\n        aria-label=\"Фильтр результатов поиска\"\n        data-knowledge-v1-results-filters\n        hidden\n      >\n        <?php foreach ($results_filters as $filter): ?>\n          <button\n            type=\"button\"\n            class=\"knowledge-v1__results-chip bodytext-strong<?= ($filter['key'] ?? '') === 'all' ? ' is-active' : '' ?>\"\n            data-knowledge-v1-results-filter=\"<?= htmlspecialchars($filter['key']) ?>\"\n            aria-pressed=\"<?= ($filter['key'] ?? '') === 'all' ? 'true' : 'false' ?>\"\n          ><?= htmlspecialchars($filter['label']) ?><\/button>\n        <?php endforeach; ?>\n      <\/div>\n\n      <div class=\"knowledge-v1__results-layout\">\n        <div class=\"knowledge-v1__results-main stack stack--md\">\n          <p class=\"knowledge-v1__results-empty bodytext-lg\" data-knowledge-v1-results-empty hidden>\n            <?= htmlspecialchars($results_empty_label) ?>\n          <\/p>\n\n          <div class=\"knowledge-v1__results-list\" data-knowledge-v1-results-list hidden><\/div>\n\n          <button type=\"button\" class=\"knowledge-v1__results-reset btn btn--secondary uibtntext\" data-knowledge-v1-results-reset hidden>\n            <?= htmlspecialchars($results_more_label) ?>\n          <\/button>\n        <\/div>\n\n        <aside class=\"knowledge-v1__results-aside\" aria-label=\"<?= htmlspecialchars($results_sidebar_title) ?>\">\n          <div class=\"knowledge-v1__results-cta\">\n            <div class=\"knowledge-v1__results-cta-copy stack stack--sm\">\n              <p class=\"knowledge-v1__results-cta-title megatext-md\"><?= htmlspecialchars($results_sidebar_title) ?><\/p>\n              <p class=\"knowledge-v1__results-cta-lead bodytext-lg\"><?= htmlspecialchars($results_sidebar_lead) ?><\/p>\n            <\/div>\n\n            <form class=\"knowledge-v1__results-form stack stack--md popup-form--consent-gated\" action=\"#\" method=\"post\">\n              <div class=\"knowledge-v1__results-fields stack stack--md\">\n                <label class=\"knowledge-v1__results-field\">\n                  <select class=\"knowledge-v1__results-input knowledge-v1__results-select field__input\" name=\"concern\" aria-label=\"Что вас беспокоит?\">\n                    <?php foreach ($results_sidebar_concerns as $label => $value): ?>\n                      <option value=\"<?= htmlspecialchars($value) ?>\" <?= $value === '' ? 'selected disabled' : '' ?>>\n                        <?= htmlspecialchars($label) ?>\n                      <\/option>\n                    <?php endforeach; ?>\n                  <\/select>\n                  <span class=\"knowledge-v1__results-select-icon\" aria-hidden=\"true\">\n                    <svg class=\"icon\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n                      <use href=\"#icon-chevron-down\"><\/use>\n                    <\/svg>\n                  <\/span>\n                <\/label>\n\n                <label class=\"knowledge-v1__results-field\">\n                  <input\n                    class=\"knowledge-v1__results-input field__input\"\n                    type=\"text\"\n                    name=\"name\"\n                    placeholder=\"<?= htmlspecialchars($results_sidebar_name_label) ?>\"\n                    autocomplete=\"name\"\n                    required\n                  >\n                <\/label>\n\n                <label class=\"knowledge-v1__results-field\">\n                  <input\n                    class=\"knowledge-v1__results-input field__input\"\n                    type=\"tel\"\n                    name=\"phone\"\n                    placeholder=\"<?= htmlspecialchars($results_sidebar_phone_label) ?>\"\n                    autocomplete=\"tel\"\n                    required\n                  >\n                <\/label>\n\n                <button type=\"submit\" class=\"knowledge-v1__results-submit popup-form__submit btn btn--white bodytext-md\">\n                  <?= htmlspecialchars($results_sidebar_submit_label) ?>\n                <\/button>\n              <\/div>\n\n              <label class=\"knowledge-v1__results-consent popup-form__consent bodytext\">\n                <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n                <span class=\"popup-form__consent-text\"><?= $results_sidebar_consent_html ?><\/span>\n              <\/label>\n            <\/form>\n          <\/div>\n        <\/aside>\n      <\/div>\n    <\/div>\n\n    <?php if ($show_topics && is_array($topics) && $topics !== []): ?>\n    <div class=\"knowledge-v1__topics stack stack--lg\" data-knowledge-v1-browse>\n      <<?= $topics_heading_level ?> class=\"knowledge-v1__topics-title megatext-md\"><?= htmlspecialchars($topics_title) ?><\/<?= $topics_heading_level ?>>\n\n      <ul class=\"knowledge-v1__topics-grid\">\n        <?php foreach ($topics as $topic): ?>\n          <li class=\"knowledge-v1__topics-item\">\n            <a\n              class=\"knowledge-v1__topic-card\"\n              href=\"<?= htmlspecialchars($topic['url']) ?>\"\n              data-knowledge-v1-topic=\"<?= htmlspecialchars($topic['id']) ?>\"\n            >\n              <span class=\"knowledge-v1__topic-icon\" aria-hidden=\"true\">\n                <img src=\"<?= htmlspecialchars($topic['icon_src']) ?>\" alt=\"\" width=\"38\" height=\"38\" loading=\"lazy\" decoding=\"async\">\n              <\/span>\n              <span class=\"knowledge-v1__topic-copy stack stack--sm\">\n                <span class=\"knowledge-v1__topic-title bodytext-lg\"><?= htmlspecialchars($topic['title']) ?><\/span>\n                <span class=\"knowledge-v1__topic-count bodytext\"><?= htmlspecialchars($topic['count_label']) ?><\/span>\n              <\/span>\n            <\/a>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n    <?php endif; ?>\n\n    <?php if ($show_alphabet && is_array($alphabet_letters) && $alphabet_letters !== []): ?>\n    <?php\n      $alphabet_items_map = is_array($alphabet_items) ? $alphabet_items : [];\n      $alphabet_default = (string) $alphabet_default_letter;\n      if (\n        !isset($alphabet_items_map[$alphabet_default])\n        || !is_array($alphabet_items_map[$alphabet_default])\n        || $alphabet_items_map[$alphabet_default] === []\n      ) {\n          foreach ($alphabet_letters as $letter_candidate) {\n              $letter_candidate_key = (string) $letter_candidate;\n              if (\n                  isset($alphabet_items_map[$letter_candidate_key])\n                  && is_array($alphabet_items_map[$letter_candidate_key])\n                  && $alphabet_items_map[$letter_candidate_key] !== []\n              ) {\n                  $alphabet_default = $letter_candidate_key;\n                  break;\n              }\n          }\n      }\n      $alphabet_list_id = 'knowledge-v1-alphabet-list';\n    ?>\n    <div class=\"knowledge-v1__alphabet stack stack--lg\" data-knowledge-v1-alphabet data-knowledge-v1-browse>\n      <div class=\"knowledge-v1__alphabet-head stack stack--md\">\n        <<?= $alphabet_heading_level ?> class=\"knowledge-v1__alphabet-title megatext-md\"><?= htmlspecialchars($alphabet_title) ?><\/<?= $alphabet_heading_level ?>>\n        <p class=\"knowledge-v1__alphabet-lead bodytext-lg-regular\"><?= htmlspecialchars($alphabet_lead) ?><\/p>\n      <\/div>\n\n      <div class=\"knowledge-v1__alphabet-card\">\n        <div\n          class=\"knowledge-v1__alphabet-letters\"\n          role=\"tablist\"\n          aria-label=\"<?= htmlspecialchars($alphabet_title) ?>\"\n        >\n          <?php foreach ($alphabet_letters as $letter_index => $letter): ?>\n            <?php\n              $letter_key = (string) $letter;\n              $letter_items = isset($alphabet_items_map[$letter_key]) && is_array($alphabet_items_map[$letter_key])\n                ? $alphabet_items_map[$letter_key]\n                : [];\n              $letter_has_items = $letter_items !== [];\n              $letter_is_default = $letter_key === $alphabet_default;\n              $letter_tab_id = 'knowledge-v1-alphabet-tab-' . ($letter_index + 1);\n              $letter_panel_id = 'knowledge-v1-alphabet-panel-' . ($letter_index + 1);\n            ?>\n            <button\n              type=\"button\"\n              class=\"knowledge-v1__alphabet-letter megatext-sm<?= $letter_is_default ? ' is-active' : '' ?><?= !$letter_has_items ? ' is-empty' : '' ?>\"\n              id=\"<?= htmlspecialchars($letter_tab_id) ?>\"\n              role=\"tab\"\n              aria-selected=\"<?= $letter_is_default ? 'true' : 'false' ?>\"\n              <?= $letter_has_items ? 'aria-controls=\"' . htmlspecialchars($letter_panel_id) . '\"' : '' ?>\n              data-knowledge-v1-alphabet-letter=\"<?= htmlspecialchars($letter_key) ?>\"\n              <?= !$letter_has_items ? 'disabled' : '' ?>\n            ><?= htmlspecialchars($letter_key) ?><\/button>\n          <?php endforeach; ?>\n        <\/div>\n\n        <div class=\"knowledge-v1__alphabet-panels\" id=\"<?= htmlspecialchars($alphabet_list_id) ?>\">\n          <?php foreach ($alphabet_letters as $letter_index => $letter): ?>\n            <?php\n              $letter_key = (string) $letter;\n              $letter_items = isset($alphabet_items_map[$letter_key]) && is_array($alphabet_items_map[$letter_key])\n                ? $alphabet_items_map[$letter_key]\n                : [];\n              if ($letter_items === []) {\n                  continue;\n              }\n              $letter_is_default = $letter_key === $alphabet_default;\n              $letter_tab_id = 'knowledge-v1-alphabet-tab-' . ($letter_index + 1);\n              $letter_panel_id = 'knowledge-v1-alphabet-panel-' . ($letter_index + 1);\n            ?>\n            <div\n              class=\"knowledge-v1__alphabet-panel<?= $letter_is_default ? ' is-active' : '' ?>\"\n              id=\"<?= htmlspecialchars($letter_panel_id) ?>\"\n              role=\"tabpanel\"\n              aria-labelledby=\"<?= htmlspecialchars($letter_tab_id) ?>\"\n              data-knowledge-v1-alphabet-panel=\"<?= htmlspecialchars($letter_key) ?>\"\n              <?= !$letter_is_default ? 'hidden' : '' ?>\n            >\n              <div class=\"knowledge-v1__alphabet-links\" aria-label=\"Материалы на букву <?= htmlspecialchars($letter_key) ?>\">\n                <?php foreach ($letter_items as $item): ?>\n                  <a class=\"knowledge-v1__alphabet-link bodytext text-decoration-fade\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                    <?= htmlspecialchars($item['title']) ?>\n                  <\/a>\n                <?php endforeach; ?>\n              <\/div>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n      <\/div>\n    <\/div>\n    <?php endif; ?>\n\n    <?php if ($show_catalog && is_array($catalog_groups) && $catalog_groups !== []): ?>\n    <div class=\"knowledge-v1__catalog stack stack--lg\" data-knowledge-v1-catalog data-knowledge-v1-browse>\n      <<?= $catalog_heading_level ?> class=\"knowledge-v1__catalog-title megatext-md\"><?= htmlspecialchars($catalog_title) ?><\/<?= $catalog_heading_level ?>>\n\n      <div class=\"knowledge-v1__catalog-list\" aria-label=\"<?= htmlspecialchars($catalog_title) ?>\">\n        <?php foreach ($catalog_groups as $group_index => $group): ?>\n          <?php\n            $group_id = (string) ($group['id'] ?? '');\n            $group_items = isset($group['items']) && is_array($group['items']) ? $group['items'] : [];\n            $group_count = count($group_items);\n            $trigger_id = 'knowledge-v1-catalog-trigger-' . ($group_index + 1);\n            $panel_id = 'knowledge-v1-catalog-panel-' . ($group_index + 1);\n          ?>\n          <div\n            class=\"knowledge-v1__catalog-item\"\n            id=\"knowledge-topic-<?= htmlspecialchars($group_id) ?>\"\n            data-knowledge-v1-catalog-id=\"<?= htmlspecialchars($group_id) ?>\"\n          >\n            <div\n              class=\"knowledge-v1__catalog-trigger\"\n              role=\"button\"\n              tabindex=\"0\"\n              id=\"<?= htmlspecialchars($trigger_id) ?>\"\n              aria-expanded=\"false\"\n              aria-controls=\"<?= htmlspecialchars($panel_id) ?>\"\n              data-knowledge-v1-catalog-trigger\n            >\n              <span class=\"knowledge-v1__catalog-left\">\n                <span class=\"knowledge-v1__catalog-icon\" aria-hidden=\"true\">\n                  <img src=\"<?= htmlspecialchars($group['icon_src']) ?>\" alt=\"\" width=\"38\" height=\"38\" loading=\"lazy\" decoding=\"async\">\n                <\/span>\n                <span class=\"knowledge-v1__catalog-name bodytext-lg\"><?= htmlspecialchars($group['title']) ?><\/span>\n              <\/span>\n\n              <span class=\"knowledge-v1__catalog-right\">\n                <?php if ($group_count > 0): ?>\n                  <span class=\"knowledge-v1__catalog-meta bodytext\">\n                    <?= htmlspecialchars($group['count_label'] ?? ($group_count . ' материалов')) ?>\n                  <\/span>\n                <?php endif; ?>\n                <span class=\"knowledge-v1__catalog-chevron\" aria-hidden=\"true\">\n                  <svg class=\"icon knowledge-v1__catalog-chevron-svg\" width=\"31\" height=\"32\" aria-hidden=\"true\">\n                    <use href=\"#icon-faq-arrow\"><\/use>\n                  <\/svg>\n                <\/span>\n              <\/span>\n            <\/div>\n\n            <div\n              class=\"knowledge-v1__catalog-panel\"\n              id=\"<?= htmlspecialchars($panel_id) ?>\"\n              role=\"region\"\n              aria-labelledby=\"<?= htmlspecialchars($trigger_id) ?>\"\n              hidden\n            >\n              <div class=\"knowledge-v1__catalog-panel-inner\">\n                <?php if ($group_items !== []): ?>\n                  <div class=\"knowledge-v1__catalog-panel-content\">\n                    <div class=\"knowledge-v1__catalog-links\" aria-label=\"<?= htmlspecialchars($group['title']) ?>\">\n                      <?php foreach ($group_items as $item): ?>\n                        <a class=\"knowledge-v1__catalog-link bodytext text-decoration-fade\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                          <?= htmlspecialchars($item['title']) ?>\n                        <\/a>\n                      <?php endforeach; ?>\n                    <\/div>\n                  <\/div>\n                <?php endif; ?>\n              <\/div>\n            <\/div>\n          <\/div>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n    <?php endif; ?>\n\n    <script type=\"application\/json\" data-knowledge-v1-index><?=\n      json_encode(\n          $search_index,\n          JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT\n      )\n    ?><\/script>\n  <\/div>\n<\/section>",
            "hero-variant-10": "<?php\n  $lcp_image = $image;\n  $date = trim((string) $date);\n  $date_iso = trim((string) $date_iso);\n  $read_time = trim((string) $read_time);\n  $has_read_time = $read_time !== '';\n?>\n<section class=\"hero-v10 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?> section-space-y-lg\">\n  <div class=\"container\">\n    <div class=\"hero-v10__grid\">\n      <div class=\"hero-v10__content\">\n        <div class=\"hero-v10__main stack\">\n          <div class=\"hero-v10__lead stack\">\n            <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'hero-v10__eyebrow') ?>\n            <div class=\"titles\">\n              <<?= $heading_level ?> class=\"hero-v10__title megatext\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>>\n              <p class=\"hero-v10__subtitle bodytext-md\"><?= nl2br(htmlspecialchars($lead), false) ?><\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"hero-v10__expert\">\n            <img\n              class=\"hero-v10__expert-photo\"\n              src=\"<?= htmlspecialchars($expert_image) ?>\"\n              alt=\"<?= htmlspecialchars($expert_alt) ?>\"\n              width=\"60\"\n              height=\"60\"\n              loading=\"lazy\"\n              decoding=\"async\"\n            >\n            <div class=\"hero-v10__expert-copy stack\">\n              <span class=\"hero-v10__expert-name bodytext-strong\"><?= htmlspecialchars($expert_name) ?><\/span>\n              <span class=\"hero-v10__expert-role bodytext-strong\"><?= htmlspecialchars($expert_role) ?><\/span>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"hero-v10__meta bodytext\">\n          <?php if ($date !== ''): ?>\n            <time class=\"hero-v10__meta-date\" datetime=\"<?= htmlspecialchars($date_iso) ?>\"><?= htmlspecialchars($date) ?><\/time>\n          <?php endif; ?>\n          <?php if ($has_read_time): ?>\n            <?php if ($date !== ''): ?>\n              <span class=\"hero-v10__meta-dot\" aria-hidden=\"true\"><\/span>\n            <?php endif; ?>\n            <span class=\"hero-v10__meta-read\">\n              <svg class=\"icon hero-v10__meta-clock\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                <use href=\"#icon-clock\"><\/use>\n              <\/svg>\n              <span><?= htmlspecialchars($read_time) ?><\/span>\n            <\/span>\n          <?php endif; ?>\n        <\/div>\n      <\/div>\n\n      <div class=\"hero-v10__media\">\n        <img\n          class=\"hero-v10__image\"\n          src=\"<?= htmlspecialchars($image) ?>\"\n          alt=\"<?= htmlspecialchars($image_alt) ?>\"\n          width=\"807\"\n          height=\"558\"\n          <?= \\app\\generator\\PageCriticalResources::imgAttrs($image) ?>\n        >\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "news-variant-1": "<?php\n$cards = [array_merge($featured, ['variant' => 'featured'])];\nforeach ($items as $_item) {\n    $cards[] = array_merge($_item, ['variant' => 'compact']);\n}\n$aside_count = max(1, count($items));\n?>\n<section class=\"news-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\" id=\"news\">\n  <div class=\"container\">\n    <div class=\"news-v1__inner\">\n      <div class=\"news-v1__head\">\n        <div class=\"news-v1__head-main stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'news-v1__eyebrow') ?>\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"news-v1__title megatext\">\n              <?= $title ?>\n            <\/<?= $heading_level ?>>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <a class=\"news-v1__all-link link-arrow bodytext-md\" href=\"<?= htmlspecialchars($all_link_url) ?>\">\n        <?= htmlspecialchars($all_link_label) ?>\n        <svg class=\"icon news-v1__all-link-icon link-arrow__icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n          <use href=\"#icon-arrow-right\"><\/use>\n        <\/svg>\n      <\/a>\n\n      <div class=\"news-v1__slider-foot slider-foot\">\n        <div class=\"news-v1__carousel\">\n          <div class=\"news-v1__slider swiper\">\n            <div\n              class=\"swiper-wrapper news-v1__layout\"\n              style=\"--news-v1-aside-count: <?= (int) $aside_count ?>\"\n            >\n              <?php foreach ($cards as $card): ?>\n                <?php\n                  $is_featured = ($card['variant'] ?? '') === 'featured';\n                  $card_mod = $is_featured ? 'news-v1__card--featured' : 'news-v1__card--compact';\n                  $img_w = $is_featured ? 793 : 240;\n                  $img_h = $is_featured ? 399 : 186;\n                ?>\n                <div class=\"swiper-slide\">\n                  <a\n                    class=\"news-v1__card <?= $card_mod ?>\"\n                    href=\"<?= htmlspecialchars($card['url']) ?>\"\n                  >\n                    <div class=\"news-v1__card-media\">\n                      <img\n                        class=\"news-v1__card-img\"\n                        src=\"<?= htmlspecialchars($card['image']) ?>\"\n                        alt=\"\"\n                        width=\"<?= $img_w ?>\"\n                        height=\"<?= $img_h ?>\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                      >\n                    <\/div>\n                    <div class=\"news-v1__card-content\">\n                      <?php\n                        $has_tag = trim((string)($card['category'] ?? '')) !== '';\n                        $has_expert = trim((string)($card['expert'] ?? '')) !== '';\n                      ?>\n                      <?php if ($has_tag || $has_expert): ?>\n                        <div class=\"news-v1__card-top\">\n                          <?php if ($has_tag): ?>\n                            <span class=\"news-v1__tag bodytext-md\"><?= htmlspecialchars($card['category']) ?><\/span>\n                          <?php endif; ?>\n                          <?php if ($has_expert): ?>\n                            <span class=\"news-v1__expert bodytext-strong\"><?= htmlspecialchars($card['expert']) ?><\/span>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endif; ?>\n                      <p class=\"news-v1__card-title bodytext-lg\"><?= htmlspecialchars($card['title']) ?><\/p>\n                      <?php\n                        $has_date = trim((string)($card['date'] ?? '')) !== '';\n                        $has_read = trim((string)($card['read_time'] ?? '')) !== '';\n                      ?>\n                      <?php if ($has_date || $has_read): ?>\n                        <div class=\"news-v1__meta bodytext\">\n                          <?php if ($has_date): ?>\n                            <time class=\"news-v1__meta-date\"><?= htmlspecialchars($card['date']) ?><\/time>\n                          <?php endif; ?>\n                          <?php if ($has_date && $has_read): ?>\n                            <span class=\"news-v1__meta-dot\" aria-hidden=\"true\"><\/span>\n                          <?php endif; ?>\n                          <?php if ($has_read): ?>\n                            <span class=\"news-v1__meta-read\">\n                              <svg class=\"icon news-v1__meta-clock\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                                <use href=\"#icon-clock\"><\/use>\n                              <\/svg>\n                              <span><?= htmlspecialchars($card['read_time']) ?><\/span>\n                            <\/span>\n                          <?php endif; ?>\n                        <\/div>\n                      <?php endif; ?>\n                      <span class=\"news-v1__card-arrow\" aria-hidden=\"true\">\n                        <svg class=\"icon news-v1__card-arrow-icon\" width=\"21\" height=\"22\">\n                          <use href=\"#icon-arrow-diagonal\"><\/use>\n                        <\/svg>\n                      <\/span>\n                    <\/div>\n                  <\/a>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"news-v1__pagination-host slider-pagination-host\">\n          <div class=\"news-v1__pagination slider-pagination--dots is-always swiper-pagination\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "hero-variant-12": "<?php\n  $lcp_image = $background_image;\n  $title = trim((string) $title);\n  $lead = trim((string) $lead);\n  $cta = trim((string) $cta);\n  $trust_text = trim((string) $trust_text);\n  $trust_icon = trim((string) $trust_icon);\n?>\n<section class=\"hero-v12 has-block-bg\">\n  <?php if ($background_image !== ''): ?>\n    <div class=\"hero-v12__bg block-bg\" aria-hidden=\"true\">\n      <img\n        src=\"<?= htmlspecialchars($background_image) ?>\"\n        alt=\"<?= htmlspecialchars($background_alt) ?>\"\n        width=\"1920\"\n        height=\"800\"\n        <?= \\app\\generator\\PageCriticalResources::imgAttrs($background_image) ?>\n      >\n    <\/div>\n  <?php endif; ?>\n  <div class=\"hero-v12__wash\" aria-hidden=\"true\"><\/div>\n\n  <div class=\"container hero-v12__container\">\n    <div class=\"hero-v12__layout\">\n      <div class=\"hero-v12__content\">\n        <div class=\"hero-v12__main\">\n          <?php if ($title !== ''): ?>\n            <<?= $heading_level ?> class=\"hero-v12__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n          <?php endif; ?>\n\n          <?php if ($lead !== ''): ?>\n            <p class=\"hero-v12__lead bodytext-lg\"><?= nl2br(htmlspecialchars($lead)) ?><\/p>\n          <?php endif; ?>\n\n          <?php if ($cta !== ''): ?>\n            <button\n              type=\"button\"\n              class=\"hero-v12__cta btn btn--primary\"\n              data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('leave-review')) ?>\"\n              data-remote=\"1\"\n            >\n              <?= htmlspecialchars($cta) ?>\n            <\/button>\n          <?php endif; ?>\n        <\/div>\n\n        <?php if ($trust_text !== ''): ?>\n          <div class=\"hero-v12__trust\">\n            <?php if ($trust_icon !== ''): ?>\n              <span class=\"hero-v12__trust-icon\" aria-hidden=\"true\">\n                <img\n                  src=\"<?= htmlspecialchars($trust_icon) ?>\"\n                  alt=\"\"\n                  width=\"28\"\n                  height=\"36\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <\/span>\n            <?php endif; ?>\n            <span class=\"hero-v12__trust-text bodytext-md\"><?= htmlspecialchars($trust_text) ?><\/span>\n          <\/div>\n        <?php endif; ?>\n      <\/div>\n\n      <?php if (!empty($stats)): ?>\n        <div class=\"hero-v12__stats\">\n          <?php foreach ($stats as $stat): ?>\n            <?php\n              $stat_icon = trim((string) ($stat['icon'] ?? ''));\n              $icon_width = max(1, (int) ($stat['icon_width'] ?? 54));\n              $icon_height = max(1, (int) ($stat['icon_height'] ?? 54));\n            ?>\n            <div class=\"hero-v12__stat\">\n              <?php if ($stat_icon !== ''): ?>\n                <span class=\"hero-v12__stat-icon\" aria-hidden=\"true\">\n                  <img\n                    src=\"<?= htmlspecialchars($stat_icon) ?>\"\n                    alt=\"\"\n                    width=\"<?= $icon_width ?>\"\n                    height=\"<?= $icon_height ?>\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                    style=\"--hero-v12-icon-w:<?= $icon_width ?>px;--hero-v12-icon-h:<?= $icon_height ?>px;aspect-ratio:<?= $icon_width ?>\/<?= $icon_height ?>\"\n                  >\n                <\/span>\n              <?php endif; ?>\n              <span class=\"hero-v12__stat-copy\">\n                <?php if (!empty($stat['value'])): ?>\n                  <span class=\"hero-v12__stat-value\"><?= htmlspecialchars($stat['value']) ?><\/span>\n                <?php endif; ?>\n                <?php if (!empty($stat['text'])): ?>\n                  <span class=\"hero-v12__stat-text bodytext-md\"><?= htmlspecialchars($stat['text']) ?><\/span>\n                <?php endif; ?>\n              <\/span>\n            <\/div>\n          <?php endforeach; ?>\n        <\/div>\n      <?php endif; ?>\n    <\/div>\n  <\/div>\n<\/section>",
            "reviews-variant-6": "<?php\n$reviews_v6_normalize_rating = static function ($rating): float {\n    if (!is_numeric($rating)) {\n        return 5.0;\n    }\n\n    return round(max(1, min(5, (float) $rating)), 1);\n};\n\n$reviews_v6_render_stars = static function (float $rating, string $size = 'lg'): void {\n    $rating = max(0, min(5, round($rating, 1)));\n    ?>\n    <span\n      class=\"stars-rating stars-rating--<?= htmlspecialchars($size) ?>\"\n      style=\"--stars-rating-value: <?= htmlspecialchars(number_format($rating, 1, '.', '')) ?>\"\n      aria-hidden=\"true\"\n    >\n      <span class=\"stars-rating__layer stars-rating__layer--empty\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n      <span class=\"stars-rating__layer stars-rating__layer--fill\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n    <\/span>\n    <?php\n};\n?>\n<section\n  class=\"reviews-v6 <?= htmlspecialchars(trim(\\app\\generator\\SectionBg::classString($section_bg) . ' ' . \\app\\generator\\ReviewCardBg::classString($card_bg, 'reviews-v6'))) ?>\"\n>\n  <div class=\"container\">\n    <div class=\"reviews-v6__inner stack stack--xl\">\n      <?php if ($title !== ''): ?>\n        <?= '<' . $heading_level . ' class=\"reviews-v6__title bodytext-lg\">' ?>\n          <?= htmlspecialchars($title) ?>\n        <?= '<\/' . $heading_level . '>' ?>\n      <?php endif; ?>\n\n      <div class=\"reviews-v6__grid\">\n        <?php foreach ($platforms as $platform): ?>\n          <?php\n            $rating = $reviews_v6_normalize_rating($platform['rating'] ?? 5);\n            $rating_value = number_format($rating, 1, '.', '');\n            $platform_url = trim($platform['url'] ?? '');\n            $logo_w = max(1, (int) ($platform['logo_w'] ?? 196));\n            $logo_h = max(1, (int) ($platform['logo_h'] ?? 42));\n          ?>\n          <?php if ($platform_url !== ''): ?>\n            <a\n              class=\"reviews-v6__card\"\n              href=\"<?= htmlspecialchars($platform_url) ?>\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> на площадке\"\n            >\n          <?php else: ?>\n            <div class=\"reviews-v6__card\" aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> на площадке\">\n          <?php endif; ?>\n            <p class=\"reviews-v6__score displaytext\"><?= htmlspecialchars($rating_value) ?><\/p>\n            <div class=\"reviews-v6__meta stack stack--sm\">\n              <div class=\"reviews-v6__stars\" aria-hidden=\"true\">\n                <?php $reviews_v6_render_stars($rating, 'lg'); ?>\n              <\/div>\n              <?php if (!empty($platform['logo'])): ?>\n                <img\n                  class=\"reviews-v6__logo\"\n                  src=\"<?= htmlspecialchars($platform['logo']) ?>\"\n                  alt=\"\"\n                  width=\"<?= $logo_w ?>\"\n                  height=\"<?= $logo_h ?>\"\n                  style=\"--reviews-v6-logo-w: <?= $logo_w ?>px; --reviews-v6-logo-h: <?= $logo_h ?>px\"\n                  loading=\"lazy\"\n                  decoding=\"async\"\n                >\n              <?php endif; ?>\n            <\/div>\n          <?php if ($platform_url !== ''): ?>\n            <\/a>\n          <?php else: ?>\n            <\/div>\n          <?php endif; ?>\n        <?php endforeach; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "reviews-variant-5": "<?php\n  $reviews_total = count($reviews);\n  $reviews_v5_filter_mode = ($filter_action_url !== '' && $filter_action_url !== '#') ? 'server' : 'client';\n  $reviews_v5_has_more = $reviews_total > $current_page * $initial_limit;\n?>\n<?php\n$reviews_v5_filter_keys = array_map(static function (array $field): string {\n    return (string) ($field['id'] ?? '');\n}, $filter_fields);\n\n$reviews_v5_filter_attr = static function (array $review, string $key): string {\n    $map = [\n        'source'  => trim((string) ($review['source'] ?? '')),\n        'service' => trim((string) ($review['service_key'] ?? '')),\n        'doctor'  => trim((string) ($review['doctor_key'] ?? '')),\n    ];\n    $value = $map[$key] ?? '';\n\n    return $value !== '' ? $value : 'all';\n};\n\n$reviews_v5_author = static function (array $review): string {\n    $name = trim($review['name'] ?? '');\n    $age = trim($review['age'] ?? '');\n    if ($name !== '' && $age !== '') {\n        return $name . ', ' . $age;\n    }\n\n    return $name !== '' ? $name : $age;\n};\n\n$reviews_v5_normalize_rating = static function ($rating): float {\n    if (!is_numeric($rating)) {\n        return 5.0;\n    }\n\n    return round(max(1, min(5, (float) $rating)), 1);\n};\n\n$reviews_v5_rating_stars = static function (float $rating): int {\n    return max(0, min(5, (int) floor($rating + 0.001)));\n};\n\n$reviews_v5_rating_label = static function (array $review) use ($reviews_v5_normalize_rating, $reviews_v5_rating_stars): string {\n    $custom = trim($review['rating_label'] ?? '');\n    if ($custom !== '') {\n        return $custom;\n    }\n\n    $rating = $reviews_v5_normalize_rating($review['rating'] ?? 5);\n    $tier = max(1, $reviews_v5_rating_stars($rating));\n    $labels = [\n        5 => 'Отлично',\n        4 => 'Хорошо',\n        3 => 'Нормально',\n        2 => 'Плохо',\n        1 => 'Ужасно',\n    ];\n\n    return ($labels[$tier] ?? 'Отлично') . ' \/ ' . number_format($rating, 1, '.', '');\n};\n\n$reviews_v5_rating_tier = static function (array $review) use ($reviews_v5_normalize_rating, $reviews_v5_rating_stars): int {\n    $rating = $reviews_v5_normalize_rating($review['rating'] ?? 5);\n\n    return max(1, $reviews_v5_rating_stars($rating));\n};\n\n$reviews_v5_render_stars = static function (float $rating, string $size = 'sm'): void {\n    $rating = max(0, min(5, round($rating, 1)));\n    ?>\n    <span\n      class=\"stars-rating stars-rating--<?= htmlspecialchars($size) ?>\"\n      style=\"--stars-rating-value: <?= htmlspecialchars(number_format($rating, 1, '.', '')) ?>\"\n      aria-hidden=\"true\"\n    >\n      <span class=\"stars-rating__layer stars-rating__layer--empty\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n      <span class=\"stars-rating__layer stars-rating__layer--fill\">\n        <?php for ($i = 0; $i < 5; $i++): ?>\n          <svg class=\"icon stars-rating__icon\" aria-hidden=\"true\">\n            <use href=\"#icon-star\"><\/use>\n          <\/svg>\n        <?php endfor; ?>\n      <\/span>\n    <\/span>\n    <?php\n};\n?>\n<section\n  class=\"reviews-v5 <?= htmlspecialchars(trim(\\app\\generator\\SectionBg::classString($section_bg) . ' ' . \\app\\generator\\ReviewCardBg::classString($card_bg, 'reviews-v5'))) ?>\"\n  data-reviews-v5-limit=\"<?= (int) $initial_limit ?>\"\n  data-reviews-v5-page=\"<?= (int) $current_page ?>\"\n  data-reviews-v5-total=\"<?= (int) $reviews_total ?>\"\n  data-reviews-v5-mode=\"<?= htmlspecialchars($reviews_v5_filter_mode) ?>\"\n  <?php if ($reviews_api_url !== ''): ?>\n    data-reviews-v5-api-url=\"<?= htmlspecialchars($reviews_api_url) ?>\"\n  <?php endif; ?>\n  data-reviews-v5-page-param=\"<?= htmlspecialchars($page_param) ?>\"\n  data-reviews-v5-limit-param=\"<?= htmlspecialchars($limit_param) ?>\"\n  data-reviews-v5-has-more=\"<?= $reviews_v5_has_more ? '1' : '0' ?>\"\n>\n  <div class=\"container\">\n    <div class=\"reviews-v5__grid\">\n      <div class=\"reviews-v5__main stack stack--xl\">\n        <ul class=\"reviews-v5__list\" data-reviews-v5-list>\n          <?php foreach ($reviews as $index => $review): ?>\n            <?php\n              $rating = $reviews_v5_normalize_rating($review['rating'] ?? 5);\n              $rating_value = number_format($rating, 1, '.', '');\n              $rating_tier = $reviews_v5_rating_tier($review);\n              $author_line = $reviews_v5_author($review);\n              $is_collapsed = $index >= $initial_limit && count($reviews) > $initial_limit;\n            ?>\n            <li\n              class=\"reviews-v5__item<?= $is_collapsed ? ' is-collapsed' : '' ?>\"\n              data-reviews-v5-item\n              <?php if (!empty($review['id'])): ?>\n                data-reviews-v5-id=\"<?= (int) $review['id'] ?>\"\n              <?php endif; ?>\n              data-reviews-v5-source=\"<?= htmlspecialchars($reviews_v5_filter_attr($review, 'source')) ?>\"\n              data-reviews-v5-service=\"<?= htmlspecialchars($reviews_v5_filter_attr($review, 'service')) ?>\"\n              data-reviews-v5-doctor=\"<?= htmlspecialchars($reviews_v5_filter_attr($review, 'doctor')) ?>\"\n              data-reviews-v5-rating=\"<?= (int) $rating_tier ?>\"\n            >\n              <article class=\"reviews-v5__card stack stack--md\">\n                <div class=\"reviews-v5__card-top\">\n                  <div class=\"reviews-v5__rating-head\" aria-label=\"Оценка <?= htmlspecialchars($rating_value) ?> из 5\">\n                    <p class=\"reviews-v5__rating-label bodytext-md\"><?= htmlspecialchars($reviews_v5_rating_label($review)) ?><\/p>\n                    <svg class=\"icon reviews-v5__rating-star\" aria-hidden=\"true\">\n                      <use href=\"#icon-star\"><\/use>\n                    <\/svg>\n                  <\/div>\n                  <?php if ($author_line !== ''): ?>\n                    <p class=\"reviews-v5__author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                  <?php endif; ?>\n                <\/div>\n\n                <div class=\"reviews-v5__card-body stack stack--md\">\n                  <div class=\"reviews-v5__quote-block stack stack--sm\">\n                    <p class=\"reviews-v5__quote bodytext-md\"><?= htmlspecialchars($review['text']) ?><\/p>\n                    <button type=\"button\" class=\"reviews-v5__read-more\" data-reviews-v5-read-full hidden>\n                      <?= htmlspecialchars($read_full_label) ?>\n                    <\/button>\n                  <\/div>\n\n                  <?php if (!empty($review['service']) || !empty($review['doctor'])): ?>\n                    <div class=\"reviews-v5__meta-row\">\n                      <?php if (!empty($review['service'])): ?>\n                        <p class=\"reviews-v5__meta bodytext-strong\">\n                          <span class=\"reviews-v5__meta-label\"><?= htmlspecialchars($meta_service_label) ?><\/span>\n                          <span class=\"reviews-v5__meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                        <\/p>\n                      <?php endif; ?>\n                      <?php if (!empty($review['service']) && !empty($review['doctor'])): ?>\n                        <span class=\"reviews-v5__meta-divider\" aria-hidden=\"true\"><\/span>\n                      <?php endif; ?>\n                      <?php if (!empty($review['doctor'])): ?>\n                        <p class=\"reviews-v5__meta bodytext-strong\">\n                          <span class=\"reviews-v5__meta-label\"><?= htmlspecialchars($meta_doctor_label) ?><\/span>\n                          <span class=\"reviews-v5__meta-value\"><?= htmlspecialchars($review['doctor']) ?><\/span>\n                        <\/p>\n                      <?php endif; ?>\n                    <\/div>\n                  <?php endif; ?>\n\n                  <?php if (!empty($review['source_logo']) || !empty($review['date'])): ?>\n                    <div class=\"reviews-v5__card-foot\">\n                      <?php if (!empty($review['source_logo'])): ?>\n                        <img\n                          class=\"reviews-v5__source-logo\"\n                          src=\"<?= htmlspecialchars($review['source_logo']) ?>\"\n                          alt=\"\"\n                          width=\"124\"\n                          height=\"21\"\n                          loading=\"lazy\"\n                          decoding=\"async\"\n                        >\n                      <?php else: ?>\n                        <span aria-hidden=\"true\"><\/span>\n                      <?php endif; ?>\n                      <?php if (!empty($review['date'])): ?>\n                        <p class=\"reviews-v5__date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                      <?php endif; ?>\n                    <\/div>\n                  <?php endif; ?>\n                <\/div>\n\n                <template class=\"reviews-v5__full-template\">\n                  <div class=\"popup__review-head\">\n                    <?php $reviews_v5_render_stars($rating, 'sm'); ?>\n                    <?php if ($author_line !== ''): ?>\n                      <p class=\"popup__review-author bodytext-strong\"><?= htmlspecialchars($author_line) ?><\/p>\n                    <?php endif; ?>\n                  <\/div>\n                  <div class=\"popup__review-quote\" data-reviews-v5-popup-quote><\/div>\n                  <?php if (!empty($review['service'])): ?>\n                    <p class=\"popup__review-meta-row bodytext-strong\">\n                      <span class=\"popup__review-meta-label\"><?= htmlspecialchars($meta_service_label) ?><\/span>\n                      <span class=\"popup__review-meta-value\"><?= htmlspecialchars($review['service']) ?><\/span>\n                    <\/p>\n                  <?php endif; ?>\n                  <?php if (!empty($review['doctor'])): ?>\n                    <p class=\"popup__review-meta-row bodytext-strong\">\n                      <span class=\"popup__review-meta-label\"><?= htmlspecialchars($meta_doctor_label) ?><\/span>\n                      <span class=\"popup__review-meta-value\"><?= htmlspecialchars($review['doctor']) ?><\/span>\n                    <\/p>\n                  <?php endif; ?>\n                  <?php if (!empty($review['source_logo']) || !empty($review['date'])): ?>\n                    <div class=\"popup__review-foot\">\n                      <?php if (!empty($review['source_logo'])): ?>\n                        <img class=\"popup__review-source\" src=\"<?= htmlspecialchars($review['source_logo']) ?>\" alt=\"\" width=\"124\" height=\"21\" loading=\"lazy\" decoding=\"async\">\n                      <?php endif; ?>\n                      <?php if (!empty($review['date'])): ?>\n                        <p class=\"popup__review-date bodytext-strong\"><?= htmlspecialchars($review['date']) ?><\/p>\n                      <?php endif; ?>\n                    <\/div>\n                  <?php endif; ?>\n                <\/template>\n              <\/article>\n            <\/li>\n          <?php endforeach; ?>\n        <\/ul>\n\n        <p class=\"reviews-v5__empty bodytext-md\" data-reviews-v5-empty hidden>\n          <?= htmlspecialchars($empty_label) ?>\n        <\/p>\n\n        <div class=\"reviews-v5__more-wrap\" hidden>\n          <button\n            type=\"button\"\n            class=\"reviews-v5__more btn btn--secondary bodytext-sm\"\n            data-reviews-v5-more\n            hidden\n          >\n            <?= htmlspecialchars($more_label) ?>\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <aside class=\"reviews-v5__filters\" aria-label=\"<?= htmlspecialchars($filters_title) ?>\">\n        <div class=\"reviews-v5__filters-panel is-collapsed\" data-reviews-v5-filters-panel>\n          <div class=\"reviews-v5__filters-inner\">\n            <div class=\"reviews-v5__filters-head\">\n              <button\n                type=\"button\"\n                class=\"reviews-v5__filters-toggle\"\n                data-reviews-v5-filters-toggle\n                aria-expanded=\"false\"\n              >\n                <span class=\"reviews-v5__filters-title leadtext-xl\"><?= htmlspecialchars($filters_title) ?><\/span>\n                <span class=\"reviews-v5__filters-toggle-mark\" aria-hidden=\"true\">\n                  <svg class=\"icon reviews-v5__filters-toggle-icon\" width=\"10\" height=\"18\" aria-hidden=\"true\">\n                    <use href=\"#icon-field-chevron\"><\/use>\n                  <\/svg>\n                <\/span>\n              <\/button>\n            <\/div>\n\n            <div class=\"reviews-v5__filters-body stack stack--lg\" data-reviews-v5-filters-body>\n            <form\n              class=\"reviews-v5__filters-form stack stack--lg\"\n              action=\"<?= htmlspecialchars($filter_action_url) ?>\"\n              method=\"get\"\n              data-reviews-v5-filters-form\n            >\n              <input type=\"hidden\" name=\"<?= htmlspecialchars($page_param) ?>\" value=\"1\" data-reviews-v5-page-field>\n              <input type=\"hidden\" name=\"<?= htmlspecialchars($limit_param) ?>\" value=\"<?= (int) $initial_limit ?>\">\n              <div class=\"reviews-v5__filters-fields stack stack--md\">\n                <?php foreach ($filter_fields as $field): ?>\n                  <?php $active_value = $active_filters[$field['id']] ?? 'all'; ?>\n                  <label class=\"field reviews-v5__field\">\n                    <span class=\"field__label bodytext-sm reviews-v5__field-label\"><?= htmlspecialchars($field['label']) ?><\/span>\n                    <span class=\"reviews-v5__select-wrap\">\n                      <select\n                        class=\"field__input reviews-v5__select bodytext\"\n                        name=\"<?= htmlspecialchars($field['id']) ?>\"\n                        data-reviews-v5-filter=\"<?= htmlspecialchars($field['id']) ?>\"\n                      >\n                        <?php foreach ($field['options'] as $option_index => $option): ?>\n                          <option\n                            value=\"<?= htmlspecialchars($option['value']) ?>\"\n                            <?= ($option['value'] === $active_value || ($active_value === '' && $option_index === 0)) ? ' selected' : '' ?>\n                          >\n                            <?= htmlspecialchars($option['label']) ?>\n                          <\/option>\n                        <?php endforeach; ?>\n                      <\/select>\n                      <svg class=\"icon reviews-v5__select-chevron\" width=\"7\" height=\"14\" aria-hidden=\"true\">\n                        <use href=\"#icon-field-chevron\"><\/use>\n                      <\/svg>\n                    <\/span>\n                  <\/label>\n                <?php endforeach; ?>\n              <\/div>\n\n              <button\n                type=\"submit\"\n                class=\"reviews-v5__filters-submit btn bodytext-md\"\n                data-reviews-v5-filter-submit\n                <?= $reviews_v5_filter_mode === 'client' ? ' disabled' : '' ?>\n              >\n                <?= htmlspecialchars($filter_submit_label) ?>\n              <\/button>\n            <\/form>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n<\/section>",
            "hero-variant-9": "<?php\n  $has_text = ['\\\\app\\\\generator\\\\ContentPresence', 'hasText'];\n  $stats = \\app\\generator\\ContentPresence::items($stats, ['value']);\n  $specialties = array_values(array_filter($specialties, $has_text));\n  $has_rating = is_numeric($rating) && $reviews_count > 0 && $has_text($reviews_url);\n  $has_meta = $has_rating || $has_text($experience_badge);\n?>\n<?php\n  $lcp_image = $doctor_image;\n  $question_label = trim((string) $question_label);\n  $has_question = $has_text($question_label);\n  $video_media = trim((string) $video_media);\n  $video_label = trim((string) $video_label);\n  $video_duration = trim((string) $video_duration);\n  $has_video = $video_media !== '';\n?>\n<section class=\"hero-v9 has-block-bg section-pad-top-lg\">\n  <div class=\"hero-v9__bg block-bg\" aria-hidden=\"true\">\n    <img src=\"<?= htmlspecialchars($bg_image) ?>\" alt=\"<?= htmlspecialchars($bg_alt) ?>\" loading=\"lazy\" decoding=\"async\">\n  <\/div>\n\n  <div class=\"container\">\n    <div class=\"hero-v9__grid\">\n      <div class=\"hero-v9__content stack\">\n<?php if ($has_meta): ?>\n        <div class=\"hero-v9__meta\">\n<?php if ($has_rating): ?>\n          <a class=\"hero-v9__chip hero-v9__chip--link\" href=\"<?= htmlspecialchars($reviews_url) ?>\">\n            <svg class=\"icon hero-v9__chip-star\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n              <use href=\"#icon-star\"><\/use>\n            <\/svg>\n            <span class=\"hero-v9__chip-text bodytext-strong\"><?= htmlspecialchars(number_format($rating, 1, '.', '')) ?><\/span>\n            <span class=\"hero-v9__chip-text bodytext-strong\">Отзывы (<?= (int) $reviews_count ?>)<\/span>\n          <\/a>\n<?php endif; ?>\n<?php if ($has_text($experience_badge)): ?>\n          <span class=\"hero-v9__chip bodytext-strong\"><?= htmlspecialchars($experience_badge) ?><\/span>\n<?php endif; ?>\n        <\/div>\n<?php endif; ?>\n\n        <?php if ($has_text($title)): ?><<?= $heading_level ?> class=\"hero-v9__title displaytext\"><?= htmlspecialchars($title) ?><\/<?= $heading_level ?>><?php endif; ?>\n\n        <?php if (!empty($specialties)): ?>\n          <p class=\"hero-v9__roles bodytext-lg\">\n            <?php foreach ($specialties as $index => $specialty): ?>\n              <?php if ($index > 0): ?>\n                <span class=\"hero-v9__roles-dot\" aria-hidden=\"true\"><\/span>\n              <?php endif; ?>\n              <span><?= htmlspecialchars($specialty) ?><\/span>\n            <?php endforeach; ?>\n          <\/p>\n        <?php endif; ?>\n\n        <?php if (!empty($stats)): ?>\n          <div class=\"hero-v9__stats\">\n            <?php foreach ($stats as $stat): ?>\n              <?php\n                $stat_icon = trim((string) ($stat['icon'] ?? ''));\n                $has_stat_icon = $stat_icon !== '';\n              ?>\n              <div class=\"hero-v9__stat<?= $has_stat_icon ? '' : ' hero-v9__stat--no-icon' ?>\">\n                <?php if ($has_stat_icon): ?>\n                  <span class=\"hero-v9__stat-icon\" aria-hidden=\"true\">\n                    <img src=\"<?= htmlspecialchars($stat_icon) ?>\" alt=\"\" width=\"36\" height=\"36\" loading=\"lazy\" decoding=\"async\">\n                  <\/span>\n                <?php endif; ?>\n                <div class=\"hero-v9__stat-copy stack\">\n                  <?php if ($has_text($stat['label_top'] ?? '')): ?>\n                    <span class=\"hero-v9__stat-label bodytext-strong\"><?= htmlspecialchars($stat['label_top']) ?><\/span>\n                  <?php endif; ?>\n                  <?php if ($has_text($stat['value'] ?? '')): ?>\n                    <span class=\"hero-v9__stat-value bodytext-lg\"><?= htmlspecialchars($stat['value']) ?><\/span>\n                  <?php endif; ?>\n                  <?php if ($has_text($stat['label_bottom'] ?? '')): ?>\n                    <span class=\"hero-v9__stat-label bodytext-strong\"><?= htmlspecialchars($stat['label_bottom']) ?><\/span>\n                  <?php endif; ?>\n                <\/div>\n              <\/div>\n            <?php endforeach; ?>\n          <\/div>\n        <?php endif; ?>\n\n        <?php if ($has_text($cta) || $has_question): ?><div class=\"hero-v9__actions actions-row\">\n<?php if ($has_text($cta)): ?>\n          <button type=\"button\" class=\"btn btn--primary hero-v9__cta\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\">\n            <?= htmlspecialchars($cta) ?>\n          <\/button>\n<?php endif; ?>\n\n          <?php if ($has_question): ?>\n            <button type=\"button\" class=\"hero-v9__question\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('question')) ?>\" data-remote=\"1\">\n              <span class=\"hero-v9__question-icon\" aria-hidden=\"true\">\n                <img src=\"\/assets\/src\/img\/cta\/cta-v1-icon-question.svg\" alt=\"\" width=\"32\" height=\"32\" loading=\"lazy\" decoding=\"async\">\n              <\/span>\n              <span class=\"hero-v9__question-label bodytext-lg\"><?= htmlspecialchars($question_label) ?><\/span>\n            <\/button>\n          <?php endif; ?>\n        <\/div><?php endif; ?>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"hero-v9__foot\">\n    <img\n      class=\"hero-v9__doctor\"\n      src=\"<?= htmlspecialchars($doctor_image) ?>\"\n      alt=\"<?= htmlspecialchars($doctor_alt) ?>\"\n      width=\"819\"\n      height=\"819\"\n      <?= \\app\\generator\\PageCriticalResources::imgAttrs($doctor_image) ?>\n    >\n\n    <?php if ($has_video): ?>\n      <a class=\"hero-v9__video-card\"\n         href=\"#\"\n         data-popup-open=\"media\"\n         data-popup-src=\"<?= htmlspecialchars($video_media) ?>\"\n         data-popup-kind=\"video\"\n         data-popup-alt=\"<?= htmlspecialchars($video_label) ?>\"\n      >\n        <span class=\"hero-v9__play-surface\" aria-hidden=\"true\">\n          <span class=\"hero-v9__play-bg\"><\/span>\n          <svg class=\"icon hero-v9__play-icon\" width=\"9\" height=\"10\" aria-hidden=\"true\">\n            <use href=\"#icon-play\"><\/use>\n          <\/svg>\n        <\/span>\n        <span class=\"hero-v9__video-copy stack\">\n          <?php if ($video_label !== ''): ?>\n            <span class=\"hero-v9__video-label bodytext-lg\"><?= htmlspecialchars($video_label) ?><\/span>\n          <?php endif; ?>\n          <?php if ($video_duration !== ''): ?>\n            <span class=\"hero-v9__video-duration bodytext-strong\"><?= htmlspecialchars($video_duration) ?><\/span>\n          <?php endif; ?>\n        <\/span>\n      <\/a>\n    <?php endif; ?>\n  <\/div>\n<\/section>",
            "progression-stages-variant-3": "<?php\n  $notice = trim((string) $notice);\n  $has_notice = $notice !== '';\n  $has_notice_icon = trim((string) $notice_icon) !== '';\n?>\n<section class=\"progression-stages-v3 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"progression-stages-v3__inner stack stack--xl\">\n      <div class=\"progression-stages-v3__head\">\n        <div class=\"progression-stages-v3__lead stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'progression-stages-v3__eyebrow') ?>\n          <<?= $heading_level ?> class=\"progression-stages-v3__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n        <\/div>\n\n        <?php if ($has_notice): ?>\n        <aside class=\"progression-stages-v3__notice<?= $has_notice_icon ? '' : ' progression-stages-v3__notice--no-icon' ?>\">\n          <?php if ($has_notice_icon): ?>\n            <span\n              class=\"progression-stages-v3__notice-icon\"\n              style=\"--progression-stages-v3-notice-icon: url('<?= htmlspecialchars(trim((string) $notice_icon), ENT_QUOTES) ?>')\"\n              aria-hidden=\"true\"\n            ><\/span>\n          <?php endif; ?>\n          <p class=\"progression-stages-v3__notice-text bodytext-lg\"><?= htmlspecialchars($notice) ?><\/p>\n        <\/aside>\n        <?php endif; ?>\n      <\/div>\n\n      <ul class=\"progression-stages-v3__cards\">\n        <?php foreach ($items as $index => $item): ?>\n          <?php\n          $num = str_pad((string) ($index + 1), 2, '0', STR_PAD_LEFT);\n          $item_icon = trim((string) ($item['icon'] ?? ''));\n          $has_item_icon = $item_icon !== '';\n          ?>\n          <li class=\"progression-stages-v3__card\">\n            <span class=\"progression-stages-v3__num\" aria-hidden=\"true\">\n              <span class=\"progression-stages-v3__num-val bodytext\"><?= htmlspecialchars($num) ?><\/span>\n              <span class=\"progression-stages-v3__num-slash leadtext-xl\">\/<\/span>\n            <\/span>\n\n            <?php if ($has_item_icon): ?>\n              <span\n                class=\"progression-stages-v3__icon\"\n                style=\"--progression-stages-v3-card-icon: url('<?= htmlspecialchars($item_icon, ENT_QUOTES) ?>')\"\n                aria-hidden=\"true\"\n              >\n                <span class=\"progression-stages-v3__icon-glyph\"><\/span>\n              <\/span>\n            <?php else: ?>\n              <span class=\"progression-stages-v3__icon-spacer\" aria-hidden=\"true\"><\/span>\n            <?php endif; ?>\n\n            <div class=\"progression-stages-v3__copy stack stack--sm\">\n              <p class=\"progression-stages-v3__card-title bodytext-lg\"><?= htmlspecialchars($item['title']) ?><\/p>\n              <p class=\"progression-stages-v3__card-text bodytext-md\"><?= htmlspecialchars($item['text']) ?><\/p>\n            <\/div>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>",
            "education-variant-1": "<?php\n  $medal_src = trim((string) ($medal_src ?? ''));\n  $has_medal = $medal_src !== '';\n?>\n<section class=\"education-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\"<?= $has_medal ? ' style=\"--education-v1-medal-src: url(\\'' . htmlspecialchars($medal_src, ENT_QUOTES) . '\\')\"' : '' ?>>\n  <div class=\"container\">\n    <div class=\"education-v1__grid\">\n      <div class=\"education-v1__lead-wrap\">\n        <div class=\"education-v1__lead stack stack--md\">\n          <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'education-v1__eyebrow') ?>\n\n          <div class=\"titles\">\n            <<?= $heading_level ?> class=\"education-v1__title megatext\"><?= $title ?><\/<?= $heading_level ?>>\n            <p class=\"education-v1__subtitle leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n          <\/div>\n\n          <div class=\"education-v1__stats-card<?= $has_medal ? '' : ' education-v1__stats-card--no-medal' ?>\">\n            <?php if ($has_medal): ?>\n              <span class=\"education-v1__stats-medal\" aria-hidden=\"true\"><\/span>\n            <?php endif; ?>\n\n            <div class=\"education-v1__stats-list\">\n              <?php foreach ($stats as $stat): ?>\n                <div class=\"education-v1__stat stack stack--sm\">\n                  <p class=\"education-v1__stat-value megatext-md\"><?= htmlspecialchars($stat['value']) ?><\/p>\n                  <p class=\"education-v1__stat-label bodytext-md\"><?= htmlspecialchars($stat['label']) ?><\/p>\n                <\/div>\n              <?php endforeach; ?>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"education-v1__content\">\n        <div class=\"education-v1__cards\">\n          <?php foreach ($groups as $group): ?>\n            <article class=\"education-v1__card\">\n              <div class=\"education-v1__card-body stack stack--sm\">\n                <h3 class=\"education-v1__card-title leadtext\"><?= htmlspecialchars($group['title']) ?><\/h3>\n\n                <?php if (!empty($group['items'])): ?>\n                  <div class=\"education-v1__rows\">\n                    <?php foreach ($group['items'] as $item): ?>\n                      <div class=\"education-v1__row\">\n                        <p class=\"education-v1__period bodytext-md\"><?= htmlspecialchars($item['period']) ?><\/p>\n                        <p class=\"education-v1__text bodytext-md\"><?= htmlspecialchars($item['text']) ?><\/p>\n                      <\/div>\n                    <?php endforeach; ?>\n                  <\/div>\n                <?php endif; ?>\n\n                <?php if (!empty($group['bullets'])): ?>\n                  <ul class=\"education-v1__bullets\">\n                    <?php foreach ($group['bullets'] as $bullet): ?>\n                      <li class=\"education-v1__bullet bodytext-md\"><?= htmlspecialchars($bullet) ?><\/li>\n                    <?php endforeach; ?>\n                  <\/ul>\n                <?php endif; ?>\n              <\/div>\n            <\/article>\n          <?php endforeach; ?>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>",
            "certificates-variant-1": "<?php\n  $pdf_icon_src = trim((string) $pdf_icon_src);\n  $has_pdf_icon = $pdf_icon_src !== '';\n?>\n<section class=\"certificates-v1 <?= htmlspecialchars(\\app\\generator\\SectionBg::classString($section_bg)) ?>\">\n  <div class=\"container\">\n    <div class=\"certificates-v1__grid\">\n      <div class=\"certificates-v1__lead stack stack--md\">\n        <?= \\app\\generator\\Eyebrow::renderBlock($eyebrow, 'certificates-v1__eyebrow') ?>\n        <div class=\"titles\">\n          <<?= $heading_level ?> class=\"certificates-v1__title megatext\">\n            <?= $title ?>\n          <\/<?= $heading_level ?>>\n          <p class=\"certificates-v1__subtitle leadtext-xl\"><?= htmlspecialchars($lead) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <ul class=\"certificates-v1__list\">\n        <?php foreach ($items as $item): ?>\n          <?php\n            $item_file = trim((string) ($item['file'] ?? ''));\n            $has_file = $item_file !== '';\n            $card_class = 'certificates-v1__card';\n            if (!$has_pdf_icon) {\n                $card_class .= ' certificates-v1__card--no-pdf-icon';\n            }\n            if (!$has_file) {\n                $card_class .= ' certificates-v1__card--no-download';\n            }\n          ?>\n          <li class=\"<?= htmlspecialchars($card_class) ?>\">\n            <?php if ($has_pdf_icon): ?>\n              <span class=\"certificates-v1__pdf-icon\" aria-hidden=\"true\"><\/span>\n            <?php endif; ?>\n            <div class=\"certificates-v1__card-body stack stack--sm\">\n              <p class=\"certificates-v1__card-title bodytext-lg\"><?= htmlspecialchars($item['title']) ?><\/p>\n              <p class=\"certificates-v1__card-type bodytext-strong\"><?= htmlspecialchars($type_label) ?><\/p>\n            <\/div>\n            <?php if ($has_file): ?>\n              <a\n                class=\"certificates-v1__download\"\n                href=\"<?= htmlspecialchars($item_file) ?>\"\n                download\n              >\n                <span class=\"certificates-v1__download-label bodytext-sm\"><?= htmlspecialchars($download_label) ?><\/span>\n                <svg class=\"icon certificates-v1__download-icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                  <use href=\"#icon-download\"><\/use>\n                <\/svg>\n              <\/a>\n            <?php endif; ?>\n          <\/li>\n        <?php endforeach; ?>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>"
        },
        "layout": {
            "header": "<?php\n$site_header_root_classes = ['site-header', 'site-header-v1'];\nif (!empty($header_tool_icon_bg)) {\n    $site_header_root_classes[] = 'site-header-v1--tool-icon-bg';\n}\n?>\n<header class=\"<?= htmlspecialchars(implode(' ', $site_header_root_classes), ENT_QUOTES, 'UTF-8') ?>\" data-header-root>\n  <div class=\"site-header__shell\">\n    <div class=\"container\">\n      <div class=\"site-header__top\">\n        <div class=\"site-header__brand-row\">\n          <a class=\"site-header__brand\" href=\"<?= htmlspecialchars($header_logo_url) ?>\" aria-label=\"Аленте Стом\">\n            <img class=\"site-header__logo\" src=\"\/assets\/src\/img\/logo.svg\" alt=\"Аленте Стом\" width=\"264\" height=\"65\" loading=\"eager\" decoding=\"async\">\n          <\/a>\n\n          <div class=\"site-header__location uimeta\">\n            <svg class=\"site-header__location-icon icon\" aria-hidden=\"true\">\n              <use href=\"#icon-location\"><\/use>\n            <\/svg>\n            <span><?= htmlspecialchars($header_address) ?><\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"site-header__tools\">\n          <a class=\"site-header__tool bvi-open\" href=\"#\" aria-label=\"Версия для слабовидящих\">\n            <span class=\"site-header__tool-icon\" aria-hidden=\"true\">\n              <svg class=\"icon\" aria-hidden=\"true\">\n                <use href=\"#icon-eye\"><\/use>\n              <\/svg>\n            <\/span>\n            <span class=\"site-header__tool-label uimeta\">Версия для слабовидящих<\/span>\n          <\/a>\n\n          <a class=\"site-header__tool\" href=\"#account\" aria-label=\"Личный кабинет\">\n            <span class=\"site-header__tool-icon\" aria-hidden=\"true\">\n              <svg class=\"icon\" aria-hidden=\"true\">\n                <use href=\"#icon-user\"><\/use>\n              <\/svg>\n            <\/span>\n            <span class=\"site-header__tool-label uimeta\">Личный кабинет<\/span>\n          <\/a>\n\n          <a class=\"site-header__phone\" href=\"tel:<?= htmlspecialchars(preg_replace('\/[^0-9+]\/', '', $header_phone)) ?>\">\n            <span class=\"site-header__phone-number bodytext-md\"><?= htmlspecialchars($header_phone) ?><\/span>\n            <span class=\"site-header__phone-hours bodytext-sm\"><?= htmlspecialchars($header_hours) ?><\/span>\n          <\/a>\n\n          <button type=\"button\" class=\"site-header__cta btn uibtntext\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\">\n            <?= htmlspecialchars($header_cta) ?>\n          <\/button>\n\n          <button\n            type=\"button\"\n            class=\"site-header__burger\"\n            aria-expanded=\"false\"\n            aria-controls=\"site-header-nav\"\n            aria-label=\"Открыть меню\"\n            data-header-toggle\n          >\n            <span><\/span>\n            <span><\/span>\n            <span><\/span>\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"site-header__nav-wrap glass glass--desktop-only\" id=\"site-header-nav\" data-header-panel>\n      <div class=\"container\">\n        <nav class=\"site-header__nav\" aria-label=\"Основная навигация\">\n          <ul class=\"site-header__menu\">\n            <?php foreach ($header_menu as $item): ?>\n              <?php $hasSub = !empty($item['submenu']); ?>\n              <?php $subId = $hasSub ? ('hdr-sub-' . substr(md5($item['label']), 0, 8)) : null; ?>\n              <?php\n                $menuItemExtraClass = $hasSub\n                  ? \\app\\generator\\HeaderDropdown::menuItemExtraClass($item['submenu'])\n                  : '';\n              ?>\n              <li\n                class=\"site-header__menu-item<?= $menuItemExtraClass !== '' ? ' ' . $menuItemExtraClass : '' ?>\"\n                <?= $hasSub ? 'data-dropdown' : '' ?>\n              >\n                <?php if ($hasSub): ?>\n                  <button\n                    type=\"button\"\n                    class=\"site-header__menu-link site-header__menu-link--toggle navtext\"\n                    aria-expanded=\"false\"\n                    aria-controls=\"<?= htmlspecialchars($subId) ?>\"\n                    data-dropdown-toggle\n                  >\n                    <span><?= htmlspecialchars($item['label']) ?><\/span>\n                    <span class=\"site-header__menu-dot\" aria-hidden=\"true\"><\/span>\n                  <\/button>\n\n                  <?php \\app\\generator\\HeaderDropdown::render($item, $subId); ?>\n                <?php else: ?>\n                  <a class=\"site-header__menu-link navtext\" href=\"<?= htmlspecialchars($item['url']) ?>\">\n                    <span><?= htmlspecialchars($item['label']) ?><\/span>\n                  <\/a>\n                <?php endif; ?>\n              <\/li>\n            <?php endforeach; ?>\n          <\/ul>\n        <\/nav>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/header>",
            "footer": "<footer class=\"site-footer footer-v1\" aria-label=\"Подвал сайта\">\n  <div class=\"container\">\n    <?php if (trim((string) $footer_decor) !== ''): ?>\n      <img class=\"footer-v1__bg\" src=\"<?= htmlspecialchars($footer_decor) ?>\" alt=\"\" aria-hidden=\"true\" loading=\"lazy\" decoding=\"async\">\n    <?php endif; ?>\n\n    <div class=\"footer-v1__top\">\n      <div class=\"footer-v1__brand\">\n        <a class=\"footer-v1__logo-link\" href=\"<?= htmlspecialchars($footer_logo_url) ?>\" aria-label=\"Аленте Стом\">\n          <img class=\"footer-v1__logo\" src=\"\/assets\/src\/img\/logo.svg\" alt=\"Аленте Стом\" width=\"264\" height=\"65\" loading=\"lazy\" decoding=\"async\">\n        <\/a>\n        <p class=\"footer-v1__tagline bodytext\"><?= htmlspecialchars($footer_tagline) ?><\/p>\n\n        <div class=\"footer-v1__contacts\">\n          <div class=\"footer-v1__contact-row bodytext-sm\">\n            <svg class=\"footer-v1__contact-icon icon\" aria-hidden=\"true\">\n              <use href=\"#icon-location\"><\/use>\n            <\/svg>\n            <span><?= htmlspecialchars($footer_address) ?><\/span>\n          <\/div>\n          <a class=\"footer-v1__contact-row footer-v1__contact-row--phone bodytext-sm\" href=\"tel:<?= htmlspecialchars(preg_replace('\/[^0-9+]\/', '', $footer_phone)) ?>\">\n            <svg class=\"footer-v1__contact-icon icon\" aria-hidden=\"true\">\n              <use href=\"#icon-phone\"><\/use>\n            <\/svg>\n            <span><?= htmlspecialchars($footer_phone) ?><\/span>\n          <\/a>\n          <p class=\"footer-v1__hours bodytext-sm\"><?= htmlspecialchars($footer_hours) ?><\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"footer-v1__menus\">\n        <nav class=\"footer-v1__nav\" aria-label=\"<?= htmlspecialchars($footer_nav_title) ?>\">\n          <p class=\"footer-v1__col-title bodytext-lg\"><?= htmlspecialchars($footer_nav_title) ?><\/p>\n          <ul class=\"footer-v1__list\">\n            <?php foreach ($footer_nav_cols as $col): ?>\n              <?php foreach ($col as $item): ?>\n                <li class=\"footer-v1__item\">\n                  <a class=\"footer-v1__link bodytext-lg-regular\" href=\"<?= htmlspecialchars($item['url']) ?>\"><?= htmlspecialchars($item['label']) ?><\/a>\n                <\/li>\n              <?php endforeach; ?>\n            <?php endforeach; ?>\n          <\/ul>\n        <\/nav>\n\n        <nav class=\"footer-v1__popular\" aria-label=\"<?= htmlspecialchars($footer_popular_title) ?>\">\n          <p class=\"footer-v1__col-title bodytext-lg\"><?= htmlspecialchars($footer_popular_title) ?><\/p>\n          <ul class=\"footer-v1__list\">\n            <?php foreach ($footer_popular_cols as $col): ?>\n              <?php foreach ($col as $item): ?>\n                <li class=\"footer-v1__item\">\n                  <a class=\"footer-v1__link bodytext-lg-regular\" href=\"<?= htmlspecialchars($item['url']) ?>\"><?= htmlspecialchars($item['label']) ?><\/a>\n                <\/li>\n              <?php endforeach; ?>\n            <?php endforeach; ?>\n          <\/ul>\n        <\/nav>\n      <\/div>\n\n      <div class=\"footer-v1__cta\">\n        <div class=\"footer-v1__cta-card\">\n          <div class=\"footer-v1__cta-head stack stack--sm\">\n            <p class=\"footer-v1__cta-title megatext-sm\"><?= htmlspecialchars($footer_form_title) ?><\/p>\n            <p class=\"footer-v1__cta-lead bodytext-lg\"><?= htmlspecialchars($footer_form_lead) ?><\/p>\n          <\/div>\n\n          <form class=\"footer-v1__form\" action=\"#\" method=\"post\">\n            <div class=\"footer-v1__form-row\">\n              <label class=\"footer-v1__field\">\n                <input class=\"field__input footer-v1__input\" type=\"tel\" name=\"phone\" aria-label=\"Телефон\" placeholder=\"+7 (___)-___-__-__\" autocomplete=\"tel\">\n              <\/label>\n              <button type=\"button\" class=\"btn btn--primary footer-v1__submit\" data-popup-open=\"<?= htmlspecialchars(\\app\\generator\\PageForms::id('cta')) ?>\" data-remote=\"1\"><?= htmlspecialchars($footer_form_btn) ?><\/button>\n            <\/div>\n            <label class=\"footer-v1__consent\">\n              <input class=\"footer-v1__checkbox\" type=\"checkbox\" name=\"consent\">\n              <span class=\"footer-v1__consent-text uimeta\"><?= $footer_form_consent_html ?><\/span>\n            <\/label>\n          <\/form>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"footer-v1__divider\" aria-hidden=\"true\"><\/div>\n\n    <div class=\"footer-v1__bottom\">\n      <div class=\"footer-v1__meta\">\n        <p class=\"footer-v1__meta-line uimeta\"><?= htmlspecialchars($footer_copyright) ?><\/p>\n        <p class=\"footer-v1__meta-line uimeta\"><?= htmlspecialchars($footer_company) ?><\/p>\n      <\/div>\n\n      <div class=\"footer-v1__bottom-links\">\n        <?php foreach ($footer_links as $link): ?>\n          <a class=\"footer-v1__bottom-link uimeta\" href=\"<?= htmlspecialchars($link['url']) ?>\"><?= htmlspecialchars($link['label']) ?><\/a>\n        <?php endforeach; ?>\n      <\/div>\n\n      <div class=\"footer-v1__aside\">\n        <a class=\"footer-v1__accessibility bvi-open\" href=\"<?= htmlspecialchars($footer_accessibility_url) ?>\">\n          <span class=\"footer-v1__accessibility-icon\" aria-hidden=\"true\">\n            <svg class=\"icon\" aria-hidden=\"true\">\n              <use href=\"#icon-eye\"><\/use>\n            <\/svg>\n          <\/span>\n          <span class=\"footer-v1__accessibility-label uimeta\"><?= htmlspecialchars($footer_accessibility_label) ?><\/span>\n        <\/a>\n\n        <div class=\"footer-v1__dev\">\n          <img class=\"footer-v1__dev-logo\" src=\"<?= htmlspecialchars($footer_dev_logo) ?>\" alt=\"Медицинский маркетинг Аленте\" width=\"221\" height=\"35\" loading=\"lazy\" decoding=\"async\">\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"footer-v1__legal\" aria-label=\"Юридическое предупреждение\">\n      <p class=\"footer-v1__legal-text megatext-md\"><?= htmlspecialchars($footer_disclaimer) ?><\/p>\n    <\/div>\n  <\/div>\n<\/footer>",
            "back-to-top": "<button type=\"button\" class=\"back-to-top\" aria-label=\"Наверх\" data-back-to-top hidden>\n  <span class=\"back-to-top__icon bodytext-lg\" aria-hidden=\"true\">↑<\/span>\n<\/button>"
        }
    },
    "config": [
        {
            "label": "Hero (Вар 2)",
            "name": "hero",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                }
            ],
            "items": [
                {
                    "label": "Слайд",
                    "fields": [
                        {
                            "name": "eyebrow",
                            "label": "Текст над заголовком"
                        },
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Подзаголовок"
                        },
                        {
                            "name": "link_title",
                            "label": "Текст кнопки"
                        },
                        {
                            "name": "image",
                            "label": "Фоновое изображение"
                        },
                        {
                            "name": "video",
                            "label": "Фоновое видео"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt текст фона"
                        }
                    ],
                    "subitems": {
                        "label": "Преимущество",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Текст преимущества"
                            },
                            {
                                "name": "icon_id",
                                "label": "Иконка"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Преимущества (Вар 2)",
            "name": "benefits",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "image",
                    "label": "Текстура фона"
                },
                {
                    "name": "icon_id",
                    "label": "Декор"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Наш подход (Вар 2)",
            "name": "our-approach",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title3",
                    "label": "Текст плашки"
                },
                {
                    "name": "icon_id",
                    "label": "Иконка плашки"
                },
                {
                    "name": "view",
                    "label": "Стиль нумерации шагов",
                    "type": "select",
                    "generator_name": "steps_num_style",
                    "items": {
                        "slash": "01 \/",
                        "badge": "Номер на подложке"
                    }
                },
                {
                    "name": "image",
                    "label": "Главное изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt текст для изображения"
                },
                {
                    "name": "eyebrow2",
                    "label": "Eyebrow CTA-блока"
                },
                {
                    "name": "title2",
                    "label": "Заголовок CTA-блока"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA-блока"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки CTA"
                }
            ],
            "items": [
                {
                    "label": "Шаг",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок шага"
                        },
                        {
                            "name": "description",
                            "label": "Текст шага"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Услуги (Вар 3)",
            "name": "services",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Подробнее»"
                },
                {
                    "name": "title2",
                    "label": "Текст ссылки «Все услуги»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все услуги»"
                },
                {
                    "name": "view",
                    "label": "Стиль активного таба",
                    "type": "select",
                    "generator_name": "tab_active_style",
                    "items": {
                        "filled": "filled",
                        "soft": "soft"
                    }
                },
                {
                    "name": "image",
                    "label": "Изображение по умолчанию (если у услуги нет своего)"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "Кейсы (Вар 1)",
            "name": "cases",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Кейс",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Категория"
                        },
                        {
                            "name": "description2",
                            "label": "Текст"
                        },
                        {
                            "name": "image",
                            "label": "Фото «До»"
                        },
                        {
                            "name": "image2",
                            "label": "Фото «После»"
                        }
                    ],
                    "subitems": {
                        "label": "Параметр",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Подпись"
                            },
                            {
                                "name": "param1",
                                "label": "Значение"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Врачи (Вар 4)",
            "name": "doctors",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки 'Все специалисты'"
                },
                {
                    "name": "link",
                    "label": "Ссылка 'Все специалисты'"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "param1",
                    "label": "Стиль плашек",
                    "type": "select",
                    "generator_name": "badge_style",
                    "items": {
                        "fill": "fill",
                        "border": "border"
                    }
                }
            ]
        },
        {
            "label": "quiz-variant-1",
            "name": "quiz",
            "variant": "variant-1"
        },
        {
            "label": "choosing-teeth-variant-1",
            "name": "choosing-teeth",
            "variant": "variant-1"
        },
        {
            "label": "Отзывы (Вар 1)",
            "name": "reviews",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки «Все отзывы»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все отзывы»"
                },
                {
                    "name": "title2",
                    "label": "Заголовок блока площадок"
                },
                {
                    "name": "title3",
                    "label": "Видеоотзыв: имя \/ заголовок CTA"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA"
                },
                {
                    "name": "description3",
                    "label": "Видеоотзыв: услуга"
                },
                {
                    "name": "param2",
                    "label": "Видеоотзыв: возраст"
                },
                {
                    "name": "number1",
                    "label": "Лимит текстовых отзывов"
                },
                {
                    "name": "number2",
                    "label": "Позиция видео в карусели"
                },
                {
                    "name": "number3",
                    "label": "Видеоотзыв: оценка"
                },
                {
                    "name": "image",
                    "label": "Видеоотзыв: постер"
                },
                {
                    "name": "video",
                    "label": "Видеоотзыв: файл"
                },
                {
                    "name": "param1",
                    "label": "Фон карточек",
                    "items": {
                        "mix": "mix",
                        "white": "white"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Площадка",
                    "fields": [
                        {
                            "name": "image",
                            "label": "Логотип"
                        },
                        {
                            "name": "title",
                            "label": "Количество отзывов (текст)"
                        },
                        {
                            "name": "param1",
                            "label": "Рейтинг"
                        },
                        {
                            "name": "param2",
                            "label": "Ширина логотипа"
                        },
                        {
                            "name": "param3",
                            "label": "Высота логотипа"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Планы лечения (Вар 1)",
            "name": "treatment-plans",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title2",
                    "label": "Текст доверия (понятные цены)"
                },
                {
                    "name": "description2",
                    "label": "Дисклеймер"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "План лечения",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название"
                        },
                        {
                            "name": "description",
                            "label": "Краткое описание"
                        },
                        {
                            "name": "icon",
                            "label": "Иконка"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "price",
                            "label": "Цена"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка"
                        },
                        {
                            "name": "description2",
                            "label": "Особенности (каждый пункт с новой строки)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Бренды (Вар 2)",
            "name": "brands",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Логотип",
                    "fields": [
                        {
                            "name": "image",
                            "label": "Логотип"
                        },
                        {
                            "name": "title",
                            "label": "Название (alt, если не задан alt)"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt-текст"
                        }
                    ]
                }
            ]
        },
        {
            "label": "UTP в цифрах (Вар 2)",
            "name": "utp-in-numbers",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Показатель",
                    "fields": [
                        {
                            "name": "title2",
                            "label": "Значение"
                        },
                        {
                            "name": "title",
                            "label": "Подпись"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt изображения"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Галерея (Вар 1)",
            "name": "gallery",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "link",
                    "label": "Попап кнопки"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Фото",
                    "fields": [
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt текст"
                        }
                    ]
                }
            ]
        },
        {
            "label": "О компании (Вар 1)",
            "name": "about",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "description2",
                    "label": "Текст"
                },
                {
                    "name": "description3",
                    "label": "Завершающий текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки"
                },
                {
                    "name": "link",
                    "label": "Ссылка"
                },
                {
                    "name": "member_id",
                    "label": "Сотрудник"
                },
                {
                    "name": "image",
                    "label": "Подпись"
                },
                {
                    "name": "view",
                    "label": "Вид",
                    "type": "select",
                    "generator_name": "profile_side",
                    "items": {
                        "right": "Изображение справа",
                        "left": "Изображение слева"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "News (Вар 2)",
            "name": "news",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки «Все новости»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все новости»"
                }
            ]
        },
        {
            "label": "Акции (Вар 2)",
            "name": "promo",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все предложения»"
                },
                {
                    "name": "link_title",
                    "label": "Текст «Все предложения»"
                }
            ]
        },
        {
            "label": "CTA (Вар 1)",
            "name": "cta",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view",
                    "label": "Ширина блока",
                    "type": "select",
                    "generator_name": "layout",
                    "items": {
                        "fullwidth": "На всю ширину",
                        "contained": "В контейнере"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt фона"
                },
                {
                    "name": "image2",
                    "label": "Фон на мобильном"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "view2",
                    "label": "Фон секции (режим «В контейнере»)",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Навигация (Вар 1)",
            "name": "navigation",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "title",
                    "label": "Заголовок навигации"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "Bg Gradient Page",
                        "bg-gradient-bottom-light": "Bg Gradient Bottom Light",
                        "bg-gradient-top-light": "Bg Gradient Top Light"
                    }
                },
                {
                    "name": "flag1",
                    "label": "Белая поверхность"
                }
            ],
            "items": [
                {
                    "label": "Пункт навигации",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Услуги (Вар 4)",
            "name": "services",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "number1",
                    "label": "Лимит карточек на mobile"
                },
                {
                    "name": "number2",
                    "label": "Количество рядов на desktop"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Показать ещё»"
                },
                {
                    "name": "flag1",
                    "label": "Показывать поиск",
                    "type": "checkbox",
                    "generator_name": "show_search"
                },
                {
                    "name": "title2",
                    "label": "Placeholder поиска"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                },
                {
                    "name": "view3",
                    "label": "Стиль фильтров",
                    "type": "select",
                    "generator_name": "chip_style",
                    "items": {
                        "surface": "Заливка surface",
                        "decor-outline": "Обводка brand-decor, фон прозрачный"
                    }
                }
            ]
        },
        {
            "label": "Акции (Вар 1)",
            "name": "promo",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все предложения»"
                },
                {
                    "name": "link_title",
                    "label": "Текст «Все предложения»"
                }
            ]
        },
        {
            "label": "Текст (Вар 1)",
            "name": "text",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "text",
                    "label": "Основной текст"
                },
                {
                    "name": "text2",
                    "label": "Скрытый текст (под спойлером)"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "Hero (Вар 6)",
            "name": "hero",
            "variant": "variant-6",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Подзаголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt текст фона"
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Стадии развития (Вар 1)",
            "name": "progression-stages",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Уведомление (текст под заголовком)"
                },
                {
                    "name": "image",
                    "label": "Иконка уведомления"
                },
                {
                    "name": "view2",
                    "label": "Фон CTA",
                    "type": "select",
                    "generator_name": "cta_bg",
                    "items": {
                        "glass": "Полупрозрачный белый",
                        "brand-soft": "Brand surface soft"
                    }
                }
            ],
            "items": [
                {
                    "label": "Стадия",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Бейдж (название стадии)"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt текст"
                        },
                        {
                            "name": "description",
                            "label": "Проблема"
                        },
                        {
                            "name": "description2",
                            "label": "Решение"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Стадии лечения (Вар 2)",
            "name": "progression-stages",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Подзаголовок"
                },
                {
                    "name": "title2",
                    "label": "Текст уведомления"
                },
                {
                    "name": "image",
                    "label": "Иконка уведомления"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                },
                {
                    "name": "view3",
                    "label": "Фон уведомления",
                    "type": "select",
                    "generator_name": "notice_bg",
                    "items": {
                        "default": "Без заливки",
                        "brand-soft": "Brand surface soft"
                    }
                }
            ],
            "items": [
                {
                    "label": "Этап",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название этапа"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt текст"
                        },
                        {
                            "name": "page_block_item_own_id",
                            "label": "Направление",
                            "criteria": {
                                "page_block2_id": "[page_block_id]"
                            }
                        }
                    ]
                },
                {
                    "label": "Направление",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название"
                        },
                        {
                            "name": "icon",
                            "label": "Иконка таба"
                        },
                        {
                            "name": "param1",
                            "label": "Max ширина подписи (mobile)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Цены (Вар 2)",
            "name": "prices",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title2",
                    "label": "Текст ссылки «Смотреть весь прайс»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Смотреть весь прайс»"
                },
                {
                    "name": "description2",
                    "label": "Текст примечания"
                },
                {
                    "name": "services",
                    "label": "Услуги"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "Linking Services (Вар 2)",
            "name": "linking-services",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "number1",
                    "label": "Лимит карточек на mobile"
                },
                {
                    "name": "number2",
                    "label": "Строк сетки на desktop"
                },
                {
                    "name": "number3",
                    "label": "Колонок сетки на desktop"
                },
                {
                    "name": "link_title2",
                    "label": "Текст кнопки «Показать ещё»"
                },
                {
                    "name": "eyebrow2",
                    "label": "Eyebrow CTA-блока"
                },
                {
                    "name": "title2",
                    "label": "Заголовок CTA-блока"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA-блока"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки CTA"
                }
            ]
        },
        {
            "label": "Кейсы (Вар 2)",
            "name": "cases",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Кейс",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Категория"
                        },
                        {
                            "name": "description2",
                            "label": "Текст"
                        },
                        {
                            "name": "image",
                            "label": "Фото «До»"
                        },
                        {
                            "name": "image2",
                            "label": "Фото «После»"
                        }
                    ],
                    "subitems": {
                        "label": "Параметр",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Подпись"
                            },
                            {
                                "name": "param1",
                                "label": "Значение"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Врачи (Вар 1)",
            "name": "doctors",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки «Все специалисты»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все специалисты»"
                },
                {
                    "name": "eyebrow2",
                    "label": "Заголовок блока преимуществ"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение карточек"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "param1",
                    "label": "Стиль плашек",
                    "type": "select",
                    "generator_name": "badge_style",
                    "items": {
                        "fill": "fill",
                        "border": "border"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Описание"
                        }
                    ]
                },
                {
                    "label": "Статистика",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Подпись"
                        },
                        {
                            "name": "description",
                            "label": "Значение"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Отзывы (Вар 2)",
            "name": "reviews",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки «Все отзывы»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все отзывы»"
                },
                {
                    "name": "title2",
                    "label": "Заголовок блока площадок"
                },
                {
                    "name": "title3",
                    "label": "Заголовок CTA"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA"
                },
                {
                    "name": "number1",
                    "label": "Видимых отзывов в списке"
                },
                {
                    "name": "param1",
                    "label": "Фон карточек",
                    "type": "select",
                    "generator_name": "card_bg",
                    "items": {
                        "mix": "mix",
                        "white": "white"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Площадка",
                    "fields": [
                        {
                            "name": "image",
                            "label": "Логотип"
                        },
                        {
                            "name": "title",
                            "label": "Количество отзывов (текст)"
                        },
                        {
                            "name": "param1",
                            "label": "Рейтинг"
                        },
                        {
                            "name": "param2",
                            "label": "Ширина логотипа"
                        },
                        {
                            "name": "param3",
                            "label": "Высота логотипа"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Linking Services (Вар 1)",
            "name": "linking-services",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                }
            ]
        },
        {
            "label": "Мнение врача (Вар 1)",
            "name": "expert-advice",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Цитата (абзацы через перенос строки)"
                },
                {
                    "name": "description2",
                    "label": "Заметка (текст под цитатой)"
                },
                {
                    "name": "member_id",
                    "label": "Врач"
                },
                {
                    "name": "flag1",
                    "label": "Вывести информацию о враче",
                    "type": "checkbox",
                    "generator_name": "show_doctor_info"
                },
                {
                    "name": "view",
                    "label": "Сторона фото",
                    "type": "select",
                    "generator_name": "photo_side",
                    "items": {
                        "right": "Справа",
                        "left": "Слева"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "Акции (Вар 3)",
            "name": "promo",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все предложения»"
                },
                {
                    "name": "link_title",
                    "label": "Текст «Все предложения»"
                },
                {
                    "name": "number1",
                    "label": "Лимит карточек на mobile"
                }
            ]
        },
        {
            "label": "FAQ (Вар 1)",
            "name": "faq",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title2",
                    "label": "Заголовок сайдбара"
                },
                {
                    "name": "description2",
                    "label": "Текст сайдбара"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Задать вопрос»"
                },
                {
                    "name": "icon",
                    "label": "Иконка сайдбара"
                },
                {
                    "name": "icon2",
                    "label": "Иконка телефона"
                },
                {
                    "name": "number1",
                    "label": "Количество видимых вопросов"
                },
                {
                    "name": "number2",
                    "label": "Шаг раскрытия"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Вопрос",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Вопрос"
                        },
                        {
                            "name": "description",
                            "label": "Ответ"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка вопроса"
                        }
                    ],
                    "subitems": {
                        "label": "Материал",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Название материала"
                            },
                            {
                                "name": "link",
                                "label": "Ссылка"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Hero (Вар 5)",
            "name": "hero",
            "variant": "variant-5",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Подзаголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt текст фона"
                }
            ],
            "items": [
                {
                    "label": "Факт",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Значение"
                        },
                        {
                            "name": "description",
                            "label": "Подпись"
                        },
                        {
                            "name": "view",
                            "label": "Иконка",
                            "items": {
                                "cost": "Стоимость",
                                "clock": "Время"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "label": "Преимущества (Вар 1)",
            "name": "benefits",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "article_id",
                    "label": "Статья"
                },
                {
                    "name": "icon_id",
                    "label": "Декор фона"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Ошибки пациентов (Вар 1)",
            "name": "patient-errors",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "link_title",
                    "label": "Текст бейджа"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Ошибка",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Баннер со ссылкой (Вар 1)",
            "name": "content-strip-link",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Описание"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки"
                },
                {
                    "name": "link",
                    "label": "Ссылка"
                },
                {
                    "name": "icon",
                    "label": "Иконка"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "Bg Gradient Page",
                        "bg-gradient-bottom-light": "Bg Gradient Bottom Light",
                        "bg-gradient-top-light": "Bg Gradient Top Light"
                    }
                }
            ]
        },
        {
            "label": "Технологии лечения (Вар 1)",
            "name": "treatment-technologies",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Технология",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "description",
                            "label": "Описание"
                        },
                        {
                            "name": "param1",
                            "label": "Бейдж"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Врачи (Вар 6)",
            "name": "doctors",
            "variant": "variant-6",
            "fields": [
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "number1",
                    "label": "Лимит карточек на mobile"
                },
                {
                    "name": "number2",
                    "label": "Строк на desktop"
                },
                {
                    "name": "image",
                    "label": "Фон карточек"
                },
                {
                    "name": "param1",
                    "label": "Стиль плашек",
                    "type": "select",
                    "generator_name": "badge_style",
                    "items": {
                        "fill": "fill",
                        "border": "border"
                    }
                }
            ]
        },
        {
            "label": "Цены (Вар 3)",
            "name": "prices",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title2",
                    "label": "Placeholder поиска"
                },
                {
                    "name": "link_title2",
                    "label": "Текст ссылки «Скачать прайс»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Скачать прайс»"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Записаться»"
                },
                {
                    "name": "description2",
                    "label": "Текст примечания"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "Промо-баннеры (Вар 1)",
            "name": "promo-banners",
            "variant": "variant-1",
            "fields": [],
            "items": [
                {
                    "label": "Баннер",
                    "fields": [
                        {
                            "name": "eyebrow",
                            "label": "Тег"
                        },
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt изображения"
                        },
                        {
                            "name": "param1",
                            "label": "Позиция изображения (object-position)"
                        },
                        {
                            "name": "link_title",
                            "label": "Текст кнопки"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка кнопки"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Hero (Вар 7)",
            "name": "hero",
            "variant": "variant-7",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view",
                    "label": "Режим фона",
                    "type": "select",
                    "generator_name": "bg_mode",
                    "items": {
                        "color": "Цвет \/ градиент",
                        "image": "Изображение"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Подзаголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "action_id",
                    "label": "Акция"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt фона"
                },
                {
                    "name": "image2",
                    "label": "Визуал справа"
                },
                {
                    "name": "image2_alt",
                    "label": "Alt визуала"
                },
                {
                    "name": "view2",
                    "label": "Фон секции (режим color)",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Текст (Вар 3)",
            "name": "text",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "image",
                    "label": "Изображение виджета"
                },
                {
                    "name": "title2",
                    "label": "Заголовок виджета"
                },
                {
                    "name": "description2",
                    "label": "Текст виджета"
                },
                {
                    "name": "link_title",
                    "label": "Кнопка виджета"
                },
                {
                    "name": "view",
                    "label": "Сторона виджета",
                    "type": "select",
                    "generator_name": "widget_side",
                    "items": {
                        "left": "Слева",
                        "right": "Справа"
                    }
                }
            ],
            "items": [
                {
                    "label": "Секция",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок секции"
                        },
                        {
                            "name": "view",
                            "label": "Тип списка",
                            "items": {
                                "numeric": "Нумерованный",
                                "list": "С иконкой"
                            }
                        }
                    ],
                    "subitems": {
                        "label": "Пункт",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Заголовок"
                            },
                            {
                                "name": "description",
                                "label": "Текст (абзацы через перенос строки)"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Текст (Вар 2)",
            "name": "text",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Цены (Вар 4)",
            "name": "prices",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title2",
                    "label": "Заголовок колонки «без акции»"
                },
                {
                    "name": "title3",
                    "label": "Заголовок колонки «с акцией»"
                },
                {
                    "name": "link_title",
                    "label": "Подпись строки «Итого»"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Позиция прайса",
                    "fields": [
                        {
                            "name": "price_id",
                            "label": "Цена"
                        },
                        {
                            "name": "title",
                            "label": "Название (переопределение)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Кейсы (Вар 3)",
            "name": "cases",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "image",
                    "label": "Иконка «Все случаи»"
                },
                {
                    "name": "param1",
                    "label": "Название «Все случаи»"
                },
                {
                    "name": "number1",
                    "label": "Карточек в ряд на десктопе (2, 3 или 4)"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Категория",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название категории"
                        },
                        {
                            "name": "image",
                            "label": "Иконка"
                        }
                    ],
                    "subitems": {
                        "label": "Кейс",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Заголовок"
                            },
                            {
                                "name": "description2",
                                "label": "Текст"
                            },
                            {
                                "name": "image",
                                "label": "Фото «До»"
                            },
                            {
                                "name": "image2",
                                "label": "Фото «После»"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Текст (Вар 5)",
            "name": "text",
            "variant": "variant-5",
            "fields": [
                {
                    "name": "description",
                    "label": "Описание"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ]
        },
        {
            "label": "Пациентам (Вар 1)",
            "name": "patients",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "number1",
                    "label": "Количество элементов до «Показать ещё»"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Карточка",
                    "fields": [
                        {
                            "name": "icon",
                            "label": "Иконка"
                        },
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Пациентам (Вар 2)",
            "name": "patients",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Скачать»"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Документ",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название документа"
                        },
                        {
                            "name": "file",
                            "label": "Файл"
                        }
                    ]
                }
            ]
        },
        {
            "label": "CTA (Вар 3)",
            "name": "cta",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "icon_id",
                    "label": "Иконка"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Пометка",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Текст"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Пациентам (Вар 3)",
            "name": "patients",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Раздел",
                    "fields": [
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        },
                        {
                            "name": "title",
                            "label": "Название вкладки"
                        }
                    ],
                    "subitems": {
                        "label": "Блок контента",
                        "fields": [
                            {
                                "name": "view",
                                "label": "Тип блока",
                                "items": {
                                    "intro": "Вступление",
                                    "list": "Список",
                                    "steps": "Шаги"
                                }
                            },
                            {
                                "name": "title",
                                "label": "Заголовок"
                            },
                            {
                                "name": "description",
                                "label": "Текст"
                            },
                            {
                                "name": "description2",
                                "label": "Пункты списка (для типа list, каждый с новой строки)"
                            }
                        ],
                        "subitems": {
                            "label": "Шаг",
                            "fields": [
                                {
                                    "name": "title",
                                    "label": "Заголовок"
                                },
                                {
                                    "name": "description",
                                    "label": "Текст"
                                }
                            ]
                        }
                    }
                }
            ]
        },
        {
            "label": "Пациентам (Вар 4)",
            "name": "patients",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "icon_id",
                    "label": "Иконка CTA"
                },
                {
                    "name": "title2",
                    "label": "Заголовок CTA"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки CTA"
                },
                {
                    "name": "link",
                    "label": "Ссылка CTA"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Раздел",
                    "fields": [
                        {
                            "name": "icon_id",
                            "label": "Иконка навигации"
                        },
                        {
                            "name": "title",
                            "label": "Название в навигации"
                        },
                        {
                            "name": "title2",
                            "label": "Заголовок панели"
                        },
                        {
                            "name": "description",
                            "label": "Вступительный текст панели"
                        },
                        {
                            "name": "view",
                            "label": "Тип контента",
                            "items": {
                                "cards-3": "Карточки (3 колонки)",
                                "cards-2": "Карточки (2 колонки)",
                                "documents": "Документы",
                                "steps": "Этапы"
                            }
                        }
                    ],
                    "subitems": {
                        "label": "Элемент",
                        "fields": [
                            {
                                "name": "icon_id",
                                "label": "Иконка (для карточек)"
                            },
                            {
                                "name": "title",
                                "label": "Заголовок"
                            },
                            {
                                "name": "description",
                                "label": "Текст"
                            },
                            {
                                "name": "file",
                                "label": "Файл (для документов)"
                            },
                            {
                                "name": "link",
                                "label": "Ссылка «Посмотреть» (необязательно; если пусто — откроется файл)"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Пациентам (Вар 5)",
            "name": "patients",
            "variant": "variant-5",
            "fields": [
                {
                    "name": "number1",
                    "label": "Лимит документов в категории «Все документы»"
                },
                {
                    "name": "icon_id",
                    "label": "Иконка CTA"
                },
                {
                    "name": "title2",
                    "label": "Заголовок CTA"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки CTA"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Документ",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название документа"
                        },
                        {
                            "name": "file",
                            "label": "Файл"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка «Посмотреть» (необязательно; если пусто — откроется файл)"
                        },
                        {
                            "name": "page_block_item_own_id",
                            "label": "Категория",
                            "criteria": {
                                "page_block_id": "[page_block_id]",
                                "page_block_list_num": "2"
                            }
                        }
                    ]
                },
                {
                    "label": "Категория",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название категории"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Hero (Вар 8)",
            "name": "hero",
            "variant": "variant-8",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Подзаголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "link",
                    "label": "Ссылка кнопки"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст у видео"
                },
                {
                    "name": "video",
                    "label": "Видео"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt фона"
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Преимущества (Вар 3)",
            "name": "benefits",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Мнение врача (Вар 2)",
            "name": "expert-advice",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Текст истории (абзацы через перенос строки)"
                },
                {
                    "name": "member_id",
                    "label": "Врач \/ фото"
                },
                {
                    "name": "flag1",
                    "label": "Показывать информацию о враче",
                    "type": "checkbox",
                    "generator_name": "show_doctor_info"
                },
                {
                    "name": "view",
                    "label": "Сторона фото",
                    "type": "select",
                    "generator_name": "photo_side",
                    "items": {
                        "left": "Слева",
                        "right": "Справа"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Статистика",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Значение"
                        },
                        {
                            "name": "description",
                            "label": "Подпись"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Технологии лечения (Вар 2)",
            "name": "treatment-technologies",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Слайд",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название технологии"
                        },
                        {
                            "name": "title2",
                            "label": "Бренд"
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "image_alt",
                            "label": "Alt текст"
                        },
                        {
                            "name": "description",
                            "label": "Преимущества (каждый пункт с новой строки)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Технологии лечения (Вар 3)",
            "name": "treatment-technologies",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        },
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Отзывы (Вар 4)",
            "name": "reviews",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "title2",
                    "label": "Название клиники"
                },
                {
                    "name": "description2",
                    "label": "Локация клиники"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Читать» на площадке"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        },
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        }
                    ]
                },
                {
                    "label": "Виджет площадки",
                    "fields": [
                        {
                            "name": "image",
                            "label": "Логотип"
                        },
                        {
                            "name": "param1",
                            "label": "Рейтинг"
                        },
                        {
                            "name": "param2",
                            "label": "Ширина логотипа"
                        },
                        {
                            "name": "param3",
                            "label": "Высота логотипа"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка на площадку"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Сертификаты (Вар 2)",
            "name": "certificates",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Документ",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Тип документа"
                        },
                        {
                            "name": "image",
                            "label": "Превью"
                        },
                        {
                            "name": "file",
                            "label": "Файл (PDF)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "FAQ (Вар 2)",
            "name": "faq",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Акцент в заголовке"
                },
                {
                    "name": "title2",
                    "label": "Вторая часть заголовка"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "number1",
                    "label": "Количество видимых вопросов"
                },
                {
                    "name": "number2",
                    "label": "Шаг раскрытия"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Вкладка",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название вкладки"
                        }
                    ],
                    "subitems": {
                        "label": "Вопрос",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Вопрос"
                            },
                            {
                                "name": "description",
                                "label": "Ответ"
                            },
                            {
                                "name": "icon_id",
                                "label": "Иконка вопроса"
                            }
                        ],
                        "subitems": {
                            "label": "Материал",
                            "fields": [
                                {
                                    "name": "title",
                                    "label": "Название материала"
                                },
                                {
                                    "name": "link",
                                    "label": "Ссылка"
                                }
                            ]
                        }
                    }
                }
            ]
        },
        {
            "label": "Вакансии (Вар 1)",
            "name": "vacancies",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "image",
                    "label": "Фото команды"
                },
                {
                    "name": "image_alt",
                    "label": "Alt фото команды"
                },
                {
                    "name": "title2",
                    "label": "Заголовок блока резюме"
                },
                {
                    "name": "description2",
                    "label": "Текст блока резюме"
                },
                {
                    "name": "link_title",
                    "label": "Кнопка «Отправить резюме»"
                },
                {
                    "name": "link_title2",
                    "label": "Текст ссылки «Смотреть больше»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Смотреть больше»"
                },
                {
                    "name": "param1",
                    "label": "Кнопка «Откликнуться»"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Вакансия",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Должность"
                        },
                        {
                            "name": "title2",
                            "label": "Зарплата"
                        },
                        {
                            "name": "description",
                            "label": "Занятость"
                        },
                        {
                            "name": "param1",
                            "label": "Город"
                        },
                        {
                            "name": "param2",
                            "label": "Адрес"
                        }
                    ],
                    "subitems": {
                        "label": "Блок описания",
                        "fields": [
                            {
                                "name": "view",
                                "label": "Тип блока",
                                "items": {
                                    "text": "Абзац (простой текст)",
                                    "p": "Абзац",
                                    "ul": "Маркированный список",
                                    "ol": "Нумерованный список",
                                    "note": "Примечание",
                                    "columns": "Колонки"
                                }
                            },
                            {
                                "name": "title",
                                "label": "Заголовок блока"
                            },
                            {
                                "name": "description",
                                "label": "Текст или пункты списка (каждый с новой строки)"
                            }
                        ],
                        "subitems": {
                            "label": "Колонка",
                            "fields": [
                                {
                                    "name": "title",
                                    "label": "Заголовок колонки"
                                },
                                {
                                    "name": "description",
                                    "label": "Пункты списка (каждый с новой строки)"
                                }
                            ]
                        }
                    }
                }
            ]
        },
        {
            "label": "Сертификаты (Вар 4)",
            "name": "certificates",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "title2",
                    "label": "Заголовок уведомления"
                },
                {
                    "name": "description",
                    "label": "Текст уведомления"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Документ",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название документа"
                        },
                        {
                            "name": "title2",
                            "label": "Номер документа"
                        },
                        {
                            "name": "description",
                            "label": "Кем выдан"
                        },
                        {
                            "name": "param1",
                            "label": "Дата выдачи"
                        },
                        {
                            "name": "param2",
                            "label": "Префикс перед датой",
                            "items": {
                                "Выдана": "Выдана",
                                "Выдан": "Выдан",
                                "Выдано": "Выдано"
                            }
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "file",
                            "label": "Файл (PDF)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Сертификаты (Вар 3)",
            "name": "certificates",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "number1",
                    "label": "Начальное количество элементов"
                },
                {
                    "name": "title2",
                    "label": "Заголовок CTA"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки CTA"
                },
                {
                    "name": "link",
                    "label": "Ссылка CTA"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Документ",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название документа"
                        },
                        {
                            "name": "title2",
                            "label": "Номер документа"
                        },
                        {
                            "name": "description",
                            "label": "Кем выдан"
                        },
                        {
                            "name": "param1",
                            "label": "Дата выдачи"
                        },
                        {
                            "name": "page_block_item_own_id",
                            "label": "Категория",
                            "criteria": {
                                "page_block_id": "[page_block_id]",
                                "page_block_list_num": "2"
                            }
                        },
                        {
                            "name": "image",
                            "label": "Изображение"
                        },
                        {
                            "name": "file",
                            "label": "Файл (PDF)"
                        }
                    ]
                },
                {
                    "label": "Категория",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название категории"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Вакансии (Вар 3)",
            "name": "vacancies",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок списка"
                },
                {
                    "name": "param1",
                    "label": "Якорь заголовка (без #, пусто — из названия)"
                },
                {
                    "name": "link_title",
                    "label": "Кнопка «Откликнуться»"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Вакансия",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Должность"
                        },
                        {
                            "name": "description2",
                            "label": "Краткое описание"
                        },
                        {
                            "name": "title2",
                            "label": "Зарплата"
                        },
                        {
                            "name": "description",
                            "label": "Занятость"
                        },
                        {
                            "name": "param1",
                            "label": "Город"
                        },
                        {
                            "name": "param2",
                            "label": "Адрес"
                        }
                    ],
                    "subitems": {
                        "label": "Блок описания",
                        "fields": [
                            {
                                "name": "view",
                                "label": "Тип блока",
                                "items": {
                                    "text": "Абзац (простой текст)",
                                    "p": "Абзац",
                                    "ul": "Маркированный список",
                                    "ol": "Нумерованный список",
                                    "note": "Примечание",
                                    "columns": "Колонки"
                                }
                            },
                            {
                                "name": "title",
                                "label": "Заголовок блока"
                            },
                            {
                                "name": "description",
                                "label": "Текст или пункты списка (каждый с новой строки)"
                            }
                        ],
                        "subitems": {
                            "label": "Колонка",
                            "fields": [
                                {
                                    "name": "title",
                                    "label": "Заголовок колонки"
                                },
                                {
                                    "name": "description",
                                    "label": "Пункты списка (каждый с новой строки)"
                                }
                            ]
                        }
                    }
                }
            ]
        },
        {
            "label": "cta-variant-5",
            "name": "cta",
            "variant": "variant-5"
        },
        {
            "label": "Кейсы (Вар 4)",
            "name": "cases",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "image",
                    "label": "Иконка «Все»"
                },
                {
                    "name": "param1",
                    "label": "Название «Все»"
                },
                {
                    "name": "param2",
                    "label": "Текст кнопки «Показать еще»"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Категория",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название категории"
                        },
                        {
                            "name": "image",
                            "label": "Иконка"
                        }
                    ],
                    "subitems": {
                        "label": "Кейс",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Заголовок"
                            },
                            {
                                "name": "description2",
                                "label": "Текст"
                            },
                            {
                                "name": "image",
                                "label": "Фото «До»"
                            },
                            {
                                "name": "image2",
                                "label": "Фото «После»"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "CTA (Вар 2)",
            "name": "cta",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view",
                    "label": "Ширина блока",
                    "type": "select",
                    "generator_name": "layout",
                    "items": {
                        "fullwidth": "На всю ширину",
                        "contained": "В контейнере"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt фона"
                },
                {
                    "name": "image2",
                    "label": "Фон на мобильном"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "view2",
                    "label": "Фон секции (режим «В контейнере»)",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Преимущество",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "news-article-variant-1",
            "name": "news-article",
            "variant": "variant-1"
        },
        {
            "label": "Контакты (Вар 1)",
            "name": "contacts",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок списка филиалов"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Заказать звонок»"
                },
                {
                    "name": "number1",
                    "label": "Высота карты (px)"
                },
                {
                    "name": "number2",
                    "label": "Зум карты"
                },
                {
                    "name": "number3",
                    "label": "Отступ зума при фокусе"
                }
            ]
        },
        {
            "label": "Контакты (Вар 2)",
            "name": "contacts",
            "variant": "variant-2",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок списка филиалов"
                },
                {
                    "name": "title2",
                    "label": "Заголовок раздела «Клиника на карте»"
                },
                {
                    "name": "title3",
                    "label": "Заголовок раздела «Как нас найти»"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки «Заказать звонок»"
                },
                {
                    "name": "number1",
                    "label": "Высота карты (px)"
                },
                {
                    "name": "number2",
                    "label": "Зум карты"
                },
                {
                    "name": "number3",
                    "label": "Отступ зума при фокусе"
                }
            ]
        },
        {
            "label": "News (Вар 3)",
            "name": "news",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок секции"
                },
                {
                    "name": "flag1",
                    "label": "Показывать иконку в заголовке"
                },
                {
                    "name": "number1",
                    "label": "Количество статей в карусели"
                }
            ]
        },
        {
            "label": "News (Вар 4)",
            "name": "news",
            "variant": "variant-4",
            "fields": [
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Подпись секции"
                },
                {
                    "name": "title",
                    "label": "Подпись секции (fallback)"
                },
                {
                    "name": "number1",
                    "label": "Количество карточек до «Показать ещё»"
                },
                {
                    "name": "title2",
                    "label": "Заголовок CTA"
                },
                {
                    "name": "description2",
                    "label": "Текст CTA"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки CTA"
                }
            ]
        },
        {
            "label": "knowledge-variant-1",
            "name": "knowledge",
            "variant": "variant-1"
        },
        {
            "label": "Hero (Вар 10)",
            "name": "hero",
            "variant": "variant-10",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Лид"
                },
                {
                    "name": "member_id",
                    "label": "Эксперт"
                },
                {
                    "name": "article_id",
                    "label": "Статья"
                },
                {
                    "name": "image2",
                    "label": "Основное изображение"
                },
                {
                    "name": "image2_alt",
                    "label": "Alt основного изображения"
                }
            ]
        },
        {
            "label": "News (Вар 1)",
            "name": "news",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст ссылки «Все новости»"
                },
                {
                    "name": "link",
                    "label": "Ссылка «Все новости»"
                }
            ]
        },
        {
            "label": "Hero (Вар 12)",
            "name": "hero",
            "variant": "variant-12",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Подзаголовок"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки"
                },
                {
                    "name": "title2",
                    "label": "Текст доверия"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt текст фона"
                },
                {
                    "name": "image2",
                    "label": "Иконка доверия"
                }
            ],
            "items": [
                {
                    "label": "Статистика",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Значение"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        },
                        {
                            "name": "param1",
                            "label": "Ширина иконки (px)"
                        },
                        {
                            "name": "param2",
                            "label": "Высота иконки (px)"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Отзывы (Вар 6)",
            "name": "reviews",
            "variant": "variant-6",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "param1",
                    "label": "Фон карточек",
                    "type": "select",
                    "generator_name": "card_bg",
                    "items": {
                        "mix": "mix",
                        "white": "white"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Площадка",
                    "fields": [
                        {
                            "name": "image",
                            "label": "Логотип"
                        },
                        {
                            "name": "param1",
                            "label": "Рейтинг"
                        },
                        {
                            "name": "param2",
                            "label": "Ширина логотипа"
                        },
                        {
                            "name": "param3",
                            "label": "Высота логотипа"
                        },
                        {
                            "name": "link",
                            "label": "Ссылка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Отзывы (Вар 5)",
            "name": "reviews",
            "variant": "variant-5",
            "fields": [
                {
                    "name": "number1",
                    "label": "Отзывов на первой странице"
                },
                {
                    "name": "param1",
                    "label": "Фон карточек",
                    "type": "select",
                    "generator_name": "card_bg",
                    "items": {
                        "mix": "mix",
                        "white": "white"
                    }
                },
                {
                    "name": "view2",
                    "label": "Фон секции",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "Page",
                        "page-alt": "Page Alt",
                        "surface": "Surface",
                        "bg-gradient-page": "BG Gradient Page",
                        "bg-gradient-bottom-light": "BG Gradient Bottom Light",
                        "bg-gradient-top-light": "BG Gradient Top Light"
                    }
                }
            ]
        },
        {
            "label": "Hero (Вар 9)",
            "name": "hero",
            "variant": "variant-9",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "member_id",
                    "label": "Врач"
                },
                {
                    "name": "link_title",
                    "label": "Текст кнопки записи"
                },
                {
                    "name": "image",
                    "label": "Фоновое изображение"
                },
                {
                    "name": "image_alt",
                    "label": "Alt фона"
                }
            ]
        },
        {
            "label": "Стадии приёма (Вар 3)",
            "name": "progression-stages",
            "variant": "variant-3",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Текст уведомления"
                },
                {
                    "name": "image",
                    "label": "Иконка уведомления"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Этап",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Заголовок"
                        },
                        {
                            "name": "description",
                            "label": "Текст"
                        },
                        {
                            "name": "icon_id",
                            "label": "Иконка"
                        }
                    ]
                }
            ]
        },
        {
            "label": "Образование и опыт (Вар 1)",
            "name": "education",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "image",
                    "label": "Иконка медали"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Статистика",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Значение"
                        },
                        {
                            "name": "description",
                            "label": "Подпись"
                        }
                    ]
                },
                {
                    "label": "Группа",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название группы"
                        },
                        {
                            "name": "description",
                            "label": "Маркированный список (каждый пункт с новой строки)"
                        }
                    ],
                    "subitems": {
                        "label": "Элемент группы",
                        "fields": [
                            {
                                "name": "title",
                                "label": "Период"
                            },
                            {
                                "name": "description",
                                "label": "Текст"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "label": "Сертификаты (Вар 1)",
            "name": "certificates",
            "variant": "variant-1",
            "fields": [
                {
                    "name": "is_h1",
                    "label": "Заголовок H1"
                },
                {
                    "name": "eyebrow",
                    "label": "Текст над заголовком"
                },
                {
                    "name": "title",
                    "label": "Заголовок"
                },
                {
                    "name": "description",
                    "label": "Вступительный текст"
                },
                {
                    "name": "param1",
                    "label": "Тип документа"
                },
                {
                    "name": "view2",
                    "label": "Фон",
                    "type": "select",
                    "generator_name": "section_bg",
                    "items": {
                        "page": "page",
                        "white": "white",
                        "page-alt": "page-alt",
                        "surface": "surface",
                        "bg-gradient-page": "bg-gradient-page",
                        "bg-gradient-bottom-light": "bg-gradient-bottom-light",
                        "bg-gradient-top-light": "bg-gradient-top-light"
                    }
                }
            ],
            "items": [
                {
                    "label": "Сертификат",
                    "fields": [
                        {
                            "name": "title",
                            "label": "Название"
                        },
                        {
                            "name": "file",
                            "label": "Файл (PDF)"
                        }
                    ]
                }
            ]
        }
    ],
    "dependencies": {
        "hero-variant-2": [
            "swiper"
        ],
        "benefits-variant-2": [],
        "our-approach-variant-2": [],
        "services-variant-3": [],
        "cases-variant-1": [
            "swiper"
        ],
        "doctors-variant-4": [
            "swiper"
        ],
        "quiz-variant-1": [],
        "choosing-teeth-variant-1": [],
        "reviews-variant-1": [
            "swiper"
        ],
        "treatment-plans-variant-1": [
            "swiper"
        ],
        "brands-variant-2": [
            "swiper"
        ],
        "utp-in-numbers-variant-2": [],
        "gallery-variant-1": [
            "swiper"
        ],
        "about-variant-1": [],
        "news-variant-2": [
            "swiper"
        ],
        "promo-variant-2": [
            "swiper"
        ],
        "cta-variant-1": [],
        "navigation-variant-1": [],
        "services-variant-4": [],
        "promo-variant-1": [
            "swiper"
        ],
        "text-variant-1": [],
        "hero-variant-6": [],
        "benefits-variant-11": [],
        "progression-stages-variant-1": [],
        "progression-stages-variant-2": [
            "swiper"
        ],
        "prices-variant-2": [
            "swiper"
        ],
        "linking-services-variant-2": [
            "swiper"
        ],
        "cases-variant-2": [
            "swiper"
        ],
        "doctors-variant-1": [
            "swiper"
        ],
        "reviews-variant-2": [
            "swiper"
        ],
        "linking-services-variant-1": [
            "swiper"
        ],
        "expert-advice-variant-1": [],
        "promo-variant-3": [
            "swiper"
        ],
        "faq-variant-1": [],
        "hero-variant-5": [],
        "benefits-variant-1": [],
        "patient-errors-variant-1": [],
        "content-strip-link-variant-1": [],
        "treatment-technologies-variant-1": [],
        "doctors-variant-6": [],
        "prices-variant-3": [],
        "promo-banners-variant-1": [],
        "promo-page-variant-unmapped": [],
        "hero-variant-7": [],
        "text-variant-3": [],
        "text-variant-2": [],
        "prices-variant-4": [],
        "cases-variant-3": [
            "swiper"
        ],
        "text-variant-5": [],
        "patients-variant-1": [],
        "patients-variant-2": [
            "swiper"
        ],
        "cta-variant-3": [],
        "patients-variant-3": [],
        "patients-variant-4": [],
        "patients-variant-5": [],
        "hero-variant-8": [],
        "benefits-variant-3": [],
        "expert-advice-variant-2": [],
        "treatment-technologies-variant-2": [
            "swiper"
        ],
        "treatment-technologies-variant-3": [],
        "reviews-variant-4": [],
        "certificates-variant-2": [
            "swiper"
        ],
        "faq-variant-2": [],
        "vacancies-variant-1": [],
        "certificates-variant-4": [
            "swiper"
        ],
        "certificates-variant-3": [],
        "vacancies-variant-3": [],
        "cta-variant-5": [],
        "cases-variant-4": [],
        "cta-variant-2": [],
        "hero-variant-13": [],
        "news-article-variant-1": [
            "swiper"
        ],
        "contacts-variant-1": [
            "swiper"
        ],
        "contacts-variant-2": [],
        "news-variant-3": [
            "swiper"
        ],
        "news-variant-4": [],
        "knowledge-variant-1": [],
        "knowledge-variant-2": [],
        "not-found-variant-1": [],
        "hero-variant-10": [],
        "news-variant-1": [
            "swiper"
        ],
        "hero-variant-12": [],
        "reviews-variant-6": [],
        "reviews-variant-5": [],
        "hero-variant-9": [],
        "progression-stages-variant-3": [],
        "education-variant-1": [],
        "certificates-variant-1": [],
        "header": [
            "bvi"
        ],
        "footer": [
            "bvi"
        ],
        "back-to-top": []
    },
    "sprites": "<?php\n\/**\n * SVG sprite sheet — единственный источник переиспользуемых иконок.\n *\n * Подключается один раз в views\/project\/page.php.\n * В блоках: <svg class=\"icon\"><use href=\"#icon-{name}\"><\/use><\/svg>\n *\n * Критерии и полный список — docs\/PROJECT_RULES.md → «Иконки».\n *\/\n?>\n<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" style=\"display:none\">\n  <symbol id=\"icon-star\" viewBox=\"0 0 25 24\" fill=\"none\">\n    <path d=\"M11.2391 0.691212C11.5385 -0.230099 12.8419 -0.2301 13.1412 0.691211L15.3334 7.43792C15.4673 7.84994 15.8512 8.12891 16.2844 8.12891H23.3783C24.3471 8.12891 24.7498 9.36852 23.9661 9.93792L18.227 14.1076C17.8766 14.3623 17.7299 14.8136 17.8638 15.2257L20.0559 21.9724C20.3553 22.8937 19.3008 23.6598 18.5171 23.0904L12.778 18.9207C12.4275 18.6661 11.9529 18.6661 11.6024 18.9207L5.86331 23.0904C5.07959 23.6598 4.02511 22.8937 4.32446 21.9724L6.5166 15.2257C6.65048 14.8136 6.50382 14.3623 6.15333 14.1076L0.414236 9.93792C-0.369477 9.36852 0.0332973 8.12891 1.00202 8.12891H8.09593C8.52916 8.12891 8.91312 7.84995 9.04699 7.43792L11.2391 0.691212Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n  <symbol id=\"icon-play\" viewBox=\"0 0 9 10\" fill=\"none\">\n    <path d=\"M7.5 2.86902C8.83333 3.63882 8.83333 5.56332 7.5 6.33312L3 8.9312C1.66667 9.701 4.66831e-07 8.73875 5.34129e-07 7.19915L7.6126e-07 2.003C8.28558e-07 0.463396 1.66667 -0.498853 3 0.270947L7.5 2.86902Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n  <symbol id=\"icon-calendar\" viewBox=\"0 0 32 32\" fill=\"none\">\n    <path d=\"M25.3333 29.3332H6.66667C5.19391 29.3332 4 28.1393 4 26.6665V7.99984C4 6.52708 5.19391 5.33317 6.66667 5.33317H9.33333V2.6665H12V5.33317H20V2.6665H22.6667V5.33317H25.3333C26.8061 5.33317 28 6.52708 28 7.99984V26.6665C28 28.1393 26.8061 29.3332 25.3333 29.3332ZM6.66667 13.3332V26.6665H25.3333V13.3332H6.66667ZM6.66667 7.99984V10.6665H25.3333V7.99984H6.66667ZM22.6667 23.9998H20V21.3332H22.6667V23.9998ZM17.3333 23.9998H14.6667V21.3332H17.3333V23.9998ZM12 23.9998H9.33333V21.3332H12V23.9998ZM22.6667 18.6665H20V15.9998H22.6667V18.6665ZM17.3333 18.6665H14.6667V15.9998H17.3333V18.6665ZM12 18.6665H9.33333V15.9998H12V18.6665Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n  <symbol id=\"icon-cost\" viewBox=\"0 0 36 36\" fill=\"none\">\n    <path d=\"M15.1192 5.66016H5.27515C2.9452 5.66016 1.0564 7.54896 1.0564 9.87891C1.0564 12.2089 2.9452 14.0977 5.27515 14.0977H34.947V5.66016H20.8842\" stroke=\"currentColor\" stroke-width=\"1.63636\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M1.0564 9.8789V29.0039C1.0564 31.3339 2.9452 33.2227 5.27515 33.2227H34.947V14.0977\" stroke=\"currentColor\" stroke-width=\"1.63636\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M25.1008 9.87891L17.9993 2.77727L10.8977 9.87891\" stroke=\"currentColor\" stroke-width=\"1.63636\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M30.0227 9.87891H5.97583\" stroke=\"currentColor\" stroke-width=\"1.63636\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M34.9446 26.8242H26.5071V20.4961H34.9446\" stroke=\"currentColor\" stroke-width=\"1.63636\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n  <symbol id=\"icon-clock\" viewBox=\"0 0 38 38\" fill=\"none\">\n    <g stroke=\"currentColor\" stroke-width=\"1.79169\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <path d=\"M18.833 14.6523V18.8959L22.0948 22.1577\"\/>\n      <path d=\"M18.834 30.826C25.3876 30.826 30.7003 25.4847 30.7003 18.8959C30.7003 12.3071 25.3876 6.96582 18.834 6.96582C12.2805 6.96582 6.96777 12.3071 6.96777 18.8959C6.96777 25.4847 12.2805 30.826 18.834 30.826Z\"\/>\n      <path d=\"M18.8328 7.13672V8.39763\"\/>\n      <path d=\"M18.8328 29.395V30.6559\"\/>\n      <path d=\"M30.5937 18.896H29.3328\"\/>\n      <path d=\"M8.33391 18.896H7.073\"\/>\n      <path d=\"M27.1465 10.5806L26.2549 11.4722\"\/>\n      <path d=\"M11.4075 26.3193L10.5159 27.2109\"\/>\n      <path d=\"M27.1465 27.2109L26.2549 26.3193\"\/>\n      <path d=\"M11.4075 11.4722L10.5159 10.5806\"\/>\n      <path d=\"M33.748 28.8983C35.6568 26.0376 36.7701 22.5973 36.7701 18.896C36.7701 8.95489 28.7393 0.895996 18.8329 0.895996C8.9265 0.895996 0.895752 8.95489 0.895752 18.896C0.895752 28.8371 8.9265 36.896 18.8329 36.896C22.2952 36.896 25.5284 35.9116 28.2698 34.2064\"\/>\n    <\/g>\n  <\/symbol>\n  <symbol id=\"icon-clock-circle\" viewBox=\"0 0 50 50\" fill=\"none\">\n    <path d=\"M42.6777 7.32236C37.9559 2.60049 31.6777 0 25 0C18.3223 0 12.0441 2.60049 7.32227 7.32236C2.60039 12.0442 0 18.3223 0 25C0 31.6777 2.60039 37.9559 7.32227 42.6776C12.0441 47.3994 18.3223 50 25 50C31.6777 50 37.9559 47.3995 42.6777 42.6776C47.3996 37.9558 50 31.6777 50 25C50 18.3223 47.3996 12.0441 42.6777 7.32236ZM25 45.093C13.9206 45.093 4.90703 36.0793 4.90703 25C4.90703 24.9818 4.90762 24.9639 4.90771 24.9459C4.90771 24.9413 4.90703 24.9369 4.90703 24.9323C4.90703 24.9246 4.90801 24.9172 4.9082 24.9096C4.95693 13.963 13.8033 5.05703 24.727 4.91055C24.7498 4.90947 24.7725 4.90713 24.7956 4.90713C24.8095 4.90713 24.823 4.90879 24.8367 4.90918C24.8912 4.90879 24.9455 4.90713 25.0001 4.90713C36.0795 4.90713 45.0931 13.9208 45.0931 25.0001C45.0931 36.0794 36.0794 45.093 25 45.093Z\" fill=\"currentColor\"\/>\n    <path d=\"M40.2622 26.2071C39.4452 26.2071 38.7829 25.5448 38.7829 24.7278C38.7829 23.9108 39.4452 23.2485 40.2622 23.2485H42.0453C41.2078 15.038 34.549 8.52461 26.2746 7.91309V9.46533C26.2746 10.2823 25.6123 10.9446 24.7953 10.9446C23.9783 10.9446 23.316 10.2823 23.316 9.46533V7.94844C15.1641 8.74727 8.67061 15.2826 7.93594 23.4529H9.53281C10.3498 23.4529 11.0121 24.1152 11.0121 24.9322C11.0121 25.7492 10.3498 26.4115 9.53281 26.4115H7.92383C8.604 34.7134 15.2276 41.3573 23.5205 42.0699V40.1946C23.5205 39.3776 24.1828 38.7153 24.9998 38.7153C25.8168 38.7153 26.4791 39.3776 26.4791 40.1946V42.0699C34.8398 41.3515 41.5038 34.604 42.0911 26.2071H40.2622ZM30.9881 21.1038L26.0459 26.0461C25.7685 26.3235 25.3923 26.4794 24.9999 26.4794C24.6076 26.4794 24.2312 26.3235 23.9539 26.0461L15.3511 17.4433C14.7733 16.8656 14.7733 15.929 15.3511 15.3513C15.9287 14.7735 16.8653 14.7735 17.4431 15.3513L25 22.9081L28.8963 19.0118C29.4739 18.4341 30.4105 18.4341 30.9883 19.0118C31.5658 19.5895 31.5658 20.5262 30.9881 21.1038Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n  <symbol id=\"icon-cross\" viewBox=\"0 0 18.5 19\" fill=\"none\">\n    <path d=\"M18 10H12\" stroke=\"currentColor\" stroke-linecap=\"round\"\/>\n    <path d=\"M6.5 10H0.5\" stroke=\"currentColor\" stroke-linecap=\"round\"\/>\n    <path d=\"M9.49609 0.5V7.5\" stroke=\"currentColor\" stroke-linecap=\"round\"\/>\n    <path d=\"M9.49609 11.5V18.5\" stroke=\"currentColor\" stroke-linecap=\"round\"\/>\n  <\/symbol>\n  <symbol id=\"icon-close\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path d=\"M4 4l8 8M12 4 4 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/>\n  <\/symbol>\n  <symbol id=\"icon-mega-close\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path d=\"M6 18L18 6\" stroke=\"currentColor\" stroke-linecap=\"round\"\/>\n    <path d=\"M6 6L18 18\" stroke=\"currentColor\" stroke-linecap=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-arrow-diagonal\" viewBox=\"0 0 21 22\" fill=\"none\">\n    <path d=\"M3 19L19 3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n    <path d=\"M8 3H19V14\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-linking-services-arrow\" viewBox=\"0 0 32 31\" fill=\"none\">\n    <path d=\"M30.4056 14.8491L16.9705 1.41406\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n    <path d=\"M30.4056 14.8477L17.6777 27.5756\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n    <path d=\"M4.94263 14.8547H28.9985\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-arrow-right\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path d=\"M20.3536 12.3536C20.5488 12.1583 20.5488 11.8417 20.3536 11.6464L17.1716 8.46447C16.9763 8.2692 16.6597 8.2692 16.4645 8.46447C16.2692 8.65973 16.2692 8.97631 16.4645 9.17157L19.2929 12L16.4645 14.8284C16.2692 15.0237 16.2692 15.3403 16.4645 15.5355C16.6597 15.7308 16.9763 15.7308 17.1716 15.5355L20.3536 12.3536ZM20 12V11.5L4 11.5V12V12.5L20 12.5V12Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-slider-arrow\" viewBox=\"0 0 17 11\" fill=\"none\">\n    <path d=\"M0.21395 4.82528C-0.069158 5.10839 -0.069158 5.5674 0.21395 5.8505L4.82746 10.464C5.11057 10.7471 5.56958 10.7471 5.85269 10.464C6.1358 10.1809 6.1358 9.7219 5.85269 9.43879L1.75179 5.33789L5.85269 1.23699C6.1358 0.953883 6.1358 0.494874 5.85269 0.211766C5.56958 -0.071342 5.11057 -0.071342 4.82746 0.211766L0.21395 4.82528ZM0.726562 5.33789L0.726562 6.06283L16.8392 6.06283L16.8392 5.33789L16.8392 4.61295L0.726563 4.61295L0.726562 5.33789Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-download\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 14.6893L8.53033 11.2197C8.23744 10.9268 7.76256 10.9268 7.46967 11.2197C7.17678 11.5126 7.17678 11.9874 7.46967 12.2803L11.399 16.2096C11.7309 16.5416 12.2691 16.5416 12.601 16.2096L16.5303 12.2803C16.8232 11.9874 16.8232 11.5126 16.5303 11.2197C16.2374 10.9268 15.7626 10.9268 15.4697 11.2197L12 14.6893Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 15.5C11.5858 15.5 11.25 15.1642 11.25 14.75V2.75C11.25 2.33579 11.5858 2 12 2C12.4142 2 12.75 2.33579 12.75 2.75V14.75C12.75 15.1642 12.4142 15.5 12 15.5Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 15C2.91421 15 3.25 15.3358 3.25 15.75V20H20.75V16.25C20.75 15.8358 21.0858 15.5 21.5 15.5C21.9142 15.5 22.25 15.8358 22.25 16.25V20.65C22.25 21.1194 21.8694 21.5 21.4 21.5H2.6C2.13056 21.5 1.75 21.1194 1.75 20.65V15.75C1.75 15.3358 2.08579 15 2.5 15Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-patients-document\" viewBox=\"0 0 23.0625 25.4279\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.2524 1.77404C2.43593 1.77404 1.77404 2.43593 1.77404 3.2524V22.1755C1.77404 22.992 2.43593 23.6538 3.2524 23.6538H19.8101C20.6266 23.6538 21.2885 22.992 21.2885 22.1755V8.35059L14.7119 1.77404H3.2524ZM0 3.2524C0 1.45615 1.45615 0 3.2524 0H14.8344C15.2265 0 15.6025 0.155756 15.8797 0.433003L22.6295 7.18275C22.9067 7.46 23.0625 7.83603 23.0625 8.22812V22.1755C23.0625 23.9717 21.6063 25.4279 19.8101 25.4279H3.2524C1.45615 25.4279 0 23.9717 0 22.1755V3.2524Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.1914 1.17527C14.1914 0.279655 15.2742 -0.16887 15.9075 0.464426L22.5999 7.15678C23.2332 7.79008 22.7847 8.87292 21.8891 8.87292H15.1967C14.6415 8.87292 14.1914 8.42283 14.1914 7.86763V1.17527ZM15.9654 3.0312V7.09888H20.0331L15.9654 3.0312Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.91406 12.7151C5.91406 12.2253 6.31119 11.8281 6.80108 11.8281H16.2626C16.7525 11.8281 17.1496 12.2253 17.1496 12.7151C17.1496 13.205 16.7525 13.6022 16.2626 13.6022H6.80108C6.31119 13.6022 5.91406 13.205 5.91406 12.7151Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.91406 17.4456C5.91406 16.9557 6.31119 16.5586 6.80108 16.5586H16.2626C16.7525 16.5586 17.1496 16.9557 17.1496 17.4456C17.1496 17.9355 16.7525 18.3326 16.2626 18.3326H6.80108C6.31119 18.3326 5.91406 17.9355 5.91406 17.4456Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-info\" viewBox=\"0 0 20 20\" fill=\"none\">\n    <path d=\"M10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C19.9939 15.5203 15.5203 19.9939 10 20ZM2 10.172C2.04732 14.5732 5.64111 18.1095 10.0425 18.086C14.444 18.0622 17.9995 14.4875 17.9995 10.086C17.9995 5.68451 14.444 2.10977 10.0425 2.086C5.64111 2.06246 2.04732 5.59876 2 10V10.172ZM12 15H9V11H8V9H11V13H12V15ZM11 7H9V5H11V7Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-check-circle\" viewBox=\"0 0 20 20\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10 1.875C5.51992 1.875 1.875 5.51992 1.875 10C1.875 14.4801 5.51992 18.125 10 18.125C14.4801 18.125 18.125 14.4801 18.125 10C18.125 5.51992 14.4801 1.875 10 1.875ZM8.51562 14.0773L5.36719 10.5785L6.29648 9.74219L8.48398 12.1727L13.6719 5.99453L14.6305 6.79688L8.51562 14.0773Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-quote\" viewBox=\"0 0 44 44\" fill=\"none\">\n    <path d=\"M35 10.2176L34.4118 14.5251C32.8824 14.407 31.7647 14.7217 31.0588 15.4691C30.3529 16.2165 29.9216 17.2196 29.7647 18.4784C29.6078 19.7372 29.5686 21.0943 29.6471 22.5498H35V35H24.9412V20.1896C24.9412 16.5706 25.8431 13.8563 27.6471 12.0468C29.4902 10.2373 31.9412 9.62759 35 10.2176ZM20.0588 10.2176L19.4706 14.5251C17.9412 14.407 16.8235 14.7217 16.1176 15.4691C15.4118 16.2165 14.9804 17.2196 14.8235 18.4784C14.6667 19.7372 14.6275 21.0943 14.7059 22.5498H20.0588V35H10V20.1896C10 16.5706 10.902 13.8563 12.7059 12.0468C14.549 10.2373 17 9.62759 20.0588 10.2176Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-shield\" viewBox=\"0 0 26 28\" fill=\"none\">\n    <path d=\"M11.3237 13.6915C10.868 13.2321 10.1294 13.2321 9.67374 13.6915C9.21813 14.1508 9.21813 14.8956 9.67374 15.3549L11.4237 17.1194C11.6425 17.3399 11.9393 17.4639 12.2487 17.4639C12.5581 17.4639 12.8549 17.3399 13.0736 17.1194L17.7403 12.4142C18.1959 11.9549 18.1959 11.2101 17.7403 10.7508C17.2847 10.2914 16.546 10.2914 16.0904 10.7508L12.2487 14.6241L11.3237 13.6915Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.1332 0.252393C13.2987 -0.0841312 12.3679 -0.0841308 11.5335 0.252393L2.33333 3.96275C1.78332 4.18457 1.23471 4.56574 0.811194 5.04128C0.396317 5.50713 0 6.18239 0 6.99177V13.9341C0 19.0535 2.51203 22.4373 5.26002 24.572C7.97517 26.6811 10.9521 27.6047 12.0903 27.9034C12.5811 28.0322 13.0856 28.0322 13.5764 27.9034C14.7146 27.6047 17.6914 26.6811 20.4066 24.572C23.1546 22.4373 25.6667 19.0535 25.6667 13.9341V6.99177C25.6667 6.18239 25.2703 5.50713 24.8555 5.04128C24.432 4.56574 23.8833 4.18457 23.3333 3.96275L14.1332 0.252393ZM12.4 2.43668C12.6782 2.3245 12.9885 2.3245 13.2666 2.43668L22.4667 6.14703C22.683 6.23428 22.9345 6.40546 23.1194 6.61304C23.3128 6.83033 23.3333 6.96899 23.3333 6.99177V13.9341C23.3333 18.1515 21.3078 20.9022 18.9826 22.7083C16.6245 24.54 13.9928 25.3633 12.9887 25.6266C12.8833 25.6544 12.7834 25.6544 12.6779 25.6266C11.6739 25.3633 9.0421 24.54 6.68408 22.7083C4.3589 20.9022 2.33333 18.1515 2.33333 13.9341V6.99177C2.33333 6.96899 2.35382 6.83033 2.54733 6.61304C2.73222 6.40546 2.98357 6.23428 3.19991 6.14703L12.4 2.43668Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-field-chevron\" viewBox=\"0 0 7 14\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0.146447 0.157712C0.341709 -0.0525706 0.658291 -0.0525706 0.853553 0.157712L6.85355 6.61925C7.04882 6.82953 7.04882 7.17047 6.85355 7.38075L0.853553 13.8423C0.658291 14.0526 0.341709 14.0526 0.146447 13.8423C-0.0488155 13.632 -0.0488155 13.2911 0.146447 13.0808L5.79289 7L0.146447 0.919211C-0.0488155 0.708929 -0.0488155 0.367994 0.146447 0.157712Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-chevron-down\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path d=\"M3.5 6.25L8 10.75L12.5 6.25\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-plus\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path d=\"M8 3.5v9M3.5 8h9\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-filter\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path d=\"M1 6.485h22\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/>\n    <path d=\"M3.515 10.485h16.97\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/>\n    <circle cx=\"12\" cy=\"18\" r=\"3\" stroke=\"currentColor\" stroke-width=\"2\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-faq-arrow\" viewBox=\"0 0 31 32\" fill=\"none\">\n    <path d=\"M15.5572 30.4057L28.9922 16.9707\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n    <path d=\"M15.5547 30.4062L2.82677 17.6783\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n    <path d=\"M15.5516 4.94219V28.998\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-faq-question\" viewBox=\"0 0 41 44\" fill=\"none\">\n    <path d=\"M6.75312 9.76184C0.9875 11.4092 -0.659821 17.1748 1.81116 23.7641C3.45848 27.8824 5.1058 30.3534 5.92946 36.119C6.75312 40.2373 8.40044 42.7083 10.8714 42.7083C14.1661 42.7083 12.5187 33.648 14.1661 33.648C15.8134 33.648 14.9897 42.7083 18.2844 42.7083C20.7554 42.7083 22.4027 40.2373 23.2263 36.119C24.05 30.3534 25.6973 27.8824 27.3446 23.7641C29.8156 17.1748 28.1683 11.4092 22.4027 9.76184C19.108 8.93818 17.4607 11.4092 14.9897 11.4092C12.5187 11.4092 10.0478 8.93818 6.75312 9.76184Z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M33.1088 13.8778C36.748 13.8778 39.6981 10.9277 39.6981 7.2885C39.6981 3.64934 36.748 0.699219 33.1088 0.699219C29.4697 0.699219 26.5195 3.64934 26.5195 7.2885C26.5195 10.9277 29.4697 13.8778 33.1088 13.8778Z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M33.1094 3.16992V8.11188M33.1094 10.5829V11.4065\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-faq-aside\" viewBox=\"0 0 34 34\" fill=\"none\">\n    <path d=\"M9.29688 9.29696C9.29688 7.82998 10.4861 6.64071 11.9531 6.64071C13.4202 6.64071 14.6094 7.82998 14.6094 9.29696C14.6094 10.3181 14.0332 11.2046 13.1883 11.6492C12.3842 12.0723 11.9531 12.9762 11.9531 13.8848\" stroke=\"currentColor\" stroke-width=\"2.65625\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M11.9531 15.9375V18.5938\" stroke=\"currentColor\" stroke-width=\"2.65625\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M11.9531 22.5781L6.64062 25.2344V22.5781H3.98437C2.51733 22.5781 1.32812 21.3889 1.32812 19.9219V3.98438C1.32812 2.5174 2.51733 1.32813 3.98437 1.32813H19.9219C21.3889 1.32813 22.5781 2.5174 22.5781 3.98438V19.9219C22.5781 21.3889 21.3889 22.5781 19.9219 22.5781H11.9531Z\" stroke=\"currentColor\" stroke-width=\"2.65625\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M27.3594 8.76563H30.0156C31.4827 8.76563 32.6719 9.9549 32.6719 11.4219V26.6953C32.6719 28.1623 31.4827 29.3516 30.0156 29.3516H22.0469L16.7344 31.875V29.3516H14.0781C12.6111 29.3516 11.4219 28.1623 11.4219 26.6953\" stroke=\"currentColor\" stroke-width=\"2.65625\" stroke-miterlimit=\"10\" stroke-linecap=\"square\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-location\" viewBox=\"0 0 14 18\" fill=\"none\">\n    <path d=\"M7 18.0037C5.73693 16.9263 4.56619 15.7452 3.5 14.4727C1.9 12.5617 8.83662e-07 9.71571 8.83662e-07 7.00371C-0.00141728 4.17126 1.70425 1.6171 4.32107 0.53311C6.93789 -0.550883 9.95007 0.0489528 11.952 2.05271C13.2685 3.36332 14.0059 5.1461 14 7.00371C14 9.71571 12.1 12.5617 10.5 14.4727C9.43382 15.7452 8.26307 16.9263 7 18.0037ZM7 4.00371C5.92821 4.00371 4.93782 4.57551 4.40193 5.50371C3.86603 6.43192 3.86603 7.57551 4.40193 8.50371C4.93782 9.43192 5.92821 10.0037 7 10.0037C8.65686 10.0037 10 8.66057 10 7.00371C10 5.34686 8.65686 4.00371 7 4.00371Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-eye\" viewBox=\"0 0 30 30\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.75 15.0006C18.75 17.0716 17.0704 18.75 14.9994 18.75C12.9284 18.75 11.25 17.0716 11.25 15.0006C11.25 12.9284 12.9284 11.25 14.9994 11.25C17.0704 11.25 18.75 12.9284 18.75 15.0006Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.9972 23.4311C20.1432 23.4311 24.8499 20.2099 27.4999 14.8405C24.8499 9.47116 20.1432 6.25 14.9972 6.25H15.0026C9.85672 6.25 5.14999 9.47116 2.5 14.8405C5.14999 20.2099 9.85672 23.4311 15.0026 23.4311H14.9972Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-phone\" viewBox=\"0 0 16 16\" fill=\"none\">\n    <path d=\"M15 16C6.466 16.012 0 9.459 0 1.003 0 .45.448 0 1 0h2.639c.495 0 .916.364.989.854.174 1.029.516 2.173 1.016 3.251l.103.222c.143.309.046.675-.23.873-.817.584-1.129 1.759-.493 2.676.799 1.171 1.806 2.178 2.956 2.977.917.636 2.092.324 2.676-.493.198-.277.564-.374.872-.23l.221.102c1.078.499 2.222.841 3.397 1.016.49.072.854.493.854.989V15c0 .552-.448 1-1.001 1H15Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-user\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.0006 2.75C10.0478 2.75 8.46484 4.33299 8.46484 6.28571C8.46484 8.23844 10.0478 9.82143 12.0006 9.82143C13.9533 9.82143 15.5363 8.23844 15.5363 6.28571C15.5363 4.33299 13.9533 2.75 12.0006 2.75ZM6.96484 6.28571C6.96484 3.50457 9.21941 1.25 12.0006 1.25C14.7817 1.25 17.0363 3.50457 17.0363 6.28571C17.0363 9.06686 14.7817 11.3214 12.0006 11.3214C9.21941 11.3214 6.96484 9.06686 6.96484 6.28571Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.30958 16.1661C5.86682 14.5023 8.39944 13.25 12.2857 13.25C16.172 13.25 18.7046 14.5023 20.2618 16.1661C21.7995 17.8088 22.3214 19.7847 22.3214 21.1429C22.3214 21.5571 21.9856 21.8929 21.5714 21.8929H3C2.58579 21.8929 2.25 21.5571 2.25 21.1429C2.25 19.7847 2.77196 17.8088 4.30958 16.1661ZM3.81378 20.3929H20.7576C20.6016 19.4301 20.14 18.2309 19.1667 17.1911C17.9382 15.8786 15.828 14.75 12.2857 14.75C8.74342 14.75 6.63318 15.8786 5.40471 17.1911C4.43143 18.2309 3.96986 19.4301 3.81378 20.3929Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-check\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path d=\"M9.5 16.2 5.8 12.5l1.4-1.4 2.3 2.3 6.5-6.5 1.4 1.4z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-call\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path d=\"M13.6875 0.9375C18.8565 0.9375 23.0625 5.14345 23.0625 10.3125\" stroke=\"currentColor\" stroke-width=\"1.875\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M13.6875 4.6875C16.7893 4.6875 19.3125 7.21069 19.3125 10.3125\" stroke=\"currentColor\" stroke-width=\"1.875\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M13.6875 8.4375C14.723 8.4375 15.5625 9.27698 15.5625 10.3125\" stroke=\"currentColor\" stroke-width=\"1.875\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M8.61776 8.75411L6.8592 10.5127C7.73815 11.6618 8.77254 12.8864 9.94357 14.0574C11.114 15.2278 12.3379 16.2617 13.4886 17.1415L15.2469 15.3833C15.9791 14.651 17.1663 14.651 17.8985 15.3833L21.876 19.3608L19.8873 21.3495L19.2695 21.9673C18.0244 23.2123 16.0906 23.4168 14.6009 22.478C12.6377 21.2408 9.86304 19.2802 7.29195 16.7091C4.72085 14.1381 2.76031 11.3634 1.52299 9.40009C0.58418 7.91045 0.788649 5.97658 2.03374 4.73153L2.65156 4.11372L4.64027 2.125L8.61776 6.10248C9.34999 6.83467 9.34999 8.02187 8.61776 8.75411Z\" stroke=\"currentColor\" stroke-width=\"1.875\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-route\" viewBox=\"0 0 24 24\" fill=\"none\">\n    <path d=\"M18.2722 13.875H20.067C20.8509 13.875 21.4864 14.5105 21.4864 15.2944C21.4864 16.0782 20.8509 16.7137 20.067 16.7137H14.5892C13.7853 16.7137 13.1336 17.3654 13.1336 18.1693C13.1336 18.9732 13.7853 19.6249 14.5892 19.6249H17.2559C17.9891 19.6249 18.5836 20.2193 18.5836 20.9526C18.5836 21.6859 17.9891 22.2803 17.2559 22.2803H5.82031\" stroke=\"currentColor\" stroke-width=\"1.39787\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M5.82098 22.1743C5.82098 22.1743 0.699219 19.1299 0.699219 15.2272C0.699219 12.4031 2.99681 10.1055 5.82098 10.1055C8.64515 10.1055 10.9427 12.4031 10.9427 15.2272C10.9427 19.1299 5.82098 22.1743 5.82098 22.1743Z\" stroke=\"currentColor\" stroke-width=\"1.39787\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M5.81999 17.1517C6.91575 17.1517 7.80403 16.2634 7.80403 15.1676C7.80403 14.0719 6.91575 13.1836 5.81999 13.1836C4.72423 13.1836 3.83594 14.0719 3.83594 15.1676C3.83594 16.2634 4.72423 17.1517 5.81999 17.1517Z\" stroke=\"currentColor\" stroke-width=\"1.39787\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M18.1804 13.765C18.1804 13.765 13.0586 10.7314 13.0586 6.82879C13.0586 4.00462 15.3562 1.70703 18.1804 1.70703C21.0045 1.70703 23.3021 4.00462 23.3021 6.82879C23.3021 10.7314 18.1804 13.765 18.1804 13.765Z\" stroke=\"currentColor\" stroke-width=\"1.39787\" stroke-miterlimit=\"10\"\/>\n    <path d=\"M18.1794 8.75325C19.2751 8.75325 20.1634 7.86496 20.1634 6.7692C20.1634 5.67344 19.2751 4.78516 18.1794 4.78516C17.0836 4.78516 16.1953 5.67344 16.1953 6.7692C16.1953 7.86496 17.0836 8.75325 18.1794 8.75325Z\" stroke=\"currentColor\" stroke-width=\"1.39787\" stroke-miterlimit=\"10\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-address\" viewBox=\"0 0 23 23\" fill=\"none\">\n    <path d=\"M18.041 9.65731C18.1948 9.07969 18.2812 8.49491 18.2812 7.91013C18.2812 4.0269 15.1332 0.878882 11.25 0.878882C7.36677 0.878882 4.21875 4.0269 4.21875 7.91013C4.21875 11.82 8.08392 15.7298 10.0828 17.4904C10.7536 18.0813 11.7464 18.0813 12.4172 17.4904C14.1171 15.9932 17.1668 12.9415 18.041 9.65731Z\" stroke=\"currentColor\" stroke-width=\"1.75781\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M13.0078 7.91016C13.0078 8.88095 12.2208 9.66797 11.25 9.66797C10.2792 9.66797 9.49219 8.88095 9.49219 7.91016C9.49219 6.93936 10.2792 6.15234 11.25 6.15234C12.2208 6.15234 13.0078 6.93936 13.0078 7.91016Z\" stroke=\"currentColor\" stroke-width=\"1.75781\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M4.16461 16.0402L2.64564 19.0782C2.52747 19.3145 2.46094 19.5811 2.46094 19.8633C2.46094 20.8341 3.24795 21.6211 4.21875 21.6211H18.2812C19.2521 21.6211 20.0391 20.8341 20.0391 19.8633C20.0391 19.5811 19.9726 19.3145 19.8544 19.0782L18.3324 16.0341\" stroke=\"currentColor\" stroke-width=\"1.75781\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-hours\" viewBox=\"0 0 23 23\" fill=\"none\">\n    <path d=\"M12.7267 17.0078H0.660156V3.29688H18.7656V13.0264\" stroke=\"currentColor\" stroke-width=\"1.31836\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M17.3154 21.8418C19.8153 21.8418 21.8418 19.8153 21.8418 17.3154C21.8418 14.8156 19.8153 12.7891 17.3154 12.7891C14.8156 12.7891 12.7891 14.8156 12.7891 17.3154C12.7891 19.8153 14.8156 21.8418 17.3154 21.8418Z\" stroke=\"currentColor\" stroke-width=\"1.31836\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M17.3135 15.4258V17.3154H15.8633\" stroke=\"currentColor\" stroke-width=\"1.31836\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M12.7891 3.29688H6.63672V1.97324C6.63672 1.24806 7.22462 0.660156 7.9498 0.660156H11.4759C12.2012 0.660156 12.7891 1.24806 12.7891 1.97324V3.29688Z\" stroke=\"currentColor\" stroke-width=\"1.31836\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M15.1361 8.2627H4.28973C2.28517 8.2627 0.660156 6.63769 0.660156 4.63312V3.29688H18.7656V4.63312C18.7656 6.63769 17.1406 8.2627 15.1361 8.2627Z\" stroke=\"currentColor\" stroke-width=\"1.31836\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n    <path d=\"M10.6643 10.8984H8.76342C8.14761 10.8984 7.64844 10.3993 7.64844 9.78346V8.26172H11.7793V9.78346C11.7793 10.3993 11.2801 10.8984 10.6643 10.8984Z\" stroke=\"currentColor\" stroke-width=\"1.31836\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-whatsapp\" viewBox=\"0 0 27 27\" fill=\"none\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M22.95 3.88125C20.4188 1.35 17.0438 0 13.5 0C6.075 0 0 6.075 0 13.5C0 15.8625 0.67501 18.225 1.85626 20.25L0 27L7.08752 25.1437C9.11252 26.1562 11.3062 26.8312 13.5 26.8312C20.925 26.8312 27 20.7563 27 13.3312C27 9.7875 25.4813 6.4125 22.95 3.88125ZM13.5 24.6375C11.475 24.6375 9.45001 24.1313 7.76251 23.1188L7.42499 22.95L3.20624 24.1312L4.38751 20.0812L4.04999 19.575C2.86874 17.7188 2.36249 15.6938 2.36249 13.6688C2.36249 7.59375 7.425 2.53125 13.5 2.53125C16.5375 2.53125 19.2375 3.7125 21.4313 5.7375C23.625 7.93125 24.6375 10.6313 24.6375 13.6688C24.6375 19.575 19.7437 24.6375 13.5 24.6375ZM19.575 16.2C19.2375 16.0312 17.55 15.1875 17.2125 15.1875C16.875 15.0188 16.7062 15.0188 16.5375 15.3563C16.3687 15.6938 15.6938 16.3687 15.525 16.7062C15.3563 16.875 15.1875 16.875 14.85 16.875C14.5125 16.7062 13.5 16.3687 12.15 15.1875C11.1375 14.3438 10.4625 13.1625 10.2938 12.825C10.125 12.4875 10.2938 12.3187 10.4625 12.15C10.6313 11.9812 10.8 11.8125 10.9688 11.6437C11.1375 11.475 11.1375 11.3063 11.3063 11.1375C11.475 10.9688 11.3063 10.8 11.3063 10.6313C11.3063 10.4625 10.6313 8.775 10.2938 8.1C10.125 7.59375 9.78752 7.59375 9.61877 7.59375C9.45002 7.59375 9.28123 7.59375 8.94373 7.59375C8.77498 7.59375 8.43748 7.59375 8.09998 7.93125C7.76248 8.26875 6.91876 9.1125 6.91876 10.8C6.91876 12.4875 8.09999 14.0063 8.26874 14.3438C8.43749 14.5125 10.6312 18.0562 14.0062 19.4062C16.875 20.5875 17.3813 20.25 18.0563 20.25C18.7313 20.25 20.0812 19.4062 20.25 18.7313C20.5875 17.8875 20.5875 17.2125 20.4188 17.2125C20.25 16.3688 19.9125 16.3688 19.575 16.2Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-telegram\" viewBox=\"0 0 27 23\" fill=\"none\">\n    <path d=\"M1.85611 9.63275C9.10385 6.47502 13.9368 4.39326 16.355 3.38745C23.2594 0.515667 24.6941 0.0168079 25.6292 0.000159698C25.8349 -0.00328763 26.2947 0.0476824 26.5926 0.289388C26.8441 0.493479 26.9133 0.769178 26.9464 0.962678C26.9795 1.15618 27.0208 1.59698 26.988 1.94141C26.6138 5.87266 24.9949 15.4128 24.1713 19.8158C23.8228 21.6789 23.1365 22.3036 22.4722 22.3648C21.0284 22.4976 19.9321 21.4106 18.5337 20.494C16.3455 19.0596 15.1094 18.1667 12.9854 16.767C10.5307 15.1494 12.122 14.2604 13.5209 12.8074C13.887 12.4272 20.2483 6.64109 20.3714 6.1162C20.3868 6.05055 20.4011 5.80585 20.2557 5.67664C20.1103 5.54743 19.8958 5.59162 19.7409 5.62676C19.5215 5.67657 16.0259 7.98705 9.25407 12.5582C8.26184 13.2395 7.36312 13.5715 6.55789 13.5541C5.6702 13.5349 3.96262 13.0522 2.69322 12.6396C1.13624 12.1334 -0.101213 11.8659 0.006541 11.0063C0.0626662 10.5586 0.679189 10.1008 1.85611 9.63275Z\" fill=\"currentColor\"\/>\n  <\/symbol>\n\n  <symbol id=\"icon-contacts-map-pin\" viewBox=\"0 0 31 45\" fill=\"none\">\n    <path d=\"M28.8322 16.0328C28.8322 28.5136 18.681 39.9173 15.8989 42.8082C15.5104 43.2119 14.892 43.2119 14.5035 42.8082C11.7215 39.9173 1.57031 28.5136 1.57031 16.0328C1.57031 7.35532 8.38578 1.57031 15.2012 1.57031C22.0167 1.57031 28.8322 7.35532 28.8322 16.0328Z\" fill=\"currentColor\"\/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.2037 3.1456C9.24237 3.1456 3.1456 8.2409 3.1456 16.0353C3.1456 21.8691 5.52748 27.5504 8.34206 32.2054C10.8763 36.3968 13.6923 39.6429 15.2037 41.2605C16.7151 39.6429 19.5311 36.3968 22.0654 32.2054C24.88 27.5504 27.2619 21.8691 27.2619 16.0353C27.2619 8.2409 21.1651 3.1456 15.2037 3.1456ZM0 16.0353C0 6.47472 7.53416 0 15.2037 0C22.8733 0 30.4075 6.47472 30.4075 16.0353C30.4075 22.6823 27.7137 28.9432 24.7572 33.833C21.7896 38.7411 18.4712 42.4085 17.0347 43.9013C16.0275 44.9479 14.38 44.9479 13.3728 43.9013C11.9363 42.4085 8.61789 38.7411 5.65025 33.833C2.69372 28.9432 0 22.6823 0 16.0353Z\" fill=\"currentColor\"\/>\n    <path d=\"M19.3966 18.3038C19.3966 20.6203 17.5187 22.4982 15.2022 22.4982C12.8857 22.4982 11.0078 20.6203 11.0078 18.3038C11.0078 15.9873 12.8857 14.1094 15.2022 14.1094C17.5187 14.1094 19.3966 15.9873 19.3966 18.3038Z\" fill=\"var(--text-on-brand)\"\/>\n  <\/symbol>\n<\/svg>\n",
    "popups": {
        "form-appointment": {
            "code": "<div class=\"popup\" data-popup=\"<?= htmlspecialchars($form_instance_id) ?>\" data-popup-type=\"<?= htmlspecialchars($form_instance_type) ?>\" hidden>\n    <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n    <div class=\"popup__dialog popup__dialog--appointment\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"popup-title-<?= htmlspecialchars($form_instance_slug) ?>\">\n        <button type=\"button\" class=\"popup__close\" data-popup-close aria-label=\"Закрыть\">\n            <svg class=\"popup__close-icon\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M23.0817 0L12.8333 10.2483L2.585 0L0 2.585L10.2483 12.8333L0 23.0817L2.585 25.6667L12.8333 15.4183L23.0817 25.6667L25.6667 23.0817L15.4183 12.8333L25.6667 2.585L23.0817 0Z\" fill=\"currentColor\"\/>\n            <\/svg>\n        <\/button>\n        <div class=\"popup__appointment\">\n            <div class=\"popup__appointment-visual\" aria-hidden=\"true\">\n                <img\n                        src=\"<?= htmlspecialchars($popup_form_image) ?>\"\n                        alt=\"\"\n                        width=\"580\"\n                        height=\"551\"\n                        loading=\"lazy\"\n                        decoding=\"async\"\n                >\n            <\/div>\n            <div class=\"popup__appointment-main stack stack--lg\">\n                <div class=\"popup__head titles\">\n                    <span class=\"popup__title megatext-sm\" id=\"popup-title-<?= htmlspecialchars($form_instance_slug) ?>\"><?= $popup_form_title ?><\/span>\n                    <p class=\"popup__lead bodytext-lg-regular\"><?= $popup_form_lead ?><\/p>\n                <\/div>\n                <form\n                        class=\"popup-form popup-form--appointment popup-form--consent-gated<?= $popup_form_show_name ? ' popup-form--with-name' : '' ?><?= $popup_form_show_service ? ' popup-form--with-service' : '' ?>\"\n                        method=\"post\"\n                        data-popup-form=\"<?= htmlspecialchars($form_instance_id) ?>\"\n                        data-popup-form-type=\"<?= htmlspecialchars($form_instance_type) ?>\"\n                        data-popup-form-show-name=\"<?= $popup_form_show_name ? '1' : '0' ?>\"\n                        data-popup-form-show-service=\"<?= $popup_form_show_service ? '1' : '0' ?>\"\n                        data-form-ajax=\"1\"\n                        action=\"\/?form=1\"\n                >\n                    <div class=\"popup-form__fields\">\n                        <?php if ($popup_form_show_service): ?>\n                            <label class=\"field field--select\">\n                                <span class=\"field__label bodytext-sm\"><?= htmlspecialchars($popup_form_service_label) ?><span class=\"field__required\" aria-hidden=\"true\">*<\/span><\/span>\n                                <select class=\"field__input field__select\" name=\"<?=$popup_form_service_name?>\" required>\n                                    <option value=\"\" selected disabled><?= htmlspecialchars($popup_form_service_placeholder) ?><\/option>\n                                    <?php foreach ($popup_form_services as $service_option): ?>\n                                        <option value=\"<?= htmlspecialchars($service_option['value']) ?>\"<?=($popup_form_service_value==$service_option['value'])?' selected':''?>><?= htmlspecialchars($service_option['label']) ?><\/option>\n                                    <?php endforeach; ?>\n                                <\/select>\n                                <span class=\"field__select-icon\" aria-hidden=\"true\">\n                  <svg class=\"icon\" width=\"24\" height=\"24\" aria-hidden=\"true\">\n                    <use href=\"#icon-chevron-down\"><\/use>\n                  <\/svg>\n                <\/span>\n                            <\/label>\n                        <?php endif; ?>\n                        <?php if ($popup_form_show_name): ?>\n                            <label class=\"field\">\n                                <span class=\"field__label bodytext-sm\"><?= htmlspecialchars($popup_form_name_label) ?><span class=\"field__required\" aria-hidden=\"true\">*<\/span><\/span>\n                                <input class=\"field__input\" type=\"text\" name=\"<?=$popup_form_name_name?>\" value=\"<?=$popup_form_name_value?>\" placeholder=\"<?= htmlspecialchars($popup_form_name_placeholder) ?>\" autocomplete=\"name\" required>\n                            <\/label>\n                        <?php endif; ?>\n                        <label class=\"field\">\n                            <span class=\"field__label bodytext-sm\"><?= htmlspecialchars($popup_form_phone_label) ?><span class=\"field__required\" aria-hidden=\"true\">*<\/span><\/span>\n                            <input class=\"field__input\" type=\"tel\" name=\"<?=$popup_form_phone_name?>\" value=\"<?=$popup_form_phone_value?>\" placeholder=\"<?= htmlspecialchars($popup_form_phone_placeholder) ?>\" autocomplete=\"tel\" required>\n                        <\/label>\n                    <\/div>\n                    <div class=\"popup-form__legal-block stack\">\n                        <p class=\"popup-form__legal bodytext-sm\"><?= $popup_form_offer_html ?><\/p>\n                        <label class=\"popup-form__consent popup-form__consent--rich bodytext-sm\">\n                            <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n                            <span class=\"popup-form__consent-copy stack\">\n                <span class=\"popup-form__consent-title bodytext-sm\">Согласие на обработку персональных данных<span class=\"popup-form__consent-required\" aria-hidden=\"true\">*<\/span><\/span>\n                <span class=\"popup-form__consent-desc\"><?= $popup_form_consent_html ?><\/span>\n              <\/span>\n                        <\/label>\n                        <label class=\"popup-form__consent popup-form__consent--rich bodytext-sm\">\n                            <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"marketing\">\n                            <span class=\"popup-form__consent-copy stack\">\n                <span class=\"popup-form__consent-title bodytext-sm\">Согласие на рекламные и маркетинговые сообщения<\/span>\n                <span class=\"popup-form__consent-desc\"><?= $popup_form_marketing_html ?><\/span>\n              <\/span>\n                        <\/label>\n                        <button type=\"submit\" class=\"btn btn--primary popup-form__submit\" disabled><?= $popup_form_submit_label ?><\/button>\n                    <\/div>\n                <\/form>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n",
            "data": "<?php\n\/* ==== DATA ==== *\/\n\/\/ Попап «Записаться на приём» (data-popup=\"form\")\n\n$popup_form_show_name = true;\n$popup_form_name_label = 'Ваше имя';\n$popup_form_name_placeholder = 'Введите ваше имя';\n$popup_form_name_name = $popup_form_name_name??'name';\n$popup_form_name_value = $popup_form_name_value??'';\n\n$popup_form_show_service = true;\n$popup_form_service_label = 'Услуга';\n$popup_form_service_placeholder = 'Выберите нужную услугу';\n$popup_form_services = [\n    ['label' => 'Имплантация', 'value' => 'implant'],\n    ['label' => 'Протезирование', 'value' => 'prosthetics'],\n    ['label' => 'Лечение кариеса', 'value' => 'caries'],\n    ['label' => 'Ортодонтия', 'value' => 'orthodontics'],\n    ['label' => 'Гигиена и профилактика', 'value' => 'hygiene'],\n];\n$popup_form_service_name = $popup_form_service_name??'service';\n$popup_form_service_value = $popup_form_service_value??'';\n\n$popup_form_image = '\/assets\/src\/img\/popup\/popup-form-appointment.webp';\n$popup_form_title = 'Записаться на&nbsp;приём';\n$popup_form_lead = 'Оставьте свои контакты и&nbsp;мы свяжемся с&nbsp;вами в&nbsp;ближайшее время';\n\n$popup_form_phone_label = 'Ваш номер телефона';\n$popup_form_phone_placeholder = '+7 (___)-___-__-__';\n$popup_form_phone_name = $popup_form_phone_name??'phone';\n$popup_form_phone_value = $popup_form_phone_value??'';\n\n$popup_form_submit_label = 'Записаться на&nbsp;приём';\n\n$popup_form_offer_html = 'Нажимая кнопку «Записаться на&nbsp;приём», я&nbsp;принимаю условия <a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/offer\" onclick=\"event.stopPropagation()\">Публичной оферты.<\/a>';\n$popup_form_consent_html = 'Я&nbsp;даю согласие ООО «АЛЕНТЕ СТОМ» на&nbsp;обработку моих персональных данных (номер телефона, адрес электронной почты) в&nbsp;целях осуществления обратной связи и&nbsp;записи на&nbsp;приём. С&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\" onclick=\"event.stopPropagation()\">Политикой конфиденциальности<\/a> сайта ознакомлен(а). Согласие может быть отозвано путём направления заявления на&nbsp;адрес privacy@alente-stom.ru';\n$popup_form_marketing_html = 'Я&nbsp;согласен(а) получать от&nbsp;ООО «АЛЕНТЕ СТОМ» рекламные сообщения (акции, спецпредложения) по&nbsp;электронной почте. Отписаться от&nbsp;рассылки можно в&nbsp;любое время по&nbsp;ссылке в&nbsp;письме.';\n\nreturn [\n    'popup_form_show_name' => $popup_form_show_name,\n    'popup_form_name_label' => $popup_form_name_label,\n    'popup_form_name_placeholder' => $popup_form_name_placeholder,\n    'popup_form_show_service' => $popup_form_show_service,\n    'popup_form_service_label' => $popup_form_service_label,\n    'popup_form_service_placeholder' => $popup_form_service_placeholder,\n    'popup_form_services' => $popup_form_services,\n    'popup_form_image' => $popup_form_image,\n    'popup_form_title' => $popup_form_title,\n    'popup_form_lead' => $popup_form_lead,\n    'popup_form_phone_label' => $popup_form_phone_label,\n    'popup_form_phone_placeholder' => $popup_form_phone_placeholder,\n    'popup_form_submit_label' => $popup_form_submit_label,\n    'popup_form_offer_html' => $popup_form_offer_html,\n    'popup_form_consent_html' => $popup_form_consent_html,\n    'popup_form_marketing_html' => $popup_form_marketing_html,\n    'popup_form_name_name' => $popup_form_name_name,\n    'popup_form_name_value' => $popup_form_name_value,\n    'popup_form_service_name' => $popup_form_service_name,\n    'popup_form_service_value' => $popup_form_service_value,\n    'popup_form_phone_name' => $popup_form_phone_name,\n    'popup_form_phone_value' => $popup_form_phone_value,\n];\n"
        },
        "form-question": {
            "code": "<div class=\"popup\" data-popup=\"<?= htmlspecialchars($form_instance_id) ?>\" data-popup-type=\"<?= htmlspecialchars($form_instance_type) ?>\" hidden>\n  <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n  <div class=\"popup__dialog popup__dialog--appointment popup__dialog--question\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"popup-title-<?= htmlspecialchars($form_instance_slug) ?>\">\n    <button type=\"button\" class=\"popup__close\" data-popup-close aria-label=\"Закрыть\">\n      <svg class=\"popup__close-icon\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" aria-hidden=\"true\">\n        <path d=\"M23.0817 0L12.8333 10.2483L2.585 0L0 2.585L10.2483 12.8333L0 23.0817L2.585 25.6667L12.8333 15.4183L23.0817 25.6667L25.6667 23.0817L15.4183 12.8333L25.6667 2.585L23.0817 0Z\" fill=\"currentColor\"\/>\n      <\/svg>\n    <\/button>\n    <div class=\"popup__appointment popup__appointment--question\">\n      <div class=\"popup__appointment-visual\" aria-hidden=\"true\">\n        <img\n          src=\"<?= htmlspecialchars($popup_question_image) ?>\"\n          alt=\"\"\n          width=\"644\"\n          height=\"695\"\n          loading=\"lazy\"\n          decoding=\"async\"\n        >\n      <\/div>\n      <div class=\"popup__appointment-main stack stack--lg\">\n        <div class=\"popup__head titles\">\n          <span class=\"popup__title megatext-sm\" id=\"popup-title-<?= htmlspecialchars($form_instance_slug) ?>\"><?= $popup_question_title ?><\/span>\n          <p class=\"popup__lead bodytext-lg-regular\"><?= $popup_question_lead ?><\/p>\n        <\/div>\n        <form class=\"popup-form popup-form--question popup-form--consent-gated\" method=\"post\" data-popup-form=\"<?= htmlspecialchars($form_instance_id) ?>\" data-popup-form-type=\"<?= htmlspecialchars($form_instance_type) ?>\">\n          <div class=\"popup-form__fields\">\n            <div class=\"popup-form__row popup-form__row--split\">\n              <label class=\"field\">\n                <span class=\"field__label bodytext-sm\"><?= htmlspecialchars($popup_question_name_label) ?><span class=\"field__required\" aria-hidden=\"true\">*<\/span><\/span>\n                <input class=\"field__input\" type=\"text\" name=\"name\" placeholder=\"<?= htmlspecialchars($popup_question_name_placeholder) ?>\" autocomplete=\"name\" required>\n              <\/label>\n              <label class=\"field\">\n                <span class=\"field__label bodytext-sm\"><?= htmlspecialchars($popup_question_phone_label) ?><span class=\"field__required\" aria-hidden=\"true\">*<\/span><\/span>\n                <input class=\"field__input\" type=\"tel\" name=\"phone\" placeholder=\"<?= htmlspecialchars($popup_question_phone_placeholder) ?>\" autocomplete=\"tel\" required>\n              <\/label>\n            <\/div>\n            <label class=\"field field--textarea\">\n              <span class=\"field__label bodytext-sm\"><?= htmlspecialchars($popup_question_message_label) ?><span class=\"field__required\" aria-hidden=\"true\">*<\/span><\/span>\n              <div class=\"field__textarea-wrap\">\n                <textarea\n                  class=\"field__input field__input--area field__input--comment\"\n                  name=\"message\"\n                  rows=\"4\"\n                  placeholder=\"<?= htmlspecialchars($popup_question_message_placeholder) ?>\"\n                  maxlength=\"<?= (int) $popup_question_message_maxlength ?>\"\n                  required\n                  data-char-counter-field\n                ><\/textarea>\n                <span class=\"field__counter bodytext-md\" data-char-counter aria-live=\"polite\">0\/<?= (int) $popup_question_message_maxlength ?><\/span>\n              <\/div>\n            <\/label>\n          <\/div>\n          <div class=\"popup-form__legal-block stack\">\n            <p class=\"popup-form__legal bodytext-sm\"><?= $popup_question_offer_html ?><\/p>\n            <label class=\"popup-form__consent popup-form__consent--rich bodytext-sm\">\n              <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n              <span class=\"popup-form__consent-copy stack\">\n                <span class=\"popup-form__consent-title bodytext-sm\">Согласие на обработку персональных данных<span class=\"popup-form__consent-required\" aria-hidden=\"true\">*<\/span><\/span>\n                <span class=\"popup-form__consent-desc\"><?= $popup_question_consent_html ?><\/span>\n              <\/span>\n            <\/label>\n            <label class=\"popup-form__consent popup-form__consent--rich bodytext-sm\">\n              <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"marketing\">\n              <span class=\"popup-form__consent-copy stack\">\n                <span class=\"popup-form__consent-title bodytext-sm\">Согласие на рекламные и маркетинговые сообщения<\/span>\n                <span class=\"popup-form__consent-desc\"><?= $popup_question_marketing_html ?><\/span>\n              <\/span>\n            <\/label>\n            <button type=\"submit\" class=\"btn btn--primary popup-form__submit\" disabled><?= htmlspecialchars($popup_question_submit_label) ?><\/button>\n          <\/div>\n        <\/form>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n",
            "data": "<?php\n\/* ==== DATA ==== *\/\n\/\/ Попап «Задать вопрос» (data-popup=\"form-question\")\n\n$popup_question_image = '\/assets\/src\/img\/popup\/popup-form-question.webp';\n$popup_question_title = 'Задать вопрос';\n$popup_question_lead = 'Оставьте ваш вопрос и&nbsp;мы ответим на&nbsp;него в&nbsp;ближайшее время';\n\n$popup_question_name_label = 'Ваше имя';\n$popup_question_name_placeholder = 'Введите ваше имя';\n$popup_question_phone_label = 'Ваш номер телефона';\n$popup_question_phone_placeholder = '+7 (___)-___-__-__';\n$popup_question_message_label = 'Ваш комментарий или вопрос';\n$popup_question_message_placeholder = 'Опишите ваш вопрос';\n$popup_question_message_maxlength = 1500;\n$popup_question_submit_label = 'Задать вопрос';\n\n$popup_question_offer_html = 'Нажимая кнопку «Задать вопрос», я&nbsp;принимаю условия <a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/offer\" onclick=\"event.stopPropagation()\">Публичной оферты.<\/a>';\n$popup_question_consent_html = 'Я&nbsp;даю согласие ООО «АЛЕНТЕ СТОМ» на&nbsp;обработку моих персональных данных (номер телефона, адрес электронной почты) в&nbsp;целях осуществления обратной связи и&nbsp;записи на&nbsp;приём. С&nbsp;<a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\" onclick=\"event.stopPropagation()\">Политикой конфиденциальности<\/a> сайта ознакомлен(а). Согласие может быть отозвано путём направления заявления на&nbsp;адрес privacy@alente-stom.ru';\n$popup_question_marketing_html = 'Я&nbsp;согласен(а) получать от&nbsp;ООО «АЛЕНТЕ СТОМ» рекламные сообщения (акции, спецпредложения) по&nbsp;электронной почте. Отписаться от&nbsp;рассылки можно в&nbsp;любое время по&nbsp;ссылке в&nbsp;письме.';\n\nreturn [\n    'popup_question_image' => $popup_question_image,\n    'popup_question_title' => $popup_question_title,\n    'popup_question_lead' => $popup_question_lead,\n    'popup_question_name_label' => $popup_question_name_label,\n    'popup_question_name_placeholder' => $popup_question_name_placeholder,\n    'popup_question_phone_label' => $popup_question_phone_label,\n    'popup_question_phone_placeholder' => $popup_question_phone_placeholder,\n    'popup_question_message_label' => $popup_question_message_label,\n    'popup_question_message_placeholder' => $popup_question_message_placeholder,\n    'popup_question_message_maxlength' => $popup_question_message_maxlength,\n    'popup_question_submit_label' => $popup_question_submit_label,\n    'popup_question_offer_html' => $popup_question_offer_html,\n    'popup_question_consent_html' => $popup_question_consent_html,\n    'popup_question_marketing_html' => $popup_question_marketing_html,\n];\n"
        },
        "form-review": {
            "code": "<div class=\"popup\" data-popup=\"<?= htmlspecialchars($form_instance_id) ?>\" data-popup-type=\"<?= htmlspecialchars($form_instance_type) ?>\" hidden>\n  <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n  <div class=\"popup__dialog popup__dialog--review-form\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"popup-title-<?= htmlspecialchars($form_instance_slug) ?>\">\n    <button type=\"button\" class=\"popup__close\" data-popup-close aria-label=\"Закрыть\">\n      <svg class=\"popup__close-icon\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" aria-hidden=\"true\">\n        <path d=\"M23.0817 0L12.8333 10.2483L2.585 0L0 2.585L10.2483 12.8333L0 23.0817L2.585 25.6667L12.8333 15.4183L23.0817 25.6667L25.6667 23.0817L15.4183 12.8333L25.6667 2.585L23.0817 0Z\" fill=\"currentColor\"\/>\n      <\/svg>\n    <\/button>\n    <div class=\"popup__review-form stack stack--lg\">\n      <div class=\"popup__head\">\n        <span class=\"popup__title megatext-sm\" id=\"popup-title-<?= htmlspecialchars($form_instance_slug) ?>\"><?= htmlspecialchars($popup_review_title) ?><\/span>\n      <\/div>\n      <form\n        class=\"popup-form popup-form--review popup-form--consent-gated\"\n        method=\"post\"\n        data-popup-form=\"<?= htmlspecialchars($form_instance_id) ?>\"\n        data-popup-form-type=\"<?= htmlspecialchars($form_instance_type) ?>\"\n        data-form-success-message=\"<?= htmlspecialchars($popup_review_success_text) ?>\"\n      >\n        <div class=\"popup-form__fields\">\n          <fieldset class=\"field field--rating\">\n            <legend class=\"field__label popup-form__section-label bodytext-md bodytext-strong\"><?= htmlspecialchars($popup_review_rating_label) ?><\/legend>\n            <div class=\"rating-picks\">\n              <?php foreach ($popup_review_ratings as $rating): ?>\n                <?php\n                  $rating_value = (string) ($rating['value'] ?? '');\n                  $rating_id = 'review-form-rating-' . $form_instance_slug . '-' . $rating_value;\n                  $rating_checked = !empty($rating['checked']);\n                ?>\n                <input\n                  class=\"rating-picks__radio\"\n                  type=\"radio\"\n                  name=\"rating\"\n                  id=\"<?= htmlspecialchars($rating_id) ?>\"\n                  value=\"<?= htmlspecialchars($rating_value) ?>\"\n                  <?= $rating_checked ? 'checked' : '' ?>\n                  <?= $rating_checked ? 'required' : '' ?>\n                >\n                <label class=\"rating-picks__item\" for=\"<?= htmlspecialchars($rating_id) ?>\" aria-label=\"<?= htmlspecialchars($rating['label']) ?>\">\n                  <img\n                    class=\"rating-picks__icon\"\n                    src=\"<?= htmlspecialchars($rating['icon']) ?>\"\n                    alt=\"\"\n                    width=\"36\"\n                    height=\"36\"\n                    loading=\"lazy\"\n                    decoding=\"async\"\n                  >\n                  <span class=\"rating-picks__label bodytext-sm\"><?= htmlspecialchars($rating['label']) ?><\/span>\n                <\/label>\n              <?php endforeach; ?>\n            <\/div>\n          <\/fieldset>\n\n          <fieldset class=\"field field--topic\">\n            <legend class=\"field__label popup-form__section-label bodytext-md bodytext-strong\"><?= htmlspecialchars($popup_review_topic_label) ?><\/legend>\n            <div class=\"topic-picks\">\n              <?php foreach ($popup_review_topics as $topic): ?>\n                <?php\n                  $topic_value = (string) ($topic['value'] ?? '');\n                  $topic_id = 'review-form-topic-' . $form_instance_slug . '-' . $topic_value;\n                ?>\n                <input\n                  class=\"topic-picks__radio\"\n                  type=\"radio\"\n                  name=\"topic\"\n                  id=\"<?= htmlspecialchars($topic_id) ?>\"\n                  value=\"<?= htmlspecialchars($topic_value) ?>\"\n                  <?= !empty($topic['checked']) ? 'checked' : '' ?>\n                  <?= !empty($topic['checked']) ? 'required' : '' ?>\n                >\n                <label class=\"topic-picks__item\" for=\"<?= htmlspecialchars($topic_id) ?>\">\n                  <?php\n                    $topic_icon = (string) ($topic['icon'] ?? '');\n                    $topic_icon_ext = strtolower((string) pathinfo($topic_icon, PATHINFO_EXTENSION));\n                    $topic_svg_fs = Yii::getAlias('@webroot') . $topic_icon;\n                  ?>\n                  <?php if ($topic_icon_ext === 'svg' && is_file($topic_svg_fs)): ?>\n                    <?php\n                      $topic_svg = (string) file_get_contents($topic_svg_fs);\n                      $topic_svg = preg_replace(\n                        '\/<svg\\b\/',\n                        '<svg class=\"topic-picks__icon\" aria-hidden=\"true\"',\n                        $topic_svg,\n                        1\n                      );\n                      echo $topic_svg;\n                    ?>\n                  <?php else: ?>\n                    <span class=\"topic-picks__icon topic-picks__icon--mask\" style=\"--topic-icon: url('<?= htmlspecialchars($topic_icon) ?>')\" aria-hidden=\"true\"><\/span>\n                  <?php endif; ?>\n                  <span class=\"topic-picks__label bodytext-strong\"><?= htmlspecialchars($topic['label']) ?><\/span>\n                <\/label>\n              <?php endforeach; ?>\n            <\/div>\n          <\/fieldset>\n\n          <label class=\"field field--textarea\">\n            <span class=\"field__label popup-form__section-label bodytext-md bodytext-strong\"><?= htmlspecialchars($popup_review_text_label) ?><\/span>\n            <div class=\"field__textarea-wrap\">\n              <textarea\n                class=\"field__input field__input--area field__input--comment\"\n                name=\"text\"\n                rows=\"4\"\n                placeholder=\"<?= htmlspecialchars($popup_review_text_placeholder) ?>\"\n                maxlength=\"<?= (int) $popup_review_text_maxlength ?>\"\n                required\n                data-char-counter-field\n              ><\/textarea>\n              <span class=\"field__counter bodytext\" data-char-counter aria-live=\"polite\">0\/<?= (int) $popup_review_text_maxlength ?><\/span>\n            <\/div>\n          <\/label>\n\n          <div class=\"popup-form__row popup-form__row--split\">\n            <label class=\"field\">\n              <input class=\"field__input\" type=\"tel\" name=\"phone\" placeholder=\"<?= htmlspecialchars($popup_review_phone_placeholder) ?>\" aria-label=\"<?= htmlspecialchars($popup_review_phone_label) ?>\" autocomplete=\"tel\" required>\n            <\/label>\n            <label class=\"field\">\n              <input class=\"field__input\" type=\"text\" name=\"name\" placeholder=\"<?= htmlspecialchars($popup_review_name_placeholder) ?>\" aria-label=\"<?= htmlspecialchars($popup_review_name_label) ?>\" autocomplete=\"name\" required>\n            <\/label>\n          <\/div>\n        <\/div>\n\n        <div class=\"popup-form__legal-block\">\n          <label class=\"popup-form__consent bodytext\">\n            <input class=\"popup-form__consent-input\" type=\"checkbox\" name=\"consent\" required>\n            <span class=\"popup-form__consent-text\"><?= $popup_review_consent_html ?><\/span>\n          <\/label>\n          <button type=\"submit\" class=\"btn btn--primary popup-form__submit\"><?= htmlspecialchars($popup_review_submit_label) ?><\/button>\n        <\/div>\n      <\/form>\n    <\/div>\n  <\/div>\n<\/div>\n",
            "data": "<?php\n\/* ==== DATA ==== *\/\n\/\/ Попап «Оставить отзыв»\n\n$popup_review_title = 'Расскажите, как все прошло?';\n$popup_review_rating_label = 'Ваша оценка';\n$popup_review_topic_label = 'О чем ваш отзыв';\n$popup_review_text_label = 'Расскажите подробнее';\n$popup_review_text_placeholder = 'Введите текст отзыва';\n$popup_review_text_maxlength = 1500;\n$popup_review_name_label = 'ФИО';\n$popup_review_name_placeholder = 'Введите ваше ФИО';\n$popup_review_phone_label = 'Телефон';\n$popup_review_phone_placeholder = '+7(___) ___-__-__';\n$popup_review_submit_label = 'Оставить отзыв';\n$popup_review_success_text = \"Спасибо за отзыв.\\nПосле модерации, ваш отзыв будет опубликован\";\n\n$popup_review_consent_html = 'Нажимая на кнопку, вы соглашаетесь с <a class=\"popup-form__consent-link text-decoration-fade\" href=\"\/policy\" onclick=\"event.stopPropagation()\">политикой обработки персональных данных<\/a>';\n\n$popup_review_ratings = [\n    ['value' => '5', 'label' => 'Отлично', 'icon' => '\/assets\/src\/img\/popup\/review-rating-5.svg', 'checked' => true],\n    ['value' => '4', 'label' => 'Хорошо', 'icon' => '\/assets\/src\/img\/popup\/review-rating-4.svg', 'checked' => false],\n    ['value' => '3', 'label' => 'Нормально', 'icon' => '\/assets\/src\/img\/popup\/review-rating-3.svg', 'checked' => false],\n    ['value' => '2', 'label' => 'Есть замечания', 'icon' => '\/assets\/src\/img\/popup\/review-rating-2.svg', 'checked' => false],\n    ['value' => '1', 'label' => 'Плохо', 'icon' => '\/assets\/src\/img\/popup\/review-rating-1.svg', 'checked' => false],\n];\n\n$popup_review_topics = [\n    ['value' => 'doctor', 'label' => 'О враче', 'icon' => '\/assets\/src\/img\/popup\/review-topic-doctor.svg', 'checked' => true],\n    ['value' => 'clinic', 'label' => 'О клинике', 'icon' => '\/assets\/src\/img\/popup\/review-topic-clinic.svg', 'checked' => false],\n    ['value' => 'service', 'label' => 'Об услуге', 'icon' => '\/assets\/src\/img\/popup\/review-topic-service.svg', 'checked' => false],\n];\n\nreturn [\n    'popup_review_title' => $popup_review_title,\n    'popup_review_rating_label' => $popup_review_rating_label,\n    'popup_review_topic_label' => $popup_review_topic_label,\n    'popup_review_text_label' => $popup_review_text_label,\n    'popup_review_text_placeholder' => $popup_review_text_placeholder,\n    'popup_review_text_maxlength' => $popup_review_text_maxlength,\n    'popup_review_name_label' => $popup_review_name_label,\n    'popup_review_name_placeholder' => $popup_review_name_placeholder,\n    'popup_review_phone_label' => $popup_review_phone_label,\n    'popup_review_phone_placeholder' => $popup_review_phone_placeholder,\n    'popup_review_submit_label' => $popup_review_submit_label,\n    'popup_review_success_text' => $popup_review_success_text,\n    'popup_review_consent_html' => $popup_review_consent_html,\n    'popup_review_ratings' => $popup_review_ratings,\n    'popup_review_topics' => $popup_review_topics,\n];\n"
        },
        "global": {
            "code": "<?php\n\/** Глобальные попапы: media, review, form-success, form-error *\/\n?>\n  <div class=\"popup popup--media\" data-popup=\"media\" hidden>\n    <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n    <div class=\"popup__dialog popup__dialog--media\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Медиа\">\n      <button type=\"button\" class=\"popup__close\" data-popup-close aria-label=\"Закрыть\">\n        <svg class=\"popup__close-icon\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" aria-hidden=\"true\">\n          <path d=\"M23.0817 0L12.8333 10.2483L2.585 0L0 2.585L10.2483 12.8333L0 23.0817L2.585 25.6667L12.8333 15.4183L23.0817 25.6667L25.6667 23.0817L15.4183 12.8333L25.6667 2.585L23.0817 0Z\" fill=\"currentColor\"\/>\n        <\/svg>\n      <\/button>\n      <div class=\"popup__body stack stack--md\">\n        <div class=\"popup__media\" data-popup-media-slot><\/div>\n        <div class=\"popup__media-meta\" data-popup-media-meta hidden>\n          <div class=\"popup__media-meta-row\">\n            <p class=\"popup__media-author bodytext-strong\" data-popup-media-author><\/p>\n            <div class=\"popup__media-stars\" data-popup-media-stars aria-hidden=\"true\"><\/div>\n          <\/div>\n          <p class=\"popup__media-service bodytext-strong\" data-popup-media-service hidden>\n            <span class=\"popup__meta-value\" data-popup-media-service-value><\/span>\n          <\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"popup popup--review\" data-popup=\"review\" hidden>\n    <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n    <div class=\"popup__dialog popup__dialog--review\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Отзыв\">\n      <button type=\"button\" class=\"popup__close\" data-popup-close aria-label=\"Закрыть\">\n        <svg class=\"popup__close-icon\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" aria-hidden=\"true\">\n          <path d=\"M23.0817 0L12.8333 10.2483L2.585 0L0 2.585L10.2483 12.8333L0 23.0817L2.585 25.6667L12.8333 15.4183L23.0817 25.6667L25.6667 23.0817L15.4183 12.8333L25.6667 2.585L23.0817 0Z\" fill=\"currentColor\"\/>\n        <\/svg>\n      <\/button>\n      <div class=\"popup__body\">\n        <div class=\"popup__review\" data-popup-review-slot><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"popup popup--form-result\" data-popup=\"form-success\" hidden>\n    <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n    <div class=\"popup__dialog popup__dialog--form-result\" role=\"alertdialog\" aria-modal=\"true\" aria-labelledby=\"popup-title-form-success\">\n      <div class=\"popup-form-result\">\n        <p class=\"popup-form-result__text bodytext-lg bodytext-strong\" id=\"popup-title-form-success\" data-form-result-text data-default-text=\"<?= htmlspecialchars($popup_result_success_text) ?>\"><?= htmlspecialchars($popup_result_success_text) ?><\/p>\n        <button type=\"button\" class=\"btn btn--primary popup-form-result__ok\" data-popup-close><?= htmlspecialchars($popup_result_ok_label) ?><\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"popup popup--form-result\" data-popup=\"form-error\" hidden>\n    <div class=\"popup__overlay\" data-popup-close tabindex=\"-1\"><\/div>\n    <div class=\"popup__dialog popup__dialog--form-result\" role=\"alertdialog\" aria-modal=\"true\" aria-labelledby=\"popup-title-form-error\">\n      <div class=\"popup-form-result popup-form-result--error\">\n        <div class=\"popup-form-result__icon\" aria-hidden=\"true\">\n          <img src=\"<?= htmlspecialchars($popup_result_error_icon) ?>\" alt=\"\" width=\"64\" height=\"64\" loading=\"lazy\" decoding=\"async\">\n        <\/div>\n        <div class=\"popup-form-result__body\">\n          <p class=\"popup-form-result__text bodytext-lg\" id=\"popup-title-form-error\" data-form-result-text data-default-text=\"<?= htmlspecialchars($popup_result_error_text) ?>\"><?= htmlspecialchars($popup_result_error_text) ?><\/p>\n          <button type=\"button\" class=\"btn btn--primary popup-form-result__ok\" data-popup-close><?= htmlspecialchars($popup_result_ok_label) ?><\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n",
            "data": "<?php\n\/* ==== DATA ==== *\/\n\/\/ Общие попапы результата отправки (form-success \/ form-error)\n\n$popup_result_success_text = 'Ваше обращение успешно отправлено.';\n$popup_result_error_text = 'Чтото пошло не так....попробуйте отправить запрос позже.';\n$popup_result_ok_label = 'ОК';\n$popup_result_error_icon = '\/assets\/src\/img\/popup\/form-error-icon.svg';\n\nreturn [\n    'popup_result_success_text' => $popup_result_success_text,\n    'popup_result_error_text' => $popup_result_error_text,\n    'popup_result_ok_label' => $popup_result_ok_label,\n    'popup_result_error_icon' => $popup_result_error_icon,\n];\n"
        }
    },
    "forms_api": {
        "doc": "docs\/forms-api.md",
        "form_types": [
            "form-appointment",
            "form-question",
            "form-review"
        ],
        "legacy_ids": {
            "form-appointment": "form",
            "form-question": "form-question",
            "form-review": "review-form"
        },
        "instance_id_pattern": "{type}--{block}-{variant}-{blockId}--{localId}",
        "fragment": {
            "query": {
                "form": "1"
            },
            "selector_root": ".popups",
            "selector_popup": ".popup[data-popup=\"{id}\"]"
        },
        "global_popup_ids": [
            "media",
            "review",
            "form-success",
            "form-error"
        ],
        "snapshot_path": "dist\/5\/forms.fragment.html"
    }
}