/* themes/shop/default/build/assets/app-DJQ56iRS.css */
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:90px;padding-left:90px}@media (min-width: 1440px){.container{max-width:1440px}}::-moz-selection{background-color:#060c3b33}::selection{background-color:#060c3b33}input{outline:2px solid transparent;outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.5}button:disabled:hover{cursor:not-allowed;opacity:.5}[class^=icon-],[class*=" icon-"]{font-family:bagisto-shop!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-gdpr-safe:before{content:""}.icon-checkout-address:before{content:""}.icon-edit:before{content:""}.icon-add-new:before{content:""}.icon-arrow-down:before{content:""}.icon-arrow-left-stylish:before{content:""}.icon-arrow-left:before{content:""}.icon-arrow-right-stylish:before{content:""}.icon-arrow-right:before{content:""}.icon-arrow-up:before{content:""}.icon-astreisk:before{content:""}.icon-bin:before{content:""}.icon-box-fill:before{content:""}.icon-calendar:before{content:""}.icon-camera-fill:before{content:""}.icon-camera:before{content:""}.icon-cancel:before{content:""}.icon-cart:before{content:""}.icon-check-box:before{content:""}.icon-compare-1:before{content:""}.icon-compare:before{content:""}.icon-dislike:before{content:""}.icon-dollar-sign:before{content:""}.icon-double-arrow:before{content:""}.icon-download:before{content:""}.icon-email:before{content:""}.icon-error:before{content:""}.icon-eye:before{content:""}.icon-filter-1:before{content:""}.icon-filter-fill:before{content:""}.icon-filter:before{content:""}.icon-flate-rate:before{content:""}.icon-Free-Shipping:before{content:""}.icon-grid-view-fill:before{content:""}.icon-grid-view:before{content:""}.icon-hamburger:before{content:""}.icon-heart-1:before{content:""}.icon-heart-2:before{content:""}.icon-heart-fill:before{content:""}.icon-heart:before{content:""}.icon-left-arrow:before{content:""}.icon-like:before{content:""}.icon-listing-fill:before{content:""}.icon-listing:before{content:""}.icon-location:before{content:""}.icon-minus:before{content:""}.icon-more:before{content:""}.icon-orders:before{content:""}.icon-pen:before{content:""}.icon-plus:before{content:""}.icon-product:before{content:""}.icon-radio-select:before{content:""}.icon-radio-unselect:before{content:""}.icon-right-arrow:before{content:""}.icon-search:before{content:""}.icon-share:before{content:""}.icon-sort-1:before{content:""}.icon-sort-by:before{content:""}.icon-sort:before{content:"";color:#7d7d7d}.icon-star-fill:before{content:""}.icon-star:before{content:""}.icon-support:before{content:""}.icon-tick:before{content:""}.icon-toast-done:before{content:""}.icon-toast-error:before{content:""}.icon-toast-exclamation-mark:before{content:""}.icon-toast-info:before{content:""}.icon-truck:before{content:""}.icon-uncheck:before{content:""}.icon-users:before{content:""}.journal-scroll::-webkit-scrollbar{width:14px;cursor:pointer}.journal-scroll::-webkit-scrollbar-track{background-color:#fff;cursor:pointer;border-radius:12px;border:1px solid #e9e9e9}.journal-scroll::-webkit-scrollbar-thumb{cursor:pointer;background-color:#e9e9e9;border-radius:12px;border:3px solid transparent;background-clip:content-box}.scrollbar-width-hidden{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-width-hidden::-webkit-scrollbar{display:none}.custom-select{-webkit-appearance:none;-moz-appearance:none;background:transparent;background-image:url("data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>");background-repeat:no-repeat;background-position-x:calc(100% - 10px);background-position-y:50%}[dir=rtl] .custom-select{background-position-x:calc(100% - (100% - 10px))}*{box-sizing:border-box;font-family:Roboto,sans-serif}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.label-pending,.label-processing,.label-closed,.label-canceled,.label-info,.label-completed,.label-active{max-width:-moz-max-content;max-width:max-content;border-radius:35px;padding-top:1px;padding-bottom:1px;padding-left:.375rem;padding-right:.375rem;font-size:12px;font-weight:600;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.label-pending{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.label-processing{--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.label-completed,.label-active{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.label-closed{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.label-canceled{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.label-info{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.primary-button{display:flex;max-width:-moz-max-content;max-width:max-content;cursor:pointer;place-content:center;align-items:center;-moz-column-gap:.375rem;column-gap:.375rem;border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(6 12 59 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(6 12 59 / var(--tw-bg-opacity, 1));padding:1rem 2rem;font-weight:500;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.primary-button:hover{opacity:.9}.secondary-button{display:flex;max-width:-moz-max-content;max-width:max-content;cursor:pointer;place-content:center;align-items:center;-moz-column-gap:.375rem;column-gap:.375rem;border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(6 12 59 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:1rem 2rem;font-weight:500;--tw-text-opacity: 1;color:rgb(6 12 59 / var(--tw-text-opacity, 1));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.secondary-button:hover{background-color:#050e3a0d}.shimmer{animation-duration:2.2s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:skeleton;animation-timing-function:linear;background:linear-gradient(to right,#f6f6f6 8%,#f0f0f0 18%,#f6f6f6 33%);background-size:1250px 100%}@keyframes skeleton{0%{background-position:-1250px 0}to{background-position:1250px 0}}@keyframes on-fade{0%{opacity:0}to{opacity:1}}.wrapper-404{position:relative;font-size:394px;perspective:4.5em;overflow:clip;place-self:stretch;top:50%;transform:translateY(-62%)}.glow-404,.glow-shadow-404{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;font-family:"DM Serif Display";overflow:hidden;letter-spacing:24px}.glow-404{background-clip:text;-webkit-background-clip:text;color:#060c3b}.glow-shadow-404{color:#e6e7eb;mix-blend-mode:darken;transform:translateY(15.5%) rotateX(243deg) scaleY(-1) translateY(-23%) scaleY(1.35) translate(7%) skew(-45deg)}canvas[resize]{width:100%;height:100vh}html{margin-top:0!important}.required:after{content:"*"}.skip-to-main-content-link{position:absolute;z-index:999;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1));padding:1em;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));opacity:0}.skip-to-main-content-link:where([dir=ltr],[dir=ltr] *){left:-9999px}.skip-to-main-content-link:where([dir=rtl],[dir=rtl] *){right:-9999px}.skip-to-main-content-link:focus{opacity:1}.skip-to-main-content-link:focus:where([dir=ltr],[dir=ltr] *){left:50%;--tw-translate-x: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.skip-to-main-content-link:focus:where([dir=rtl],[dir=rtl] *){right:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-px{top:-1px;right:-1px;bottom:-1px;left:-1px}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-left-1{left:-.25rem}.-left-10{left:-2.5rem}.-right-1{right:-.25rem}.-right-6{right:-1.5rem}.-top-2\.5{top:-.625rem}.-top-4{top:-1rem}.bottom-0{bottom:0}.bottom-1\.5{bottom:.375rem}.bottom-10{bottom:2.5rem}.bottom-3{bottom:.75rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.left-0{left:0}.left-1\/2{left:50%}.left-1\/4{left:25%}.left-2\.5{left:.625rem}.right-0{right:0}.right-2\.5{right:.625rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-16{top:4rem}.top-2\.5{top:.625rem}.top-20{top:5rem}.top-24{top:6rem}.top-3{top:.75rem}.top-4{top:1rem}.top-5{top:1.25rem}.top-8{top:2rem}.top-9{top:2.25rem}.top-\[74\%\]{top:74%}.top-\[78px\]{top:78px}.z-10{z-index:10}.z-20{z-index:20}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[1\]{z-index:1}.z-\[999\]{z-index:999}.float-right{float:right}.-m-0\.5{margin:-.125rem}.m-0{margin:0}.m-1{margin:.25rem}.m-\[0_auto_20px_auto\]{margin:0 auto 20px}.m-auto{margin:auto}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-2\.5{margin-top:.625rem;margin-bottom:.625rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-auto{margin-top:auto;margin-bottom:auto}.\!mb-0{margin-bottom:0!important}.\!mb-1{margin-bottom:.25rem!important}.\!mb-2{margin-bottom:.5rem!important}.\!mb-2\.5{margin-bottom:.625rem!important}.\!mb-4{margin-bottom:1rem!important}.\!mt-0{margin-top:0!important}.-mt-1{margin-top:-.25rem}.-mt-12{margin-top:-3rem}.-mt-9{margin-top:-2.25rem}.-mt-\[22px\]{margin-top:-22px}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-11{margin-top:2.75rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-32{margin-top:8rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.mt-9{margin-top:2.25rem}.mt-\[34px\]{margin-top:34px}.mt-\[60px\]{margin-top:60px}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-\[2\.743\/1\]{aspect-ratio:2.743/1}.aspect-\[4\/1\]{aspect-ratio:4/1}.aspect-square{aspect-ratio:1 / 1}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-\[100px\]{height:100px}.h-\[100vh\]{height:100vh}.h-\[110px\]{height:110px}.h-\[146px\]{height:146px}.h-\[17px\]{height:17px}.h-\[18px\]{height:18px}.h-\[19px\]{height:19px}.h-\[200px\]{height:200px}.h-\[21px\]{height:21px}.h-\[23px\]{height:23px}.h-\[25px\]{height:25px}.h-\[27px\]{height:27px}.h-\[29px\]{height:29px}.h-\[30px\]{height:30px}.h-\[37\.5px\]{height:37.5px}.h-\[37px\]{height:37px}.h-\[38px\]{height:38px}.h-\[39px\]{height:39px}.h-\[42px\]{height:42px}.h-\[45px\]{height:45px}.h-\[46px\]{height:46px}.h-\[476px\]{height:476px}.h-\[50px\]{height:50px}.h-\[52px\]{height:52px}.h-\[54px\]{height:54px}.h-\[60px\]{height:60px}.h-\[77px\]{height:77px}.h-\[90px\]{height:90px}.h-\[95px\]{height:95px}.h-\[calc\(100vh-74px\)\]{height:calc(100vh - 74px)}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-max{height:-moz-max-content;height:max-content}.max-h-10{max-height:2.5rem}.max-h-11{max-height:2.75rem}.max-h-12{max-height:3rem}.max-h-14{max-height:3.5rem}.max-h-20{max-height:5rem}.max-h-28{max-height:7rem}.max-h-4{max-height:1rem}.max-h-9{max-height:2.25rem}.max-h-\[100px\]{max-height:100px}.max-h-\[110px\]{max-height:110px}.max-h-\[1320px\]{max-height:1320px}.max-h-\[146px\]{max-height:146px}.max-h-\[258px\]{max-height:258px}.max-h-\[300px\]{max-height:300px}.max-h-\[30px\]{max-height:30px}.max-h-\[500px\]{max-height:500px}.max-h-\[50px\]{max-height:50px}.max-h-\[540px\]{max-height:540px}.max-h-\[580px\]{max-height:580px}.max-h-\[610px\]{max-height:610px}.max-h-\[80px\]{max-height:80px}.max-h-\[90px\]{max-height:90px}.max-h-\[95px\]{max-height:95px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-5{min-height:1.25rem}.min-h-\[100px\]{min-height:100px}.min-h-\[110px\]{min-height:110px}.min-h-\[258px\]{min-height:258px}.min-h-\[30px\]{min-height:30px}.min-h-\[34px\]{min-height:34px}.min-h-\[500px\]{min-height:500px}.min-h-\[607px\]{min-height:607px}.min-h-\[78px\]{min-height:78px}.min-h-\[80px\]{min-height:80px}.min-h-full{min-height:100%}.\!w-full{width:100%!important}.w-0\.5{width:.125rem}.w-1\.5{width:.375rem}.w-1\/4{width:25%}.w-1\/5{width:20%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2\.5{width:.625rem}.w-2\/4{width:50%}.w-2\/5{width:40%}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-40{width:10rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-\[108px\]{width:108px}.w-\[110px\]{width:110px}.w-\[131px\]{width:131px}.w-\[15\%\]{width:15%}.w-\[150\.172px\]{width:150.172px}.w-\[150px\]{width:150px}.w-\[158px\]{width:158px}.w-\[161px\]{width:161px}.w-\[165px\]{width:165px}.w-\[168px\]{width:168px}.w-\[171\.516px\]{width:171.516px}.w-\[180px\]{width:180px}.w-\[185px\]{width:185px}.w-\[190px\]{width:190px}.w-\[200px\]{width:200px}.w-\[217px\]{width:217px}.w-\[225px\]{width:225px}.w-\[245px\]{width:245px}.w-\[250px\]{width:250px}.w-\[275px\]{width:275px}.w-\[279px\]{width:279px}.w-\[30\%\]{width:30%}.w-\[300px\]{width:300px}.w-\[302px\]{width:302px}.w-\[30px\]{width:30px}.w-\[31\%\]{width:31%}.w-\[311px\]{width:311px}.w-\[33\%\]{width:33%}.w-\[35\%\]{width:35%}.w-\[356px\]{width:356px}.w-\[35px\]{width:35px}.w-\[36\%\]{width:36%}.w-\[37px\]{width:37px}.w-\[38\%\]{width:38%}.w-\[38px\]{width:38px}.w-\[400px\]{width:400px}.w-\[418px\]{width:418px}.w-\[420px\]{width:420px}.w-\[442px\]{width:442px}.w-\[455px\]{width:455px}.w-\[45px\]{width:45px}.w-\[46px\]{width:46px}.w-\[50\%\]{width:50%}.w-\[500px\]{width:500px}.w-\[50px\]{width:50px}.w-\[55\%\]{width:55%}.w-\[56px\]{width:56px}.w-\[60px\]{width:60px}.w-\[70\%\]{width:70%}.w-\[72px\]{width:72px}.w-\[75px\]{width:75px}.w-\[84px\]{width:84px}.w-\[88px\]{width:88px}.w-\[90\%\]{width:90%}.w-\[90px\]{width:90px}.w-\[94px\]{width:94px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-12{min-width:3rem}.min-w-20{min-width:5rem}.min-w-32{min-width:8rem}.min-w-9{min-width:2.25rem}.min-w-\[100px\]{min-width:100px}.min-w-\[110px\]{min-width:110px}.min-w-\[120px\]{min-width:120px}.min-w-\[150px\]{min-width:150px}.min-w-\[250px\]{min-width:250px}.min-w-\[291px\]{min-width:291px}.min-w-\[304px\]{min-width:304px}.min-w-\[311px\]{min-width:311px}.min-w-\[342px\]{min-width:342px}.min-w-\[450px\]{min-width:450px}.min-w-\[500px\]{min-width:500px}.min-w-\[50px\]{min-width:50px}.min-w-\[560px\]{min-width:560px}.min-w-\[80px\]{min-width:80px}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-10{max-width:2.5rem}.max-w-14{max-width:3.5rem}.max-w-24{max-width:6rem}.max-w-28{max-width:7rem}.max-w-32{max-width:8rem}.max-w-4{max-width:1rem}.max-w-\[100px\]{max-width:100px}.max-w-\[110px\]{max-width:110px}.max-w-\[120px\]{max-width:120px}.max-w-\[1260px\]{max-width:1260px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[217px\]{max-width:217px}.max-w-\[218px\]{max-width:218px}.max-w-\[250px\]{max-width:250px}.max-w-\[286px\]{max-width:286px}.max-w-\[288px\]{max-width:288px}.max-w-\[291px\]{max-width:291px}.max-w-\[311px\]{max-width:311px}.max-w-\[365px\]{max-width:365px}.max-w-\[374px\]{max-width:374px}.max-w-\[380px\]{max-width:380px}.max-w-\[400px\]{max-width:400px}.max-w-\[408px\]{max-width:408px}.max-w-\[414px\]{max-width:414px}.max-w-\[420px\]{max-width:420px}.max-w-\[42px\]{max-width:42px}.max-w-\[445px\]{max-width:445px}.max-w-\[470px\]{max-width:470px}.max-w-\[475px\]{max-width:475px}.max-w-\[500px\]{max-width:500px}.max-w-\[560px\]{max-width:560px}.max-w-\[590px\]{max-width:590px}.max-w-\[595px\]{max-width:595px}.max-w-\[70\%\]{max-width:70%}.max-w-\[80px\]{max-width:80px}.max-w-\[870px\]{max-width:870px}.max-w-\[90px\]{max-width:90px}.max-w-full{max-width:100%}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-9{--tw-translate-y: 2.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-full{--tw-translate-y: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[on-fade_0\.5s_ease-in-out\]{animation:on-fade .5s ease-in-out}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-zoom-in{cursor:zoom-in}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-\[1fr\]{grid-template-columns:1fr}.grid-cols-\[1fr_2fr\]{grid-template-columns:1fr 2fr}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-cols-\[2fr_1fr_1fr\]{grid-template-columns:2fr 1fr 1fr}.grid-cols-\[2fr_3fr\]{grid-template-columns:2fr 3fr}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-baseline{place-content:baseline}.place-items-end{place-items:end}.place-items-center{place-items:center}.content-center{align-content:center}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.\!justify-end{justify-content:flex-end!important}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-20{gap:5rem}.gap-24{gap:6rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-9{gap:2.25rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-x-11{-moz-column-gap:2.75rem;column-gap:2.75rem}.gap-x-14{-moz-column-gap:3.5rem;column-gap:3.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3\.5{-moz-column-gap:.875rem;column-gap:.875rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-x-9{-moz-column-gap:2.25rem;column-gap:2.25rem}.gap-x-\[15px\]{-moz-column-gap:15px;column-gap:15px}.gap-x-\[70px\]{-moz-column-gap:70px;column-gap:70px}.gap-y-0\.5{row-gap:.125rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2\.5{row-gap:.625rem}.gap-y-3{row-gap:.75rem}.gap-y-5{row-gap:1.25rem}.gap-y-6{row-gap:1.5rem}.gap-y-8{row-gap:2rem}.-space-x-px>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-1px * var(--tw-space-x-reverse));margin-left:calc(-1px * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.place-self-end{place-self:end}.self-end{align-self:flex-end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.scroll-smooth{scroll-behavior:smooth}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[20px\]{border-radius:20px}.rounded-\[44px\]{border-radius:44px}.rounded-\[45px\]{border-radius:45px}.rounded-\[54px\]{border-radius:54px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.\!border-2{border-width:2px!important}.border{border-width:1px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.\!border-b-0{border-bottom-width:0px!important}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-b-2{border-bottom-width:2px}.border-b-4{border-bottom-width:4px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0px}.border-l-\[1px\]{border-left-width:1px}.border-r{border-right-width:1px}.border-r-0{border-right-width:0px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-dashed{border-style:dashed}.\!border-none{border-style:none!important}.border-none{border-style:none}.\!border-\[\#E9E9E9\]{--tw-border-opacity: 1 !important;border-color:rgb(233 233 233 / var(--tw-border-opacity, 1))!important}.\!border-\[\#e9decc\]{--tw-border-opacity: 1 !important;border-color:rgb(233 222 204 / var(--tw-border-opacity, 1))!important}.\!border-blue-600{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))!important}.\!border-navyBlue{--tw-border-opacity: 1 !important;border-color:rgb(6 12 59 / var(--tw-border-opacity, 1))!important}.\!border-red-500{--tw-border-opacity: 1 !important;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))!important}.\!border-white{--tw-border-opacity: 1 !important;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))!important}.\!border-zinc-200{--tw-border-opacity: 1 !important;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))!important}.border-\[\#E9E9E9\]{--tw-border-opacity: 1;border-color:rgb(233 233 233 / var(--tw-border-opacity, 1))}.border-\[\#F3F3F3\]{--tw-border-opacity: 1;border-color:rgb(243 243 243 / var(--tw-border-opacity, 1))}.border-\[\#e9decc\]{--tw-border-opacity: 1;border-color:rgb(233 222 204 / var(--tw-border-opacity, 1))}.border-\[\'\#E3E3E3\'\]{border-color:"#E3E3E3"}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1))}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-navyBlue{--tw-border-opacity: 1;border-color:rgb(6 12 59 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-slate-500{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-zinc-200{--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))}.border-zinc-300{--tw-border-opacity: 1;border-color:rgb(212 212 216 / var(--tw-border-opacity, 1))}.\!bg-gray-100{--tw-bg-opacity: 1 !important;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))!important}.\!bg-navyBlue{--tw-bg-opacity: 1 !important;background-color:rgb(6 12 59 / var(--tw-bg-opacity, 1))!important}.\!bg-transparent{background-color:transparent!important}.bg-\[\#B5DCB4\]{--tw-bg-opacity: 1;background-color:rgb(181 220 180 / var(--tw-bg-opacity, 1))}.bg-\[\#F1EADF\]{--tw-bg-opacity: 1;background-color:rgb(241 234 223 / var(--tw-bg-opacity, 1))}.bg-\[\#FFF3CD\]{--tw-bg-opacity: 1;background-color:rgb(255 243 205 / var(--tw-bg-opacity, 1))}.bg-\[rgba\(0\,0\,0\,0\.8\)\]{background-color:#000c}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/80{background-color:#000c}.bg-black\/90{background-color:#000000e6}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-lightOrange{--tw-bg-opacity: 1;background-color:rgb(246 242 235 / var(--tw-bg-opacity, 1))}.bg-navyBlue{--tw-bg-opacity: 1;background-color:rgb(6 12 59 / var(--tw-bg-opacity, 1))}.bg-neutral-200{--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-zinc-100{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.bg-zinc-200{--tw-bg-opacity: 1;background-color:rgb(228 228 231 / var(--tw-bg-opacity, 1))}.bg-zinc-300{--tw-bg-opacity: 1;background-color:rgb(212 212 216 / var(--tw-bg-opacity, 1))}.bg-zinc-50{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.bg-zinc-500{--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.fill-blue-600{fill:#2563eb}.object-cover{-o-object-fit:cover;object-fit:cover}.\!p-0{padding:0!important}.\!p-4{padding:1rem!important}.\!p-5{padding:1.25rem!important}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1\.5{padding:.375rem}.p-16{padding:4rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.p-9{padding:2.25rem}.p-\[60px\]{padding:60px}.\!px-0{padding-left:0!important;padding-right:0!important}.\!px-2{padding-left:.5rem!important;padding-right:.5rem!important}.\!px-4{padding-left:1rem!important;padding-right:1rem!important}.\!py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-11{padding-left:2.75rem;padding-right:2.75rem}.px-16{padding-left:4rem;padding-right:4rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[60px\]{padding-left:60px;padding-right:60px}.px-\[90px\]{padding-left:90px;padding-right:90px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-32{padding-top:8rem;padding-bottom:8rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-\[25px\]{padding-top:25px;padding-bottom:25px}.\!pl-0{padding-left:0!important}.\!pt-2{padding-top:.5rem!important}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-8{padding-bottom:2rem}.pl-12{padding-left:3rem}.pt-0{padding-top:0}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-text-bottom{vertical-align:text-bottom}.font-dmserif{font-family:DM Serif Display,serif}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-\[5px\]{font-size:5px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.\!leading-6{line-height:1.5rem!important}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-\[45px\]{line-height:45px}.leading-\[9px\]{line-height:9px}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.\!text-black{--tw-text-opacity: 1 !important;color:rgb(0 0 0 / var(--tw-text-opacity, 1))!important}.\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity, 1))!important}.text-\[\#383D41\]{--tw-text-opacity: 1;color:rgb(56 61 65 / var(--tw-text-opacity, 1))}.text-\[\#6E6E6E\]{--tw-text-opacity: 1;color:rgb(110 110 110 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-navyBlue{--tw-text-opacity: 1;color:rgb(6 12 59 / var(--tw-text-opacity, 1))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-zinc-300{--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.text-zinc-400{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-zinc-600{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow-\[0_5px_20px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow: 0 5px 20px rgba(0,0,0,.15);--tw-shadow-colored: 0 5px 20px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_6px_6px_1px_rgba\(0\,0\,0\,\.3\)\]{--tw-shadow: 0 6px 6px 1px rgba(0,0,0,.3);--tw-shadow-colored: 0 6px 6px 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0px_10px_84px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow: 0px 10px 84px rgba(0,0,0,.1);--tw-shadow-colored: 0px 10px 84px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-gray-900{--tw-ring-opacity: 1;--tw-ring-color: rgb(17 24 39 / var(--tw-ring-opacity, 1))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.will-change-transform{will-change:transform}@font-face{font-family:bagisto-shop;src:url("https://hagzi.jo/themes/shop/default/build/assets/bagisto-shop-BHAKyv0r.woff") format("woff");font-weight:400;font-style:normal;font-display:swap}img.lazy{visibility:hidden}.peer:checked~.peer-checked\:icon-check-box:before{content:""}.peer:checked~.peer-checked\:icon-radio-select:before{content:""}.rtl\:icon-arrow-left-stylish:where([dir=rtl],[dir=rtl] *):before{content:""}.rtl\:icon-arrow-left:where([dir=rtl],[dir=rtl] *):before{content:""}.rtl\:icon-arrow-right-stylish:where([dir=rtl],[dir=rtl] *):before{content:""}.rtl\:icon-arrow-right:where([dir=rtl],[dir=rtl] *):before{content:""}.marker\:shadow *::marker{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.marker\:shadow::marker{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-0\.5:after{content:var(--tw-content);left:.125rem}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:block:after{content:var(--tw-content);display:block}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.after\:pb-\[calc\(100\%\+9px\)\]:after{content:var(--tw-content);padding-bottom:calc(100% + 9px)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content: "/";content:var(--tw-content)}.last\:mb-0:last-child{margin-bottom:0}.last\:border-b-0:last-child{border-bottom-width:0px}.after\:last\:hidden:last-child:after{content:var(--tw-content);display:none}.last\:after\:content-\[\'\'\]:last-child:after{--tw-content: "";content:var(--tw-content)}.hover\:border-b-4:hover{border-bottom-width:4px}.hover\:\!border-navyBlue:hover{--tw-border-opacity: 1 !important;border-color:rgb(6 12 59 / var(--tw-border-opacity, 1))!important}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:border-navyBlue:hover{--tw-border-opacity: 1;border-color:rgb(6 12 59 / var(--tw-border-opacity, 1))}.hover\:border-red-500:hover{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.hover\:bg-black:hover{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-400:hover{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-zinc-100:hover{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.hover\:text-black:hover{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-gray-400:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.focus\:bg-gray-100:focus{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.focus\:text-black:focus{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-black:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.active\:border-gray-300:active{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.group:hover .group-hover\:pointer-events-auto{pointer-events:auto}.group:hover .group-hover\:bottom-0{bottom:0}.group\/item:hover .group-hover\/item\:block{display:block}.group:hover .group-hover\:-translate-y-0{--tw-translate-y: -0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:scale-105{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:duration-200{transition-duration:.2s}.group:hover .group-hover\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.peer:checked~.peer-checked\:bg-navyBlue{--tw-bg-opacity: 1;background-color:rgb(6 12 59 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:text-navyBlue{--tw-text-opacity: 1;color:rgb(6 12 59 / var(--tw-text-opacity, 1))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus~.peer-focus\:ring-blue-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1))}@media not all and (min-width: 1240px){.max-xl\:mb-5{margin-bottom:1.25rem}.max-xl\:min-w-\[270px\]{min-width:270px}}@media not all and (min-width: 1180px){.max-1180\:mt-3\.5{margin-top:.875rem}.max-1180\:hidden{display:none}.max-1180\:w-full{width:100%}.max-1180\:max-w-full{max-width:100%}.max-1180\:flex-wrap{flex-wrap:wrap}.max-1180\:gap-6{gap:1.5rem}.max-1180\:px-0{padding-left:0;padding-right:0}.max-1180\:px-5{padding-left:1.25rem;padding-right:1.25rem}.max-1180\:px-8{padding-left:2rem;padding-right:2rem}}@media (max-width: 1180px){.max-\[1180px\]\:gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.max-\[1180px\]\:gap-x-9{-moz-column-gap:2.25rem;column-gap:2.25rem}}@media (max-width: 1100px){.max-\[1100px\]\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}}@media not all and (min-width: 1060px){.max-1060\:block{display:block}.max-1060\:hidden{display:none}.max-1060\:w-full{width:100%}.max-1060\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-1060\:grid-cols-\[1fr\]{grid-template-columns:1fr}.max-1060\:flex-col{flex-direction:column}.max-1060\:flex-col-reverse{flex-direction:column-reverse}}@media not all and (min-width: 1024px){.max-lg\:relative{position:relative}.max-lg\:-left-7{left:-1.75rem}.max-lg\:-right-7{right:-1.75rem}.max-lg\:top-auto{top:auto}.max-lg\:mt-0{margin-top:0}.max-lg\:flex{display:flex}.max-lg\:grid{display:grid}.max-lg\:hidden{display:none}.max-lg\:w-auto{width:auto}.max-lg\:max-w-\[442px\]{max-width:442px}.max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-lg\:grid-cols-\[1fr\]{grid-template-columns:1fr}.max-lg\:flex-wrap{flex-wrap:wrap}.max-lg\:justify-center{justify-content:center}.max-lg\:gap-4{gap:1rem}.max-lg\:gap-5{gap:1.25rem}.max-lg\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.max-lg\:px-3{padding-left:.75rem;padding-right:.75rem}.max-lg\:px-8{padding-left:2rem;padding-right:2rem}.max-lg\:py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.max-lg\:text-xs{font-size:.75rem;line-height:1rem}.max-lg\:opacity-100{opacity:1}.max-lg\:shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media not all and (min-width: 868px){.max-868\:w-full{width:100%}.max-868\:max-w-full{max-width:100%}.max-868\:\!text-\[294px\]{font-size:294px!important}}@media not all and (min-width: 768px){.max-md\:relative{position:relative}.max-md\:bottom-3\.5{bottom:.875rem}.max-md\:top-1{top:.25rem}.max-md\:top-10{top:2.5rem}.max-md\:top-\[60\%\]{top:60%}.max-md\:m-auto{margin:auto}.max-md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.max-md\:my-0{margin-top:0;margin-bottom:0}.max-md\:my-4{margin-top:1rem;margin-bottom:1rem}.max-md\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.max-md\:\!mb-0{margin-bottom:0!important}.max-md\:-mt-1{margin-top:-.25rem}.max-md\:mb-0{margin-bottom:0}.max-md\:mb-1\.5{margin-bottom:.375rem}.max-md\:mb-2{margin-bottom:.5rem}.max-md\:mb-2\.5{margin-bottom:.625rem}.max-md\:mb-4{margin-bottom:1rem}.max-md\:mb-5{margin-bottom:1.25rem}.max-md\:mt-0{margin-top:0}.max-md\:mt-1{margin-top:.25rem}.max-md\:mt-10{margin-top:2.5rem}.max-md\:mt-12{margin-top:3rem}.max-md\:mt-2{margin-top:.5rem}.max-md\:mt-2\.5{margin-top:.625rem}.max-md\:mt-3{margin-top:.75rem}.max-md\:mt-32{margin-top:8rem}.max-md\:mt-4{margin-top:1rem}.max-md\:mt-5{margin-top:1.25rem}.max-md\:mt-6{margin-top:1.5rem}.max-md\:mt-7{margin-top:1.75rem}.max-md\:mt-8{margin-top:2rem}.max-md\:mt-9{margin-top:2.25rem}.max-md\:block{display:block}.max-md\:flex{display:flex}.max-md\:grid{display:grid}.max-md\:hidden{display:none}.max-md\:h-10{height:2.5rem}.max-md\:h-16{height:4rem}.max-md\:h-2{height:.5rem}.max-md\:h-20{height:5rem}.max-md\:h-32{height:8rem}.max-md\:h-36{height:9rem}.max-md\:h-4{height:1rem}.max-md\:h-5{height:1.25rem}.max-md\:h-6{height:1.5rem}.max-md\:h-60{height:15rem}.max-md\:h-7{height:1.75rem}.max-md\:h-8{height:2rem}.max-md\:h-\[100px\]{height:100px}.max-md\:h-\[34px\]{height:34px}.max-md\:h-\[42px\]{height:42px}.max-md\:h-fit{height:-moz-fit-content;height:fit-content}.max-md\:h-full{height:100%}.max-md\:max-h-20{max-height:5rem}.max-md\:max-h-60{max-height:15rem}.max-md\:max-h-\[300px\]{max-height:300px}.max-md\:min-h-\[300px\]{min-height:300px}.max-md\:\!w-full{width:100%!important}.max-md\:w-16{width:4rem}.max-md\:w-2{width:.5rem}.max-md\:w-20{width:5rem}.max-md\:w-24{width:6rem}.max-md\:w-28{width:7rem}.max-md\:w-32{width:8rem}.max-md\:w-36{width:9rem}.max-md\:w-44{width:11rem}.max-md\:w-6{width:1.5rem}.max-md\:w-60{width:15rem}.max-md\:w-7{width:1.75rem}.max-md\:w-\[100px\]{width:100px}.max-md\:w-\[110px\]{width:110px}.max-md\:w-\[115px\]{width:115px}.max-md\:w-\[250px\]{width:250px}.max-md\:w-\[75px\]{width:75px}.max-md\:w-\[90\%\]{width:90%}.max-md\:w-fit{width:-moz-fit-content;width:fit-content}.max-md\:w-full{width:100%}.max-md\:min-w-20{min-width:5rem}.max-md\:min-w-40{min-width:10rem}.max-md\:min-w-56{min-width:14rem}.max-md\:min-w-60{min-width:15rem}.max-md\:min-w-\[300px\]{min-width:300px}.max-md\:max-w-20{max-width:5rem}.max-md\:max-w-56{max-width:14rem}.max-md\:max-w-60{max-width:15rem}.max-md\:max-w-9{max-width:2.25rem}.max-md\:max-w-\[153px\]{max-width:153px}.max-md\:max-w-\[250px\]{max-width:250px}.max-md\:max-w-\[300px\]{max-width:300px}.max-md\:max-w-\[76px\]{max-width:76px}.max-md\:max-w-full{max-width:100%}.max-md\:flex-auto{flex:1 1 auto}.max-md\:flex-none{flex:none}.max-md\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-md\:grid-cols-\[0\.5fr_2fr\]{grid-template-columns:.5fr 2fr}.max-md\:grid-cols-\[1fr\]{grid-template-columns:1fr}.max-md\:flex-col{flex-direction:column}.max-md\:flex-wrap{flex-wrap:wrap}.max-md\:flex-nowrap{flex-wrap:nowrap}.max-md\:items-center{align-items:center}.max-md\:justify-normal{justify-content:normal}.max-md\:justify-center{justify-content:center}.max-md\:justify-between{justify-content:space-between}.max-md\:justify-items-center{justify-items:center}.max-md\:gap-0{gap:0px}.max-md\:gap-0\.5{gap:.125rem}.max-md\:gap-1\.5{gap:.375rem}.max-md\:gap-2{gap:.5rem}.max-md\:gap-2\.5{gap:.625rem}.max-md\:gap-4{gap:1rem}.max-md\:gap-5{gap:1.25rem}.max-md\:gap-7{gap:1.75rem}.max-md\:gap-8{gap:2rem}.max-md\:gap-\[30px\]{gap:30px}.max-md\:gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.max-md\:gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.max-md\:gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.max-md\:gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.max-md\:gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.max-md\:gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.max-md\:gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.max-md\:gap-y-0{row-gap:0px}.max-md\:gap-y-1{row-gap:.25rem}.max-md\:gap-y-1\.5{row-gap:.375rem}.max-md\:gap-y-2\.5{row-gap:.625rem}.max-md\:gap-y-5{row-gap:1.25rem}.max-md\:place-self-auto{place-self:auto}.max-md\:whitespace-nowrap{white-space:nowrap}.max-md\:whitespace-break-spaces{white-space:break-spaces}.max-md\:rounded-full{border-radius:9999px}.max-md\:rounded-lg{border-radius:.5rem}.max-md\:rounded-none{border-radius:0}.max-md\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.max-md\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.max-md\:border{border-width:1px}.max-md\:border-0{border-width:0px}.max-md\:border-b{border-bottom-width:1px}.max-md\:border-t{border-top-width:1px}.max-md\:border-t-0{border-top-width:0px}.max-md\:\!border-none{border-style:none!important}.max-md\:border-none{border-style:none}.max-md\:border-zinc-200{--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))}.max-md\:\!bg-gray-100{--tw-bg-opacity: 1 !important;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))!important}.max-md\:bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.max-md\:\!p-3{padding:.75rem!important}.max-md\:\!p-4{padding:1rem!important}.max-md\:p-0{padding:0}.max-md\:p-1{padding:.25rem}.max-md\:p-2{padding:.5rem}.max-md\:p-2\.5{padding:.625rem}.max-md\:p-3{padding:.75rem}.max-md\:p-3\.5{padding:.875rem}.max-md\:p-4{padding:1rem}.max-md\:p-5{padding:1.25rem}.max-md\:p-8{padding:2rem}.max-md\:\!px-0{padding-left:0!important;padding-right:0!important}.max-md\:\!py-0{padding-top:0!important;padding-bottom:0!important}.max-md\:\!py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.max-md\:px-0{padding-left:0;padding-right:0}.max-md\:px-1{padding-left:.25rem;padding-right:.25rem}.max-md\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.max-md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.max-md\:px-2{padding-left:.5rem;padding-right:.5rem}.max-md\:px-2\.5{padding-left:.625rem;padding-right:.625rem}.max-md\:px-3{padding-left:.75rem;padding-right:.75rem}.max-md\:px-4{padding-left:1rem;padding-right:1rem}.max-md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.max-md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.max-md\:px-8{padding-left:2rem;padding-right:2rem}.max-md\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.max-md\:py-1{padding-top:.25rem;padding-bottom:.25rem}.max-md\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.max-md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.max-md\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.max-md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.max-md\:py-4{padding-top:1rem;padding-bottom:1rem}.max-md\:py-8{padding-top:2rem;padding-bottom:2rem}.max-md\:\!pt-2\.5{padding-top:.625rem!important}.max-md\:pb-0{padding-bottom:0}.max-md\:pb-1\.5{padding-bottom:.375rem}.max-md\:pb-2{padding-bottom:.5rem}.max-md\:pb-3{padding-bottom:.75rem}.max-md\:pb-4{padding-bottom:1rem}.max-md\:pl-2\.5{padding-left:.625rem}.max-md\:pl-4{padding-left:1rem}.max-md\:pr-2\.5{padding-right:.625rem}.max-md\:pt-2{padding-top:.5rem}.max-md\:pt-4{padding-top:1rem}.max-md\:text-left{text-align:left}.max-md\:text-center{text-align:center}.max-md\:\!text-\[140px\]{font-size:140px!important}.max-md\:text-2xl{font-size:1.5rem;line-height:2rem}.max-md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.max-md\:text-base{font-size:1rem;line-height:1.5rem}.max-md\:text-lg{font-size:1.125rem;line-height:1.75rem}.max-md\:text-sm{font-size:.875rem;line-height:1.25rem}.max-md\:text-xl{font-size:1.25rem;line-height:1.75rem}.max-md\:text-xs{font-size:.75rem;line-height:1rem}.max-md\:font-medium{font-weight:500}.max-md\:font-normal{font-weight:400}.max-md\:font-semibold{font-weight:600}.max-md\:leading-6{line-height:1.5rem}.max-md\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.max-md\:text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.max-md\:first\:ml-4:first-child{margin-left:1rem}.max-md\:last\:\!mb-0:last-child{margin-bottom:0!important}.max-md\:last\:mb-0:last-child{margin-bottom:0}}@media not all and (min-width: 525px){.max-sm\:relative{position:relative}.max-sm\:bottom-2\.5{bottom:.625rem}.max-sm\:top-2{top:.5rem}.max-sm\:top-2\.5{top:.625rem}.max-sm\:top-4{top:1rem}.max-sm\:mx-4{margin-left:1rem;margin-right:1rem}.max-sm\:my-2{margin-top:.5rem;margin-bottom:.5rem}.max-sm\:my-4{margin-top:1rem;margin-bottom:1rem}.max-sm\:my-\[20px\]{margin-top:20px;margin-bottom:20px}.max-sm\:\!mb-2\.5{margin-bottom:.625rem!important}.max-sm\:-mt-1{margin-top:-.25rem}.max-sm\:mb-0{margin-bottom:0}.max-sm\:mb-1{margin-bottom:.25rem}.max-sm\:mb-1\.5{margin-bottom:.375rem}.max-sm\:mb-10{margin-bottom:2.5rem}.max-sm\:mb-2{margin-bottom:.5rem}.max-sm\:mb-5{margin-bottom:1.25rem}.max-sm\:mt-0{margin-top:0}.max-sm\:mt-0\.5{margin-top:.125rem}.max-sm\:mt-1{margin-top:.25rem}.max-sm\:mt-10{margin-top:2.5rem}.max-sm\:mt-3{margin-top:.75rem}.max-sm\:mt-4{margin-top:1rem}.max-sm\:mt-5{margin-top:1.25rem}.max-sm\:mt-6{margin-top:1.5rem}.max-sm\:mt-7{margin-top:1.75rem}.max-sm\:mt-8{margin-top:2rem}.max-sm\:block{display:block}.max-sm\:flex{display:flex}.max-sm\:grid{display:grid}.max-sm\:hidden{display:none}.max-sm\:h-1\.5{height:.375rem}.max-sm\:h-10{height:2.5rem}.max-sm\:h-20{height:5rem}.max-sm\:h-3\.5{height:.875rem}.max-sm\:h-4{height:1rem}.max-sm\:h-5{height:1.25rem}.max-sm\:h-7{height:1.75rem}.max-sm\:h-\[100px\]{height:100px}.max-sm\:h-\[21px\]{height:21px}.max-sm\:h-\[25px\]{height:25px}.max-sm\:h-\[30px\]{height:30px}.max-sm\:h-\[34px\]{height:34px}.max-sm\:h-\[46px\]{height:46px}.max-sm\:h-\[60px\]{height:60px}.max-sm\:h-fit{height:-moz-fit-content;height:fit-content}.max-sm\:max-h-\[200px\]{max-height:200px}.max-sm\:max-h-\[60px\]{max-height:60px}.max-sm\:max-h-full{max-height:100%}.max-sm\:min-h-\[60px\]{min-height:60px}.max-sm\:w-1\.5{width:.375rem}.max-sm\:w-10{width:2.5rem}.max-sm\:w-20{width:5rem}.max-sm\:w-3\/6{width:50%}.max-sm\:w-4{width:1rem}.max-sm\:w-44{width:11rem}.max-sm\:w-\[100px\]{width:100px}.max-sm\:w-\[124px\]{width:124px}.max-sm\:w-\[180px\]{width:180px}.max-sm\:w-\[190px\]{width:190px}.max-sm\:w-\[25px\]{width:25px}.max-sm\:w-\[60px\]{width:60px}.max-sm\:w-\[68px\]{width:68px}.max-sm\:w-\[70px\]{width:70px}.max-sm\:w-fit{width:-moz-fit-content;width:fit-content}.max-sm\:w-full{width:100%}.max-sm\:min-w-\[110px\]{min-width:110px}.max-sm\:min-w-\[170px\]{min-width:170px}.max-sm\:min-w-\[190px\]{min-width:190px}.max-sm\:min-w-\[192px\]{min-width:192px}.max-sm\:min-w-\[60px\]{min-width:60px}.max-sm\:max-w-20{max-width:5rem}.max-sm\:max-w-80{max-width:20rem}.max-sm\:max-w-\[190px\]{max-width:190px}.max-sm\:max-w-\[192px\]{max-width:192px}.max-sm\:max-w-\[60px\]{max-width:60px}.max-sm\:max-w-full{max-width:100%}.max-sm\:flex-auto{flex:1 1 auto}.max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-sm\:flex-wrap{flex-wrap:wrap}.max-sm\:items-center{align-items:center}.max-sm\:justify-normal{justify-content:normal}.max-sm\:justify-center{justify-content:center}.max-sm\:justify-between{justify-content:space-between}.max-sm\:gap-0{gap:0px}.max-sm\:gap-1{gap:.25rem}.max-sm\:gap-1\.5{gap:.375rem}.max-sm\:gap-2{gap:.5rem}.max-sm\:gap-2\.5{gap:.625rem}.max-sm\:gap-3{gap:.75rem}.max-sm\:gap-4{gap:1rem}.max-sm\:gap-5{gap:1.25rem}.max-sm\:gap-\[30px\]{gap:30px}.max-sm\:gap-x-0{-moz-column-gap:0px;column-gap:0px}.max-sm\:gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.max-sm\:gap-x-3\.5{-moz-column-gap:.875rem;column-gap:.875rem}.max-sm\:gap-y-0\.5{row-gap:.125rem}.max-sm\:gap-y-2\.5{row-gap:.625rem}.max-sm\:gap-y-4{row-gap:1rem}.max-sm\:gap-y-6{row-gap:1.5rem}.max-sm\:place-self-center{place-self:center}.max-sm\:\!rounded-lg{border-radius:.5rem!important}.max-sm\:rounded-lg{border-radius:.5rem}.max-sm\:rounded-xl{border-radius:.75rem}.max-sm\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.max-sm\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.max-sm\:border-0{border-width:0px}.max-sm\:border-2{border-width:2px}.max-sm\:border-none{border-style:none}.max-sm\:border-zinc-300{--tw-border-opacity: 1;border-color:rgb(212 212 216 / var(--tw-border-opacity, 1))}.max-sm\:\!p-2{padding:.5rem!important}.max-sm\:p-0{padding:0}.max-sm\:p-1\.5{padding:.375rem}.max-sm\:p-2{padding:.5rem}.max-sm\:p-2\.5{padding:.625rem}.max-sm\:p-3{padding:.75rem}.max-sm\:p-4{padding:1rem}.max-sm\:p-5{padding:1.25rem}.max-sm\:\!px-1\.5{padding-left:.375rem!important;padding-right:.375rem!important}.max-sm\:\!px-4{padding-left:1rem!important;padding-right:1rem!important}.max-sm\:\!py-0{padding-top:0!important;padding-bottom:0!important}.max-sm\:\!py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.max-sm\:\!py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.max-sm\:px-2{padding-left:.5rem;padding-right:.5rem}.max-sm\:px-2\.5{padding-left:.625rem;padding-right:.625rem}.max-sm\:px-3{padding-left:.75rem;padding-right:.75rem}.max-sm\:px-3\.5{padding-left:.875rem;padding-right:.875rem}.max-sm\:px-4{padding-left:1rem;padding-right:1rem}.max-sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.max-sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.max-sm\:py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.max-sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.max-sm\:py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.max-sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.max-sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.max-sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.max-sm\:py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.max-sm\:py-4{padding-top:1rem;padding-bottom:1rem}.max-sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.max-sm\:\!pb-1\.5{padding-bottom:.375rem!important}.max-sm\:pb-0{padding-bottom:0}.max-sm\:pb-2\.5{padding-bottom:.625rem}.max-sm\:text-center{text-align:center}.max-sm\:text-right{text-align:right}.max-sm\:text-2xl{font-size:1.5rem;line-height:2rem}.max-sm\:text-5xl{font-size:3rem;line-height:1}.max-sm\:text-base{font-size:1rem;line-height:1.5rem}.max-sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.max-sm\:text-sm{font-size:.875rem;line-height:1.25rem}.max-sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.max-sm\:text-xs{font-size:.75rem;line-height:1rem}.max-sm\:\!font-semibold{font-weight:600!important}.max-sm\:font-medium{font-weight:500}.max-sm\:font-normal{font-weight:400}.max-sm\:leading-4{line-height:1rem}.max-sm\:leading-6{line-height:1.5rem}.max-sm\:leading-\[80px\]{line-height:80px}.max-sm\:text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.max-sm\:opacity-100{opacity:1}}@media (min-width: 525px){.sm\:hidden{display:none}.sm\:max-h-\[500px\]{max-height:500px}.sm\:max-w-\[420px\]{max-width:420px}.sm\:items-center{align-items:center}.sm\:p-0{padding:0}.sm\:p-2\.5{padding:.625rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}}@media (min-width: 768px){.md\:mt-10{margin-top:2.5rem}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:hidden{display:none}.md\:max-w-\[342px\]{max-width:342px}.md\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.md\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (min-width: 1024px){.lg\:hidden{display:none}}@media (min-width: 1180px){.\31 180\:relative{position:relative}.\31 180\:grid{display:grid}.\31 180\:hidden{display:none}.\31 180\:content-start{align-content:flex-start}.\31 180\:overflow-hidden{overflow:hidden}.\31 180\:duration-300{transition-duration:.3s}.\31 180\:hover\:shadow-\[0_5px_10px_rgba\(0\,0\,0\,0\.1\)\]:hover{--tw-shadow: 0 5px 10px rgba(0,0,0,.1);--tw-shadow-colored: 0 5px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}.ltr\:-left-9:where([dir=ltr],[dir=ltr] *){left:-2.25rem}.ltr\:left-0:where([dir=ltr],[dir=ltr] *){left:0}.ltr\:left-1\.5:where([dir=ltr],[dir=ltr] *){left:.375rem}.ltr\:left-3:where([dir=ltr],[dir=ltr] *){left:.75rem}.ltr\:left-4:where([dir=ltr],[dir=ltr] *){left:1rem}.ltr\:left-5:where([dir=ltr],[dir=ltr] *){left:1.25rem}.ltr\:left-full:where([dir=ltr],[dir=ltr] *){left:100%}.ltr\:right-0:where([dir=ltr],[dir=ltr] *){right:0}.ltr\:right-1\.5:where([dir=ltr],[dir=ltr] *){right:.375rem}.ltr\:right-10:where([dir=ltr],[dir=ltr] *){right:2.5rem}.ltr\:right-2:where([dir=ltr],[dir=ltr] *){right:.5rem}.ltr\:right-2\.5:where([dir=ltr],[dir=ltr] *){right:.625rem}.ltr\:right-3:where([dir=ltr],[dir=ltr] *){right:.75rem}.ltr\:right-5:where([dir=ltr],[dir=ltr] *){right:1.25rem}.ltr\:ml-0:where([dir=ltr],[dir=ltr] *){margin-left:0}.ltr\:ml-1:where([dir=ltr],[dir=ltr] *){margin-left:.25rem}.ltr\:ml-1\.5:where([dir=ltr],[dir=ltr] *){margin-left:.375rem}.ltr\:ml-2\.5:where([dir=ltr],[dir=ltr] *){margin-left:.625rem}.ltr\:ml-3:where([dir=ltr],[dir=ltr] *){margin-left:.75rem}.ltr\:mr-2\.5:where([dir=ltr],[dir=ltr] *){margin-right:.625rem}.ltr\:mr-\[50px\]:where([dir=ltr],[dir=ltr] *){margin-right:50px}.ltr\:-translate-x-full:where([dir=ltr],[dir=ltr] *){--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ltr\:translate-x-0:where([dir=ltr],[dir=ltr] *){--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ltr\:translate-x-full:where([dir=ltr],[dir=ltr] *){--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ltr\:translate-y-0:where([dir=ltr],[dir=ltr] *){--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ltr\:translate-y-full:where([dir=ltr],[dir=ltr] *){--tw-translate-y: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ltr\:rounded-l-lg:where([dir=ltr],[dir=ltr] *){border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.ltr\:rounded-r-lg:where([dir=ltr],[dir=ltr] *){border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.ltr\:border-l-\[1px\]:where([dir=ltr],[dir=ltr] *){border-left-width:1px}.ltr\:pl-0:where([dir=ltr],[dir=ltr] *){padding-left:0}.ltr\:pl-1:where([dir=ltr],[dir=ltr] *){padding-left:.25rem}.ltr\:pl-2:where([dir=ltr],[dir=ltr] *){padding-left:.5rem}.ltr\:pl-2\.5:where([dir=ltr],[dir=ltr] *){padding-left:.625rem}.ltr\:pl-3:where([dir=ltr],[dir=ltr] *){padding-left:.75rem}.ltr\:pl-4:where([dir=ltr],[dir=ltr] *){padding-left:1rem}.ltr\:pl-8:where([dir=ltr],[dir=ltr] *){padding-left:2rem}.ltr\:pr-0:where([dir=ltr],[dir=ltr] *){padding-right:0}.ltr\:pr-3:where([dir=ltr],[dir=ltr] *){padding-right:.75rem}.ltr\:pr-4:where([dir=ltr],[dir=ltr] *){padding-right:1rem}.ltr\:pr-7:where([dir=ltr],[dir=ltr] *){padding-right:1.75rem}.ltr\:pr-8:where([dir=ltr],[dir=ltr] *){padding-right:2rem}@media not all and (min-width: 1024px){.max-lg\:ltr\:pl-0:where([dir=ltr],[dir=ltr] *){padding-left:0}}@media not all and (min-width: 768px){.max-md\:ltr\:left-4:where([dir=ltr],[dir=ltr] *){left:1rem}.max-md\:ltr\:right-1\.5:where([dir=ltr],[dir=ltr] *){right:.375rem}.max-md\:ltr\:right-4:where([dir=ltr],[dir=ltr] *){right:1rem}.ltr\:max-md\:gap-0:where([dir=ltr],[dir=ltr] *){gap:0px}.max-md\:ltr\:pl-2\.5:where([dir=ltr],[dir=ltr] *){padding-left:.625rem}.max-md\:ltr\:pr-1:where([dir=ltr],[dir=ltr] *){padding-right:.25rem}.max-md\:ltr\:pr-2\.5:where([dir=ltr],[dir=ltr] *){padding-right:.625rem}}@media not all and (min-width: 525px){.max-sm\:ltr\:left-0:where([dir=ltr],[dir=ltr] *){left:0}.max-sm\:ltr\:left-2:where([dir=ltr],[dir=ltr] *){left:.5rem}}@media (min-width: 768px){.md\:ltr\:ml-0:where([dir=ltr],[dir=ltr] *){margin-left:0}}.rtl\:-right-9:where([dir=rtl],[dir=rtl] *){right:-2.25rem}.rtl\:left-0:where([dir=rtl],[dir=rtl] *){left:0}.rtl\:left-1\.5:where([dir=rtl],[dir=rtl] *){left:.375rem}.rtl\:left-10:where([dir=rtl],[dir=rtl] *){left:2.5rem}.rtl\:left-2:where([dir=rtl],[dir=rtl] *){left:.5rem}.rtl\:left-2\.5:where([dir=rtl],[dir=rtl] *){left:.625rem}.rtl\:left-3:where([dir=rtl],[dir=rtl] *){left:.75rem}.rtl\:left-5:where([dir=rtl],[dir=rtl] *){left:1.25rem}.rtl\:right-0:where([dir=rtl],[dir=rtl] *){right:0}.rtl\:right-1\.5:where([dir=rtl],[dir=rtl] *){right:.375rem}.rtl\:right-3:where([dir=rtl],[dir=rtl] *){right:.75rem}.rtl\:right-4:where([dir=rtl],[dir=rtl] *){right:1rem}.rtl\:right-5:where([dir=rtl],[dir=rtl] *){right:1.25rem}.rtl\:right-full:where([dir=rtl],[dir=rtl] *){right:100%}.rtl\:ml-2\.5:where([dir=rtl],[dir=rtl] *){margin-left:.625rem}.rtl\:ml-\[50px\]:where([dir=rtl],[dir=rtl] *){margin-left:50px}.rtl\:mr-0:where([dir=rtl],[dir=rtl] *){margin-right:0}.rtl\:mr-1:where([dir=rtl],[dir=rtl] *){margin-right:.25rem}.rtl\:mr-1\.5:where([dir=rtl],[dir=rtl] *){margin-right:.375rem}.rtl\:mr-2\.5:where([dir=rtl],[dir=rtl] *){margin-right:.625rem}.rtl\:mr-3:where([dir=rtl],[dir=rtl] *){margin-right:.75rem}.rtl\:-translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x: -0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-y-0:where([dir=rtl],[dir=rtl] *){--tw-translate-y: -0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:-translate-y-full:where([dir=rtl],[dir=rtl] *){--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-0:where([dir=rtl],[dir=rtl] *){--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:translate-x-full:where([dir=rtl],[dir=rtl] *){--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rtl\:rounded-l-lg:where([dir=rtl],[dir=rtl] *){border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rtl\:rounded-r-lg:where([dir=rtl],[dir=rtl] *){border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rtl\:border-r-\[1px\]:where([dir=rtl],[dir=rtl] *){border-right-width:1px}.rtl\:pl-0:where([dir=rtl],[dir=rtl] *){padding-left:0}.rtl\:pl-3:where([dir=rtl],[dir=rtl] *){padding-left:.75rem}.rtl\:pl-4:where([dir=rtl],[dir=rtl] *){padding-left:1rem}.rtl\:pl-7:where([dir=rtl],[dir=rtl] *){padding-left:1.75rem}.rtl\:pl-8:where([dir=rtl],[dir=rtl] *){padding-left:2rem}.rtl\:pr-0:where([dir=rtl],[dir=rtl] *){padding-right:0}.rtl\:pr-1:where([dir=rtl],[dir=rtl] *){padding-right:.25rem}.rtl\:pr-2:where([dir=rtl],[dir=rtl] *){padding-right:.5rem}.rtl\:pr-2\.5:where([dir=rtl],[dir=rtl] *){padding-right:.625rem}.rtl\:pr-3:where([dir=rtl],[dir=rtl] *){padding-right:.75rem}.rtl\:pr-4:where([dir=rtl],[dir=rtl] *){padding-right:1rem}.rtl\:pr-8:where([dir=rtl],[dir=rtl] *){padding-right:2rem}@media not all and (min-width: 1024px){.max-lg\:rtl\:pr-0:where([dir=rtl],[dir=rtl] *){padding-right:0}}@media not all and (min-width: 768px){.max-md\:rtl\:left-1\.5:where([dir=rtl],[dir=rtl] *){left:.375rem}.max-md\:rtl\:left-4:where([dir=rtl],[dir=rtl] *){left:1rem}.max-md\:rtl\:right-4:where([dir=rtl],[dir=rtl] *){right:1rem}.rtl\:max-md\:gap-0:where([dir=rtl],[dir=rtl] *){gap:0px}.max-md\:rtl\:pl-1:where([dir=rtl],[dir=rtl] *){padding-left:.25rem}.max-md\:rtl\:pl-2\.5:where([dir=rtl],[dir=rtl] *){padding-left:.625rem}.max-md\:rtl\:pr-2\.5:where([dir=rtl],[dir=rtl] *){padding-right:.625rem}}@media not all and (min-width: 525px){.max-sm\:rtl\:right-0:where([dir=rtl],[dir=rtl] *){right:0}}@media (min-width: 768px){.md\:rtl\:mr-0:where([dir=rtl],[dir=rtl] *){margin-right:0}}@media (prefers-color-scheme: dark){.dark\:border-emerald-800{--tw-border-opacity: 1;border-color:rgb(6 95 70 / var(--tw-border-opacity, 1))}.dark\:bg-emerald-950{--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}}.\[\&\:\:-moz-range-thumb\]\:pointer-events-auto::-moz-range-thumb{pointer-events:auto}.\[\&\:\:-moz-range-thumb\]\:h-\[18px\]::-moz-range-thumb{height:18px}.\[\&\:\:-moz-range-thumb\]\:w-\[18px\]::-moz-range-thumb{width:18px}.\[\&\:\:-moz-range-thumb\]\:appearance-none::-moz-range-thumb{-moz-appearance:none;-webkit-appearance:none;appearance:none}.\[\&\:\:-moz-range-thumb\]\:rounded-full::-moz-range-thumb{border-radius:9999px}.\[\&\:\:-moz-range-thumb\]\:bg-white::-moz-range-thumb{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.\[\&\:\:-moz-range-thumb\]\:ring::-moz-range-thumb{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.\[\&\:\:-moz-range-thumb\]\:ring-navyBlue::-moz-range-thumb{--tw-ring-opacity: 1;--tw-ring-color: rgb(6 12 59 / var(--tw-ring-opacity, 1))}.\[\&\:\:-ms-thumb\]\:pointer-events-auto::-ms-thumb{pointer-events:auto}.\[\&\:\:-ms-thumb\]\:h-\[18px\]::-ms-thumb{height:18px}.\[\&\:\:-ms-thumb\]\:w-\[18px\]::-ms-thumb{width:18px}.\[\&\:\:-ms-thumb\]\:appearance-none::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-ms-thumb\]\:rounded-full::-ms-thumb{border-radius:9999px}.\[\&\:\:-ms-thumb\]\:bg-white::-ms-thumb{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.\[\&\:\:-ms-thumb\]\:ring::-ms-thumb{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.\[\&\:\:-ms-thumb\]\:ring-navyBlue::-ms-thumb{--tw-ring-opacity: 1;--tw-ring-color: rgb(6 12 59 / var(--tw-ring-opacity, 1))}.\[\&\:\:-webkit-slider-thumb\]\:pointer-events-auto::-webkit-slider-thumb{pointer-events:auto}.\[\&\:\:-webkit-slider-thumb\]\:h-\[18px\]::-webkit-slider-thumb{height:18px}.\[\&\:\:-webkit-slider-thumb\]\:w-\[18px\]::-webkit-slider-thumb{width:18px}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:9999px}.\[\&\:\:-webkit-slider-thumb\]\:bg-white::-webkit-slider-thumb{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.\[\&\:\:-webkit-slider-thumb\]\:ring::-webkit-slider-thumb{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.\[\&\:\:-webkit-slider-thumb\]\:ring-navyBlue::-webkit-slider-thumb{--tw-ring-opacity: 1;--tw-ring-color: rgb(6 12 59 / var(--tw-ring-opacity, 1))}.\[\&\>\*\]\:flex>*{display:flex}.\[\&\>\*\]\:flex-\[0\]>*{flex:0}.\[\&\>\*\]\:justify-between>*{justify-content:space-between}.\[\&\>\*\]\:border-0>*{border-width:0px}.\[\&\>\*\]\:px-6>*{padding-left:1.5rem;padding-right:1.5rem}.\[\&\>\*\]\:py-4>*{padding-top:1rem;padding-bottom:1rem}.\[\&\>\*\]\:text-right>*{text-align:right}.\[\&\>\*\]\:font-medium>*{font-weight:500}.\[\&\>\*\]\:text-black>*{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.\[\&\>\*\]\:text-blue-600>*{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.\[\&\>\*\]\:after\:content-\[\'_\/_\'\]>*:after{--tw-content: " / ";content:var(--tw-content)}@media not all and (min-width: 768px){.max-md\:\[\&\>\*\]\:\[\&\>\*\]\:rounded-full>*>*{border-radius:9999px}.max-md\:\[\&\>\*\]\:leading-6>*{line-height:1.5rem}}@media not all and (min-width: 525px){.max-sm\:\[\&\>\*\]\:leading-4>*{line-height:1rem}}.\[\&_span\.icon-compare\]\:hidden span.icon-compare{display:none}

/* themes/shop/default/build/assets/app-DsP8OK1c.css */
.flatpickr-calendar{background:transparent;overflow:hidden;max-height:0;opacity:0;visibility:hidden;text-align:center;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:315px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 #e6e6e6,-1px 0 #e6e6e6,0 1px #e6e6e6,0 -1px #e6e6e6,0 3px 13px #00000014}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;visibility:visible;overflow:visible;max-height:640px}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.hasWeeks{width:auto}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:"";height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.rightMost:after{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-month{background:transparent;color:#000000e6;fill:#000000e6;height:28px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}.flatpickr-prev-month,.flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;line-height:16px;height:28px;padding:10px calc(3.57% - 1.5px);z-index:3}.flatpickr-prev-month i,.flatpickr-next-month i{position:relative}.flatpickr-prev-month.flatpickr-prev-month,.flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-prev-month.flatpickr-next-month,.flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-prev-month:hover,.flatpickr-next-month:hover{color:#959ea9}.flatpickr-prev-month:hover svg,.flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-prev-month svg,.flatpickr-next-month svg{width:14px}.flatpickr-prev-month svg path,.flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.05);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:#0000001a}.numInputWrapper span:active{background:#0003}.numInputWrapper span:after{display:block;content:"";position:absolute;top:33%}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6)}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6)}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:#00000080}.numInputWrapper:hover{background:#0000000d}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:6.16px 0 0;line-height:1;height:28px;display:inline-block;text-align:center;-webkit-transform:translate3d(0px,0px,0px);transform:translateZ(0)}.flatpickr-current-month.slideLeft{-webkit-transform:translate3d(-100%,0px,0px);transform:translate3d(-100%,0,0);-webkit-animation:fpFadeOut .4s ease,fpSlideLeft .4s cubic-bezier(.23,1,.32,1);animation:fpFadeOut .4s ease,fpSlideLeft .4s cubic-bezier(.23,1,.32,1)}.flatpickr-current-month.slideLeftNew{-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0);-webkit-animation:fpFadeIn .4s ease,fpSlideLeftNew .4s cubic-bezier(.23,1,.32,1);animation:fpFadeIn .4s ease,fpSlideLeftNew .4s cubic-bezier(.23,1,.32,1)}.flatpickr-current-month.slideRight{-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0);-webkit-animation:fpFadeOut .4s ease,fpSlideRight .4s cubic-bezier(.23,1,.32,1);animation:fpFadeOut .4s ease,fpSlideRight .4s cubic-bezier(.23,1,.32,1)}.flatpickr-current-month.slideRightNew{-webkit-transform:translate3d(0,0,0px);transform:translateZ(0);-webkit-animation:fpFadeIn .4s ease,fpSlideRightNew .4s cubic-bezier(.23,1,.32,1);animation:fpFadeIn .4s ease,fpSlideRightNew .4s cubic-bezier(.23,1,.32,1)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:#0000000d}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch�;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:#000000e6}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:#000000e6}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:default;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:initial;border:0;border-radius:0;vertical-align:initial}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:#00000080;background:transparent;pointer-events:none}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:315px;display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-align-items:center;-ms-flex-align:center;-webkit-box-align:center;align-items:center;height:28px}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:#0000008a;line-height:1;margin:0;text-align:center;display:block;-webkit-flex:1;-ms-flex:1;-webkit-box-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;width:315px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:315px;min-width:315px;max-width:315px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-flex;display:-webkit-box;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0px,0px,0px);transform:translateZ(0);opacity:1}.flatpickr-calendar.animate .dayContainer.slideLeft{-webkit-animation:fpFadeOut .4s cubic-bezier(.23,1,.32,1),fpSlideLeft .4s cubic-bezier(.23,1,.32,1);animation:fpFadeOut .4s cubic-bezier(.23,1,.32,1),fpSlideLeft .4s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.animate .dayContainer.slideLeft,.flatpickr-calendar.animate .dayContainer.slideLeftNew{-webkit-transform:translate3d(-100%,0px,0px);transform:translate3d(-100%,0,0)}.flatpickr-calendar.animate .dayContainer.slideLeftNew{-webkit-animation:fpFadeIn .4s cubic-bezier(.23,1,.32,1),fpSlideLeft .4s cubic-bezier(.23,1,.32,1);animation:fpFadeIn .4s cubic-bezier(.23,1,.32,1),fpSlideLeft .4s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.animate .dayContainer.slideRight{-webkit-animation:fpFadeOut .4s cubic-bezier(.23,1,.32,1),fpSlideRight .4s cubic-bezier(.23,1,.32,1);animation:fpFadeOut .4s cubic-bezier(.23,1,.32,1),fpSlideRight .4s cubic-bezier(.23,1,.32,1);-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0)}.flatpickr-calendar.animate .dayContainer.slideRightNew{-webkit-animation:fpFadeIn .4s cubic-bezier(.23,1,.32,1),fpSlideRightNew .4s cubic-bezier(.23,1,.32,1);animation:fpFadeIn .4s cubic-bezier(.23,1,.32,1),fpSlideRightNew .4s cubic-bezier(.23,1,.32,1)}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:40px;height:40px;line-height:40px;margin:0;display:inline-block;position:relative;-webkit-justify-content:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange,.flatpickr-day.startRange.startRange+.endRange,.flatpickr-day.endRange.startRange+.endRange{-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 #e6e6e6,5px 0 #e6e6e6}.flatpickr-day.disabled,.flatpickr-day.disabled:hover{pointer-events:none}.flatpickr-day.disabled,.flatpickr-day.disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:#3939394d;background:transparent;border-color:transparent;cursor:default}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 #569ff7,5px 0 #569ff7}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{display:inline-block;float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day{display:block;width:100%;max-width:none}.flatpickr-innerContainer{display:block;display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-flex;display:-ms-flexbox;display:-webkit-box;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-flex:1;-ms-flex:1;-webkit-box-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;cursor:pointer;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;display:inline-block;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time .flatpickr-am-pm:focus{background:#f0f0f0}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}}@keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translateZ(0)}}@-webkit-keyframes fpSlideLeft{0%{-webkit-transform:translate3d(0px,0px,0px);transform:translateZ(0)}to{-webkit-transform:translate3d(-100%,0px,0px);transform:translate3d(-100%,0,0)}}@keyframes fpSlideLeft{0%{-webkit-transform:translate3d(0px,0px,0px);transform:translateZ(0)}to{-webkit-transform:translate3d(-100%,0px,0px);transform:translate3d(-100%,0,0)}}@-webkit-keyframes fpSlideLeftNew{0%{-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0px,0px,0px);transform:translateZ(0)}}@keyframes fpSlideLeftNew{0%{-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0px,0px,0px);transform:translateZ(0)}}@-webkit-keyframes fpSlideRight{0%{-webkit-transform:translate3d(0,0,0px);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0)}}@keyframes fpSlideRight{0%{-webkit-transform:translate3d(0,0,0px);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0px,0px);transform:translate3d(100%,0,0)}}@-webkit-keyframes fpSlideRightNew{0%{-webkit-transform:translate3d(-100%,0,0px);transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(0,0,0px);transform:translateZ(0)}}@keyframes fpSlideRightNew{0%{-webkit-transform:translate3d(-100%,0,0px);transform:translate3d(-100%,0,0)}to{-webkit-transform:translate3d(0,0,0px);transform:translateZ(0)}}@-webkit-keyframes fpFadeOut{0%{opacity:1}to{opacity:0}}@keyframes fpFadeOut{0%{opacity:1}to{opacity:0}}@-webkit-keyframes fpFadeIn{0%{opacity:0}to{opacity:1}}@keyframes fpFadeIn{0%{opacity:0}to{opacity:1}}

/* themes/property/property-fonts.css */
/* Roboto v51, unchanged Google Fonts WOFF2 subsets. See fonts/Roboto-OFL.txt.

   One exception: roboto-v51-approx.woff2 is roboto-v51-math.woff2 cut down
   to U+2248 alone (fontTools subset, all layout features, wght axis kept).
   ≈ is printed before every converted price, and it was the only character
   on the site in the math range, so each card page downloaded the 41 KB math
   file for one glyph. The math faces below therefore skip U+2248 and the
   approx faces serve it, same outline and metrics, 4 KB.

   WHY EACH SUBSET IS DECLARED FIVE TIMES (19 October 2026)

   Google serves these files as one variable face, `font-weight: 400 700`.
   Declared that way, Arabic NEVER rendered in Tajawal on this channel:
   ../shop/arabic-face.css registers Tajawal under the family name Roboto with
   single weights 400 / 500 / 700, and Chromium groups a family's @font-face
   rules by their exact (stretch, style, weight) descriptors, picks ONE group
   for the requested weight, and only then applies unicode-range inside that
   group. A request for weight 400 matched both the `400 700` group (Latin)
   and the `400` group (Arabic) equally, Chromium kept the Latin one, and
   every Arabic glyph fell through to the OS fallback. The Arabic faces stayed
   "unloaded" in document.fonts. The other five channels are unaffected
   because Google's css2 response declares single weights 400/500/700, which
   are the same groups arabic-face.css joins.

   The fix keeps the variable font's behaviour for Latin and gives every
   group Arabic coverage:

     400, 500, 700   single weights: the SAME descriptors arabic-face.css uses,
                     so those Arabic faces merge into these groups.
     401-499         Latin renders at the requested weight (variable axis is
                     clamped into the range, i.e. not clamped at all);
                     Arabic uses the 500 file, as weight matching would.
     501-699         likewise; Arabic uses the 700 file. This is the group
                     the theme's 600 / 650 weights land in.

   Below 400 and above 700 the nearest group answers and the axis is clamped
   to 400 / 700, exactly as the old single `400 700` face did. Never add a
   group here without Arabic in it: a group without Arabic is the bug.
   The Tajawal URLs are the same files arabic-face.css loads, so nothing is
   downloaded twice. */

/* ===== weight 400 ===== */
/* cyrillic-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic-ext.woff2") format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic.woff2") format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek-ext.woff2") format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek.woff2") format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* math */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-math.woff2") format('woff2');
  unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-2247, U+2249-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}
/* approx: the one math glyph the site prints (≈ in .hzc-alt prices) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-approx.woff2") format('woff2');
  unicode-range: U+2248;
}
/* symbols */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-symbols.woff2") format('woff2');
  unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-vietnamese.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin-ext.woff2") format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 400;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ===== weight 401 499 ===== */
/* cyrillic-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic-ext.woff2") format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic.woff2") format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek-ext.woff2") format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek.woff2") format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* math */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-math.woff2") format('woff2');
  unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-2247, U+2249-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}
/* approx: the one math glyph the site prints (≈ in .hzc-alt prices) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-approx.woff2") format('woff2');
  unicode-range: U+2248;
}
/* symbols */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-symbols.woff2") format('woff2');
  unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-vietnamese.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin-ext.woff2") format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* arabic (Tajawal 500; 400/500/700 come from ../shop/arabic-face.css) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 401 499;
  font-stretch: 100%;
  font-display: fallback;
  src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-500.woff2") format('woff2');
  unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

/* ===== weight 500 ===== */
/* cyrillic-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic-ext.woff2") format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic.woff2") format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek-ext.woff2") format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek.woff2") format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* math */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-math.woff2") format('woff2');
  unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-2247, U+2249-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}
/* approx: the one math glyph the site prints (≈ in .hzc-alt prices) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-approx.woff2") format('woff2');
  unicode-range: U+2248;
}
/* symbols */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-symbols.woff2") format('woff2');
  unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-vietnamese.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin-ext.woff2") format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 500;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ===== weight 501 699 ===== */
/* cyrillic-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic-ext.woff2") format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic.woff2") format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek-ext.woff2") format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek.woff2") format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* math */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-math.woff2") format('woff2');
  unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-2247, U+2249-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}
/* approx: the one math glyph the site prints (≈ in .hzc-alt prices) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-approx.woff2") format('woff2');
  unicode-range: U+2248;
}
/* symbols */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-symbols.woff2") format('woff2');
  unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-vietnamese.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin-ext.woff2") format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* arabic (Tajawal 700; 400/500/700 come from ../shop/arabic-face.css) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 501 699;
  font-stretch: 100%;
  font-display: fallback;
  src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-700.woff2") format('woff2');
  unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

/* ===== weight 700 ===== */
/* cyrillic-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic-ext.woff2") format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-cyrillic.woff2") format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek-ext.woff2") format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-greek.woff2") format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* math */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-math.woff2") format('woff2');
  unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-2247, U+2249-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}
/* approx: the one math glyph the site prints (≈ in .hzc-alt prices) */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-approx.woff2") format('woff2');
  unicode-range: U+2248;
}
/* symbols */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-symbols.woff2") format('woff2');
  unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-vietnamese.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin-ext.woff2") format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 700;
  font-stretch: 100%;
  font-display: swap;
  src: url("https://hagzi.jo/themes/property/fonts/roboto-v51-latin.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* themes/shop/rtl-glyphs.css */
/*
    RIGHT-TO-LEFT GLYPH DIRECTION -- cars channel.
    Created 29 August 2026 by the RTL campaign. Every rule here is scoped to
    [dir="rtl"], and the sheet is only linked when the locale is right-to-left,
    so an English reader never downloads it and English rendering cannot change.

    WHY A SEPARATE SHEET, AND WHY IT EXISTS AT ALL
    ---------------------------------------------
    The campaign's directional sweep looked for directional PROPERTIES: left and
    right longhands, insets, asymmetric shorthands, text-align. A glyph pointing
    the wrong way is none of those. An arrow is a <path> full of coordinates; it
    declares nothing a property scanner can match and getComputedStyle reports
    nothing unusual about it. So the sweep was complete on its own terms while
    every forward affordance on the Arabic site still pointed at the wrong edge.
    The homepage hero search button was the one a human finally noticed.

    Enumerated by /home/demo/i18n-guard/glyph-recon.py, which classifies a glyph
    by its path geometry rather than by its class name. Re-run it after adding
    any icon; it will list what is unmirrored and what must stay put.

    WHAT IS DELIBERATELY ABSENT
    ---------------------------
    Pagination and breadcrumb separators are NOT here. This codebase draws those
    with the angle-quote characters < > and << >> (U+2039/U+203A, U+00AB/U+00BB),
    which carry Unicode Bidi_Mirrored=Yes: the shaper flips them automatically in
    a right-to-left run. They are already correct, and adding scaleX(-1) would
    flip a working glyph BACK to wrong. Twenty-two glyphs on this site are in that
    category. Arrow characters like -> (U+2192) do NOT have the property, which is
    why the two cases have to be told apart rather than treated alike.

    Also absent: play triangles, pencils, magnifiers, plus signs, lightning bolts
    and every up/down caret. A dropdown caret points down in Arabic too, and a
    glyph whose meaning is fixed rather than directional must never mirror --
    the same reasoning that keeps the Jordanian flag upright.
*/

/* ---------------------------------------------------------------- homepage --
   The reported defect. A "go and search" affordance points toward the reading
   direction, so it points left in Arabic. The transform is on the SVG, not on
   the button, throughout this file: several of these buttons already carry a
   transform of their own for vertical centring, and a second transform
   declaration on the same element REPLACES it rather than adding to it. */
[dir="rtl"] .op-hs-go svg,
[dir="rtl"] .op-dealer-band__cta svg {
    transform: scaleX(-1);
}

/* Category and offers rails. Both members of each prev/next pair flip: the
   layout already puts "previous" at the inline start, which is the right-hand
   side in Arabic, so the glyph that sits there must point right. Mirroring only
   one of a pair leaves two arrows pointing the same way.
   .op-cat-carousel__nav and .op-offers__nav both carry translateY(-50%) for
   vertical centring -- which is exactly why these target the inner svg. */
[dir="rtl"] .op-cat-carousel__nav svg,
[dir="rtl"] .op-offers__nav svg {
    transform: scaleX(-1);
}

/* ------------------------------------------------------- offers and dealers -- */
[dir="rtl"] .op-offer__cta svg,
[dir="rtl"] .offers-pagination__item svg {
    transform: scaleX(-1);
}

/* ------------------------------------------------ showrooms, sellers, sell -- */
[dir="rtl"] .sr-pager__link svg,
[dir="rtl"] .seller-others li a svg,
[dir="rtl"] .showroom-others li a svg,
[dir="rtl"] .sfm-speed__go svg,
[dir="rtl"] .sfm-back svg {
    transform: scaleX(-1);
}

/* The showroom card's call to action, and its hover nudge.
   .sr-card:hover .sr-card__cta svg already declares transform: translateX(3px),
   at specificity (0,3,1) -- higher than the (0,2,1) of the rule below. Without
   the second rule the arrow would flip correctly at rest and then snap back to
   pointing the wrong way the moment the card was hovered, because the hover
   declaration replaces the whole transform rather than adding to it. The nudge
   is also negated: 3px toward the reading direction is -3px in Arabic. */
[dir="rtl"] .sr-card__cta svg {
    transform: scaleX(-1);
}

[dir="rtl"] .sr-card:hover .sr-card__cta svg {
    transform: translateX(-3px) scaleX(-1);
}

/* ------------------------------------------------------------- my account --
   The "view this" chevron that ends every account summary row, on nine pages.
   .acct-link, .acct-policy__view and .acct-appt__view carry no transform of
   their own and hold no glyph other than this chevron. */
[dir="rtl"] .acct-link svg,
[dir="rtl"] .acct-policy__view svg,
[dir="rtl"] .acct-appt__view svg {
    transform: scaleX(-1);
}

/* The one back arrow in the account page-header actions area.
   .acct-btn is a general button class used at seventeen sites carrying pencils,
   plus signs and a refresh mark -- mirroring those would be a defect of its own,
   so this must NOT be written as `.acct-btn svg`. Every icon-bearing button in
   an actions slot is .acct-btn--primary; the single back chevron, on
   listing-edit, is the only plain one. Hence the :not(). If a non-primary
   icon-bearing button is ever added to a page header, glyph-recon will surface
   it and this selector should be narrowed rather than widened. */
[dir="rtl"] .acct__head-aside .acct-btn:not(.acct-btn--primary) svg {
    transform: scaleX(-1);
}

/* ------------------------------------------------------------- sell form --
   The disclosure chevron on a `label -- value -- chevron` row, which sits at the
   row's inline end and points along the reading direction.
   The class is on the svg itself, so this is not a descendant selector.
   The open state is deliberately left alone: .sell-row.is-open
   .sell-row__chevron declares rotate(90deg) at specificity (0,3,0), beats the
   (0,2,0) below, and replaces the transform entirely -- which is correct, since
   an expanded row's chevron points DOWN in both languages. */
[dir="rtl"] .sell-row__chevron {
    transform: scaleX(-1);
}

/* --------------------------------------------------- mobile header search --
   The back arrow that leaves the fullscreen search overlay. Both buttons in
   .op-hs__form share the class .op-hs__iconbutton -- this one and the "clear
   the term" button -- so the child-and-first-of-type scope is what separates
   them without touching markup. Should the overlay button ever be absent when
   this rule applies, the fallback target is the clear button, whose glyph is a
   symmetric X: flipping it is a visual no-op rather than a defect. */
[dir="rtl"] .op-hs__form > .op-hs__iconbutton:first-of-type svg {
    transform: scaleX(-1);
}

/* themes/shop/arabic-face.css */
/* =============================================================================
   arabic-face.css -- Tajawal for Arabic, Roboto kept for Latin
   =============================================================================

   Loaded only when the active locale's direction is rtl, so the English
   document is byte-identical to what it served before this file existed.

   WHY THE FAMILY IS CALLED "Roboto" HERE, WHICH LOOKS WRONG AND IS NOT

   The built stylesheet, and an inline override in the shop layout, both set

       * { font-family: Roboto, sans-serif; }

   on the universal selector. Every element on the site therefore resolves to
   a stack whose first name is Roboto -- the ~29 explicit `font-family: Roboto,
   sans-serif` rules included, and the 121 `font-family: inherit` rules by
   inheritance. Changing that stack to name Tajawal would mean editing the
   Vite source and rebuilding the bundle, which rewrites every asset hash on
   the site, plus every explicit rule in both themes, and any rule written
   after today would silently miss Arabic again.

   Registering additional faces for an EXISTING family, distinguished only by
   unicode-range, is the mechanism the spec provides for exactly this, and it
   is what Google Fonts itself does: their Roboto is a dozen @font-face blocks
   differing only in unicode-range (latin, latin-ext, cyrillic, greek,
   vietnamese). Google's Roboto has NO Arabic subset, so these three faces add
   coverage the family did not have and overlap nothing.

   The effect is per character, which is the requirement:

       Arabic characters  -> in range  -> Tajawal
       Latin characters   -> not in any range here -> Google's Roboto

   So a Latin make, model, price or phone number sitting inside Arabic copy
   still renders in Roboto without any markup saying so. That is why this is
   a unicode-range job and not a `:lang(ar)` or `[dir=rtl]` font override,
   either of which would have dragged the Latin fragments into Tajawal too.

   WEIGHTS
   400, 500 and 700, matching the three Roboto weights the layout requests.
   Nothing else is loaded. A missing weight would be synthesised by the
   browser, and synthetic emboldening of Arabic script looks conspicuously
   wrong -- strokes thicken across joins that should stay thin.

   font-display: fallback, NOT swap
   Because every visible glyph on an Arabic page is in this font, `swap`
   would repaint and reflow the entire page when it arrives. `fallback`
   gives a ~100ms block window, which a 9KB same-origin woff2 beats almost
   always, so in practice there is no flash at all; and if the network is
   slow the text still appears in a fallback face rather than staying
   invisible. `optional` was rejected: it lets the browser skip the font
   altogether, and the client chose this typeface.

   The files are self-hosted rather than fetched from Google, so the Arabic
   face costs no extra DNS or TLS handshake and does not put visitor IPs in
   front of a third party on a site that ships a GDPR feature.
   ============================================================================= */

/*
    Arabic, Arabic Supplement, Arabic Extended-A/B/C, and the two
    Presentation Forms blocks. Google's own Tajawal range additionally claims
    U+200C-200E, U+2010-2011, U+204F and U+2E41 -- zero-width joiners, marks
    and dashes shared with Latin text. Those are deliberately EXCLUDED: they
    occur on English pages, and including them would make an English page
    download an Arabic font and render its hyphens from it.
*/
@font-face {
    font-family: Roboto;
    font-style: normal;
    font-weight: 400;
    font-display: fallback;
    src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-400.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

@font-face {
    font-family: Roboto;
    font-style: normal;
    font-weight: 500;
    font-display: fallback;
    src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-500.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

@font-face {
    font-family: Roboto;
    font-style: normal;
    font-weight: 700;
    font-display: fallback;
    src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-700.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

/* -----------------------------------------------------------------------------
   The same three faces again, under their real name.
   -----------------------------------------------------------------------------
   Needed for stacks that do NOT lead with Roboto and so never reach the
   registration above. The insurance sandbox is one: its stack is
   `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, ...`, where three
   system families sit ahead of Roboto and would answer for Arabic first.

   Prepending an Arabic-only family to a stack is a provably Latin-neutral
   edit -- no Latin codepoint falls in the ranges below, so Latin resolution
   continues to the next family exactly as before, and on a page where this
   stylesheet is not loaded the name is simply unknown and skipped.

   Same URLs as above, so the browser downloads each file once. This costs
   CSS bytes, not font bytes. It also gives anyone writing new Arabic-only
   rules an honest name to ask for.
   -------------------------------------------------------------------------- */

@font-face {
    font-family: Tajawal;
    font-style: normal;
    font-weight: 400;
    font-display: fallback;
    src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-400.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

@font-face {
    font-family: Tajawal;
    font-style: normal;
    font-weight: 500;
    font-display: fallback;
    src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-500.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

@font-face {
    font-family: Tajawal;
    font-style: normal;
    font-weight: 700;
    font-display: fallback;
    src: url("https://hagzi.jo/themes/shop/fonts/tajawal-arabic-700.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

/* inline */

            * {
                font-family: Roboto, sans-serif;
            }
        
/* inline */

    :root {
        /* ---- the one value ---- */
        --op-brand-primary: #1533F5;

        /* Hover and pressed shade. */
        --op-brand-primary-dark: color-mix(in srgb, var(--op-brand-primary) 78%, #000);

        /* Tinted ground for chips, badges, empty-state icons. */
        --op-brand-primary-soft: color-mix(in srgb, var(--op-brand-primary) 7%, #fff);

        /* Hairline for tinted outlines and pill borders. */
        --op-brand-primary-line: color-mix(in srgb, var(--op-brand-primary) 32%, #fff);
    }

/* inline */

    :root {
        --site-container-width: 1200px;
        --site-gutter: 32px;
    }

    /* Desktop lower band (1024–1279) */
    @media (max-width: 1279.98px) {
        :root {
            --site-gutter: 24px;
        }
    }

    /* Tablet lower band / large phone (480–767) */
    @media (max-width: 767.98px) {
        :root {
            --site-gutter: 20px;
        }
    }

    /* Mobile (<480) */
    @media (max-width: 479.98px) {
        :root {
            --site-gutter: 16px;
        }
    }

    .site-container,
    .container,
    .op-shell,
    .serp-container,
    .listing-container {
        width: 100%;
        max-width: var(--site-container-width);
        margin-inline: auto;
        padding-inline: var(--site-gutter);
    }

    /* ---------------------------------------------------------------
       Overflow guards
       Causes found while auditing: flex/grid children defaulting to
       min-width:auto (so they refuse to shrink below their content),
       100vw where 100% was meant, and unwrapped nav rows.
       --------------------------------------------------------------- */

    /* 100vw ignores the scrollbar and overflows by its width. */
    .w-screen {
        max-width: 100%;
    }

    /*
        The compiled Tailwind bundle is older than these Blade files, so a
        utility class that is not already in it does nothing. Anything new is
        declared here instead of relying on a rebuild.
    */
    .site-noshrink {
        flex-shrink: 0;
    }

    /* Replaces the footer's p-[60px]; only the inline padding moves to the container. */
    .site-footer-main {
        padding-block: 60px;
    }

    @media (max-width: 767.98px) {
        .site-footer-main {
            padding-block: 32px;
        }
    }

    @media (max-width: 524.98px) {
        .site-footer-main {
            padding-block: 20px;
        }
    }

    /*
        Account layout row: the content column is `flex-auto`, whose default
        min-width:auto stops it shrinking below the datagrid's min-content and
        pushes the page sideways at tablet width.
    */
    .site-account-row > * {
        min-width: 0;
    }

    /* The side navigation keeps its width; the content column absorbs the loss. */
    .site-account-row > *:first-child {
        flex-shrink: 0;
    }

    .site-account-row .panel-side {
        max-width: 100%;
    }

    /* At tablet the nav keeps the theme's 270px tablet width, no more, so the
       datagrid column is not squeezed to the point of overflowing. */
    @media (max-width: 1023.98px) {
        .site-account-row .panel-side {
            min-width: 0;
            max-width: 270px;
        }
    }

    /* Datagrids and any wide table scroll inside their column, not the page. */
    .site-account-row .table-responsive,
    .site-account-row table {
        max-width: 100%;
    }

/* themes/property/property.css */
/*
 * Property channel stylesheet.
 *
 * Plain CSS, served straight from public/ and loaded by
 * resources/themes/property/views/components/layouts/footer/styles.blade.php.
 * Deliberately outside the Vite pipeline: the shop build in
 * public/themes/shop/default/build is newer than its own sources and cannot be
 * regenerated, so nothing here may require an asset build.
 *
 * Width and gutter come from --site-container-width / --site-gutter, which the
 * shared container partial declares for every channel.
 */

/* ============================================================== footer ===== */
/*
 * Property channel footer.
 *
 * Replaces the dark green gradient block that sat here, along with its --pf-*
 * tokens: nothing outside the footer template referenced either, so both are
 * gone rather than left behind.
 *
 * The cars channel never reaches these rules. It resolves the default shop
 * theme's footer, which carries no .hzf-* class, and property.css is not in
 * its asset list at all.
 *
 * White page, one hairline, dark neutral text, grey secondary text, and the
 * primary reserved for hover and focus. No panel background, no shadow, no
 * gradient: the footer is the end of the page, not a component sitting on it.
 *
 * THE SPACE ABOVE THE FIRST ROW IS PADDING, NOT MARGIN
 *
 * It used to be `margin-top: 56px` here plus `padding: 48px 0 0` on the inner
 * shell, and both were wrong in a way that only showed on some pages.
 *
 * The margin sat outside the background, so those 56px were painted by
 * whatever was behind the footer -- and nothing is: `main` and `body` are both
 * transparent at that point, so it fell through to the canvas and came out
 * white. On a page that ends white nobody noticed. On the account area and the
 * Add Listing page, whose shells (.hzac and .hzf-page) paint #f4f5f7 right up
 * to the bottom of `main`, it read as a white strip wedged between the page and
 * the footer. Measured: the shells end exactly where `main` ends on every page,
 * so all 56px of that strip were this margin and none of it belonged to those
 * page shells.
 *
 * The inner padding never applied at all. `.hzf__inner` also carries .hz-shell,
 * and `.hz-shell { padding: 0 24px }` is declared ~220 lines below this at the
 * same specificity, so its shorthand reset the top padding to zero and the
 * footer opened with its logo flush against the border. That is why the
 * breathing room appeared to be outside the footer rather than inside it.
 *
 * So: padding on .hzf, which is the element that paints the background and the
 * hairline. The separation is now inside the footer, the background meets the
 * page background at the border with nothing between them, and there is no
 * shorthand competing for it. 40px because that is what .hzf__bottom already
 * uses for the gap below the last row -- one number for both ends of the
 * footer's interior.
 */

.hzf {
    padding-top: 40px;
    border-top: 1px solid var(--hz-line);
    background: #fafafa;
    color: var(--hz-ink);
    font-family: Roboto, "Helvetica Neue", Arial, sans-serif;
}

/*
 * The brand column is given more room than the link groups because it holds a
 * logo and a sentence rather than a stack of short labels. auto-fit is
 * deliberately not used: the groups are a fixed, known set, so an explicit
 * track list keeps the brand column from collapsing to a link column's width.
 */
.hzf__grid {
    display: grid;
    grid-template-columns: 1.6fr repeat(4, minmax(0, 1fr));
    gap: 32px 28px;
}

/* ---- brand ------------------------------------------------------------- */

.hzf__brand {
    display: inline-block;
    text-decoration: none;
}

.hzf__logo {
    display: block;
    width: auto;
    height: 34px;
    /* Same reason as the header mark: an auto grid track will otherwise squash
       it below its intrinsic width on narrow viewports. */
    min-width: max-content;
}

.hzf__tagline {
    margin: 14px 0 0;
    max-width: 30ch;
    color: #5c6270;
    font-size: 13.5px;
    line-height: 1.6;
}

/* ---- link groups -------------------------------------------------------- */

.hzf__title {
    margin: 0 0 14px;
    color: var(--hz-ink);
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.hzf__list {
    margin: 0;
    padding: 0;
    list-style: none;
}

/* Rows already carry 10px of padding between them from .hzf__link, so the
   margin only tops up the gap to the intended rhythm. */
.hzf__list li + li {
    margin-top: 2px;
}

/*
 * inline-block with vertical padding rather than a bare inline anchor: as
 * inline text the hit box is only the 15px line box, which is below the 24px
 * minimum target size. The padding takes it to 25px here and 35px once the
 * columns stack, where it is being tapped rather than clicked.
 */
.hzf__link {
    display: inline-block;
    padding: 5px 0;
    color: #5c6270;
    font-size: 13.5px;
    font-weight: 500;
    text-decoration: none;
    transition: color 0.15s ease;
}

.hzf__link:hover {
    color: var(--hagzi-primary);
}

/* ---- contact ------------------------------------------------------------ */

.hzf__contact {
    margin: 0;
    color: #5c6270;
    font-size: 13.5px;
    font-style: normal;
    line-height: 1.6;
}

.hzf__contact p {
    margin: 0 0 4px;
}

/* ---- bottom bar --------------------------------------------------------- */

.hzf__bottom {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 10px 24px;
    margin-top: 40px;
    padding: 18px 0 22px;
    border-top: 1px solid var(--hz-line);
}

.hzf__copy {
    margin: 0;
    color: #6b7280;
    font-size: 12.5px;
}

.hzf__legal {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.hzf__legal .hzf__link {
    color: #6b7280;
    font-size: 12.5px;
}

/* The footer sits on near-white, so the ring is the primary rather than the
   white one used over the hero photograph. */
.hzf a:focus-visible {
    outline: 3px solid var(--hagzi-primary);
    outline-offset: 3px;
    border-radius: 6px;
}

/* ---- responsive --------------------------------------------------------- */

/*
 * Five tracks do not survive below roughly 1000px, so the brand takes a full
 * row and the four groups pair off beneath it. Stacked columns rather than
 * accordions: four groups of at most four links are short enough that
 * collapsing them would add a control for no gain.
 */
@media (max-width: 1000px) {
    .hzf__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .hzf__brand-col {
        grid-column: 1 / -1;
    }

    .hzf__tagline {
        max-width: 46ch;
    }
}

@media (max-width: 560px) {
    /* Same pairing as at full width: the space above the first row matches the
       space .hzf__bottom leaves below the last one, which drops to 32px here. */
    .hzf {
        padding-top: 32px;
    }

    .hzf__grid {
        grid-template-columns: 1fr;
        gap: 28px;
    }

    /* Stacked, so these are being tapped. Taller targets, and the margin drops
       to nothing because the padding now supplies the whole gap. */
    .hzf__link {
        padding: 10px 0;
    }

    .hzf__list li + li {
        margin-top: 0;
    }

    .hzf__bottom {
        flex-direction: column;
        align-items: flex-start;
        margin-top: 32px;
    }
}

/* ==========================================================================
 * Header + hero (property channel) — Realtor-style direction
 *
 * Replaces the earlier .ph-* header block that sat here. Plain CSS served from
 * public/, no build step.
 *
 * The car header's own stylesheet (header.marketplace-styles) still loads on
 * this channel, but every one of its 92 rule blocks is scoped under .op-*, so
 * it cannot reach anything below.
 * ========================================================================== */

:root {
    --hz-red: #d92228;
    --hz-red-dark: #b3171c;
    --hz-ink: #12141a;
    --hz-nav: #3c414c;
    --hz-line: #e7e9ee;

    /*
     * Hagzi's primary action colour, for the whole channel.
     *
     * This file loads before property-pages.css, so a :root declaration here
     * is in scope for every stylesheet on the channel. Other themes' sheets
     * consume it as var(--hagzi-primary, #0745D9) with the literal repeated as
     * a fallback, so nothing breaks if this file is ever loaded second.
     *
     * Measured against white text: #0745D9 gives 7.34:1 and #0638B0 gives
     * 9.54:1, so both clear AA for body text with room to spare. The hover is
     * a darker blue, clear enough to read as a state change without shifting
     * hue.
     *
     * This is an action colour, not a brand wash. The channel stays white,
     * dark neutral and light grey; blue marks what can be clicked and what
     * is currently selected, and nothing else.
     */
    --hagzi-primary: #0745D9;
    --hagzi-primary-dark: #0638B0;

    /*
     * Form field edges (WCAG 1.4.11, 3:1 for the boundary that identifies a
     * control). #80868f is 3.67:1 on white and at least 3.2:1 on the channel's
     * grey and pale-blue panels. Dividers keep --hz-line; only inputs,
     * selects and textareas take this.
     */
    --hz-field-line: #80868f;

    /* Placeholder and other hint text: 4.83:1 on white (was #9ca3af, 2.54:1). */
    --hz-hint: #6b7280;
    /* Focus rings across the channel read this; unset, they fell back to a 1.5:1 translucent purple. */
    --hagzi-focus: var(--hagzi-primary);
}

/* Placeholder text is still text (1.4.3). Component rules may go darker, never lighter. */
html input::placeholder,
html textarea::placeholder {
    color: var(--hz-hint);
    opacity: 1;
}

.hz-shell {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 24px;
}

/* Shared focus ring. Never removed, only restyled. */
.hz-nav__link:focus-visible,
.hz-phone:focus-visible,
.hz-cta:focus-visible,
.hz-brand:focus-visible,
.hz-band__cta:focus-visible,
.hz-band__link:focus-visible,
.hz-search__clear:focus-visible,
.hz-search__submit:focus-visible,
.hz-tab__input:focus-visible + .hz-tab__label {
    outline: 3px solid #ffffff;
    outline-offset: 2px;
    border-radius: 6px;
}

/*
 * On white the ring takes the primary: it is the channel's action colour and
 * measures 7.34:1 against white, so it is easier to see than the red it
 * replaces. The rings that sit on photographs stay white further down; blue
 * would disappear into a dark image.
 */
.hz-header .hz-nav__link:focus-visible,
.hz-header .hz-phone:focus-visible,
.hz-header .hz-brand:focus-visible,
.hz-header .hz-cta:focus-visible,
.hz-band__cta:focus-visible,
.hz-band__link:focus-visible {
    outline-color: var(--hagzi-primary);
}

/* --------------------------------------------------------------- header ---- */

.hz-header {
    border-bottom: 1px solid var(--hz-line);
    background: #fff;
    font-family: Roboto, "Helvetica Neue", Arial, sans-serif;
}

.hz-header__inner {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 24px;
    min-height: 68px;
}

.hz-brand {
    display: inline-flex;
    align-items: center;
    text-decoration: none;
}

/*
 * The Hagzi mark and wordmark are supplied as one 133x38 SVG lockup.
 *
 * The intrinsic size sits on the element's width/height attributes so the box
 * is reserved before the image decodes; height drives the rendered size here
 * and width:auto holds the ratio. SVG keeps the lockup sharp at every size.
 *
 * min-width is a correctness guard, not a tweak. The brand sits in an `auto`
 * grid track, and a replaced element with width:auto contributes zero to
 * min-content, so under pressure the track could be crushed and the lockup
 * rendered distorted or to nothing at all — silently, because squashing the
 * image does not produce a document overflow for an overflow check to catch.
 * It measured 14px wide at 390px and 0 at 375px once two more items joined the
 * action row. Pinning the minimum to max-content makes the row give somewhere
 * else instead.
 */
.hz-brand__logo {
    display: block;
    width: auto;
    height: 30px;
    min-width: max-content;
}

/*
 * Sits immediately right of the logo and left-aligned with it, rather than
 * centred in its track: the realtor.com / Zoopla arrangement.
 *
 * The grid is unchanged, so the nav still owns the 1fr middle column. All the
 * slack therefore collects to the nav's right and the actions cluster stays
 * pinned to the far right exactly where it was.
 *
 * margin-left tops up the grid column-gap so the logo and the first link read
 * as two deliberate groups rather than one continuous run of text: 40px above
 * 1080px where the grid gap is 24px, 32px below it where the gap tightens to
 * 16px. It is reset at 720px, where the nav drops to its own full-width row and
 * needs to sit flush with the logo above it instead.
 */
.hz-nav {
    display: flex;
    justify-content: flex-start;
    gap: 30px;
    min-width: 0;
    margin-inline-start: 16px;
}

.hz-nav__link {
    padding: 4px 2px;
    color: var(--hz-nav);
    font-size: 14px;
    font-weight: 500;
    text-decoration: none;
    white-space: nowrap;
}

.hz-nav__link:hover {
    color: var(--hz-ink);
}

/*
 * The gap is measured between BOXES, but the eye reads the distance between
 * MARKS, and the two are not the same once a box is bigger than the glyph in
 * it. Measured at the old 18px gap with 40px icon boxes, mark to mark:
 * number to globe 19.7px, EN to heart 30.8px, heart to bell 44.0px. The last
 * one is worst because both icons contribute their own slack to it.
 *
 * So the gap is tightened and the boxes with it, and two small corrections
 * even out the rest: see .hz-locale and .hz-hicon + .hz-hicon below.
 */
.hz-actions {
    display: flex;
    align-items: center;
    gap: 9px;
}

.hz-phone,
.hz-locale {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
}

.hz-phone {
    color: var(--hz-nav);
    text-decoration: none;
}

.hz-phone:hover {
    color: var(--hz-ink);
}

.hz-phone svg,
.hz-locale svg {
    width: 15px;
    height: 15px;
}

/* Static indicator, not a control: muted, no pointer, not focusable. */
.hz-locale {
    color: #9aa1ad;
    cursor: default;
    /*
     * The phone number is a text run whose last glyph ends flush with its box,
     * so it contributes no optical slack, while every glyph beside it does.
     * An equal CSS gap therefore looks tight here and loose everywhere else.
     * The correction rides on the locale rather than the phone so that it
     * disappears along with the locale at 860px.
     */
    margin-inline-start: 7px;
}

/*
 * Favourite and notification marks.
 *
 * Inert by construction like the locale beside them and the card hearts, so
 * they take the same muted grey rather than the phone's darker nav colour. That
 * is this header's existing signal for "indicator, not control", and using a
 * live-looking treatment on something with no destination is the thing we are
 * avoiding.
 *
 * A 32px square around a 22px glyph.
 *
 * The earlier pair were sized for optical balance against the 15px glyphs
 * beside them, which made them recede next to the CTA. These are meant to be
 * prominent instead, so the glyph stays at 22px.
 *
 * Only the box around it is tightened, from 40px. At 40 each icon padded
 * itself by roughly 13px a side and pushed its neighbours away, which is what
 * made the row read as four separated items rather than one group. 32px still
 * clears the 24px minimum target with room to spare.
 *
 * The square stays transparent — no chip, no border — because two filled pills
 * next to the purple CTA would out-compete it.
 *
 * No :focus-visible rule, because neither is focusable: they are spans with no
 * tabindex, so there is no focus to style. If either is later wired to a real
 * route it becomes an <a> and MUST be added to the .hz-header focus-ring
 * selector list near the top of this file.
 */
.hz-hicon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    color: #9aa1ad;
    cursor: default;
}

/*
 * The one gap with two icon boxes either side of it, so it collects twice the
 * slack of every other gap in the row. Pulling it back by the gap's own width
 * leaves the two boxes exactly touching: their hit areas stay contiguous with
 * no overlap and no dead strip between them, and the marks land at the same
 * spacing as the rest of the row.
 */
.hz-hicon + .hz-hicon {
    margin-inline-start: -9px;
}

/*
 * stroke-width is in viewBox units, so it scales with the glyph: leaving it at
 * the old 1.7 would have rendered these at 1.56px against the phone's 1.06px,
 * and the pair would have read as a heavier family sitting beside a lighter
 * one. 1.25 across a 22px glyph renders at 1.15px, which holds the line.
 */
.hz-hicon svg {
    width: 22px;
    height: 22px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.25;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-cta {
    padding: 9px 18px;
    border-radius: 999px;
    border: 1px solid var(--hagzi-primary);
    background: var(--hagzi-primary);
    color: #fff;
    transition: background-color 0.15s ease, border-color 0.15s ease;
    font-size: 13px;
    font-weight: 700;
    text-decoration: none;
    white-space: nowrap;
}

.hz-cta:hover {
    border-color: var(--hagzi-primary-dark);
    background: var(--hagzi-primary-dark);
}

/* ----------------------------------------------------------------- hero ---- */
/*
 * Bright image, light scrim, and the content block anchored below the top of
 * the photo.
 *
 * It was centred (align-items: center) inside a 660px min-height, which tied
 * the hero's height and the content's position to one knob: taking height off
 * the bottom dragged the search card up with it. Anchoring to the top separates
 * the two. padding-top alone now decides where the content sits, and the height
 * decides how much photograph is left underneath it — which is what lets the
 * empty band below the card be cut without the card moving.
 *
 * The height is content-driven at every width: padding-top + content +
 * padding-bottom. min-height is a floor, held roughly 30px under the natural
 * height so it only takes over if the content is ever unusually short.
 *
 * Image, crop and scrim are untouched. Note for anyone changing this: with the
 * photograph at 1920x873 and background-position at "center 72%", a hero
 * shorter than about 655px at 1440 starts cropping vertically, and 72% puts
 * roughly three quarters of that crop on the TOP edge rather than the bottom.
 * Shortening the hero therefore trims the ceiling, not the floor.
 */

.hz-hero {
    position: relative;
    display: flex;
    align-items: flex-start;
    min-height: 540px;
    overflow: hidden;
    background-color: #223046;
}

/*
 * The one state in which the hero must not clip: a filter chip's panel is open
 * and hangs below the search card, past the section's bottom edge.
 *
 * Measured before this rule existed: the amenities panel is 300px tall and the
 * hero ended 112px below its top, so four of seventeen options were reachable
 * and the rest were cut off with nothing on screen to say so. The panel passed
 * a "is it visible" check the whole time, because it had a non-zero box — it
 * was an ancestor doing the clipping, not the panel being hidden.
 *
 * Scoped with :has() rather than dropping overflow altogether, so the hero
 * clips exactly as it always has in every other state and this cannot become
 * the reason some future absolutely positioned thing bleeds out of it. The
 * hero is a flex container, so toggling overflow changes no layout: margins
 * do not collapse through a flex container either way. Verified no geometry
 * moves at 1440, 1280, 1024, 768, 430 and 390.
 *
 * A browser without :has() keeps the old clipping. That is the pre-existing
 * behaviour rather than a new failure, and the panels still open and still
 * submit; the lower options just need scrolling to reach.
 */
.hz-hero:has(details[data-hz-chip][open]) {
    overflow: visible;
}

.hz-hero__media {
    position: absolute;
    inset: 0;
}

/* The photo is an <img> (home/hero-media.blade.php) so it can carry
   fetchpriority as the LCP element; object-fit/-position reproduce the former
   `background-size: cover; background-position: center 0%` exactly. */
.hz-hero__media img {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    max-width: none;
    object-fit: cover;
    /* Anchored to the top so `cover` takes its overflow off the bottom of the
       frame — bare floor — instead of the ceiling. Note this only has any
       effect where the crop is vertical, i.e. viewports wider than the image's
       2.2:1 ratio. Narrower boxes crop horizontally and ignore the Y value. */
    object-position: center 0%;
}

/*
 * Deliberately lighter than the previous cinematic treatment so the photo reads
 * clearly, as in the reference. Slightly stronger at the very top and bottom,
 * where the headline and the card edge need separation from the image.
 */
.hz-hero__scrim {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(
            180deg,
            rgba(10, 16, 26, 0.48) 0%,
            rgba(10, 16, 26, 0.30) 38%,
            rgba(10, 16, 26, 0.32) 70%,
            rgba(10, 16, 26, 0.46) 100%
        );
}

.hz-hero__content {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    /* padding-top IS the content's vertical position now that the hero anchors
       to the top. 148px is where the centred 660px hero put the headline, to
       within a pixel, so the block did not move when the hero lost 90px off
       its bottom edge.

       padding-bottom is the floor of the band under the search card. It is a
       real minimum rather than decoration: if the content ever outgrows the
       min-height — a headline wrapping at some awkward width — this is what
       keeps the card off the section below instead of flush against it. */
    padding-top: 148px;
    padding-bottom: 96px;
    text-align: center;
}

.hz-hero__title {
    margin: 0 0 10px;
    color: #ffffff;
    font-size: 48px;
    font-weight: 800;
    line-height: 1.1;
    letter-spacing: -0.6px;
    text-shadow: 0 2px 18px rgba(8, 12, 20, 0.55);
}

.hz-hero__subtitle {
    margin: 0 0 26px;
    color: #ffffff;
    font-size: 19px;
    font-weight: 500;
    line-height: 1.4;
    /* The tight first shadow keeps 4.5:1 where the photo is pale behind the line. */
    text-shadow: 0 1px 3px rgba(8, 12, 20, 0.7), 0 1px 12px rgba(8, 12, 20, 0.6);
}

.hz-hero__form {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}

/* ----------------------------------------------------------------- tabs ---- */
/*
 * A white pill bar holding the three segments. Still radio inputs and labels:
 * arrow keys move between them natively and there is no JavaScript involved,
 * so the tabs cannot break. Transactions and Agents are gone.
 */

.hz-tabbar {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    max-width: 100%;
    margin: 0 0 18px;
    padding: 5px;
    border-radius: 999px;
    background: #ffffff;
    box-shadow: 0 6px 22px rgba(6, 10, 18, 0.18);
    overflow-x: auto;
    scrollbar-width: none;
}

.hz-tabbar::-webkit-scrollbar {
    display: none;
}

.hz-tab {
    display: inline-flex;
    flex: 0 0 auto;
}

/* Off-screen rather than display:none, so the radio stays focusable. */
.hz-tab__input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
}

.hz-tab__label {
    display: inline-block;
    padding: 9px 26px;
    border-radius: 999px;
    color: #2b3040;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease;
}

.hz-tab__label:hover {
    background: #f3f4f7;
}

/*
 * The two filters, grouped.
 *
 * A box of its own so that role="group" aria-label="Listing type" can name
 * exactly the controls that are listing types, and nothing else. It is a flex
 * row carrying the same 4px the bar carries, so the pills sit where they always
 * did: this adds a node, not a gap.
 */
.hz-tabbar__types {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

/*
 * New projects -- the one control in this bar that loads another page.
 *
 * It was .hz-tab__label on an anchor, which made it pixel-identical to the two
 * pills beside it: same padding, same weight, same grey hover wash. Two
 * behaviours in the same clothing, and the giveaway was that only its
 * neighbours could ever light up, because only they have a radio to check.
 *
 * So it drops the pill. It briefly also took the channel's action colour and
 * the forward arrow .hz-seeall uses elsewhere on this page; both were removed
 * on request, and the type is now the same near-black as .hz-tab__label.
 *
 * WHICH LEAVES THE HAIRLINE DOING ALL OF THE WORK. border-inline-start is the
 * only thing at rest that separates a control which loads another page from two
 * that set a filter in place, so it is load-bearing rather than trim -- please
 * do not fold it into the pills' 4px gap. The hover underline below is the only
 * other differentiator, and it needs a pointer to appear at all.
 *
 * It stays inside the white bar rather than moving out alongside it because
 * the bar is white for a reason: the hero behind it is a photograph, and text
 * out on the image has no contrast that holds at every crop and every hero.
 *
 * Nothing here can match .hz-tab__input:checked, which is the point. It is
 * never the selected anything -- the page it points at is not this one.
 */
.hz-tabbar__jump {
    display: inline-flex;
    align-items: center;
    flex: 0 0 auto;
    margin-inline-start: 4px;
    padding-block: 9px;
    padding-inline: 16px;
    border-inline-start: 1px solid var(--hz-line);
    /* The pills' own ink, literal for literal -- see .hz-tab__label. */
    color: #2b3040;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
    text-decoration: none;
}

/*
 * An underline rather than the pills' background wash. The pills are answering
 * "which of these"; this is answering "go there", and filling a pill shape on
 * hover is exactly the suggestion this control should stop making.
 *
 * With the colour and the arrow gone this is the only thing that tells a
 * pointer user the two behaviours apart, so it earns its keep twice over.
 */
.hz-tabbar__jump:hover {
    text-decoration: underline;
    text-underline-offset: 3px;
}

/*
 * Inset, like the pills' own ring: the bar clips at its border radius, so an
 * outward ring on the last item in the row would be cut off.
 */
.hz-tabbar__jump:focus-visible {
    outline: 3px solid var(--hagzi-primary);
    outline-offset: -3px;
    border-radius: 6px;
}

/*
 * The selected segment. A tint of the primary rather than a fill, because the
 * hero already carries one solid purple control in the Search button and two
 * would compete for the same rank.
 *
 * The tint is the primary at 8% over white. Primary text on it measures
 * 7.92:1, so the label stays comfortably readable.
 */
.hz-tab__input:checked + .hz-tab__label {
    background: #EAF1FF;
    color: var(--hagzi-primary);
    /* The wash is 1.1:1 against white: the ring and weight carry "selected" without colour. */
    box-shadow: inset 0 0 0 2px var(--hagzi-primary);
    font-weight: 700;
}

/* --------------------------------------------------------- search card ---- */
/*
 * The raised white panel from the reference: the search row and the filter row
 * live inside it.
 */

.hz-card {
    width: 100%;
    max-width: 920px;
    padding: 22px;
    border-radius: 22px;
    background: #ffffff;
    box-shadow: 0 20px 48px rgba(6, 10, 18, 0.24);
    text-align: start;
}

.hz-search {
    display: flex;
    align-items: center;
    gap: 10px;
    height: 54px;
    padding: 0 7px;
    padding-inline-start: 16px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: 999px;
    background: #ffffff;
}

.hz-search:focus-within {
    border-color: var(--hagzi-primary);
    box-shadow: 0 0 0 2px var(--hagzi-primary);
}

.hz-search__icon {
    flex: 0 0 auto;
    width: 19px;
    height: 19px;
    color: #8b929f;
}

/* Visible label would duplicate the placeholder, but the field still needs a
   programmatic name, so it is hidden visually only. */
.hz-search__label {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
}

.hz-search__input {
    flex: 1 1 auto;
    min-width: 0;
    height: 100%;
    padding: 0;
    border: 0;
    outline: 0;
    background: transparent;
    color: var(--hz-ink);
    font-size: 15px;
    font-family: inherit;
}

.hz-search__input::placeholder {
    color: var(--hz-hint, #6b7280);
    opacity: 1;
}

/* Chrome's own search affordance is suppressed in favour of the reset button,
   which works without JavaScript and is reachable by keyboard. */
.hz-search__input::-webkit-search-cancel-button,
.hz-search__input::-webkit-search-decoration {
    -webkit-appearance: none;
    appearance: none;
}

.hz-search__clear {
    display: none;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: #f1f2f5;
    color: #5c6270;
    cursor: pointer;
}

.hz-search__clear svg {
    width: 15px;
    height: 15px;
}

.hz-search__clear:hover {
    background: #e4e6ea;
    color: var(--hz-ink);
}

/* Only offered once there is something to clear. */
.hz-search__input:not(:placeholder-shown) ~ .hz-search__clear {
    display: inline-flex;
}

/*
 * Compact pill sitting inside the field, not a full-height block.
 *
 * The field is itself a pill, so a pill here is the concentric curve rather
 * than a stylistic choice: the field's radius is capped at half its height,
 * 27px, and the button is inset by 8px (1px border + 7px padding), which
 * leaves 19px — within a pixel of the button's own half-height of 20px. The
 * gap between the two therefore stays even the whole way round the right end.
 * The same holds at the 620px breakpoint, where 25 - 7 = 18 against 19.
 */
.hz-search__submit {
    flex: 0 0 auto;
    height: 40px;
    padding: 0 22px;
    border: 1px solid var(--hagzi-primary);
    border-radius: 999px;
    background: var(--hagzi-primary);
    color: #ffffff;
    font-size: 14px;
    font-weight: 700;
    font-family: inherit;
    line-height: 1;
    cursor: pointer;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}

.hz-search__submit:hover {
    border-color: var(--hagzi-primary-dark);
    background: var(--hagzi-primary-dark);
}

/* --------------------------------------------------------- filter chips ---- */
/*
 * Layout parity with the reference, and nothing more. None of these attributes
 * exist in this catalogue, so the chips are spans rather than controls: they
 * carry no click target, stay out of the tab order, and cannot open an empty
 * dropdown. Muted rather than full-contrast so the inert state is visible
 * without hovering for the title.
 */

.hz-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 14px;
}

/*
 * The chips are real filters now, built on <details>, so the element is a
 * positioning context for its panel rather than the pill itself. The pill is
 * the <summary>.
 */
.hz-chip {
    position: relative;
}

/* Type-specific chips wait for a property type (hero script). */
.hz-chip[hidden] {
    display: none !important;
}

.hz-chip__summary {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 9px 15px;
    border: 1px solid #dde1e9;
    border-radius: 999px;
    background: #fcfcfd;
    color: #5c6270;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.2;
    white-space: nowrap;
    cursor: pointer;
    list-style: none;
    transition: border-color 0.15s ease, color 0.15s ease, background-color 0.15s ease;
}

/* Safari draws its own disclosure triangle unless both of these are set. */
.hz-chip__summary::-webkit-details-marker {
    display: none;
}

.hz-chip__summary::marker {
    content: "";
}

.hz-chip__summary:hover {
    border-color: #c3c9d4;
    color: var(--hz-ink);
}

.hz-chip[open] > .hz-chip__summary {
    border-color: var(--hagzi-primary);
    color: var(--hagzi-primary);
}

/*
 * A chip holding a selection. A tinted fill and a purple edge rather than a
 * solid purple pill: these are filters, and a solid fill would put them at the
 * same rank as the Search button sitting beside them.
 */
.hz-chip[data-hz-chip-active] > .hz-chip__summary {
    border-color: var(--hagzi-primary);
    background: #EAF1FF;
    color: var(--hagzi-primary);
    font-weight: 600;
}

.hz-chip[open] > .hz-chip__summary svg {
    transform: rotate(180deg);
}

.hz-chip__summary svg {
    transition: transform 0.15s ease;
}

.hz-chip__summary:focus-visible {
    outline: 3px solid var(--hagzi-primary);
    outline-offset: 2px;
}

/* ---- the panel ---------------------------------------------------------- */

.hz-chip__panel {
    position: absolute;
    z-index: 30;
    top: calc(100% + 6px);
    inset-inline-start: 0;
    min-width: 200px;
    /*
     * Tall enough that the seventeen amenities all fit at two columns, which
     * is what the 621-1100 band uses: measured scrollHeight is 390px there.
     * At 300 the last five needed an inner scroller, which is a poor way to
     * discover that Storage and Staff quarters exist. The three-column panel
     * is 256px tall and is unaffected by this.
     */
    max-height: 400px;
    overflow-y: auto;
    padding: 14px;
    border: 1px solid var(--hz-line);
    border-radius: 14px;
    background: #ffffff;
    box-shadow: 0 12px 28px rgba(16, 20, 30, 0.14);
    text-align: start;
}

/*
 * Amenities is seventeen options, and this panel is two columns at every width
 * now. There is no three-column case left.
 *
 * Three columns need 500px and 500px no longer fits. The property type chip
 * was added at the head of the row, which pushes the amenities chip along by
 * its width plus the gap, and the card the panel has to stay inside is a fixed
 * 920px from 968 up -- so the room does not come back at a wider viewport.
 * Measured at 1440 with a price range set, which is an ordinary thing to have
 * done before opening this panel: the panel's far edge lands 11px past the
 * card in English and 22px past it in Arabic, and by the same amount at 1024
 * as at 1920. No viewport check catches it -- there is a third of the screen
 * spare on either side.
 *
 * Two columns fit inside the 400px cap: measured scrollHeight is 390, so all
 * seventeen stay reachable without an inner scroller. Taller and narrower,
 * not truncated.
 */
.hz-chip[data-hz-chip="more"] .hz-chip__panel {
    min-width: 320px;
}

/*
 * EVERY PANEL OPENS FROM ITS OWN CHIP'S INLINE-START EDGE. Nothing is anchored
 * to the end of a chip, and nothing is anchored to the card.
 *
 * It used to end-anchor the last two, so their panels would not open past the
 * card's far edge. That held with four chips and stopped holding with three:
 * the chips clustered into the first half of the card, so the widest panel
 * anchored to the last of them hung 180px off the card's NEAR edge at 1440 --
 * inside the viewport, so no overflow check caught it, and visibly wrong.
 *
 * THE ROW IS FOUR CHIPS AGAIN, property type having been added at its head, so
 * this was re-measured rather than assumed. Two things had to move, and each
 * is explained where it is made: the amenities panel is two columns at every
 * width now, and the sheet further down takes over at 860 rather than 760.
 *
 * MEASURE WITH THE CHIPS CARRYING SELECTIONS, NOT AT REST. A chip's summary is
 * replaced by what is selected inside it, so a price range widens that chip by
 * about 66px and shoves everything after it along. At rest the row fits at
 * 1440 with 72px to spare; with a range set the same row does not fit at all.
 * The resting numbers are the ones that lie.
 *
 * Arabic is the tighter of the two directions, which is not obvious: its chip
 * labels are shorter at rest but longer once chosen -- "غرفتا نوم فأكثر"
 * against "2+ beds" -- and it is the chosen state that decides this.
 *
 * With two columns the widest panel is 320px. Worst case, selections set,
 * across 968 and up: 185px to spare in English, 161px in Arabic, and those do
 * not vary with the viewport because the card does not either. The tightest
 * width in the range is 861, the first that is not a sheet.
 *
 * If the row changes length again, re-measure, with selections set. Anchoring
 * by position is a guess about where a chip sits, and it only holds while the
 * row's length does.
 */

.hz-chip__set {
    margin: 0;
    padding: 0;
    border: 0;
}

.hz-chip__legend {
    margin: 0 0 10px;
    padding: 0;
    color: #5b6577;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.hz-chip__more-set {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 2px 16px;
}

.hz-chip[data-hz-chip="more"] .hz-chip__legend {
    grid-column: 1 / -1;
}

/* More filters: each section waits for a property type it applies to. */
.hz-chip__more-set[hidden] {
    display: none !important;
}

.hz-chip__more-set:not([hidden]) ~ .hz-chip__more-set:not([hidden]) {
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--hz-line);
}

/*
 * THE 1340px BREAKPOINT THAT SAT HERE IS GONE, NOT MOVED.
 *
 * It dropped this panel from three columns to two below 1340, which was only
 * worth having while three columns fitted above it. They no longer fit at any
 * width: the card stops growing at 920px from 968 up, so a 500px panel has the
 * same room at 1920 as at 1024, and the property type chip at the head of the
 * row spent it. Two columns are unconditional now and there is nothing left
 * for a width query to switch between.
 */

/*
 * Labels wrap rather than being cut. Two columns in a 320px panel give each
 * label about 132px, and "Underground parking" and "Backup water supply" both
 * need more than that, so nowrap silently truncated them. Widening the panel
 * instead is what the note above rules out: there is no room left to widen it
 * into.
 */
.hz-chip__opt {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 0;
    color: var(--hz-ink);
    font-size: 13.5px;
    font-weight: 500;
    line-height: 1.3;
    cursor: pointer;
}

.hz-chip__opt input {
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    margin: 0;
    accent-color: var(--hagzi-primary);
    cursor: pointer;
}

/* Homepage Bedrooms and Bathrooms share one pill-selection panel. */
.hz-chip__panel--rooms {
    width: 380px;
    padding: 20px;
}

.hz-chip__rooms-group + .hz-chip__rooms-group {
    margin-top: 28px;
}

.hz-chip__rooms-title {
    margin: 0 0 16px;
    padding: 0;
    color: var(--hz-ink);
    font-size: 18px;
    font-weight: 600;
    line-height: 1.4;
}

.hz-chip__pills {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 8px;
}

.hz-chip__pill {
    position: relative;
    display: inline-flex;
    cursor: pointer;
}

.hz-chip__pill input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}

.hz-chip__pill span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 54px;
    min-height: 38px;
    padding: 6px 12px;
    border: 1px solid var(--hz-line);
    border-radius: 999px;
    background: #fff;
    color: var(--hz-ink);
    font-size: 16px;
    font-weight: 400;
    line-height: 1.4;
    transition: color .15s ease, border-color .15s ease, background .15s ease;
}

.hz-chip__pill:hover span {
    border-color: var(--hagzi-primary);
}

.hz-chip__pill input:checked + span {
    border-color: var(--hagzi-primary);
    background: #eef3ff;
    color: var(--hagzi-primary);
}

.hz-chip__pill input:focus-visible + span {
    outline: 2px solid var(--hagzi-primary);
    outline-offset: 3px;
}

.hz-chip__range {
    display: flex;
    align-items: flex-end;
    gap: 10px;
}

.hz-chip__num {
    display: flex;
    flex-direction: column;
    gap: 5px;
    color: #5b6577;
    font-size: 11.5px;
    font-weight: 600;
}

.hz-chip__num input {
    width: 104px;
    padding: 8px 10px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: 9px;
    color: var(--hz-ink);
    font-family: inherit;
    font-size: 13.5px;
}

.hz-chip__num input:focus-visible {
    border-color: var(--hagzi-primary);
    outline: 2px solid var(--hagzi-primary);
    outline-offset: 0;
}

.hz-chip svg {
    width: 14px;
    height: 14px;
    opacity: 0.75;
}

/*
 * Focus ring overrides: the base ring is white for the header and hero, but the
 * tabs and the search buttons now sit on white, where white is invisible.
 */
.hz-tab__input:focus-visible + .hz-tab__label,
.hz-search__clear:focus-visible,
.hz-search__submit:focus-visible {
    outline-color: var(--hz-ink);
}

/* ------------------------------------------------------- below-hero band ---- */

.hz-band {
    padding: 72px 0 80px;
    background: #fff;
    font-family: Roboto, "Helvetica Neue", Arial, sans-serif;
}

.hz-band__inner {
    max-width: 760px;
    text-align: center;
}

.hz-band__title {
    margin: 0 0 14px;
    color: var(--hz-ink);
    font-size: 30px;
    font-weight: 800;
    letter-spacing: -0.02em;
}

.hz-band__text {
    margin: 0 auto 26px;
    max-width: 60ch;
    color: #5b6270;
    font-size: 16px;
    line-height: 1.65;
}

.hz-band__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 14px;
}

/*
 * NOTHING RENDERS .hz-band TODAY. No view in the theme emits the class and the
 * homepage returns none of it in either locale; the markup went when the band
 * was reworked and the rules stayed. It is recoloured rather than deleted
 * because removing a block another session may be part-way through reinstating
 * is the more expensive mistake, and because a red button is exactly what
 * should not reappear if the band comes back. White on the primary is the same
 * pairing the Search button already uses.
 */
.hz-band__cta {
    padding: 12px 26px;
    border-radius: 8px;
    background: var(--hagzi-primary);
    color: #fff;
    font-size: 15px;
    font-weight: 700;
    text-decoration: none;
}

.hz-band__cta:hover {
    background: var(--hagzi-primary-dark);
}

.hz-band__link {
    padding: 12px 22px;
    border: 1px solid #d5d9e0;
    border-radius: 8px;
    color: var(--hz-ink);
    font-size: 15px;
    font-weight: 600;
    text-decoration: none;
}

.hz-band__link:hover {
    border-color: var(--hz-ink);
}

/* ----------------------------------------------------------- responsive ---- */

@media (max-width: 1080px) {
    .hz-header__inner {
        grid-template-columns: auto 1fr auto;
        gap: 16px;
    }

    .hz-nav {
        gap: 20px;
        overflow-x: auto;
        scrollbar-width: none;
    }

    .hz-nav::-webkit-scrollbar {
        display: none;
    }

    .hz-phone span {
        display: none;
    }

    .hz-hero {
        min-height: 500px;
    }

    /* 121px is where the 600px centred hero put the headline at this width, so
       the content holds its position here as well. */
    .hz-hero__content {
        padding-top: 121px;
        padding-bottom: 92px;
    }

    .hz-hero__title {
        font-size: 44px;
    }
}

@media (max-width: 860px) {
    .hz-locale {
        display: none;
    }
}

/*
 * Below this width the centred three-column header cannot hold a full nav row,
 * so the brand and actions share the top line and the nav scrolls underneath.
 */
@media (max-width: 720px) {
    .hz-header__inner {
        grid-template-columns: auto auto;
        justify-content: space-between;
        gap: 10px 16px;
        padding-top: 10px;
        padding-bottom: 4px;
    }

    .hz-brand {
        grid-column: 1;
        grid-row: 1;
    }

    /* The wordmark is baked into the lockup, so the whole mark scales down
       together on narrow screens. At 26px tall it remains compact enough for
       the header action row while keeping the brand readable. */
    .hz-brand__logo {
        height: 26px;
    }

    .hz-actions {
        grid-column: 2;
        grid-row: 1;
        justify-content: flex-end;
    }

    .hz-nav {
        grid-column: 1 / -1;
        grid-row: 2;
        justify-content: flex-start;
        padding-bottom: 8px;
        /* Own row now, so the offset that separated it from the logo on one
           line would only push it out of alignment with the logo above. */
        margin-inline-start: 0;
    }

    /* Row 2 frees up room again, so the number comes back rather than
       leaving a bare handset icon next to the CTA. */
    .hz-phone span {
        display: inline;
    }

    .hz-hero {
        min-height: 470px;
    }

    /* 117px is where the 560px centred hero put the headline. The band under
       the card is 80px here rather than the 96px used on desktop: the card
       fills far more of a phone's hero, so the same band would read as a gap
       rather than as breathing room. */
    .hz-hero__content {
        padding-top: 117px;
        padding-bottom: 80px;
    }

    .hz-hero__title {
        font-size: 33px;
    }

    .hz-hero__subtitle {
        margin-bottom: 20px;
        font-size: 16px;
    }

    .hz-tab__label {
        padding: 9px 17px;
        font-size: 13px;
    }

    /* Tightened with the pills, so the bar still fits a 390px viewport. */
    .hz-tabbar__jump {
        padding-inline: 12px;
        font-size: 13px;
    }

    .hz-card {
        padding: 14px;
        border-radius: 18px;
    }

    .hz-band {
        padding: 52px 0 56px;
    }

    .hz-band__title {
        font-size: 24px;
    }
}

/*
 * Handsets, with the favourite and notification marks now in the action row.
 *
 * Row one is brand + phone + heart + bell + CTA. The 720px block above restores
 * the phone number on the reasoning that row two had freed up space, and that
 * was true when the row held three items; with five it is not. The number is
 * ~85px of the ~312px row, far and away the cheapest thing to give up, so it
 * collapses back to its icon here.
 *
 * The two marks are NOT hidden at any width. They are the most compact items in
 * the row at 30px each, and hiding the thing that was just added in order to
 * keep an 11-digit phone number that also appears in the footer and one tap
 * away on the icon would be the wrong trade. Must come after the 720px block:
 * same specificity, so source order decides.
 *
 * Order of giving way across the whole header, for the record:
 *   1080px  phone number -> icon
 *    860px  locale hides entirely
 *    720px  nav drops to its own row; phone number returns
 *    480px  phone number -> icon again
 *   the heart and bell persist throughout
 */
@media (max-width: 480px) {
    .hz-phone span {
        display: none;
    }

}

/*
 * The chips are the first thing to give up room: they are inert, so scrolling
 * them sideways costs nothing, and it keeps them on one line as in the
 * reference instead of stacking three deep above the fold.
 */
@media (max-width: 620px) {
    .hz-search {
        height: 50px;
        padding: 0 6px;
        padding-inline-start: 13px;
    }

    .hz-search__submit {
        height: 38px;
        padding: 0 16px;
    }

    /*
     * THE ROW NO LONGER SCROLLS SIDEWAYS, AND THAT IS DELIBERATE.
     *
     * It used to be flex-wrap: nowrap with overflow-x: auto and contain: paint,
     * to keep six chips on one line as in the reference. Both of those clip an
     * absolutely positioned child, so every dropdown panel would be cut off at
     * the row's edge -- worst on the right-hand chips, which is exactly where
     * a panel has least room to begin with.
     *
     * Wrapping is affordable now because the six chips are four: two rows on a
     * handset rather than the three-deep stack that made scrolling worth it.
     * And they are controls rather than decoration now, so a chip a visitor
     * has to discover by swiping is a worse trade than a second row.
     */
    .hz-chips {
        flex-wrap: wrap;
    }

    /* Nothing chip-specific left here; the panel treatment moved to its own
       block below, which starts higher up than this one. */
}

/*
 * ONE FULL-WIDTH SHEET UNDER THE CARD, NOT A PANEL HANGING OFF A CHIP.
 *
 * A panel wide enough to be usable is wider than the chip that opens it, so it
 * has to extend past one of that chip's edges, and below this width there is
 * no edge that is safe. Measured with three chips: the amenities chip's right
 * edge sits 327px from the left of the screen at 640 and 700, so even the
 * two-column 320px panel is within a handful of pixels of running off, and
 * narrower still it is hopeless. If the row ever wraps again the problem gets
 * worse rather than better, because then which edge is safe depends on where
 * each chip landed -- right-anchoring threw the amenities panel 150px off the
 * left when it was the first chip on a second row, and left-anchoring does the
 * same to a chip at the end of the first.
 *
 * So below this width the panel takes the card as its containing block and
 * spans it. .hz-chip goes static to hand that role over and .hz-card takes it.
 * Nothing else about the card changes: it has no absolutely positioned
 * children of its own, so becoming a positioning context has no other effect.
 *
 * THIS STARTS AT 860, NOT AT THE 620 THE OTHER HANDSET RULES USE. The two
 * numbers answer different questions and have not been the same since the
 * chips became real controls.
 *
 * It was 760, measured with three chips. Property type makes four, so every
 * chip behind it starts about 141px further along and the panels stop fitting
 * that much sooner. Measured with a price range set, which is the case that
 * decides it: the amenities panel first breaks the card at about 783 in
 * English and about 807 in Arabic. Arabic is the tighter one because its
 * chosen labels are the longer ones -- see the note higher up.
 *
 * 860 clears the worse of the two by about 50px, which is a good deal more
 * price digits than the catalogue's own range needs.
 */
@media (max-width: 860px) {
    .hz-card {
        position: relative;
    }

    .hz-chip {
        position: static;
    }

    .hz-chip__panel,
    .hz-chip[data-hz-chip="more"] .hz-chip__panel {
        top: calc(100% + 8px);
        right: 0;
        left: 0;
        min-width: 0;
        /* A sheet under the card can afford to be taller than the cap a
           chip-anchored panel gets, and it should be: at 300px only twelve of
           the seventeen amenities were reachable without working a small inner
           scroller with a fingertip. */
        max-height: 60vh;
    }

    .hz-chip__panel--rooms {
        width: auto;
    }

    /* Three columns do not fit here. Two do. */
    .hz-chip__more-set {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/* Very narrow handsets: the field alone needs the full row. */
@media (max-width: 360px) {
    .hz-search {
        flex-wrap: wrap;
        height: auto;
        padding: 10px;
        border-radius: 16px;
    }

    .hz-search__input {
        height: 38px;
    }

    /*
     * The field stops being a pill here and becomes a 16px box, and the button
     * stops being a chip inside it and becomes a full-width block along its
     * bottom edge. A pill would then curve harder than the container holding
     * it, which reads as a mistake, so the radius steps down to sit with the
     * field's corners instead.
     */
    .hz-search__submit {
        flex: 1 1 100%;
        height: 44px;
        margin-top: 8px;
        border-radius: 12px;
    }
}

/* ==========================================================================
 * Homepage sections below the hero (property channel)
 *
 * Appended: every rule above this line — footer, header, hero, tabs, search
 * card, chips and their media queries — is untouched.
 *
 * The content these style is hard-coded demo data. See the comment block at the
 * top of resources/themes/property/views/home/index.blade.php.
 * ========================================================================== */

/* Visually hidden but readable: metadata icons are aria-hidden, so the numbers
   need units in text for anyone not looking at the icon. */
.hz-sr {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
}

.hz-sec {
    padding: 44px 0 0;
    background: #ffffff;
}

.hz-sec--last {
    padding-bottom: 56px;
}

.hz-sec__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 18px;
}

.hz-sec__title {
    margin: 0;
    color: var(--hz-ink);
    font-size: 24px;
    font-weight: 700;
    letter-spacing: -0.3px;
}

.hz-sec__title--sm {
    font-size: 17px;
    font-weight: 600;
    letter-spacing: -0.1px;
}

.hz-seeall {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    flex: 0 0 auto;
    color: var(--hz-ink);
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: none;
}

.hz-seeall svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-seeall:hover {
    color: var(--hagzi-primary);
}

/* -------------------------------------------------------------- areas ---- */
/*
 * Browse by Area: photographic cards in a horizontally scrolling row.
 *
 * The row is nothing more than an overflow-x container, so it scrolls with no
 * script at all — trackpad, touch, and tabbing between cards, which pulls the
 * focused one into view. The arrows and dots are BUILT BY SCRIPT (see the
 * template) and are simply absent when script does not run, rather than
 * sitting there looking live and doing nothing. Same principle as the inert
 * city spans in the off-plan grid below.
 */

.hz-areas-section .hz-sec__head {
    align-items: flex-end;
    margin-bottom: 28px;
}

.hz-areas-section .hz-sec__title--sm {
    font-size: 24px;
    font-weight: 700;
    letter-spacing: -0.5px;
}

.hz-areas__subtitle {
    margin: 6px 0 0;
    color: var(--hz-muted);
    font-size: 15px;
    line-height: 1.45;
}

.hz-areas-section .hz-seeall {
    color: var(--hagzi-primary);
    font-size: 14px;
    font-weight: 700;
}

/*
 * The Buy / Rent segmented control that used to sit here has gone, along with
 * .hz-areas__head, .hz-areas__seg and .hz-areas__segbtn.
 *
 * It rendered Buy as an enforced filter state. The cards below it now link to
 * real per-area searches, and those searches return whatever is in the area:
 * Deir Ghbar and Khalda each return a single FOR RENT listing. So the control
 * was not merely inert, it was describing the results wrongly. Marking both
 * halves aria-disabled would have fixed the lie and left two grey words in a
 * grey pill directly under the heading, saying nothing, in the most valuable
 * position in the section. Removing it was the smaller surface.
 *
 * Restoring it is a block of markup plus this block of CSS, once a real
 * listing-type filter exists to hang it on.
 */

.hz-areas__viewport {
    position: relative;
}

.hz-areas__track {
    display: flex;
    gap: 18px;
    margin: 0;
    padding: 0;
    /*
     * Its own scroll context, so however many cards there are they can never
     * push the document sideways. The card focus ring is inset, so nothing is
     * clipped by this either.
     */
    overflow-x: auto;
    scroll-snap-type: x proximity;
    scroll-behavior: smooth;
    scrollbar-width: none;
    list-style: none;
}

.hz-areas__track::-webkit-scrollbar {
    display: none;
}

/*
 * Fixed width, not a grid fraction: the card never grows with the viewport,
 * which is what keeps the photograph's density honest at every width and lets
 * the row show a partial card as a hint that it scrolls.
 */
.hz-areas__track > li {
    flex: 0 0 auto;
    width: 220px;
    scroll-snap-align: start;
}

.hz-area {
    display: flex;
    height: 100%;
    flex-direction: column;
}

.hz-area__media {
    display: block;
    height: 166px;
    flex: 0 0 auto;
    border-radius: 15px;
    overflow: hidden;
    background: #e9ebf0;
}

.hz-area__img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.35s ease;
}

.hz-area:hover .hz-area__img {
    transform: scale(1.045);
}

.hz-area__body {
    display: flex;
    min-height: 118px;
    flex: 1 1 auto;
    flex-direction: column;
    padding: 13px 3px 0;
}

.hz-area__name {
    display: block;
    margin: 0;
    color: var(--hz-ink);
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -0.15px;
    line-height: 1.3;
    text-decoration: none;
}

.hz-area__name:hover {
    color: var(--hagzi-primary);
}

.hz-area__count {
    display: block;
    margin-top: 4px;
    color: var(--hz-muted);
    font-size: 14px;
    line-height: 1.35;
}

.hz-area__actions {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-top: 15px;
}

.hz-area__action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    color: var(--hagzi-primary);
    font-size: 15px;
    font-weight: 700;
    line-height: 1.2;
    text-align: center;
    text-decoration: none;
    transition: color 0.15s ease;
}

.hz-area__action:hover {
    color: var(--hagzi-primary-dark, #0638B0);
}

.hz-area__action svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.9;
    stroke-linecap: round;
    stroke-linejoin: round;
}

[dir="rtl"] .hz-area__action svg {
    transform: scaleX(-1);
}

.hz-area__divider {
    width: 1px;
    height: 20px;
    flex: 0 0 auto;
    background: #cfd3dc;
}

.hz-area__media:focus-visible,
.hz-area__name:focus-visible,
.hz-area__action:focus-visible {
    outline: 3px solid var(--hagzi-focus, rgba(82, 50, 137, 0.28));
    outline-offset: 2px;
}

/* ---- script-built controls ------------------------------------------- */

.hz-areas__nav {
    position: absolute;
    top: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    padding: 0;
    border: 1px solid var(--hz-line);
    border-radius: 999px;
    background: #ffffff;
    color: var(--hz-ink);
    box-shadow: 0 4px 14px rgba(6, 10, 18, 0.16);
    transform: translateY(-50%);
    cursor: pointer;
    transition: background-color 0.15s ease;
}

/*
 * Inside the row rather than out in the page margin as the mockup has them.
 * There is no margin to sit in below about 1250px, and anything hanging
 * outside the shell is a horizontal-overflow risk at every narrow width.
 */
.hz-areas__nav--prev {
    inset-inline-start: 8px;
}

.hz-areas__nav--next {
    inset-inline-end: 8px;
}

.hz-areas__nav:hover {
    background: #f3f4f7;
}

.hz-areas__nav svg {
    width: 17px;
    height: 17px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/*
 * Hidden, not greyed, at the ends. A visible disabled arrow still reads as
 * "this does something"; removing it from the flow and from the tab order
 * says plainly that there is nothing further that way.
 */
.hz-areas__nav[hidden] {
    display: none;
}

.hz-areas__dots {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    margin-top: 14px;
}

/*
 * Needed because the display:flex above is an author rule and would otherwise
 * beat the user-agent's [hidden] { display: none }, leaving the dots visible
 * when script hides them.
 */
.hz-areas__dots[hidden] {
    display: none;
}

/* 22px box for a 8px dot: the visual stays small, the touch target does not. */
.hz-areas__dot {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
}

.hz-areas__dot::before {
    content: "";
    display: block;
    width: 8px;
    height: 8px;
    border-radius: 999px;
    background: #d2d6de;
    transition: background-color 0.15s ease;
}

.hz-areas__dot[aria-current="true"]::before {
    background: var(--hagzi-primary);
}

@media (prefers-reduced-motion: reduce) {
    .hz-areas__track {
        scroll-behavior: auto;
    }

    .hz-area,
    .hz-area__img {
        transition: none;
    }

    .hz-area:hover {
        transform: none;
    }

    .hz-area:hover .hz-area__img {
        transform: none;
    }
}

/* ------------------------------------------------------ listing cards ---- */

/*
 * Four columns, one row. Was three columns holding all six listings in two
 * rows; the page now shows them as three separate one-row sections — featured,
 * for sale, for rent — so the grid is a single row of at most four.
 */
.hz-listings {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 22px;
    margin: 0;
    padding: 0;
    list-style: none;
}

/*
 * Track count follows the item count, because the catalogue holds three sales
 * and three rentals and neither typed row can fill four slots. Four tracks with
 * the last one empty reads as a card that failed to load; three tracks reads as
 * a row of three.
 *
 * The rule is: fill the width down to three, cap below that. At three of four
 * the cards come out 329px against the featured row's 271px, which is wider but
 * still plainly the same card. At two they would be 505px and at one 1032px,
 * which stops looking like the same component, so those two cap their track to
 * the four-column card width and sit left-aligned instead. The calc reproduces
 * that width exactly: the shell minus the three gaps a four-column row has,
 * divided by four, plus the gaps the shorter row keeps.
 *
 * --4 needs no rule; it is the default above.
 */
.hz-listings--3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

.hz-listings--2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    max-width: calc((100% - 66px) / 2 + 22px);
}

.hz-listings--1 {
    grid-template-columns: minmax(0, 1fr);
    max-width: calc((100% - 66px) / 4);
}

.hz-lcard {
    display: flex;
    flex-direction: column;
    height: 100%;
    border: 1px solid #edeff3;
    border-radius: 12px;
    background: #ffffff;
    overflow: hidden;
    /* Deliberately barely there: the mockup lifts cards off white by a hair. */
    box-shadow: 0 1px 3px rgba(16, 20, 28, 0.05);
    transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.hz-lcard:hover {
    box-shadow: 0 8px 20px rgba(16, 20, 28, 0.1);
    transform: translateY(-2px);
}

.hz-lcard__media {
    position: relative;
    aspect-ratio: 16 / 11;
    /* Holds the crop, now that the photograph is bigger than this box. */
    overflow: hidden;
    background: #eef0f3;
}

/*
 * Absolutely positioned rather than merely sized to 100%, and that matters.
 *
 * With the photograph in normal flow its own intrinsic ratio wins whenever the
 * percentage height cannot resolve, and this box grows to fit it. That is how
 * moving from the 640x427 demo JPEGs to the catalogue's 350x360 renderings
 * silently turned a landscape card into a portrait one — 378px of photograph
 * where the design asks for 254 — and made every card in the row 124px taller
 * without a single line of layout CSS changing.
 *
 * Out of flow, the aspect-ratio above is the only thing that decides the
 * height, whatever dimensions the catalogue serves next.
 */
.hz-lcard__img {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* A listing with no photograph says so, in the same words and the same grey as
   the search results card, rather than showing the browser's broken-image mark. */
.hz-lcard__img--none {
    display: grid;
    place-items: center;
    padding: 16px;
    background: #eef0f3;
    color: #5f6673;
    font-size: 13px;
    text-align: center;
}

.hz-lcard__badge {
    position: absolute;
    top: 10px;
    inset-inline-start: 10px;
    padding: 4px 8px;
    border-radius: 4px;
    color: #ffffff;
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    line-height: 1.3;
}

.hz-lcard__badge--sale {
    background: #2c7a55;
}

.hz-lcard__badge--rent {
    background: #2560b4;
}

/*
 * Inert by construction, matching the hero filter chips: a span with no click
 * target and no tab stop. Present so the card anatomy reads correctly.
 */
.hz-lcard__fav {
    position: absolute;
    top: 9px;
    inset-inline-end: 9px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 29px;
    height: 29px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.94);
    color: #6a7180;
    box-shadow: 0 1px 4px rgba(16, 20, 28, 0.16);
    cursor: not-allowed;
}

.hz-lcard__fav svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-lcard__body {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    padding: 13px 14px 15px;
}

.hz-lcard__title {
    margin: 0 0 6px;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.35;
}

.hz-lcard__title a {
    color: var(--hz-ink);
    text-decoration: none;
}

.hz-lcard__title a:hover {
    color: var(--hagzi-primary);
}

.hz-lcard__loc {
    display: flex;
    align-items: center;
    gap: 5px;
    margin: 0 0 11px;
    color: #5b6577;
    font-size: 12px;
}

.hz-lcard__loc svg {
    flex: 0 0 auto;
    width: 13px;
    height: 13px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-lcard__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 13px;
    margin: 0 0 12px;
    padding: 0;
    list-style: none;
}

.hz-lcard__meta li {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    color: #5c6270;
    font-size: 12px;
    white-space: nowrap;
}

.hz-lcard__meta svg {
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.5;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-lcard__price {
    display: flex;
    align-items: baseline;
    gap: 5px;
    /* Pushed to the bottom so prices align across cards of unequal title length. */
    margin: auto 0 0;
}

.hz-lcard__price strong {
    color: var(--hz-ink);
    font-size: 16px;
    font-weight: 700;
    letter-spacing: -0.2px;
}

.hz-lcard__price span {
    color: #5b6577;
    font-size: 11px;
    font-weight: 500;
}

/* --------------------------------------------------------- value props ---- */

.hz-why__head {
    margin-bottom: 16px;
    font-size: 20px;
    font-weight: 700;
}

.hz-why {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 26px;
    margin: 0;
    padding: 22px 0 0;
    border-top: 1px solid var(--hz-line);
    list-style: none;
}

/*
 * Icon beside the label, not above it: that is what the mockup shows, even
 * though the written brief said "above".
 */
.hz-why__item {
    display: flex;
    align-items: flex-start;
    gap: 13px;
}

.hz-why__icon {
    flex: 0 0 auto;
    width: 26px;
    height: 26px;
    margin-top: 1px;
    color: var(--hz-nav);
    fill: none;
    stroke: currentColor;
    stroke-width: 1.4;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-why__title {
    margin: 0 0 4px;
    color: var(--hz-ink);
    font-size: 13.5px;
    font-weight: 700;
}

.hz-why__text {
    margin: 0;
    max-width: 21ch;
    color: #5b6577;
    font-size: 12.5px;
    line-height: 1.55;
}

/*
 * Focus rings for the new controls. The shared ring near the top of this file
 * is white, for the header and the hero; everything in these sections sits on
 * white, so it needs its own.
 */
.hz-seeall:focus-visible,
.hz-lcard__title a:focus-visible,
.hz-areas__nav:focus-visible,
.hz-areas__dot:focus-visible {
    outline: 3px solid var(--hagzi-primary);
    outline-offset: 2px;
    border-radius: 6px;
}

/* ------------------------------------------- responsive (new sections) ---- */

/*
 * Four columns only hold up while the shell is wide. Below that the row steps
 * down 4 -> 3 -> 2 and then becomes a scroller at 720, which keeps the card
 * between roughly 270px and 400px the whole way rather than jumping straight
 * from four columns to two and doubling the card width in one step.
 *
 * These reset the count modifiers as well as the base: a two-card row capped to
 * the four-column width is right at 1440 and far too narrow once the grid
 * itself is down to two tracks. Same specificity as the modifiers, and later in
 * the file, so source order decides.
 */
@media (max-width: 1080px) {
    .hz-listings,
    .hz-listings--1,
    .hz-listings--2,
    .hz-listings--3 {
        grid-template-columns: repeat(3, minmax(0, 1fr));
        max-width: none;
    }

    .hz-listings--1 {
        grid-template-columns: minmax(0, 1fr);
        max-width: calc((100% - 44px) / 3);
    }

    .hz-listings--2 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        max-width: calc((100% - 44px) / 3 * 2 + 22px);
    }
}

@media (max-width: 860px) {
    .hz-listings,
    .hz-listings--1,
    .hz-listings--2,
    .hz-listings--3 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        max-width: none;
    }

    .hz-listings--1 {
        grid-template-columns: minmax(0, 1fr);
        max-width: calc((100% - 22px) / 2);
    }
}

@media (max-width: 720px) {
    /* The row keeps scrolling at every width, so the card only needs to shrink
       enough to keep more than one in view. */
    .hz-areas__track {
        gap: 14px;
    }

    .hz-areas__track > li {
        width: 204px;
    }

    .hz-area__media {
        height: 132px;
    }

    .hz-areas-section .hz-sec__head {
        align-items: flex-start;
        margin-bottom: 20px;
    }

    .hz-areas-section .hz-sec__title--sm {
        font-size: 24px;
    }

    .hz-areas__subtitle {
        margin-top: 4px;
        font-size: 13px;
    }

    .hz-areas-section .hz-seeall {
        padding-top: 4px;
        font-size: 12.5px;
    }

    .hz-sec {
        padding-top: 34px;
    }

    .hz-sec__title {
        font-size: 20px;
    }

    /*
     * Without this the small variant is left on its 17px base while the full
     * size steps down to 20px, so a --sm heading ends up LARGER on a phone
     * than on a desktop and the same size as the section titles it is meant
     * to sit below. The hierarchy inverted. Stepping 17 -> 16 keeps it in
     * proportion with the 24 -> 20 above. .hz-why__head follows and keeps its
     * own 18px, so that heading is unaffected.
     */
    .hz-sec__title--sm {
        font-size: 16px;
    }

    .hz-why__head {
        font-size: 18px;
    }

    /*
     * Cards become a snap-scrolling row. No arrow buttons: moving them needs
     * script, and a decorative arrow that does nothing is worse than none.
     * Bleeds to the viewport edges so the partial card reads as scrollable.
     */
    .hz-listings,
    .hz-listings--1,
    .hz-listings--2,
    .hz-listings--3 {
        display: flex;
        /* Cleared here too: a capped short row would otherwise keep its cap as
           a flex container and squeeze the scroller into part of the width. */
        max-width: none;
        gap: 14px;
        margin-right: -24px;
        margin-left: -24px;
        padding: 4px 24px;
        overflow-x: auto;
        scroll-snap-type: x mandatory;
        scrollbar-width: none;
        /*
         * Required, not cosmetic. Without it Chrome still counts this
         * scroller's 1157px of content toward the document scroll width, even
         * though every ancestor up to <main> measures 390 and overflow-x:hidden
         * does not suppress it. The result was a 962px document at a 390px
         * viewport, which made mobile Chrome shrink-to-fit the whole page.
         * Paint containment stops the overflow escaping; scrolling is
         * unaffected.
         */
        contain: paint;
    }

    .hz-listings::-webkit-scrollbar {
        display: none;
    }

    .hz-listings > li {
        flex: 0 0 78%;
        scroll-snap-align: start;
    }

    .hz-why {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 22px;
    }

    .hz-why__text {
        max-width: none;
    }
}

@media (max-width: 520px) {
    .hz-areas__track {
        gap: 12px;
    }

    .hz-areas__track > li {
        width: 184px;
    }

    .hz-area__name {
        font-size: 15px;
    }

    .hz-area__media {
        height: 120px;
    }

    .hz-area__body {
        min-height: 112px;
        padding: 11px 2px 0;
    }

    .hz-area__actions {
        gap: 12px;
        margin-top: 12px;
    }

    .hz-area__action {
        font-size: 14px;
    }

    .hz-why {
        grid-template-columns: minmax(0, 1fr);
        gap: 18px;
    }
}

/* =========================================================== new projects ===
 *
 * Off-plan project grid. Full-bleed photograph per card with every piece of
 * copy overlaid at the bottom over a scrim, which is what makes this section
 * look different from .hz-lcard above (photo on top, copy on white below).
 *
 * This block is appended after the existing responsive rules on purpose, so
 * its own media queries below can override the shared .hz-sec__title sizes
 * without a specificity bump.
 * ========================================================================= */

.hz-np__title {
    font-size: 28px;
}

.hz-np__sub {
    margin: 7px 0 0;
    color: #6b7280;
    font-size: 14px;
    line-height: 1.5;
}

/*
 * City strip. Wraps rather than scrolls sideways: a horizontal scroller here
 * would put a second overflow container on the page for the sake of four
 * short words, and .hz-listings already showed how easily that leaks into the
 * document scroll width.
 */
.hz-np__tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 26px;
    margin: 18px 0 22px;
    padding: 0;
    border-bottom: 1px solid var(--hz-line);
    list-style: none;
}

.hz-np__tab {
    display: inline-block;
    /* Pulls the 2px indicator down onto the strip's own hairline. */
    margin-bottom: -1px;
    padding: 0 1px 9px;
    border-bottom: 2px solid transparent;
    font-size: 13.5px;
    font-weight: 500;
}

/*
 * The selected city. This is the same device as the tab strip in "Explore
 * more" lower down the page -- a 2px underline plus the accent on the label --
 * and it carried the same stale red for the same reason: both were written
 * against --hz-red and neither was moved when the channel took the purple.
 * They now read the same token, so the two strips cannot drift apart again.
 */
.hz-np__tab--on {
    border-bottom-color: var(--hagzi-primary);
    color: var(--hagzi-primary);
    font-weight: 600;
}

/* Inert, like the hero filter chips: there is no city filter to run yet. */
.hz-np__tab--off {
    color: #9aa1ad;
    cursor: default;
}

.hz-np {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 22px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.hz-np__card {
    position: relative;
    display: flex;
    /* Copy sits on the floor of the card, photo fills whatever is left. */
    flex-direction: column;
    justify-content: flex-end;
    height: 100%;
    /*
     * min-height rather than aspect-ratio: only some cards carry a specs row,
     * so the copy block varies in height, and a fixed ratio would clip it in
     * a narrow column. This lets the card grow past the ratio if it must.
     */
    min-height: 408px;
    padding: 14px;
    border-radius: 12px;
    /* Holds the negative z-index layers below inside this card. */
    isolation: isolate;
    /* Shows through until the lazy photograph arrives; keeps text legible. */
    background: #2a2f38;
    overflow: hidden;
}

/*
 * Photo and scrim ride negative z-indexes instead of the copy riding a
 * positive one, so every text node below stays at auto and no stacking
 * order has to be maintained as the card's contents change.
 */
.hz-np__img {
    position: absolute;
    inset: 0;
    z-index: -2;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/*
 * Stop positions are set from measured contrast, not by eye. With the middle
 * stop at 0.54 the location line on the golden-hour tower photograph came out
 * at 3.1:1 against a (139,131,117) background, below the 4.5:1 that 11.5px
 * text needs. Raising the 58% stop to 0.68 is what clears it; a lighter scrim
 * with more opaque text does not, because the bright photo is the constraint
 * rather than the text alpha.
 */
.hz-np__scrim {
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(
        to bottom,
        rgba(10, 13, 18, 0.46) 0%,
        rgba(10, 13, 18, 0.10) 26%,
        rgba(10, 13, 18, 0.68) 58%,
        rgba(10, 13, 18, 0.94) 100%
    );
}

.hz-np__flags {
    position: absolute;
    top: 12px;
    inset-inline-start: 12px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 5px;
}

.hz-np__flag,
.hz-np__plan {
    padding: 3px 8px;
    border-radius: 4px;
    background: rgba(12, 16, 22, 0.74);
    color: #ffffff;
    font-size: 10.5px;
    font-weight: 600;
    line-height: 1.55;
    letter-spacing: 0.1px;
}

.hz-np__body {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

/*
 * Deliberately a text chip, not an image. These developers are invented for
 * the demo, so there is no logo to show, and a set-in-caps name is honest
 * about that where a fabricated wordmark would not be.
 *
 * A span rather than an anchor since the cards became clickable: there is no
 * developer page, and as an anchor it was a dead spot in the card's hit area.
 * cursor: default so it does not read as a control, matching the locale
 * indicator and the header's favourite and notification marks.
 */
.hz-np__dev {
    display: inline-block;
    cursor: default;
    max-width: 100%;
    margin-bottom: 9px;
    padding: 5px 9px;
    border-radius: 3px;
    background: #ffffff;
    color: #1b1f27;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.4px;
    text-decoration: none;
    text-transform: uppercase;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.hz-np__name {
    margin: 0;
    font-size: 17px;
    font-weight: 700;
    line-height: 1.25;
    letter-spacing: -0.2px;
}

.hz-np__name a {
    color: #ffffff;
    text-decoration: none;
}

.hz-np__name a:hover {
    text-decoration: underline;
}

/*
 * Whole-card click target.
 *
 * Now that the project pages exist, the name being the only hit area is a
 * 17px line on a 408px card. This stretches the name's own anchor over the
 * card with a transparent ::after, which is the one approach that adds no
 * nested anchor, no second tab stop and no script — worth insisting on here,
 * because anything scripted would be lost to the Vue remount on #app.
 *
 * Only applied via --linked, set in the template when the record has a url. An
 * unconditional rule would turn a url-less card into one big link to '#'.
 *
 * The card is already `position: relative` with `isolation: isolate`, and the
 * photo and scrim ride z-index -2 and -1, so the overlay needs no z-index of
 * its own: as a positioned box it paints above the in-flow copy while staying
 * below nothing that matters.
 *
 * Known trade-off: an overlay like this makes text inside the card hard to
 * select by dragging. Accepted — there is nothing here anyone needs to copy,
 * and the alternative of duplicating the link around the whole card would give
 * screen readers the card's entire contents as one link name.
 */
.hz-np__card--linked .hz-np__name a::after {
    content: '';
    position: absolute;
    inset: 0;
    /* No background: purely a hit area. */
}

/* The affordance has to match the target, or only the name looks clickable. */
.hz-np__card--linked:hover .hz-np__name a {
    text-decoration: underline;
}

/*
 * The one genuinely interactive thing inside the card has to stay above the
 * overlay or the card link would eat it. Positioned with a z-index so it wins
 * against the overlay's painting order regardless of DOM position.
 *
 * .hz-np__dev is deliberately NOT lifted: it is an inert span now, so letting
 * the card link cover it is the point.
 */
.hz-np__card--linked .hz-np__wa {
    position: relative;
    z-index: 1;
}

.hz-np__loc {
    margin: 4px 0 0;
    color: rgba(255, 255, 255, 0.88);
    font-size: 11.5px;
    line-height: 1.4;
}

.hz-np__specs {
    display: flex;
    align-items: center;
    margin: 8px 0 0;
    padding: 0;
    color: rgba(255, 255, 255, 0.9);
    font-size: 11.5px;
    list-style: none;
}

.hz-np__specs li {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}

.hz-np__specs li + li {
    margin-inline-start: 10px;
    padding-inline-start: 10px;
    border-inline-start: 1px solid rgba(255, 255, 255, 0.34);
}

.hz-np__specs svg {
    width: 14px;
    height: 14px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hz-np__pricelabel {
    margin: 12px 0 0;
    color: rgba(255, 255, 255, 0.86);
    font-size: 10.5px;
}

.hz-np__price {
    display: flex;
    align-items: baseline;
    gap: 5px;
    margin: 2px 0 0;
    color: #ffffff;
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.3px;
}

.hz-np__price span {
    font-size: 14px;
    font-weight: 600;
}

.hz-np__plan {
    margin-top: 9px;
}

.hz-np__wa {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    width: 100%;
    margin-top: 12px;
    padding: 9px 12px;
    border-radius: 6px;
    background: #ffffff;
    color: #1b1f27;
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: none;
    transition: background-color 0.15s ease;
}

.hz-np__wa:hover {
    background: #eef0f4;
}

.hz-np__wa svg {
    flex: 0 0 auto;
    width: 16px;
    height: 16px;
}

.hz-np__wa-bubble {
    fill: #25d366;
}

.hz-np__wa-phone {
    fill: #ffffff;
}

/*
 * Everything in this section sits on a dark photo, so the ring is white.
 *
 * .hz-np__dev is no longer listed: it is an inert span with no tabindex, so it
 * cannot take focus and the selector would never match. The ring stays on the
 * name — the card's link — rather than being stretched around the whole card,
 * so a keyboard user sees which card is focused without a 408px outline.
 */
.hz-np__name a:focus-visible,
.hz-np__wa:focus-visible {
    outline: 3px solid #ffffff;
    outline-offset: 2px;
    border-radius: 6px;
}

@media (max-width: 1080px) {
    .hz-np {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 720px) {
    .hz-np__title {
        font-size: 22px;
    }

    .hz-np__sub {
        font-size: 13.5px;
    }
}

/*
 * Two columns are held all the way down to 620 rather than dropping to one at
 * the usual 720. At 720 a single card would be 672px wide against a 408px
 * floor, a letterbox that crops the photograph hard and strands the copy in
 * one corner. Below 620 two columns would be under 280px each, too narrow for
 * a 20px price and a full-width button, so that is where it stacks.
 */
@media (max-width: 620px) {
    .hz-np {
        grid-template-columns: minmax(0, 1fr);
        gap: 16px;
    }

    .hz-np__card {
        min-height: 400px;
    }
}

/* Let the existing listing-title link open from anywhere on a home listing
   card. The favorite remains a separate control above the link overlay. */
.hz-lcard {
    position: relative;
    isolation: isolate;
}

.hz-lcard__title a::after {
    position: absolute;
    z-index: 1;
    inset: 0;
    border-radius: 12px;
    content: '';
    cursor: pointer;
}

.hz-lcard__fav {
    z-index: 2;
}

/*
 * HGZ-015: muted text and date-picker contrast.
 *
 * Muted copy on this channel (.hz-chip__legend, .hz-chip__num,
 * .hz-lcard__loc, .hz-lcard__price span, .hz-why__text, .hzloc__heading)
 * moved from #8b929f (3.13:1 on white) to #5b6577 (5.88:1 on white), which
 * clears WCAG AA for small text. .hz-search__icon keeps #8b929f: it is a
 * decorative, aria-hidden glyph and 3.13:1 already meets the 3:1 non-text
 * threshold.
 *
 * flatpickr's stock selected/today-hover fill is #569ff7 with white text
 * (2.73:1). #2563eb with white text is 5.17:1.
 */
.flatpickr-day.today:hover,
.flatpickr-day.today:focus,
.flatpickr-day.selected,
.flatpickr-day.selected:hover,
.flatpickr-day.selected:focus,
.flatpickr-day.startRange,
.flatpickr-day.endRange {
    border-color: #2563eb;
    background: #2563eb;
    color: #ffffff;
}

/* themes/property/property-pages.css */
/*
 * Hagzi property channel — search-results and listing-detail page styles.
 *
 * SEPARATE FILE ON PURPOSE. property.css was being edited by another session
 * while these pages were built, so nothing here was added to that file. This
 * one is loaded by a single <link> in
 * resources/themes/property/views/components/layouts/footer/styles.blade.php,
 * immediately after property.css, using the same filemtime cache-buster.
 *
 * Plain CSS served straight out of public/, deliberately outside the Vite
 * pipeline. The Shop package's vite config carries emptyOutDir: true and the
 * live cars bundle in public/themes/shop/default/build cannot be regenerated,
 * so no file in this theme may ever require an asset build. Nothing here does.
 *
 * SCOPING CONTRACT — this stylesheet loads on EVERY page of the property
 * channel, including the homepage, which another session owns. Therefore:
 *   - every selector begins with .hzp-, or is a descendant of .hzp-page;
 *   - there are no bare element selectors, no :root block and no overrides of
 *     any .hz-* class.
 * The homepage's rendered HTML must be unchanged by this file's presence.
 *
 * Colour: the channel's primary #0745D9 for accents, black for headings, mid
 * grey for secondary text, light neutral greys for borders and fills.
 *
 * THIS PARAGRAPH USED TO SAY THE OPPOSITE, AND IS CORRECTED RATHER THAN QUIETLY
 * REPLACED. It read "Hagzi red for accents ... deliberately no purple — the
 * layout follows the Zoopla reference, the palette does not". That was true the
 * day it was written and was contradicted by this file's own last six hundred
 * lines from the day the purple landed. A header that states the wrong palette
 * with confidence is worse than no header, because it tells the next reader not
 * to check: two links in this theme's header and footer spent a redirect on
 * every click for months because a comment explained, correctly at the time,
 * why they should not.
 *
 * THE --hzp-red* NAMES ARE MISNOMERS. --hzp-red, --hzp-red-dark and
 * --hzp-red-tint all resolve to the accent, which is blue. They kept the old
 * names because renaming means editing thirty-four call sites in the most
 * contended stylesheet in this theme without changing one rendered pixel. If
 * you are reading one of those names and expecting red, this is where you are
 * meant to find out otherwise; the note on the declarations themselves says the
 * same thing.
 *
 * THE RED THAT IS STILL RED IS ELSEWHERE, and none of it is reachable from
 * here: --hz-red in property.css is the warning red, --hzf-red carries the
 * error and validation states on the Add Listing form, and --hzfav-saved
 * (#e11d48) is the crimson of a saved favourite.
 *
 * Tokens defer to property.css's --hagzi-* and --hz-* so the two files cannot
 * drift, and carry literal fallbacks so these pages still render if that file
 * changes.
 */

.hzp-page,
.hzo,
.hzs,
.hztd {
    /* ------------------------------------------------------------------
       THESE THREE ARE THE PRIMARY NOW. THE NAMES ARE KEPT ON PURPOSE.

       The block at the end of this file repainted the accent blue by
       overriding rules rather than by editing them, which left two sets of
       declarations: eighteen that a later rule already wins, and a dozen
       that nothing overrides and which were still painting #d92228 -- the
       filter checkboxes' accent-color, the search submit's focus ring, the
       feature and address and map-pin icon strokes, the range thumb's glow,
       and the rail arrow's hover border. Redefining here fixes all of them
       at once and leaves the eighteen dead ones agreeing with the override
       instead of contradicting it, so removing an override later cannot
       bring the red back.

       Renaming to --hzp-accent would read better and would mean editing
       thirty-four call sites in the most contended sheet in the theme, for
       no change in output. The names stay; this note is the apology.

       SAFE TO DO BECAUSE IT WAS CHECKED, NOT ASSUMED:
         - every remaining use is an accent. No error, validation or warning
           state reads any of these. The one thing that ever used the tint is
           .hzp-calc__out, the mortgage panel, and a later rule already gives
           it the blue wash;
         - nothing derives from them. --hzf-red, which DOES carry error states
           on the Add Listing form, is taken off --hz-red directly and is not
           reachable from here;
         - --hz-red itself is untouched and still means the warning red.

       Contrast improves everywhere the colour carries meaning, measured
       rather than assumed: white on the fill and the accent on white both go
       4.99:1 -> 7.34:1, and .hzp-calc__amount on its own panel is 6.60:1,
       which keeps it over AA for body text.
       ------------------------------------------------------------------ */
    --hzp-red: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    --hzp-red-dark: var(--hzp-accent-dark, var(--hagzi-primary-dark, #0638B0));
    --hzp-red-tint: var(--hzp-accent-wash, #EEF3FF);
    --hzp-ink: var(--hz-ink, #12141a);
    --hzp-body: #3c414c;
    --hzp-muted: #5f6673;
    --hzp-line: var(--hz-line, #e7e9ee);
    --hzp-line-strong: #d6dae1;
    --hzp-fill: #f4f5f7;
    --hzp-fill-soft: #fafbfc;
    --hzp-radius: 10px;
    --hzp-radius-sm: 6px;

    background: var(--hzp-fill);
    color: var(--hzp-ink);
    font-family: Roboto, sans-serif;
}

.hzp-page.hzp-serp,
.hzp-page.hzp-detail {
    background: #fff;
}

/*
    Every box in this namespace is border-box. Scoped to descendants of
    .hzp-page so it cannot reach the homepage or the shared header/footer.
*/
.hzp-page *,
.hzp-page *::before,
.hzp-page *::after {
    box-sizing: border-box;
}

/*
    Mirrors .hz-shell from property.css rather than referencing it, so these
    pages line up with the header and footer even if that class is renamed.
    Same 1200/24 at every width, on purpose: a different gutter here would
    visibly misalign the content edge against the header logo.
*/
.hzp-shell {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 24px;
}

/*
    Visually hidden, still announced.

    left/top are pinned rather than left to auto, and this is load-bearing:
    with auto offsets an absolutely positioned box sits at its static position
    and resolves against the nearest POSITIONED ancestor. Inside a horizontal
    scroller whose ancestors are all static, that containing block is the
    initial one — outside the scroller — so the scroller does not clip it and
    its static x extends the document. That is exactly what happened: the
    "bedrooms"/"bathrooms" spans inside the related-listing rails pushed
    documentElement.scrollWidth to 986px at a 390px viewport, a real 596px
    horizontal overflow, with nothing visible out of place.

    Pinning left/top removes the dependence on static position entirely, so
    these spans can never extend the document from inside any scroller.
*/
.hzp-sr {
    position: absolute;
    inset-inline-start: 0;
    top: 0;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    border: 0;
    white-space: nowrap;
    clip-path: inset(50%);
}

/*
    Shared look for the inert controls. These are <span>s, never buttons or
    links: no href, no tabindex, so they take no click and never land in the
    tab order as a dead end. aria-disabled + title carry the reason.
*/
.hzp-page [aria-disabled="true"] {
    cursor: not-allowed;
}

.hzp-page a:focus-visible,
.hzp-page button:focus-visible,
.hzp-page input:focus-visible,
.hzp-page summary:focus-visible {
    outline: 3px solid var(--hzp-red);
    outline-offset: 2px;
    border-radius: var(--hzp-radius-sm);
}

/*
    The red banner's three rules stood here — .hzp-demo-note, its icon and its
    strong — and are deleted with the markup, so nothing in this sheet is left
    addressing an element that no longer renders. A sweep across the property
    theme's views, stylesheets and scripts found no remaining reference to the
    class before they went.

    Nothing replaces them and no spacing was adjusted to compensate. The banner
    carried its own 18px bottom margin and sat alone in a .hzp-shell that went
    with it, so the gap it used to occupy closed on the section margins either
    side rather than needing a value of its own.

    The other notices on these pages keep their rules and their markup: the map
    caption, the location line, the agent line, the Safe & transparent card and
    the card partial's tooltips were restored after a scope correction, and the
    mortgage calculator's disclaimer — a financial one rather than a demo one —
    was never in scope.
*/

/* ==========================================================================
   FILTER BAR — search results page
   ========================================================================== */

/*
    Pinned to the top of the viewport while the results scroll under it.

    top: 0 rather than an offset, because the site header above it
    (header.hz-header, 69px) is position: static and scrolls away — measured in
    the browser, not assumed. So the two cannot overlap: at rest the bar sits
    below the header in flow, and by the time the bar is pinned the header has
    gone. Nothing between here and <html> sets an overflow or a transform, which
    was checked at the same time, because either would silently turn this back
    into position: static.

    z-index is modest on purpose. It has to sit over the cards and the aside; it
    does not need to fight the header, which is never on screen at the same time.
*/
.hzp-filterbar {
    position: sticky;
    top: 0;
    z-index: 20;
    border-bottom: 1px solid var(--hzp-line);
    background: #ffffff;
    /* Only visible once pinned, when there is content behind it to separate. */
    box-shadow: 0 6px 18px -14px rgba(18, 20, 26, 0.4);
}

/*
    One consistent gap everywhere, one control height everywhere, and the action
    buttons pushed to the far end behind a rule rather than crowded up against
    the last menu. Wrapping is allowed here for the narrow layouts; from 960px
    the bar is held to one line -- see "The filter bar at narrower widths".
*/
.hzp-fb {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 12px;
    padding-top: 12px;
    padding-bottom: 12px;
}

/*
    Explicit order on every child, because the visual order differs from the DOM
    order: the actions follow the controls on a wide screen and precede them on a
    narrow one, where the controls are folded away and the Filters button needs
    to stay beside the search box.
*/
.hzp-field--location {
    order: 1;
}

/*
    Grows to take the slack, rather than leaving it to an auto margin on the
    actions. That was the first attempt and it laid out wrongly: a wrapping flex
    container's base size is intrinsic, so the row kept 418px of its 489px of
    content, wrapped the price field onto a second line, and — because the bar is
    bottom-aligned — dropped the search box a line below the two menus beside it.
    Letting the row grow gives it 588px and it stays on one line.
*/
/*
    nowrap, so the row can never break its own line. The bar is bottom-aligned —
    the action buttons have no label above them and have to line up with the
    controls, not with the labels — and a wrapped row is therefore taller than
    the search box beside it, which drops the search box a line below the two
    menus. Shrinking a menu by a few pixels is a far smaller price than that, and
    with the widths below it does not come to that.

    Rewrapped deliberately in the narrow media query, where the row is a stacked
    panel and wrapping is the point.
*/
.hzp-fb__row {
    display: flex;
    flex: 1 1 auto;
    flex-wrap: nowrap;
    order: 2;
    align-items: flex-end;
    gap: 12px;
    min-width: 0;
}

/*
    The rule and the padding are what separate the actions from the controls,
    deliberately rather than incidentally. No auto margin: the row above absorbs
    the free space, which leaves these at the end of the bar anyway.
*/
.hzp-fb__actions {
    display: flex;
    order: 3;
    align-items: flex-end;
    gap: 10px;
    padding-inline-start: 16px;
    border-inline-start: 1px solid var(--hzp-line);
}

/*
    The Filters disclosure.

    A native <details> now, where it used to be a visually hidden checkbox and a
    <label>. The checkbox worked, and the reason for changing it is not that it
    did not: the panel is a floating dropdown rather than a block that pushes the
    results down, and a dropdown wants a control that owns an open/closed state
    the accessibility tree already understands. <summary> is that control, it is
    focusable and togglable from the keyboard without a line of script, and --
    the part that actually decided it -- the browser owns the state, so the Vue
    mount that wraps this whole page cannot discard it the way it discards a
    listener attached before it runs.

    position stays static so that the panel below resolves against .hzp-fb, which
    is the positioned ancestor and the box the panel should be measured from.
*/
.hzp-fb__more {
    position: static;
    /*
        In front of Clear, where the label used to be. The toggle is LAST in the
        markup because the panel has to be inside the <details> and the panel has
        to come after the row's other buttons in source order. Every other
        reordering on this bar is done the same way -- see the order values on
        .hzp-fb's children.
    */
    order: -1;
}

.hzp-fb__toggle {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
    /*
        The disclosure triangle, removed twice: `list-style` is what Firefox and
        current Chrome honour, the ::-webkit- pseudo is what older WebKit needs.
        Both are kept because the button carries its own icon and a triangle
        beside it reads as a second, broken one.
    */
    list-style: none;
}

.hzp-fb__toggle::-webkit-details-marker {
    display: none;
}

.hzp-fb__more[open] > .hzp-fb__toggle {
    border-color: var(--hzp-ink);
    background: var(--hzp-fill);
}

/* The summary carries the focus itself now, so it shows it itself. */
.hzp-fb__toggle:focus-visible {
    outline: 2px solid var(--hzp-ink);
    outline-offset: 2px;
}

/* How many filters are on. Written by script, so it starts hidden. */
.hzp-fb__count {
    display: inline-grid;
    place-items: center;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 9px;
    background: var(--hzp-red);
    color: #ffffff;
    font-size: 11.5px;
    font-weight: 700;
    line-height: 1;
}

/*
    The panel, floating.

    Absolute rather than in flow, and that is the whole change: in flow it grew
    the sticky bar, which pushed the results down the page and, once the bar was
    pinned, took a third of the viewport away from them for as long as it was
    open. Floating, it overlays the results and costs the bar nothing.

    Measured from .hzp-fb -- the form -- so `top: 100%` is the bar's own bottom
    edge whatever height the bar happens to be, which matters below 960px where
    the bar grows a second row. inset-inline-end rather than right, so it hangs
    from the Filters button in English and from the mirrored position in Arabic
    with no second rule; 24px is .hzp-shell's own padding, which is what lines it
    up with the content rather than with the shell's outer edge.

    The width is capped in two ways at once, and both are needed: 720px so it
    does not stretch across a wide screen, and 100vw minus twice the shell
    padding so it can never be the thing that gives the page a horizontal
    scrollbar.

    The height is capped on the panel and NOT on the form. It used to be capped
    on the form, below 720px, with overflow-y: auto -- which was correct while
    the panel was inside the form's flow and is exactly wrong now: an overflow on
    an ancestor clips an absolutely positioned descendant, so the bottom of this
    panel would have been cut off on a phone. The cap moved down here with it.
*/
/*
    A closed <details> does not paint its contents, but Chrome still generates
    boxes for out-of-flow descendants inside it -- the closed panel measures its
    full 720x560 through getBoundingClientRect while nothing appears on screen,
    and elementFromPoint over it returns the cards behind. Nothing is visible
    either way, so this rule changes no pixel; it is here because relying on a
    browser choosing not to paint boxes it has laid out is not a guarantee, and
    because phantom boxes make any element-versus-viewport audit report overflow
    that does not exist. [open] is set by the browser itself, so this costs
    nothing when script is off.
*/
.hzp-fb__more:not([open]) .hzp-fb__panel {
    display: none;
}

.hzp-fb__panel {
    position: absolute;
    top: calc(100% + 1px);
    inset-inline-end: 24px;
    z-index: 30;
    display: flex;
    flex-direction: column;
    width: min(720px, calc(100vw - 48px));
    max-height: min(600px, calc(100vh - 280px));
    border: 1px solid var(--hzp-line);
    border-radius: 12px;
    background: #ffffff;
    box-shadow: 0 18px 44px -18px rgba(18, 20, 26, 0.45);
}

/*
    Only the groups scroll. The submit at the foot stays reachable without
    scrolling to it, which is the point of putting it in the panel at all.
*/
.hzp-fb__panelbody {
    display: grid;
    gap: 0;
    overflow-y: auto;
    padding: 16px;
}

/* A fieldset, so the reset is fieldset-shaped. */
.hzp-fb__sec {
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
}

/*
    One separator, one number, every time: 13px of air, the hairline, 13px of
    air. It used to be the body's 18px grid gap plus this padding's 16px, which
    read as 34px above a rule sitting 16px off its own heading -- uneven by
    accident rather than by choice.
*/
.hzp-fb__sec + .hzp-fb__sec {
    margin-top: 13px;
    padding-top: 13px;
    border-top: 1px solid var(--hzp-line);
}

/*
    No letter-spacing and no uppercase, deliberately. Both are common on a label
    like this and both are wrong in Arabic: uppercase does nothing, and
    letter-spacing prises apart letters that are supposed to join.
*/
.hzp-fb__sectitle {
    margin: 0 0 7px;
    padding: 0;
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 700;
}

.hzp-fb__secgrid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 12px 16px;
}

/*
    Two roomy controls to a row. A menu of words and a pair of number boxes both
    want the room, and giving them the same footprint is what makes the two rows
    above the building section line up with each other.
*/
.hzp-fb__sec--pairs .hzp-fb__secgrid {
    grid-template-columns: repeat(auto-fit, minmax(216px, 1fr));
}

/*
    Four compact menus to a row. Floor, parking, tenure and the year are all one
    short value each, and at the old 190px minimum only three of the four fitted
    -- so the year dropped onto a row of its own, 122px wide beside three 213px
    siblings, with half the panel's width empty to the right of it. Four equal
    tracks put the whole group on one line and make the four the same size,
    which is what they are.
*/
.hzp-fb__sec--quads .hzp-fb__secgrid {
    grid-template-columns: repeat(auto-fit, minmax(146px, 1fr));
}

/* The amenities checklist is its own group and wants the full width. */
.hzp-fb__sec--wide .hzp-checks {
    margin-top: 6px;
}

/* More filters: the less-used groups, folded inside the panel until asked for. */
.hzp-fb__extra {
    min-width: 0;
    margin-top: 13px;
    padding-top: 13px;
    border-top: 1px solid var(--hzp-line);
}

.hzp-fb__extra-toggle {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 6px 0;
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 700;
    list-style: none;
    cursor: pointer;
}

.hzp-fb__extra-toggle::-webkit-details-marker {
    display: none;
}

.hzp-fb__extra-toggle svg {
    width: 18px;
    height: 18px;
    flex: none;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    transition: transform 0.15s ease;
}

.hzp-fb__extra[open] > .hzp-fb__extra-toggle svg {
    transform: rotate(180deg);
}

.hzp-fb__extra > .hzp-fb__sec:first-of-type {
    margin-top: 10px;
}

.hzp-fb__foot {
    display: flex;
    flex: none;
    align-items: center;
    gap: 10px;
    padding: 11px 16px;
    border-top: 1px solid var(--hzp-line);
    border-radius: 0 0 12px 12px;
    background: var(--hzp-fill);
}

/*
    margin rather than justify-content: space-between, because the quiet action
    beside it is conditional -- it renders only when there is something to clear.
    space-between would send the submit to the start of the bar on the panel a
    visitor sees most often, the one with nothing selected yet.
*/
.hzp-fb__show {
    margin-inline-start: auto;
    white-space: nowrap;
}

/*
    Quiet, because it undoes work rather than doing any, and it must not compete
    with the submit two inches away. Same height as the submit so the bar reads
    as one row of actions.
*/
.hzp-fb__reset {
    border-color: transparent;
    background: transparent;
    color: var(--hzp-body);
    font-weight: 500;
    text-decoration: underline;
    text-underline-offset: 3px;
    white-space: nowrap;
}

.hzp-fb__reset:hover {
    color: var(--hzp-ink);
}

/*
    Which label the submit shows. Default is the one WITHOUT a number, because
    the default is "no script has run", and without script a visitor can change
    four menus before pressing this -- so the count the server rendered would
    describe a state that is two selections old. With script, every control here
    navigates on change, no unsubmitted state can exist, and the number is
    exactly right.

    Keyed on .hzp-js, which the page's script puts on <html> as its first
    statement, so the swap happens before first paint.
*/
.hzp-fb__shownum {
    display: none;
}

html.hzp-js .hzp-fb__shownum {
    display: inline;
}

html.hzp-js .hzp-fb__showplain {
    display: none;
}

.hzp-fb__group {
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
}

.hzp-fb__hint {
    margin: 0;
    color: var(--hzp-muted);
    font-size: 12.5px;
}

.hzp-checks {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    /* Column gap matches .hzp-fb__secgrid, so the ticks share the menus' columns. */
    gap: 6px 16px;
    margin-top: 4px;
}

.hzp-check {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    padding: 2px 0;
    color: var(--hzp-body);
    font-size: 13.5px;
    line-height: 1.35;
    cursor: pointer;
}

.hzp-check input {
    flex: none;
    width: 15px;
    height: 15px;
    margin: 0;
    accent-color: var(--hzp-red);
}

.hzp-field {
    display: flex;
    flex-direction: column;
    gap: 5px;
    min-width: 0;
}

/*
    Grows into the space the row leaves, but capped: past about a third of the
    bar a single text field starts to look like the only thing on it, and the
    cap is what leaves room for the actions to sit at the far end rather than
    being pushed onto a second line.
*/
.hzp-field--location {
    flex: 1 1 240px;
    max-width: 300px;
    min-width: 0;
}

/*
    The widths are set so the whole bar still fits on one line in its widest
    state, which is with Clear showing: 300 + 477 + 318 + gaps = 1119 inside the
    1152px shell. Clear only appears once something is filtered, so sizing for
    the state without it is sizing for the state nobody stays in.
*/
.hzp-field--sm {
    flex: 0 1 128px;
}

.hzp-field--price {
    flex: 0 0 auto;
}

/*
    Both scripted states use the hidden attribute, which loses to the display
    value on .hzp-btn and the badge unless it is made to win. Scoped to this page
    rather than set globally.
*/
.hzp-serp [hidden] {
    display: none !important;
}

.hzp-field__label {
    color: var(--hzp-body);
    font-size: 12px;
    font-weight: 500;
    line-height: 1.2;
}

.hzp-input {
    position: relative;
    display: flex;
    align-items: center;
    height: 40px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: var(--hzp-radius-sm);
    background: #ffffff;
}

.hzp-input:focus-within {
    border-color: var(--hzp-ink);
}

.hzp-input__field {
    width: 100%;
    min-width: 0;
    height: 100%;
    padding: 0 34px;
    padding-inline-start: 12px;
    border: 0;
    border-radius: var(--hzp-radius-sm);
    background: transparent;
    color: var(--hzp-ink);
    font-family: inherit;
    font-size: 14px;
}

.hzp-input__field::placeholder {
    color: var(--hzp-muted);
}

/*
    A link back to the unfiltered page, rendered only when there is a term to
    clear. It used to be a type="reset" button, which restores the field's
    initial value — on /search?query=abdoun that value IS "abdoun", so the
    control did nothing in the one case where it looked like it should do
    something. Hence no :placeholder-shown rule here any more: the server decides
    whether it exists at all.
*/
.hzp-input__clear {
    position: absolute;
    inset-inline-end: 6px;
    display: grid;
    place-items: center;
    width: 26px;
    height: 26px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: var(--hzp-body);
    cursor: pointer;
}

.hzp-input__clear:hover {
    background: var(--hzp-fill);
}

.hzp-input__clear svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
}

/*
    The field's leading magnifier, which used to be a filled accent submit
    button and is now decoration.

    It is positioned rather than laid out, on purpose. As a flex item the old
    button occupied 32px plus its margins of the row, and the field was padded
    to 4px to sit beside it; taking it out of the flow instead lets the field be
    the full width of the box again and reclaim that space, which is the whole
    visible gain from the removal. The field is then padded to clear the icon,
    in the inline direction, so the same rule puts the icon on the left in
    English and on the right in Arabic with nothing locale-specific written
    here.

    pointer-events: none because the icon overlays the input's own padding: a
    click on it would otherwise land on the wrapper, which cannot take focus,
    and the field would not open. Passing the click through means the icon
    behaves like part of the field, which is what it looks like.
*/
.hzp-input--go .hzp-input__field {
    padding-inline-start: 36px;
}

.hzp-input__icon {
    position: absolute;
    inset-inline-start: 12px;
    width: 16px;
    height: 16px;
    color: var(--hzp-muted);
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    pointer-events: none;
}

/*
    The hidden submit takes the clip from .hzp-sr, which is on the element too.
    What is added here is a visible state for the one case where a clipped
    control is a defect rather than a convenience: a sighted visitor tabbing
    through the bar would otherwise land on a focused element they cannot see.

    So it un-clips on focus, into the slot the removed button used to fill —
    inline-start, which is free at both directions, unlike inline-end where the
    clear control sits. Opaque, so it covers the decorative icon while it is
    there rather than needing the icon hidden separately, and capped in width so
    a long translation cannot push it out of the field.

    :focus-visible only, so a click on the field never flashes it: the button is
    not what was clicked, but a mouse user has no need of it either way.
*/
.hzp-input__submit:focus-visible {
    inset-inline-start: 4px;
    top: 50%;
    width: auto;
    max-width: calc(100% - 8px);
    height: 32px;
    margin: -16px 0 0;
    padding: 0 10px;
    overflow: hidden;
    border-radius: var(--hzp-radius-sm);
    background: var(--hzp-accent, var(--hzp-red));
    color: #ffffff;
    font-family: inherit;
    font-size: 13px;
    white-space: nowrap;
    cursor: pointer;
    clip-path: none;
}

/*
    Now a wrapper around a real <select>. It was an inert span while nothing
    backed these menus; the attributes exist, so the control is the native one.
    Native means the mobile picker, keyboard type-ahead and form semantics all
    come free, and there is no custom menu to keep open across the Vue mount.

    appearance: none removes the platform arrow so the theme's chevron can sit
    where the reference puts it; the chevron takes pointer-events: none so the
    click still reaches the select underneath.
*/
.hzp-select {
    position: relative;
    display: flex;
    align-items: center;
    height: 40px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: var(--hzp-radius-sm);
    background: #ffffff;
}

.hzp-select:focus-within {
    border-color: var(--hzp-ink);
}

.hzp-select__el {
    width: 100%;
    min-width: 0;
    height: 100%;
    padding: 0 30px;
    padding-inline-start: 11px;
    border: 0;
    border-radius: var(--hzp-radius-sm);
    background: transparent;
    color: var(--hzp-ink);
    font-family: inherit;
    font-size: 14px;
    cursor: pointer;
    appearance: none;
}

.hzp-select svg {
    position: absolute;
    inset-inline-end: 9px;
    flex: none;
    width: 16px;
    height: 16px;
    fill: none;
    stroke: var(--hzp-body);
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
    pointer-events: none;
}

/*
    Inside the panel the grid owns the width. These three rules do not change any
    value or any name; they stop a fixed pixel width from leaving a third of a
    cell empty, and they are scoped to the panel so the price boxes on the bar --
    where 88px is deliberately the width of "145,000" -- are untouched.
*/
.hzp-fb__panel .hzp-range {
    gap: 8px;
}

.hzp-fb__panel .hzp-range__el {
    flex: 1 1 0;
    width: auto;
    min-width: 0;
}

.hzp-fb__panel .hzp-range__el--wide {
    width: 100%;
}

/* Price, as two numbers rather than a menu of bands. */
.hzp-range {
    display: flex;
    align-items: center;
    gap: 6px;
}

/* Wide enough for a sale bound such as "3,500,000". min-width: 0 stops a
   number input's min-content size from painting past the border. */
.hzp-field--price,
.hzp-range {
    min-width: 0;
    max-width: 100%;
}

.hzp-range__el {
    box-sizing: border-box;
    width: 8rem;
    min-width: 0;
    max-width: 100%;
    flex: 0 1 8rem;
    height: 40px;
    padding: 0 9px;
    overflow: hidden;
    text-overflow: ellipsis;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: var(--hzp-radius-sm);
    background: #ffffff;
    color: var(--hzp-ink);
    font-family: inherit;
    font-size: 14px;
}

.hzp-range__el--wide {
    width: 122px;
}

.hzp-range__el:focus {
    border-color: var(--hzp-ink);
    outline: none;
}

.hzp-range__el::placeholder {
    color: var(--hzp-muted);
}

.hzp-range__dash {
    color: var(--hzp-muted);
    font-size: 14px;
}

.hzp-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    height: 40px;
    padding: 0 16px;
    border: 1px solid var(--hzp-line-strong);
    border-radius: var(--hzp-radius-sm);
    background: #ffffff;
    color: var(--hzp-ink);
    font-family: inherit;
    font-size: 14px;
    font-weight: 500;
    white-space: nowrap;
}

.hzp-btn svg {
    flex: none;
    width: 16px;
    height: 16px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-btn--accent {
    border-color: var(--hzp-red);
    background: var(--hzp-red);
    color: #ffffff;
}

/*
    Stroke only. An earlier `fill: #ffffff` here filled every closed path in
    the icon, which turned the calendar glyph on "Request a viewing" into a
    solid white block. Every icon in this stylesheet is drawn as an outline,
    so the accent variant only needs to recolour the stroke.
*/
.hzp-btn--accent svg {
    fill: none;
    stroke: #ffffff;
}

.hzp-btn--wide {
    width: 100%;
}

/* Genuine controls get hover feedback; inert ones deliberately do not. */
a.hzp-btn:hover,
button.hzp-btn:hover {
    border-color: var(--hzp-ink);
}

a.hzp-btn--accent:hover,
button.hzp-btn--accent:hover {
    border-color: var(--hzp-red-dark);
    background: var(--hzp-red-dark);
}

/* --------------------------------------------------------- secondary row --- */

.hzp-subbar {
    border-bottom: 1px solid var(--hzp-line);
    background: #ffffff;
}

.hzp-subbar__inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 22px;
    min-height: 44px;
    padding-top: 8px;
    padding-bottom: 8px;
}

.hzp-subbar__item {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--hzp-ink);
    font-size: 14px;
    font-weight: 500;
}

.hzp-subbar__item span {
    text-decoration: underline;
    text-underline-offset: 3px;
}

.hzp-subbar__item svg {
    flex: none;
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linejoin: round;
}

/* ==========================================================================
   RESULTS COLUMN + SIDEBAR
   ========================================================================== */

.hzp-serp__grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 300px);
    grid-template-areas:
        "heading ."
        "results side";
    align-items: start;
    gap: 16px 24px;
    padding-top: 22px;
    padding-bottom: 48px;
}

.hzp-results {
    min-width: 0;
}

.hzp-serp__grid > .hzp-results {
    display: contents;
}

.hzp-serp__grid .hzp-results__top {
    grid-area: heading;
    min-width: 0;
}

.hzp-serp__grid .hzp-results__body {
    grid-area: results;
    min-width: 0;
}

.hzp-serp__grid > .hzp-side {
    grid-area: side;
}

.hzp-results__head {
    display: grid;
    grid-template-columns: minmax(0, 1fr) max-content;
    align-items: center;
    gap: 14px;
    margin-bottom: 0;
}

.hzp-results__heading-copy {
    grid-column: 1 / -1;
    min-width: 0;
}

.hzp-results__head > .hzp-sort {
    grid-column: 1;
    justify-self: start;
}

.hzp-results__head > .hzp-view-switch {
    grid-column: 2;
    justify-self: end;
}

/*
    Sort on the inline start. Copy link and the list/grid switch share the
    inline end, one row. The copy control still copies the current address.
*/
.hzp-results__head > .hzp-results__tools {
    grid-column: 2;
    justify-self: end;
    align-self: center;
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    min-inline-size: 0;
    max-inline-size: 100%;
}

.hzp-results__tools > .hz-copy {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
    margin-block-start: 0;
    inline-size: auto;
    max-inline-size: max-content;
    min-inline-size: 0;
    flex: 0 0 auto;
}

.hzp-results__tools > .hz-copy .hz-copy__btn {
    inline-size: auto;
    max-inline-size: 100%;
    white-space: nowrap;
}

.hzp-results__tools > .hz-copy .hz-copy__status,
.hzp-results__tools > .hz-copy .hz-copy__note {
    max-inline-size: 14rem;
}

.hzp-results__tools > .hz-copy .hz-copy__fallback {
    position: absolute;
    z-index: 3;
    inset-inline-end: 0;
    inset-block-start: calc(100% + 6px);
    inline-size: min(20rem, calc(100vw - 48px));
    max-inline-size: calc(100vw - 48px);
}

.hzp-results__tools > .hzp-view-switch {
    inline-size: max-content;
    min-inline-size: 0;
    flex: 0 0 auto;
}

.hzp-results__breadcrumbs .hzp-crumbs {
    padding: 0 0 14px;
    gap: 8px;
    font-size: 13px;
}

.hzp-results__breadcrumbs .hzp-crumbs a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    text-decoration: none;
}

.hzp-results__breadcrumbs svg {
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-results__breadcrumbs .hzp-crumbs li + li::before {
    content: "";
    width: 6px;
    height: 6px;
    margin-inline: 4px;
    border-top: 1.5px solid currentColor;
    border-inline-end: 1.5px solid currentColor;
    transform: rotate(45deg);
    flex-shrink: 0;
}

[dir="rtl"] .hzp-results__breadcrumbs .hzp-crumbs li + li::before {
    transform: rotate(-45deg);
}

.hzp-results__title {
    margin: 0;
    color: var(--hzp-ink);
    font-size: clamp(24px, 2vw, 30px);
    font-weight: 700;
    line-height: 1.2;
}

.hzp-results__count {
    margin: 4px 0 0;
    color: var(--hzp-muted);
    font-size: 13px;
}

.hzp-sort {
    display: inline-flex;
    align-items: center;
    margin-inline-start: 0;
    color: var(--hzp-ink);
    font-size: 14px;
}

.hzp-sort__label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.hzp-sort__control {
    position: relative;
    display: inline-flex;
    align-items: center;
    min-width: 164px;
    min-height: 46px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: 12px;
    background: #ffffff;
}

.hzp-sort__control:focus-within {
    border-color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    box-shadow: 0 0 0 3px rgba(7, 69, 217, 0.12);
}

.hzp-sort__el {
    width: 100%;
    max-width: 100%;
    min-height: 44px;
    padding: 8px 38px;
    border: 0;
    background: transparent;
    color: var(--hzp-ink);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    appearance: none;
}

.hzp-sort__control svg {
    position: absolute;
    pointer-events: none;
}

.hzp-sort svg {
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
}

.hzp-sort__control .hzp-sort__icon {
    inset-inline-start: 12px;
    width: 20px;
    height: 20px;
}

.hzp-sort__control .hzp-sort__chevron {
    inset-inline-end: 10px;
    width: 18px;
    height: 18px;
}

/*
    How many listings a filter set aside for recording nothing. It sits directly
    under the count and qualifies it, so it is the count's own colour and size
    rather than a warning: nothing has gone wrong, the catalogue is simply
    incomplete and the page is saying so.
*/
.hzp-results__absent {
    margin: 4px 0 0;
    color: var(--hzp-muted);
    font-size: 12.5px;
    line-height: 1.55;
}

.hzp-cards {
    display: grid;
    gap: 16px;
    margin: 0;
    padding: 0;
    list-style: none;
}

/* Grid is a desktop choice; mobile always renders the list layout. */
@media (min-width: 768px) {
    .hzp-cards--grid {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    .hzp-cards--grid .hzp-card {
        grid-template-columns: minmax(0, 1fr);
        grid-template-rows: auto minmax(0, 1fr);
    }

    .hzp-cards--grid .hzp-card__media {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-cards--grid .hzp-card__thumbs,
    .hzp-cards--grid .hzp-card__desc {
        display: none;
    }

    .hzp-cards--grid .hzp-card__photo {
        min-height: 0;
        height: auto;
        max-height: none;
        aspect-ratio: 16 / 10;
    }
}

/* ------------------------------------------------------------ result card --- */

/* position: relative for the same containing-block reason as .hzp-mini. */
.hzp-card {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 300px) minmax(0, 1fr);
    overflow: hidden;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzp-card__media {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 64px;
    gap: 3px;
    background: var(--hzp-fill);
}

.hzp-card__photo {
    display: block;
    width: 100%;
    height: 100%;
    min-height: 196px;
    max-height: none;
    object-fit: cover;
}

/*
    A static preview strip, not a control: these thumbnails are images with alt
    text and no click target, because there is no lightbox behind them.
*/
.hzp-card__thumbs {
    display: grid;
    grid-template-rows: repeat(3, minmax(0, 1fr));
    gap: 3px;
    min-width: 0;
}

.hzp-card__thumb {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.hzp-badges {
    position: absolute;
    top: 10px;
    inset-inline-start: 10px;
    z-index: 2;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    max-width: calc(100% - 20px);
}

.hzp-badge {
    padding: 4px 9px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.01em;
    line-height: 1.35;
}

/*
    Status badges are ink, not red.

    A badge states what a listing IS — For Sale, For Rent, New, Featured — and
    a statement of fact is not something to click. Red is this theme's action
    colour, so a badge wearing it invites a press that does nothing. For Rent
    and Featured were already ink; this brings the other two into line rather
    than keeping a split that only ever reflected which tone was passed in.

    Written as one rule over both selectors, not two rules with identical
    bodies. The card template builds the class from listing data
    (hzp-badge--{{ tone }}), so --accent still has to resolve to something —
    but a second copy of the same declarations is exactly the sort of duplicate
    that drifts apart the next time somebody edits one of them.
*/
.hzp-badge--accent,
.hzp-badge--ink {
    background: var(--hzp-ink);
    color: #ffffff;
}

.hzp-badge--soft {
    background: #ffffff;
    color: var(--hzp-ink);
    box-shadow: 0 1px 3px rgba(18, 20, 26, 0.22);
}

/* Paid placement disclosure: light so it reads apart from the ink status badges over any photo. */
.hzp-badge--promoted {
    background: #ffffff;
    color: var(--hzp-ink);
    box-shadow: 0 1px 3px rgba(18, 20, 26, 0.22);
    white-space: nowrap;
}

.hzp-card__body {
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding: 14px 16px 12px;
}

.hzp-card__top {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
}

.hzp-price {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 23px;
    font-weight: 700;
    line-height: 1.2;
}

.hzp-price small {
    color: var(--hzp-muted);
    font-size: 14px;
    font-weight: 500;
}

/* Inert, like the homepage card heart: a span, so it takes no click. */
.hzp-fav {
    display: grid;
    flex: none;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: var(--hzp-body);
}

.hzp-fav svg {
    width: 21px;
    height: 21px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
}

.hzp-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    align-self: flex-start;
    margin-top: 7px;
    padding: 4px 10px;
    border-radius: 999px;
    background: var(--hzp-line);
    color: var(--hzp-ink);
    font-size: 12.5px;
    font-weight: 500;
}

.hzp-pill svg {
    width: 14px;
    height: 14px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
}

.hzp-specs {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px 8px;
    margin: 10px 0 0;
    padding: 0;
    color: var(--hzp-ink);
    font-size: 13.5px;
    list-style: none;
}

.hzp-specs li {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}

/*
    The separator trails its item rather than leading the next one.

    Identical while the row fits on one line -- the dot sits in the same place
    either way, 8px from the item on each side. The difference is what happens
    when the row wraps, which it now does at 390 for a listing whose type is a
    long word: as a leading ::before the dot was carried onto the second line
    and read as a stray bullet in front of it. Trailing, it stays at the end of
    the line it belongs to and reads as a continuation.

    This was always the behaviour; nothing was long enough to reach it until
    the property type joined the row.
*/
.hzp-specs li:not(:last-child)::after {
    content: "";
    display: inline-block;
    width: 3px;
    height: 3px;
    margin-inline-start: 3px;
    border-radius: 50%;
    background: var(--hzp-line-strong);
}

.hzp-card__addr {
    margin: 5px 0 0;
    color: var(--hzp-body);
    font-size: 13.5px;
    font-weight: 400;
    line-height: 1.45;
}

.hzp-card__addr a {
    color: inherit;
    text-decoration: none;
}

.hzp-card__addr a:hover {
    color: var(--hzp-red);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/*
    Two lines then ellipsis, matching the reference. -webkit-line-clamp is the
    only cross-browser way to clamp by line count and is supported everywhere
    this theme targets; max-height keeps the box honest if it is ignored.
*/
.hzp-card__desc {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    overflow: hidden;
    margin: 8px 0 0;
    max-height: 3.1em;
    color: var(--hzp-body);
    font-size: 13.5px;
    line-height: 1.55;
}

.hzp-card__listed {
    margin: 8px 0 0;
    color: var(--hzp-muted);
    font-size: 12.5px;
}

.hzp-ticks {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 18px;
    margin: 10px 0 0;
    padding: 0;
    list-style: none;
}

.hzp-ticks li {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--hzp-ink);
    font-size: 13px;
}

.hzp-ticks svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-card__foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 10px 16px;
    margin-top: auto;
    padding-top: 11px;
}

.hzp-agent {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

/*
    Initials tile rather than an agent logo image: these agencies are invented,
    so there is no real mark to show and none was generated.
*/
.hzp-agent__mark {
    display: grid;
    flex: none;
    place-items: center;
    width: 30px;
    height: 30px;
    border-radius: var(--hzp-radius-sm);
    background: var(--hzp-ink);
    color: #ffffff;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.02em;
}

.hzp-agent__name {
    overflow: hidden;
    color: var(--hzp-body);
    font-size: 12.5px;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/*
    The card's two contact actions, now buttons rather than underlined text.

    .hzp-contact and its span and svg rules stood here and drew the old pair:
    a 13.5px underlined label with a 16px glyph beside it, for two controls
    that did nothing. Both are real links now and take .hzp-btn, so the whole
    treatment came from the button the rest of the site already uses and there
    is nothing card-specific left to declare about their appearance.

    What is card-specific is the wrapping. The foot is a flex row that already
    wraps the agent name away at narrow widths; this lets the pair wrap within
    itself as a last resort, so a card narrower than the two buttons stacks
    them rather than pushing them past its own edge.
*/
.hzp-contacts {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}

/*
    Neither button shrinks below its label. .hzp-btn is nowrap, so without this
    a tight card would compress the boxes while the text kept its width and
    spilled out of them.
*/
.hzp-contacts__btn {
    flex: none;
}

/* ------------------------------------------------------------- sidebar --- */

.hzp-side {
    display: grid;
    gap: 16px;
    min-width: 0;
}

.hzp-side__card {
    padding: 16px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzp-side__actions {
    display: grid;
    gap: 10px;
}

/*
    Save this search, once it is saved.

    The heart fills and turns red. The label and the border stay exactly as the
    unsaved button drew them, and that is the deliberate half of this rule.

    Colouring the whole control was the first version and it was wrong. This is
    a full-width bordered button, and a full-width button whose border and text
    are both red is the shape every interface on earth uses for "delete this" —
    so the more red it carried, the more it read as a warning about the search
    rather than a confirmation of it. Red on the heart alone is unambiguous,
    because a filled red heart already means saved everywhere, and it leaves the
    button looking like a button.

    THE COLOUR

    Taken from --hzfav-saved, which is declared in property-favorites.css: that
    file loads on every page of this channel, and the favourite hearts on the
    cards, the listing page, the home page and the favourites grid are being
    moved onto the same variable. One declaration, so the two saved states on
    this channel cannot drift apart, and this file does not have to be edited
    again when the shade is tuned.

    The fallback is a crimson rather than the #d92228 already in use for the
    demo notices on the project pages. That one is the warning red, and
    borrowing it would say "problem" in a place that means "kept" -- the exact
    confusion the paragraph above is avoiding. This is pinker and further from a
    pure alert red, which is also the hue the convention actually uses. It is
    4.7:1 against the white panel, comfortably past the 3:1 that non-text
    graphics need.

    Colour is never the only carrier of the state: the glyph goes from outline
    to filled, the label changes from "Save this search" to "Search saved", and
    aria-pressed flips. Someone who cannot see the difference between crimson
    and grey still has all three.
*/
.hzp-savesearch--on svg {
    color: var(--hzfav-saved, #e11d48);
    fill: currentColor;
}

.hzp-side__links {
    display: grid;
    gap: 13px;
    margin: 18px 0 0;
    padding: 18px 0 0;
    border-top: 1px solid var(--hzp-line);
    list-style: none;
}

.hzp-side__links a {
    color: var(--hzp-ink);
    font-size: 13.5px;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.hzp-side__links a:hover {
    color: var(--hzp-red);
}

/* ------------------------------------------------ recommended searches --- */

.hzp-recommended {
    overflow: hidden;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzp-recommended__head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 16px;
    border-bottom: 1px solid var(--hzp-line);
}

.hzp-recommended__icon {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: #DCE7FF;
    color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
}

.hzp-recommended__icon svg {
    width: 22px;
    height: 22px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-recommended__title {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 17px;
    font-weight: 750;
    line-height: 1.25;
}

.hzp-recommended__hint {
    margin: 4px 0 0;
    color: var(--hzp-muted);
    font-size: 13px;
    line-height: 1.4;
}

.hzp-recommended__list {
    display: grid;
    gap: 9px;
    margin: 0;
    padding: 14px;
    list-style: none;
}

.hzp-recommended__link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    min-height: 52px;
    padding: 11px 12px;
    border: 1px solid #BCD0FB;
    border-radius: 11px;
    background: #ffffff;
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 650;
    line-height: 1.35;
    text-decoration: none;
    box-shadow: 0 2px 5px rgba(7, 69, 217, 0.08);
}

.hzp-recommended__link:hover {
    border-color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    background: #F7F9FF;
}

.hzp-recommended__link:focus-visible {
    outline: 2px solid var(--hzp-accent, var(--hagzi-primary, #0745D9));
    outline-offset: 2px;
}

.hzp-recommended__link svg {
    flex: none;
    width: 17px;
    height: 17px;
    color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

[dir="rtl"] .hzp-recommended__link svg {
    transform: scaleX(-1);
}

/*
    Promotional slot placeholder. Reserves the space the reference gives an ad
    without inventing an advertiser or a product claim.
*/


/* ==========================================================================
   LISTING DETAIL
   ========================================================================== */

.hzp-crumbs {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin: 0;
    padding: 14px 0;
    color: var(--hzp-muted);
    font-size: 12.5px;
    list-style: none;
}

.hzp-crumbs li {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.hzp-crumbs li + li::before {
    content: "/";
    color: var(--hzp-line-strong);
}

.hzp-crumbs a {
    color: var(--hzp-body);
    text-decoration: underline;
    text-underline-offset: 3px;
}

.hzp-crumbs a:hover {
    color: var(--hzp-red);
}

.hzp-crumbs [aria-current="page"] {
    color: var(--hzp-ink);
    font-weight: 500;
}

.hzp-dgrid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 330px);
    align-items: start;
    gap: 24px;
    padding-bottom: 40px;
}

.hzp-dmain {
    display: grid;
    gap: 16px;
    min-width: 0;
}

.hzp-dside {
    display: grid;
    gap: 16px;
    min-width: 0;
}

/* ----------------------------------------------------------- price block --- */

.hzp-panel {
    padding: 18px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

/* The gallery spans both columns; the sidebar starts beside the price. */
.hzp-detail .hzp-dgallery {
    grid-column: 1 / -1;
    min-width: 0;
}
.hzp-detail .hzp-dmain > .hzp-panel:first-child {
    padding-top: 0;
}

/* Open content sections, matching the project detail page layout. */
.hzp-detail .hzp-dmain {
    gap: 0;
}

.hzp-detail .hzp-dmain > .hzp-panel {
    padding: 30px 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
}

.hzp-detail .hzp-dmain > section.hzp-panel {
    border-top: 1px solid var(--hzp-line);
}

.hzp-detail .hzp-dmain > .hzp-panel > .hzp-panel__title {
    margin-bottom: 22px;
}

.hzp-panel__title {
    margin: 0 0 14px;
    color: var(--hzp-ink);
    font-size: 17px;
    font-weight: 700;
}

.hzp-dprice {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 10px;
}

.hzp-dprice__value {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 30px;
    font-weight: 700;
    line-height: 1.15;
}

.hzp-dprice__value small {
    color: var(--hzp-muted);
    font-size: 15px;
    font-weight: 500;
}

.hzp-dtitle {
    margin: 10px 0 0;
    color: var(--hzp-ink);
    font-size: 17px;
    font-weight: 600;
    line-height: 1.35;
}

.hzp-daddr {
    margin: 4px 0 0;
    color: var(--hzp-body);
    font-size: 14px;
}

.hzp-dspecs {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 22px;
    margin: 14px 0 0;
    padding: 14px 0 0;
    border-top: 1px solid var(--hzp-line);
    list-style: none;
}

.hzp-dspecs li {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: var(--hzp-ink);
    font-size: 14px;
    font-weight: 500;
}

.hzp-dspecs svg {
    flex: none;
    width: 19px;
    height: 19px;
    fill: none;
    stroke: var(--hzp-body);
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* --------------------------------------------------- about this property --- */

.hzp-features {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 9px 22px;
    margin: 0 0 16px;
    padding: 0;
    list-style: none;
}

.hzp-features li {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    color: var(--hzp-ink);
    font-size: 13.5px;
    line-height: 1.45;
}

.hzp-features svg {
    flex: none;
    width: 15px;
    height: 15px;
    margin-top: 2px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-prose p {
    margin: 0 0 10px;
    color: var(--hzp-body);
    font-size: 14px;
    line-height: 1.65;
}

.hzp-prose p:last-child {
    margin-bottom: 0;
}

/* ------------------------------------------------- mortgage illustration --- */

.hzp-calc {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 230px);
    gap: 18px;
    padding: 16px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: var(--hzp-fill-soft);
}

.hzp-calc__fields {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}

.hzp-calc__field {
    display: grid;
    gap: 5px;
    min-width: 0;
}

.hzp-calc__label {
    color: var(--hzp-muted);
    font-size: 11.5px;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

/*
    Static readouts, not inputs. The figures they show are the ones the monthly
    total was actually computed from, in PHP, at render time.
*/
.hzp-calc__value {
    display: flex;
    align-items: center;
    height: 38px;
    padding: 0 11px;
    overflow: hidden;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius-sm);
    background: #ffffff;
    color: var(--hzp-ink);
    font-size: 14px;
    font-weight: 500;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hzp-calc__out {
    display: grid;
    align-content: center;
    justify-items: center;
    gap: 3px;
    padding: 14px;
    border: 1px solid #f2d7d8;
    border-radius: var(--hzp-radius);
    background: var(--hzp-red-tint);
    text-align: center;
}

.hzp-calc__outlabel {
    color: #7a1d20;
    font-size: 12px;
    font-weight: 500;
}

.hzp-calc__amount {
    color: var(--hzp-red-dark);
    font-size: 25px;
    font-weight: 700;
    line-height: 1.15;
}

.hzp-note {
    margin: 12px 0 0;
    color: var(--hzp-muted);
    font-size: 11.5px;
    line-height: 1.55;
}

/* --------------------------------------------------------- location/map --- */

.hzp-detail .hzp-location__nearby {
    margin-top: 24px;
}


.hzp-detail .hzp-location__place {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 8px;
    font-weight: 600;
}

.hzp-detail .hzp-location__place svg {
    flex: none;
    width: 20px;
    height: 20px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 1.8;
    stroke-linejoin: round;
}

.hzp-map {
    position: relative;
    display: grid;
    place-items: center;
    min-height: 240px;
    overflow: hidden;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background:
        repeating-linear-gradient(0deg, #eceef1 0 1px, transparent 1px 42px),
        repeating-linear-gradient(90deg, #eceef1 0 1px, transparent 1px 42px),
        #f6f7f9;
}

.hzp-map__pin {
    display: grid;
    justify-items: center;
    gap: 6px;
    padding: 12px 16px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: rgba(255, 255, 255, 0.94);
    text-align: center;
}

.hzp-map__pin svg {
    width: 26px;
    height: 26px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 1.8;
    stroke-linejoin: round;
}

.hzp-map__label {
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 600;
}

.hzp-map__sub {
    color: var(--hzp-muted);
    font-size: 11.5px;
}

/* ----------------------------------------------------- more information --- */

.hzp-info {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0 26px;
    margin: 0;
}

.hzp-info__row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 14px;
    padding: 11px 0;
    border-bottom: 1px solid var(--hzp-line);
}

/* Only the final visible Property details row has no bottom divider. */
.hzp-detail .hzp-info > .hzp-info__row:last-child {
    border-bottom: 0;
}

@media (min-width: 768px) {
    .hzp-detail .hzp-info > .hzp-info__row:nth-last-child(2):nth-child(odd) {
        border-bottom: 0;
    }
}

.hzp-info__key {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    color: var(--hzp-body);
    font-size: 13.5px;
}

.hzp-info__key svg {
    flex: none;
    width: 16px;
    height: 16px;
    fill: none;
    stroke: var(--hzp-muted);
    stroke-width: 1.7;
    stroke-linejoin: round;
}

.hzp-info__val {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 600;
    text-align: end;
}

/* ------------------------------------------------------- agent contact --- */

.hzp-contactcard {
    position: sticky;
    top: 16px;
    padding: 16px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzp-contactcard__title {
    margin: 0 0 4px;
    color: var(--hzp-ink);
    font-size: 16px;
    font-weight: 700;
}

.hzp-contactcard__sub {
    margin: 0 0 14px;
    color: var(--hzp-muted);
    font-size: 12.5px;
    line-height: 1.5;
}

.hzp-contactcard__actions {
    display: grid;
    gap: 9px;
}

/*
    First thing in the seller card. The "Listed by" heading and the rule
    under it are not printed, so this row has no top border and no space
    above the avatar. The card's own padding is the inset.
*/
.hzp-agentrow {
    display: flex;
    align-items: center;
    gap: 11px;
}

.hzp-agentrow__mark {
    display: grid;
    flex: none;
    place-items: center;
    width: 44px;
    height: 44px;
    border-radius: var(--hzp-radius-sm);
    background: var(--hzp-ink);
    color: #ffffff;
    font-size: 14px;
    font-weight: 700;
}

.hzp-agentrow__name {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 600;
}

.hzp-agentrow__meta {
    margin: 2px 0 0;
    color: var(--hzp-muted);
    font-size: 12px;
}

/* --------------------------------------------------------- related rails --- */

.hzp-rail {
    padding-bottom: 34px;
}

.hzp-rail__title {
    margin: 0 0 12px;
    color: var(--hzp-ink);
    font-size: 17px;
    font-weight: 700;
}

/*
    Own scroll container, same reason as the gallery strip: fixed-width cards
    in a row must never be allowed to widen the document.
*/
.hzp-rail__track {
    display: flex;
    gap: 14px;
    margin: 0;
    padding: 2px 2px 10px;
    overflow-x: auto;
    scrollbar-width: thin;
    list-style: none;
}

/*
    position: relative is deliberate, not decoration. It makes this card the
    containing block for the visually hidden spans inside it, so they are
    clipped by this card's own overflow instead of resolving against the
    initial containing block and escaping the rail's scroller.
*/
.hzp-mini {
    position: relative;
    display: flex;
    flex: none;
    flex-direction: column;
    width: 214px;
    overflow: hidden;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzp-mini__img {
    display: block;
    width: 100%;
    height: 128px;
    object-fit: cover;
}

.hzp-mini__body {
    padding: 10px 12px 12px;
}

.hzp-mini__price {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 16px;
    font-weight: 700;
}

.hzp-mini__specs {
    display: flex;
    flex-wrap: wrap;
    gap: 3px 10px;
    margin: 6px 0 0;
    padding: 0;
    color: var(--hzp-body);
    font-size: 12.5px;
    list-style: none;
}

.hzp-mini__specs li {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.hzp-mini__specs svg {
    width: 14px;
    height: 14px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-mini__addr {
    margin: 6px 0 0;
    overflow: hidden;
    color: var(--hzp-muted);
    font-size: 12px;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hzp-mini__addr a {
    color: inherit;
    text-decoration: none;
}

.hzp-mini__addr a:hover {
    color: var(--hzp-red);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

/* Sidebar no longer fits beside the results column. */
@media (max-width: 1023.98px) {
    .hzp-serp__grid,
    .hzp-dgrid {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-serp__grid {
        grid-template-areas:
            "heading"
            "results"
            "side";
    }

    .hzp-contactcard {
        position: static;
    }
}

@media (max-width: 767.98px) {
    .hzp-card {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-card__media {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-card__photo {
        min-height: 0;
        max-height: none;
        aspect-ratio: 3 / 2;
    }

    /*
        The stacked thumbnail column becomes a three-across row under the photo
        rather than disappearing, so the card keeps the reference's gallery cue.
    */
    .hzp-card__thumbs {
        grid-template-rows: none;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        height: 62px;
    }

    .hzp-calc {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-features,
    .hzp-info {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-field--sm {
        flex: 1 1 calc(50% - 6px);
    }

    .hzp-results__head {
        align-items: flex-start;
        grid-template-columns: minmax(138px, 0.9fr) minmax(0, 1.5fr);
    }

    .hzp-results__heading-copy {
        grid-column: 1 / -1;
    }

    .hzp-results__head > .hzp-sort {
        grid-column: 1;
        justify-self: start;
    }

    .hzp-results__head > .hzp-view-switch {
        grid-column: 2;
        justify-self: stretch;
    }

    .hzp-sort {
        width: 100%;
        margin-inline-start: 0;
    }

    .hzp-sort__control {
        width: 100%;
        min-width: 0;
    }

    .hzp-dprice__value {
        font-size: 26px;
    }
}

@media (max-width: 479.98px) {
    .hzp-price {
        font-size: 21px;
    }

    .hzp-card__foot {
        align-items: flex-start;
        flex-direction: column;
    }

    .hzp-calc__fields {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-filterbar__inner {
        gap: 10px;
    }

    /* Filters and Save share the last row rather than each taking a full one. */
    .hzp-filterbar__tail {
        display: flex;
        flex: 1 1 100%;
        gap: 10px;
    }

    .hzp-filterbar__tail > * {
        flex: 1 1 0;
    }
}

@media (prefers-reduced-motion: reduce) {
    .hzp-page * {
        transition: none !important;
    }
}

/* ==========================================================================
   States a real result set has and a fixed mockup never did
   ==========================================================================

   Added when the search page stopped rendering six hard-coded cards and started
   rendering the channel's catalogue. A real listing can carry one photograph
   rather than a photograph plus a gallery strip, or no photograph at all, and a
   real search can match nothing.

   This section sits after the media queries on purpose. Every selector is
   either new, or a modifier whose declaration matches what the mobile query
   already sets for its base class, so nothing above is overridden at any width.
*/

/*
    One photograph and no strip. The card's media area is a two-column grid
    whose second track holds the thumbnails, so without this the 64px track
    would sit empty beside the photo on every current listing.
*/
.hzp-card__media--single {
    grid-template-columns: minmax(0, 1fr);
}

/* The photograph is a link now, so the largest thing on the card opens it. */
.hzp-card__medialink,
.hzp-mini__medialink {
    display: block;
    min-width: 0;
}

/*
    Stands in for a missing photograph. Deliberately not one of the theme's demo
    JPEGs: an invented interior against a real address is a claim about a real
    property, which is the whole thing this page is trying not to do.
*/
.hzp-card__photo--none {
    display: grid;
    place-items: center;
    padding: 16px;
    background: var(--hzp-fill);
    color: var(--hzp-muted);
    font-size: 13px;
    text-align: center;
}

/* The specification rows state an absence rather than printing digits. */
.hzp-specs--none {
    color: var(--hzp-muted);
    font-size: 13px;
}

.hzp-dspecs__none {
    color: var(--hzp-muted);
    font-weight: 400;
}

.hzp-empty {
    display: grid;
    justify-items: start;
    gap: 10px;
    padding: 32px 24px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: var(--hzp-fill-soft);
}

.hzp-empty svg {
    width: 28px;
    height: 28px;
    fill: none;
    stroke: var(--hzp-muted);
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-empty__title {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 19px;
    font-weight: 700;
    letter-spacing: -0.2px;
}

.hzp-empty__text {
    max-width: 62ch;
    margin: 0;
    color: var(--hzp-body);
    font-size: 14.5px;
    line-height: 1.55;
}

.hzp-empty .hzp-btn {
    margin-top: 6px;
}

.hzp-nearby {
    display: grid;
    justify-items: start;
    gap: 12px;
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px solid var(--hzp-line);
}

.hzp-nearby__title {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 19px;
    font-weight: 700;
    letter-spacing: -0.2px;
}

.hzp-nearby__text {
    max-width: 62ch;
    margin: 0;
    color: var(--hzp-body);
    font-size: 14.5px;
    line-height: 1.55;
}

/* D-11 yearly-rent hint and D-12 place suggestions. */
.hzp-empty__yearly a {
    color: var(--hzp-red);
    font-weight: 600;
}

.hzp-empty__suggest {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    font-size: 14.5px;
    color: var(--hzp-body);
}

.hzp-empty__suggest .hzp-chip-link {
    padding: 6px 12px;
    border: 1px solid var(--hzp-line);
    border-radius: 999px;
    background: #fff;
    color: var(--hzp-ink);
    font-weight: 600;
    text-decoration: none;
}

.hzp-empty__suggest .hzp-chip-link:hover,
.hzp-empty__suggest .hzp-chip-link:focus-visible {
    border-color: var(--hzp-red);
    color: var(--hzp-red);
}

/* Only rendered when the result set genuinely spans more than one page. */
.hzp-pager {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 18px;
}

.hzp-pager__at {
    color: var(--hzp-muted);
    font-size: 13.5px;
}

/*
    Scoped to anchors so the inert spans that also use .hzp-btn are untouched:
    they are not links and must not be drawn as though they were.
*/
a.hzp-btn {
    text-decoration: none;
}

/* ==========================================================================
   The property attributes
   ==========================================================================

   Added when the two pages stopped saying "not recorded" and started rendering
   the eleven property attributes. Two things needed styling: the search card's
   specification row, which now carries an icon per item where it previously
   held one line of grey text, and the district line under each card heading.

   Appended after the media queries deliberately. Both selectors are new, so
   nothing above is overridden at any width.
*/

/*
    The search card's specification row gained icons. .hzp-specs already laid
    the row out but had no rule for an <svg> inside it, because until now the
    row held only text — without this the icons would render at the browser's
    default replaced-element size and shove the row apart.

    Deliberately a little smaller than the detail page's .hzp-dspecs svg: this
    row is secondary information on a card, not the headline facts on a page.
*/
.hzp-specs svg {
    flex: none;
    width: 16px;
    height: 16px;
    fill: none;
    stroke: var(--hzp-body);
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/*
    District, under the card heading. This is the card's location line, so it is
    drawn like secondary text rather than like the heading above it — the
    district is real, but it is not a street address and should not be read as
    one.
*/
.hzp-card__district {
    display: flex;
    align-items: center;
    gap: 5px;
    margin: 4px 0 0;
    color: var(--hzp-muted);
    font-size: 13px;
}

.hzp-card__district svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ==========================================================================
   The filter bar at narrower widths
   ==========================================================================

   A sticky bar has to stay short, because whatever it occupies is taken away
   from the results for the whole scroll. So below the width where the primary
   controls stop fitting on one line, they fold behind the Filters toggle that
   already exists for the advanced panel — one control, one disclosure, and a
   bar that is a single line tall until someone asks for more.

   Appended after the base rules and after the earlier media queries, so the
   cascade order is explicit rather than depending on where each rule happens to
   sit above.
*/
@media (max-width: 959.98px) {
    .hzp-fb__row {
        display: none;
    }

    /*
        Revealed below the search box and the Filters button, which is why the
        two swap order here.
    */
    .hzp-fb__actions {
        order: 2;
    }

    /*
        :has(), because the <details> that replaced the checkbox is a descendant
        of .hzp-fb__actions while the row it reveals is a sibling of that -- so
        there is no sibling combinator that reaches from one to the other, and
        reordering the markup to create one would mean moving the panel out of
        the <details> that owns it.

        The same effect through a sibling selector was what the checkbox bought,
        and it is the only thing lost by dropping it. :has() is in every browser
        this theme already targets, and the failure mode if it were not is the
        row staying folded on a narrow screen -- the panel, the filters and the
        submit all keep working.
    */
    .hzp-fb:has(.hzp-fb__more[open]) .hzp-fb__row {
        display: flex;
        /* Here the row IS a stacked panel, so it wraps on purpose. */
        flex-wrap: wrap;
        flex: 1 1 100%;
        order: 3;
        padding-top: 14px;
        border-top: 1px solid var(--hzp-line);
    }

    /*
        Hung from both edges of the bar rather than from the Filters button.
        There is not enough width here for a 720px panel to sit inside the
        viewport, and a dropdown narrower than the bar it belongs to reads as a
        menu rather than as a panel.
    */
    .hzp-fb__panel {
        inset-inline: 24px;
        width: auto;
        /*
            Lower than the 68vh above, because the panel starts further down
            here: below this width the bar grows a second row when it opens, and
            the panel hangs from the bottom of that. A cap measured only against
            the viewport does not know how far down the panel begins, so the cap
            has to leave room for the tallest bar rather than the shortest.
            Measured at 1120x700, the worst combination this width sees.
        */
        max-height: min(460px, calc(100vh - 320px));
    }
}

/*
    From 960px the bar is one line: listing type, location, property type,
    bedrooms, price, then Filters and Clear. It used to wrap, because listing
    type joined the bar after the widths above were budgeted, and with Clear
    showing the controls came to about 1200px inside the 1152px shell, so
    Filters and Clear dropped to a line of their own.

    The location field is the one that gives, down to a width that still shows
    the start of its placeholder; the menus and price boxes are compacted
    enough to fit 1024. Below 960px the type/beds/price row folds behind
    Filters, above, and from 720px down the phone layout takes over.
*/
@media (min-width: 960px) {
    .hzp-fb {
        flex-wrap: nowrap;
    }

    /*
        A rejected price range gets its own line under the controls. Letting
        the bar wrap for it would break the controls onto several lines again,
        so the message is lifted out of the row and the bar grows to hold it.
    */
    .hzp-fb:has(> [data-hzp-price-error]:not([hidden])) {
        padding-bottom: 40px;
    }

    .hzp-fb > [data-hzp-price-error] {
        position: absolute;
        inset-inline: 24px;
        bottom: 12px;
        margin: 0;
    }

    /*
        min-width: auto, so the row cannot be squeezed past what its own menus
        and price boxes can shrink to; the location field takes the rest.
    */
    .hzp-fb__row {
        flex: 0 1 auto;
        min-width: auto;
    }

    .hzp-fb__row .hzp-field--price {
        flex: 0 1 auto;
    }

    .hzp-fb .hzp-field--location {
        flex: 1 1 240px;
        min-width: 150px;
        max-width: 300px;
    }

    .hzp-fb .hzp-field--location .hzp-input__field {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .hzp-fb .hzp-field--sm {
        flex: 0 1 128px;
        min-width: 96px;
    }

    .hzp-fb .hzp-select__el {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .hzp-fb__row .hzp-range__el {
        flex: 0 1 96px;
        width: 96px;
        min-width: 80px;
    }

    .hzp-fb__actions,
    .hzp-fb__actions > * {
        flex-shrink: 0;
    }
}

@media (min-width: 960px) and (max-width: 1199.98px) {
    .hzp-fb,
    .hzp-fb__row {
        gap: 8px;
    }

    .hzp-fb__actions {
        gap: 8px;
        padding-inline-start: 8px;
    }

    .hzp-fb__actions .hzp-btn {
        padding-inline: 12px;
    }
}

/*
    721 to 799px. The bar wraps one more time here, which pushes the panel's top
    edge from 278px down to 369px in Arabic, so the room underneath it is 91px
    less than the band above assumes. Only the cap changes; the panel still hangs
    from the bar at this width.
*/
@media (max-width: 799px) {
    .hzp-fb__panel {
        max-height: min(460px, calc(100vh - 420px));
    }
}

@media (max-width: 720px) {
    .hzp-fb {
        gap: 10px;
        padding-top: 10px;
        padding-bottom: 10px;
    }

    /*
        The field and the Filters button share one line, which keeps the closed
        bar 80px tall instead of 130px. That is the difference between the bar
        costing a tenth of a phone viewport and costing a sixth of it, for the
        whole scroll.
    */
    .hzp-field--location {
        flex: 1 1 150px;
        max-width: none;
    }

    /*
        No rule: at this width the actions sit beside the field rather than at
        the end of a row of controls, so a divider would be separating the search
        box from its own button.
    */
    .hzp-fb__actions {
        flex: 0 0 auto;
        padding-inline-start: 0;
        border-inline-start: 0;
    }

    /*
        The inert Save button this hid is gone, and the rule had to go with it
        rather than being left as dead CSS: the panel's "Show N results" submit
        is also an accent button and IS a descendant of .hzp-fb__actions now, so
        this rule had started hiding the one control in the panel that applies
        the filters -- on phones only, which is where it would have been found
        last.
    */

    /*
        The height cap that used to be here, on the form, is gone for a reason
        rather than forgotten. It existed because the panel was inside the form's
        flow and could grow taller than the viewport. The panel floats now, and
        an overflow on an ancestor CLIPS an absolutely positioned descendant --
        so keeping the cap here would have cut the bottom off the panel, submit
        button included, at exactly the width where the panel is tallest. The cap
        moved onto .hzp-fb__panel itself.
    */
    /*
        On a phone the panel stops hanging from the bar and becomes a sheet held
        against the bottom of the viewport.

        This is a correctness fix, not a restyle. Hanging from the bar, the
        panel's top edge depends on how tall the bar is and on whether the page
        has scrolled far enough to pin it -- measured, that top ranged from 409px
        to 536px on a 844px-tall viewport. A max-height in vh cannot know that
        offset, so any cap generous enough to be useful when the bar is pinned
        ran off the bottom of the screen when it was not, and the submit button
        went with it. The browser check caught it at 390 in both languages.

        Anchored to the bottom instead, the offset stops mattering: the sheet is
        positioned against the viewport, so it is inside the viewport by
        construction at any bar height and any scroll position. It is also the
        pattern a phone actually uses for this, and the Filters button stays
        visible above it, which is what closes it when there is no script.

        dvh with a vh fallback: dvh is what excludes a mobile browser's
        retracting toolbar from the measurement, and vh is what answers if it is
        not supported.
    */
    .hzp-fb__panel {
        position: fixed;
        inset-inline: 8px;
        top: auto;
        bottom: 8px;
        width: auto;
        max-height: 76vh;
        max-height: 76dvh;
        border-radius: 14px;
        z-index: 60;
    }

    .hzp-fb__panelbody,
    .hzp-fb__foot {
        padding-inline: 14px;
    }

    .hzp-checks {
        grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    }
}

/* ==========================================================================
   Add Listing form  (.hzf-*)
   ==========================================================================

   Namespaced .hzf-* and scoped under .hzf-page, so this block cannot reach the
   homepage, the search page or the listing page. Tokens are re-declared here
   rather than inherited, because .hzf-page is not inside .hzp-page; they defer
   to the same --hz-* variables property.css owns, with the same literal
   fallbacks, so the two files stay in step.

   Control heights, radii and the select chrome deliberately match the search
   filter bar: the same 40px control, the same 1px neutral border, the same red
   for the one primary action on the page.
   ========================================================================== */

.hzf-page {
    --hzf-red: var(--hz-red, #d92228);
    --hzf-red-dark: var(--hz-red-dark, #b3171c);
    --hzf-red-tint: #fdecec;
    --hzf-ink: var(--hz-ink, #12141a);
    --hzf-body: #3c414c;
    --hzf-muted: #6b7280;
    --hzf-line: var(--hz-line, #e7e9ee);
    --hzf-line-strong: #d6dae1;
    --hzf-fill: #f4f5f7;
    --hzf-fill-soft: #fafbfc;
    --hzf-radius: 10px;
    --hzf-radius-sm: 6px;

    background: var(--hzf-fill);
    color: var(--hzf-ink);
    font-family: Roboto, sans-serif;
    padding: 28px 20px 64px;
}

.hzf-page *,
.hzf-page *::before,
.hzf-page *::after {
    box-sizing: border-box;
}

/* The conditional fields depend on this. `hidden` has to beat any display rule
   a class of ours sets, or a hidden field stays on screen -- the exact bug the
   search page's empty state hit. */
.hzf-page [hidden] {
    display: none !important;
}

.hzf-page a:focus-visible,
.hzf-page button:focus-visible,
.hzf-page input:focus-visible,
.hzf-page select:focus-visible,
.hzf-page textarea:focus-visible {
    outline: 2px solid var(--hzf-red);
    outline-offset: 2px;
    border-radius: var(--hzf-radius-sm);
}

.hzf-wrap {
    max-width: 880px;
    margin: 0 auto;
}

/* ---------- heading ---------- */

.hzf-head {
    margin-bottom: 20px;
}

.hzf-head__title {
    margin: 0 0 6px;
    font-size: 28px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--hzf-ink);
}

.hzf-head__sub {
    margin: 0;
    max-width: 62ch;
    font-size: 14px;
    line-height: 1.6;
    color: var(--hzf-muted);
}

/* ---------- the honesty notice ---------- */

.hzf-notice {
    display: flex;
    gap: 12px;
    margin-bottom: 22px;
    padding: 14px 16px;
    border: 1px solid #f3c9cb;
    border-inline-start: 3px solid var(--hzf-red);
    border-radius: var(--hzf-radius);
    background: var(--hzf-red-tint);
}

.hzf-notice > svg {
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    margin-top: 1px;
    fill: none;
    stroke: var(--hzf-red);
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzf-notice p {
    margin: 0;
    font-size: 13px;
    line-height: 1.65;
    color: var(--hzf-body);
}

.hzf-notice__title {
    margin-bottom: 3px !important;
    font-weight: 700;
    color: var(--hzf-ink) !important;
}

.hzf-notice a {
    color: var(--hzf-red-dark);
    font-weight: 600;
    text-decoration: underline;
}

.hzf-noscript {
    display: none;
}

/* ---------- cards ---------- */

.hzf-card {
    margin-bottom: 16px;
    padding: 20px;
    border: 1px solid var(--hzf-line);
    border-radius: var(--hzf-radius);
    background: #fff;
}

.hzf-card__head {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--hzf-line);
}

.hzf-card__title {
    margin: 0;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: .01em;
    color: var(--hzf-ink);
}

.hzf-i {
    flex: 0 0 auto;
    width: 18px;
    height: 18px;
    fill: none;
    stroke: var(--hzf-red);
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ---------- grid ---------- */

.hzf-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
}

.hzf-field {
    flex: 1 1 100%;
    min-width: 0;
}

.hzf-field--half {
    flex: 1 1 calc(50% - 8px);
}

.hzf-field--third {
    flex: 1 1 calc(33.333% - 11px);
}

.hzf-label {
    display: block;
    margin-bottom: 6px;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .01em;
    color: var(--hzf-body);
}

.hzf-req {
    color: var(--hzf-red);
}

.hzf-hint {
    margin: 6px 0 0;
    font-size: 12px;
    line-height: 1.5;
    color: var(--hzf-muted);
}

.hzf-hint--block {
    margin: 0 0 14px;
}

/* ---------- controls: same 40px as the filter bar ---------- */

.hzf-input {
    display: block;
    width: 100%;
    height: 40px;
    padding: 0 12px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: var(--hzf-radius-sm);
    background: #fff;
    color: var(--hzf-ink);
    font-family: inherit;
    font-size: 14px;
}

.hzf-input::placeholder {
    color: var(--hz-hint, #6b7280);
}

.hzf-textarea {
    height: auto;
    min-height: 108px;
    padding: 10px 12px;
    line-height: 1.6;
    resize: vertical;
}

.hzf-select {
    position: relative;
    display: block;
}

.hzf-select::after {
    content: "";
    position: absolute;
    top: 50%;
    inset-inline-end: 12px;
    width: 8px;
    height: 8px;
    margin-top: -6px;
    border-right: 1.6px solid var(--hzf-muted);
    border-bottom: 1.6px solid var(--hzf-muted);
    transform: rotate(45deg);
    pointer-events: none;
}

.hzf-select__el {
    display: block;
    width: 100%;
    height: 40px;
    padding: 0 32px;
    padding-inline-start: 12px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: var(--hzf-radius-sm);
    background: #fff;
    color: var(--hzf-ink);
    font-family: inherit;
    font-size: 14px;
    appearance: none;
    -webkit-appearance: none;
}

/* ---------- error state ---------- */

.hzf-field--bad .hzf-input,
.hzf-field--bad .hzf-select__el {
    border-color: var(--hzf-red);
    background: #fffafa;
}

.hzf-err {
    margin: 6px 0 0;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.5;
    color: var(--hzf-red-dark);
}

/* ---------- amenities ---------- */

.hzf-checks {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 8px 14px;
}

.hzf-check {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 9px;
    border: 1px solid var(--hzf-line);
    border-radius: var(--hzf-radius-sm);
    background: var(--hzf-fill-soft);
    cursor: pointer;
}

.hzf-check:hover {
    border-color: var(--hzf-line-strong);
    background: #fff;
}

.hzf-check__box {
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    margin: 0;
    accent-color: var(--hzf-red);
    cursor: pointer;
}

.hzf-check__label {
    font-size: 13px;
    line-height: 1.35;
    color: var(--hzf-body);
}

.hzf-check:has(.hzf-check__box:checked) {
    border-color: var(--hzf-red);
    background: var(--hzf-red-tint);
}

.hzf-check:has(.hzf-check__box:checked) .hzf-check__label {
    font-weight: 600;
    color: var(--hzf-ink);
}

.hzf-count {
    margin: 12px 0 0;
    font-size: 12px;
    font-weight: 600;
    color: var(--hzf-muted);
}

/* ---------- photographs ---------- */

.hzf-drop {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    padding: 26px 16px;
    border: 1.5px dashed var(--hzf-line-strong);
    border-radius: var(--hzf-radius);
    background: var(--hzf-fill-soft);
    cursor: pointer;
    text-align: center;
}

.hzf-drop:hover {
    border-color: var(--hzf-red);
    background: #fff;
}

.hzf-drop:focus-within {
    outline: 2px solid var(--hzf-red);
    outline-offset: 2px;
}

.hzf-drop__lead {
    font-size: 14px;
    font-weight: 600;
    color: var(--hzf-ink);
}

.hzf-drop__hint {
    font-size: 12px;
    color: var(--hzf-muted);
}

/* Visually replaced by the label, but still the real focusable control, so it
   is offset rather than display:none -- a hidden input cannot be tabbed to. */
.hzf-drop__input {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.hzf-files {
    margin: 12px 0 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.hzf-files__item {
    padding: 4px 9px;
    border: 1px solid var(--hzf-line);
    border-radius: 999px;
    background: var(--hzf-fill);
    font-size: 12px;
    color: var(--hzf-body);
}

/* ---------- actions ---------- */

.hzf-actions {
    margin-top: 20px;
    padding: 18px 20px;
    border: 1px solid var(--hzf-line);
    border-radius: var(--hzf-radius);
    background: #fff;
}

.hzf-actions__row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
}

.hzf-actions__note {
    margin: 12px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--hzf-muted);
}

.hzf-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 42px;
    padding: 0 18px;
    border: 1px solid var(--hzf-line-strong);
    border-radius: var(--hzf-radius-sm);
    background: #fff;
    color: var(--hzf-ink);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
}

.hzf-btn svg {
    width: 17px;
    height: 17px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzf-btn--primary {
    border-color: var(--hzf-red);
    background: var(--hzf-red);
    color: #fff;
}

.hzf-btn--primary:hover {
    border-color: var(--hzf-red-dark);
    background: var(--hzf-red-dark);
}

.hzf-btn--ghost:hover {
    border-color: var(--hzf-red);
    color: var(--hzf-red-dark);
}

/* ---------- validation summary ---------- */

.hzf-summary {
    margin-bottom: 16px;
    padding: 14px 16px;
    border: 1px solid #f3c9cb;
    border-inline-start: 3px solid var(--hzf-red);
    border-radius: var(--hzf-radius);
    background: var(--hzf-red-tint);
}

.hzf-summary__title {
    margin: 0 0 8px;
    font-size: 13px;
    font-weight: 700;
    color: var(--hzf-ink);
}

.hzf-summary__list {
    margin: 0;
    padding-inline-start: 18px;
}

.hzf-summary__list li {
    margin-bottom: 3px;
    font-size: 13px;
    line-height: 1.55;
}

.hzf-summary__list a {
    color: var(--hzf-red-dark);
    text-decoration: underline;
}

/* ---------- responsive ---------- */

@media (max-width: 860px) {
    .hzf-checks {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .hzf-field--third {
        flex: 1 1 calc(50% - 8px);
    }
}

@media (max-width: 640px) {
    .hzf-page {
        padding: 20px 14px 48px;
    }

    .hzf-head__title {
        font-size: 22px;
    }

    .hzf-card {
        padding: 16px 14px;
    }

    .hzf-checks {
        grid-template-columns: 1fr;
    }

    /* One field per line below this width: two 50% fields with a Choose... menu
       inside them cannot show their own labels without truncating. */
    .hzf-field--half,
    .hzf-field--third {
        flex: 1 1 100%;
    }

    .hzf-actions {
        padding: 14px;
    }

    /* Full-width stacked buttons, so the primary action is not a 40%-wide
       target next to a phone link of the same weight. */
    .hzf-actions__row {
        flex-direction: column;
        align-items: stretch;
    }

    .hzf-btn {
        width: 100%;
    }
}

/* ==========================================================================
   LISTING DETAIL REDESIGN
   ==========================================================================

   Appended for the redesigned listing detail page. Everything here is scoped
   under .hzp-detail or a .hzp-* class only that page uses, so nothing reaches
   the homepage, the header/footer or the search page. Tokens are the ones
   already declared on .hzp-page — no new colour, radius or hairline is
   introduced, because the point is that this page looks like the rest of the
   site rather than like a second design.

   Three groups: the gallery's overlay and thumbnail controls, the payment
   calculator's real inputs, and the sidebar's four cards.
   ========================================================================== */

/* Links styled as buttons: three of the sidebar actions are anchors now that
   they genuinely go somewhere, and an anchor carries an underline. */
.hzp-detail .hzp-btn {
    text-decoration: none;
}

/* ------------------------------------------------------ gallery overlay --- */

/*
    Top-right of the primary photograph, as the mockup has it. A span for the
    heart and a button for share sit side by side and must look identical, so
    the appearance is on the shared class and only the cursor differs.
*/



/* Only the share control is a real button, so only it gets a pointer and a
   hover. The heart deliberately looks the same and does nothing, matching the
   inert-heart treatment used on the search and home cards. */



/* The share button reports which of the two things it did. */

/* --------------------------------------------------- gallery thumbnails --- */

/*
    Real controls now: each thumbnail swaps the main photograph. Styled as a
    button with the chrome stripped, because a button is what it is.
*/


/* The selected thumbnail, so it is obvious which photograph is showing. */


/*
    The mockup's "+N Photos" plate. N is computed from the gallery, so this only
    appears when there genuinely are more photographs than the strip shows.
*/

/* Shown instead of a strip when there is one photograph, which is every
   listing in this catalogue today. */

/* ------------------------------------------------------- price and head --- */

/*
    The red payment pill from the mockup. Filled rather than tinted, because in
    the mockup it is the one saturated element beside the price and that is what
    gives the block its balance. It is a link to the calculator that produced it.
*/
.hzp-paypill {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    align-self: center;
    padding: 6px 13px;
    border-radius: 999px;
    background: var(--hzp-red);
    color: #ffffff;
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}

.hzp-paypill svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: #ffffff;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-paypill:hover {
    background: var(--hzp-red-dark);
}

.hzp-paypill:focus-visible {
    outline: 2px solid var(--hzp-ink);
    outline-offset: 2px;
}

/* The location line takes a pin, as the mockup has it. */
.hzp-daddr {
    display: flex;
    align-items: center;
    gap: 6px;
}

.hzp-daddr svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* --------------------------------------------------------- key features --- */

/*
    Bordered chips rather than a ticked list. A tick reads as a verified claim;
    a chip reads as a label, which is what an amenity option is.
*/
/*
    A grid rather than a wrapping flex row, so the chips share the width evenly
    and the row reads as a set — which is how the mockup has it. auto-fit
    collapses the empty tracks, so four amenities give four equal chips rather
    than four narrow ones and a gap; and unlike flex there is no stretched
    last row when the count does not divide evenly.
*/
.hzp-chips {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 8px;
    margin: 0;
    padding: 0;
    list-style: none;
}

/* flex, not inline-flex: as a grid item it should fill its track. */
.hzp-chip {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 13px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius-sm);
    background: #ffffff;
    color: var(--hzp-ink);
    font-size: 13px;
    font-weight: 500;
}

.hzp-chip svg {
    flex: none;
    width: 16px;
    height: 16px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ---------------------------------------------------- payment calculator --- */

/*
    Fields hug the top of their row. Property price is the one field with no
    slider under it, so its two rows were sharing the height of a three-row
    neighbour and its readout sat visibly lower than the deposit's. Scoped to
    this page because the class predates it.
*/
.hzp-detail .hzp-calc__field {
    align-content: start;
}

/*
    The sliders. Cross-browser range styling needs the two vendor track/thumb
    pairs written out; there is no shorthand that covers both.

    Named .hzp-slider, NOT .hzp-range. The search page has owned .hzp-range
    since the filter bar was built — it is the wrapper around the price min/max
    pair — and this file is shared by both pages. Calling the mortgage input
    .hzp-range put "height: 18px" on that wrapper from further down the
    stylesheet, which collapsed it to 18px around two 40px inputs; the wrapper's
    own "align-items: center" then centred them, so they overflowed 11px above
    the box and struck the "Price (JOD)" label. The detail page looked correct
    throughout, because the collision only shows on the other page. Anything
    added here needs a name the earlier sections do not already use.
*/
.hzp-slider {
    width: 100%;
    height: 18px;
    margin: 1px 0 0;
    padding: 0;
    background: none;
    -webkit-appearance: none;
    appearance: none;
    cursor: pointer;
}

.hzp-slider::-webkit-slider-runnable-track {
    height: 4px;
    border-radius: 999px;
    background: var(--hzp-line-strong);
}

.hzp-slider::-webkit-slider-thumb {
    width: 15px;
    height: 15px;
    margin-top: -5.5px;
    border: 2px solid #ffffff;
    border-radius: 999px;
    background: var(--hzp-red);
    box-shadow: 0 0 0 1px var(--hzp-red);
    -webkit-appearance: none;
    appearance: none;
}

.hzp-slider::-moz-range-track {
    height: 4px;
    border-radius: 999px;
    background: var(--hzp-line-strong);
}

.hzp-slider::-moz-range-thumb {
    width: 13px;
    height: 13px;
    border: 2px solid #ffffff;
    border-radius: 999px;
    background: var(--hzp-red);
    box-shadow: 0 0 0 1px var(--hzp-red);
}

.hzp-slider:focus-visible {
    outline: 2px solid var(--hzp-red);
    outline-offset: 3px;
}

/*
    Replaces the mockup's "View full mortgage guide" link with the disclosure it
    would have to lead to. Sits inside the red output box, so it inherits that
    box's darker red for text.
*/
.hzp-calc__how {
    margin-top: 8px;
    text-align: start;
}

.hzp-calc__how summary {
    color: var(--hzp-red-dark);
    cursor: pointer;
    font-size: 12px;
    font-weight: 600;
    text-align: center;
    text-decoration: underline;
}

.hzp-calc__how summary:focus-visible {
    outline: 2px solid var(--hzp-red-dark);
    outline-offset: 2px;
}

.hzp-calc__how p {
    margin: 8px 0 0;
    color: #7a1d20;
    font-size: 11.5px;
    line-height: 1.55;
}

/* The mockup's summary row: loan amount, total interest, total payment. All
   three recompute with the sliders. */
.hzp-sums {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--hzp-line);
}

.hzp-sums__item {
    display: grid;
    gap: 3px;
    min-width: 0;
}

.hzp-sums__label {
    color: var(--hzp-muted);
    font-size: 11.5px;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.hzp-sums__value {
    color: var(--hzp-ink);
    font-size: 14.5px;
    font-weight: 600;
}

/* ------------------------------------------------------------- sidebar --- */

.hzp-agentcard {
    padding: 16px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzp-agentcard__line {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 12px 0;
    font-size: 13.5px;
}

.hzp-agentcard__line svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: var(--hzp-red);
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-agentcard__line a {
    color: var(--hzp-ink);
    font-weight: 600;
    text-decoration: none;
}

.hzp-agentcard__line a:hover {
    color: var(--hzp-red);
}

/* The "Safe & transparent" note. A statement about this page's own policy,
   which is the one thing on the card that can be said without data. */
.hzp-safe {
    display: flex;
    gap: 11px;
    padding: 14px 16px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: var(--hzp-fill-soft);
}

.hzp-safe svg {
    flex: none;
    width: 19px;
    height: 19px;
    margin-top: 1px;
    fill: none;
    stroke: #1f9d63;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-safe__title {
    margin: 0 0 3px;
    color: var(--hzp-ink);
    font-size: 13.5px;
    font-weight: 600;
}

.hzp-safe__text {
    margin: 0;
    color: var(--hzp-muted);
    font-size: 11.5px;
    line-height: 1.55;
}

/* --------------------------------------------------- similar properties --- */

.hzp-rail__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 12px;
}

/* The rail title carries its own bottom margin elsewhere; inside the flex head
   it would push the controls out of line. */
.hzp-rail__head .hzp-rail__title {
    margin: 0;
}

.hzp-rail__tools {
    display: flex;
    flex: 0 1 auto;
    min-width: 0;
    align-items: center;
    gap: 8px;
}

.hzp-rail__nav {
    display: inline-flex;
    flex: none;
    width: 32px;
    height: 32px;
    padding: 0;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 999px;
    background: #ffffff;
    color: var(--hzp-ink);
    cursor: pointer;
    font: inherit;
}

.hzp-rail__nav svg {
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* The back arrow is the same glyph turned round, so there is one path to keep
   correct rather than two. */
.hzp-rail__nav[data-hzd-scroll="-1"] svg {
    transform: rotate(180deg);
}

.hzp-rail__nav:hover:not([disabled]) {
    border-color: var(--hzp-red);
    color: var(--hzp-red);
}

.hzp-rail__nav[disabled] {
    color: var(--hzp-line-strong);
    cursor: default;
}

.hzp-rail__nav:focus-visible {
    outline: 2px solid var(--hzp-red);
    outline-offset: 2px;
}

/* The label names the whole hub ("View all Apartments For Rent In 4th Circle,
   Amman"), so it wraps on a phone instead of widening the page. */
.hzp-rail__all {
    min-width: 0;
    color: var(--hzp-ink);
    font-size: 13px;
    font-weight: 600;
    text-decoration: none;
    text-wrap: balance;
}

.hzp-rail__all:hover {
    color: var(--hzp-red);
}

/*
    Wider cards than the base .hzp-mini, and scoped to this page so nothing else
    that uses the class moves.

    This is load-bearing rather than cosmetic. Five cards at the base 214px plus
    four 14px gaps is 1126px, which fits inside the 1152px shell — so the track
    did not overflow, there was nothing to scroll, and both arrows correctly
    disabled themselves. A carousel whose controls are always dead is not a
    carousel. At 246px the five come to 1286px, so the fifth is clipped and the
    arrows have something to do, which is also how the mockup shows it.
*/
.hzp-detail .hzp-mini {
    width: 246px;
}

/*
    [hidden] sets display: none at a specificity a class rule beats, and
    .hzp-rail__nav sets display: inline-flex — so without this the script can
    hide an arrow and nothing happens. This is the same collision that bit the
    search page's empty state.
*/
.hzp-rail__nav[hidden] {
    display: none;
}

/* The district under each carousel card, which is a real attribute. */
.hzp-mini__where {
    margin: 3px 0 0;
    color: var(--hzp-muted);
    font-size: 12px;
}

/* ------------------------------------------------------------ narrower --- */

/*
    The two breakpoints the RESPONSIVE section above already uses, reused rather
    than introduced: 1023.98px is where .hzp-dgrid drops its sidebar column and
    767.98px is where .hzp-calc drops its output column. Adding 1080 and 760 here
    would give this page two sets of breakpoints a few pixels apart, which is how
    a stylesheet starts disagreeing with itself.
*/

@media (max-width: 1023.98px) {
    /* The sidebar is under the main column from here down (see .hzp-dgrid
       above), so its cards sit two across rather than as a tall stack below
       the fold. */
    .hzp-dside {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 767.98px) {
    .hzp-dside {
        grid-template-columns: minmax(0, 1fr);
    }

    /*
        One column for the calculator fields from here rather than at 479.98px,
        where the base rule puts them. Two 38px readouts each with a slider
        under it leaves the thumb about 60px of travel at this width, which is
        not a usable control — and the slider is the point of the panel now.
    */
    .hzp-calc__fields {
        grid-template-columns: minmax(0, 1fr);
    }

    /* Three figures side by side wrap mid-number at this width. */
    .hzp-sums {
        grid-template-columns: minmax(0, 1fr);
        gap: 10px;
    }

    /* .hzp-dprice already wraps; the pill just needs to stop centring on the
       price's baseline once it is on its own line. */
    .hzp-paypill {
        align-self: flex-start;
    }



    /* The rail's arrows and "View all" go under the heading. */
    .hzp-rail__head {
        flex-wrap: wrap;
        gap: 10px;
    }
}

/*
   ====================================================================
   SERP SIDEBAR — SELL YOUR PROPERTY PANEL
   Replaces the dashed "Promotional slot" placeholder. Built to the
   supplied reference: deep blue ground, two white feature chips and
   a coral pill CTA.

   Prefix .hzp-sell, which no other rule or template in this theme uses.
   ==================================================================== */

.hzp-sell {
    position: relative;
    overflow: hidden;
    padding: 20px 18px;
    border-radius: var(--hzp-radius);
    background: #06358F;
}

/* The reference's soft tonal circles. Painted with white at low alpha so
   they track the ground rather than needing colours of their own. */
.hzp-sell::before {
    position: absolute;
    inset-inline-end: -38px;
    bottom: -46px;
    width: 150px;
    height: 150px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.05);
    content: "";
}

.hzp-sell > * {
    position: relative;
    z-index: 1;
}

/* The illustration. At a 300px column it cannot sit beside the headline
   without squeezing it to four lines, so it sits behind the top-right
   corner as a watermark instead — present, but not competing. */
.hzp-sell__art {
    position: absolute;
    top: 6px;
    inset-inline-end: 2px;
    z-index: 0;
    width: 84px;
    height: auto;
    opacity: 0.92;
    pointer-events: none;
}

.hzp-sell__title {
    max-width: 8.5em;
    margin: 0;
    color: #ffffff;
    font-size: 21px;
    font-weight: 800;
    letter-spacing: -0.01em;
    line-height: 1.18;
}

.hzp-sell__text {
    max-width: 15em;
    margin: 9px 0 0;
    color: #D7E3FF;
    font-size: 13px;
    line-height: 1.45;
}

.hzp-sell__chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 15px;
}

/* Labels, not controls: no hover, no pointer, no focus target. */
.hzp-sell__chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 11px;
    border-radius: 999px;
    background: #ffffff;
    color: #212026;
    font-size: 12.5px;
    font-weight: 700;
    cursor: default;
}

.hzp-sell__chip svg {
    flex: none;
    width: 15px;
    height: 15px;
}

.hzp-sell__cta {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 9px;
    margin-top: 15px;
    padding: 13px 16px;
    border-radius: 999px;
    background: #cf4434;
    color: #ffffff;
    font-size: 14.5px;
    font-weight: 700;
    text-align: center;
    text-decoration: none;
}

.hzp-sell__cta:hover {
    background: #b93a2c;
}

.hzp-sell__cta:focus-visible {
    outline: 2px solid #ffffff;
    outline-offset: 2px;
}

.hzp-sell__cta svg {
    flex: none;
    width: 17px;
    height: 17px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/*
   Below the sidebar breakpoint the column stacks under the results, so the
   panel lands between the last listing and the footer. Kept, but tightened:
   the headline drops a step, the chips sit on one row and the artwork goes,
   since a full-height promo there pushes the footer a long way down.
*/
@media (max-width: 1023.98px) {
    .hzp-sell {
        padding: 17px 16px;
    }

    .hzp-sell__art {
        display: none;
    }

    .hzp-sell__title {
        max-width: none;
        font-size: 19px;
    }
}

/* ====================================================================
   PROPERTY GALLERY  (.hzpg-)
   Prefix chosen because .hzp-g* already carries the old gallery and
   .hzg- belongs to the Add Listing page. Nothing else in this theme
   uses .hzpg-.

   Blue is the token another stylesheet defines; the literal fallback
   keeps these rules correct on their own. It is used for the active
   thumbnail edge and focus rings only — the gallery stays white, dark
   neutral and grey.
   ==================================================================== */

.hzp-detail .hzpg {
    --hzpg-accent: var(--hagzi-primary, #0745D9);

    display: grid;
    gap: 10px;
    min-width: 0;
}

/* Desktop mosaic; phones use a full-size swipe carousel without thumbnails. */
.hzp-detail .hzpg__side { display: none; }
.hzp-detail .hzpg__swipe { display: none; }
.hzp-detail .hzpg__dots { display: none; }
@media (min-width: 768px) {
    /* Keep the gallery frame the same height for one or many photographs. */
    .hzp-detail .hzpg--mosaic,
    .hzp-detail .hzpg--single {
        grid-template-rows: minmax(0, 1fr);
        gap: 8px;
        aspect-ratio: 2.1 / 1;
    }
    .hzp-detail .hzpg--mosaic {
        grid-template-columns: minmax(0, 2.5fr) minmax(0, 1fr);
    }
    .hzp-detail .hzpg--single {
        grid-template-columns: minmax(0, 1fr);
    }
    .hzp-detail .hzpg--mosaic .hzpg__stage,
    .hzp-detail .hzpg--single .hzpg__stage {
        min-width: 0;
        min-height: 0;
        height: 100%;
        aspect-ratio: auto;
        border-radius: 12px;
    }
    .hzp-detail .hzpg--mosaic .hzpg__rail { display: none; }
    .hzp-detail .hzpg__side {
        display: grid;
        grid-template-rows: repeat(2, minmax(0, 1fr));
        gap: 8px;
        min-width: 0;
        min-height: 0;
    }
    .hzp-detail .hzpg__side[data-hzpg-previews="3"] {
        grid-template-rows: minmax(0, 2fr) repeat(2, minmax(0, 1fr));
    }
    .hzp-detail .hzpg__preview {
        position: relative;
        display: block;
        min-width: 0;
        min-height: 0;
        width: 100%;
        height: 100%;
        overflow: hidden;
        padding: 0;
        border: 0;
        border-radius: 8px;
        background: var(--hzp-fill);
        cursor: pointer;
    }
    .hzp-detail .hzpg__preview.hzpg__thumb--on {
        padding: 0;
        outline: 2px solid var(--hzpg-accent);
        outline-offset: -2px;
    }
    .hzp-detail .hzpg__preview:focus-visible {
        outline: 3px solid var(--hzpg-accent);
        outline-offset: 2px;
    }
    .hzp-detail .hzpg__previewimg {
        display: block;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    .hzp-detail .hzpg__more {
        position: absolute;
        inset-inline-end: 12px;
        bottom: 12px;
        padding: 8px 12px;
        border-radius: 999px;
        background: rgba(18, 20, 26, .78);
        color: #fff;
        font-size: 14px;
        font-weight: 600;
        line-height: 1.4;
    }
}

/* ------------------------------------------------------------ stage ---- */

.hzp-detail .hzpg__stage {
    position: relative;
    overflow: hidden;
    aspect-ratio: 16 / 9;
    border-radius: 14px;
    background: var(--hzp-fill);
}

/* The photo opens the popup; favorite and share stay independent above it. */
.hzp-detail .hzpg__image-open {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    cursor: pointer;
}
.hzp-detail .hzpg__image-open:focus-visible {
    outline: 3px solid var(--hzpg-accent);
    outline-offset: -3px;
}
.hzp-detail .hzpg__badges,
.hzp-detail .hzpg__count { pointer-events: none; }
.hzp-detail .hzpg__preview .hzpg__all {
    max-width: calc(100% - 24px);
    justify-content: center;
    font-size: 13px;
    line-height: 1.4;
}

.hzp-detail .hzpg__img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.hzp-detail .hzpg__badges {
    position: absolute;
    top: 12px;
    inset-inline-start: 12px;
    z-index: 3;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    max-width: calc(100% - 120px);
}

.hzp-detail .hzpg__tools {
    position: absolute;
    top: 12px;
    inset-inline-end: 12px;
    z-index: 3;
    display: flex;
    gap: 8px;
}

/* Circular, white, neutral border. Blue only on hover and focus, so
   neither reads as permanently active. */
.hzp-detail .hzpg__tool {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    padding: 0;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 50%;
    background: #ffffff;
    color: var(--hzp-ink);
    cursor: pointer;
}

.hzp-detail .hzpg__tool[aria-disabled="true"] {
    cursor: default;
}

.hzp-detail button.hzpg__tool:hover {
    border-color: var(--hzpg-accent);
    color: var(--hzpg-accent);
}

.hzp-detail .hzpg__tool:focus-visible {
    outline: 2px solid var(--hzpg-accent);
    outline-offset: 2px;
}

.hzp-detail .hzpg__tool svg {
    width: 17px;
    height: 17px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* --------------------------------------------------- stage controls ---- */

.hzp-detail .hzpg__nav {
    position: absolute;
    top: 50%;
    z-index: 3;
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    margin-top: -20px;
    padding: 0;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 50%;
    background: #ffffff;
    color: var(--hzp-ink);
    cursor: pointer;
}

.hzp-detail .hzpg__nav:hover {
    border-color: var(--hzpg-accent);
    color: var(--hzpg-accent);
}

.hzp-detail .hzpg__nav:focus-visible {
    outline: 2px solid var(--hzpg-accent);
    outline-offset: 2px;
}

.hzp-detail .hzpg__nav svg {
    width: 18px;
    height: 18px;
}

.hzp-detail .hzpg__nav--prev { inset-inline-start: 12px; }
.hzp-detail .hzpg__nav--next { inset-inline-end: 12px; }

.hzp-detail .hzpg__count {
    position: absolute;
    inset-inline-start: 12px;
    bottom: 12px;
    z-index: 3;
    margin: 0;
    padding: 5px 10px;
    border-radius: 999px;
    background: rgba(18, 20, 26, 0.62);
    color: #ffffff;
    font-size: 12.5px;
    font-weight: 600;
}

.hzp-detail .hzpg__all {
    position: absolute;
    inset-inline-end: 12px;
    bottom: 12px;
    z-index: 3;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 8px 13px;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 999px;
    background: #ffffff;
    color: var(--hzp-ink);
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    cursor: pointer;
}

.hzp-detail .hzpg__all:hover {
    border-color: var(--hzpg-accent);
    color: var(--hzpg-accent);
}

.hzp-detail .hzpg__all:focus-visible {
    outline: 2px solid var(--hzpg-accent);
    outline-offset: 2px;
}

.hzp-detail .hzpg__all svg {
    width: 15px;
    height: 15px;
}

/* ------------------------------------------------------------- rail ---- */

.hzp-detail .hzpg__rail {
    position: relative;
    min-width: 0;
}

/* Room for the arrows, so neither of them covers a thumbnail — and only when
   there are arrows. The attribute is set by the rail's own measurement. This
   way round rather than the reverse because the roomier state is the default,
   so adding the padding can never turn a row that fits into one that does not. */
.hzp-detail .hzpg__rail[data-hzpg-scrolls] {
    padding: 0 36px;
}

/* One row, never wrapping. The scroll lives here, so the page cannot
   gain a horizontal scrollbar however many photographs arrive. */
.hzp-detail .hzpg__strip {
    display: flex;
    flex-wrap: nowrap;
    gap: 8px;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-behavior: smooth;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
}

.hzp-detail .hzpg__strip::-webkit-scrollbar {
    display: none;
}

.hzp-detail .hzpg__thumb {
    flex: 1 0 112px;
    overflow: hidden;
    max-width: 172px;
    height: 82px;
    padding: 0;
    border: 2px solid transparent;
    border-radius: 8px;
    background: var(--hzp-fill);
    cursor: pointer;
}

/* The active outline, in Hagzi's primary rather than the reference's blue.
   The 2px inset lets a little of the card show inside the outline, so the
   selected thumbnail reads as ringed rather than merely bordered. */
.hzp-detail .hzpg__thumb--on {
    border-color: var(--hzpg-accent);
    padding: 2px;
    background: #ffffff;
}

.hzp-detail .hzpg__thumb--on .hzpg__thumbimg {
    border-radius: 4px;
}

.hzp-detail .hzpg__thumb:focus-visible {
    outline: 2px solid var(--hzpg-accent);
    outline-offset: 2px;
}

.hzp-detail .hzpg__thumbimg {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.hzp-detail .hzpg__railnav {
    position: absolute;
    top: 50%;
    z-index: 2;
    display: grid;
    place-items: center;
    width: 30px;
    height: 30px;
    margin-top: -15px;
    padding: 0;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 50%;
    background: #ffffff;
    color: var(--hzp-ink);
    cursor: pointer;
}

.hzp-detail .hzpg__railnav[hidden] {
    display: none;
}

.hzp-detail .hzpg__railnav[disabled] {
    opacity: 0.35;
    cursor: default;
}

.hzp-detail .hzpg__railnav:hover:not([disabled]) {
    border-color: var(--hzpg-accent);
    color: var(--hzpg-accent);
}

.hzp-detail .hzpg__railnav:focus-visible {
    outline: 2px solid var(--hzpg-accent);
    outline-offset: 2px;
}

.hzp-detail .hzpg__railnav svg {
    width: 15px;
    height: 15px;
}

.hzp-detail .hzpg__railnav--prev { inset-inline-start: 0; }
.hzp-detail .hzpg__railnav--next { inset-inline-end: 0; }

/* --------------------------------------------------------- lightbox ---- */

.hzpg-locked,
.hzpg-locked body {
    overflow: hidden;
}

.hzp-detail .hzpg-lb {
    position: fixed;
    inset: 0;
    z-index: 120;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto auto;
    gap: 12px;
    padding: 12px 0 max(12px, env(safe-area-inset-bottom));
    overflow: hidden;
    background: rgba(8, 9, 11, 0.94);
    color: #fff;
}

.hzp-detail .hzpg-lb[hidden] {
    display: none;
}

.hzp-detail .hzpg-lb__header {
    display: flex;
    justify-content: center;
    min-width: 0;
    padding: 0 60px;
}

.hzp-detail .hzpg-lb__collection {
    padding: 10px 16px 12px;
    border-bottom: 2px solid #79b9f2;
    color: #79b9f2;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.4;
    text-align: center;
}

.hzp-detail .hzpg-lb__stage {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 0;
    min-width: 0;
    padding: 0 60px;
    touch-action: pan-y pinch-zoom;
}

.hzp-detail .hzpg-lb__img {
    display: block;
    width: 100%;
    height: 100%;
    min-height: 0;
    max-width: 100%;
    max-height: 100%;
    margin: 0;
    border-radius: 0;
    object-fit: contain;
}

.hzp-detail .hzpg-lb__nav,
.hzp-detail .hzpg-lb__close {
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: 0;
    border-radius: 6px;
    background: transparent;
    color: #fff;
    cursor: pointer;
}

.hzp-detail .hzpg-lb__nav:hover,
.hzp-detail .hzpg-lb__close:hover {
    background: rgba(255, 255, 255, 0.12);
}

.hzp-detail .hzpg-lb__nav:focus-visible,
.hzp-detail .hzpg-lb__close:focus-visible,
.hzp-detail .hzpg-lb__thumb:focus-visible {
    outline: 2px solid #fff;
    outline-offset: -2px;
}

.hzp-detail .hzpg-lb__nav svg,
.hzp-detail .hzpg-lb__close svg {
    width: 24px;
    height: 24px;
}

.hzp-detail .hzpg-lb__nav {
    position: absolute;
    top: 50%;
    z-index: 1;
    transform: translateY(-50%);
}

.hzp-detail .hzpg-lb__nav--prev { left: 8px; }
.hzp-detail .hzpg-lb__nav--next { right: 8px; }

.hzp-detail .hzpg-lb__close {
    position: absolute;
    top: 12px;
    right: 12px;
    z-index: 2;
}

.hzp-detail .hzpg-lb__count {
    margin: 0;
    color: #fff;
    font-size: 16px;
    font-weight: 500;
    line-height: 1.5;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.hzp-detail .hzpg-lb__strip {
    min-width: 0;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scrollbar-width: thin;
    scrollbar-color: #62666d transparent;
    direction: ltr;
}

.hzp-detail .hzpg-lb__thumbnails {
    display: flex;
    gap: 10px;
    width: max-content;
    margin: 0 auto;
    padding: 2px 20px 6px;
}

.hzp-detail .hzpg-lb__thumb {
    display: block;
    flex: 0 0 auto;
    width: clamp(72px, 11vh, 112px);
    height: clamp(64px, 10vh, 100px);
    padding: 0;
    overflow: hidden;
    border: 2px solid transparent;
    border-radius: 3px;
    background: #181a1d;
    opacity: 0.5;
    cursor: pointer;
    transition: opacity 120ms ease, border-color 120ms ease;
}

.hzp-detail .hzpg-lb__thumb:hover {
    opacity: 0.85;
}

.hzp-detail .hzpg-lb__thumb--on {
    border-color: #79b9f2;
    opacity: 1;
}

.hzp-detail .hzpg-lb__thumb img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* ------------------------------------------------------------ small ---- */

@media (max-width: 767.98px) {
    /* Break out of the shell's 24px gutters for edge-to-edge mobile photos. */
    .hzp-detail .hzp-dgallery {
        margin-inline: -24px;
    }

    .hzp-detail .hzpg { gap: 0; }

    .hzp-detail .hzpg__stage {
        aspect-ratio: 4 / 3;
        border-radius: 0;
    }

    .hzp-detail .hzpg__dots {
        position: absolute;
        z-index: 4;
        bottom: 12px;
        left: 50%;
        transform: translateX(-50%);
        display: flex;
        flex-wrap: wrap;
        justify-content: center;
        width: max-content;
        max-width: calc(100% - 128px);
        direction: ltr;
    }

    .hzp-detail .hzpg__dot {
        display: grid;
        place-items: center;
        flex: 0 0 24px;
        width: 24px;
        height: 32px;
        padding: 0;
        border: 0;
        border-radius: 50%;
        background: transparent;
        cursor: pointer;
    }

    .hzp-detail .hzpg__dot span {
        width: 8px;
        height: 8px;
        border-radius: 50%;
        background: rgba(255, 255, 255, .8);
        box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
    }

    .hzp-detail .hzpg__dot[aria-pressed="true"] span {
        background: var(--hzpg-accent);
        transform: scale(1.25);
    }

    .hzp-detail .hzpg__dot:focus-visible {
        outline: 2px solid var(--hzpg-accent);
        outline-offset: -2px;
    }

    /* Swipe is the better gesture at this width and the arrows cover the
       photograph, so they go and the swipe handler carries it. */
    .hzp-detail .hzpg__nav {
        display: none;
    }

    .hzp-detail .hzpg__rail,
    .hzp-detail .hzpg__stage > .hzpg__image-open {
        display: none;
    }

    .hzp-detail .hzpg__swipe {
        position: absolute;
        inset: 0;
        display: flex;
        overflow-x: auto;
        overflow-y: hidden;
        scroll-snap-type: x mandatory;
        overscroll-behavior-x: contain;
        scrollbar-width: none;
        direction: ltr;
        -webkit-overflow-scrolling: touch;
    }

    .hzp-detail .hzpg__swipe::-webkit-scrollbar { display: none; }

    .hzp-detail .hzpg__swipe-photo {
        flex: 0 0 100%;
        min-width: 0;
        height: 100%;
        padding: 0;
        border: 0;
        background: transparent;
        scroll-snap-align: start;
        scroll-snap-stop: always;
        cursor: pointer;
    }

    .hzp-detail .hzpg__swipe-photo:focus-visible {
        outline: 3px solid var(--hzpg-accent);
        outline-offset: -3px;
    }

    /* Compact photo action on narrow screens. */
    .hzp-detail .hzpg__all {
        padding: 9px 13px;
        font-size: 12px;
    }

    .hzp-detail .hzpg__railnav {
        display: none;
    }

    .hzp-detail .hzpg__rail[data-hzpg-scrolls] {
        padding: 0;
    }

    .hzp-detail .hzpg-lb {
        gap: 10px;
        padding-top: max(8px, env(safe-area-inset-top));
    }

    .hzp-detail .hzpg-lb__stage {
        padding: 0 36px;
    }

    .hzp-detail .hzpg-lb__nav--prev { left: 0; }
    .hzp-detail .hzpg-lb__nav--next { right: 0; }
    .hzp-detail .hzpg-lb__close { top: 8px; right: 6px; }

    .hzp-detail .hzpg-lb__thumbnails {
        gap: 8px;
        padding-inline: 12px;
    }

}

/* ====================================================================
   AGENT / SELLER PROFILE  (.hzpa-)
   Served at /showrooms. Prefix is unused anywhere else in this theme.
   ==================================================================== */

.hzpa {
    --hzpa-accent: var(--hagzi-primary, #0745D9);

    padding-bottom: 48px;
}

.hzpa__crumbs {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 8px;
    padding-block: 12px;
    color: var(--hz-muted, #6b7280);
    font-size: 13px;
}

.hzpa__crumbs a {
    color: inherit;
}

/* ------------------------------------------------------------- hero ---- */

.hzpa__hero {
    position: relative;
    overflow: hidden;
    height: 240px;
    background: var(--hzp-fill);
}

.hzpa__cover {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Keeps the card edge legible over whatever the photograph is doing. */
.hzpa__scrim {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(16, 18, 24, 0.12) 0%, rgba(16, 18, 24, 0.42) 100%);
}

/* ---------------------------------------------------------- id card ---- */

.hzpa__idcard {
    position: relative;
    z-index: 2;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto auto;
    align-items: center;
    gap: 18px;
    margin-top: -56px;
    padding: 20px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: #ffffff;
}

.hzpa__mark {
    display: grid;
    place-items: center;
    width: 76px;
    height: 76px;
    border-radius: 14px;
    background: var(--hzp-ink);
    color: #ffffff;
    font-size: 24px;
    font-weight: 700;
    letter-spacing: 0.02em;
}

.hzpa__name {
    margin: 0 0 4px;
    color: var(--hzp-ink);
    font-size: 25px;
    font-weight: 700;
    line-height: 1.2;
}

.hzpa__where,
.hzpa__phone {
    display: flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    color: var(--hzp-body);
    font-size: 13.5px;
}

.hzpa__phone {
    margin-top: 2px;
}

.hzpa__where svg,
.hzpa__phone svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: var(--hzpa-accent);
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzpa__phone a {
    color: var(--hzp-ink);
    font-weight: 600;
    text-decoration: none;
}

.hzpa__phone a:hover {
    color: var(--hzpa-accent);
    text-decoration: underline;
}

/* ------------------------------------------------------------ stats ---- */

.hzpa__stats {
    display: flex;
    gap: 26px;
    margin: 0;
    padding: 0 4px;
}

.hzpa__stat {
    text-align: center;
}

.hzpa__stat dt {
    color: var(--hzp-muted);
    font-size: 11.5px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.hzpa__stat dd {
    margin: 2px 0 0;
    color: var(--hzp-ink);
    font-size: 22px;
    font-weight: 700;
    line-height: 1.1;
}

/* ---------------------------------------------------------- actions ---- */

.hzpa__actions {
    display: flex;
    gap: 8px;
}

/* Primary is the only filled control on the page. 46px, inside the
   44–48 the brief asks for, flat, no shadow. */
.hzpa__actions .hzp-btn {
    height: 46px;
    padding: 0 20px;
}

/* ------------------------------------------------------------ about ---- */

.hzpa__h2 {
    margin: 0 0 10px;
    color: var(--hzp-ink);
    font-size: 19px;
    font-weight: 700;
}

.hzpa__about {
    margin-top: 30px;
}

.hzpa__text {
    max-width: 74ch;
    margin: 0 0 8px;
    color: var(--hzp-body);
    font-size: 14.5px;
    line-height: 1.65;
}

.hzpa__chips {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    margin: 12px 0 0;
    padding: 0;
    list-style: none;
}

/* Labels, not controls: no pointer, no hover. */
.hzpa__chip {
    padding: 6px 12px;
    border: 1px solid var(--hzp-line);
    border-radius: 999px;
    background: var(--hzp-fill);
    color: var(--hzp-body);
    font-size: 12.5px;
    font-weight: 500;
}

/* --------------------------------------------------------- listings ---- */

.hzpa__listings {
    margin-top: 34px;
}

.hzpa__pager {
    display: flex;
    gap: 12px;
    margin-top: 20px;
}

.hzpa__pager .hzp-btn {
    height: 44px;
    min-width: 96px;
}

.hzpa__pager [rel="next"] {
    margin-inline-start: auto;
}

.hzpa__tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    margin-bottom: 16px;
    border-bottom: 1px solid var(--hzp-line);
}

/* Active is blue text with an underline that sits on the border, not a
   filled blue pill. */
.hzpa__tab {
    position: relative;
    margin-bottom: -1px;
    padding: 9px 14px;
    border: 0;
    border-bottom: 2px solid transparent;
    background: none;
    color: var(--hzp-body);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
}

.hzpa__tab:hover {
    color: var(--hzp-ink);
}

/* Listed with :hover so the active tab keeps its colour under the cursor;
   the bare .hzpa__tab:hover above is more specific than the class alone. */
.hzpa__tab--on,
.hzpa__tab--on:hover {
    border-bottom-color: var(--hzpa-accent);
    color: var(--hzpa-accent);
}

.hzpa__tab:focus-visible {
    outline: 2px solid var(--hzpa-accent);
    outline-offset: -2px;
}

.hzpa__tabn {
    margin-inline-start: 4px;
    color: var(--hzp-muted);
    font-weight: 600;
}

.hzpa__tab--on .hzpa__tabn {
    color: inherit;
}

/* The card grid.
   .hzp-cards and .hzp-card carry the card language from the search page. What
   changes here is only the axis: the search page gives a card one wide column
   and lays it out as a photograph beside its text, while this page gives it a
   third of the width, where that split leaves no room for the text. So the
   card takes the stacked form it already has at narrow widths — the same
   declarations as the max-width: 767.98px block, applied by column width
   rather than by viewport. No new card, and nothing about the card itself
   changes. */
.hzpa__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}

.hzpa__grid .hzp-card,
.hzpa__grid .hzp-card__media {
    grid-template-columns: minmax(0, 1fr);
}

.hzpa__grid .hzp-card__photo {
    min-height: 0;
    max-height: none;
    aspect-ratio: 3 / 2;
}

.hzpa__grid .hzp-card__thumbs {
    grid-template-rows: none;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    height: 62px;
}

.hzpa__grid > [hidden] {
    display: none;
}

.hzpa__more {
    display: flex;
    justify-content: center;
    margin-top: 20px;
}

.hzpa__more .hzp-btn[hidden] {
    display: none;
}

.hzpa__empty {
    margin: 0;
    padding: 34px 18px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: var(--hzp-fill);
    color: var(--hzp-body);
    font-size: 14.5px;
    text-align: center;
}

.hzpa__empty[hidden] {
    display: none;
}

/* ------------------------------------------------------ responsive ---- */

@media (max-width: 1279.98px) {
    .hzpa__stats {
        gap: 20px;
    }
}

@media (max-width: 1023.98px) {
    /* The actions drop to their own row before the stats do, because a
       wrapped Call agent is worse than a wrapped count. */
    .hzpa__idcard {
        grid-template-columns: auto minmax(0, 1fr);
    }

    .hzpa__stats {
        grid-column: 1 / -1;
        justify-content: flex-start;
        padding: 0;
    }

    .hzpa__actions {
        grid-column: 1 / -1;
    }

    .hzpa__actions .hzp-btn {
        flex: 1;
    }

    .hzpa__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 767.98px) {
    .hzpa__hero {
        height: 160px;
    }

    .hzpa__idcard {
        margin-top: -40px;
        padding: 16px;
        gap: 14px;
    }

    .hzpa__mark {
        width: 58px;
        height: 58px;
        border-radius: 12px;
        font-size: 19px;
    }

    .hzpa__name {
        font-size: 21px;
    }

    .hzpa__stats {
        gap: 22px;
    }

    .hzpa__stat dd {
        font-size: 19px;
    }

    .hzpa__grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzpa__tabs {
        overflow-x: auto;
        flex-wrap: nowrap;
        scrollbar-width: none;
    }

    .hzpa__tabs::-webkit-scrollbar {
        display: none;
    }

    .hzpa__tab {
        white-space: nowrap;
    }
}

@media (max-width: 479.98px) {
    .hzpa__actions {
        flex-wrap: wrap;
    }

    .hzpa__actions .hzp-btn {
        flex: 1 1 100%;
    }
}

/* ====================================================================
   PRIMARY COLOUR TOKEN
   Hagzi's primary becomes #0745D9. property.css defines
   --hagzi-primary in :root and loads first; every rule here carries the
   literal fallback so this file is correct on its own either way.

   Scope is deliberate and narrow: primary calls to action, active and
   selected states, and interactive accents that used to be red. White,
   dark neutral and light grey stay dominant — the blue is the action
   signal, not the surface.

   These rules sit at the end of the stylesheet so they win over the
   earlier declarations without editing them in place.

   THAT LEFT A GAP, WHICH IS NOW CLOSED. Overriding rules instead of
   editing them repaints only what an override actually names, and this
   block named eighteen of the thirty-four sites that read the --hzp-red*
   tokens. The other sixteen went on painting #d92228 underneath a purple
   page: the filter checkboxes' accent-color, the search submit's focus
   ring, the chip, address and map-pin icon strokes, the range thumb's
   glow and the rail arrow's hover border. Rather than edit thirty-four
   sites, the three --hzp-red* tokens at the top of this file now resolve
   to the accent. The overridden and the un-overridden therefore agree,
   and deleting a rule from this block can no longer bring red back.

   The sentence that stood here said the red tokens stayed defined
   because a warning notice still used the tint. There is no such notice.
   The tint's only consumer was .hzp-calc__out, the mortgage panel, which
   this block already repaints.
   ==================================================================== */

.hzp-page,
.hzo,
.hzs,
.hztd {
    --hzp-accent: var(--hagzi-primary, #0745D9);
    --hzp-accent-dark: var(--hagzi-primary-dark, #0638B0);

    /* A very light wash of the primary, for the calculator's output panel
       and the financing banner. Mixed from the token where the browser
       supports it, with a flat fallback for those that do not. */
    --hzp-accent-wash: #EEF3FF;
    --hzp-accent-line: #C4D4FA;
}

/* ------------------------------------------------- primary buttons ---- */

.hzp-page .hzp-btn--accent {
    border-color: var(--hzp-accent);
    background: var(--hzp-accent);
    color: #ffffff;
}

.hzp-page .hzp-btn--accent:hover {
    border-color: var(--hzp-accent-dark);
    background: var(--hzp-accent-dark);
}

.hzp-page .hzp-btn--accent svg {
    stroke: #ffffff;
}

.hzp-page .hzp-btn:focus-visible,
.hzp-page .hzp-select__el:focus-visible {
    outline: 2px solid var(--hzp-accent);
    outline-offset: 2px;
}

/* Call Agent is the one primary action in the contact card; the other
   three stay white with a neutral border and dark text, which is what
   .hzp-btn already gives them. Stated here so a later edit does not
   quietly promote one of them. */
.hzp-page .hzp-contactcard__actions .hzp-btn:not(.hzp-btn--accent) {
    border-color: var(--hzp-line-strong);
    background: #ffffff;
    color: var(--hzp-ink);
}

.hzp-page .hzp-contactcard__actions .hzp-btn:not(.hzp-btn--accent):hover {
    border-color: var(--hzp-accent);
    color: var(--hzp-accent);
}

/* Active state: the count of filters currently applied. */
.hzp-page .hzp-fb__count {
    background: var(--hzp-accent);
}

.hzp-page .hzp-range__el:focus,
.hzp-page .hzp-input:focus-within {
    border-color: var(--hzp-accent);
}

/* --------------------------------------------------------- payment ---- */

.hzp-page .hzp-paypill {
    background: #ffffff;
    border: 1px solid #d1d5db;
    color: #374151;
}

.hzp-page .hzp-paypill svg {
    stroke: currentColor;
}

.hzp-page .hzp-paypill:hover {
    background: #ffffff;
    border-color: #9ca3af;
    color: #374151;
}

.hzp-page .hzp-paypill:focus-visible {
    outline-color: var(--hzp-accent);
}

/* ---------------------------------------------- the loan calculator ---- */
/* Structure unchanged. Its interactive parts carry the primary instead
   of red, and the monthly figure stays the largest thing in the panel. */

.hzp-page .hzp-calc__out {
    border-color: var(--hzp-accent-line);
    background: var(--hzp-accent-wash);
}

.hzp-page .hzp-calc__outlabel {
    color: var(--hzp-body);
}

.hzp-page .hzp-calc__amount {
    color: var(--hzp-accent);
}

.hzp-page .hzp-calc__how summary {
    color: var(--hzp-accent);
}

.hzp-page .hzp-calc__how summary:focus-visible {
    outline-color: var(--hzp-accent);
}

.hzp-page .hzp-slider::-webkit-slider-thumb {
    background: var(--hzp-accent);
}

.hzp-page .hzp-slider::-moz-range-thumb {
    background: var(--hzp-accent);
}

.hzp-page .hzp-slider:focus-visible {
    outline-color: var(--hzp-accent);
}

/* ------------------------------------------- interactive text accents -- */
/* Everything that reddened on hover now takes the primary, so no stray
   red survives next to it. */

.hzp-page .hzp-card__addr a:hover,
.hzp-page .hzp-side__links a:hover,
.hzp-page .hzp-crumbs a:hover,
.hzp-page .hzp-mini__addr a:hover,
.hzp-page .hzp-agentcard__line a:hover,
.hzp-page .hzp-rail__all:hover,
.hzp-page .hzp-rail__nav:hover:not([disabled]) {
    color: var(--hzp-accent);
}

.hzp-page .hzp-agentcard__line svg {
    stroke: var(--hzp-accent);
}

/* Body copy inside the panel whose ground is now the light blue wash. Its
   dark red predates the token and is the one leftover that reads as a mistake
   rather than as an accent. The warning notice is untouched: it is red because
   it is a warning. */
.hzp-page .hzp-calc__how p {
    color: var(--hzp-body);
}

/* ==========================================================================
   MAP MODE  --  the split view
   ==========================================================================

   Reached at ?view=map, which carries the filters, the term and the sort, so
   the mode is a way of looking at a result set and never a different result
   set. Both halves are rendered from the same collection in the same request.

   Four regions, three of which come from markup that cannot move: the header
   is inside the results column, and the chips are inside the map partial
   because the map is drawn FROM them. Named areas put each region where it
   reads best while it stays where it belongs in the document.

        head  head         heading, count and sort, full width
        chips chips        the district filter, under the count it changes
        list  map          the card grid, and the map beside it

   The columns are logical, so Arabic needs no rule of its own: the first
   column is the inline start, which is the right-hand side there, and the map
   takes the other one.
   ========================================================================== */

html.hzp-js .hzp-split {
    display: grid;
    /* Full width: this element is not given .hzp-shell in map mode. */
    width: 100%;
    /* Even. The map is half the page, as a map worth looking at has to be. */
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    grid-template-areas:
        "head  head"
        "chips chips"
        "list  map";
    align-items: start;
    gap: 14px 24px;
    padding-top: 18px;
    padding-bottom: 0;
}

/*
    The padding the container used to give, put back on the regions instead. The
    map is the only thing that touches the edge; text never does.
*/
html.hzp-js .hzp-split .hzp-results__top,
html.hzp-js .hzp-split .hzpm__bar {
    padding-inline: 24px;
}

html.hzp-js .hzp-split .hzp-results__body {
    padding-inline-start: 24px;
    padding-bottom: 48px;
}

/*
    Two wrappers give their children to the grid instead of boxing them. The
    alternative was moving the markup, and the markup belongs where it is: the
    header is part of the results column in every other mode, and the chips are
    the map's own data.
*/
html.hzp-js .hzp-split .hzpm,
html.hzp-js .hzp-split .hzp-results {
    display: contents;
}

html.hzp-js .hzp-split .hzpm__bar {
    grid-area: chips;
}

html.hzp-js .hzp-split .hzp-results__top {
    grid-area: head;
}

html.hzp-js .hzp-split .hzp-results__body {
    grid-area: list;
    min-width: 0;
}

/*
    Full height, held in place. --hzp-split-top is the filter bar's measured
    height, written on the root element rather than on this one so that the Vue
    mount -- which replaces the markup inside #app -- cannot discard it.

    Two height declarations: vh for browsers without dvh, dvh for those with
    it, so a mobile browser's collapsing toolbar does not leave the map short.
*/
/*
    Squared off against the glass and rounded on the side that faces the
    results, in logical corners so Arabic mirrors without a second rule. The
    outer border goes too: there is nothing beyond it to be separated from.
*/
html.hzp-js .hzp-split .hzpm-pane {
    grid-area: map;
    border-inline-end: 0;
    border-start-end-radius: 0;
    border-end-end-radius: 0;
    position: sticky;
    top: calc(var(--hzp-split-top, 64px) + 12px);
    height: calc(100vh - var(--hzp-split-top, 64px) - 28px);
    height: calc(100dvh - var(--hzp-split-top, 64px) - 28px);
    min-height: 460px;
}

/*
    The card, stood up.

    The partial is owned by another session and is used by four other pages, so
    nothing about it is edited: the wide card is a two-column grid on .hzp-card,
    and one column here puts the photograph above the body. The thumbnail rail
    is a 64px column beside the photo and has no room in a half-width card, so
    it is not shown in this mode; every one of those photographs is on the
    listing the card links to.
*/
html.hzp-js .hzp-split .hzp-cards {
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
}

html.hzp-js .hzp-split .hzp-card,
html.hzp-js .hzp-split .hzp-card__media {
    grid-template-columns: minmax(0, 1fr);
}

html.hzp-js .hzp-split .hzp-card__thumbs {
    display: none;
}

/*
    And the description. It is clamped to two lines, which in a half-width card
    means it stops mid-sentence -- length without information. display: none
    takes it out of the accessibility tree as well as the layout, because a
    truncated sentence read aloud is worse than one that was never offered.

    Only here. The full-width list, favourites, the agent profile and the
    similar rail all keep it: this is scoped to .hzp-split, which exists on no
    other page and in no other mode.
*/
html.hzp-js .hzp-split .hzp-card__desc {
    display: none;
}

html.hzp-js .hzp-split .hzp-card__photo {
    min-height: 0;
    height: 186px;
    max-height: none;
}

/* The counted sentence the map reveals when a district is chosen. Sits with the
   results, not with the map, because it describes the column. */
.hzp-split__note {
    margin: 0 0 12px;
    padding: 9px 12px;
    border: 1px solid var(--hzp-accent-line, #C4D4FA);
    border-radius: var(--hzp-radius-sm);
    background: var(--hzp-accent-wash, #EEF3FF);
    color: var(--hzp-ink);
    font-size: 13px;
}

/* The mode switch in the sub-bar reads as a link, since it goes somewhere. */
.hzp-view-switch {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    min-width: 220px;
    min-height: 46px;
    margin-inline: 0;
    padding: 3px;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 12px;
    background: #ffffff;
}

.hzp-subbar__view {
    flex: 1 1 50%;
    justify-content: center;
    gap: 6px;
    min-height: 38px;
    padding: 7px 14px;
    white-space: nowrap;
    border-radius: 9px;
    color: var(--hzp-body);
    font-weight: 600;
    text-decoration: none;
}

.hzp-subbar__view:hover {
    color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    background: #ffffff;
}

.hzp-subbar__view svg {
    stroke: currentColor;
}

.hzp-subbar__view span {
    text-decoration: none;
}

.hzp-subbar__view[aria-current="page"] {
    background: var(--hzp-accent-wash, #EEF3FF);
    color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    box-shadow: inset 0 0 0 2px currentColor;
    font-weight: 700;
}

@media (max-width: 767.98px) {
    .hzp-cards--grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-view-switch {
        width: 100%;
        min-width: 0;
        margin-inline: 0;
    }

    .hzp-subbar__view {
        flex: 1 1 50%;
        justify-content: center;
    }
}

@media (max-width: 479.98px) {
    .hzp-results__head {
        grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr);
        gap: 14px 8px;
    }

    .hzp-sort__el {
        min-width: 0;
        padding-inline: 28px;
        font-size: 12px;
        text-overflow: ellipsis;
    }

    .hzp-sort__control .hzp-sort__icon {
        inset-inline-start: 8px;
        width: 16px;
        height: 16px;
    }

    .hzp-sort__control .hzp-sort__chevron {
        inset-inline-end: 6px;
        width: 14px;
        height: 14px;
    }

    .hzp-subbar__view {
        gap: 4px;
        padding-inline: 4px;
        font-size: 12px;
    }

    .hzp-subbar__view svg {
        width: 14px;
        height: 14px;
        flex-shrink: 0;
    }
}

/* Compact icon-only listing layout controls; link names remain accessible. */
.hzp-results__head > .hzp-view-switch {
    width: max-content;
    min-width: 0;
    justify-self: end;
}

.hzp-view-switch .hzp-subbar__view {
    flex: 0 0 42px;
    width: 42px;
    padding: 7px;
}

/*
    One column below 900, map above the results.

    A split needs two columns' worth of width; at 390 there is one. The map
    takes a share of the viewport and the results run underneath in the
    ordinary flow -- one scroll, no sheet to drag, the chips reachable, and the
    way back to the list still sitting in the sub-bar above it. A bottom sheet
    over a full-screen map would need a scripted drag surface and a second
    scroll context to show a map that marks districts rather than addresses; it
    would be more machinery for no more information.
*/
@media (max-width: 899.98px) {
    html.hzp-js .hzp-split {
        grid-template-columns: minmax(0, 1fr);
        grid-template-areas:
            "head"
            "chips"
            "map"
            "list";
        gap: 12px;
    }

    /* Both sides now: there is no map beside the cards to leave room for. */
    html.hzp-js .hzp-split .hzp-results__body {
        padding-inline: 16px 16px;
    }

    html.hzp-js .hzp-split .hzp-results__top,
    html.hzp-js .hzp-split .hzpm__bar {
        padding-inline: 16px;
    }

    /* One column, so the map spans it and squares off on both sides. */
    html.hzp-js .hzp-split .hzpm-pane {
        border-inline: 0;
        border-radius: 0;
        position: static;
        height: 46vh;
        height: 46dvh;
        min-height: 300px;
    }
}

/*
    The footer, in map mode only.

    A map that holds the viewport's height leaves the page without a natural
    bottom, and a footer under it is a long scroll to a set of links that has
    nothing to do with what the reader is doing. The list view keeps it, and is
    one click away in the sub-bar.

    The class is written by the search page's own script when the split is on
    the page. That is what makes the no-script case correct for free: with no
    scripting there is no map, the reader gets the plain list, and the plain
    list keeps its footer.
*/
body.hzp-mapmode .hzf {
    display: none;
}

/* ------------------------------------------- and when the script did not run */

/*
    No class, so none of the rules above are in force and there is nothing to
    undo: the cards are the wide cards, in one column, with their descriptions,
    exactly as on the plain list. Only three things need saying.
*/
html:not(.hzp-js) .hzpm,
html:not(.hzp-js) .hzpm-pane,
html:not(.hzp-js) .hzp-subbar__view {
    display: none;
}

/* The container the full-bleed mode declined to take. */
html:not(.hzp-js) .hzp-split {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 22px 24px 48px;
}

/* ======================================================================
   FILTER PILLS — the single-choice facets in the More filters panel

   A pill is a radio and its label, never a div with a click handler. The
   panel has a working no-script path and a native radio group is what
   keeps it, along with the one tab stop, the arrow-key walk and the group
   semantics that the <select> these replaced was giving for free.

   The input is clipped rather than display:none. A display:none radio is
   out of the tab order and out of the accessibility tree, which would
   cost exactly what this pattern exists to keep. It sits immediately
   before its own label so the checked and focus states are drawable with
   an adjacent-sibling selector and need no script.

   NAMED .hzp-fpill, NOT .hzp-pill. The short name was already taken: the
   listing card's "see monthly" badge is a .hzp-pill, and a rule written
   later in this sheet under that name silently restyles it wherever a
   card appears. Nothing here may be renamed back.
   ====================================================================== */

/*
    ONE GROUP PER ROW.

    The two grids this overrides -- two-up for the pairs sections, four-up
    for the building section -- were laid out for controls that were all
    menus and all one line tall. A pill row is as tall as its options need,
    and in a half or a quarter track it wraps for want of width rather than
    for want of options: Bathrooms' four pills overrun a 336px column by
    about forty of them, which put "5+ baths" on a line by itself.
*/
.hzp-fb__panel .hzp-fb__sec .hzp-fb__secgrid {
    grid-template-columns: 1fr;
    gap: 18px;
}

/*
    THE FILTER LABELS, INSIDE THE PANEL ONLY.

    16px rather than 12px. With the section captions gone these are the only
    hierarchy left in the panel, so they carry the weight the captions used
    to; 12px was sized to sit under one.

    Scoped, and deliberately so: .hzp-field__label is shared with the labels
    on the bar above and with every field on the valuation page, and neither
    was asked to change. The rule they share is left exactly as it is.
*/
.hzp-fb__panel .hzp-field__label {
    font-size: 16px;
}

/*
    The label-to-control gap grows with the label. The number that matters is
    not this one on its own but its distance from the 18px either side of a
    separator: a label has to read as belonging to the control under it
    rather than to the rule above it, and 8 against 37 keeps that obvious
    now that the text is a third larger.
*/
.hzp-fb__panel .hzp-fb__group {
    gap: 8px;
}

/*
    SEPARATORS INSTEAD OF SECTION HEADINGS.

    "Property details", "Status" and "Building and ownership" are gone, and
    with them the spacing that said a new group was starting. A hairline
    between consecutive filters does that job instead.

    Drawn as a top border on the FOLLOWING block, which is what buys the
    two rules a bottom border would not: nothing above the first filter,
    and nothing hard against the sticky footer under the last one.

    18px above the line and 18px below it, the same either side and the
    same as the row gap, so the rhythm does not change depending on whether
    two filters share a container or straddle two of them. It was 16 while
    the labels were 12px and read tight once they grew to 16.
*/
.hzp-fb__panel .hzp-fb__secgrid > .hzp-fb__group + .hzp-fb__group {
    border-top: 1px solid var(--hzp-line);
    padding-top: 18px;
}

.hzp-fb__panel .hzp-fb__sec + .hzp-fb__sec {
    margin-top: 18px;
    padding-top: 18px;
    border-top: 1px solid var(--hzp-line);
}

/*
    The two ranges -- Property size and Year built -- are the panel's only
    non-pill controls, and they are now the same control twice: a from box,
    a dash and a to box. One cap for both, so they are the same size as each
    other rather than one full-width pair beside a single small box, and so
    a full-width row does not stretch either across 688px.
*/
.hzp-fb__panel .hzp-fb__group .hzp-range {
    max-width: 336px;
}

/*
    The button's number is a preview of the pending selection, fetched from
    the page that selection would land on. When that fetch cannot be
    trusted the script marks the button and the wordless label takes over
    -- the same swap the no-script path already uses, and for the same
    reason: a count that no longer describes the controls is worse than no
    count at all.
*/
html.hzp-js .hzp-fb__show.is-nocount .hzp-fb__shownum {
    display: none;
}

html.hzp-js .hzp-fb__show.is-nocount .hzp-fb__showplain {
    display: inline;
}

.hzp-fpills {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    min-width: 0;
}

.hzp-fpill__input {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
}

/*
    max-width with a label that is allowed to wrap, together. Arabic runs
    longer than English and the panel is 310px wide inside at a 390px
    viewport, so a pill that cannot fit its label breaks the line within
    its own border instead of pushing a scrollbar across the page.
*/
.hzp-fpill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    max-width: 100%;
    min-height: 32px;
    border: 1px solid var(--hzp-line-strong);
    border-radius: 999px;
    padding: 4px 14px;
    color: var(--hzp-body);
    background: #ffffff;
    font-size: 13px;
    line-height: 1.35;
    text-align: center;
    overflow-wrap: break-word;
    cursor: pointer;
    transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}

.hzp-fpill:hover {
    border-color: var(--hzp-accent-line, #C4D4FA);
    background: var(--hzp-accent-wash, #EEF3FF);
}

.hzp-fpill__input:checked + .hzp-fpill {
    border-color: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    background: var(--hzp-accent, var(--hagzi-primary, #0745D9));
    color: #ffffff;
}

/*
    The ring is drawn on the label because the input it belongs to is a
    1px box clipped out of sight. Same outline the page already gives
    .hzp-btn and .hzp-select__el, so a keyboard walk down the panel does
    not change appearance halfway through it.
*/
.hzp-fpill__input:focus-visible + .hzp-fpill {
    outline: 2px solid var(--hzp-accent, var(--hagzi-primary, #0745D9));
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    .hzp-fpill {
        transition: none;
    }
}

/*
    ==========================================================================
    A LISTING WITH NO PHOTOGRAPH
    ==========================================================================

    The panel that stands where the gallery would be when a seller has
    uploaded nothing.

    It carried no rules of its own and borrowed .hzp-card__photo--none, which
    is written for a 428x256 card tile and contributes no height. On the detail
    page that rendered as a thin grey strip under the breadcrumbs, which reads
    as a broken image rather than as a stated absence — the opposite of what
    the panel is for.

    DASHED, AND DELIBERATELY. A solid panel carrying the same border and fill
    as the price and specification panels below it says "here is a thing". A
    dashed outline is the ordinary way of saying "this is where a thing would
    go", and it is the one cue that separates an empty state from a failure
    without spending a word on it.

    SHORTER THAN THE GALLERY IT REPLACES. The gallery stage is 16/9, which at
    the width of this column is a little over five hundred pixels tall. That
    much empty dashed box is its own kind of broken, so this takes enough
    height to be unmistakably intentional and no more. The consequence — a
    listing gets taller when it gains its first photograph — is the right way
    round: the page grows when there is something to show.

    Nothing here needs a mirrored rule in property-rtl.css. The box centres on
    both axes and the only directional thing inside it is the sentence, which
    follows the document direction by itself.
*/
.hzp-detail .hzp-dphoto-none {
    display: grid;
    place-items: center;
    align-content: center;
    gap: 10px;
    min-height: 300px;
    border-style: dashed;
    background: var(--hzp-fill-soft);
    text-align: center;
}

.hzp-detail .hzp-dphoto-none__mark {
    width: 34px;
    height: 34px;
    fill: none;
    stroke: var(--hzp-muted);
    stroke-width: 1.5;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-detail .hzp-dphoto-none__text {
    margin: 0;
    color: var(--hzp-muted);
    font-size: 15px;
}

@media (max-width: 767.98px) {
    .hzp-detail .hzp-dphoto-none {
        min-height: 210px;
    }

    .hzp-detail .hzp-dphoto-none__mark {
        width: 30px;
        height: 30px;
    }
}

/*
    ==========================================================================
    SELLER PROFILE  —  the parts /showrooms did not already have
    ==========================================================================

    The profile at /property/sellers/{name}-{id} reuses the .hzpa__ block this
    file already defines for the agent page, because it is the same layout
    doing the same job for one seller instead of for the platform. Only the
    three things that page has no equivalent of are below.

    .hzpa__stats is deliberately not reused. The agent page prints active, for
    sale and for rent counts; a seller profile does not, because a count beside
    a name is read as a credibility signal and the reader can already count the
    cards.
*/

/*
    Whether this is a private seller or a partner agency, directly under the
    name. Muted and small: it is context for reading the rest of the page, not
    a badge, and it must not compete with the name above it.
*/
.hzpa__kind {
    margin: 2px 0 0;
    color: var(--hzp-muted);
    font-size: 14px;
}

/*
    The line explaining that per-property contact details are on each listing.
    It sits under the actions because it qualifies them — the number above is
    the account's, not this or that property's.
*/
.hzpa__note {
    margin: 10px 0 0;
    color: var(--hzp-muted);
    font-size: 13px;
    line-height: 1.5;
}

/*
    Shown instead of the call and message controls when the account has no
    telephone number on it. Given a soft fill and a border so it reads as a
    deliberate notice rather than as a caption that lost its buttons — this is
    the state every account on this channel is in today, so it is the common
    case and not an edge one.

    Logical properties throughout, so the Arabic page mirrors it without a rule
    of its own.
*/
.hzpa__nocontact {
    margin: 14px 0 0;
    padding: 12px 14px;
    border: 1px solid var(--hzp-line);
    border-radius: var(--hzp-radius);
    background: var(--hzp-fill-soft);
    color: var(--hzp-muted);
    font-size: 13px;
    line-height: 1.55;
}

/*
    Both of the elements above are direct children of .hzpa__idcard, which is a
    grid, so they are placed by it rather than flowing under the buttons as the
    markup reads.

    That placement is what made the profile scroll sideways on a 390px screen:
    the card's first column is `auto`, meaning content-sized with no lower
    bound, and an auto-placed sentence sized it to the sentence. The card's
    content came out 396px wide inside a 340px box and the whole document
    inherited the 31px of overflow. The pre-existing children never hit this
    because the mobile rules at 1023.98px explicitly span .hzpa__stats and
    .hzpa__actions across the row; these two were added later and were never
    added to that list.

    Spanning the full row is the same fix, applied at every width rather than
    only below 1024px: a note that qualifies the buttons belongs under them,
    not beside them, on a wide screen too. min-inline-size:0 keeps the track
    from being sized by an unbreakable run of text.
*/
.hzpa__note,
.hzpa__nocontact {
    grid-column: 1 / -1;
    min-inline-size: 0;
}

/*
    The card's seller chip is a link now that it names a real account with a
    profile page behind it, rather than a "HZ" placeholder standing in for
    nobody. The anchor replaces the span in the same slot and inherits the
    chip's existing layout, so this adds only what a link needs: the colour it
    would otherwise take from the user-agent stylesheet, and an underline on
    hover and keyboard focus so it is discoverable as a link without being
    underlined at rest among eleven other cards.
*/
a.hzp-agent--link {
    color: inherit;
    text-decoration: none;
}

a.hzp-agent--link:hover .hzp-agent__name,
a.hzp-agent--link:focus-visible .hzp-agent__name {
    text-decoration: underline;
}

/*
    The thumbnail strip on a card inside .hzpa__grid — the seller profile and
    the showrooms page.

    The rule above it declares `grid-template-rows: none` with `height: 62px`,
    intending a single 62px-tall row of three thumbnails under the photo. What
    it produces is an AUTO-sized implicit row: `none` leaves the row track
    indefinite, so `.hzp-card__thumb`'s `height: 100%` has nothing to resolve
    against and falls back to the image's intrinsic height. At the card widths
    this grid produces that is roughly 120-155px, so the images render at more
    than twice the strip's height and spill out of it — `height` on the
    container clamps nothing, because overflow is visible and the track is not
    definite. On the profile that put the thumbnails over the favourite control
    and the "See monthly cost" pill, with the title and spec line running
    underneath them.

    The strip works everywhere else because everywhere else the rows are
    definite: the default card puts the thumbnails in a 64px column with
    `grid-template-rows: repeat(3, minmax(0, 1fr))`, which resolves, and
    `object-fit: cover` then crops rather than stretches. Nothing was wrong
    with the card; this container asked for a row size and then withheld it.

    The bug has been latent since the showrooms grid was written and only
    surfaced now because the seller profile is the first page to render a
    multi-photograph card in this container — every showrooms card currently
    has a single image and takes the --single branch, which has no strip at
    all.

    Fixed here rather than on the shared card, because the shared card is
    correct in the two contexts that already use it and this selector cannot
    reach them: search and the home page carry .hzp-cards without .hzpa__grid.

    NOTE: the same defect exists in the unscoped `.hzp-card__thumbs` rule
    inside `@media (max-width: 767.98px)` — identical `grid-template-rows:
    none` with `height: 62px`. It is latent for the same reason (no
    multi-photograph card renders there yet) and is deliberately NOT changed
    here, because that rule is shared with search and the detail page's split
    view and another session is working in this theme. It wants the same
    one-line fix.
*/
.hzpa__grid .hzp-card__thumbs {
    grid-template-rows: 62px;
    overflow: hidden;
}

/*
    The same defect as above, in the unscoped mobile rule.

    The note attached to the .hzpa__grid fix called this one latent. It is not:
    measuring search at 390 found three cards whose thumbnails overhang their
    media box by 49px, over the card body beneath. It read as latent only
    because the profile was checked first and search's desktop widths — where
    the strip is a 64px column with definite rows — are correct.

    Identical cause, identical fix: `grid-template-rows: none` alongside
    `height: 62px` leaves the row indefinite, `.hzp-card__thumb`'s
    `height: 100%` cannot resolve against it, and the image falls back to its
    intrinsic height. Naming the track restores what `height: 62px` was already
    asking for, and `object-fit: cover` then crops as it does everywhere else.

    Scoped to the same breakpoint as the rule it corrects, so the desktop
    column layout is untouched. The detail page's split view is unaffected: it
    hides the strip outright at a higher specificity.
*/
@media (max-width: 767.98px) {
    .hzp-card__thumbs {
        grid-template-rows: 62px;
        overflow: hidden;
    }
}

/* ====================================================================
   EVEN CARDS IN A ROW
   Three cards in the profile's Live listings row ended at three
   different points. The height was never the problem in itself — it was
   three separate causes stacking, so each is addressed rather than a
   height being imposed on the row.
   ==================================================================== */

/*
    1. The card fills its cell.

    A grid item stretches by default, so the <li> was already the row's full
    height — but the card inside it was not told to fill the <li>, so it sat at
    its content height and the <li> held empty space beneath. `.hzp-card__foot`
    has carried `margin-top: auto` all along; it did nothing because the body it
    lives in had no spare height to push against. Giving the card the row's
    height and making the body the flexible row is what finally lets that
    existing rule work, which is why the actions line up without a rule of their
    own.
*/
.hzp-cards__item {
    display: grid;
}

.hzp-cards__item > .hzp-card {
    block-size: 100%;
}

.hzpa__grid .hzp-card {
    grid-template-rows: auto minmax(0, 1fr);
}

/*
    2. The media region occupies the same space whatever is in it.

    It previously sized itself to its contents, so three cards produced three
    different media heights: a photograph alone, a photograph plus a strip, and
    the "no photograph yet" panel, which is shorter than either. No amount of
    evening out below can survive that, because the difference is above the
    text.

    The media box is now a fixed 3:2 block and the rows divide it: the
    photograph takes what is left after the 62px strip, or all of it when there
    is no strip. Every card's media is therefore exactly two-thirds of the card
    width tall — including the empty state, which reserves the same room as a
    photograph rather than collapsing and pulling its card up.

    `object-fit: cover` on the image means the photograph is cropped to the box
    rather than distorted, which is the same treatment it already had.
*/
.hzpa__grid .hzp-card__media {
    aspect-ratio: 3 / 2;
    grid-template-rows: minmax(0, 1fr) 62px;
}

.hzpa__grid .hzp-card__media--single {
    grid-template-rows: minmax(0, 1fr);
}

.hzpa__grid .hzp-card__medialink {
    block-size: 100%;
}

.hzpa__grid .hzp-card__photo {
    aspect-ratio: auto;
    block-size: 100%;
}

/*
    3. The strip fills its row whatever the thumbnail count.

    It was three fixed columns, so a listing with three photographs (one main,
    two thumbnails) filled two of them and left the third empty — the "narrow
    band of partial images" rather than a tidy row. The count is not fixed and
    should not be assumed: auto-flow columns divide the row evenly between
    however many thumbnails there are, so two sit as halves and three as thirds.
*/
.hzpa__grid .hzp-card__thumbs {
    grid-template-columns: none;
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
}


/* ====================================================================
   SELLER PROFILE: IDENTITY HEADER, REDESIGNED
   ====================================================================

   The header used to place the call controls in one auto column and then
   span the explanatory sentence across the whole row underneath. On the
   common case -- an account with no telephone number, which is every member
   account on this channel today -- that produced a header with a name on the
   left, nothing on the right, and a full-width grey band beneath.

   Contact is now one column that owns all of it: the number, the buttons and
   the sentence that qualifies them. The band becomes a notice in a narrow
   column, which is what it always was.

   Logical properties throughout, so the Arabic page mirrors without a rule of
   its own.
   ==================================================================== */

/* ===== seller profile: identity header, redesigned ===== */

.hzpa__idcard {
    /* Was `auto minmax(0,1fr) auto auto` for mark / id / stats / actions.
       Stats were never rendered on this page and actions are now inside the
       contact column, so three tracks describe what is actually there. */
    grid-template-columns: auto minmax(0, 1fr) auto;

    /* Top-aligned rather than centred: the contact column is taller than the
       name block whenever it carries buttons, and centring made the name
       drift down the card as the column grew. */
    align-items: start;
    gap: 20px 24px;
}

.hzpa__id {
    min-inline-size: 0;
}

/* The account's facts, as a list. No bullets and no indent: it is a list for
   the benefit of a screen reader, not visually. */
.hzpa__facts {
    display: grid;
    gap: 4px;
    margin: 10px 0 0;
    padding: 0;
    list-style: none;
}

/* --------------------------------------------------------- contact ---- */

.hzpa__contact {
    display: grid;
    align-content: start;
    gap: 0;

    /* Wide enough for two buttons side by side, narrow enough that the notice
       reads as a panel rather than as a banner. */
    inline-size: min(304px, 100%);
    justify-self: end;
    min-inline-size: 0;
}

.hzpa__contactlabel {
    margin: 0 0 8px;
    color: var(--hzp-muted);
    font-size: 11.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
}

/* Inside the panel the number sits above its own buttons, so it needs the
   spacing the standalone paragraph had, not the 2px that stacked it under a
   join date. */
.hzpa__contact .hzpa__phone {
    margin: 0 0 10px;
    font-size: 15px;
}

.hzpa__contact .hzpa__actions {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
    gap: 8px;
}

/* The buttons are equal halves of the column rather than content-width, so
   Call and WhatsApp line up regardless of how long the words are in either
   language. */
.hzpa__contact .hzpa__actions .hzp-btn {
    padding: 0 12px;
    min-inline-size: 0;
}

.hzpa__contact .hzpa__note {
    margin: 10px 0 0;
}

/* The no-number notice keeps its own border and fill; the column around it is
   deliberately unstyled so the two do not nest into a double frame. */
.hzpa__contact .hzpa__nocontact {
    margin: 0;
}

/* The full-row span these two used to need applied when they were direct
   children of the card's grid. They are inside .hzpa__contact now, so the
   rule is scoped to the case it was written for and stops applying to the
   case it was not. */
.hzpa__idcard > .hzpa__note,
.hzpa__idcard > .hzpa__nocontact {
    grid-column: 1 / -1;
    min-inline-size: 0;
}

/* ----------------------------------------------------------- about ---- */

/* .hzpa__about, .hzpa__h2 and .hzpa__text already exist above; only the
   spacing below the redesigned header is new. */
.hzpa__about {
    margin-top: 26px;
}

/* ------------------------------------------------------ responsive ---- */

@media (max-width: 1023.98px) {
    /* Contact drops to its own full-width row under the name, and stretches,
       so the buttons stay comfortably tappable rather than staying in a 304px
       column pinned to one edge. */
    .hzpa__contact {
        grid-column: 1 / -1;
        inline-size: 100%;
        justify-self: stretch;
    }
}

@media (max-width: 479.98px) {
    /* Below this the two buttons side by side start truncating in Arabic, so
       they stack. Overrides the column flow set above. */
    .hzpa__contact .hzpa__actions {
        grid-auto-flow: row;
    }
}

/* ==================================================== seller avatar photo === */

/*
 * The member's uploaded picture, standing in for the initial in a seller tile.
 *
 * It carries the tile's own class as well as this one, so its size and its
 * corner radius come from whichever tile it is in — 30px on a card, 44px in
 * "Listed by", 76px on a profile header — and this rule only says what differs
 * between a photograph and a letter.
 *
 * `object-fit: cover` is what stops a tall or a very wide photograph being
 * squashed into the square: the image fills the box and the overflow is
 * cropped, rather than the aspect ratio being bent to fit. It matters on the
 * fallback path in particular, where PropertyAvatar could not write a
 * derivative and is serving the member's original at its own proportions.
 *
 * `display: block` overrides the `display: grid` the tile classes set to centre
 * their letter, which on a replaced element would leave a baseline gap under
 * the image.
 */
.hzp-avatarphoto {
    display: block;
    object-fit: cover;
    /* A neutral ground rather than the tile's ink, so a picture that fails to
       load leaves a quiet square instead of a black one. */
    background: var(--hzp-line, #e6e6ea);
}

/* ============================== listed-by card, without the phone row ===== */

/*
 * The profile link now follows the identity row directly.
 *
 * It never carried a margin of its own: the printed telephone row sat between
 * the two and its `margin: 12px 0` did the spacing on both sides. With that row
 * gone the button would butt straight up against the seller's name, so the gap
 * it used to inherit is stated here instead.
 *
 * Scoped to this card. `.hzp-btn--wide` is also the enquiry panel's button
 * class, and that panel spaces its own actions with a flex gap that this must
 * not add to.
 */
.hzp-agentcard .hzp-btn--wide {
    margin-block-start: 14px;
}

/* ============================ identity header, with no contact panel ====== */

/*
 * The header when the member has no account telephone number.
 *
 * The contact panel is not rendered at all in that case; sellers/show.blade.php
 * says why. What is left has to be told it is a two-track header, because the
 * three-track template does not collapse on its own: the empty third track
 * costs nothing, but the 24px column gap in front of it stays, and the result
 * is a visible hole at the end of the row rather than a name block that runs
 * the width of the card.
 *
 * Two classes so source order cannot undo it, whatever else is appended here
 * later. Below 1024px the header is already two columns and the contact panel
 * already spanned its own row, so this changes nothing at that width.
 */
.hzpa__idcard.hzpa__idcard--nocontact {
    grid-template-columns: auto minmax(0, 1fr);
}

/* ========================================================================== 
   Mobile SERP primary-filter chips
   ========================================================================== 

   Desktop keeps the existing filter bar because this wrapper has no box there.
   On phones the same form controls become a horizontally scrolling sequence:
   listing type, property type, catalogue city, neighbourhood, bedrooms, price.
   No duplicate controls or query names are introduced, so native submission,
   the delegated filter script and no-JS behaviour keep their existing contract.
*/
.hzp-fb__basic-strip {
    display: contents;
}

.hzp-fb__city {
    display: none;
}

@media (max-width: 720px) {
    .hzp-fb {
        align-items: center;
        gap: 8px;
    }

    .hzp-fb__basic-strip {
        display: flex;
        flex: 1 1 100%;
        order: 1;
        align-items: center;
        gap: 8px;
        width: 100%;
        min-width: 0;
        padding: 1px 0 3px;
        overflow-x: auto;
        overflow-y: hidden;
        overscroll-behavior-inline: contain;
        scroll-snap-type: inline proximity;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }

    .hzp-fb__basic-strip::-webkit-scrollbar {
        display: none;
    }

    /* The row owns no box on mobile; its real fields join the chip rail. */
    .hzp-fb__basic-strip .hzp-fb__row,
    .hzp-fb.hzp-fb--set .hzp-fb__basic-strip .hzp-fb__row,
    .hzp-fb:has(.hzp-fb__more[open]) .hzp-fb__basic-strip .hzp-fb__row {
        display: contents !important;
    }

    .hzp-fb__basic-strip .hzp-field {
        flex: 0 0 auto;
        max-width: none;
        gap: 0;
        scroll-snap-align: start;
    }

    /* Keep labels available to assistive technology without spending a row. */
    .hzp-fb__basic-strip .hzp-field__label {
        position: absolute;
        top: 0;
        left: 0;
        width: 1px;
        height: 1px;
        margin: -1px;
        padding: 0;
        overflow: hidden;
        border: 0;
        clip: rect(0 0 0 0);
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .hzp-fb__basic-strip .hzp-select,
    .hzp-fb__basic-strip .hzp-input,
    .hzp-fb__city,
    .hzp-fb__basic-strip .hzp-range__el {
        height: 42px;
        border-color: var(--hz-field-line, #80868f);
        border-radius: 999px;
        background: #ffffff;
        box-shadow: 0 1px 2px rgba(18, 20, 26, 0.05);
    }

    .hzp-fb__basic-strip .hzp-select__el,
    .hzp-fb__basic-strip .hzp-input__field,
    .hzp-fb__basic-strip .hzp-range__el {
        font-size: 14px;
        font-weight: 600;
    }

    .hzp-field--listing-type {
        order: 1;
        width: 116px;
    }

    .hzp-field--property-type {
        order: 2;
        width: 132px;
    }

    .hzp-fb__city {
        order: 3;
        flex: 0 0 auto;
        display: inline-flex;
        align-items: center;
        gap: 7px;
        min-width: 96px;
        padding: 0 15px;
        color: var(--hzp-body);
        font-size: 14px;
        font-weight: 600;
        line-height: 42px;
        white-space: nowrap;
        scroll-snap-align: start;
    }

    .hzp-fb__city svg {
        width: 16px;
        height: 16px;
        fill: none;
        stroke: currentColor;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .hzp-fb__basic-strip .hzp-field--location {
        order: 4;
        width: 176px;
    }

    .hzp-field--bedrooms {
        order: 5;
        width: 118px;
    }

    .hzp-fb__basic-strip .hzp-field--price {
        order: 6;
        width: 206px;
    }

    .hzp-fb__basic-strip .hzp-field--price .hzp-range {
        gap: 5px;
    }

    .hzp-fb__basic-strip .hzp-field--price .hzp-range__el {
        width: 94px;
        min-width: 0;
        padding-inline: 11px;
    }

    .hzp-fb__basic-strip .hzp-field--price .hzp-range__dash {
        flex: 0 0 auto;
    }

    /* Selected values read as active tags while retaining the native controls. */
    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-select,
    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-input,
    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-range__el {
        border-color: color-mix(in srgb, var(--hzp-red) 36%, white);
        background: var(--hzp-red-tint);
    }

    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-select__el,
    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-input__field,
    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-range__el,
    .hzp-fb__basic-strip .hzp-fb__chip--active .hzp-select svg {
        color: var(--hzp-red);
        stroke: currentColor;
    }

    /* Actions stay directly below the chips instead of beside a tall form. */
    .hzp-fb__actions {
        flex: 1 1 100%;
        order: 2;
        justify-content: flex-start;
        padding: 0;
        border: 0;
    }

    .hzp-fb__actions .hzp-btn {
        border-radius: 999px;
    }

    /* The horizontal rail must not crop the neighbourhood chooser. */
    .hzp-fb__basic-strip .hzloc__panel {
        position: fixed;
        inset-inline: 8px;
        top: auto;
        bottom: 8px;
        width: auto;
        max-height: 58vh;
        max-height: 58dvh;
        border-radius: 14px;
        z-index: 70;
    }
}

/* ========================================================================== 
   Mobile SERP guided tab flow
   ========================================================================== */
.hzp-mf {
    display: none;
}

@media (max-width: 720px) {
    /* JavaScript upgrades the native chip rail to the guided tab experience. */
    html.hzp-js .hzp-fb__basic-strip {
        display: none;
    }

    html.hzp-js .hzp-mf {
        display: flex;
        flex: 1 1 100%;
        order: 1;
        flex-direction: column;
        gap: 9px;
        width: 100%;
        min-width: 0;
    }

    .hzp-mf__steps,
    .hzp-mf__options {
        display: flex;
        align-items: center;
        gap: 8px;
        min-width: 0;
        overflow-x: auto;
        overscroll-behavior-inline: contain;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }

    .hzp-mf__steps::-webkit-scrollbar,
    .hzp-mf__options::-webkit-scrollbar {
        display: none;
    }

    .hzp-mf__step,
    .hzp-mf__option,
    .hzp-mf__apply {
        appearance: none;
        display: inline-flex;
        flex: 0 0 auto;
        align-items: center;
        justify-content: center;
        min-height: 42px;
        margin: 0;
        border: 1px solid var(--hzp-line-strong);
        border-radius: 999px;
        background: #ffffff;
        color: var(--hzp-body);
        font-family: inherit;
        font-size: 14px;
        font-weight: 650;
        line-height: 1.1;
        white-space: nowrap;
        cursor: pointer;
    }

    .hzp-mf__step {
        position: relative;
        padding: 0 16px;
        background: var(--hzp-fill);
    }

    .hzp-mf__step.is-current {
        border-color: color-mix(in srgb, var(--hzp-red) 42%, white);
        background: var(--hzp-red-tint);
        color: var(--hzp-red);
        box-shadow: 0 2px 8px rgba(7, 69, 217, 0.1);
    }

    .hzp-mf__body {
        display: flex;
        align-items: center;
        gap: 8px;
        width: 100%;
        min-width: 0;
    }

    .hzp-mf__panels {
        flex: 1 1 auto;
        min-width: 0;
    }

    .hzp-mf__panel,
    .hzp-mf__options {
        width: 100%;
        min-width: 0;
    }

    .hzp-mf__option {
        padding: 0 17px;
        box-shadow: 0 1px 2px rgba(18, 20, 26, 0.04);
    }

    .hzp-mf__option.is-selected {
        border-color: var(--hzp-red);
        background: var(--hzp-red);
        color: #ffffff;
        box-shadow: 0 3px 10px rgba(7, 69, 217, 0.18);
    }

    .hzp-mf__option svg {
        width: 16px;
        height: 16px;
        margin-inline-end: 7px;
        fill: none;
        stroke: currentColor;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .hzp-mf__apply {
        min-width: 116px;
        padding: 0 18px;
        border-color: var(--hzp-red);
        background: var(--hzp-red);
        color: #ffffff;
        box-shadow: 0 3px 10px rgba(7, 69, 217, 0.18);
    }

    .hzp-mf__price {
        display: flex;
        align-items: center;
        gap: 6px;
        width: max-content;
        min-width: 0;
    }

    .hzp-mf__price-input {
        width: 96px;
        height: 42px;
        padding: 0 12px;
        border: 1px solid var(--hz-field-line, #80868f);
        border-radius: 999px;
        background: #ffffff;
        color: var(--hzp-ink);
        font-family: inherit;
        font-size: 14px;
        font-weight: 600;
    }

    .hzp-mf__price-input:focus {
        border-color: var(--hzp-red);
        outline: 2px solid var(--hzp-red-tint);
        outline-offset: 1px;
    }

    .hzp-mf__step:focus-visible,
    .hzp-mf__option:focus-visible,
    .hzp-mf__apply:focus-visible {
        outline: 2px solid var(--hzp-red);
        outline-offset: 2px;
    }

    /* The advanced Filters/Clear controls sit below the guided tabs. */
    html.hzp-js .hzp-fb__actions {
        margin-top: 1px;
    }
}

/* ==========================================================================
   SERP cards: one listing target without swallowing the real controls
   ========================================================================== */

/*
    The card heading remains the one semantic listing link and the only extra
    tab stop. Its transparent pseudo-element extends that same link across the
    card, so clicking price, specifications, location or empty space follows
    the normal listing URL and keeps native modifier-click behaviour.

    The media link, favourite button, member profile and contact group sit one
    layer above it. Their markup, hrefs and scripts are unchanged, so each keeps
    its existing action instead of falling through to the listing link.

    This is scoped to the SERP. The shared card partial also renders on seller
    profiles, and those pages are intentionally outside this request.
*/
.hzp-serp .hzp-card {
    isolation: isolate;
}

.hzp-serp .hzp-card__addr a::after {
    position: absolute;
    z-index: 1;
    inset: 0;
    border-radius: var(--hzp-radius);
    content: '';
    cursor: pointer;
}

.hzp-serp .hzp-card__medialink,
.hzp-serp .hzp-card .hzp-fav,
.hzp-serp .hzp-card a.hzp-agent--link,
.hzp-serp .hzp-card .hzp-contacts {
    position: relative;
    z-index: 2;
}

/* The single keyboard link outlines the whole card it opens. */
.hzp-serp .hzp-card__addr a:focus-visible {
    outline: 0;
}

.hzp-serp .hzp-card__addr a:focus-visible::after {
    outline: 3px solid rgba(7, 69, 217, .32);
    outline-offset: -3px;
}

/* ========================================================================== 
   SERP card gallery: one large photograph with previous/next controls
   ========================================================================== */

.hzp-serp .hzp-card__media--gallery {
    display: block;
    min-height: 196px;
    overflow: hidden;
}

.hzp-serp .hzp-card__gallery {
    position: absolute;
    inset: 0;
    overflow: hidden;
    background: var(--hzp-fill);
}

.hzp-serp .hzp-card__gallery .hzp-card__medialink {
    position: absolute;
    z-index: 2;
    inset: 0;
    display: block;
}

.hzp-serp .hzp-card__gallery .hzp-card__photo {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    min-height: 0;
    object-fit: cover;
}

.hzp-serp .hzp-card__media--gallery .hzp-badges {
    z-index: 4;
}

.hzp-card__gallery-nav {
    position: absolute;
    top: 50%;
    z-index: 4;
    display: none;
    width: 24px;
    height: 24px;
    padding: 0;
    border: 1px solid rgba(255, 255, 255, .5);
    border-radius: 50%;
    background: rgba(255, 255, 255, .5);
    color: #272b33;
    box-shadow: 0 3px 12px rgba(16, 20, 28, .16);
    cursor: pointer;
    place-items: center;
    transform: translateY(-50%);
    transition: background-color 140ms ease, box-shadow 140ms ease, transform 140ms ease;
}

html.hzp-js .hzp-serp .hzp-card__gallery-nav {
    display: grid;
}

.hzp-card__gallery-nav--prev {
    inset-inline-start: 12px;
}

.hzp-card__gallery-nav--next {
    inset-inline-end: 12px;
}

.hzp-card__gallery-nav:hover {
    background: rgba(255, 255, 255, .5);
    box-shadow: 0 5px 16px rgba(16, 20, 28, .22);
    transform: translateY(-50%);
}

.hzp-card__gallery-nav:focus-visible {
    outline: 3px solid rgba(7, 69, 217, .48);
    outline-offset: 2px;
}

.hzp-card__gallery-nav svg {
    width: 14px;
    height: 14px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-card__gallery-dots {
    position: absolute;
    z-index: 4;
    inset-inline-start: 50%;
    bottom: 12px;
    display: flex;
    gap: 6px;
    align-items: center;
    padding: 5px 8px;
    border-radius: 999px;
    background: rgba(16, 20, 28, .34);
    pointer-events: none;
    transform: translateX(-50%);
}

.hzp-card__gallery-dot {
    display: block;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: rgba(255, 255, 255, .58);
    transition: background-color 140ms ease, transform 140ms ease;
}

.hzp-card__gallery-dot.is-active {
    background: #ffffff;
    transform: scale(1.25);
}

[dir="rtl"] .hzp-card__gallery-nav svg {
    transform: scaleX(-1);
}

[dir="rtl"] .hzp-card__gallery-dots {
    transform: translateX(50%);
}

@media (min-width: 768px) {
    .hzp-cards--grid .hzp-card__media--gallery {
        min-height: 0;
        aspect-ratio: 16 / 10;
    }
}

@media (max-width: 767.98px) {
    .hzp-serp .hzp-card__media--gallery {
        min-height: 0;
        aspect-ratio: 3 / 2;
    }

    .hzp-card__gallery-nav {
        width: 24px;
        height: 24px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .hzp-card__gallery-nav,
    .hzp-card__gallery-dot {
        transition: none;
    }
}


/* Truncate only the title text, preserving the link overlay across the card. */
.hzp-serp .hzp-card__top > div {
    flex: 1;
    min-width: 0;
}

.hzp-serp .hzp-card__addr--compact {
    margin: 12px 0 8px;
    font-size: 16px;
    line-height: 1.5;
    font-weight: 600;
}

.hzp-serp .hzp-card__addr--compact a,
.hzp-serp .hzp-card__addr--compact span {
    display: block;
}

.hzp-serp .hzp-card__addr--compact span {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.hzp-serp .hzp-card__foot .hzp-card__district {
    margin: 0;
    min-width: 0;
}

@media (min-width: 768px) {
    .hzp-serp .hzp-cards:not(.hzp-cards--grid) .hzp-card {
        min-height: 210px;
    }

    .hzp-serp .hzp-cards:not(.hzp-cards--grid) .hzp-card__media--gallery {
        min-height: 0;
    }
}

.hzp-serp .hzp-card .hzp-contacts__btn {
    font-size: 16px;
}

/* Listing key information uses the project detail label-and-value layout. */
.hzp-detail .hzp-key-info {
    margin-top: 30px;
    padding: 24px;
    border-radius: 12px;
    background: #f5f7fc;
}
.hzp-detail .hzp-key-info > .hzp-panel__title { margin-bottom: 22px; }
.hzp-detail .hzp-dspecs {
    display: grid;
    grid-template-columns: repeat(var(--hzp-summary-columns, 3), minmax(0, 1fr));
    gap: 24px 16px;
    margin: 0;
    padding: 0;
    border: 0;
}
.hzp-detail .hzp-dspecs li {
    display: flex;
    align-items: flex-start;
    min-width: 0;
    gap: 10px;
    padding: 0;
    border: 0;
    background: transparent;
}
.hzp-detail .hzp-dspecs svg {
    width: 20px;
    height: 20px;
    margin-top: 2px;
    stroke: var(--hzp-red);
}
.hzp-detail .hzp-dspecs li > span { min-width: 0; }
.hzp-detail .hzp-dspecs__label {
    display: block;
    color: var(--hzp-muted);
    font-size: 13px;
    font-weight: 400;
    line-height: 1.6;
}
.hzp-detail .hzp-dspecs__value {
    display: block;
    margin-top: 7px;
    font-size: 15px;
    font-weight: 600;
    line-height: 1.45;
    overflow-wrap: anywhere;
}
.hzp-detail .hzp-dspecs__none { grid-column: 1 / -1; }
.hzp-detail .hzp-dspecs__convert { margin: 12px 0 0; font-size: 14px; }
.hzp-detail .hzp-dspecs__convert a { color: var(--hagzi-primary, #0745D9); text-decoration: underline; }
.hzp-detail .hzp-dmain > div.hzp-panel + section.hzp-panel { border-top: 0; }
/* Mobile facts form one readable row; long labels can scroll without wrapping. */
.hzp-detail .hzp-dspecs__compact { display: none; }
@media (max-width: 767.98px) {
    .hzp-detail .hzp-dmain > div.hzp-panel { min-width: 0; }
    .hzp-detail .hzp-key-info {
        min-width: 0;
        margin-top: 16px;
        margin-inline: -12px;
        padding: 12px;
        border-radius: 12px;
        background: #f5f7fc;
    }
    .hzp-detail .hzp-dspecs {
        display: flex;
        flex-wrap: nowrap;
        gap: 16px;
        max-width: 100%;
        overflow-x: auto;
        overscroll-behavior-x: contain;
        padding-block: 4px;
        scrollbar-width: thin;
        scrollbar-color: var(--hzp-line) transparent;
    }
    .hzp-detail .hzp-dspecs li {
        position: relative;
        flex: none;
        align-items: center;
        gap: 6px;
        white-space: nowrap;
    }
    .hzp-detail .hzp-dspecs svg {
        width: 18px;
        height: 18px;
        margin-top: 0;
        stroke: var(--hzp-muted);
    }
    .hzp-detail .hzp-dspecs__stacked {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }
    .hzp-detail .hzp-dspecs__compact {
        display: inline;
        font-size: 14px;
        font-weight: 400;
        line-height: 1.5;
    }
}

/* Match project detail typography while keeping listing content and layout. */
.hzp-detail .hzp-dtitle {
    margin: 20px 0;
    font-size: 20px;
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: -.025em;
    overflow-wrap: anywhere;
}
.hzp-detail .hzp-dprice__value { font-size: 32px; }
.hzp-detail .hzp-dprice__value small { font-size: 16px; font-weight: 600; }
.hzp-detail .hzp-daddr { margin-top: 0; font-size: 15px; line-height: 1.6; }
.hzp-detail .hzp-panel__title,
.hzp-detail .hzp-rail__title {
    font-size: 24px;
    font-weight: 650;
    line-height: 1.3;
    letter-spacing: -.02em;
}
.hzp-detail .hzp-prose p { margin-bottom: 16px; font-size: 14px; line-height: 1.72; }
.hzp-detail .hzp-prose p:last-child { margin-bottom: 0; }
.hzp-detail .hzp-overview__content p { white-space: pre-line; }
.hzp-detail .hzp-overview__content.is-collapsed {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
    overflow: hidden;
}
.hzp-detail .hzp-overview__toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-top: 14px;
    padding: 4px 0;
    border: 0;
    background: transparent;
    color: var(--hzp-red);
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.5;
    cursor: pointer;
}
.hzp-detail .hzp-overview__toggle[hidden] { display: none; }
.hzp-detail .hzp-overview__toggle:hover { text-decoration: underline; }
.hzp-detail .hzp-overview__toggle:focus-visible {
    outline: 2px solid var(--hzp-red);
    outline-offset: 4px;
    border-radius: 3px;
}
.hzp-detail .hzp-overview__toggle svg {
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}
.hzp-detail .hzp-overview__toggle[aria-expanded="true"] svg { transform: rotate(180deg); }

.hzp-detail .hzp-info__key { font-size: 13px; line-height: 1.6; }
.hzp-detail .hzp-info__val,
.hzp-detail .hzp-dspecs li { font-size: 15px; font-weight: 600; line-height: 1.45; }
.hzp-detail .hzp-chip { font-size: 16px; font-weight: 400; line-height: 1.6; }
.hzp-detail .hzp-contactcard__title { font-size: 20px; line-height: 1.4; }
.hzp-detail .hzp-contactcard__sub,
.hzp-detail .hzp-safe__text { font-size: 13px; line-height: 1.65; }
.hzp-detail .hzp-agentrow__name,
.hzp-detail .hzp-agentcard__line { font-size: 15px; line-height: 1.6; }
.hzp-detail .hzp-agentrow__meta { font-size: 13px; line-height: 1.6; }

@media (max-width: 639.98px) {
    .hzp-detail .hzp-panel__title,
    .hzp-detail .hzp-rail__title { font-size: 22px; }
    .hzp-detail .hzp-chip { font-size: 14px; }
}

/* Tighter reading rhythm on phones, without changing desktop sections. */
@media (max-width: 767.98px) {
    .hzp-detail .hzp-dgrid { row-gap: 16px; }
    .hzp-detail .hzp-dmain > .hzp-panel { padding-block: 16px; }
    .hzp-detail .hzp-dmain > .hzp-panel[aria-labelledby="hzp-overview"] { padding-top: 0; }
    .hzp-detail .hzp-dmain > .hzp-panel > .hzp-panel__title { margin-bottom: 14px; }
    .hzp-detail .hzp-dtitle { margin-block: 12px; }
    .hzp-detail .hzp-overview__toggle { margin-top: 10px; }
    .hzp-detail .hzp-location__nearby { margin-top: 16px; }
}

/* Match the project detail contact buttons and rounded enquiry card. */
.hzp-detail .hzp-contactcard__actions .hzp-btn,
.hzp-detail .hzd-callbar__btn {
    min-height: 48px;
    height: auto;
    padding: 12px;
    border-radius: 8px;
    font-size: 16px;
    font-weight: 600;
    line-height: 1.6;
}

.hzp-detail .hzp-contactcard {
    padding: 24px;
    border-radius: 14px;
    border-top: 3px solid var(--hzp-red);
    box-shadow: 0 8px 24px rgba(15, 23, 42, .05);
}

.hzp-detail .hzp-contactcard__actions {
    gap: 12px;
}

@media (max-width: 639.98px) {
    .hzp-detail .hzp-contactcard {
        padding: 20px;
    }
}

.hzp-serp .hzp-card a.hzp-btn[href^="tel:"] > svg,
.hzp-detail a.hzp-btn[href^="tel:"] > svg,
.hzp-serp .hzp-card__whatsapp-icon,
.hzp-detail .hzp-whatsapp-icon {
    display: block;
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
    object-fit: contain;
}

.hzp-detail a.hzp-btn[href^="https://wa.me/"]:not(.hzp-btn--accent):hover,
.hzp-serp a.hzp-btn[href^="https://wa.me/"]:not(.hzp-btn--accent):hover {
    border-color: #25d366;
}

/* Small visible arrows keep a comfortable touch target. */
.hzp-serp .hzp-card__gallery-nav::before {
    content: "";
    position: absolute;
    inset: -10px;
}

/* Keep sorting available while removing the layout choice on phones. */
@media (max-width: 767.98px) {
    .hzp-serp .hzp-results__head > .hzp-view-switch {
        display: none;
    }

    .hzp-serp .hzp-results__head {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-serp .hzp-results__head > .hzp-sort {
        width: auto;
        max-width: 100%;
    }
}

/*
 * D-31: the list/grid switch is offered on phones too. Grid on a phone is two
 * compact columns (photo, price, place, title); list keeps the full card with
 * its contact buttons. Area-level results map: not part of this change.
 */
@media (max-width: 767.98px) {
    .hzp-serp .hzp-results__head > .hzp-view-switch {
        display: flex;
        width: auto;
    }

    .hzp-serp .hzp-results__head {
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: center;
    }

    .hzp-serp .hzp-view-switch .hzp-subbar__view {
        flex: 0 0 44px;
        min-width: 44px;
        min-height: 44px;
    }

    .hzp-results__head > .hzp-results__tools {
        gap: 6px;
    }

    .hzp-results__tools > .hz-copy .hz-copy__btn {
        padding-inline: 10px;
        font-size: 13px;
    }

    .hzp-serp .hzp-cards--grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 12px;
    }

    .hzp-serp .hzp-cards--grid .hzp-card {
        grid-template-columns: minmax(0, 1fr);
        grid-template-rows: auto minmax(0, 1fr);
    }

    .hzp-serp .hzp-cards--grid .hzp-card__media {
        grid-template-columns: minmax(0, 1fr);
    }

    .hzp-serp .hzp-cards--grid .hzp-card__media--gallery {
        aspect-ratio: 4 / 3;
    }

    .hzp-serp .hzp-cards--grid .hzp-card__body {
        padding: 10px;
    }

    .hzp-serp .hzp-cards--grid .hzp-card__thumbs,
    .hzp-serp .hzp-cards--grid .hzp-card__desc,
    .hzp-serp .hzp-cards--grid .hzp-card__gallery-nav,
    .hzp-serp .hzp-cards--grid .hzp-card__gallery-dots,
    .hzp-serp .hzp-cards--grid .hzp-card__listed,
    .hzp-serp .hzp-cards--grid .hzp-agent,
    .hzp-serp .hzp-cards--grid .hzp-contacts {
        display: none;
    }

    .hzp-serp .hzp-cards--grid .hzp-price {
        font-size: 16px;
    }

    .hzp-serp .hzp-cards--grid .hzp-card__addr--compact {
        margin: 6px 0 4px;
        font-size: 14px;
    }

    .hzp-serp .hzp-cards--grid .hzp-specs {
        font-size: 12px;
        gap: 6px;
    }
}

/* Member contact controls use the same branded treatment as search results. */
.hzp-member .hzp-card__whatsapp-icon,
.hzp-member .hzp-member__whatsapp-icon,
.hzp-member a.hzp-btn[href^="tel:"] > svg {
    display: block;
    flex: 0 0 20px;
    width: 20px;
    height: 20px;
    object-fit: contain;
}

.hzp-member .hzp-contacts__btn,
.hzp-member .hzpa__actions .hzp-btn {
    font-size: 16px;
}

.hzp-member a.hzp-btn[href^="https://wa.me/"]:not(.hzp-btn--accent):hover {
    border-color: #25d366;
}

/* Listing enquiry component, shared with the reference storefront. */
        .hzp-detail .hzp-enquiry__separator {
            display: flex;
            align-items: center;
            gap: 12px;
            margin: 20px 0;
            color: var(--hzp-muted);
            font-size: 13px;
            text-align: center;
        }
        .hzp-detail .hzp-enquiry__separator::before,
        .hzp-detail .hzp-enquiry__separator::after {
            content: "";
            flex: 1;
            border-top: 1px solid var(--hzp-line);
        }
        .hzp-detail .hzp-enquiry__form { display: grid; gap: 12px; }
        .hzp-detail .hzp-enquiry__field {
            display: block;
            padding: 6px 10px;
            border: 1px solid var(--hz-field-line, #80868f);
            border-radius: 7px;
            background: #f9fbff;
        }
        .hzp-detail .hzp-enquiry__field:focus-within {
            border-color: var(--hzp-red);
            box-shadow: 0 0 0 2px var(--hzp-red);
        }
        .hzp-detail .hzp-enquiry__field-label {
            display: block;
            color: var(--hzp-muted);
            font-size: 11px;
            font-weight: 600;
            line-height: 1.3;
            text-transform: uppercase;
        }
        .hzp-detail .hzp-enquiry__field input,
        .hzp-detail .hzp-enquiry__field textarea {
            display: block;
            width: 100%;
            min-height: 24px;
            margin: 0;
            padding: 0;
            border: 0;
            outline: 0;
            background: transparent;
            color: var(--hzp-ink);
            font: inherit;
            font-size: 14px;
        }
        .hzp-detail .hzp-enquiry__field textarea {
            min-height: 74px;
            resize: vertical;
            line-height: 1.45;
        }
        .hzp-detail .hzp-enquiry__phone {
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .hzp-detail .hzp-enquiry__prefix {
            flex: none;
            color: var(--hzp-ink);
            font-size: 14px;
        }
        /* "I am a:" and its three options on one row; wraps only when the row cannot fit. */
        .hzp-detail .hzp-enquiry__role {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            gap: 6px;
            min-inline-size: 0;
            margin: 6px 0 0;
            padding: 0;
            border: 0;
            color: var(--hzp-ink);
            font-size: 12px;
        }
        .hzp-detail .hzp-enquiry__role legend {
            float: inline-start;
            margin: 0;
            padding: 0;
            white-space: nowrap;
        }
        .hzp-detail .hzp-enquiry__role label,
        .hzp-detail .hzp-enquiry__updates {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            color: var(--hzp-ink);
            font-size: 13px;
            line-height: 1.4;
        }
        .hzp-detail .hzp-enquiry__role label { gap: 5px; font-size: inherit; white-space: nowrap; }
        .hzp-detail .hzp-enquiry__role input { flex: none; margin: 0; }
        .hzp-detail .hzp-enquiry__role input,
        .hzp-detail .hzp-enquiry__updates input { accent-color: var(--hzp-red); }
        .hzp-detail .hzp-enquiry__updates { margin: 2px 0 6px; }
        .hzp-detail .hzp-enquiry__submit {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 9px;
            min-height: 48px;
            padding: 10px 14px;
            border: 1px solid var(--hzp-red);
            border-radius: 6px;
            background: #fff;
            color: var(--hzp-red);
            font-size: 15px;
            font-weight: 700;
            cursor: pointer;
        }
        .hzp-detail .hzp-enquiry__submit:hover { background: var(--hzp-red-tint); }
        .hzp-detail .hzp-enquiry__submit:disabled { opacity: .55; cursor: wait; }
        .hzp-detail .hzp-enquiry__submit svg { width: 20px; height: 20px; }
        .hzp-detail .hzp-enquiry__status { min-height: 1.3em; margin: 0; font-size: 13px; }
        .hzp-detail .hzp-enquiry__status.is-error { color: #aa2424; }
        .hzp-detail .hzp-enquiry__status.is-success { color: #21813e; }

.hzp-results__title .hzp-results__title-count { font-size: 14px; font-weight: 400; white-space: nowrap; }
.hzp-detail .hzp-enquiry__phone input { min-width: 0; }

/* ------------------------------------- listing SEO hub sitelinks --- */
/* Similar searches and nearby districts under the photo rail. The list is
   only the links the builder returned: no empty slots, padding 0. */
.hzp-seolinks {
    display: grid;
    gap: 20px 32px;
    padding-bottom: 34px;
}
.hzp-seolinks__sr {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}
.hzp-seolinks__title {
    margin: 0 0 10px;
    color: var(--hzp-ink);
    font-size: 17px;
    font-weight: 700;
    line-height: 1.3;
}
.hzp-seolinks__list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 12px;
    margin: 0;
    padding: 0;
    list-style: none;
}
.hzp-seolinks__list a {
    display: inline-block;
    padding: 6px 12px;
    border: 1px solid var(--hzp-line, #e3e3e3);
    border-radius: 999px;
    color: var(--hzp-ink);
    font-size: 14px;
    line-height: 1.4;
    text-decoration: none;
}
.hzp-seolinks__list a:hover { border-color: var(--hzp-red); color: var(--hzp-red); }
.hzp-seolinks__list a:focus-visible { outline: 2px solid var(--hzp-red); outline-offset: 2px; }
@media (min-width: 768px) {
    .hzp-seolinks { grid-template-columns: minmax(0, 1fr); }
}

/* R-09: member profile listing count, filters and sort. */
.hzpa__count {
    margin: 4px 0 12px;
    color: var(--hzp-body, #3c414c);
    font-size: 14px;
    font-weight: 600;
}

.hzpa__tools {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 12px 16px;
    margin-bottom: 20px;
}

.hzpa__tool {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
    font-size: 13px;
    font-weight: 600;
}

.hzpa__tool select {
    min-width: 160px;
    max-width: 100%;
    height: 42px;
    padding-inline: 10px;
    border: 1px solid var(--hz-field-line, #80868f);
    border-radius: 10px;
    background: #ffffff;
    font: inherit;
    font-weight: 500;
}

.hzpa__clear {
    align-self: center;
    color: var(--hagzi-primary, #0745D9);
    font-size: 14px;
    font-weight: 600;
}

/* CB-05 / CB-02 / CB-04: monthly equivalent and the age + seller line on result cards. */
.hzp-card .hzp-card__monthly,
.hzp-dprice__amount .hzp-card__monthly {
    display: block;
    margin: 2px 0 0;
    color: var(--hzp-muted);
    font-size: 12.5px;
    font-weight: 500;
}

.hzp-card .hzp-card__trust a {
    color: inherit;
    text-decoration: underline;
}

.hzp-contactcard__note {
    margin: 8px 0 0;
    color: var(--hzp-muted);
    font-size: 13px;
}

/* A filter sheet whose pending choice would match nothing cannot apply it. */
.hzp-fb__show:disabled,
.hzp-mf__apply:disabled {
    opacity: 0.55;
    cursor: not-allowed;
}

.hzp-fb__foot:has(> .hzp-zero-help:not([hidden])),
.hzp-mf__foot:has(> .hzp-zero-help:not([hidden])) {
    flex-wrap: wrap;
}

.hzp-zero-help {
    display: grid;
    gap: 8px;
    flex-basis: 100%;
    margin: 0 0 8px;
}

.hzp-zero-help[hidden] {
    display: none;
}

.hzp-zero-help__note {
    margin: 0;
    color: var(--hzp-ink);
    font-size: 14px;
    font-weight: 600;
}

/*
    Desktop SERP header (breadcrumbs, title, count and hub facet pills) spans
    both grid columns. The view switch keeps the sort bar to the results
    column: 324px = the 300px sidebar column + the 24px column gap above.
*/
@media (min-width: 1024px) {
    .hzp-serp__grid {
        grid-template-areas:
            "heading heading"
            "results side";
    }

    .hzp-serp__grid .hzp-results__head > .hzp-view-switch {
        margin-inline-end: 324px;
    }

    .hzp-serp__grid .hzp-results__head > .hzp-results__tools {
        margin-inline-end: 324px;
    }
}

/* themes/property/property-header.css */
/* ===========================================================================
   Property header — account entry point.

   A separate file rather than more rules in property.css, for the same reason
   property-pages.css exists: another session had property.css open while this
   was written, so nothing was written to it. Loaded from
   components/layouts/footer/styles.blade.php immediately after property.css,
   so the --hz-* tokens it declares are already in scope and these rules win
   ties against it without needing manufactured specificity.

   Every selector here is .hz-hicon--link — a class that exists nowhere
   else. (The disabled notifications bell was removed, HGZ-032, along with the
   rules here that named it; the bell now only appears as a .hz-hicon--link
   when the customer inbox route exists.) Delete this file and its
   <link> and the header returns exactly to its previous rendering.
   =========================================================================== */

/* ---------------------------------------------------------------------------
   A wired icon is a control, so it takes the control's ink.

   property.css puts the heart and the bell on #9aa1ad and says why: "Inert by
   construction like the locale beside them ... so they take the same muted grey
   rather than the phone's darker nav colour. That is this header's existing
   signal for 'indicator, not control', and using a live-looking treatment on
   something with no destination is the thing we are avoiding."

   The converse is what this rule does. The heart and the account glyph now have
   real destinations, so they move to --hz-nav, which is the phone's colour and
   this header's established ink for a control: grey is an indicator, dark is
   something you can press. Nothing about the size or
   the spacing changes — the 32px box, the 22px glyph and the -9px sibling pull
   are all still property.css's, untouched.
   --------------------------------------------------------------------------- */
.hz-header .hz-hicon--link {
    color: var(--hz-nav, #3c414c);
    cursor: pointer;
    text-decoration: none;
}

.hz-header .hz-hicon--link:hover,
.hz-header .hz-hicon--link:focus-visible {
    color: var(--hz-ink, #12141a);
}

/* ---------------------------------------------------------------------------
   The focus ring property.css asked for.

   Its .hz-hicon comment closes with an instruction: "No :focus-visible rule,
   because neither is focusable: they are spans with no tabindex, so there is no
   focus to style. If either is later wired to a real route it becomes an <a>
   and MUST be added to the .hz-header focus-ring selector list near the top of
   this file."

   That is exactly what happened, and this is that rule — in this file rather
   than in that selector list only because property.css is being edited by
   another session and must not be appended to. The values are copied from the
   two rules it would have joined, so a focused account icon is
   indistinguishable from a focused phone number or nav link: 3px, 2px offset,
   6px radius, and the primary rather than the white used by the rings that sit
   on photographs, because this one sits on a white header.
   --------------------------------------------------------------------------- */
.hz-header .hz-hicon--link:focus-visible {
    outline: 3px solid var(--hagzi-primary, #0745D9);
    outline-offset: 2px;
    border-radius: 6px;
}

/* The account glyph is marked while the visitor is anywhere in /account, the
   way the nav row marks the section you are in. The primary rather than the
   ink, so "you are here" reads differently from "you can press this". */
.hz-header .hz-hicon--link[aria-current='page'] {
    color: var(--hagzi-primary, #0745D9);
    box-shadow: inset 0 -2px 0 currentColor;
}

/* The favourites count is resolved from the uncached customer API. It sits on
   the outside edge of the heart, away from the tightly spaced account
   control in both LTR and RTL layouts. */
.hz-header .hz-hicon--favorites {
    position: relative;
    overflow: visible;
}

.hz-header .hz-favorites-count {
    position: absolute;
    z-index: 2;
    inset-block-start: -4px;
    inset-inline-start: -5px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 17px;
    height: 17px;
    padding: 0 4px;
    border: 2px solid #ffffff;
    border-radius: 999px;
    background: #d9004a;
    color: #ffffff;
    box-shadow: 0 1px 4px rgba(18, 20, 26, 0.2);
    font-size: 9px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    pointer-events: none;
}

.hz-header .hz-favorites-count[hidden],
.hz-header .hz-mobile-menu__fav-count[hidden] {
    display: none;
}

.hz-header .hz-hicon--has-favorites svg {
    fill: #f40051;
    stroke: #f40051;
}

.hz-header .hz-mobile-menu__fav-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    margin-inline-start: 6px;
    padding: 0 6px;
    border-radius: 999px;
    background: #d9004a;
    color: #ffffff;
    font-size: 11px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    line-height: 1;
}

/* =============================================================================
   The locale control, once it became a control
   ============================================================================= */

/*
 * property.css paints .hz-locale as muted static text with cursor: default,
 * and hides it altogether below 860px. Both were right while it was a dead
 * label: there was nothing to press, and nothing to read that the page did not
 * already say by being in English.
 *
 * As a switch, neither is. It takes the same darker ink the other pressable
 * things in this row take -- which is the distinction that row already makes,
 * grey for an indicator and dark for something you can press -- and it has to
 * survive to the narrow widths, because a handset is exactly where a reader is
 * least able to go and find another way to change language.
 *
 * Scoped to the --link modifier so the inert span keeps its old treatment on a
 * channel that has only one locale.
 */
.hz-locale--link {
    color: var(--hz-nav, #2f3540);
    cursor: pointer;
    text-decoration: none;
}

.hz-locale--link:hover {
    color: var(--hagzi-primary, #0745D9);
}

@media (max-width: 860px) {
    .hz-locale--link {
        display: inline-flex;
    }
}

/*
 * Below 480 the row is already carrying the brand, the phone, favourites,
 * account and the purple CTA, so space is short. The switch keeps its globe and gives up its word rather than the other
 * way round: the glyph is the part that is recognised without reading, and the
 * name of the language on offer is still in the title and still in the link's
 * text for anyone listening to the page rather than looking at it.
 */
@media (max-width: 480px) {
    .hz-locale--link > span {
        position: absolute;
        width: 1px;
        height: 1px;
        margin: -1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }
}

/* =============================================================================
   The nav row wraps instead of hiding its tail
   ============================================================================= */

/*
 * property.css makes .hz-nav a horizontal scroll strip below 1080px --
 * `overflow-x: auto` with `scrollbar-width: none` and a ::-webkit-scrollbar
 * rule -- and gives it its own full-width row below 720px. The scrolling half
 * of that never worked as an interface: with every scrollbar suppressed the
 * strip offers no signal whatsoever that there is more of it, so anything past
 * the right edge is not "one swipe away", it is invisible.
 *
 * MEASURED, AT 390px, WITH THE NAV ON ITS OWN ROW
 *
 *                       label boxes    gaps (5 x 20)   total    available
 *   English                   243.1            100.0   343.1        342.0
 *   Arabic                    272.1            100.0   372.1        342.0
 *
 * So English hung 1px over the edge, which nobody could see, and Arabic hung
 * 30px over, which hid Projects/المشاريع entirely on first paint. The strip's
 * own box is not the problem and cannot be part of the fix: at this breakpoint
 * its margin-inline-start is already 0 and it has no inline padding, and the
 * 48px it gives up either side is .hz-shell's gutter, which is the whole
 * channel's and not the header's to narrow.
 *
 * Where the width goes is the two things left. The gaps are 100px -- 29% of the
 * English total and 27% of the Arabic one -- and the labels differ by 29px
 * between the locales, of which 24px is text (Arabic ink 248.1 against English
 * 220.1) and the rest is the six anchors' own 4px of horizontal padding, which
 * is identical in both. The strip was, in effect, sized for the English label
 * set; Arabic is 12% wider in ink and that is the whole of the difference.
 *
 * WHY WRAPPING RATHER THAN A TIGHTER GAP ALONE
 *
 * Tightening the gap is the obvious lever and it is not sufficient, which the
 * arithmetic settles rather than taste: fitting Arabic at 320px needs 100px
 * removed from a 100px gap budget, so even a gap of zero leaves it 0.1px over
 * and English 31px clear only because English is shorter. A single-line strip
 * cannot hold six items at 320px in either language without shrinking the type,
 * which is off the table.
 *
 * So the strip wraps. That is what makes the guarantee hold for text nobody has
 * measured yet: these six labels are translatable and a longer one moves the
 * overflow around, but the failure mode is now a second row rather than a
 * hidden destination. It is also why this is not a scroll affordance -- a fade
 * or an arrow would advertise the tail honestly, but the tail would still be
 * off-screen on first paint, and being able to discover Projects is the point.
 *
 * The gap comes down to 12px alongside it so the common case does not pay for
 * the guarantee: at 390px that puts English at 303.1 and Arabic at 332.1
 * against 342.0, so both still render on one line, with 39px of slack in
 * English and 10px in Arabic. Ink-to-ink separation is 16px once each anchor's
 * own 2px is counted -- the anchors keep their padding, so hit targets do not
 * shrink -- and at 320px both locales take a second row with everything on it.
 *
 * 720px because that is where property.css already decides the nav needs its
 * own row; nothing between 721px and 1080px is touched, and neither is the
 * 30px gap the wide header uses. `overflow-x: auto` is deliberately left where
 * it is rather than reached into property.css to remove: with wrapping it never
 * engages, and it stays a last resort for a single label longer than the strip,
 * which wrapping alone cannot help.
 */
@media (max-width: 720px) {
    .hz-header .hz-nav {
        flex-wrap: wrap;
        gap: 8px 12px;
    }
}

/*
 * D-20 adds a fifth link (Agencies). Between 721px and 1080px the strip is
 * the hidden-scrollbar one above, so a tail that does not fit would vanish;
 * it wraps to a second row instead.
 */
@media (min-width: 721px) and (max-width: 1080px) {
    .hz-header .hz-nav {
        flex-wrap: wrap;
        row-gap: 4px;
    }
}

/*
 * Above 1080px the row used to stay unwrapped. Tools & services and Home
 * services made it wider than the space beside the phone, so the last label
 * painted on top of the number (live, 31 Oct 2026: at 1440px "Home services"
 * covers 0798882727, and at 1100px "Sell your Property" does). The 1fr column
 * already has min-width: 0, so the links were spilling out of it with
 * overflow visible. Wrapping keeps every label inside that column. A wide
 * window that fits the whole row stays on one line.
 */
@media (min-width: 1081px) {
    .hz-header .hz-nav {
        flex-wrap: wrap;
        row-gap: 4px;
        column-gap: 24px;
        min-width: 0;
    }
}

/*
 * R-10: at 721-800px the fifth link takes the second row, and with no block
 * padding the first row sat about 6px under the top edge. The padding keeps
 * both rows clear of it; a single-row header is still 68px because the
 * min-height already exceeds the 30px logo plus this padding. The tighter
 * column gap lets more widths keep one row.
 */
@media (min-width: 721px) and (max-width: 800px) {
    .hz-header .hz-header__inner {
        padding-block: 10px;
    }

    .hz-header .hz-nav {
        column-gap: 16px;
        align-content: center;
    }
}

/* =============================================================================
   Compact mobile header and SERP search rail
   ============================================================================= */

/* These wrappers are deliberately transparent outside the handset layout. */
.hz-mobile-menu {
    display: none;
}

.hzp-fb__mobile-controls {
    display: contents;
}

@media (max-width: 720px) {
    /* The reference keeps one calm top row: brand, primary CTA, menu. */
    .hz-header {
        position: relative;
        z-index: 70;
    }

    .hz-header .hz-header__inner {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 12px;
        min-height: 68px;
        padding: 10px 16px;
    }

    .hz-header .hz-brand__logo {
        height: 24px;
    }

    .hz-header .hz-nav,
    .hz-header .hz-phone,
    .hz-header .hz-locale,
    .hz-header .hz-hicon {
        display: none !important;
    }

    .hz-header .hz-actions {
        display: flex;
        grid-column: 2;
        grid-row: 1;
        gap: 10px;
    }

    /* D-25: the language switch stays one tap away in the top row; below
       480px it shows only the globe (the word is kept for screen readers). */
    .hz-header .hz-locale.hz-locale--link {
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        gap: 4px;
        min-width: 44px;
        min-height: 44px;
        padding: 0 4px;
    }

    .hz-header .hz-cta {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-height: 42px;
        padding: 0 20px;
        font-size: 14px;
    }

    .hz-mobile-menu {
        position: relative;
        display: block;
    }

    .hz-mobile-menu__toggle {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 42px;
        height: 42px;
        padding: 0;
        border: 1px solid #d6dae2;
        border-radius: 10px;
        background: #ffffff;
        color: var(--hz-ink, #12141a);
        cursor: pointer;
        list-style: none;
    }

    .hz-mobile-menu__toggle::-webkit-details-marker {
        display: none;
    }

    .hz-mobile-menu__toggle:focus-visible {
        outline: 3px solid var(--hagzi-primary, #0745D9);
        outline-offset: 2px;
    }

    .hz-mobile-menu[open] .hz-mobile-menu__toggle {
        border-color: var(--hagzi-primary, #0745D9);
        background: #F3F7FF;
    }

    .hz-mobile-menu__bars {
        display: grid;
        gap: 4px;
        width: 22px;
    }

    .hz-mobile-menu__bars > span {
        display: block;
        width: 100%;
        height: 2px;
        border-radius: 99px;
        background: currentColor;
    }

    .hz-mobile-menu__panel {
        position: absolute;
        top: calc(100% + 10px);
        inset-inline-end: 0;
        z-index: 90;
        width: min(320px, calc(100vw - 32px));
        padding: 10px;
        border: 1px solid #e2e5eb;
        border-radius: 14px;
        background: #ffffff;
        box-shadow: 0 20px 48px -20px rgba(18, 20, 26, 0.42);
    }

    .hz-mobile-menu__links,
    .hz-mobile-menu__tools {
        display: grid;
        gap: 3px;
    }

    .hz-mobile-menu__links a,
    .hz-mobile-menu__tools a {
        display: flex;
        align-items: center;
        min-height: 42px;
        padding: 9px 12px;
        border-radius: 9px;
        color: var(--hz-nav, #3c414c);
        font-size: 14px;
        font-weight: 650;
        line-height: 1.3;
        text-decoration: none;
    }

    .hz-mobile-menu__links a:hover,
    .hz-mobile-menu__tools a:hover,
    .hz-mobile-menu__links a:focus-visible,
    .hz-mobile-menu__tools a:focus-visible {
        background: #EEF4FF;
        color: var(--hagzi-primary, #0745D9);
        outline: none;
    }

    .hz-mobile-menu__tools {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        margin-top: 8px;
        padding-top: 8px;
        border-top: 1px solid #eceef2;
    }

    /* The SERP's existing form becomes the second and third rows in the
       reference header. No query name or submission behaviour changes. */
    .hzp-serp .hzp-filterbar {
        z-index: 30;
    }

    .hzp-serp .hzp-fb {
        align-items: center;
        gap: 12px 8px;
        padding: 12px;
    }

    html.hzp-js .hzp-serp .hzp-fb__basic-strip {
        display: block;
        flex: 1 1 100%;
        order: 1;
        width: 100%;
        padding: 0;
        overflow: visible;
    }

    html.hzp-js .hzp-serp .hzp-fb__basic-strip .hzp-fb__row,
    html.hzp-js .hzp-serp .hzp-fb__basic-strip .hzp-field--listing-type,
    html.hzp-js .hzp-serp .hzp-fb__basic-strip .hzp-fb__city {
        display: none !important;
    }

    html.hzp-js .hzp-serp .hzp-fb__basic-strip .hzp-field--location {
        display: block;
        width: 100%;
        max-width: none;
    }

    html.hzp-js .hzp-serp .hzp-field--location > .hzp-field__label {
        position: absolute;
        top: 0;
        inset-inline-start: 0;
        width: 1px;
        height: 1px;
        margin: 0;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    html.hzp-js .hzp-serp .hzp-field--location .hzp-input {
        height: 56px;
        border: 1px solid var(--hz-field-line, #80868f);
        border-radius: 16px;
        background: #ffffff;
        box-shadow: none;
    }

    html.hzp-js .hzp-serp .hzp-field--location .hzp-input__field {
        height: 100%;
        padding-inline-start: 44px;
        border-radius: 16px;
        font-size: 16px;
        font-weight: 400;
    }

    /*
        The 44px start padding clears the magnifier when the field is empty.
        Once the city chip is in front of the text, that padding opens a hole
        between the chip and the placeholder. The chip already clears the icon
        (margin-inline-start below), so the field goes back to a normal gap.
        Scoped to the SERP handset: the shared picker stylesheet is untouched.
    */
    html.hzp-js .hzp-serp .hzp-field--location .hzloc__chip:not([hidden]) ~ .hzp-input__field {
        padding-inline-start: 10px;
    }

    html.hzp-js .hzp-serp .hzp-field--location .hzloc__chip:not([hidden]) {
        align-self: center;
        height: 32px;
        margin-inline-start: 40px;
        padding-inline: 12px 4px;
        line-height: 1;
    }

    html.hzp-js .hzp-serp .hzp-field--location .hzp-input__icon {
        inset-inline-start: 16px;
        top: 50%;
        width: 20px;
        height: 20px;
        margin-top: -10px;
        color: #8a909b;
    }

    .hzp-serp .hzp-fb__mobile-controls {
        display: flex;
        flex: 1 1 100%;
        flex-wrap: wrap;
        order: 2;
        align-items: flex-start;
        gap: 10px;
        width: 100%;
        max-width: 100%;
        min-width: 0;
    }

    html.hzp-js .hzp-serp .hzp-mf {
        display: contents;
    }

    html.hzp-js .hzp-serp .hzp-fb__actions {
        flex: 0 0 auto;
        order: 1;
        align-items: center;
        gap: 7px;
        margin: 0;
        padding: 0;
        border: 0;
    }

    html.hzp-js .hzp-serp .hzp-fb__actions .hzp-btn {
        min-height: 46px;
        border-radius: 13px;
    }

    html.hzp-js .hzp-serp .hzp-fb__toggle {
        gap: 6px;
        padding: 0 14px;
        border: 1px solid #e4e7ee;
        background: #ffffff;
        color: var(--hzp-ink, #12141a);
        font-size: 15px;
        font-weight: 500;
    }

    html.hzp-js .hzp-serp .hzp-fb__toggle:has(.hzp-fb__count) .hzp-fb__toggle-text::after {
        content: "·";
        margin-inline-start: 6px;
        color: #9aa3ad;
        font-weight: 500;
    }

    html.hzp-js .hzp-serp .hzp-fb__count {
        min-width: 20px;
        height: 20px;
        padding: 0;
        border-radius: 999px;
        background: var(--hagzi-primary, #0745D9);
        color: #ffffff;
        font-size: 12px;
        font-weight: 600;
    }

    html.hzp-js .hzp-serp .hzp-fb__toggle svg {
        color: var(--hagzi-primary, #0745D9);
        stroke: currentColor;
    }

    html.hzp-js .hzp-serp .hzp-fb__clear {
        width: 40px;
        padding: 0;
        overflow: hidden;
        color: transparent;
        font-size: 0;
    }

    html.hzp-js .hzp-serp .hzp-fb__clear svg {
        width: 17px;
        height: 17px;
        color: var(--hzp-body, #3c414c);
    }

    html.hzp-js .hzp-serp .hzp-mf__steps {
        flex: 1 1 auto;
        flex-wrap: wrap;
        align-items: center;
        order: 2;
        gap: 10px;
        min-width: 0;
        max-width: 100%;
        padding: 0;
        overflow: visible;
    }

    html.hzp-js .hzp-serp .hzp-mf__steps::-webkit-scrollbar {
        display: none;
    }

    /*
        Visual order only. The guided flow follows data-hzp-mf-next, not DOM
        order, so Price can sit after Property type without moving the buttons.
        City, Neighbourhood and Bedrooms stay in the row after it.
    */
    html.hzp-js .hzp-serp .hzp-mf__step[data-hzp-mf-step="type"] { order: 1; }
    html.hzp-js .hzp-serp .hzp-mf__step[data-hzp-mf-step="ptype"] { order: 2; }
    html.hzp-js .hzp-serp .hzp-mf__step[data-hzp-mf-step="price"] { order: 3; }
    html.hzp-js .hzp-serp .hzp-mf__step[data-hzp-mf-step="city"] { order: 4; }
    html.hzp-js .hzp-serp .hzp-mf__step[data-hzp-mf-step="district"] { order: 5; }
    html.hzp-js .hzp-serp .hzp-mf__step[data-hzp-mf-step="beds"] { order: 6; }

    html.hzp-js .hzp-serp .hzp-mf__step {
        flex: 0 0 auto;
        gap: 8px;
        max-width: 100%;
        min-height: 46px;
        padding: 0 14px;
        overflow: visible;
        border: 1px solid #e4e7ee;
        border-radius: 13px;
        background: #ffffff;
        color: var(--hzp-ink, #12141a);
        box-shadow: none;
        font-size: 15px;
        font-weight: 500;
        white-space: nowrap;
        text-overflow: clip;
    }

    html.hzp-js .hzp-serp .hzp-mf__step::after {
        content: "";
        width: 8px;
        height: 8px;
        margin-top: -4px;
        border-right: 2px solid currentColor;
        border-bottom: 2px solid currentColor;
        transform: rotate(45deg);
        transition: transform 0.16s ease, margin 0.16s ease;
    }

    html.hzp-js .hzp-serp .hzp-mf__step.is-current {
        border-color: var(--hagzi-primary, #0745D9);
        background: #EAF1FF;
        color: var(--hagzi-primary, #0745D9);
        box-shadow: none;
    }

    html.hzp-js .hzp-serp .hzp-mf:not(.is-open) .hzp-mf__step.is-current:not(.is-set) {
        border-color: #e4e7ee;
        background: #ffffff;
        color: var(--hzp-ink, #12141a);
    }

    html.hzp-js .hzp-serp .hzp-mf__step.is-set {
        border-color: var(--hagzi-primary, #0745D9);
        background: #EAF1FF;
        color: var(--hagzi-primary, #0745D9);
    }

    html.hzp-js .hzp-serp .hzp-mf.is-open .hzp-mf__step.is-current::after {
        margin-top: 4px;
        transform: rotate(-135deg);
    }

    html.hzp-js .hzp-serp .hzp-mf__body {
        display: none;
        flex: 1 1 100%;
        order: 3;
        align-items: center;
        gap: 8px;
        width: 100%;
        min-width: 0;
        padding-top: 1px;
    }

    html.hzp-js .hzp-serp .hzp-mf.is-open .hzp-mf__body {
        display: flex;
    }

    html.hzp-js .hzp-serp .hzp-mf__option,
    html.hzp-js .hzp-serp .hzp-mf__apply,
    html.hzp-js .hzp-serp .hzp-mf__price-input {
        min-height: 40px;
    }
}

@media (max-width: 360px) {
    .hz-header .hz-header__inner {
        gap: 8px;
        padding-inline: 12px;
    }

    .hz-header .hz-brand__logo {
        height: 22px;
    }

    .hz-header .hz-actions {
        gap: 8px;
    }

    .hz-header .hz-cta {
        min-height: 40px;
        padding-inline: 15px;
        font-size: 13px;
    }

    .hz-mobile-menu__toggle {
        width: 40px;
        height: 40px;
    }
}

/* =============================================================================
   Mobile SERP filter sheets and applied-filter tags
   ============================================================================= */

.hzp-mf__backdrop,
.hzp-mf__head,
.hzp-fb__backdrop,
.hzp-fb__sheethead,
.hzp-fb__active-tags {
    display: none;
}

@media (max-width: 720px) {
    html.hzp-filter-sheet-open,
    html.hzp-filter-sheet-open body {
        overflow: hidden;
        overscroll-behavior: none;
    }

    /* The native desktop controls must never surface above a phone sheet. */
    html.hzp-js .hzp-serp .hzp-fb__basic-strip .hzp-fb__row,
    html.hzp-js .hzp-serp .hzp-fb:has(.hzp-fb__more[open]) .hzp-fb__row {
        display: none !important;
    }

    /* The former circular X is replaced by named tags and a clear action. */
    html.hzp-js .hzp-serp .hzp-fb__clear {
        display: none !important;
    }

    html.hzp-js .hzp-serp .hzp-fb__active-tags {
        display: flex;
        flex: 1 1 100%;
        order: 3;
        align-items: center;
        gap: 10px;
        width: 100%;
        min-width: 0;
        padding-top: 10px;
        border-top: 1px solid #e5e8ee;
    }

    .hzp-fb__tag-list {
        display: flex;
        flex: 1 1 auto;
        align-items: center;
        gap: 8px;
        min-width: 0;
        overflow-x: auto;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }

    .hzp-fb__tag-list::-webkit-scrollbar {
        display: none;
    }

    .hzp-fb__tag {
        display: inline-flex;
        flex: 0 0 auto;
        align-items: center;
        gap: 7px;
        min-height: 34px;
        max-width: min(78vw, 310px);
        padding: 6px 10px 6px 12px;
        border: 1px solid #d7dce5;
        border-radius: 9px;
        background: #f4f5f7;
        color: #343a46;
        font-size: 13px;
        font-weight: 600;
        line-height: 1.25;
        text-decoration: none;
        white-space: nowrap;
    }

    [dir="rtl"] .hzp-fb__tag {
        padding: 6px 12px 6px 10px;
    }

    .hzp-fb__tag span {
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .hzp-fb__tag svg {
        flex: none;
        width: 15px;
        height: 15px;
        fill: none;
        stroke: #9299a6;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .hzp-fb__clear-all {
        flex: none;
        color: var(--hagzi-primary, #0745D9);
        font-size: 14px;
        font-weight: 750;
        text-decoration: underline;
        text-underline-offset: 4px;
        white-space: nowrap;
    }

    /* One backdrop at a time keeps every control below the active sheet. */
    html.hzp-js .hzp-serp .hzp-mf__backdrop,
    html.hzp-js .hzp-serp .hzp-fb__backdrop {
        position: fixed;
        inset: 0;
        z-index: 90;
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        border: 0;
        border-radius: 0;
        background: rgba(18, 20, 26, 0.42);
        backdrop-filter: blur(1.5px);
        cursor: default;
    }

    html.hzp-js .hzp-serp .hzp-mf__backdrop {
        display: none;
    }

    html.hzp-js .hzp-serp .hzp-mf.is-open .hzp-mf__backdrop,
    html.hzp-js .hzp-serp .hzp-fb__more[open] > .hzp-fb__backdrop {
        display: block;
    }

    html.hzp-js .hzp-serp .hzp-mf__body {
        position: fixed;
        inset-inline: 10px;
        top: auto;
        bottom: max(10px, env(safe-area-inset-bottom));
        z-index: 100;
        display: none;
        flex-direction: column;
        align-items: stretch;
        gap: 0;
        width: auto;
        max-height: min(78vh, 640px);
        max-height: min(78dvh, 640px);
        padding: 0;
        overflow: hidden;
        border: 1px solid #e0e4eb;
        border-radius: 18px;
        background: #ffffff;
        box-shadow: 0 24px 70px rgba(18, 20, 26, 0.28);
    }

    html.hzp-js .hzp-serp .hzp-mf.is-open .hzp-mf__body {
        display: flex;
    }

    html.hzp-js .hzp-serp .hzp-mf__head,
    html.hzp-js .hzp-serp .hzp-fb__sheethead {
        display: flex;
        flex: none;
        align-items: center;
        justify-content: space-between;
        gap: 16px;
        min-height: 58px;
        padding: 10px 14px 10px 18px;
        border-bottom: 1px solid #e5e8ee;
        background: #ffffff;
    }

    html[dir="rtl"].hzp-js .hzp-serp .hzp-mf__head,
    html[dir="rtl"].hzp-js .hzp-serp .hzp-fb__sheethead {
        padding: 10px 18px 10px 14px;
    }

    .hzp-mf__title,
    .hzp-fb__sheettitle {
        margin: 0;
        color: #12141a;
        font-size: 18px;
        font-weight: 800;
        line-height: 1.2;
    }

    .hzp-mf__close,
    .hzp-fb__sheetclose {
        appearance: none;
        display: inline-grid;
        flex: none;
        place-items: center;
        width: 38px;
        height: 38px;
        margin: 0;
        padding: 0;
        border: 1px solid #d7dce5;
        border-radius: 50%;
        background: #ffffff;
        color: #343a46;
        cursor: pointer;
    }

    .hzp-mf__close svg,
    .hzp-fb__sheetclose svg {
        width: 18px;
        height: 18px;
        fill: none;
        stroke: currentColor;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    html.hzp-js .hzp-serp .hzp-mf__panels {
        flex: 1 1 auto;
        min-height: 0;
        overflow-y: auto;
        overscroll-behavior: contain;
        padding: 18px;
    }

    html.hzp-js .hzp-serp .hzp-mf__panel,
    html.hzp-js .hzp-serp .hzp-mf__options {
        width: 100%;
    }

    html.hzp-js .hzp-serp .hzp-mf__options {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 10px;
        overflow: visible;
    }

    html.hzp-js .hzp-serp .hzp-mf__option {
        min-height: 44px;
        padding: 0 20px;
        border-color: #d7dce5;
        background: #ffffff;
        font-size: 15px;
    }

    html.hzp-js .hzp-serp .hzp-mf__option.is-selected {
        border-color: var(--hagzi-primary, #0745D9);
        background: var(--hagzi-primary, #0745D9);
        color: #ffffff;
    }

    html.hzp-js .hzp-serp .hzp-mf__price {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
        align-items: center;
        gap: 10px;
        width: 100%;
    }

    html.hzp-js .hzp-serp .hzp-mf__price-input {
        width: 100%;
        min-width: 0;
        height: 48px;
        padding-inline: 14px;
        border-radius: 10px;
        font-size: 15px;
    }

    /* Pinned to the bottom of the scrolling list so the sheet footer never hides it. */
    html.hzp-js .hzp-serp .hzp-mf__more {
        position: sticky;
        bottom: -18px;
        z-index: 1;
        width: calc(100% + 36px);
        min-height: 44px;
        margin: 14px -18px -18px;
        padding: 10px 18px;
        border-top: 1px solid #e5e8ee;
        background: #ffffff;
        text-align: start;
    }

    html.hzp-js .hzp-serp .hzp-mf__foot {
        display: flex;
        flex: none;
        padding: 12px 14px max(12px, env(safe-area-inset-bottom));
        border-top: 1px solid #e5e8ee;
        background: #f7f8fa;
    }

    html.hzp-js .hzp-serp .hzp-mf__apply {
        width: 100%;
        min-height: 48px;
        border-color: var(--hagzi-primary, #0745D9);
        background: var(--hagzi-primary, #0745D9);
        font-size: 15px;
        font-weight: 800;
    }

    html.hzp-js .hzp-serp .hzp-fb__more[open] {
        z-index: 100;
    }

    html.hzp-js .hzp-serp .hzp-fb__panel {
        inset-inline: 10px;
        bottom: max(10px, env(safe-area-inset-bottom));
        z-index: 100;
        max-height: min(78vh, 680px);
        max-height: min(78dvh, 680px);
        border-radius: 18px;
        box-shadow: 0 24px 70px rgba(18, 20, 26, 0.28);
    }

    html.hzp-js .hzp-serp .hzp-fb__panelbody {
        min-height: 0;
        overscroll-behavior: contain;
        padding: 16px 18px;
    }

    html.hzp-js .hzp-serp .hzp-fb__foot {
        border-radius: 0 0 18px 18px;
        padding-bottom: max(11px, env(safe-area-inset-bottom));
    }

    .hzp-mf__close:focus-visible,
    .hzp-fb__sheetclose:focus-visible,
    .hzp-fb__tag:focus-visible,
    .hzp-fb__clear-all:focus-visible {
        outline: 2px solid var(--hagzi-primary, #0745D9);
        outline-offset: 2px;
    }
}

/* =============================================================================
   Mobile SERP overlay and compact-card refinement — 2026-09-14

   The filter bar is its own stacking context. Raising only the sheet/backdrop
   leaves the mobile site header above the dim layer, so lift the owning bar
   while either filter experience is open. Guided filters remain bottom sheets;
   the full Filters disclosure uses the whole viewport.
   ============================================================================= */
@media (max-width: 720px) {
    html.hzp-filter-sheet-open .hzp-serp .hzp-filterbar {
        z-index: 1000;
    }

    html.hzp-js .hzp-serp .hzp-mf__backdrop,
    html.hzp-js .hzp-serp .hzp-fb__backdrop {
        position: fixed;
        inset: 0;
        z-index: 1000;
        width: 100vw;
        height: 100vh;
        height: 100dvh;
        background: rgba(27, 32, 43, 0.56);
        backdrop-filter: blur(2px);
    }

    html.hzp-js .hzp-serp .hzp-mf__body {
        z-index: 1010;
    }

    /* Advanced Filters is a dedicated phone screen with its own close button. */
    html.hzp-js .hzp-serp .hzp-fb__more[open] {
        z-index: 1010;
    }

    html.hzp-js .hzp-serp .hzp-fb__panel {
        position: fixed;
        inset: 0;
        z-index: 1010;
        box-sizing: border-box;
        width: 100vw;
        height: 100vh;
        height: 100dvh;
        max-height: none;
        border: 0;
        border-radius: 0;
        box-shadow: none;
    }

    html.hzp-js .hzp-serp .hzp-fb__sheethead {
        min-height: 64px;
        padding-top: max(10px, env(safe-area-inset-top));
    }

    html.hzp-js .hzp-serp .hzp-fb__panelbody {
        flex: 1 1 auto;
        min-height: 0;
        padding: 18px;
        overflow-y: auto;
    }

    html.hzp-js .hzp-serp .hzp-fb__foot {
        flex: none;
        border-radius: 0;
        padding-bottom: max(12px, env(safe-area-inset-bottom));
    }

    /* Use the compact list on phones, including links carrying view=grid. */
    .hzp-serp .hzp-cards {
        gap: 12px;
    }

    .hzp-serp .hzp-cards .hzp-card {
        border-radius: 14px;
    }

    .hzp-serp .hzp-cards .hzp-card__photo {
        aspect-ratio: 16 / 9;
    }

    .hzp-serp .hzp-cards .hzp-card__thumbs,
    .hzp-serp .hzp-cards .hzp-card__desc {
        display: none;
    }

    .hzp-serp .hzp-cards .hzp-card__body {
        padding: 12px 14px 13px;
    }

    .hzp-serp .hzp-cards .hzp-price {
        font-size: 20px;
    }

    .hzp-serp .hzp-cards .hzp-price small {
        font-size: 12px;
    }

    .hzp-serp .hzp-cards .hzp-specs {
        gap: 4px 7px;
        margin-top: 8px;
        font-size: 12.5px;
    }

    .hzp-serp .hzp-cards .hzp-card__addr {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        overflow: hidden;
        margin-top: 7px;
        font-size: 14px;
        font-weight: 700;
        line-height: 1.35;
    }

    .hzp-serp .hzp-cards .hzp-card__district,
    .hzp-serp .hzp-cards .hzp-card__listed {
        margin-top: 5px;
        font-size: 12px;
    }

    .hzp-serp .hzp-cards .hzp-card__foot {
        gap: 8px;
        padding-top: 9px;
    }

    .hzp-serp .hzp-cards .hzp-contacts {
        width: 100%;
        flex-wrap: nowrap;
    }

    .hzp-serp .hzp-cards .hzp-contacts__btn {
        flex: 1 1 0;
        justify-content: center;
        min-width: 0;
        padding-inline: 12px;
    }
}

/* Full-screen handset navigation, with the account action beside the brand. */
.hz-mobile-menu__back,
.hz-mobile-menu__close-label { display: none; }

@media (max-width: 720px) {
    html:has(.hz-mobile-menu[open]),
    body:has(.hz-mobile-menu[open]) { overflow: hidden; }

    .hz-header:has(.hz-mobile-menu[open]) { z-index: 1600; }
    body:has(.hz-mobile-menu[open]) .hz-mobile-nav { visibility: hidden; }

    .hz-mobile-menu__panel {
        position: fixed;
        inset: 0;
        display: flex;
        flex-direction: column;
        width: 100%;
        height: 100dvh;
        max-height: none;
        padding: 0;
        border: 0;
        border-radius: 0;
        background: #ffffff;
        box-shadow: none;
        overflow: hidden;
    }

    .hz-mobile-menu__head {
        display: grid;
        grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
        align-items: center;
        flex: none;
        min-height: calc(76px + env(safe-area-inset-top));
        padding: env(safe-area-inset-top) 16px 0;
        gap: 8px;
    }

    .hz-mobile-menu__brand { grid-column: 2; display: block; }
    .hz-mobile-menu__brand img { display: block; width: 108px; height: auto; }
    .hz-mobile-menu__account {
        grid-column: 3;
        justify-self: end;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-height: 38px;
        padding: 7px 11px;
        border: 1px solid var(--hagzi-primary, #0745D9);
        border-radius: 10px;
        color: var(--hagzi-primary, #0745D9);
        font-size: 14px;
        font-weight: 600;
        line-height: 1.2;
        text-align: center;
        text-decoration: none;
    }

    .hz-mobile-menu[open] .hz-mobile-menu__toggle {
        position: fixed;
        z-index: 91;
        inset-block-start: calc(16px + env(safe-area-inset-top));
        inset-inline-start: 8px;
        width: 44px;
        height: 44px;
        border: 0;
        border-radius: 0;
        background: transparent;
    }
    .hz-mobile-menu[open] .hz-mobile-menu__bars,
    .hz-mobile-menu[open] .hz-mobile-menu__open-label { display: none; }
    .hz-mobile-menu[open] .hz-mobile-menu__back,
    .hz-mobile-menu[open] .hz-mobile-menu__close-label { display: block; }
    .hz-mobile-menu__back {
        width: 24px;
        height: 24px;
        fill: none;
        stroke: currentColor;
        stroke-width: 1.5;
        stroke-linecap: round;
        stroke-linejoin: round;
    }
    [dir="rtl"] .hz-mobile-menu__back { transform: scaleX(-1); }

    .hz-mobile-menu__body {
        flex: 1 1 auto;
        min-height: 0;
        overflow-y: auto;
        overscroll-behavior: contain;
        padding: 4px 12px max(24px, env(safe-area-inset-bottom));
    }
    .hz-mobile-menu__links,
    .hz-mobile-menu__tools { grid-template-columns: minmax(0, 1fr); gap: 0; }
    .hz-mobile-menu__tools { margin-top: 12px; padding-top: 12px; border-top: 1px solid #f0f1f4; }
    .hz-mobile-menu__links a,
    .hz-mobile-menu__tools a {
        gap: 8px;
        min-height: 48px;
        padding: 12px 8px;
        border-radius: 6px;
        color: #30343b;
        font-size: 16px;
        font-weight: 400;
        line-height: 1.5;
    }
    .hz-mobile-menu__links a::after,
    .hz-mobile-menu__tools a::after {
        content: "";
        width: 7px;
        height: 7px;
        flex: 0 0 7px;
        margin-inline-start: auto;
        margin-inline-end: 4px;
        border-right: 1px solid currentColor;
        border-bottom: 1px solid currentColor;
        transform: rotate(-45deg);
    }
    [dir="rtl"] .hz-mobile-menu__links a::after,
    [dir="rtl"] .hz-mobile-menu__tools a::after { transform: rotate(135deg); }
    .hz-mobile-menu__brand:focus-visible,
    .hz-mobile-menu__account:focus-visible {
        outline: 2px solid var(--hagzi-primary, #0745D9);
        outline-offset: 3px;
    }
}

/* =============================================================================
   Mobile SERP results header (breadcrumb, title, count, sort)
   Handset only. Desktop keeps the shared rules in property-pages.css.
   ============================================================================= */
@media (max-width: 720px) {
    .hzp-serp .hzp-results__top {
        display: flex;
        flex-direction: column;
        align-items: stretch;
        min-width: 0;
        max-width: 100%;
    }

    .hzp-serp .hzp-results__head,
    .hzp-serp .hzp-results__heading-copy {
        display: contents;
    }

    .hzp-serp .hzp-results__top .hzp-crumbs {
        order: 0;
        gap: 6px;
        margin: 0;
        padding: 2px 0 8px;
        color: #8a909b;
        font-size: 13px;
        font-weight: 400;
        line-height: 1.4;
    }

    .hzp-serp .hzp-results__top .hzp-crumbs a {
        color: #6b7280;
        text-decoration: underline;
        text-underline-offset: 2px;
    }

    .hzp-serp .hzp-results__top .hzp-crumbs [aria-current="page"] {
        color: #6b7280;
        font-weight: 400;
        text-decoration: none;
    }

    .hzp-serp .hzp-hub-back-link {
        order: 0;
    }

    .hzp-serp .hzp-results__title {
        order: 1;
        width: 100%;
        min-width: 0;
        margin: 0;
        color: #12141a;
        font-size: 29px;
        font-weight: 700;
        line-height: 1.15;
        letter-spacing: -0.02em;
    }

    .hzp-serp .hzp-results__title-count {
        display: flex;
        align-items: center;
        min-height: 44px;
        margin-top: 6px;
        padding-inline-end: 196px;
        color: #8a909b;
        font-size: 15px;
        font-weight: 400;
        line-height: 1.3;
        letter-spacing: 0;
        white-space: normal;
    }

    /*
        The count is the last line of the title. Pull the sort up onto that
        line and park it at the inline end. The negative margin equals the
        count row, so the blocks under the title (area chips included) stay
        where they were.
    */
    .hzp-serp .hzp-results__head > .hzp-sort {
        order: 2;
        align-self: flex-end;
        width: auto;
        max-width: calc(100% - 16px);
        margin-top: -44px;
        margin-bottom: 0;
        position: relative;
        z-index: 1;
    }

    .hzp-serp [data-property-hub-preview-notice],
    .hzp-serp .hzp-results__absent,
    .hzp-serp .hzp-hub-facets__range,
    .hzp-serp .hzp-hub-facets,
    .hzp-serp .hzp-hub-facets__directory {
        order: 3;
        min-width: 0;
        max-width: 100%;
    }

    .hzp-serp .hzp-sort {
        display: inline-flex;
        align-items: center;
        color: #12141a;
        font-size: 14px;
        font-weight: 500;
    }

    .hzp-serp .hzp-sort__control {
        min-width: 0;
        min-height: 44px;
        border: 1px solid var(--hz-field-line, #80868f);
        border-radius: 13px;
        background: #ffffff;
    }

    .hzp-serp .hzp-sort__el {
        min-height: 42px;
        padding: 8px 34px;
        font-size: 14px;
        font-weight: 500;
    }
}

/* =============================================================================
   UX audit D-07: first card above the fold at 390px, sort never over the H1.
   Handset only; desktop and tablet keep every rule above. The basic filter
   pills stay (they are the only basic filters on a phone) but share one
   scrolling row with the Filters control; the place links move below the
   results; the sort gets its own line under the count.
   ============================================================================= */
@media (max-width: 720px) {
    html.hzp-js .hzp-serp .hzp-mf__steps {
        flex: 1 1 0;
        flex-wrap: nowrap;
        overflow-x: auto;
        overscroll-behavior-x: contain;
        scrollbar-width: none;
        padding-block: 1px;
    }

    html.hzp-js .hzp-serp .hzp-mf__step {
        flex: 0 0 auto;
    }

    .hzp-serp .hzp-results__top .hzp-crumbs {
        flex-wrap: nowrap;
        overflow-x: auto;
        white-space: nowrap;
        scrollbar-width: none;
    }

    .hzp-serp .hzp-results__top .hzp-crumbs::-webkit-scrollbar {
        display: none;
    }

    .hzp-serp .hzp-results__title {
        font-size: 26px;
    }

    .hzp-serp .hzp-results__title-count {
        min-height: 0;
        padding-inline-end: 0;
    }

    .hzp-serp .hzp-results__head > .hzp-sort {
        justify-self: start;
        margin-top: 8px;
        z-index: auto;
    }

    /* One column; the header's parts become rows so the cards can come first. */
    .hzp-serp__grid {
        grid-template-areas: none;
        row-gap: 0;
    }

    .hzp-serp__grid > .hzp-results > .hzp-results__top {
        display: contents;
    }

    .hzp-serp__grid > .hzp-results > .hzp-results__top > *,
    .hzp-serp__grid .hzp-results__head > *,
    .hzp-serp__grid .hzp-results__heading-copy > * {
        order: 2;
        min-width: 0;
        max-width: 100%;
    }

    .hzp-serp__grid > .hzp-results > .hzp-results__top > :first-child {
        order: 0;
    }

    .hzp-serp__grid .hzp-results__heading-copy > .hzp-results__title {
        order: 1;
    }

    .hzp-serp__grid .hzp-results__head > .hzp-sort,
    .hzp-serp__grid .hzp-results__head > .hzp-view-switch,
    .hzp-serp__grid .hzp-results__head > .hzp-results__tools {
        order: 3;
    }

    .hzp-serp__grid > .hzp-results > .hzp-results__body {
        grid-area: auto;
        order: 5;
        margin-top: 14px;
    }

    .hzp-serp__grid .hzp-results__heading-copy > .hzp-hub-facets,
    .hzp-serp__grid .hzp-results__heading-copy > .hzp-hub-facets__directory {
        order: 6;
        margin-top: 18px;
    }

    .hzp-serp__grid > .hzp-side {
        grid-area: auto;
        order: 9;
        margin-top: 16px;
    }

    /*
     * The header wrappers are display: contents here, so the head's own
     * column rules (sort in 1, view switch in 2) land on this page grid.
     * Two explicit columns and full-width rows keep every block at the full
     * width and leave only sort and switch sharing one row.
     */
    .hzp-serp__grid {
        grid-template-columns: minmax(0, 1fr) auto;
        column-gap: 8px;
    }

    .hzp-serp__grid > *,
    .hzp-serp__grid > .hzp-results > *,
    .hzp-serp__grid > .hzp-results > .hzp-results__top > *,
    .hzp-serp__grid > .hzp-results > .hzp-results__body,
    .hzp-serp__grid > .hzp-side,
    .hzp-serp__grid .hzp-results__head > *,
    .hzp-serp__grid .hzp-results__heading-copy > * {
        grid-column: 1 / -1;
    }

    .hzp-serp__grid .hzp-results__head > .hzp-sort {
        grid-column: 1;
        align-self: center;
        /* Start alignment sizes the control to its text and can push the
           view switch past the screen. Stretch inside the first column. */
        justify-self: stretch;
        min-inline-size: 0;
        inline-size: 100%;
        max-inline-size: 100%;
        overflow: hidden;
    }

    .hzp-serp__grid .hzp-results__head > .hzp-sort .hzp-sort__control,
    .hzp-serp__grid .hzp-results__head > .hzp-sort .hzp-sort__el {
        min-inline-size: 0;
        max-inline-size: 100%;
    }

    .hzp-serp__grid .hzp-results__head > .hzp-view-switch {
        grid-column: 2;
        align-self: center;
        justify-self: end;
    }

    /*
        Copy link lives in this group with the view switch, so the handset
        page grid still has two columns: sort at the start, both controls
        at the end. The group must not span 1 / -1 or it takes its own row.
    */
    .hzp-serp__grid .hzp-results__head > .hzp-results__tools {
        grid-column: 2;
        align-self: center;
        justify-self: end;
        min-inline-size: 0;
        max-inline-size: 100%;
        margin-block-start: 8px;
    }
}

/* =============================================================================
   R-08: the mobile Neighbourhood sheet's search box and "show all" control
   ============================================================================= */

.hzp-mf__search {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-bottom: 12px;
}

.hzp-mf__search-label {
    color: var(--hzp-body, #3c414c);
    font-size: 13px;
    font-weight: 600;
}

.hzp-mf__search-input {
    width: 100%;
    min-width: 0;
    height: 44px;
    padding-inline: 14px;
    border: 1px solid #d7dce5;
    border-radius: 10px;
    background: #ffffff;
    font: inherit;
    font-size: 15px;
}

.hzp-mf__search-none {
    margin: 12px 0 0;
    color: var(--hzp-body, #3c414c);
    font-size: 14px;
}

.hzp-mf__more {
    appearance: none;
    margin-top: 14px;
    padding: 8px 0;
    border: 0;
    background: none;
    color: var(--hagzi-primary, #0745D9);
    font: inherit;
    font-size: 14px;
    font-weight: 650;
    text-decoration: underline;
    cursor: pointer;
}

/* =============================================================================
   Mobile SERP filters after the Bayut comparison — 2026-10-25

   Only a slim search + Filters row is pinned while scrolling; the chip rows
   scroll away with the page. Location, bedrooms and price also live in the
   Filters sheet (one Show results), rent can be typed per month (searched as
   yearly), and the chip sheet's button shows the live count.
   ============================================================================= */
.hzp-pin,
.hzp-fb__core,
.hzp-period,
.hzp-period__note {
    display: none;
}

/* The price chip on the results bar names monthly or yearly at every width. */
.hzp-field--price .hzp-period {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 8px;
}

.hzp-field--price .hzp-period__opt {
    appearance: none;
    min-height: 36px;
    margin: 0;
    padding: 0 14px;
    border: 1px solid #d7dce5;
    border-radius: 999px;
    background: #ffffff;
    color: #343a46;
    font: inherit;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
}

.hzp-field--price .hzp-period__opt.is-selected {
    border-color: var(--hagzi-primary, #0745D9);
    background: var(--hagzi-primary, #0745D9);
    color: #ffffff;
}

.hzp-field--price .hzp-period__note:not([hidden]) {
    display: block;
    margin: 0 0 8px;
    color: #3c414c;
    font-size: 13px;
    line-height: 1.4;
}

/* Wide bar: one small row, so the price box is not three rows taller than its neighbours. */
@media (min-width: 960px) {
    .hzp-field--price:has(.hzp-period) {
        min-width: max-content;
    }

    .hzp-field--price .hzp-period {
        flex-wrap: nowrap;
        gap: 4px;
        margin: 0 0 4px;
    }

    .hzp-field--price .hzp-period__opt {
        min-height: 24px;
        padding: 0 8px;
        font-size: 12px;
        white-space: nowrap;
    }
}

/* A Clear with only location, bedrooms or price to clear exists where the sheet shows them. */
html:not(.hzp-js) .hzp-fb__reset[data-hzp-core-only] {
    display: none;
}

@media (min-width: 721px) {
    .hzp-fb__reset[data-hzp-core-only] {
        display: none;
    }
}

/* The Filters number counts what is behind the button: the panel on a wide bar, the whole sheet on a phone. */
.hzp-fb__count.hzp-fb__count--phone {
    display: none;
}

@media (max-width: 720px) {
    html.hzp-js .hzp-fb__count.hzp-fb__count--wide {
        display: none;
    }

    html.hzp-js .hzp-fb__count.hzp-fb__count--phone {
        display: inline-grid;
    }
}

@media (max-width: 720px) {
    .hzp-serp .hzp-filterbar {
        position: relative;
        top: auto;
    }

    html.hzp-js .hzp-serp .hzp-pin:not([hidden]) {
        position: fixed;
        top: 0;
        inset-inline: 0;
        z-index: 60;
        display: flex;
        align-items: center;
        gap: 8px;
        box-sizing: border-box;
        height: 56px;
        padding: 8px 12px;
        border-bottom: 1px solid #e5e8ee;
        background: #ffffff;
        box-shadow: 0 6px 18px -14px rgba(18, 20, 26, 0.4);
    }

    .hzp-pin__search,
    .hzp-pin__filters {
        appearance: none;
        display: inline-flex;
        align-items: center;
        gap: 8px;
        height: 40px;
        margin: 0;
        border: 1px solid #e4e7ee;
        border-radius: 12px;
        background: #ffffff;
        color: var(--hzp-ink, #12141a);
        font: inherit;
        font-size: 14px;
        font-weight: 500;
        cursor: pointer;
    }

    .hzp-pin__search {
        flex: 1 1 auto;
        min-width: 0;
        padding: 0 12px;
        text-align: start;
    }

    .hzp-pin__search span {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .hzp-pin__filters {
        flex: none;
        padding: 0 12px;
    }

    .hzp-pin svg {
        flex: none;
        width: 18px;
        height: 18px;
        fill: none;
        stroke: currentColor;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .hzp-pin__filters svg {
        color: var(--hagzi-primary, #0745D9);
    }

    .hzp-pin__count {
        box-sizing: border-box;
        min-width: 20px;
        height: 20px;
        padding: 0 6px;
        border-radius: 999px;
        background: var(--hagzi-primary, #0745D9);
        color: #ffffff;
        font-size: 12px;
        font-weight: 600;
        line-height: 20px;
        text-align: center;
    }

    html.hzp-js .hzp-serp .hzp-fb__core {
        display: grid;
        gap: 18px;
        margin-bottom: 18px;
        padding-bottom: 18px;
        border-bottom: 1px solid #e5e8ee;
    }

    .hzp-core__search {
        box-sizing: border-box;
        width: 100%;
        height: 44px;
        padding-inline: 14px;
        border: 1px solid #d7dce5;
        border-radius: 10px;
        background: #ffffff;
        font: inherit;
        font-size: 16px;
    }

    .hzp-core__options {
        display: flex;
        flex-wrap: wrap;
        gap: 8px;
    }

    .hzp-core__opt,
    .hzp-period__opt {
        appearance: none;
        min-height: 40px;
        margin: 0;
        padding: 0 16px;
        border: 1px solid #d7dce5;
        border-radius: 999px;
        background: #ffffff;
        color: #343a46;
        font: inherit;
        font-size: 14px;
        font-weight: 600;
        cursor: pointer;
    }

    .hzp-core__opt.is-selected,
    .hzp-period__opt.is-selected {
        border-color: var(--hagzi-primary, #0745D9);
        background: var(--hagzi-primary, #0745D9);
        color: #ffffff;
    }

    .hzp-core__more {
        appearance: none;
        justify-self: start;
        margin: 0;
        padding: 6px 0;
        border: 0;
        background: none;
        color: var(--hagzi-primary, #0745D9);
        font: inherit;
        font-size: 14px;
        font-weight: 650;
        text-decoration: underline;
        text-align: start;
        cursor: pointer;
    }

    .hzp-core__none {
        margin: 0;
        color: var(--hzp-body, #3c414c);
        font-size: 14px;
    }

    html.hzp-js .hzp-serp .hzp-period {
        display: inline-flex;
        gap: 8px;
        margin-bottom: 12px;
    }

    html.hzp-js .hzp-serp .hzp-period__note:not([hidden]) {
        display: block;
        margin: 10px 0 0;
        color: var(--hzp-body, #3c414c);
        font-size: 13px;
        line-height: 1.4;
    }

    html.hzp-js .hzp-mf__apply.is-nocount .hzp-fb__shownum {
        display: none;
    }

    html.hzp-js .hzp-mf__apply.is-nocount .hzp-fb__showplain {
        display: inline;
    }

    .hzp-pin__search:focus-visible,
    .hzp-pin__filters:focus-visible,
    .hzp-core__opt:focus-visible,
    .hzp-core__more:focus-visible,
    .hzp-period__opt:focus-visible {
        outline: 2px solid var(--hagzi-primary, #0745D9);
        outline-offset: 2px;
    }
}

/*
 * Home services menu item: not in the header row at any width. The nav column
 * tops out at about 546px on every desktop, and seven English labels with 30px
 * gaps need ~677px, so every desktop visitor got two rows. The item stays in
 * the phone menu sheet, the footer and the homepage card, and Tools & services
 * leads to it; the remaining six fit one row at a 24px gap.
 */
.hz-header .hz-nav__link--wide-only {
    display: none;
}

/* =============================================================================
   Smart search: "we searched for" chips (SearchInterpretation), every width.
   Server-rendered links; removing one needs no script.
   ============================================================================= */
.hzp-intent {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px 10px;
    margin: 12px 0 4px;
}

.hzp-intent__heading {
    color: #5b6270;
    font-size: 13px;
    font-weight: 600;
}

.hzp-intent__list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.hzp-intent__chip {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    min-height: 34px;
    max-width: min(86vw, 360px);
    padding: 6px 10px 6px 12px;
    border: 1px solid #c9d6ea;
    border-radius: 999px;
    background: #eef4fc;
    color: #1f3a5f;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.25;
    text-decoration: none;
}

[dir="rtl"] .hzp-intent__chip {
    padding: 6px 12px 6px 10px;
}

.hzp-intent__chip span {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hzp-intent__chip svg {
    flex: none;
    width: 15px;
    height: 15px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzp-intent__chip:hover {
    border-color: #8fb0dc;
}

.hzp-intent__chip:focus-visible {
    outline: 2px solid #1f5fbf;
    outline-offset: 2px;
}

/* Currency selector (resources/currency/views/selector.blade.php). Phones use the menu-sheet copy. */
.hz-ccy:not([hidden]) { display: inline-flex; }

@media (max-width: 720px) {
    .hz-header .hz-actions > .hz-ccy:not(.hz-ccy--menu) { display: none !important; }
}

/* themes/property/property-add-listing-free.css */
/*
 * Free pill on the Add listing button, and the signed-out line on /add-listing.
 *
 * Linked from the property theme's head include (footer/styles.blade.php),
 * which runs after @stack('styles'). A @push from the header cannot land:
 * the header renders in the body, after that stack has already been emitted,
 * and a <style> inside #app is stripped when Vue mounts. This file is outside
 * both.
 *
 * The pill is inside the existing button. It does not change the button's
 * height: line-height stays under the label's line, vertical padding is 0,
 * and the button already refuses to wrap. Logical margin so Arabic mirrors.
 *
 * Contrast: #0745D9 on #ffffff is about 7.4:1. On the phone menu the same
 * blue sits on #E8F0FF (still above 4.5:1). The signed-out line is #12141a
 * on the form's light background.
 */

.hz-cta__free {
    display: inline-block;
    flex: 0 0 auto;
    margin-inline-start: 6px;
    padding: 0 5px;
    border-radius: 999px;
    background: #ffffff;
    color: #0745D9;
    font-size: 10px;
    font-weight: 700;
    line-height: 14px;
    letter-spacing: 0;
    vertical-align: middle;
    white-space: nowrap;
}

.hz-mobile-menu__links .hz-cta__free {
    background: #E8F0FF;
    color: #0745D9;
}

.hz-add-free-note {
    margin: 8px 0 0;
    max-width: 62ch;
    color: #12141a;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.5;
    text-align: start;
}

@media (max-width: 720px) {
    /*
     * The handset row is brand, language, this button, and the menu.
     * The pill is about 36px. Taking that out of the button's own side
     * padding keeps the menu control inside the row. Height is untouched:
     * padding-inline only, and the pill's line is shorter than the label.
     */
    .hz-header .hz-cta:has(.hz-cta__free) {
        padding-inline: 12px;
    }

    .hz-header .hz-cta__free {
        margin-inline-start: 4px;
        padding: 0 4px;
    }
}

.hz-mobile-menu__links a:has(.hz-cta__free) {
    flex-wrap: nowrap;
    white-space: nowrap;
}

/* themes/property/property-favorites.css */
/*
 * ==========================================================================
 * PROPERTY FAVOURITES
 * ==========================================================================
 *
 * The hearts were <span aria-disabled> until now, so property-pages.css styles
 * .hzp-fav as inert text. They are <button> elements now, which arrive with a
 * user-agent border, background and font of their own, so the first block here
 * takes those off and leaves the existing .hzp-fav geometry -- the 32px circle
 * and the 21px stroked glyph -- untouched and still the only thing deciding how
 * the heart is laid out.
 *
 * A fifth file rather than rules added to property-pages.css or property.css:
 * both were open in other sessions while this was written. Loaded after them,
 * so their --hzp-* tokens are in scope here.
 *
 * Every selector below names either a <button>.hzp-fav, the .hzp-fav--on
 * modifier, or a .hzfav-* class, none of which existed before this file. A page
 * that has no heart on it renders exactly as it did.
 */

/* ------------------------------------------------------------- the contract */

/*
 * --hzfav-saved is the colour of a saved favourite on this channel. It is
 * declared on :root so it is in scope for every element on every property
 * page: this file is linked from components/layouts/footer/styles.blade.php,
 * which the shop layout includes in <head> unconditionally.
 *
 * The shared name is the point of it. The "Save this search" control on the
 * search page reads the same variable from property-pages.css, so the two
 * saved states on this channel are one declaration and cannot drift apart.
 * That file carries #e11d48 as its var() fallback and this declares the same
 * value, so the two agree whether or not this declaration is reached.
 *
 * WHY THIS RED
 *
 * A filled red heart is the convention for "saved", and the convention's red
 * is a crimson rather than a signal red. #e11d48 sits at hue 347deg -- pinker,
 * and eleven degrees off the #d92228 at hue 358deg that this project already
 * spends on the demo notices on the project pages. Keeping those two apart
 * matters more than reusing a value: #d92228 is this project's warning red,
 * and a heart drawn in the warning red says "problem" where it means "kept".
 *
 * Contrast, measured rather than assumed. #e11d48 is 4.70:1 against white,
 * which is what sits behind every heart on this channel -- the card body, the
 * 94%-white disc on the home page cards and the favourites tiles, and the
 * solid white circle on the gallery. That clears the 3:1 WCAG 1.4.11 asks of
 * a non-text graphic, and clears 4.5:1 too, which is the threshold that
 * would apply if it were ever put on running text.
 *
 * --hzfav-saved-strong is the hover, at 6.28:1. --hzfav-saved-wash is the
 * hover backing on the search card, standing in for the purple wash the
 * unsaved heart uses. Both are local to this file; the contract is one name.
 *
 * Colour is not the carrier of the state and is not being asked to be: the
 * glyph goes from outline to filled, and the accessible name changes with it.
 */
:root {
    --hzfav-saved: #f40051;
    --hzfav-saved-strong: #d60047;
    --hzfav-saved-wash: #fff0f5;
}

/* --------------------------------------------------------------- the control */

button.hzp-fav {
    padding: 0;
    border: 0;
    background: none;
    font: inherit;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

button.hzp-fav:hover {
    color: var(--hzp-accent, #0745D9);
    background: var(--hzp-accent-wash, #EEF3FF);
}

button.hzp-fav:focus-visible {
    outline: 2px solid var(--hzp-accent, #0745D9);
    outline-offset: 2px;
}

/*
 * The saved state, and the first thing that distinguishes it: the glyph fills.
 *
 * Colour alone would carry it for most readers but not for all, so the fill is
 * the signal and the colour follows it. One class and one red across this
 * channel rather than one per component -- this reaches the search card's
 * .hzp-fav, the gallery's .hzpg__tool, the home card's .hz-lcard__fav and the
 * detail bar's .hzd-bar__act, because the script sets .hzp-fav--on on every
 * [data-hzfav] whatever its own class is.
 *
 * It was the brand purple until now, which is the colour this channel uses for
 * "active" everywhere else. A heart is the one control where that reading is
 * wrong: a filled purple heart is a house style, a filled red one is
 * understood without being learned.
 *
 * (0,1,1), which is not enough on its own for four different surfaces with
 * hover and neutral rules of their own. The section at the foot of this file
 * corrects each of them and says why.
 */
button.hzp-fav--on {
    color: var(--hzfav-saved, #e11d48);
}

button.hzp-fav--on svg {
    fill: currentColor;
}

/*
 * The listing page's heart is a .hzpg__tool, which property-pages.css already
 * styles as a bordered 36px circle and already has a <button> form, because the
 * Share control beside it was one. So it needs no reset -- only the same
 * "saved" modifier the card hearts take, which is one class name across both so
 * the script has one thing to toggle. The two rules above it that name
 * button.hzp-fav do not reach here; these carry the fill and the border.
 *
 * The border takes the red as well as the glyph. This is a 36px circular icon
 * button sitting on a photograph, and a red ring around a filled red heart
 * reads as one saved control; a red glyph inside a purple ring would read as
 * two states disagreeing. It is not the "bordered and red all over" shape that
 * means destructive, because that shape needs a text label, and this has none.
 *
 * The white background and the neutral 1px border are property-pages.css's and
 * stay as they are when unsaved -- they are what makes any glyph legible over
 * a photograph.
 */
button.hzpg__tool[data-hzfav] svg {
    transition: fill 120ms ease;
}

.hzp-detail button.hzpg__tool.hzp-fav--on {
    border-color: var(--hzfav-saved, #e11d48);
    color: var(--hzfav-saved, #e11d48);
}

/*
 * .hzp-detail button.hzpg__tool:hover in property-pages.css is (0,3,1), the
 * same as the rule above, and would win or lose on file order alone. Written
 * out at (0,4,1) so a saved heart deepens under the pointer instead of
 * flickering back to the unsaved purple if that file is ever reordered.
 */
.hzp-detail button.hzpg__tool.hzp-fav--on:hover {
    border-color: var(--hzfav-saved-strong, #be123c);
    color: var(--hzfav-saved-strong, #be123c);
}

.hzp-detail button.hzpg__tool.hzp-fav--on svg {
    fill: currentColor;
}

@media (prefers-reduced-motion: reduce) {
    button.hzpg__tool[data-hzfav] svg {
        transition: none;
    }
}

/* ------------------------------------------------------- the favourites grid */

/*
 * /account/favorites is a shortlist, and a shortlist is read across rather than
 * down: the reader already knows what each of these is and wants them all in
 * view at once to compare. So a favourite is a compact tile here -- photograph,
 * title, price -- rather than the full search card, which spends most of its
 * height on a description and a set of actions that the reader has already had.
 *
 * The geometry is the car channel's, measured off its own Favorites page rather
 * than guessed: an auto-filled 220px minimum track with a 14px gutter, dropping
 * to a 150px minimum below 768px, which is what keeps it two-up on a phone
 * instead of collapsing to a single column. The palette and the type are not
 * shared -- see .hzfav-tile__price and .hzfav-tile__title below.
 */
.hzfav-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 14px;
    margin: 0;
    padding: 0;
    list-style: none;
}

@media (max-width: 767.98px) {
    .hzfav-grid {
        grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    }
}

/*
 * position: relative because the remove control is positioned against it, and
 * overflow: hidden so the photograph takes the tile's corner radius without
 * needing one of its own. The radius is this channel's --hzac-radius, not the
 * car channel's 8px.
 */
.hzfav-tile {
    position: relative;
    display: grid;
    align-content: start;
    overflow: hidden;
    border: 1px solid var(--hzac-line, #e7e9ee);
    border-radius: var(--hzac-radius, 10px);
    background: #ffffff;
    transition: border-color 140ms ease;
}

.hzfav-tile:hover {
    border-color: var(--hzac-line-strong, #d6dae1);
}

/*
 * The whole tile is the link. `.acct a` already sets colour and decoration to
 * inherit at a specificity this cannot reach, and inheriting is what is wanted,
 * so only the layout is set here.
 */
.hzfav-tile__link {
    display: grid;
    align-content: start;
    min-width: 0;
}

/*
 * A fixed band rather than an aspect ratio, which is what the car channel does
 * and is the right call for a grid whose track width changes: every tile in a
 * row lines up on the same two horizontals however wide the column happens to
 * be, and object-fit absorbs the difference in the photographs.
 */
.hzfav-tile__media {
    display: block;
    width: 100%;
    height: 132px;
    background: var(--hzac-fill, #f4f5f7);
    object-fit: cover;
}

.hzfav-tile__body {
    display: grid;
    gap: 3px;
    min-width: 0;
    padding: 12px 13px;
}

/*
 * One line, then an ellipsis. A shortlist is scanned, and a title that wraps to
 * three lines on one tile and one on the next destroys the horizontal rhythm
 * that makes it scannable. The full title is a click away and is also the
 * accessible name of the remove button beside it.
 */
.hzfav-tile__title {
    overflow: hidden;
    color: var(--hzac-ink, #12141a);
    font-size: 13.5px;
    font-weight: 600;
    line-height: 1.45;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/*
 * This channel's purple, and this channel's price idiom: the figure carries the
 * weight and the currency and the rent period follow it a size down, which is
 * how a price is set on a property card and on a listing page here.
 */
.hzfav-tile__price {
    color: var(--hzac-primary, #0745D9);
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.45;
    white-space: nowrap;
}

.hzfav-tile__price small {
    margin-inline-start: 4px;
    font-size: 12px;
    font-weight: 600;
}

/* ------------------------------------------------------ removing from here */

/*
 * The car channel's tiles have no remove control at all -- no button, no glyph,
 * nothing on hover; the tile is one anchor and the only way to unsave is to go
 * back to the car itself. Copying that would take away something this page
 * already does, so it is not copied.
 *
 * Instead the heart is kept, filled and in the saved red because everything on
 * this page is saved by definition, and held at zero opacity so
 * that a tile at rest is the car tile exactly. It appears on hover, on
 * focus-within -- which is what puts it in reach of a keyboard, since tabbing
 * to it is what reveals it -- and unconditionally wherever hover is not a thing
 * the pointer can do.
 */
.hzfav-tile__remove {
    position: absolute;
    top: 8px;
    inset-inline-end: 8px;
    display: grid;
    place-items: center;
    width: 30px;
    height: 30px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.94);
    box-shadow: 0 1px 3px rgba(18, 20, 26, 0.24);
    /* Server-rendered red rather than waiting for the script: every tile on
       this page is a saved favourite before any JavaScript runs. The
       94%-white disc and the shadow above it are what keep it legible over
       the photograph and are unchanged. */
    color: var(--hzfav-saved, #e11d48);
    font: inherit;
    opacity: 0;
    cursor: pointer;
    transition: opacity 140ms ease, background-color 140ms ease;
    -webkit-appearance: none;
    appearance: none;
}

.hzfav-tile__remove svg {
    width: 17px;
    height: 17px;
    fill: currentColor;
    stroke: currentColor;
    stroke-width: 1.4;
    stroke-linejoin: round;
}

.hzfav-tile:hover .hzfav-tile__remove,
.hzfav-tile:focus-within .hzfav-tile__remove {
    opacity: 1;
}

.hzfav-tile__remove:hover {
    background: #ffffff;
    color: var(--hzfav-saved-strong, #be123c);
}

.hzfav-tile__remove:focus-visible {
    opacity: 1;
    outline: 2px solid var(--hzac-primary, #0745D9);
    outline-offset: 2px;
}

@media (hover: none) {
    .hzfav-tile__remove {
        opacity: 1;
    }
}

@media (prefers-reduced-motion: reduce) {
    .hzfav-tile,
    .hzfav-tile__remove {
        transition: none;
    }
}

/* ------------------------------------------- a favourite that has gone away */

/*
 * Saved here, then unpublished on this channel. It keeps its place on the grid
 * rather than being dropped, because it is still in the customer's list and
 * only they get to decide to drop it -- and because a list that quietly shrinks
 * is the same lie as a stale cache. The tile says what happened in the space
 * the photograph would have taken, keeps the title it was saved under, and puts
 * a plain, always-visible Remove where the price would be. The dashed border is
 * the one thing that marks it out at a glance in a row of live tiles.
 */
.hzfav-tile--gone {
    border-style: dashed;
    border-color: var(--hzac-line-strong, #d6dae1);
}

.hzfav-tile__gone {
    display: grid;
    place-content: center;
    justify-items: center;
    gap: 6px;
    padding: 12px;
    background: var(--hzac-fill-soft, #fafbfc);
    color: var(--hzac-muted, #6b7280);
    text-align: center;
}

.hzfav-tile__gone svg {
    width: 20px;
    height: 20px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.hzfav-tile__gone-text {
    font-size: 12px;
    line-height: 1.4;
}

.hzfav-tile--gone .hzfav-tile__title {
    color: var(--hzac-muted, #6b7280);
}

.hzfav-tile__drop {
    justify-self: start;
    padding: 0;
    border: 0;
    background: none;
    color: var(--hzac-primary, #0745D9);
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;
    text-align: start;
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

.hzfav-tile__drop:hover {
    color: var(--hzac-primary-dark, #0638B0);
}

.hzfav-tile__drop:focus-visible {
    outline: 2px solid var(--hzac-primary, #0745D9);
    outline-offset: 2px;
}

/* ------------------------------------------------ the home page's own heart */

/*
 * The home page's listing cards carry .hz-lcard__fav, which property.css styles
 * as an inert 29px disc -- it was a <span aria-disabled> with a title saying
 * saving was not available, which stopped being true once the rest of this
 * channel could save. It is a <button> now, so it needs the same three things
 * taken off it that .hzp-fav did, and the cursor put back the right way round;
 * property.css sets cursor: not-allowed at (0,1,0) and this reaches it at
 * (0,1,1). The disc, its shadow and the glyph inside it are left exactly as
 * property.css draws them.
 *
 * There is no saved-state colour rule here on purpose: button.hzp-fav--on
 * above already carries it, and it asks only for the modifier the script sets.
 * "On" is one class and one red across this channel rather than one per card.
 * The saved hover is a different matter and is at the foot of this file, since
 * button.hz-lcard__fav:hover below outranks that blanket rule.
 */
button.hz-lcard__fav {
    padding: 0;
    border: 0;
    font: inherit;
    cursor: pointer;
    transition: color 140ms ease, background-color 140ms ease;
    -webkit-appearance: none;
    appearance: none;
}

button.hz-lcard__fav:hover {
    background: #ffffff;
    color: var(--hagzi-primary, #0745D9);
}

button.hz-lcard__fav:focus-visible {
    outline: 2px solid var(--hagzi-primary, #0745D9);
    outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
    button.hz-lcard__fav {
        transition: none;
    }
}

/* ------------------------------------------ saved state, per control surface */

/*
 * button.hzp-fav--on near the top of this file sets the saved colour for every
 * heart on the channel at (0,1,1). What it cannot do alone is survive the
 * hover and neutral rules that sit on the individual controls -- two of them
 * in this file, one in a template another session owns. Each rule below names
 * the surface it corrects and why it is written at the specificity it is.
 *
 * Nothing here touches an unsaved heart: every selector carries .hzp-fav--on,
 * which only the script's saved state puts on the element.
 */

/*
 * Search results card.
 *
 * button.hzp-fav:hover at the top of this file paints the unsaved hover, a
 * purple glyph on the purple wash, and at (0,2,1) it outranks the saved-state
 * rule -- so a saved heart went purple the moment it was pointed at. It
 * deepens now instead, and the wash follows the glyph rather than contradicting
 * it.
 */
button.hzp-fav.hzp-fav--on:hover {
    background: var(--hzfav-saved-wash, #fff1f2);
    color: var(--hzfav-saved-strong, #be123c);
}

/*
 * Home page card rows.
 *
 * The same collision: button.hz-lcard__fav:hover above is (0,2,1) and was
 * repainting a saved heart in --hagzi-primary under the pointer. Only the
 * colour and the backing that hover already changed are set here; the 29px
 * 94%-white disc and its shadow belong to property.css and are what make the
 * glyph legible over a photograph, so they are left where they are.
 */
button.hz-lcard__fav.hzp-fav--on:hover {
    background: #ffffff;
    color: var(--hzfav-saved-strong, #be123c);
}

/*
 * Listing detail, the action bar under the gallery.
 *
 * OVERRIDE OF A DECLARATION THIS SESSION DOES NOT OWN.
 *
 * resources/themes/property/views/products/view.blade.php pushes an inline
 * <style> onto the styles stack containing
 *
 *     .hzd-bar__act.hzp-fav--on { color: var(--hagzi-primary, #0745D9); }
 *
 * at (0,2,0), with a matching svg fill rule. The stack is emitted at line 145
 * of the shop layout and this stylesheet is linked at line 154, so document
 * order alone settles it today -- but that template is open in another session
 * and a block moved earlier or later would silently take the colour back. The
 * element in this selector makes it (0,2,1) and independent of where theirs
 * lands. Their `fill: currentColor` is correct and is left to do its job.
 */
button.hzd-bar__act.hzp-fav--on {
    color: var(--hzfav-saved, #e11d48);
}

/* Their .hzd-bar__act:hover recolours to --hzp-ink. This keeps the red and
   leaves their tint background alone. */
button.hzd-bar__act.hzp-fav--on:hover {
    color: var(--hzfav-saved-strong, #be123c);
}

/*
 * The Remove link on a tile whose listing is no longer published.
 *
 * Held OFF the saved red deliberately. It is a 12.5px underlined text link
 * reading "Remove", not a heart, and it carries [data-hzfav] -- so the script
 * gives it .hzp-fav--on along with everything else, and the blanket rule would
 * have turned the one piece of running text in this file red. Red text beside
 * a dashed "no longer published" tile reads as an error about the tile rather
 * than as affection for it. It keeps the channel's link purple; the heart red
 * is for hearts.
 *
 * (0,2,1) to clear the blanket rule, plus a hover variant, because that
 * specificity would otherwise also swallow .hzfav-tile__drop:hover at (0,2,0).
 */
button.hzfav-tile__drop.hzp-fav--on {
    color: var(--hzac-primary, #0745D9);
}

button.hzfav-tile__drop.hzp-fav--on:hover {
    color: var(--hzac-primary-dark, #0638B0);
}

/* ----------------------------------------------- animated listing-card heart */

/*
 * Search, seller and homepage cards get the animated heart treatment. The
 * detail-page gallery/action controls and the Remove control on /favorites
 * deliberately retain their established geometry.
 */
button.hzp-fav.hzp-like,
button.hz-lcard__fav.hzp-like {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    min-width: 34px;
    height: 34px;
    padding: 0;
    overflow: visible;
    border: 1px solid #e0e3e9;
    border-radius: 999px;
    background: #ffffff;
    color: #171a21;
    box-shadow: 0 2px 7px rgba(16, 20, 28, 0.1);
    line-height: 1;
    transition:
        border-color 150ms ease,
        box-shadow 150ms ease,
        transform 150ms ease;
}

button.hzp-fav.hzp-like {
    position: relative;
}

button.hz-lcard__fav.hzp-like {
    width: 32px;
    min-width: 32px;
    height: 32px;
}

button.hzp-fav.hzp-like:hover,
button.hz-lcard__fav.hzp-like:hover,
button.hzp-fav.hzp-like.hzp-fav--on:hover,
button.hz-lcard__fav.hzp-like.hzp-fav--on:hover {
    border-color: #cfd4dd;
    background: #ffffff;
    color: #171a21;
    box-shadow: 0 4px 12px rgba(16, 20, 28, 0.14);
}

button.hzp-like:active {
    transform: translateY(1px);
}

.hzp-like__icon {
    position: relative;
    display: grid;
    flex: none;
    width: 22px;
    height: 22px;
    place-items: center;
    color: #4b5260;
    transform-origin: center;
}

button.hzp-like .hzp-like__icon svg {
    width: 22px;
    height: 22px;
    overflow: visible;
    fill: transparent;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

button.hzp-like .hzp-like__icon svg path {
    fill: transparent;
    transition:
        fill 150ms cubic-bezier(0.22, 1, 0.36, 1),
        stroke 150ms cubic-bezier(0.22, 1, 0.36, 1);
}

button.hzp-like:hover .hzp-like__icon {
    color: var(--hzfav-saved, #f40051);
}

button.hzp-like.hzp-fav--on {
    background: #ffffff;
    color: #171a21;
}

button.hzp-like.hzp-fav--on .hzp-like__icon,
button.hzp-like.hzp-fav--on:hover .hzp-like__icon,
button.hzp-like.hzp-savesearch--on .hzp-like__icon,
button.hzp-like.hzp-savesearch--on:hover .hzp-like__icon {
    color: var(--hzfav-saved, #f40051);
}

button.hzp-like.hzp-fav--on .hzp-like__icon svg path,
button.hzp-like.hzp-savesearch--on .hzp-like__icon svg path {
    fill: currentColor;
}

.hzp-like__particles {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 0;
    height: 0;
    color: var(--hzfav-saved, #f40051);
    pointer-events: none;
}

.hzp-like__particles i {
    position: absolute;
    top: -1.5px;
    left: -1.5px;
    width: 3px;
    height: 3px;
    border-radius: 50%;
    background: currentColor;
    opacity: 0;
}

button.hzp-like--burst .hzp-like__icon {
    animation: hzfav-like-pop 350ms cubic-bezier(0.34, 1.96, 0.64, 1);
}

button.hzp-like--burst .hzp-like__particles i {
    animation: hzfav-like-burst var(--hzfav-pdur, 600ms) ease-out var(--hzfav-pdelay, 0ms) forwards;
}

@keyframes hzfav-like-pop {
    0% { transform: scale(1); }
    30% { transform: scale(0.82); }
    100% { transform: scale(1); }
}

@keyframes hzfav-like-burst {
    0% {
        opacity: 0;
        transform: translate(0, 0) scale(0.4);
    }
    20% {
        opacity: 1;
        transform: translate(
            var(--hzfav-px-quarter),
            var(--hzfav-py-quarter)
        ) scale(var(--hzfav-psize, 1));
    }
    100% {
        opacity: 0;
        transform: translate(var(--hzfav-px), var(--hzfav-py)) scale(var(--hzfav-pend, 0.6));
    }
}

@media (max-width: 640px) {
    button.hzp-fav.hzp-like,
    button.hz-lcard__fav.hzp-like {
        width: 32px;
        min-width: 32px;
        height: 32px;
    }
}

@media (prefers-reduced-motion: reduce) {
    button.hzp-fav.hzp-like,
    button.hz-lcard__fav.hzp-like,
    button.hzp-like .hzp-like__icon svg path,
    button.hzp-like--burst .hzp-like__icon,
    button.hzp-like--burst .hzp-like__particles i {
        transition: none;
        animation: none;
    }
}

/* themes/property/property-rtl.css */
/* =============================================================================
   property-rtl.css — the part of right-to-left that logical properties cannot do
   =============================================================================

   Loaded only when the active locale's direction is rtl, and every rule is
   scoped to [dir="rtl"] as well, so it cannot reach the English document by
   either route.

   Almost all of the mirroring is NOT here. The property stylesheets were
   converted to logical properties in place — margin-inline-start,
   padding-inline-start, border-inline-start, inset-inline-start/end,
   text-align: start/end — which resolve to exactly the physical values they
   replaced in a left-to-right document and flip on their own in a
   right-to-left one. That is one set of numbers serving both directions rather
   than two sets to keep in step, and it is why this file is short.

   What is left here is the two things a logical property cannot express:

     1. Artwork that points. A logical property moves a box; it cannot turn the
        arrow drawn inside it. A "previous" control mirrors to the other end of
        the rail on its own, but the chevron in it would still point the way it
        was drawn, so the two would disagree.

     2. Anything whose direction is baked into a gradient or a shadow offset.

   Not here, on purpose:
     * the select chevron (property-pages.css). Its mark is drawn from a
       border pair turned 45deg, so mirroring the borders would rotate the
       glyph rather than move it. Its BOX mirrors via inset-inline-end; the
       mark itself points down, which is the same mark in either direction.
     * the disclosure chevrons on the filter chips and the account nav. Those
       rotate 180deg between closed and open, which is a vertical movement and
       means the same thing in both directions.
   ========================================================================== */

/* ---- pointing artwork ---------------------------------------------------- */

/*
 * The carousels' own controls: area cards on the homepage, the listing rail,
 * the detail gallery and its thumbnail rail.
 *
 * Their boxes have already swapped ends by this point — --prev carries
 * inset-inline-start, so it is on the right in Arabic. scaleX turns the glyph
 * to match, which is the whole of what is needed: these are single chevrons,
 * so a mirror is exactly a reversal.
 *
 * The lightbox is not in this list. Its arrows sit at physical left/right,
 * ArrowLeft/ArrowRight and the swipe step the same way in both locales, and
 * its thumbnail strip runs left to right, so mirroring only its glyphs made
 * both arrows point inward in Arabic.
 */
[dir="rtl"] .hz-areas__nav svg,
[dir="rtl"] .hzpg__nav svg,
[dir="rtl"] .hzpg__railnav svg {
    transform: scaleX(-1);
}

/*
 * The listing rail's arrows are one glyph used twice, the back one turned
 * round in the sheet rather than drawn again. Both need mirroring in Arabic,
 * and the back one has to keep its 180 as well — hence the pair, and hence
 * the second rule repeating the rotation rather than replacing it. transform
 * does not accumulate across rules; the winning declaration is the whole
 * value.
 */
[dir="rtl"] .hzp-rail__nav svg {
    transform: scaleX(-1);
}

[dir="rtl"] .hzp-rail__nav[data-hzd-scroll="-1"] svg {
    transform: rotate(180deg) scaleX(-1);
}

/*
 * Breadcrumb separators, where the theme draws one rather than using a
 * character. A separator that leans is a directional mark.
 */
[dir="rtl"] .hzp-crumbs__sep svg,
[dir="rtl"] .hzp-breadcrumb svg {
    transform: scaleX(-1);
}

/*
 * The section heads' "see all" arrow, which was the one member of the family
 * above that did not get mirrored. It is an inline SVG -- 'arrow' in the icon
 * map, <path d="M4.5 12h15"/><path d="m13.5 6 6 6-6 6"/> -- so it is drawn
 * pointing right and nothing about a right-to-left document turns it round.
 *
 * A forward affordance points towards the direction of reading, so in Arabic
 * it points left. Its box already sits at the inline end without help, because
 * the head is a flex row; only the glyph was wrong.
 *
 * Two call sites, both .hz-seeall: the areas section and every listing row.
 */
[dir="rtl"] .hz-seeall svg {
    transform: scaleX(-1);
}

/*
 * The hero's projects link had a rule here to turn its forward arrow round.
 * The arrow was removed from the control on request, so there is no longer any
 * pointing artwork in the tab bar to mirror. Nothing else about that link needs
 * this file: the bar is a flex row and reverses on its own, and the hairline
 * beside it is a border-inline-start, which flips without help.
 */

/* ---- numbers that must not be reordered ---------------------------------- */

/*
 * Prices, areas, telephone numbers and years are left-to-right runs whatever
 * surrounds them. Western digits are what this market reads on a property
 * portal — Bayut and Property Finder both use them in Arabic — but a bare
 * digit run inside Arabic text is at the mercy of the bidi algorithm, which
 * is free to reorder the groups around it. "1,250 JOD" can come out with the
 * currency on the wrong side of the figure, and a phone number can come out
 * with its groups swapped.
 *
 * isolate is the correct value rather than embed: it also stops the run from
 * affecting the ordering of the text on either side of it.
 */
[dir="rtl"] .hz-lcard__price,
[dir="rtl"] .hzp-detail__price,
[dir="rtl"] .hzp-price,
[dir="rtl"] .hz-phone span,
[dir="rtl"] .hzp-fact__value {
    unicode-bidi: isolate;
}

/* ---- shadows and gradients with a side ----------------------------------- */

/*
 * The header's divider sits at the inline end of the phone block. Its rule
 * moved with the logical border, but the sliver of light beside it was drawn
 * with a physical offset.
 */
[dir="rtl"] .hz-actions .hz-phone {
    box-shadow: none;
}

/* ---- form controls ------------------------------------------------------- */

/*
 * Text inputs inherit direction from the document, which is right for a name
 * or a district but wrong for the fields that hold a number, an e-mail
 * address or a URL — those are left-to-right by nature, and a right-to-left
 * input puts the caret and the text on the wrong side of the box.
 */
[dir="rtl"] input[type="email"],
[dir="rtl"] input[type="tel"],
[dir="rtl"] input[type="url"],
[dir="rtl"] input[type="number"],
[dir="rtl"] input[type="password"] {
    direction: ltr;
    text-align: start;
}

/* ---- the Arabic coverage notice ------------------------------------------ */

/*
 * The strip under the header that says what Arabic here covers.
 *
 * It lives in this sheet rather than property.css because the element it
 * styles only ever exists in a right-to-left document -- the partial is inside
 * the same direction test that loads this file -- so putting it in the shared
 * sheet would ship rules for a node the English page never has.
 *
 * Quiet on purpose. This is a statement of scope, not a warning: no amber, no
 * border, no icon in a coloured circle. It sits between the header and the
 * hero at the weight of small print, which is the weight it deserves -- a
 * reader who wants it will read it, and a reader who does not is not stopped
 * by it. Anything louder would read as an error on a page that has none.
 */
[dir="rtl"] .hz-l10n-note {
    border-bottom: 1px solid #e7e9ee;
    background: #f7f8fa;
    color: #5a6270;
    font-size: 12.5px;
    line-height: 1.55;
}

[dir="rtl"] .hz-l10n-note .hz-shell {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding-top: 9px;
    padding-bottom: 9px;
}

[dir="rtl"] .hz-l10n-note svg {
    flex: none;
    width: 15px;
    height: 15px;
    /* Optical, not geometric: the cap height of the text beside it sits a
       little below the line box top, and matching the glyph to the box would
       leave it looking high. */
    margin-top: 1px;
    opacity: 0.75;
}

[dir="rtl"] .hz-l10n-note p {
    margin: 0;
}

/* ---- English text inside an Arabic document ------------------------------ */

/*
 * The site's own text is Arabic; the listings, the project pages and the
 * listing form are not, and will not be for a while. So most Arabic pages here
 * carry runs of English inside a right-to-left block, and that is precisely
 * the case the bidi algorithm gets visibly wrong.
 *
 * An English sentence in an RTL paragraph inherits the paragraph's direction,
 * which puts its trailing punctuation at the WRONG END: "Homes to rent and buy
 * across Jordan." renders as ".Homes to rent and buy across Jordan". The full
 * stop, the question mark, the brackets and the quotes all migrate, and it is
 * the single most obvious sign of a right-to-left layout done carelessly.
 *
 * unicode-bidi: plaintext is the property that exists for exactly this: it
 * makes each paragraph take its direction from its own first strong character
 * rather than from its parent. Arabic text is unaffected -- its first strong
 * character is Arabic, so it stays right-to-left. English text becomes
 * left-to-right internally and keeps its punctuation where it belongs, while
 * still sitting in the right-to-left column, which is what a bilingual page
 * should do.
 *
 * WARNING, AND THE REASON THIS RULE ALONE WAS NOT ENOUGH. The paragraph below
 * used to say "it changes ordering only. Alignment still comes from
 * text-align, which the stylesheets now state logically, so nothing moves in
 * the layout." That is wrong, and it is wrong in a way that is easy to miss.
 *
 * plaintext changes the element's USED paragraph direction. `text-align: start`
 * resolves against that direction. So a card title holding a Latin string got
 * paragraph direction ltr, and `start` then meant LEFT -- the title sat hard
 * against the left edge of a right-aligned Arabic card, which is exactly what
 * the client reported on the featured-properties row.
 *
 * Note that getComputedStyle still reports direction: rtl for these elements,
 * because the `direction` PROPERTY is untouched; only the used bidi paragraph
 * direction changes. So this cannot be found by reading computed direction --
 * it has to be measured from where the glyphs actually land.
 *
 * The alignment rule underneath this one is the other half of the fix.
 *
 * Named on text-bearing elements rather than on * because it establishes a
 * bidi paragraph, and doing that on every wrapper as well as every leaf is
 * both needless and a way to get surprised.
 */
[dir="rtl"] h1, [dir="rtl"] h2, [dir="rtl"] h3,
[dir="rtl"] h4, [dir="rtl"] h5, [dir="rtl"] h6,
[dir="rtl"] p, [dir="rtl"] li, [dir="rtl"] dt, [dir="rtl"] dd,
[dir="rtl"] th, [dir="rtl"] td,
[dir="rtl"] a, [dir="rtl"] button, [dir="rtl"] label,
[dir="rtl"] figcaption, [dir="rtl"] summary, [dir="rtl"] legend,
[dir="rtl"] option, [dir="rtl"] blockquote {
    unicode-bidi: plaintext;
}

/*
 * Placeholders too, which are their own text run and get the same treatment
 * from the algorithm.
 */
[dir="rtl"] ::placeholder {
    unicode-bidi: plaintext;
}

/*
 * The other half of the rule above: alignment must follow the DOCUMENT, not
 * the direction plaintext just derived from the element's own first character.
 *
 * match-parent is `inherit`, except that start and end are resolved against the
 * PARENT's direction -- and the parent is untouched by plaintext, so it is
 * still rtl. Latin and Arabic text therefore both sit at the right edge, while
 * plaintext continues to order each run correctly internally and keep its
 * punctuation at the right end. Alignment and ordering, decided separately,
 * which is the distinction the two properties exist to draw.
 *
 * It has to be match-parent rather than `text-align: right`. `right` would win
 * over the inherited centring in twenty wrapper rules in this theme -- the hero
 * content, the band inner, the empty states, the banner rail -- and flatten all
 * of them against one edge. match-parent inherits `center` as `center`.
 *
 * summary is deliberately ABSENT from this list. .hzp-calc__how summary carries
 * an explicit text-align: center at the same specificity as [dir="rtl"]
 * summary, and this sheet loads last, so including it here would silently
 * un-centre that control. It is the only such collision in the theme.
 */
[dir="rtl"] h1, [dir="rtl"] h2, [dir="rtl"] h3,
[dir="rtl"] h4, [dir="rtl"] h5, [dir="rtl"] h6,
[dir="rtl"] p, [dir="rtl"] li, [dir="rtl"] dt, [dir="rtl"] dd,
[dir="rtl"] th, [dir="rtl"] td,
[dir="rtl"] a, [dir="rtl"] button, [dir="rtl"] label,
[dir="rtl"] figcaption, [dir="rtl"] legend,
[dir="rtl"] option, [dir="rtl"] blockquote {
    /*  THE PREFIX IS LOAD-BEARING, NOT LEGACY HYGIENE.
     *
     *  Chromium 148 does NOT support unprefixed match-parent:
     *      CSS.supports("text-align", "match-parent")           -> false
     *      CSS.supports("text-align", "-webkit-match-parent")   -> true
     *  An unprefixed declaration is REJECTED at parse time, so the first
     *  version of this fix was a silent no-op -- the titles stayed flush left
     *  and computed text-align stayed `start`, exactly as before. Measured, not
     *  assumed: setting the prefixed form inline moved the title from
     *  gapRight 19px to gapRight 0 and computed to `right`.
     *
     *  Both spellings, prefixed FIRST. Where only the prefix is understood the
     *  unprefixed line is dropped and the prefix stands; where both are, the
     *  later unprefixed line wins and they are equivalent. That covers Blink
     *  and WebKit by prefix and Gecko by the standard name.
     *
     *  If a browser understands neither, both are dropped and behaviour reverts
     *  to the defect rather than to something worse. */
    text-align: -webkit-match-parent;
    text-align: match-parent;
}


/* ==========================================================================
   GLYPH DIRECTION -- the arrows and progression chevrons this theme draws
   pointing left-to-right. Added 29 August 2026, after the same class of defect
   was found on the cars channel's homepage search button.

   These are not reachable by any property-based scanner: an arrow is a <path>
   of coordinates and declares nothing directional, so the campaign's sweep of
   left/right, insets, shorthands and text-align could be complete and still
   leave every forward affordance pointing at the wrong edge. Enumerated with
   /home/demo/i18n-guard/glyph-recon.py, which reads path geometry instead.

   This joins the mirrored-artwork family already in this file (.hz-seeall svg).
   Not included, on purpose: the << >> characters in sell-for-me carry Unicode
   Bidi_Mirrored=Yes, so the shaper already flips them and a transform here
   would flip them back to wrong. Up and down carets are untouched -- a
   disclosure caret points down in Arabic too.
   ========================================================================== */

/* The sell banner's call to action, on the property home banner and again on
   the search page. One class, two call sites. */
[dir="rtl"] .hzp-sell__cta svg {
    transform: scaleX(-1);
}

/* Back controls: the listing detail bar, and the publish flow's header.
   A back affordance points against the reading direction, so it points right
   in Arabic. Neither element carries a transform of its own, and the transform
   is on the svg rather than the button so that stays true if one is added. */
[dir="rtl"] .hzd-bar__back svg,
[dir="rtl"] .hzpub-head__back svg {
    transform: scaleX(-1);
}

/* The "view this" chevron ending each account summary row, at four sites.
   .hzac-link svg already has a rule in property-account.css; it sets size and
   colour and declares no transform, so there is nothing here to compose with. */
[dir="rtl"] .hzac-link svg {
    transform: scaleX(-1);
}

/* themes/property/property-compare.css */
/*
 * Hagzi compare: the toggle on cards and the listing page, the "Compare (n)"
 * link, and the /compare table. A stylesheet rather than <style> because the
 * shop app's remount drops <style> inside #app. Logical properties only, so
 * Arabic mirrors without an RTL block.
 */

/* ---------------------------------------------------------------- toggle */

button.hzcmp-toggle {
    position: relative;
    z-index: 2;
    display: inline-grid;
    flex: none;
    place-items: center;
    inline-size: 32px;
    block-size: 32px;
    padding: 0;
    border: 1px solid transparent;
    border-radius: 50%;
    background: none;
    color: var(--hzp-body, #3b4252);
    font: inherit;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
}

button.hzcmp-toggle svg {
    inline-size: 20px;
    block-size: 20px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
}

button.hzcmp-toggle:hover {
    color: var(--hzp-accent, #0745D9);
    background: var(--hzp-accent-wash, #EEF3FF);
}

button.hzcmp-toggle:focus-visible {
    outline: 2px solid var(--hzp-accent, #0745D9);
    outline-offset: 2px;
}

button.hzcmp-toggle.hzcmp-toggle--on {
    color: #fff;
    background: var(--hzp-accent, #0745D9);
    border-color: var(--hzp-accent, #0745D9);
}

.hzp-detail .hzp-dprice__actions > button.hzcmp-toggle {
    inline-size: 36px;
    block-size: 36px;
    background: #fff;
    border-color: #e3e7ee;
}

.hzp-detail .hzp-dprice__actions > button.hzcmp-toggle.hzcmp-toggle--on {
    background: var(--hzp-accent, #0745D9);
    border-color: var(--hzp-accent, #0745D9);
}

/* Same size as the heart and share in the phone gallery header. */
button.hzcmp-toggle.hzp-mobile-gallery-header__button {
    inline-size: 40px;
    block-size: 40px;
}

button.hzcmp-toggle.hzp-mobile-gallery-header__button.hzcmp-toggle--on {
    color: #fff;
    background: var(--hzp-accent, #0745D9);
}

/* The sticky listing bar's button keeps that bar's own shape. */
button.hzcmp-toggle.hzd-bar__act {
    display: inline-flex;
    inline-size: auto;
    block-size: auto;
    border-radius: 999px;
}

button.hzcmp-toggle.hzd-bar__act.hzcmp-toggle--on {
    color: var(--hzp-accent, #0745D9);
    background: var(--hzp-accent-wash, #EEF3FF);
    border-color: transparent;
}

/* ------------------------------------------------------- bar and toast */

.hzcmp-bar,
.hzcmp-toast {
    position: fixed;
    inset-inline-end: 16px;
    inset-block-end: 20px;
    z-index: 60;
    border-radius: 999px;
    box-shadow: 0 6px 20px rgba(18, 20, 26, .18);
    font-size: 15px;
    font-weight: 600;
}

.hzcmp-bar {
    display: inline-flex;
    align-items: center;
    min-block-size: 44px;
    padding-inline: 18px;
    background: var(--hzp-accent, #0745D9);
    color: #fff;
    text-decoration: none;
}

.hzcmp-bar:hover,
.hzcmp-bar:focus-visible {
    background: #0537b0;
    color: #fff;
}

.hzcmp-bar[hidden],
.hzcmp-toast[hidden] {
    display: none;
}

.hzcmp-toast {
    inset-inline-start: 16px;
    inset-block-end: 76px;
    max-inline-size: 420px;
    margin-inline: auto;
    padding: 12px 18px;
    border-radius: 12px;
    background: #12141a;
    color: #fff;
    text-align: center;
}

/* Above the listing page's fixed Call / WhatsApp bar, never over it. */
@media (max-width: 767px) {
    html:has(.hzd-callbar) .hzcmp-bar {
        inset-block-end: 84px;
    }

    html:has(.hzd-callbar) .hzcmp-toast {
        inset-block-end: 140px;
    }
}

/* ------------------------------------------------------------- page */

.hzcmp {
    padding-block: 20px 48px;
}

.hzcmp__crumbs {
    display: flex;
    gap: 8px;
    margin-block-end: 12px;
    font-size: 14px;
    color: var(--hzp-muted, #5f6b7a);
}

.hzcmp__crumbs a {
    color: inherit;
}

.hzcmp__head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px 20px;
    margin-block-end: 20px;
}

.hzcmp__title {
    margin: 0;
    font-size: 28px;
    line-height: 1.25;
    font-weight: 700;
    color: var(--hz-ink, #12141a);
}

.hzcmp__intro {
    margin: 6px 0 0;
    color: var(--hzp-muted, #5f6b7a);
}

.hzcmp__clear,
.hzcmp__remove,
.hzcmp__browse {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-block-size: 44px;
    padding-inline: 16px;
    border: 1px solid #c9cfdb;
    border-radius: 10px;
    background: #fff;
    color: var(--hz-ink, #12141a);
    font: inherit;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
}

.hzcmp__clear {
    color: #b42318;
    border-color: #f1b8b3;
}

.hzcmp__clear[hidden] {
    display: none;
}

.hzcmp__scroll {
    overflow-x: auto;
    overscroll-behavior-inline: contain;
    border: 1px solid #e3e7ee;
    border-radius: 14px;
    background: #fff;
}

.hzcmp__table {
    inline-size: max-content;
    min-inline-size: 100%;
    border-collapse: separate;
    border-spacing: 0;
}

.hzcmp__table th,
.hzcmp__table td {
    padding: 12px 16px;
    border-block-end: 1px solid #edf0f4;
    text-align: start;
    vertical-align: top;
}

.hzcmp__table tbody tr:last-child th,
.hzcmp__table tbody tr:last-child td {
    border-block-end: 0;
}

.hzcmp__rail {
    position: sticky;
    inset-inline-start: 0;
    z-index: 1;
    inline-size: 160px;
    min-inline-size: 160px;
    background: #f7f8fa;
    color: var(--hzp-muted, #5f6b7a);
    font-size: 14px;
    font-weight: 600;
}

.hzcmp__col,
.hzcmp__cell {
    inline-size: 240px;
    min-inline-size: 240px;
    max-inline-size: 280px;
}

.hzcmp__col {
    display: table-cell;
}

.hzcmp__img {
    display: block;
    inline-size: 100%;
    max-inline-size: 240px;
    aspect-ratio: 4 / 3;
    margin-block-end: 10px;
    border-radius: 10px;
    object-fit: cover;
    background: #eef1f5;
}

.hzcmp__name {
    display: block;
    margin-block-end: 10px;
    color: var(--hz-ink, #12141a);
    font-weight: 700;
    line-height: 1.35;
    text-decoration: none;
}

.hzcmp__name:hover {
    text-decoration: underline;
}

.hzcmp__remove {
    min-block-size: 36px;
    padding-inline: 12px;
    font-size: 14px;
}

.hzcmp__cell {
    color: var(--hz-ink, #12141a);
}

.hzcmp__status {
    margin: 14px 0 0;
    color: var(--hzp-muted, #5f6b7a);
}

.hzcmp__empty {
    padding: 32px 20px;
    border: 1px dashed #c9cfdb;
    border-radius: 14px;
    text-align: center;
}

.hzcmp__empty[hidden] {
    display: none;
}

.hzcmp__empty-title {
    margin: 0 0 6px;
    font-size: 18px;
    font-weight: 700;
}

.hzcmp__browse {
    margin-block-start: 12px;
    background: var(--hzp-accent, #0745D9);
    border-color: var(--hzp-accent, #0745D9);
    color: #fff;
}

/* Two listings visible on a phone; the rest a swipe away. */
@media (max-width: 767px) {
    .hzcmp__title {
        font-size: 22px;
    }

    .hzcmp__rail {
        inline-size: 104px;
        min-inline-size: 104px;
        padding-inline: 10px;
        font-size: 13px;
    }

    .hzcmp__col,
    .hzcmp__cell {
        inline-size: calc((100vw - 32px - 106px) / 2);
        min-inline-size: 132px;
        padding-inline: 10px;
    }
}

/* themes/property/property-mobile-navigation.css */
/* Property-only, floating phone navigation. Desktop retains its existing header. */
.hz-mobile-nav,
.hz-mobile-nav-space { display: none; }

@media (max-width: 767.98px) {
    .hz-mobile-nav-space { display: block; height: calc(92px + env(safe-area-inset-bottom, 0px)); }
    .hz-mobile-nav {
        position: fixed;
        z-index: 55;
        left: 50%;
        bottom: max(10px, env(safe-area-inset-bottom, 0px));
        transform: translateX(-50%);
        display: grid;
        grid-template-columns: repeat(5, minmax(0, 1fr));
        width: calc(100% - 24px);
        max-width: 540px;
        min-height: 70px;
        padding: 5px;
        box-sizing: border-box;
        border: 1px solid rgba(255, 255, 255, .95);
        border-radius: 38px;
        background: rgba(250, 251, 255, .96);
        box-shadow: 0 8px 32px rgba(25, 39, 66, .16), inset 0 1px 1px rgba(255, 255, 255, .9), 0 0 0 1px rgba(221, 227, 239, .5);
        color: #171a22;
        font-family: inherit;
    }
    @supports ((backdrop-filter: blur(20px)) or (-webkit-backdrop-filter: blur(20px))) {
        .hz-mobile-nav {
            background: linear-gradient(135deg, rgba(255, 255, 255, .78), rgba(242, 245, 255, .63));
            -webkit-backdrop-filter: blur(22px) saturate(160%);
            backdrop-filter: blur(22px) saturate(160%);
        }
    }
    .hz-mobile-nav__item {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 4px;
        min-width: 0;
        min-height: 58px;
        padding: 3px 1px;
        border-radius: 30px;
        color: inherit;
        text-decoration: none;
        -webkit-tap-highlight-color: transparent;
        transition: background-color .15s ease, color .15s ease;
    }
    .hz-mobile-nav__icon { display: grid; place-items: center; width: 29px; height: 29px; flex: 0 0 29px; }
    .hz-mobile-nav__icon svg { display: block; width: 25px; height: 25px; }
    .hz-mobile-nav__label { font-size: 10.5px; line-height: 1.3; font-weight: 600; white-space: nowrap; }
    .hz-mobile-nav__item--add .hz-mobile-nav__icon { border-radius: 50%; background: #0745d9; color: #fff; }
    .hz-mobile-nav__item--add svg { width: 20px; height: 20px; stroke-width: 2; }
    .hz-mobile-nav__item[aria-current="page"] { color: #0745d9; background: rgba(7, 69, 217, .09); box-shadow: inset 0 3px 0 #0745d9; }
    .hz-mobile-nav__item[aria-current="page"] .hz-mobile-nav__label { font-weight: 700; }
    .hz-mobile-nav__item--favorites[aria-current="page"] svg { fill: currentColor; }
    .hz-mobile-nav__item:active { background: rgba(7, 69, 217, .14); }
    .hz-mobile-nav__item:focus-visible { outline: 2px solid #0745d9; outline-offset: -2px; }

    /* An open search dropdown owns the screen: a tap on its last options must
       never land on a tab and leave the search (UX audit D-09). */
    body:has(.hz-chip[open]) .hz-mobile-nav { visibility: hidden; pointer-events: none; }

    /* Contact actions stay above the menu with a clear gap between tap targets. */
    body:has(.hz-mobile-nav) .hzpr-page--detail .hzpr-mobile-contact {
        bottom: calc(86px + env(safe-area-inset-bottom, 0px));
    }
    body:has(.hz-mobile-nav) .hzpr-page--detail .hzpr-mobile-contact {
        padding-bottom: 10px;
    }
    body:has(.hz-mobile-nav) .hzpr-mobile-toast[data-visible] {
        bottom: calc(168px + env(safe-area-inset-bottom, 0px));
    }

    /* Keep full-screen sheets and focused text entry free of navigation chrome. */
    body:has(dialog[open]) .hz-mobile-nav,
    body:has(input:focus:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]), textarea:focus, [contenteditable="true"]:focus) .hz-mobile-nav {
        visibility: hidden;
        pointer-events: none;
    }
}

@media (max-width: 359.98px) {
    .hz-mobile-nav { width: calc(100% - 16px); padding: 4px; }
    .hz-mobile-nav__label { font-size: 9px; }
}
@media (prefers-reduced-motion: reduce) {
    .hz-mobile-nav__item { transition: none; }
}
@media (prefers-reduced-transparency: reduce) {
    .hz-mobile-nav { background: #f8faff; -webkit-backdrop-filter: none; backdrop-filter: none; }
}

/* themes/property/property-header-search.css */
/*
   Header search icon and panel (header_search switch, off by default).
   Loaded only while the switch is on; every selector is .hz-hsearch-dialog* or
   .hz-hsearch, which exist nowhere else. Logical properties throughout, so
   the Arabic (dir="rtl") document mirrors without a separate sheet.
*/

.hz-header .hz-hicon.hz-hsearch svg {
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
}

.hz-hsearch-dialog[hidden] {
    display: none !important;
}

.hz-hsearch-dialog {
    position: fixed;
    inset: 0;
    z-index: 1000;
}

.hz-hsearch-dialog__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(17, 17, 26, 0.45);
}

.hz-hsearch-dialog__panel {
    position: relative;
    box-sizing: border-box;
    width: min(680px, calc(100% - 32px));
    margin: 84px auto 0;
    padding: 16px;
    border-radius: 14px;
    background: #fff;
    box-shadow: 0 18px 48px rgba(17, 17, 26, 0.22);
}

.hz-hsearch-dialog__form {
    display: flex;
    align-items: center;
    gap: 8px;
}

.hz-hsearch-dialog__input {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 48px;
    padding: 0 14px;
    border: 1px solid #d6d3e0;
    border-radius: 10px;
    font: inherit;
    font-size: 16px;
    color: inherit;
    background: #fff;
}

.hz-hsearch-dialog__input:focus-visible {
    outline: 2px solid var(--hagzi-primary, #5b2bd9);
    outline-offset: 1px;
}

.hz-hsearch-dialog__submit {
    min-height: 48px;
    padding: 0 18px;
    border: 0;
    border-radius: 10px;
    font: inherit;
    font-weight: 600;
    color: #fff;
    background: var(--hagzi-primary, #5b2bd9);
    cursor: pointer;
}

.hz-hsearch-dialog__close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border: 0;
    border-radius: 10px;
    background: transparent;
    color: inherit;
    cursor: pointer;
}

.hz-hsearch-dialog__close svg {
    width: 22px;
    height: 22px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
}

.hz-hsearch-dialog__submit:focus-visible,
.hz-hsearch-dialog__close:focus-visible {
    outline: 2px solid var(--hagzi-primary, #5b2bd9);
    outline-offset: 2px;
}

.hz-hsearch-dialog__list {
    max-height: min(60vh, 420px);
    margin: 10px 0 0;
    padding: 0;
    overflow-y: auto;
    list-style: none;
}

.hz-hsearch-dialog__option {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 11px 12px;
    border-radius: 8px;
    cursor: pointer;
    text-align: start;
}

.hz-hsearch-dialog__option--active {
    background: #f1edfb;
}

.hz-hsearch-dialog__option--keyword .hz-hsearch-dialog__option-label {
    font-weight: 600;
}

.hz-hsearch-dialog__option-meta {
    flex: none;
    font-size: 13px;
    color: #6b6880;
}

.hz-hsearch-dialog__hint {
    margin: 10px 0 0;
    font-size: 13px;
    color: #6b6880;
}

html.hz-hsearch-dialog-open,
html.hz-hsearch-dialog-open body {
    overflow: hidden;
}

@media (max-width: 720px) {
    /* The phone top row hides .hz-hicon; the search icon stays in it. */
    .hz-header .hz-hicon.hz-hsearch {
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        min-width: 44px;
        min-height: 44px;
    }
}

@media (max-width: 720px) {
    .hz-hsearch-dialog__backdrop {
        display: none;
    }

    .hz-hsearch-dialog__panel {
        width: 100%;
        height: 100%;
        margin: 0;
        border-radius: 0;
        padding: 12px 12px calc(12px + env(safe-area-inset-bottom));
        overflow-y: auto;
    }

    .hz-hsearch-dialog__list {
        max-height: none;
    }

    .hz-hsearch-dialog__submit {
        padding: 0 14px;
    }
}

/* inline */

            
        
/* themes/property/hagzi-mobile-navigation.css */
/* Hagzi mobile navigation (Bayut comparison, 26 Oct 2026).
   Every rule is scoped to the html class its switch sets (hz-mn-<feature>),
   Configure › Hagzi › Mobile navigation. Transforms and opacity only, so
   nothing here can shift layout. */

/* ------------------------------------------------------------ tap_feedback */

.hz-mn-progress {
    position: fixed;
    inset-inline: 0;
    top: 0;
    z-index: 2147483000;
    height: 3px;
    background: var(--hagzi-primary, #0745D9);
    opacity: 0;
    pointer-events: none;
    transform: scaleX(0);
    transform-origin: left center;
}

[dir="rtl"] .hz-mn-progress {
    transform-origin: right center;
}

.hz-mn-progress.is-on {
    opacity: 1;
    transform: scaleX(.86);
    transition: transform 2.4s cubic-bezier(.08, .7, .2, 1), opacity 80ms linear;
}

@media (hover: none) {
    html.hz-mn-tap_feedback a,
    html.hz-mn-tap_feedback button,
    html.hz-mn-tap_feedback summary,
    html.hz-mn-tap_feedback [role="button"] {
        -webkit-tap-highlight-color: rgba(7, 69, 217, .12);
    }

    html.hz-mn-tap_feedback .hzp-serp .hzp-card:active {
        transform: scale(.985);
        transition: transform 90ms ease-out;
    }

    html.hz-mn-tap_feedback .hzp-btn:active,
    html.hz-mn-tap_feedback .hzp-fb__show:active,
    html.hz-mn-tap_feedback .hzp-mf__apply:active,
    html.hz-mn-tap_feedback .hzp-core__opt:active,
    html.hz-mn-tap_feedback .hzp-serp-pagination__button:active,
    html.hz-mn-tap_feedback .hzp-chip-link:active,
    html.hz-mn-tap_feedback .hzp-fb__toggle:active,
    html.hz-mn-tap_feedback .hzd-callbar a:active {
        opacity: .72;
        transform: scale(.97);
        transition: transform 80ms ease-out, opacity 80ms ease-out;
    }
}

/* 44 x 44 touch areas with the same drawn size: the photo arrows become a
   transparent 44px button around their 24px disc, the card heart gets an
   invisible ring. */
@media (max-width: 720px) {
    html.hz-mn-tap_feedback.hzp-js .hzp-serp .hzp-card__gallery-nav {
        width: 44px;
        height: 44px;
        border: 0;
        background: radial-gradient(circle, rgba(255, 255, 255, .72) 0 11.5px, rgba(255, 255, 255, .5) 12px, transparent 12.5px);
        box-shadow: none;
    }

    html.hz-mn-tap_feedback .hzp-card__gallery-nav--prev {
        inset-inline-start: 2px;
    }

    html.hz-mn-tap_feedback .hzp-card__gallery-nav--next {
        inset-inline-end: 2px;
    }

    html.hz-mn-tap_feedback .hzp-card__gallery-nav svg {
        filter: drop-shadow(0 1px 2px rgba(16, 20, 28, .18));
    }

    html.hz-mn-tap_feedback .hzp-serp .hzp-card .hzp-fav::before {
        position: absolute;
        inset: -6px;
        content: '';
    }
}

/* ------------------------------------------------------------ filter_sheet */

@media (max-width: 720px) and (prefers-reduced-motion: no-preference) {
    html.hz-mn-filter_sheet.hzp-js .hzp-serp .hzp-mf.is-open .hzp-mf__body,
    html.hz-mn-filter_sheet.hzp-js .hzp-serp .hzp-fb__more[open] .hzp-fb__panel {
        animation: hz-mn-sheet-in 220ms cubic-bezier(.2, .8, .2, 1) both;
    }

    html.hz-mn-filter_sheet.hzp-js .hzp-serp .hzp-mf.is-open .hzp-mf__backdrop,
    html.hz-mn-filter_sheet.hzp-js .hzp-serp .hzp-fb__more[open] > .hzp-fb__backdrop {
        animation: hz-mn-fade-in 180ms ease-out both;
    }
}

@keyframes hz-mn-sheet-in {
    from { transform: translateY(24px); opacity: .4; }
    to { transform: none; opacity: 1; }
}

@keyframes hz-mn-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* --------------------------------------------------------------- image_cls */

/* Photographs already carry width and height (zero layout shift, 26 Oct
   2026); while one loads its box shows a fill rather than a blank. */
html.hz-mn-image_cls .hzp-card__photo,
html.hz-mn-image_cls .hzpg__img,
html.hz-mn-image_cls .hzpg__previewimg,
html.hz-mn-image_cls .hzp-mini__img {
    background-color: var(--hzp-fill, #eef1f5);
}

/* ----------------------------------------------------------- gallery_swipe */

/* Horizontal drags on a results card photograph belong to the card gallery;
   vertical ones still scroll the page. */
html.hz-mn-gallery_swipe.hzp-js .hzp-serp .hzp-card__gallery[data-hzp-card-gallery] {
    touch-action: pan-y pinch-zoom;
}

