{"id":179508,"date":"2026-09-30T16:46:57","date_gmt":"2026-09-30T16:46:57","guid":{"rendered":"https:\/\/www.phorest.com\/release-notes\/"},"modified":"2026-09-30T16:46:57","modified_gmt":"2026-09-30T16:46:57","slug":"release-notes","status":"publish","type":"page","link":"https:\/\/www.phorest.com\/au\/release-notes\/","title":{"rendered":"Release Notes"},"content":{"rendered":"\n<section class=\"hero\">\n  <div id=\"hero\" class=\"relative md:mb-12  overflow-hidden   simple \" style=\" background-color: #0a763a \">\n\n  <div class=\"  text-grey-light lg:py-8  pt-12 pb-0 md:pb-16 lg:flex items-start  justify-center text-center \">\n    <div class=\" container  relative z-1 lg:w-2\/3  md:pr-4\">\n      <h1 class=\" text-grey-light font-medium  text-base font-gilroy leading-normal mb-2\">\n    Release Notes\n  <\/h1>\n\n              \n \n      \n    <\/div>\n     \n        <img loading=\"lazy\" decoding=\"async\" class=\"pattern left-auto right-0 fallen-leaves main-leaf simple-leaf lazy loaded entered\" width=\"171\" height=\"239\" src=\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png\" data-src=\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png\" alt=\"Pattern\" data-loaded=\"true\" data-ll-status=\"loaded\">\n        <img loading=\"lazy\" decoding=\"async\" class=\"pattern fallen-leaves odd-leaf top-0 left-0 lg:top-auto md:left-auto lg:right-0 simple-leaf lazy loaded entered\" width=\"171\" height=\"239\" src=\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/yellow.png\" data-src=\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/yellow.png\" alt=\"Pattern\" data-loaded=\"true\" data-ll-status=\"loaded\">\n      <\/div>\n<\/div>\n\n<\/section>\n<div class=\"p-swatchbar\"><span><\/span><span><\/span><span><\/span><span><\/span><span><\/span><span><\/span><span><\/span><\/div>\n\n\n\n<div style=\"height:49px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"align wp-block-rssfeed\">\n            <div\n            class=\"rss-feed-block mx-auto max-w-3xl\"\n            data-feed-url=\"https:\/\/phorest.canny.io\/api\/changelog\/feed.rss\"\n            data-items-per-page=\"6\"\n            data-hidden-items=\"[]\"\n            data-page=\"1\"\n        >\n                            <div\n                    class=\"bg-white flex flex-wrap gap-2 mb-6 rss-feed-block__filters sticky\"\n                    style=\"\n                        top: 100px;\n                        position: sticky;\n                        z-index: 2;\n                        padding: 5px;\n                        display: flex;\n                        justify-content: center;\n                    \"\n                >\n                    <button\n                        type=\"button\"\n                        data-category=\"all\"\n                        class=\"border capitalize cursor-pointer px-3.5 px-4 py-1.5 py-2 rounded-full rounded-lg rss-feed-block__filter-pill text-sm bg-green-dark text-white border-green-dark\"\n                    >\n                        <span class=\"rss-feed-block__filter-pill-label\">All<\/span>\n                    <\/button>\n                                            <button\n                            type=\"button\"\n                            data-category=\"new\"\n                            class=\"border capitalize cursor-pointer hover:border-grey-dark px-3.5 px-4 py-1.5 py-2 rounded-full rounded-lg rss-feed-block__filter-pill text-sm bg-transparent text-green-dark border-grey-light\"\n                        >\n                            <span class=\"rss-feed-block__filter-pill-label\">new<\/span>\n                        <\/button>\n                                            <button\n                            type=\"button\"\n                            data-category=\"back of house\"\n                            class=\"border capitalize cursor-pointer hover:border-grey-dark px-3.5 px-4 py-1.5 py-2 rounded-full rounded-lg rss-feed-block__filter-pill text-sm bg-transparent text-green-dark border-grey-light\"\n                        >\n                            <span class=\"rss-feed-block__filter-pill-label\">back of house<\/span>\n                        <\/button>\n                                            <button\n                            type=\"button\"\n                            data-category=\"improved\"\n                            class=\"border capitalize cursor-pointer hover:border-grey-dark px-3.5 px-4 py-1.5 py-2 rounded-full rounded-lg rss-feed-block__filter-pill text-sm bg-transparent text-green-dark border-grey-light\"\n                        >\n                            <span class=\"rss-feed-block__filter-pill-label\">improved<\/span>\n                        <\/button>\n                                    <\/div>\n            \n            <div class=\"rss-feed-block__list flex flex-col gap-3\">\n                                    <article class=\"rounded-2xl border border-grey-light border-t-[3px] border-t-green bg-white p-5\">\n    <div class=\"flex flex-wrap gap-3 items-baseline justify-between mb-2\">\n        <a href=\"https:\/\/phorest.canny.io\/changelog\/booking-multiple-services-with-multiple-staff-now-way-easier-to-mix-up-whos-doin\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"font-black hover:underline text-green-dark text-xl\">\n            Booking multiple services with multiple staff? Now way easier to mix up who&amp;apos;s doing what \ud83d\udc87\n        <\/a>\n                    <span class=\"whitespace-nowrap text-xs text-grey\">\n                September 1, 2026\n            <\/span>\n            <\/div>\n\n            <div class=\"mb-3 flex flex-wrap gap-1.5\">\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-green bg-green-lighter\/20 text-green text-white\">new<\/span>\n                    <\/div>\n    \n            <div class=\"relative mb-3 overflow-hidden rounded-lg border border-grey-light bg-grey-figma\">\n                        <img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/85273d24ec0c32fea8930dac64cf238c.png\" alt=\"\" loading=\"lazy\" class=\"block h-auto w-full\">\n        <\/div>\n    \n            <div class=\"text-sm leading-relaxed text-grey-darker\"><p>Got a client booking two (or more) services in one visit? Maybe a cut with one stylist and a colour with another? We just made it a lot smoother to pick a different staff member for each service in the same booking.<\/p><p>When you&#8217;re building a multi-service booking, switching staff for the second (or third!) service no longer means backing out and starting over \u2014 you can just pick who you want, right there, for each service individually.<\/p><p><img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/85273d24ec0c32fea8930dac64cf238c.png\" alt=\"CleanShot 2026-09-01 at 17\" loading=\"lazy\"><\/p><p>Small change, but if you run multi-staff bookings often, it should shave a good few clicks (and a bit of frustration) off your day. \ud83d\ude4c<\/p><\/div>\n    <\/article>\n                                    <article class=\"rounded-2xl border border-grey-light border-t-[3px] border-t-green bg-white p-5\">\n    <div class=\"flex flex-wrap gap-3 items-baseline justify-between mb-2\">\n        <a href=\"https:\/\/phorest.canny.io\/changelog\/choose-which-team-members-show-up-for-online-bookings-service-by-service\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"font-black hover:underline text-green-dark text-xl\">\n            Choose which team members show up for online bookings \u2014 service by service\n        <\/a>\n                    <span class=\"whitespace-nowrap text-xs text-grey\">\n                August 26, 2026\n            <\/span>\n            <\/div>\n\n            <div class=\"mb-3 flex flex-wrap gap-1.5\">\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-green bg-green-lighter\/20 text-green text-white\">new<\/span>\n                    <\/div>\n    \n            <div class=\"relative mb-3 overflow-hidden rounded-lg border border-grey-light bg-grey-figma\">\n                        <img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/fe75ed8e37e95b6955c4f1299b3d1c07.png\" alt=\"\" loading=\"lazy\" class=\"block h-auto w-full\">\n        <\/div>\n    \n            <div class=\"text-sm leading-relaxed text-grey-darker\"><p>Got a stylist or practitioner who&#8217;s fully booked through repeat clients and doesn&#8217;t need the extra online traffic? You can now turn off online booking for a staff member on a specific service, without touching their qualification.<\/p><p>They&#8217;ll still show up everywhere else \u2014 in-salon booking, the appointment planner, service qualification \u2014 just not as an online booking option for that service.<\/p><p><img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/fe75ed8e37e95b6955c4f1299b3d1c07.png\" alt=\"CleanShot 2026-08-26 at 18\" loading=\"lazy\"><\/p><p>Where to find it: Setup &gt; Staff &gt; [staff member] &gt; Services \u2014 toggle Online Booking per service.<\/p><p>One thing to note: this only works if the service itself is available online. If online booking is switched off for the service overall, the per-staff toggle will show as disabled with a quick explainer, since a service-level setting always takes priority.<\/p><\/div>\n    <\/article>\n                                    <article class=\"rounded-2xl border border-grey-light border-t-[3px] border-t-red bg-white p-5\">\n    <div class=\"flex flex-wrap gap-3 items-baseline justify-between mb-2\">\n        <a href=\"https:\/\/phorest.canny.io\/changelog\/permissions-to-change-service-retail-prices\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"font-black hover:underline text-green-dark text-xl\">\n            Permissions to change service \/ retail prices\n        <\/a>\n                    <span class=\"whitespace-nowrap text-xs text-grey\">\n                August 21, 2026\n            <\/span>\n            <\/div>\n\n            <div class=\"mb-3 flex flex-wrap gap-1.5\">\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-red bg-red-light\/20 text-red text-white\">back of house<\/span>\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-green-dark bg-green-dark\/10 text-green-dark text-white\">improved<\/span>\n                    <\/div>\n    \n            <div class=\"relative mb-3 overflow-hidden rounded-lg border border-grey-light bg-grey-figma\">\n                        <img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/dd6636df4ea7b0755d644130a22df487.png\" alt=\"\" loading=\"lazy\" class=\"block h-auto w-full\">\n        <\/div>\n    \n            <div class=\"text-sm leading-relaxed text-grey-darker\"><p>Previously, users with access to change prices in checkout could edit anything. We have introduced new permissions to provide better controls for businesses that want to restrict staff to be able to edit just service prices, and not retail, or vice versa. <\/p><p><img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/dd6636df4ea7b0755d644130a22df487.png\" alt=\"Screenshot 2026-08-21 at 08\" loading=\"lazy\"><\/p><\/div>\n    <\/article>\n                                    <article class=\"rounded-2xl border border-grey-light border-t-[3px] border-t-green bg-white p-5\">\n    <div class=\"flex flex-wrap gap-3 items-baseline justify-between mb-2\">\n        <a href=\"https:\/\/phorest.canny.io\/changelog\/add-new-brands\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"font-black hover:underline text-green-dark text-xl\">\n            Add New Brands\n        <\/a>\n                    <span class=\"whitespace-nowrap text-xs text-grey\">\n                August 18, 2026\n            <\/span>\n            <\/div>\n\n            <div class=\"mb-3 flex flex-wrap gap-1.5\">\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-red bg-red-light\/20 text-red text-white\">back of house<\/span>\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-green bg-green-lighter\/20 text-green text-white\">new<\/span>\n                    <\/div>\n    \n    \n            <div class=\"text-sm leading-relaxed text-grey-darker\"><p>Phorest users no longer need to contact Phorest in order to add a new brand to their system. These can be added quickly and easily when creating or updating a product. <\/p><p>In a product detail screen, select the brand field. A list of brands appears, with the brands in use within the business segmented in the top section under &#8216;Your Brands&#8217; and the Phorest global catalog of brands segmented underneath. <\/p><p>The user should first search for their new brand through the search bar at the top. If no results are found, a new &#8216;+ Add Brand&#8217; option appears in the bottom right. Select this and add your brand. Once one product has been assigned this brand, it will be available for re-use.<\/p><p><\/p><\/div>\n    <\/article>\n                                    <article class=\"rounded-2xl border border-grey-light border-t-[3px] border-t-green bg-white p-5\">\n    <div class=\"flex flex-wrap gap-3 items-baseline justify-between mb-2\">\n        <a href=\"https:\/\/phorest.canny.io\/changelog\/pricing-just-got-personal\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"font-black hover:underline text-green-dark text-xl\">\n            Pricing just got personal\n        <\/a>\n                    <span class=\"whitespace-nowrap text-xs text-grey\">\n                August 18, 2026\n            <\/span>\n            <\/div>\n\n            <div class=\"mb-3 flex flex-wrap gap-1.5\">\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-red bg-red-light\/20 text-red text-white\">back of house<\/span>\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-green bg-green-lighter\/20 text-green text-white\">new<\/span>\n                    <\/div>\n    \n            <div class=\"relative mb-3 overflow-hidden rounded-lg border border-grey-light bg-grey-figma\">\n                        <img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/e7c84cdb2ecc85f259e3b366754f8a97.png\" alt=\"\" loading=\"lazy\" class=\"block h-auto w-full\">\n        <\/div>\n    \n            <div class=\"text-sm leading-relaxed text-grey-darker\"><p>Not every stylist or provider should charge the same rate \u2014 and now your pricing can reflect that. Two updates just landed to make staff pricing more flexible and easier to manage:<\/p><p>\ud83d\udcb8 Set a different price per staff member, per service<\/p><p>You no longer have to rely on a branch price or a staff category price to vary what you charge \u2014 you can now set an individual price per staff member, per service. Whether it\u2019s an advanced laser treatment with an expert practitioner or a standard cut with a junior team member &#8211; set it once, and it flows straight through to booking and checkout, and online!<\/p><p>\ud83d\udccb One view for every service a staff member offers<\/p><p>Previously, checking which services a staff member is qualified for \u2014 and their timing details \u2014 meant hopping between multiple screens. Now it&#8217;s all in a single table:<\/p><p>\u2705 Qualified or not<\/p><p>\u23f1\ufe0f Service time<\/p><p>\ud83c\udf31 Development time<\/p><p>\ud83c\udfc1 Finish time<\/p><p><img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/e7c84cdb2ecc85f259e3b366754f8a97.png\" alt=\"CleanShot 2026-08-17 at 15\" loading=\"lazy\"><\/p><p>It&#8217;s a much clearer way to see and manage staff pricing and scheduling in one place, without the back-and-forth.<\/p><p>Together, these updates mean less admin and pricing that actually reflects the skill and experience on your team. Head to your Staff settings to check it out \u2014 we&#8217;d love to hear what you think.<\/p><\/div>\n    <\/article>\n                                    <article class=\"rounded-2xl border border-grey-light border-t-[3px] border-t-green bg-white p-5\">\n    <div class=\"flex flex-wrap gap-3 items-baseline justify-between mb-2\">\n        <a href=\"https:\/\/phorest.canny.io\/changelog\/geofencing-clock-in-out-on-phorest-go\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"font-black hover:underline text-green-dark text-xl\">\n            Geofencing Clock In\/Out on Phorest Go\n        <\/a>\n                    <span class=\"whitespace-nowrap text-xs text-grey\">\n                August 4, 2026\n            <\/span>\n            <\/div>\n\n            <div class=\"mb-3 flex flex-wrap gap-1.5\">\n                            <span class=\"capitalize font-black mr-2 px-2 px-2.5 py-0.5 rounded-full rounded-lg text-xs bg-green bg-green-lighter\/20 text-green text-white\">new<\/span>\n                    <\/div>\n    \n            <div class=\"relative mb-3 overflow-hidden rounded-lg border border-grey-light bg-grey-figma\">\n                        <img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/e0df97f90fe45a8dab491e3f5adfce31.png\" alt=\"\" loading=\"lazy\" class=\"block h-auto w-full\">\n        <\/div>\n    \n            <div class=\"text-sm leading-relaxed text-grey-darker\"><p>Geofencing Clock In\/Out on Phorest Go enhances clocking hours on the mobile app, by bringing an invisible geofencing surrounding a branch, helping owners entrust their team is onsite and helping teams by reducing congestion at the front desk to clock hours onsite from their phones.<\/p><p><a class=\"text-yellow hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/support.phorest.com\/hc\/en-us\/articles\/37406870945170-How-do-I-set-up-Geofencing-for-Clock-In-and-Clock-Out-in-PhorestGo\" rel=\"ugc nofollow noopener noreferrer\" target=\"_blank\">https:\/\/support.phorest.com\/hc\/en-us\/articles\/37406870945170-How-do-I-set-up-Geofencing-for-Clock-In-and-Clock-Out-in-PhorestGo<\/a><\/p><p><img decoding=\"async\" src=\"https:\/\/canny-assets.io\/images\/e0df97f90fe45a8dab491e3f5adfce31.png\" alt=\"image\" loading=\"lazy\"><\/p><p>A quick start checklist to get it started:<\/p><ol><li value=\"1\">Go to Manager &gt; Rosters &gt; Enable Clock In\/Out<\/li><li value=\"2\">Go to Manager &gt; Settings &gt; Phorest Go<\/li><li value=\"3\">Enable Geofencing<\/li><li value=\"4\">Set preferred max distance (default is 50m\/yd; minimum is 15m\/yd)<\/li><li value=\"5\">Set preference for offsite clock out. Allows staff to clock their finish time outside the radius and is recorded as offsite <\/li><li value=\"6\">Go to Manager &gt; Access &gt; Phorest Go &gt; Enable Clock In\/Out permission<\/li><li value=\"7\">Advise the team to check app stores for the latest version of Phorest Go.<\/li><li value=\"8\">Phorest Go users can clock in in the side menu via Time Management &gt; Clock In<\/li><li value=\"9\">Phorest Go users will be prompted to allow location permissions on their first attempt. Precise location is preferred for best accuracy<\/li><li value=\"10\">Teams clock in at start of shift and clock out at the end of shift, each working day. There is no automatics clock when inside the radius<\/li><\/ol><\/div>\n    <\/article>\n                            <\/div>\n\n            <div class=\"rss-feed-block__pagination mt-6 flex justify-center\">\n                <button\n                    type=\"button\"\n                    class=\"bg-green-dark border border-green-dark cursor-pointer font-black hover:bg-green hover:bg-green-dark hover:bg-green-light hover:text-white mb-6 px-5 py-2 rounded-full rounded-xl rss-feed-block__load-more text-green-dark text-sm text-white\"\n                >\n                    Load more\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<style>\n\n@media (min-width: 1024px) {\n .align.extended-resource-block.wp-block-resourceblock .lg\\:w-1\\\/3 {\n    width: 25% !important;\n }\n}\n\nfigure.wp-block-image.size-large.logo-colour-dark {\n    filter: grayscale(1);\n}\n\n.extended-resource-block.wp-block-resourceblock .container {\n    max-width: 1420px;\n}\n\n[data-inviewport=bg-in].is-inViewport {\n    background-size: 110% 136% !important\n}\n\n[data-inviewport=bg-in] {\n    background-size: 148% 148% !important;\n    transition: 1s;\n}\n\n.bg-grow-au {\n  background: url(\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/wp-content\/uploads\/2026\/03\/25120251\/phorest_grow_bg.webp\")no-repeat center \/ cover;\n}\n\n.bg-edu-block {\n background-color: #f8f7f3;\n}\n\n.revamp-testimonials .slides-v3 .carousel-cell .testimonial-text {\n    padding: 9px !important;\n    font-size: 14px !important;\n    width: 80%;\n}\n\n.revamp-testimonials .slides-v3 .carousel-cell {\n    border-radius: 25px;\n}\n.revamp-testimonials .slides-v3 .carousel-cell .img {\n    border-radius: 25px;\n    background-position: 25% 10% !important;\n}\n.revamp-testimonials .slides-v3 .carousel-cell:nth-child(3n+1){background:#faf3f2 !important;}\n.revamp-testimonials .slides-v3 .carousel-cell:nth-child(3n+2){background:#f0f6f4 !important;}\n.revamp-testimonials .slides-v3 .carousel-cell:nth-child(3n){background:#faf5ed !important;}\n.revamp-testimonials #slider-v3-container:before, .revamp-testimonials .slider-v3-container:before {\nbackground: none !important;\n}\n@media screen and (min-width: 768px) {\n.revamp-testimonials .slides-v3 .carousel-cell {\n    display: flex;\n    flex-direction: row-reverse;\n    border-radius: 25px;\n}\n.quote-image {\n    height: 310px !important;\n}\n}\n:root {\n  --p-ink: #0f615d;\n  --p-ink-soft: #505f76;\n  --p-line: #e4e6eb;\n  --p-bg: #f2f2f2;\n  --p-int: #0bad7f;\n  --p-int-soft: #e0f5ee;\n  --p-par: #0a763a;\n  --p-par-soft: #e0f0e7;\n  --p-edu: #ef9812;\n  --p-edu-soft: #fff3d9;\n  --p-coral: #fc968b;\n  --p-red: #ff4856;\n  --p-mint: #80d080;\n  --p-radius: 18px;\n  --p-ease: cubic-bezier(.16,1,.3,1);\n}\n\n.tib-section {\n  --tib-green-light : #81D080;\n  --tib-green-mid   : #02A06E;\n  --tib-green-dark  : #027B32;\n  --tib-teal        : #0D615D;\n  --tib-coral-light : #FC968B;\n  --tib-coral       : #FF4856;\n  --tib-amber       : #FFAE33;\n  --tib-heading     : #1a615d;\n  --tib-border      : #0D615D33;\n  --tib-border-solid: #0d615d;\n  --tib-text        : #2d3a39;\n  --tib-text-muted  : #5a706e;\n \n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 1rem 0 2rem 0;\n}\n \n\/* Grid *\/\n.tib-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 0;\n  border: 1.5px solid var(--tib-border-solid);\n  border-radius: 4px;\n  overflow: hidden;\n}\n \n\/* Card *\/\n.tib-card {\n  position: relative;\n  background: #ffffff;\n  padding: 2.5rem 2rem 2rem;\n  border-right: 1.5px solid var(--tib-border-solid);\n  display: flex;\n  flex-direction: column;\n  transition: background 0.25s ease;\n}\n.tib-card:last-child { border-right: none; }\n.tib-card:hover { background: #f5fbf9; }\n \n\/* Accent line \u2014 pulled from brand palette per card *\/\n.tib-card__accent {\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 5px;\n}\n.tib-card[data-index=\"1\"] .tib-card__accent { background: var(--tib-green-mid); }\n.tib-card[data-index=\"2\"] .tib-card__accent { background: var(--tib-coral); }\n.tib-card[data-index=\"3\"] .tib-card__accent { background: var(--tib-amber); }\n \n\/* Header *\/\n.tib-card__header {\n  margin-bottom: 1.25rem;\n}\n.tib-card__number {\n  display: block;\n  font-size: 3rem;\n  font-style: italic;\n  line-height: 1;\n  color: #c8e8e7;\n  margin-bottom: 0.5rem;\n  letter-spacing: -1px;\n  transition: color 0.25s ease;\n}\n.tib-card:hover .tib-card__number { color: #a8d4d2; }\n \n.tib-card__title {\n  font-weight: 700;\n  font-size: 1.45rem;\n  line-height: 1.25;\n  color: var(--tib-heading);\n  letter-spacing: -0.3px;\n}\n \n\/* Body *\/\n.tib-card__body {\n  flex: 1;\n}\n.tib-card__text {\n  font-size: 0.9375rem;\n  line-height: 1.75;\n  color: var(--tib-text);\n  margin-bottom: 0.9rem;\n}\n.tib-card__text--more {\n  border-top: 1px dashed #b0d4d2;\n  padding-top: 0.9rem;\n  margin-top: 0.25rem;\n  animation: tib-reveal 0.35s ease forwards;\n}\n@keyframes tib-reveal {\n  from { opacity: 0; transform: translateY(-6px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n \n\/* Footer *\/\n.tib-card__footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-top: 1.75rem;\n  padding-top: 1.25rem;\n  border-top: 1.5px solid var(--tib-border-solid);\n  flex-wrap: wrap;\n  gap: 0.5rem;\n}\n \n\/* Expand button *\/\n.tib-expand-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.35rem;\n  background: none;\n  border: none;\n  cursor: pointer;\n  font-size: 0.8125rem;\n  font-weight: 500;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  color: var(--tib-text-muted);\n  padding: 0;\n  transition: color 0.2s;\n}\n.tib-expand-btn:hover { color: var(--tib-teal); }\n.tib-expand-btn__icon {\n  display: inline-block;\n  transition: transform 0.3s ease;\n  font-style: normal;\n}\n.tib-expand-btn[aria-expanded=\"true\"] .tib-expand-btn__icon {\n  transform: rotate(180deg);\n}\n.tib-expand-btn[aria-expanded=\"true\"] .tib-expand-btn__label::before {\n  content: 'Show less';\n}\n.tib-expand-btn[aria-expanded=\"false\"] .tib-expand-btn__label::before {\n  content: 'Read more';\n}\n.tib-expand-btn__label { font-size: 0; }\n \n\/* CTA link \u2014 accent colour per card *\/\n.tib-cta {\n  font-size: 0.8125rem;\n  font-weight: 500;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  text-decoration: none;\n  padding-bottom: 1px;\n  transition: opacity 0.2s;\n}\n.tib-card[data-index=\"1\"] .tib-cta { color: var(--tib-green-dark); border-bottom: 1.5px solid var(--tib-green-dark); }\n.tib-card[data-index=\"2\"] .tib-cta { color: var(--tib-coral);      border-bottom: 1.5px solid var(--tib-coral); }\n.tib-card[data-index=\"3\"] .tib-cta { color: var(--tib-teal);       border-bottom: 1.5px solid var(--tib-teal); }\n.tib-cta:hover { opacity: 0.65; }\n \n\/* \u2500\u2500 Responsive \u2500\u2500 *\/\n@media (max-width: 900px) {\n  .tib-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n  .tib-card:nth-child(2) { border-right: none; }\n  .tib-card:nth-child(3) {\n    border-right: none;\n    border-top: 1.5px solid var(--tib-border-solid);\n    grid-column: 1 \/ -1;\n  }\n}\n \n@media (max-width: 580px) {\n  .tib-grid {\n    grid-template-columns: 1fr;\n    border-bottom: none;\n  }\n  .tib-card {\n    border-right: none;\n    border-bottom: 1.5px solid var(--tib-border-solid);\n    padding: 2rem 1.25rem 1.5rem;\n  }\n  .tib-card:nth-child(3) {\n    grid-column: auto;\n    border-top: none;\n  }\n  .tib-card__title { font-size: 1.25rem; }\n}\n\n.hover-white:hover a {\n color: white;\n}\n\n#hero.simple {\n    margin-bottom: 0 !important;\n}\n  .hero #hero {\n    \/* depth without an extra image request *\/\n    background-image: linear-gradient(135deg, #1f6f6a 0%, #1a615d 55%, #154f4c 100%);\n    isolation: isolate;\n  }\n  .hero #hero h1,\n  .hero #hero h2,\n  .hero #hero p {\n    overflow-wrap: break-word;\n    text-wrap: balance;\n  }\n\n  .hero #hero h1 {\n        letter-spacing: 0.1em;\n    text-transform: uppercase;\n    opacity: 1;\n    font-size: 2.5rem !important;\n    color: white !important;\n  }\n\n  .hero #hero h2 {\n        font-size: clamp(1.75rem, 4vw, 2rem);\n    line-height: 1.15;\n    font-weight: 600;\n    margin-bottom: .75rem;\n  }\n\n  .hero #hero p {\n    font-size: clamp(1rem, 1.4vw, 1.125rem);\n    line-height: 1.6;\n    max-width: 60ch;\n    margin-inline: auto;\n  }\n\n  .hero #hero .pattern {\n    position: absolute;\n    opacity: .9;\n    pointer-events: none;\n    user-select: none;\n    z-index: 0;\n    will-change: transform;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    .hero #hero .main-leaf { animation: heroFloat 9s ease-in-out infinite; }\n    .hero #hero .odd-leaf  { animation: heroFloat 11s ease-in-out infinite reverse; }\n  }\n  @keyframes heroFloat {\n    0%, 100% { transform: translateY(0) rotate(0); }\n    50%      { transform: translateY(-10px) rotate(2deg); }\n  }\n\n\n.quote-call blockquote cite {\n       font-size: 1rem;\n}\n.quote-call blockquote p {\n    font-size: 2rem;\n}\n\n  \/* Mobile: drop the leaves' weight, keep copy front and center *\/\n  @media (max-width: 768px) {\n    .hero #hero .pattern { opacity: .55; width: 110px; height: auto; }\n.quote-call blockquote cite {\n    font-size: large;\n}\n.quote-call blockquote p {\n    font-size: x-large;\n}\n  }\n\n\n    \n\/* \u2500\u2500 swatchbar \u2500\u2500 *\/\n.p-swatchbar { display:flex; height:6px; }\n.p-swatchbar span { flex:1; }\n.p-swatchbar span:nth-child(1) { background:var(--p-mint); }\n.p-swatchbar span:nth-child(2) { background:var(--p-int); }\n.p-swatchbar span:nth-child(3) { background:var(--p-par); }\n.p-swatchbar span:nth-child(4) { background:var(--p-ink); }\n.p-swatchbar span:nth-child(5) { background:var(--p-coral); }\n.p-swatchbar span:nth-child(6) { background:var(--p-red); }\n.p-swatchbar span:nth-child(7) { background:var(--p-edu); }\n\n.logo-bg { background-color: #014542 !important; }\nfooter .bg-white.border-b-2.border-white.md\\:px-8.px-2.py-10.md\\:py-24.text-center {\n    display: none;\n}\n.slide-v3 .img {\n    background-size: contain !important;\n    background-repeat: no-repeat;\n    max-height: 220px;\n}\n\n.rbc-card h3 {\n    font-size: 1rem !important;\n    font-weight: 400 !important;\n}\n.p-block-space p {\npadding-bottom: 10px;\n}\n\n.icon-height {\nheight: 85px !important;\nobject-fit: contain;\n}\n\n\n\/* WHY CHOOSE BLOCK *\/\n\n.why-choose-block{padding:6rem 3rem;max-width:1400px;margin:0 auto;position:relative;overflow:hidden}\n@media (max-width: 680px) {\n.why-choose-block{padding:6rem 1rem;}\n}\n.why-choose-block::before{content:\"\";position:absolute;top:-40%;right:-20%;width:600px;height:600px;background:radial-gradient(circle,rgba(13,97,93,.08) 0,transparent 70%);border-radius:50%;pointer-events:none}\n.why-choose-block::after{content:\"\";position:absolute;bottom:-30%;left:-10%;width:500px;height:500px;background:radial-gradient(circle,rgba(2,160,110,.06) 0,transparent 70%);border-radius:50%;pointer-events:none}\n\n.why-choose-block>.wp-block-column{position:relative;z-index:2}\n\n.why-choose-block .wp-container-core-columns-is-layout-1,\n.pain-points-header .wp-block-column{margin-bottom:5rem;position:relative;padding-bottom:2.5rem}\n\n.why-choose-block .wp-container-core-columns-is-layout-1::before,\n.pain-points-header .wp-block-column::before{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:1px;background:linear-gradient(90deg,#0D615D 0,#02A06E 30%,transparent 100%)}\n\n.why-choose-block .wp-container-core-columns-is-layout-1::after,\n.pain-points-header .wp-block-column::after{content:\"\";position:absolute;bottom:0;left:0;width:80px;height:4px;border-radius:2px;background:linear-gradient(90deg,#0D615D 0,#02A06E 100%)}\n\n.why-choose-block.white-bg-text .wp-container-core-columns-is-layout-1::before,\n.pain-points-header.white-bg-text .wp-block-column::before{background:linear-gradient(90deg,#fff 0,#fff 30%,transparent 100%)}\n\n.why-choose-block.white-bg-text .wp-container-core-columns-is-layout-1::after,\n.pain-points-header.white-bg-text .wp-block-column::after{background:#fff}\n\n.why-choose-block .wp-container-core-columns-is-layout-1 p{font-size:clamp(2.2rem,5vw,3.5rem);font-weight:700;letter-spacing:-.02em;color:#0D615D;line-height:1.2;font-variation-settings:\"wght\" 700}\n\n.why-choose-block strong,.pain-points-header strong{font-weight:700;color:#0D615D}\n.why-choose-block.white-bg-text strong,.pain-points-header.white-bg-text strong{color:#fff}\n\n.why-choose-block .wp-container-core-columns-is-layout-2 p, .why-choose-block .why-choose-text {\nfont-size:1.1rem;font-weight:500;color:#1a3a38;line-height:1.5;padding:0.5rem;background:#fff;border:1.5px solid #e8f0ee;border-radius:16px;position:relative;overflow:hidden;transition:.5s cubic-bezier(.34,1.56,.64,1);\nbox-shadow:0 4px 20px rgba(13,97,93,.06)\n}\n\n.why-choose-block .wp-container-core-columns-is-layout-2 p::before,\n, .why-choose-block .why-choose-text::before {\ncontent:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#0D615D 0,#02A06E 50%,#81D080 100%);transform:scaleX(0);transform-origin:left;transition:.5s cubic-bezier(.34,1.56,.64,1)\n}\n\n.why-choose-block .wp-container-core-columns-is-layout-2 p::after,\n.why-choose-block .why-choose-text::after {\ncontent:\"\";position:absolute;inset:0;background:linear-gradient(135deg,rgba(13,97,93,.02),transparent);opacity:0;transition:.5s cubic-bezier(.34,1.56,.64,1)\n}\n\n.why-choose-block .wp-container-core-columns-is-layout-2 p:hover{transform:translateY(-6px);box-shadow:0 16px 48px rgba(13,97,93,.14);border-color:#0D615D}\n.why-choose-block .wp-container-core-columns-is-layout-2 p:hover::before{transform:scaleX(1)}\n.why-choose-block .wp-container-core-columns-is-layout-2 p:hover::after{opacity:1}\n\n.why-choose-block .why-choose-text:hover{transform:translateY(-6px);box-shadow:0 16px 48px rgba(13,97,93,.14);border-color:#0D615D}\n.why-choose-block .why-choose-text:hover::before{transform:scaleX(1)}\n.why-choose-block .why-choose-text:hover::after{opacity:1}\n\n\n\/* pain points *\/\n.pain-points{display:flex;gap:24px;padding:40px 20px;background:#fff}\n.pain-points .wp-block-column:not(.inner-point){flex:1;background:#fff;padding:28px 24px;border-radius:12px;border:1px solid #f0f0f0;position:relative;transition:.25s}\n.pain-points .wp-block-column:not(.inner-point):hover{transform:translateY(-4px);box-shadow:0 8px 24px rgba(13,97,93,.08);border-color:#0D615D}\n.pain-points .wp-block-column:not(.inner-point)::before{content:\"\";position:absolute;top:0;left:0;height:4px;width:100%;background:#1c5e20;border-radius:12px 12px 0 0}\n.pain-points .wp-block-column:nth-child(2)::before{background:#f52632}\n.pain-points .wp-block-column:nth-child(3)::before{background:#f89305}\n.pain-points .wp-block-column p{font-size:15px;line-height:1.6;color:#444;margin:0 0 10px}\n.pain-points .wp-block-column p:first-child strong{font-size:14px;color:#0D615D;background:rgba(13,97,93,.08);padding:6px 10px;border-radius:6px;display:inline-block}\n.pain-points .wp-block-column p:nth-child(2) strong{font-size:20px;color:#111;display:block}\n.pain-points .wp-block-column p:last-child{font-weight:500;color:#4c4c4c;margin-top:12px}\n.pain-points .wp-block-column p:empty{display:none}\n\n\n.pain-points .wp-block-column:nth-child(2):hover {\nborder-color:#f52632;\n}\n\n.pain-points .wp-block-column:nth-child(3):hover {\nborder-color:#f89305;\n}\n\n\n.pain-point-highlight{background:#fff8eb!important}\n.text-shadow-light{text-shadow:0 0 black}\n.quote-call p {\n  font-family: Tiempos, serif;\n}\n.quote-call {\n padding: 2em 0;\n}\n.bottom-radius-card {\n    border-bottom-left-radius: 1rem;\n    border-bottom-right-radius: 1rem;\n}\n\n.logo-carousel img.white-logo { filter: brightness(1) invert(1); }\n\/* wrapper *\/\n.logo-carousel {\n  overflow: hidden;\n  width: 100%;\nheight: 142px;\n}\n\n\/* track *\/\n.logo-carousel .logo-track {\n  display: flex !important;\n  flex-wrap: nowrap !important;\n  gap: 0 !important;\n  align-items: center !important;\n  padding: 0 !important;\n  margin: 0 !important;\npadding-top: 24px !important;\n\n  \/* Fallback duration if JS fails to set one. JS recalculates based on track width. *\/\n  animation: logo-scroll 30s linear infinite;\n}\n\n\/* pause on hover *\/\n.logo-carousel:hover .logo-track {\n  animation-play-state: paused;\n}\n\n\/* each figure *\/\n.logo-carousel figure.wp-block-image {\n  flex: 0 0 auto !important;\n  width: 180px !important;\n  margin: 0 !important;\n  padding-right: 80px !important;\n  box-sizing: content-box !important;\n}\n\n\/* logo image *\/\n.logo-carousel figure.wp-block-image img {\n  height: 90px !important;\n  width: 120px !important;\n  display: block !important;\n  object-fit: contain !important;\n}\n\n\/* animation *\/\n@keyframes logo-scroll {\n  0% {\n    transform: translateX(0);\n  }\n  100% {\n    transform: translateX(-50%);\n  }\n}\n\n\/* Respect reduced motion preference *\/\n@media (prefers-reduced-motion: reduce) {\n  .logo-carousel .logo-track {\n    animation: none;\n  }\n}\n@media screen and (max-width: 768px) {\n\n\n  \/* Mobile logo carousel \u2014 smaller logos, tighter spacing. JS handles speed. *\/\n  .logo-carousel figure.wp-block-image {\n    width: 110px !important;\n    padding-right: 30px !important;\n  }\n\n  .logo-carousel figure.wp-block-image img {\n    height: 55px !important;\n    width: 100% !important;\n  }\n\n}\n.logo-colour-flip {\n filter: invert(1);\n}\n.logo-colour-dark {\n\/\/filter: brightness(0);\n}\n@media screen and (min-width: 768px) {\n.logo-carousel figure.wp-block-image:before {\n    content: '';\n    box-shadow: 0px 0px 18px 7px #ababab17;\n    position: absolute;\n    width: 183px;\n    height: 100px;\n    left: -31px;\n    z-index: 1;\n    border-radius: 10px;\n    right: 0;\n}\n}\n.logo-carousel figure.wp-block-image.logo-colour-dark {\n    \/\/filter: invert(1) brightness(4);\n}\n.logo-carousel-small {\ntransform: translate(0px, -68px);\n    height: 75px;\n}\n\n.fig-bg-wrapper figure {\n position: relative;\n}\n\n.fig-bg-wrapper figure.fig-bg-1:before {\n    content: '' !important;\n    position: absolute;\n  inset: 0;\n  background-image: url(https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/creative\/why_choose_add_2.webp);\n  background-attachment: fixed;\n  background-position: center;      \/* centered to viewport *\/\n  background-size: clamp(140px, 22vw, 340px);\n  background-repeat: no-repeat;\n  pointer-events: none;\n}\n\n.fig-bg-wrapper figure.fig-bg-2:before {\n    content: '' !important;\n    background-image: url(https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/creative\/why_choose_1.webp);\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    background-position: 0;\n    background-size: 58%;\n    background-attachment: fixed;\n    background-repeat: no-repeat;\n}\n\n.fig-bg-wrapper figure.fig-bg-1:before,\n.fig-bg-wrapper figure.fig-bg-2:before  {\n  background-size: 55vw;\n  background-position: 22vw;\n}\n\n@media (min-width: 769px) and (max-width: 1500px){\n.fig-bg-wrapper figure.fig-bg-1:before {\n    background-size: 340px;\n    background-position: 58vw;\n}\n}\n\n@media (min-width: 769px) and (max-width: 1500px){\n.fig-bg-wrapper figure.fig-bg-2:before {\n    background-size: 340px;\n    background-position: 11vw;\n}\n}\n\n@media (min-width: 1500px)  {\n  .fig-bg-wrapper figure.fig-bg-1:before { background-size: 340px; background-position: 57vw; }\n}\n@media (min-width: 1500px)  {\n.fig-bg-wrapper figure.fig-bg-2:before { background-size: 340px; background-position: 23vw; }\n}\n        \n\n\n<\/style>\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  \/\/ Loop through each .feature-tabs container\n  document.querySelectorAll('.feature-tabs').forEach(featureTabs => {\n    const tabsColumn = featureTabs.querySelector('.wp-block-column.tabs');\n    if (!tabsColumn) return;\n    const tabButtons = tabsColumn.querySelectorAll('.tabs-headers button');\n    const details = tabsColumn.querySelectorAll('details');\n\n    let currentIndex = 0;\n    let cycleInterval = null;\n\n    const activateTab = (i) => {\n      const btn = tabButtons[i];\n      if (!btn) return;\n      currentIndex = i;\n\n      \/\/ Close all details in this component\n      details.forEach(d => d.removeAttribute('open'));\n      \/\/ Open the selected detail\n      details[i].setAttribute('open', '');\n      \/\/ Update active button\n      tabButtons.forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      \/\/ Scroll button into center (mobile)\n      const container = btn.parentElement;\n      const containerWidth = container.offsetWidth;\n      const btnLeft = btn.offsetLeft;\n      const btnWidth = btn.offsetWidth;\n      let scrollPos = btnLeft - containerWidth \/ 2 + btnWidth \/ 2;\n      scrollPos = Math.max(0, Math.min(scrollPos, container.scrollWidth - containerWidth));\n      container.scrollTo({ left: scrollPos, behavior: 'smooth' });\n      \/\/ Update background color of this feature-tabs container\n      const bgColor = details[i].getAttribute('data-bgcolor');\n      if (bgColor) featureTabs.style.backgroundColor = bgColor;\n    };\n\n    const startCycle = () => {\n      if (cycleInterval || tabButtons.length < 2) return;\n      cycleInterval = setInterval(() => {\n        const next = (currentIndex + 1) % tabButtons.length;\n        activateTab(next);\n      }, 6000);\n    };\n\n    const stopCycle = () => {\n      if (cycleInterval) {\n        clearInterval(cycleInterval);\n        cycleInterval = null;\n      }\n    };\n\n    tabButtons.forEach((btn, i) => {\n      btn.addEventListener('click', () => {\n        activateTab(i);\n        \/\/ Stop auto-cycling once the user takes over\n        stopCycle();\n      });\n    });\n\n    \/\/ Build mobile next-tab arrow (wraps the headers row + adds clickable arrow)\n    const headersRow = tabsColumn.querySelector('.tabs-headers');\n    if (headersRow && tabButtons.length > 1) {\n      const wrap = document.createElement('div');\n      wrap.className = 'tabs-headers-wrap';\n      headersRow.parentNode.insertBefore(wrap, headersRow);\n      wrap.appendChild(headersRow);\n\n      const nextArrow = document.createElement('button');\n      nextArrow.className = 'tabs-next-arrow';\n      nextArrow.setAttribute('aria-label', 'Next tab');\n      nextArrow.type = 'button';\n      nextArrow.innerHTML = '<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"13\" height=\"11\" viewBox=\"0 0 13 11\" fill=\"none\"><path d=\"M7.125 9.75L11.5 5.375L7.125 1M11.5 5.375H1\" stroke=\"#054F27\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>';\n      wrap.appendChild(nextArrow);\n\n      nextArrow.addEventListener('click', () => {\n        const next = (currentIndex + 1) % tabButtons.length;\n        activateTab(next);\n        \/\/ Stop auto-cycling once the user takes over\n        stopCycle();\n      });\n    }\n\n    \/\/ Initialize first tab of this component\n    if (tabButtons[0]) {\n      activateTab(0);\n    }\n\n    \/\/ Start cycling immediately\n    startCycle();\n  });\n\n  \/\/ Duplicate testimonial scroller content for seamless loop\n  document.querySelectorAll('.testimonial-scroller').forEach(scroller => {\n    scroller.innerHTML += scroller.innerHTML;\n  });\n\n  \/\/ Logo carousel: duplicate via cloneNode + dynamic speed based on track width\n  document.querySelectorAll('.logo-carousel .logo-track').forEach(track => {\n    \/\/ Duplicate using cloneNode (avoids re-triggering lazyload mid-animation)\n    const originals = Array.from(track.children);\n    originals.forEach(node => {\n      const clone = node.cloneNode(true);\n      const img = clone.querySelector('img');\n      if (img) {\n        img.classList.remove('lazy');\n        if (img.dataset.src) img.src = img.dataset.src;\n        if (img.dataset.srcset) img.srcset = img.dataset.srcset;\n        img.removeAttribute('loading');\n      }\n      track.appendChild(clone);\n    });\n\n    \/\/ Set animation duration based on track width to keep visual speed constant.\n    \/\/ Adjust pxPerSecond to taste \u2014 higher = faster scroll.\n    const setSpeed = () => {\n      const trackWidth = track.scrollWidth;\n      const distance = trackWidth \/ 2;  \/\/ we animate from 0 to -50%\n      const pxPerSecond = window.innerWidth < 768 ? 120 : 80;\n      const duration = distance \/ pxPerSecond;\n      track.style.animationDuration = `${duration}s`;\n    };\n\n    \/\/ Run immediately, then re-run once images load (widths may shift)\n    setSpeed();\n    const imgs = track.querySelectorAll('img');\n    let loaded = 0;\n    const checkAllLoaded = () => {\n      loaded++;\n      if (loaded === imgs.length) setSpeed();\n    };\n    imgs.forEach(img => {\n      if (img.complete) {\n        loaded++;\n      } else {\n        img.addEventListener('load', checkAllLoaded, { once: true });\n        img.addEventListener('error', checkAllLoaded, { once: true });\n      }\n    });\n    if (loaded === imgs.length) setSpeed();\n\n    \/\/ Recalculate on resize so speed stays consistent across breakpoints\n    let resizeTimer;\n    window.addEventListener('resize', () => {\n      clearTimeout(resizeTimer);\n      resizeTimer = setTimeout(setSpeed, 200);\n    });\n  });\n});\n<\/script>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Release Notes<\/p>\n","protected":false},"author":40058,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-custom.blade.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-179508","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Release Notes | Phorest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.phorest.com\/au\/release-notes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Release Notes | Phorest\" \/>\n<meta property=\"og:description\" content=\"Release Notes\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.phorest.com\/au\/release-notes\/\" \/>\n<meta property=\"og:site_name\" content=\"Phorest\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/phorestsalonsoftware\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/logos\/phorest-acorn-logo.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/logos\/phorest-acorn-logo.png\" \/>\n<meta name=\"twitter:site\" content=\"@thephorestword\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.phorest.com\/au\/release-notes\/\",\"url\":\"https:\/\/www.phorest.com\/au\/release-notes\/\",\"name\":\"Release Notes | Phorest\",\"isPartOf\":{\"@id\":\"https:\/\/www.phorest.com\/au\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.phorest.com\/au\/release-notes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.phorest.com\/au\/release-notes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png\",\"datePublished\":\"2026-09-30T16:46:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.phorest.com\/au\/release-notes\/#breadcrumb\"},\"inLanguage\":\"en-AU\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.phorest.com\/au\/release-notes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-AU\",\"@id\":\"https:\/\/www.phorest.com\/au\/release-notes\/#primaryimage\",\"url\":\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png\",\"contentUrl\":\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.phorest.com\/au\/release-notes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.phorest.com\/au\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Release Notes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.phorest.com\/au\/#website\",\"url\":\"https:\/\/www.phorest.com\/au\/\",\"name\":\"Phorest\",\"description\":\"Salon Software for Hair, Beauty, Barber &amp; Spa Businesses\",\"publisher\":{\"@id\":\"https:\/\/www.phorest.com\/au\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.phorest.com\/au\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-AU\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.phorest.com\/au\/#organization\",\"name\":\"Phorest Salon Software\",\"url\":\"https:\/\/www.phorest.com\/au\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-AU\",\"@id\":\"https:\/\/www.phorest.com\/au\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/wp-content\/uploads\/2019\/10\/24141402\/phorest-acorn-logo1.png\",\"contentUrl\":\"https:\/\/d2dfxqxblmblx4.cloudfront.net\/wp-content\/uploads\/2019\/10\/24141402\/phorest-acorn-logo1.png\",\"width\":201,\"height\":202,\"caption\":\"Phorest Salon Software\"},\"image\":{\"@id\":\"https:\/\/www.phorest.com\/au\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/phorestsalonsoftware\",\"https:\/\/x.com\/thephorestword\",\"https:\/\/instagram.com\/phorest_salon_software\",\"https:\/\/www.linkedin.com\/company\/phorest?trk=company_name\",\"https:\/\/www.pinterest.com\/phorestss\/\",\"https:\/\/plus.google.com\/u\/0\/b\/101418954139594616916\/101418954139594616916\/posts\/p\/pub\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Release Notes | Phorest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.phorest.com\/au\/release-notes\/","og_locale":"en_US","og_type":"article","og_title":"Release Notes | Phorest","og_description":"Release Notes","og_url":"https:\/\/www.phorest.com\/au\/release-notes\/","og_site_name":"Phorest","article_publisher":"https:\/\/www.facebook.com\/phorestsalonsoftware","og_image":[{"url":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/logos\/phorest-acorn-logo.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_image":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/logos\/phorest-acorn-logo.png","twitter_site":"@thephorestword","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.phorest.com\/au\/release-notes\/","url":"https:\/\/www.phorest.com\/au\/release-notes\/","name":"Release Notes | Phorest","isPartOf":{"@id":"https:\/\/www.phorest.com\/au\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.phorest.com\/au\/release-notes\/#primaryimage"},"image":{"@id":"https:\/\/www.phorest.com\/au\/release-notes\/#primaryimage"},"thumbnailUrl":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png","datePublished":"2026-09-30T16:46:57+00:00","breadcrumb":{"@id":"https:\/\/www.phorest.com\/au\/release-notes\/#breadcrumb"},"inLanguage":"en-AU","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.phorest.com\/au\/release-notes\/"]}]},{"@type":"ImageObject","inLanguage":"en-AU","@id":"https:\/\/www.phorest.com\/au\/release-notes\/#primaryimage","url":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png","contentUrl":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/images\/patterns\/leaves\/peach.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.phorest.com\/au\/release-notes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.phorest.com\/au\/"},{"@type":"ListItem","position":2,"name":"Release Notes"}]},{"@type":"WebSite","@id":"https:\/\/www.phorest.com\/au\/#website","url":"https:\/\/www.phorest.com\/au\/","name":"Phorest","description":"Salon Software for Hair, Beauty, Barber &amp; Spa Businesses","publisher":{"@id":"https:\/\/www.phorest.com\/au\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.phorest.com\/au\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-AU"},{"@type":"Organization","@id":"https:\/\/www.phorest.com\/au\/#organization","name":"Phorest Salon Software","url":"https:\/\/www.phorest.com\/au\/","logo":{"@type":"ImageObject","inLanguage":"en-AU","@id":"https:\/\/www.phorest.com\/au\/#\/schema\/logo\/image\/","url":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/wp-content\/uploads\/2019\/10\/24141402\/phorest-acorn-logo1.png","contentUrl":"https:\/\/d2dfxqxblmblx4.cloudfront.net\/wp-content\/uploads\/2019\/10\/24141402\/phorest-acorn-logo1.png","width":201,"height":202,"caption":"Phorest Salon Software"},"image":{"@id":"https:\/\/www.phorest.com\/au\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/phorestsalonsoftware","https:\/\/x.com\/thephorestword","https:\/\/instagram.com\/phorest_salon_software","https:\/\/www.linkedin.com\/company\/phorest?trk=company_name","https:\/\/www.pinterest.com\/phorestss\/","https:\/\/plus.google.com\/u\/0\/b\/101418954139594616916\/101418954139594616916\/posts\/p\/pub"]}]}},"_links":{"self":[{"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/pages\/179508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/users\/40058"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/comments?post=179508"}],"version-history":[{"count":0,"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/pages\/179508\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.phorest.com\/au\/wp-json\/wp\/v2\/media?parent=179508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}