Hair & Beauty Salon Website HTML Template — Free Snippet

Hair & Beauty Salon Website template · 10 website sections · Plain HTML, CSS & JS · Customise it in the Website Builder

What's included

Features

10 ready-made website sections assembled into one finished hair & beauty salon website page: Simple Sticky Navbar, Image Background Hero, Restaurant Menu, Before & After Slider, Team Grid, Testimonial Wall, Booking Request Form, Contact With Map, Popup & Promo Modal, Minimal Footer
Every section links to its own page in the Website Section Templates library, where you can edit it on its own
One theme drives the whole page (colours, fonts, corner radius, width), so changing the brand takes a minute
Container-query responsive: each section adapts to the width it is placed in, from phone to desktop
GSAP entrance animations and scroll effects load from a CDN, and switch off for visitors who prefer reduced motion
Also available as a 6-page website in the builder, sharing one navbar, footer and theme
Plain HTML, CSS and JavaScript: copy the code here or export it to React, Vue, Angular or Tailwind

About this UI Snippet

A Salon Website That Books Appointments: Services Menu, Stylists and Before-and-After Proof

Screenshot of the Hair & Beauty Salon Website Template snippet rendered live

Clients choose a salon on three things: the work, the price and the person who will do it. The services are therefore laid out like a menu, with prices, so the cost of a cut and colour is clear before anyone books. A before-and-after slider shows transformations that no description can convey, and the stylist grid lets a client pick someone by name, which is how most salon bookings really work.

Reviews from regulars confirm the experience, a booking request form takes the service, preferred stylist and date, and a map shows where to find you. A popup can promote a new-client offer or a quiet-day discount without restructuring the page.

Replace the sample menu and stylists with your own, and photograph your real work. It is the layout of the Hair & Beauty Salon Website template, which also comes as a multi-page site with Services, Stylists and Book pages; open it in the Website Builder to edit and export.

Built from website section templates

The 10 Sections Behind This Hair & Beauty Salon Website Page

This page is not one big block of code: it is stacked from ready-made sections in the free Website Section Templates library, in this order. Open any of them to edit it on its own, or start with the whole page.

  1. Simple Sticky Navbara sticky bar with a Book now button for visitors who already know what they want
  2. Image Background Heroa soft hero with your best review and a booking button, tone first
  3. Restaurant Menuservices and prices laid out like a menu, so the cost is clear before anyone books
  4. Before & After Sliderbefore-and-after results, the proof of skill that words cannot give
  5. Team Gridthe stylists with photos and specialities, because clients book a person
  6. Testimonial Wallreviews from regulars, which confirm the atmosphere and the consistency
  7. Booking Request Forma booking request form for service, stylist, date and contact details
  8. Contact With Mapa map with address, parking and opening hours
  9. Popup & Promo Modalan optional popup for a new-client offer or a quiet-day discount
  10. Minimal Footera minimal footer with socials and legal links

Step by step

How to Use

  1. 1
    Open the template in the Website BuilderPress "Start using this template" to open the Hair & Beauty Salon Website in the Website Builder. Everything is edited with forms in a side panel; no code is needed.
  2. 2
    Turn your price list into the menuEnter each service with its real price or "from" price and duration, grouped by cut, colour and treatments, so clients know what to expect before they book.
  3. 3
    Introduce each stylistAdd a photo, speciality and booking link for each stylist; many clients ask for someone by name.
  4. 4
    Show real transformationsUse your own before-and-after images in the slider, with the client's permission, to demonstrate the work you most want to be booked for.
  5. 5
    Export and publishDownload one HTML file or a ZIP (or one HTML file per page for the multi-page version) and upload it to Netlify, Vercel, Cloudflare Pages, GitHub Pages or your own host. Or copy the code from this page and export it to React, Vue, Angular or Tailwind with the buttons above the editor.

Real-world uses

Common Use Cases

Hair salons, barbers and beauty studios
Show services, prices and stylists, and take booking requests.
Nail, lash, brow and spa businesses
Swap the menu for your treatments and keep the proof-and-booking structure.
Learn a price menu and a comparison slider
See how a menu layout and a draggable before/after slider are built in plain HTML, CSS and JS.

Got questions?

Frequently Asked Questions

Services with prices, the stylists, before-and-after photos, reviews, a booking method and your address and hours.

They send a request through the form, which emails you; or link the Book now button to your online booking system.

Yes. Clear prices reduce no-shows and queries and let clients choose with confidence.

It is assembled from 10 templates in the free Website Section Templates library: Simple Sticky Navbar, Image Background Hero, Restaurant Menu, Before & After Slider, Team Grid, Testimonial Wall, Booking Request Form, Contact With Map, Popup & Promo Modal, Minimal Footer. Each one has its own page where you can edit it separately.

It is the same page. Here you read and edit the HTML, CSS and JavaScript directly with a live preview; in the Website Builder you edit it with forms, change the theme once for the whole page, add pages and export a finished site.

Source Code


    <section class="st st-navbar-simple" data-uid="smvnkxdd70as6">
      <header class="st-wrap nb">
        <a class="st-brand" href="#">
          <span class="st-brand-mark"><span class="st-brand-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" /><path d="M20 3v4" /><path d="M22 5h-4" /><path d="M4 17v2" /><path d="M5 18H3" /></svg></span><span>Bloom Studio</span></span>
        </a>
        <nav class="nb-nav" data-menu aria-label="Main">
          <ul class="nb-links">
            <li data-menu-item><a class="nb-link" href="#menu"><span>Services</span></a></li>
            <li data-menu-item><a class="nb-link" href="#team"><span>Stylists</span></a></li>
            <li data-menu-item><a class="nb-link" href="#customers"><span>Reviews</span></a></li>
            <li data-menu-item><a class="nb-link" href="#contact"><span>Visit</span></a></li>
          </ul>
          <div class="nb-actions" data-menu-item>
            <a class="st-btn nb-cta" href="#contact"><span>Book now</span></a>
          </div>
        </nav>
        <button type="button" class="st-burger" data-menu-toggle aria-expanded="false" aria-label="Open menu"><span></span><span></span><span></span></button>
      </header>
      <i hidden data-sticky-flag></i>
    </section>
    <section class="st st-image-background-hero" data-uid="smvnkxdd7r438">
      <div class="ib-bg" role="img" aria-label="Background photo" style="background-image:url('https://webdevpuneet.com/images/section-templates/tpl-salon.jpg')"></div>
      <div class="ib-shade" aria-hidden="true"></div>
      <div class="ib st-wrap">
        <div class="ib-copy">
          <span class="st-eyebrow ib-eyebrow" data-anim="item">Hair · Colour · Beauty · Hackney</span>
          <h1 class="ib-title" data-anim="item" data-anim-text>Leave feeling <span class="hl">like yourself, only better</span></h1>
          <p class="st-lead ib-lead" data-anim="item">Cuts, colour and care from a friendly team who listen first. Open late on Thursdays and Fridays.</p>
          <div class="st-btns" data-anim="item">
            <a class="st-btn" href="#contact"><span>Book an appointment</span></a>
            <a class="st-btn st-btn--ghost ib-ghost" href="#menu"><span>Services &amp; prices</span></a>
          </div>
        </div>
        <div class="ib-stats" data-anim="media">
          <div><strong>4.9★</strong><span>Google rating</span></div>
          <div><strong>12</strong><span>stylists</span></div>
          <div><strong>Since 2012</strong><span>in Hackney</span></div>
        </div>
      </div>
    </section>
    <section id="menu" class="st st-restaurant-menu" data-uid="smvnkxdd7vyrx">
      <div class="st-art" aria-hidden="true" style="color:var(--st-brand);opacity:0.08" data-art-anim="float"><svg viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid slice"><defs><filter id="art-blur-smvnkxdd7vyrx" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur stdDeviation="60"/></filter></defs><g filter="url(#art-blur-smvnkxdd7vyrx)" fill="currentColor"><circle data-float cx="180" cy="160" r="190"/><circle data-float cx="1040" cy="260" r="220"/><circle data-float cx="640" cy="720" r="200"/></g></svg></div>
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Services &amp; prices</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Cut, colour <span class="hl">and care</span></h2>
          <p class="st-lead" data-anim="item">Every appointment starts with a consultation. Prices vary with hair length and stylist level.</p>
        </header>
        <ul class="rm-list">
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Cut &amp; finish</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £55</span>
            </div>
            <p class="rm-desc">Wash, cut, blow-dry and styling advice.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Men’s cut</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £32</span>
            </div>
            <p class="rm-desc">Scissor or clipper cut with a hot towel finish.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Full colour</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £85</span>
            </div>
            <p class="rm-desc">Root-to-tip colour with a gloss and finish.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Balayage</span>
              <span class="rm-tag">Most booked</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £140</span>
            </div>
            <p class="rm-desc">Hand-painted, sun-kissed highlights.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Blow-dry</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">£35</span>
            </div>
            <p class="rm-desc">Smooth, bouncy or curly: your choice.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Gloss treatment</span>
              <span class="rm-tag">New</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">£40</span>
            </div>
            <p class="rm-desc">Shine and tone refresh between colours.</p>
          </li>
        </ul>
        <div class="rm-foot" data-anim="item">
          <p class="rm-note">Free colour consultation and patch test 48 hours before any colour service.</p>
          <a class="st-btn" href="#contact"><span>Book online</span></a>
        </div>
      </div>
    </section>
    <section id="gallery" class="st st-before-after-slider" data-uid="smvnkxdd7jof7">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Results</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Colour and cut, <span class="hl">before and after</span></h2>
          <p class="st-lead" data-anim="item">Drag the handle to see what a consultation, a colour and a cut can do. Shared with our clients’ permission.</p>
        </header>
        <ul class="ba-grid">
          <li class="ba-item" data-anim="item">
            <div class="ba-compare" data-compare>
              <img class="ba-img ba-after" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-4.jpg" alt="After photo (sample image)">
              <img class="ba-img ba-before" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-2.jpg" alt="Before photo (sample image)">
              <span class="ba-tag ba-tag-before">Before</span>
              <span class="ba-tag ba-tag-after">After</span>
              <span class="ba-handle" aria-hidden="true"><span class="ba-knob"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m9 7-5 5 5 5M15 7l5 5-5 5"/></svg></span></span>
              <input class="ba-range" type="range" min="0" max="100" value="50" aria-label="Drag to compare before and after">
            </div>
            <h3 class="ba-title">Warm balayage refresh</h3>
            <p class="ba-cap">Three hours with Amara, including a gloss and a blow-dry.</p>
          </li>
          <li class="ba-item" data-anim="item">
            <div class="ba-compare" data-compare>
              <img class="ba-img ba-after" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/wed-dinner.jpg" alt="After photo (sample image)">
              <img class="ba-img ba-before" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-restaurant.jpg" alt="Before photo (sample image)">
              <span class="ba-tag ba-tag-before">Before</span>
              <span class="ba-tag ba-tag-after">After</span>
              <span class="ba-handle" aria-hidden="true"><span class="ba-knob"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m9 7-5 5 5 5M15 7l5 5-5 5"/></svg></span></span>
              <input class="ba-range" type="range" min="0" max="100" value="50" aria-label="Drag to compare before and after">
            </div>
            <h3 class="ba-title">Layered cut with movement</h3>
            <p class="ba-cap">A restyle with soft layers that dries well at home.</p>
          </li>
        </ul>
      </div>
    </section>
    <section id="team" class="st st-team-grid" data-uid="smvnkxdd7sx9x">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Our stylists</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>The people <span class="hl">behind the chair</span></h2>
          <p class="st-lead" data-anim="item">Experienced, friendly and always learning.</p>
        </header>
        <ul class="tm2-grid">
          <li class="tm2-card" data-anim="item">
            <div class="tm2-photo">
              <img width="400" height="400" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-2.jpg" alt="">
              <div class="tm2-social">
              </div>
            </div>
            <h3 class="tm2-name">Amara Osei</h3>
            <p class="tm2-role">Founder &amp; Creative Director</p>
            <p class="tm2-bio">Colour specialist with 18 years of experience.</p>
          </li>
          <li class="tm2-card" data-anim="item">
            <div class="tm2-photo">
              <img width="400" height="400" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-4.jpg" alt="">
              <div class="tm2-social">
              </div>
            </div>
            <h3 class="tm2-name">Theo Grant</h3>
            <p class="tm2-role">Senior Stylist</p>
            <p class="tm2-bio">Precision cuts and men’s grooming.</p>
          </li>
          <li class="tm2-card" data-anim="item">
            <div class="tm2-photo">
              <img width="400" height="400" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-5.jpg" alt="">
              <div class="tm2-social">
              </div>
            </div>
            <h3 class="tm2-name">Lucia Romano</h3>
            <p class="tm2-role">Colourist</p>
            <p class="tm2-bio">Balayage and lived-in blondes.</p>
          </li>
          <li class="tm2-card" data-anim="item">
            <div class="tm2-photo">
              <img width="400" height="400" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-8.jpg" alt="">
              <div class="tm2-social">
              </div>
            </div>
            <h3 class="tm2-name">Mei Tanaka</h3>
            <p class="tm2-role">Beauty Therapist</p>
            <p class="tm2-bio">Brows, lashes and skin.</p>
          </li>
        </ul>
      </div>
    </section>
    <section id="customers" class="st st-testimonials-grid" data-uid="smvnkxdd7jafx">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Client love</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Kind words <span class="hl">from regulars</span></h2>
          <p class="tg-summary" data-anim="item">★ 4.9 from 640+ Google reviews</p>
        </header>
        <div class="tg-wall">
          <figure class="tg-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tg-quote"><p>Amara finally got my colour right after years of trying elsewhere. I leave smiling every time.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-3.jpg" alt="">
                <div><p class="st-person-name">Jess P.</p><p class="st-person-role">Client since 2019</p></div>
              </div></figcaption>
          </figure>
          <figure class="tg-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tg-quote"><p>Best fade in East London, and they always remember how I like it.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-7.jpg" alt="">
                <div><p class="st-person-name">Kwame A.</p><p class="st-person-role">Monthly regular</p></div>
              </div></figcaption>
          </figure>
          <figure class="tg-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tg-quote"><p>Warm, relaxed and so talented. The balayage is exactly what I asked for.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-6.jpg" alt="">
                <div><p class="st-person-name">Sofia L.</p><p class="st-person-role">First visit</p></div>
              </div></figcaption>
          </figure>
        </div>
      </div>
    </section>
    <section id="contact" class="st st-booking-form" data-uid="smvnkxdd7oxkc">
      <div class="st-wrap bk">
        <div class="bk-info">
          <header class="st-head st-head--left bk-head">
            <p class="st-eyebrow" data-anim="item">Book</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Request <span class="hl">your appointment</span></h2>
            <p class="st-lead" data-anim="item">Choose the service, the day and a time that suits you. We confirm every request by text or email.</p>
          </header>
          <div class="bk-block" data-anim="item">
            <h3 class="bk-sub">Opening hours</h3>
            <dl class="bk-hours">
              <div class="bk-row"><dt>Tuesday – Wednesday</dt><dd>9:30 am – 6:00 pm</dd></div>
              <div class="bk-row"><dt>Thursday – Friday</dt><dd>9:30 am – 8:00 pm</dd></div>
              <div class="bk-row"><dt>Saturday</dt><dd>9:00 am – 5:00 pm</dd></div>
              <div class="bk-row"><dt>Sunday – Monday</dt><dd>Closed</dd></div>
            </dl>
          </div>
          <div class="bk-block" data-anim="item">
            <h3 class="bk-sub">Before you come</h3>
            <ul class="st-checks"><li>Every visit starts with a free consultation</li><li>Patch tests are done 48 hours before colour</li><li>Free cancellation up to 24 hours before</li></ul>
          </div>
        </div>
        <div class="bk-card" data-anim="media">
          <form class="st-form" method="post" data-form action="https://formspree.io/f/your-form-id">
            <div class="st-form-fields" data-form-fields>
              <div class="st-form-row">
                <label class="st-field"><span>Your name</span><input name="name" type="text" required autocomplete="name"></label>
                <label class="st-field"><span>Email</span><input name="email" type="email" required autocomplete="email"></label>
              </div>
              <label class="st-field"><span>Phone</span><input name="phone" type="tel" autocomplete="tel"></label>
              <label class="st-field"><span>Service</span><select name="service" required>
                  <option value="Consultation">Consultation</option>
                  <option value="Cut and blow-dry">Cut and blow-dry</option>
                  <option value="Colour">Colour</option>
                  <option value="Balayage">Balayage</option>
                  <option value="Treatment">Treatment</option>
                </select></label>
              <div class="st-form-row">
                <label class="st-field"><span>Preferred day</span><input name="date" type="date" required data-booking-date></label>
                <label class="st-field"><span>Preferred time</span><select name="time" required>
                    <option value="Morning (9 am – 12 pm)">Morning (9 am – 12 pm)</option>
                    <option value="Lunchtime (12 pm – 2 pm)">Lunchtime (12 pm – 2 pm)</option>
                    <option value="Afternoon (2 pm – 5 pm)">Afternoon (2 pm – 5 pm)</option>
                    <option value="Evening (after 5 pm)">Evening (after 5 pm)</option>
                  </select></label>
              </div>
              <label class="st-field"><span>Anything we should know?</span><textarea name="notes" rows="3"></textarea></label>
              <input class="st-hp" type="text" name="_gotcha" tabindex="-1" autocomplete="off" aria-hidden="true">
              <button class="st-btn st-form-btn" type="submit"><span>Request appointment</span></button>
              <p class="st-form-note">This is a request, not a confirmed booking. We reply to confirm.</p>
              <p class="st-form-error" data-form-error hidden role="alert">Sorry, something went wrong. Please try again or call us directly.</p>
            </div>
            <div class="st-form-success" data-form-success hidden tabindex="-1" role="status">
              <span class="st-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg></span>
              <h3>Request received</h3>
              <p>Thank you. We will confirm your appointment by email shortly.</p>
            </div>
          </form>
        </div>
      </div>
    </section>
    <section id="contact-2" class="st st-contact-map" data-uid="smvnkxdd79f9n">
      <div class="st-wrap cm">
        <div class="cm-info">
          <header class="st-head st-head--left cm-head">
            <p class="st-eyebrow" data-anim="item">Visit</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Find <span class="hl">the studio</span></h2>
            <p class="st-lead" data-anim="item">On Broadway Market, two minutes from London Fields.</p>
          </header>
          <ul class="cm-offices">
            <li class="cm-office" data-anim="item">
              <h3 class="cm-city">Bloom Studio</h3>
              <address class="cm-address">41 Broadway Market<br>London E8 4PH</address>
              <p class="cm-hours">Tue–Sat 9am–7pm · Thu–Fri until 9pm</p>
              <p class="cm-contact">
                <a href="tel:+442079460456"><span>020 7946 0456</span></a>
                <a href="mailto:hello@webdevpuneet.com"><span>hello@webdevpuneet.com</span></a>
              </p>
            </li>
          </ul>
        </div>
        <div class="cm-map" data-anim="media">
          <iframe class="cm-frame" loading="lazy" referrerpolicy="no-referrer-when-downgrade" src="https://www.openstreetmap.org/export/embed.html?bbox=-0.1135%2C51.5185%2C-0.0955%2C51.5265&amp;layer=mapnik&amp;marker=51.5225%2C-0.1045" title="Map showing Bloom Studio"></iframe>
        </div>
      </div>
    </section>
    <section class="st st-popup-modal" data-uid="smvnkxdd70hy4">
      <div class="pu" data-pu data-trigger="delay" data-delay="10" data-scroll="50" data-days="7" data-pos="bottom-right" data-layout="left" data-autoplay="0" data-pu-id="1pcpcek">
        <div class="pu-backdrop" data-pu-close hidden></div>
        <div class="pu-dialog" role="dialog" aria-modal="true" aria-labelledby="pu-heading" tabindex="-1" hidden>
          <button type="button" class="pu-x" data-pu-close aria-label="Close popup"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18"/></svg></button>
          <div class="pu-media">
            <img class="pu-img" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-salon.jpg" alt="A stylist at work in the salon">
          </div>
          <div class="pu-body">
            <p class="st-eyebrow">New clients</p>
            <h2 class="pu-h" id="pu-heading"><span class="hl">20% off</span> your first visit</h2>
            <p class="pu-lead">Book a cut, colour or treatment this month and your first visit is on us.</p>
            <div class="pu-ctas">
              <a class="st-btn pu-cta" href="#contact"><span>Book now</span></a>
            </div>
            <button type="button" class="pu-no" data-pu-close><span>No thanks</span></button>
          </div>
        </div>
      </div>
    </section>
    <section class="st st-footer-minimal" data-uid="smvnkxdd774bm">
      <footer class="st-wrap fm">
        <div class="fm-row" data-anim="item">
          <a class="st-brand" href="#">
            <span class="st-brand-mark"><span class="st-brand-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" /><path d="M20 3v4" /><path d="M22 5h-4" /><path d="M4 17v2" /><path d="M5 18H3" /></svg></span><span>Bloom Studio</span></span>
          </a>
          <nav aria-label="Footer"><ul class="fm-links"><li><a href="#menu">Services</a></li><li><a href="#team">Stylists</a></li><li><a href="#customers">Reviews</a></li><li><a href="#contact">Book</a></li></ul></nav>
          <div><ul class="st-socials">
              <li><a class="st-social" href="https://x.com/" aria-label="X (Twitter)"><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z" /></svg></span></a></li>
              <li><a class="st-social" href="https://www.linkedin.com/" aria-label="LinkedIn"><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" /><rect width="4" height="12" x="2" y="9" /><circle cx="4" cy="4" r="2" /></svg></span></a></li>
              <li><a class="st-social" href="https://github.com/" aria-label="GitHub"><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4" /><path d="M9 18c-4.51 2-5-2-7-2" /></svg></span></a></li>
            </ul></div>
        </div>
        <p class="fm-copy">© 2026 Bloom Studio</p>
      </footer>
    </section>
Design your website