<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Candle Art — Candle-Making Workshops in Kirkland, WA</title>
<meta name="description" content="A candle-making workshop in Kirkland, WA. Pick the shape, the scent and the color; we handle the hot wax. Soy, gel and coloring paraffin. Daily sessions, ages 4 and up." />
<link rel="icon" href="assets/candleart_icon.svg?v=e02e35f4" type="image/svg+xml" />
<link rel="icon" href="assets/candleart_icon_32.png?v=b037b060" sizes="32x32" type="image/png" />
<link rel="apple-touch-icon" href="assets/candleart_icon_32.png?v=b037b060" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="" />
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&display=swap" rel="stylesheet" />
<style>
  html { scroll-behavior: smooth; background: #100E0C; }
  body { margin: 0; background: #F4F1EA; color: #100E0C; font-family: 'Helvetica Neue', Helvetica, 'Arial Nova', Arial, sans-serif; -webkit-font-smoothing: antialiased; text-wrap: pretty; overflow-x: hidden; }
  * { box-sizing: border-box; }
  a { color: currentColor; text-decoration: none; }
  a:hover { color: #E0491B; }
  ::selection { background: #E0491B; color: #F4F1EA; }
  img { user-select: none; -webkit-user-drag: none; }

  /* style-hover equivalents (inline styles win on specificity, so these carry !important) */
  .hv-accent:hover { color: #E0491B !important; }
  .hv-invert:hover { background: #F4F1EA !important; color: #100E0C !important; }
  .hv-groups:hover { background: #E0491B !important; color: #F4F1EA !important; }
  .hv-book:hover { background: #100E0C !important; color: #F0C43C !important; }
  /* booking contact fields — dark panel, cream ink */
  .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
  .bk-field { display: block; width: 100%; box-sizing: border-box; background: transparent; border: 1px solid rgba(244,241,234,.34); color: #F4F1EA; padding: 13px 14px; margin-bottom: 8px; font: 400 13px/1.2 'Helvetica Neue', Helvetica, Arial, sans-serif; border-radius: 0; }
  .bk-field::placeholder { color: rgba(244,241,234,.65); opacity: 1; }
  .bk-field:focus { outline: none; border-color: #E0491B; }
  .bk-field[aria-invalid="true"] { border-color: #E0491B; }
  .hv-cal:hover { background: #E0491B !important; border-color: #E0491B !important; }
  [data-reel]::-webkit-scrollbar { display: none; }

  /* ---------- gallery grid + lightbox ---------- */
  .ga-cell { position: relative; display: block; margin: 0; overflow: hidden; background: #100E0C; cursor: zoom-in; border: none; padding: 0; width: 100%; }
  .ga-cell img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform 420ms cubic-bezier(.2,.7,.2,1), opacity 260ms linear; }
  .ga-cell:hover img, .ga-cell:focus-visible img { transform: scale(1.045); opacity: .88; }
  .ga-cell:focus-visible { outline: 2px solid #E0491B; outline-offset: 2px; }
  #lightbox[hidden] { display: none; }
  #lightbox { position: fixed; inset: 0; z-index: 90; background: rgba(16,14,12,.96); display: flex; flex-direction: column; }
  #lbStage { flex: 1 1 auto; display: flex; align-items: center; justify-content: center; min-height: 0; padding: clamp(10px, 2vw, 28px); }
  #lbImg { max-width: 100%; max-height: 100%; object-fit: contain; }
  .lb-btn { position: absolute; top: 50%; transform: translateY(-50%); background: rgba(244,241,234,.1); color: #F4F1EA; border: 1px solid rgba(244,241,234,.4); width: 46px; height: 46px; font: 400 16px/1 'Helvetica Neue', Helvetica, Arial, sans-serif; cursor: pointer; }
  .lb-btn:hover { background: #E0491B; border-color: #E0491B; }
  #lbPrev { left: clamp(8px, 1.6vw, 22px); }
  #lbNext { right: clamp(8px, 1.6vw, 22px); }
  #lbClose { position: absolute; top: clamp(8px, 1.6vw, 22px); right: clamp(8px, 1.6vw, 22px); background: #F4F1EA; color: #100E0C; border: none; border-radius: 999px; width: 60px; height: 60px; font: 400 11px/1 'Helvetica Neue', Helvetica, Arial, sans-serif; letter-spacing: .06em; text-transform: uppercase; cursor: pointer; }
  #lbCap { flex: 0 0 auto; padding: 0 clamp(12px, 2vw, 28px) clamp(12px, 2vw, 24px); color: rgba(244,241,234,.75); font-size: 11px; letter-spacing: .04em; text-transform: uppercase; display: flex; justify-content: space-between; gap: 16px; }
  @media (max-width: 640px) { .lb-btn { width: 40px; height: 40px; } #lbClose { width: 48px; height: 48px; } }
  /* Two columns cannot fit a 1-wide cell beside a 2-wide one, so the landscape
     photos punch a hole in the grid on a phone. Drop the span rather than reach
     for grid-auto-flow: dense — dense reorders cells visually while the lightbox
     still walks them in DOM order, so "next" would jump somewhere unexpected. */
     Matching the aspect ratio too keeps every row the same height — a 3/2 cell
     beside a 3/4 one leaves visible slack under the shorter of the pair. The
     landscape shots get cropped in the grid and shown whole in the lightbox. */
  @media (max-width: 640px) { #galleryGrid .ga-cell { grid-column: span 1 !important; aspect-ratio: 3/4 !important; } }
</style>
</head>
<body>

<svg width="0" height="0" aria-hidden="true" focusable="false" style="position: absolute"><symbol id="ca-mark" viewBox="0 0 489 364"><g transform="translate(-380,-240)">
    <path d="M0 0 C1.38 4.141 -0.246 6.654 -1.902 10.465 C-2.216 11.207 -2.529 11.948 -2.851 12.713 C-3.872 15.125 -4.905 17.531 -5.938 19.938 C-6.981 22.398 -8.021 24.859 -9.062 27.321 C-9.749 28.945 -10.437 30.57 -11.126 32.194 C-13.807 38.516 -16.408 44.866 -18.938 51.25 C-19.26 52.063 -19.583 52.877 -19.916 53.715 C-20.613 55.475 -21.307 57.238 -22 59 C-25.468 57.709 -28.452 56.182 -31.562 54.188 C-51.92 41.841 -75.358 39.363 -98.293 44.777 C-110.464 48.232 -121.408 53.73 -131 62 C-131.337 62.266 -131.337 62.266 -133.043 63.609 C-146.92 74.883 -156.946 94.28 -159 112 C-160.408 130.559 -158.849 147.362 -150 164 C-149.78 164.42 -149.78 164.42 -148.664 166.543 C-137.828 185.85 -119.918 198.74 -99 205 C-94.046 206.251 -89.042 207.174 -84 208 C-84.573 212.07 -85.473 215.615 -87.01 219.423 C-87.423 220.457 -87.837 221.491 -88.264 222.557 C-88.712 223.657 -89.16 224.757 -89.621 225.891 C-89.851 226.461 -89.851 226.461 -91.015 229.348 C-91.986 231.753 -92.961 234.157 -93.938 236.56 C-94.94 239.025 -95.939 241.492 -96.932 243.962 C-98.364 247.524 -99.804 251.083 -101.246 254.641 C-101.469 255.195 -101.469 255.195 -102.597 257.999 C-103.014 259.021 -103.431 260.042 -103.861 261.095 C-104.227 261.996 -104.592 262.897 -104.969 263.826 C-106 266 -106 266 -108 268 C-133.214 260.947 -155.687 251.132 -175 233 C-175.61 232.433 -176.219 231.865 -176.848 231.281 C-185.737 222.932 -193.477 214.317 -200 204 C-200.356 203.44 -200.713 202.88 -201.08 202.303 C-208.604 190.29 -213.951 177.367 -217.812 163.75 C-218.007 163.066 -218.202 162.383 -218.403 161.679 C-221.627 149.637 -222.375 137.648 -222.312 125.25 C-222.311 124.499 -222.309 123.748 -222.307 122.975 C-222.262 112.032 -221.827 101.628 -219 91 C-218.914 90.659 -218.914 90.659 -218.48 88.934 C-209.453 53.372 -187.543 23.257 -157 3 C-156.408 2.601 -155.816 2.202 -155.206 1.791 C-114.206 -25.509 -40.85 -33.45 0 0 Z " fill="currentColor" transform="translate(638,297)"/>
<path d="M0 0 C1.969 0.005 3.937 0.01 5.906 0.014 C10.688 0.025 15.469 0.042 20.25 0.062 C24.564 9.129 28.462 18.306 32.196 27.621 C33.834 31.705 35.482 35.784 37.129 39.863 C37.47 40.708 37.81 41.553 38.161 42.423 C41.759 51.339 45.408 60.233 49.062 69.125 C50.408 72.4 51.753 75.674 53.098 78.949 C53.436 79.773 53.775 80.597 54.123 81.446 C58.091 91.107 62.046 100.772 66 110.438 C66.186 110.892 66.186 110.892 67.127 113.193 C75.248 133.048 83.354 152.908 91.458 172.769 C94.778 180.907 98.1 189.044 101.422 197.18 C103.471 202.197 105.518 207.214 107.565 212.231 C108.39 214.253 109.214 216.275 110.039 218.297 C110.452 219.309 110.865 220.321 111.29 221.364 C113.871 227.69 116.457 234.014 119.047 240.336 C121.114 245.383 123.179 250.431 125.242 255.479 C126.49 258.533 127.74 261.586 128.993 264.638 C130.378 268.017 131.76 271.397 133.141 274.777 C133.349 275.285 133.349 275.285 134.406 277.854 C134.783 278.778 135.16 279.703 135.548 280.656 C135.878 281.463 136.209 282.27 136.549 283.102 C137.25 285.062 137.25 285.062 137.25 287.062 C115.14 287.062 93.03 287.062 70.25 287.062 C49.604 236.549 49.604 236.549 44 222.625 C43.601 221.641 43.202 220.657 42.792 219.643 C42.443 218.772 42.094 217.901 41.734 217.004 C41.443 216.279 41.151 215.554 40.851 214.807 C40.25 213.062 40.25 213.062 40.25 211.062 C-12.22 211.062 -64.69 211.062 -118.75 211.062 C-117.887 206.747 -116.666 203.053 -115.004 199.027 C-114.722 198.334 -114.44 197.641 -114.149 196.926 C-113.208 194.616 -112.26 192.308 -111.312 190 C-110.637 188.346 -109.962 186.692 -109.288 185.038 C-107.482 180.612 -105.67 176.188 -103.857 171.765 C-102.053 167.361 -100.253 162.956 -98.453 158.551 C-95.468 151.249 -92.481 143.948 -89.492 136.648 C-78.221 109.117 -66.968 81.579 -55.812 54 C-55.639 53.572 -55.639 53.572 -54.762 51.405 C-51.764 43.992 -48.765 36.579 -45.773 29.164 C-44.221 25.319 -42.668 21.476 -41.112 17.633 C-40.543 16.224 -39.974 14.815 -39.407 13.406 C-38.638 11.497 -37.866 9.59 -37.094 7.684 C-36.663 6.616 -36.231 5.547 -35.787 4.447 C-34.75 2.062 -34.75 2.062 -33.75 1.062 C-22.684 -0.713 -11.163 -0.05 0 0 Z M-6.75 100.062 C-12.15 112.256 -17.407 124.498 -22.375 136.875 C-22.812 137.96 -23.25 139.044 -23.701 140.162 C-23.901 140.664 -23.901 140.664 -24.914 143.207 C-25.269 144.098 -25.625 144.988 -25.991 145.906 C-26.75 148.062 -26.75 148.062 -26.75 150.062 C-13.055 150.216 0.573 149.75 14.25 149.062 C10.425 138.73 6.485 128.452 2.353 118.239 C1.48 116.076 0.617 113.91 -0.246 111.744 C-0.804 110.362 -1.363 108.98 -1.922 107.598 C-2.049 107.275 -2.049 107.275 -2.695 105.644 C-4.522 101.177 -4.522 101.177 -6.75 100.062 Z " fill="currentColor" transform="translate(695.75,278.9375)"/>
<path d="M0 0 C0.409 0 0.409 0 2.478 0.003 C2.945 0.002 2.945 0.002 5.312 -0.001 C6.346 0.002 7.381 0.006 8.446 0.01 C9.529 0.009 10.612 0.009 11.728 0.009 C15.326 0.01 18.924 0.018 22.522 0.025 C25.01 0.027 27.497 0.029 29.984 0.03 C35.874 0.033 41.763 0.041 47.653 0.051 C55.014 0.063 62.374 0.069 69.735 0.074 C82.871 0.085 96.007 0.102 109.143 0.123 C107.481 4.614 105.143 7.853 102.018 11.436 C101.521 12.011 101.024 12.586 100.512 13.179 C75.51 41.881 40.318 60.517 2.268 63.811 C-7.54 64.401 -17.07 63.982 -26.857 63.123 C-26.166 58.753 -24.671 54.828 -23.013 50.752 C-22.728 50.041 -22.442 49.33 -22.148 48.597 C-21.222 46.291 -20.289 43.988 -19.357 41.686 C-18.719 40.104 -18.082 38.523 -17.446 36.942 C-15.876 33.047 -14.301 29.154 -12.723 25.263 C-11.924 23.29 -11.127 21.318 -10.331 19.344 C-9.072 16.227 -7.809 13.112 -6.544 9.998 C-6.178 9.094 -5.812 8.19 -5.435 7.258 C-5.103 6.448 -4.772 5.638 -4.431 4.803 C-4.148 4.109 -3.865 3.415 -3.574 2.701 C-2.595 0.548 -2.408 0.16 0 0 Z " fill="currentColor" transform="translate(572.8565759658813,503.8769521713257)"/>
  </g></symbol></svg>

<div id="top" style="position: relative">

  <div style="position: fixed; z-index: 60; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px clamp(14px, 2.4vw, 30px) 22px; background: linear-gradient(to bottom, rgba(16,14,12,.62) 0%, rgba(16,14,12,.34) 55%, rgba(16,14,12,0) 100%); color: #F4F1EA; pointer-events: none">
    <a href="#top" data-mono="" aria-label="Candle Art — back to top" style="pointer-events: auto; line-height: 0; display: inline-block"><svg viewBox="0 0 489 364" aria-hidden="true" focusable="false" style="display: block; height: 30px; width: auto"><use href="#ca-mark"></use></svg></a>
    <div style="display: flex; gap: clamp(10px, 2vw, 26px); font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>Kirkland, WA</span>
      <span data-clock="" style="text-transform: none">11 am — 4 pm</span>
    </div>
  </div>

  <button id="menuBtn" data-menu-toggle="" type="button" aria-expanded="false" aria-controls="menuOverlay">Menu</button>

  <div id="menuOverlay">
    <div style="display: flex; align-items: baseline; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.3); padding-bottom: 12px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.7)">
      <span>Candle Art — Index</span>
      <span>Drag the button anywhere</span>
    </div>
    <nav style="display: grid; gap: clamp(2px, .6vw, 8px); margin-top: clamp(20px, 4vw, 48px); font-family: 'Instrument Serif', serif; font-size: clamp(38px, 8.5vw, 120px); line-height: .96; letter-spacing: -.025em">
      <a href="#programme" data-menu-link="">Program</a>
      <a href="#materials" data-menu-link="">Materials</a>
      <a href="#archive" data-menu-link="">Archive</a>
      <a href="#technique" data-menu-link="">Technique</a>
      <a href="#families" data-menu-link="">Families</a>
      <a href="#about" data-menu-link="">About</a>
      <a href="#gallery" data-menu-link="">Gallery</a>
      <a href="#reviews" data-menu-link="">Guest book</a>
      <a href="#faq" data-menu-link="">Questions</a>
      <a href="#book" data-menu-link="">Book a session</a>
      <a href="#visit" data-menu-link="">Visit</a>
    </nav>
    <div style="display: flex; flex-wrap: wrap; gap: 24px; margin-top: clamp(24px, 5vw, 64px); font-size: 12px; line-height: 1.6; color: rgba(244,241,234,.75)">
      <span>9827 NE 120th Pl, Unit B<br />Kirkland, WA 98034</span>
      <span><a href="/cdn-cgi/l/email-protection#c2a1a3aca6aea7a3b0b6b5a382a5afa3abaeeca1adaf"><span class="__cf_email__" data-cfemail="89eae8e7ede5ece8fbfdfee8c9eee4e8e0e5a7eae6e4">[email&#160;protected]</span></a><br /><a href="https://instagram.com/candle.art_craft">@candle.art_craft</a></span>
    </div>
  </div>

  <section data-scroll-anchor="" style="position: relative; height: 100svh; min-height: 520px; overflow: hidden; background: #100E0C">
    <img src="assets/gallery-photo-17.jpeg" alt="The Candle Art studio in Kirkland during a busy session" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: .92" />
    <div style="position: absolute; inset: 0; background: linear-gradient(to top, rgba(16,14,12,.86) 0%, rgba(16,14,12,.7) 34%, rgba(16,14,12,.3) 62%, rgba(16,14,12,.46) 100%)"></div>
    <div style="position: absolute; inset: auto 0 0 0; padding: 0 clamp(14px, 2.4vw, 30px) clamp(18px, 3vw, 34px); color: #F4F1EA">
      <div style="display: flex; flex-wrap: wrap; align-items: baseline; gap: 14px 26px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: #F4F1EA; text-shadow: 0 1px 14px rgba(16,14,12,.85)">
        <span>Now open — Daily sessions</span>
        <span>Est. 2024</span>
        <span>60 / 90 min</span>
        <span>Ages 4 and up</span>
      </div>
      <h1 style="margin: 6px 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(64px, 17.5vw, 320px); line-height: .82; letter-spacing: -.035em">Candle Art<span style="display: block; margin-top: 10px; font-family: 'Helvetica Neue', Helvetica, 'Arial Nova', Arial, sans-serif; font-size: clamp(15px, 2.1vw, 30px); line-height: 1.15; letter-spacing: .01em">Candle-making workshops in Kirkland</span></h1>
      <div style="display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 18px; border-top: 1px solid rgba(244,241,234,.34); margin-top: 14px; padding-top: 12px">
        <p style="margin: 0; max-width: 46ch; font-size: clamp(13px, 1.15vw, 16px); line-height: 1.45">You pick the shape, the scent and the color; we handle the hot wax. Most candles set in two to three hours, so you take yours home the same day.</p>
        <a href="#book" class="hv-invert" style="flex: 0 0 auto; background: #E0491B; color: #F4F1EA; padding: 17px 30px; font-size: 13px; letter-spacing: .04em; text-transform: uppercase">Book a workshop ↗</a>
      </div>
    </div>
  </section>

  <section style="background: #E0491B; color: #F4F1EA; padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.4); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>01 — The idea</span>
      <span>Wax · Scent · Color</span>
    </div>
    <h2 data-reveal="" style="margin: clamp(16px, 2.6vw, 34px) 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(40px, 8.6vw, 168px); line-height: .88; letter-spacing: -.03em; max-width: 19ch">Two hundred smells on a shelf, and an afternoon to decide.</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: clamp(18px, 3vw, 46px); margin-top: clamp(24px, 4vw, 60px)">
      <p data-reveal="" style="margin: 0; font-size: 14px; line-height: 1.55">Bring a kid, a class, a date, or nobody. The table seats eight and nobody has ever needed experience. Aprons, wax, molds, oils, pigments and paint are all on the house.</p>
      <p data-reveal="" style="margin: 0; font-size: 14px; line-height: 1.55">Weekdays are open for walk-in bookings between 11 am and 4 pm. Saturdays and Sundays we hand the whole studio over to one group — birthdays, showers, offsites, reunions.</p>
      <div data-reveal="" style="display: grid; gap: 4px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
        <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(244,241,234,.4); padding-top: 6px"><span>Sessions</span><span>Daily</span></div>
        <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(244,241,234,.4); padding-top: 6px"><span>Scents</span><span>40+</span></div>
        <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(244,241,234,.4); padding-top: 6px"><span>Seats</span><span>8</span></div>
        <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(244,241,234,.4); padding-top: 6px"><span>Set time</span><span>2–3 hrs</span></div>
      </div>
    </div>
  </section>

  <section id="programme" style="padding: clamp(30px, 5vw, 80px) clamp(14px, 2.4vw, 30px) clamp(20px, 3vw, 40px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid #100E0C; padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>02 — Program</span>
      <span>Four ways to spend an hour</span>
    </div>

    <div data-peek="assets/gallery-photo-16.jpeg" style="display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px 24px; border-bottom: 1px solid rgba(16,14,12,.3); padding: clamp(14px, 2vw, 26px) 0; cursor: pointer">
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">Soy pour — 60 min — all ages</div>
        <h3 style="margin: 4px 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(38px, 7.4vw, 132px); line-height: .9; letter-spacing: -.03em">The Vessel Candle</h3>
      </div>
      <a href="#book" class="hv-book" style="display: inline-block; background: #F0C43C; color: #100E0C; text-decoration: none; padding: 10px 14px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap">Book ↗</a>
    </div>
    <div data-peek="assets/gallery-photo-12.jpeg" style="display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px 24px; border-bottom: 1px solid rgba(16,14,12,.3); padding: clamp(14px, 2vw, 26px) 0; cursor: pointer">
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">Gel wax — 90 min — ages 8+</div>
        <h3 style="margin: 4px 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(38px, 7.4vw, 132px); line-height: .9; letter-spacing: -.03em">Shells in Glass</h3>
      </div>
      <a href="#book" class="hv-book" style="display: inline-block; background: #F0C43C; color: #100E0C; text-decoration: none; padding: 10px 14px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap">Book ↗</a>
    </div>
    <div data-peek="assets/gallery-photo-05.jpeg" style="display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px 24px; border-bottom: 1px solid rgba(16,14,12,.3); padding: clamp(14px, 2vw, 26px) 0; cursor: pointer">
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">Coloring paraffin — 60 min — ages 4+</div>
        <h3 style="margin: 4px 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(38px, 7.4vw, 132px); line-height: .9; letter-spacing: -.03em">Bears, Cats, Dolphins</h3>
      </div>
      <a href="#book" class="hv-book" style="display: inline-block; background: #F0C43C; color: #100E0C; text-decoration: none; padding: 10px 14px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap">Book ↗</a>
    </div>
    <div data-peek="assets/gallery-photo-10.jpeg" style="display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px 24px; border-bottom: 1px solid rgba(16,14,12,.3); padding: clamp(14px, 2vw, 26px) 0; cursor: pointer">
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">Private group — 90 min — up to 8</div>
        <h3 style="margin: 4px 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(38px, 7.4vw, 132px); line-height: .9; letter-spacing: -.03em">The Whole Studio</h3>
      </div>
      <a href="#book" class="hv-book" style="display: inline-block; background: #F0C43C; color: #100E0C; text-decoration: none; padding: 10px 14px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap">Enquire ↗</a>
    </div>
  </section>

  <section style="position: relative; height: clamp(320px, 76svh, 860px); overflow: hidden; background: #100E0C">
    <img src="assets/gallery-photo-07.jpeg" alt="An instructor steadying a metal pitcher as a guest pours wax" style="position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 50% 34%" />
    <div style="position: absolute; inset: auto 0 0 0; display: flex; justify-content: space-between; gap: 20px; padding: clamp(12px, 2vw, 24px) clamp(14px, 2.4vw, 30px); font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: #F4F1EA; text-shadow: 0 1px 12px rgba(16,14,12,.6)">
      <span>We hold the pitcher</span>
      <span>Kirkland studio, 2026</span>
    </div>
  </section>

  <section id="archive" style="background: #100E0C; color: #F4F1EA; padding: clamp(30px, 5vw, 80px) 0 clamp(24px, 4vw, 52px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.34); margin: 0 clamp(14px, 2.4vw, 30px); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>03 — Archive</span>
      <span data-reel-status="">Drag sideways →</span>
    </div>
    <h2 style="margin: clamp(14px, 2.2vw, 28px) clamp(14px, 2.4vw, 30px) clamp(18px, 3vw, 34px); font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(38px, 7.6vw, 140px); line-height: .9; letter-spacing: -.03em">Scenes from the table</h2>
    <div data-reel="" style="display: flex; gap: 10px; overflow-x: auto; overflow-y: hidden; padding: 0 clamp(14px, 2.4vw, 30px) 12px; cursor: grab; scrollbar-width: none">
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/pouring-wax_t.jpg" alt="A boy tipping a steel pitcher of warm wax into his mold" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">01 The pour</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/kids-at-the-table_t.jpg" alt="Six children working around the studio table" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">02 A full table</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/guided-pour_t.jpg" alt="Neda steadying a guest’s hand through the pour" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">03 A steady hand</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/painting-detail_t.jpg" alt="A girl in a black apron painting her candle" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">04 Painting</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/hands-and-oils_t.jpg" alt="Hands shaping wax beside a row of fragrance oils" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">05 Choosing a scent</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/brushwork_t.jpg" alt="Close detail painting with a fine brush" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">06 Detail work</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/finishing-touches_t.jpg" alt="A boy adding colour to his finished candle" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">07 Finishing</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/table-set_t.jpg" alt="The table set with aprons, tealights and white hydrangeas" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">08 Set for a party</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/fragrance-tray_t.jpg" alt="A tray of fragrance oils and pigment bottles" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">09 Scent library</figcaption></figure>
      <figure style="margin: 0; flex: 0 0 auto"><img src="assets/gallery/the-room_t.jpg" alt="The Candle Art studio seen from the door" style="display: block; height: clamp(230px, 56svh, 560px); width: auto" /><figcaption style="margin-top: 7px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">10 The room</figcaption></figure>
    </div>
  </section>

  <section id="materials" style="background: #123F3A; color: #F4F1EA; padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.4); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>04 — Materials</span>
      <span>Three waxes, forty scents</span>
    </div>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: clamp(20px, 3vw, 46px); margin-top: clamp(20px, 3.4vw, 46px)">
      <article data-reveal="">
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.7)">01 Paraffin — traditional</div>
        <h3 style="margin: 4px 0 10px; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(28px, 3.4vw, 56px); line-height: .95; letter-spacing: -.02em">Coloring paraffin</h3>
        <img src="assets/gallery-photo-11.jpeg" alt="Bright paraffin bear candles with a paint palette" style="display: block; width: 100%; height: clamp(200px, 24vw, 330px); object-fit: cover" />
        <p style="margin: 10px 0 0; font-size: 14px; line-height: 1.55">Soft, low-temperature wax kids mold like playdough and then paint. This is the one that becomes bears, puppies and dolphins.</p>
      </article>
      <article data-reveal="">
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.7)">02 Soy &amp; beeswax — organic</div>
        <h3 style="margin: 4px 0 10px; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(28px, 3.4vw, 56px); line-height: .95; letter-spacing: -.02em">Soy &amp; beeswax</h3>
        <img src="assets/gallery-photo-16.jpeg" alt="A poured white candle beside fragrance oils, mica pigment and a fresh wick" style="display: block; width: 100%; height: clamp(200px, 24vw, 330px); object-fit: cover" />
        <p style="margin: 10px 0 0; font-size: 14px; line-height: 1.55">Clean-burning, faintly honeyed, poured into glass. The grown-up choice — a candle you will actually keep on the table.</p>
      </article>
      <article data-reveal="">
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.7)">03 Gel — translucent</div>
        <h3 style="margin: 4px 0 10px; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(28px, 3.4vw, 56px); line-height: .95; letter-spacing: -.02em">Gel wax</h3>
        <img src="assets/gallery-photo-12.jpeg" alt="Jars of shells, coral and sand used as gel wax embeds" style="display: block; width: 100%; height: clamp(200px, 24vw, 330px); object-fit: cover" />
        <p style="margin: 10px 0 0; font-size: 14px; line-height: 1.55">Clear as water, so everything you drop in stays visible: shells, dried flowers, sand, beads. Build a small world in a jar.</p>
      </article>
    </div>
    <div style="display: flex; flex-wrap: wrap; gap: 6px; margin-top: clamp(18px, 3vw, 40px); font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Lavender</span>
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Sandalwood</span>
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Vanilla</span>
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Citrus</span>
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Coffee</span>
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Ylang ylang</span>
      <span style="border: 1px solid rgba(244,241,234,.45); padding: 7px 12px">Chamomile</span>
      <span style="padding: 7px 4px; color: rgba(244,241,234,.7)">+ 30 more on the shelf</span>
    </div>
  </section>

  <section id="technique" style="padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid #100E0C; padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>05 — Technique</span>
      <span>Shells · Botanicals · Sand</span>
    </div>
    <h2 data-reveal="" style="margin: clamp(16px, 2.6vw, 34px) 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(40px, 8.4vw, 164px); line-height: .88; letter-spacing: -.03em; max-width: 18ch">How to build a candle you can see into.</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: clamp(20px, 3.4vw, 56px); margin-top: clamp(22px, 3.6vw, 52px); align-items: start">
      <div>
        <div data-peek="assets/gallery-photo-12.jpeg" style="display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.6vw, 20px) 0; cursor: pointer">
          <span style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">01</span>
          <span>
            <span style="display: block; font-family: 'Instrument Serif', serif; font-size: clamp(24px, 2.6vw, 40px); line-height: 1.02; letter-spacing: -.02em">Pick the glass first</span>
            <span style="display: block; margin-top: 6px; font-size: 13.5px; line-height: 1.55">Straight-sided glass shows layers best; a wide bowl shows the floor of the candle. Gel wax stays clear, so whatever goes in is on display forever.</span>
          </span>
        </div>
        <div data-peek="assets/gallery-photo-13.jpeg" style="display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.6vw, 20px) 0; cursor: pointer">
          <span style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">02</span>
          <span>
            <span style="display: block; font-family: 'Instrument Serif', serif; font-size: clamp(24px, 2.6vw, 40px); line-height: 1.02; letter-spacing: -.02em">Lay a floor of sand</span>
            <span style="display: block; margin-top: 6px; font-size: 13.5px; line-height: 1.55">A half-inch of colored sand or crushed shell hides the wick tab and gives everything above it something to stand on. Tilt the jar and tap, do not pour flat.</span>
          </span>
        </div>
        <div data-peek="assets/gallery-photo-14.jpeg" style="display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.6vw, 20px) 0; cursor: pointer">
          <span style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">03</span>
          <span>
            <span style="display: block; font-family: 'Instrument Serif', serif; font-size: clamp(24px, 2.6vw, 40px); line-height: 1.02; letter-spacing: -.02em">Place, then pour, then place again</span>
            <span style="display: block; margin-top: 6px; font-size: 13.5px; line-height: 1.55">Set the big pieces with tweezers, pour warm gel to half depth, let it firm, then add the delicate things — pressed flowers, coral, sea glass — so they float mid-jar instead of sinking.</span>
          </span>
        </div>
        <div data-peek="assets/gallery-photo-15.jpeg" style="display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 16px; border-top: 1px solid rgba(16,14,12,.35); border-bottom: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.6vw, 20px) 0; cursor: pointer">
          <span style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">04</span>
          <span>
            <span style="display: block; font-family: 'Instrument Serif', serif; font-size: clamp(24px, 2.6vw, 40px); line-height: 1.02; letter-spacing: -.02em">Keep the wick clear</span>
            <span style="display: block; margin-top: 6px; font-size: 13.5px; line-height: 1.55">Nothing within a finger’s width of the flame. Everything else is fair game. Top pour, then two to three hours to set before the wick gets trimmed.</span>
          </span>
        </div>
      </div>
      <div>
        <img data-reveal="" src="assets/gallery-photo-12.jpeg" alt="Glass jars of shells, coral, moss and dried botanicals on turquoise shelves" style="display: block; width: 100%; height: clamp(260px, 40svh, 470px); object-fit: cover" />
        <div style="display: flex; justify-content: space-between; gap: 20px; margin-top: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(16,14,12,.6)">
          <span>The embed shelf</span>
          <span>Help yourself</span>
        </div>
        <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 0 clamp(16px, 2vw, 32px); margin-top: clamp(16px, 2.4vw, 28px)">
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Sea shells</span><span style="color: rgba(16,14,12,.5)">01</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Pink coral</span><span style="color: rgba(16,14,12,.5)">02</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Moss balls</span><span style="color: rgba(16,14,12,.5)">03</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Dried roses</span><span style="color: rgba(16,14,12,.5)">04</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Cinnamon</span><span style="color: rgba(16,14,12,.5)">05</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Colored sand</span><span style="color: rgba(16,14,12,.5)">06</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Mica shimmer</span><span style="color: rgba(16,14,12,.5)">07</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Gold leaf</span><span style="color: rgba(16,14,12,.5)">08</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Sea glass</span><span style="color: rgba(16,14,12,.5)">09</span></div>
          <div style="display: flex; justify-content: space-between; border-top: 1px solid rgba(16,14,12,.35); padding: 7px 0; font-size: 12.5px"><span>Pressed ferns</span><span style="color: rgba(16,14,12,.5)">10</span></div>
        </div>
      </div>
    </div>
  </section>

  <section id="families" style="background: #F0C43C; color: #100E0C; padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(16,14,12,.45); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>06 — Families, kids, parties</span>
      <span>Eight seats, no experience</span>
    </div>
    <h2 data-reveal="" style="margin: clamp(16px, 2.6vw, 34px) 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(40px, 8.4vw, 164px); line-height: .88; letter-spacing: -.03em; max-width: 17ch">Built for small hands and short attention spans.</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: clamp(18px, 3vw, 44px); margin-top: clamp(22px, 4vw, 54px); align-items: start">
      <div data-reveal="">
        <img src="assets/gallery-photo-05.jpeg" alt="A girl in an apron painting a small bear candle" style="display: block; width: 100%; height: clamp(240px, 30vw, 420px); object-fit: cover" />
      </div>
      <div data-reveal="">
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.45); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>Staff at the table the whole time; hot wax stays with us.</span><span style="font-size: 11px; letter-spacing: .04em">01</span></div>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.45); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>Non-toxic materials, low-temperature waxes throughout.</span><span style="font-size: 11px; letter-spacing: .04em">02</span></div>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.45); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>Aprons, wipes, and a forgiving attitude toward spills.</span><span style="font-size: 11px; letter-spacing: .04em">03</span></div>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.45); border-bottom: 1px solid rgba(16,14,12,.45); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>School and kindergarten groups welcome on weekday mornings.</span><span style="font-size: 11px; letter-spacing: .04em">04</span></div>
        <a href="#book" class="hv-groups" style="display: inline-block; margin-top: 16px; background: #100E0C; color: #F0C43C; padding: 14px 24px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase">Enquire for groups ↗</a>
      </div>
      <div data-reveal="">
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase">Birthdays · Baby showers · Offsites</div>
        <p style="margin: 8px 0 0; font-family: 'Instrument Serif', serif; font-size: clamp(22px, 2.4vw, 36px); line-height: 1.12; letter-spacing: -.015em">Weekends belong to one group at a time. Cake welcome. Everything you make goes home with you once it has set.</p>
        <img src="assets/gallery-photo-02.jpeg" alt="A long table of children in aprons painting candles in the Candle Art studio" style="display: block; width: 100%; height: clamp(160px, 18vw, 250px); object-fit: cover; margin-top: 16px" />
      </div>
    </div>
  </section>

  <section id="about" style="padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid #100E0C; padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>07 — About</span>
      <span>Neda · Founder</span>
    </div>
    <h2 data-reveal="" style="margin: clamp(16px, 2.6vw, 34px) 0 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(40px, 8.4vw, 164px); line-height: .88; letter-spacing: -.03em; max-width: 18ch">Hi, I’m Neda, the founder of Candle Art.</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: clamp(18px, 3vw, 46px); margin-top: clamp(22px, 4vw, 54px); align-items: start">
      <div data-reveal="">
        <img src="assets/gallery-photo-07.jpeg" alt="Neda steadying a pitcher of warm wax as a guest pours her candle" style="display: block; width: 100%; height: clamp(260px, 34vw, 460px); object-fit: cover" />
      </div>
      <div data-reveal="">
        <p style="margin: 0; font-size: 14px; line-height: 1.6">I started this space so people of all ages can relax, get creative, and make something special to take home. Our workshops are beginner-friendly and welcoming for families, friends, birthday parties, or anyone looking for a fun experience.</p>
        <p style="margin: 14px 0 0; font-size: 14px; line-height: 1.6">Every candle is made with care, and every class is a chance to create and connect. My goal is to make every guest feel welcome and inspired.</p>
      </div>
      <div data-reveal="">
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.35); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>All ages, no experience needed.</span><span style="font-size: 11px; letter-spacing: .04em">01</span></div>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.35); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>Families, friends, birthdays and first-timers.</span><span style="font-size: 11px; letter-spacing: .04em">02</span></div>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(16,14,12,.35); border-bottom: 1px solid rgba(16,14,12,.35); padding: 10px 0; font-size: 13px; line-height: 1.5"><span>Every candle made with care, in the room, by you.</span><span style="font-size: 11px; letter-spacing: .04em">03</span></div>
        <a href="#book" class="hv-invert" style="display: inline-block; margin-top: 16px; background: #E0491B; color: #F4F1EA; padding: 14px 24px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase">Book a workshop ↗</a>
      </div>
    </div>
  </section>

  <section id="gallery" style="background: #100E0C; color: #F4F1EA; padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.34); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>08 — Gallery</span>
      <span>Made in the studio · Tap to enlarge</span>
    </div>
    <h2 data-reveal="" style="margin: clamp(16px, 2.6vw, 34px) 0 clamp(22px, 3.4vw, 46px); font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(40px, 8.4vw, 164px); line-height: .88; letter-spacing: -.03em; max-width: 16ch">Things that left here in a box.</h2>
    <div id="galleryGrid" style="display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(150px, 20vw, 250px), 1fr)); gap: clamp(6px, .8vw, 12px)">
      <button type="button" class="ga-cell" data-full="assets/gallery/cat-candle.jpg" data-cap="Red cat" style="aspect-ratio: 3/4"><img src="assets/gallery/cat-candle_t.jpg" alt="A deep red cat candle on a display shelf" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/bear-and-cub.jpg" data-cap="Bear and cub" style="aspect-ratio: 3/4"><img src="assets/gallery/bear-and-cub_t.jpg" alt="An amber bear candle holding a smaller cub" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/four-bears.jpg" data-cap="A row of bears" style="aspect-ratio: 3/2; grid-column: span 2"><img src="assets/gallery/four-bears_t.jpg" alt="Four teddy bear candles lined up on a shelf" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/purple-peony.jpg" data-cap="Violet peony" style="aspect-ratio: 3/4"><img src="assets/gallery/purple-peony_t.jpg" alt="A violet peony candle with fresh roses" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/poodle-candle.jpg" data-cap="Grey poodle" style="aspect-ratio: 3/4"><img src="assets/gallery/poodle-candle_t.jpg" alt="A grey poodle candle standing on a shelf" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/pressed-flower-tealights.jpg" data-cap="Pressed flowers" style="aspect-ratio: 3/2; grid-column: span 2"><img src="assets/gallery/pressed-flower-tealights_t.jpg" alt="Three tealights set with pressed flowers" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/peony-basket.jpg" data-cap="Peony basket" style="aspect-ratio: 3/4"><img src="assets/gallery/peony-basket_t.jpg" alt="A wicker basket filled with pink peony candles" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/wax-roses-tray.jpg" data-cap="Wax roses" style="aspect-ratio: 3/4"><img src="assets/gallery/wax-roses-tray_t.jpg" alt="A gold tray of cream and pink wax roses" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/braided-bust.jpg" data-cap="The braid" style="aspect-ratio: 3/4"><img src="assets/gallery/braided-bust_t.jpg" alt="A sculpted bust candle with a long braid" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/bunny-and-honeypot.jpg" data-cap="Bunny and honey pot" style="aspect-ratio: 3/2; grid-column: span 2"><img src="assets/gallery/bunny-and-honeypot_t.jpg" alt="An Easter bunny candle beside a bear honey pot" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/blue-rose-glass.jpg" data-cap="Blue rose in glass" style="aspect-ratio: 3/4"><img src="assets/gallery/blue-rose-glass_t.jpg" alt="A blue rose candle set in a clear glass jar" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/ocean-jar.jpg" data-cap="Underwater" style="aspect-ratio: 3/4"><img src="assets/gallery/ocean-jar_t.jpg" alt="A gel candle built as an underwater scene" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/ocean-bowls.jpg" data-cap="Two little seas" style="aspect-ratio: 3/4"><img src="assets/gallery/ocean-bowls_t.jpg" alt="Two round gel candles holding tiny boats and starfish" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/parfait-candles.jpg" data-cap="Parfait glasses" style="aspect-ratio: 3/4"><img src="assets/gallery/parfait-candles_t.jpg" alt="Dessert candles poured into stemmed glasses" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/tartlet-candles.jpg" data-cap="Fruit tartlets" style="aspect-ratio: 3/4"><img src="assets/gallery/tartlet-candles_t.jpg" alt="Fruit tartlet candles on a pale cloth" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/shell-terrarium.jpg" data-cap="Conch and shells" style="aspect-ratio: 3/4"><img src="assets/gallery/shell-terrarium_t.jpg" alt="A glass jar of shells under a large conch" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/etched-crystal.jpg" data-cap="Etched keepsake" style="aspect-ratio: 3/4"><img src="assets/gallery/etched-crystal_t.jpg" alt="A laser-etched crystal block of a parent and child" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/product-wall.jpg" data-cap="The wall" style="aspect-ratio: 3/4"><img src="assets/gallery/product-wall_t.jpg" alt="The slatted wall stacked with finished candles" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/window-display.jpg" data-cap="In the window" style="aspect-ratio: 3/4"><img src="assets/gallery/window-display_t.jpg" alt="Pillar candles on wooden risers in the window" loading="lazy" /></button>
      <button type="button" class="ga-cell" data-full="assets/gallery/display-ladder.jpg" data-cap="Display ladder" style="aspect-ratio: 3/4"><img src="assets/gallery/display-ladder_t.jpg" alt="A wooden A-frame ladder of cupcake and animal candles" loading="lazy" /></button>
    </div>
  </section>

  <section id="reviews" style="background: #E0491B; color: #F4F1EA; padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.4); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>09 — Guest book</span>
      <span>4.9 average · 180+ sessions</span>
    </div>
    <blockquote data-reveal="" style="margin: clamp(18px, 3vw, 40px) 0 0; font-family: 'Instrument Serif', serif; font-size: clamp(34px, 6.8vw, 132px); line-height: .94; letter-spacing: -.03em; max-width: 22ch">“My daughter has never sat still for ninety minutes in her life. She did here.”</blockquote>
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.4); margin-top: clamp(14px, 2vw, 24px); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>Nadia R. — Kirkland</span>
      <span>Coloring paraffin, June</span>
    </div>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: clamp(18px, 3vw, 46px); margin-top: clamp(20px, 3vw, 42px)">
      <div data-reveal="">
        <p style="margin: 0; font-family: 'Instrument Serif', serif; font-size: clamp(20px, 2.1vw, 32px); line-height: 1.12; letter-spacing: -.015em">“Booked it as a baby shower thing and ended up the last one to leave. The scent shelf is a trap in the best way.”</p>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(244,241,234,.4); margin-top: 12px; padding-top: 8px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase"><span>Priya S.</span><span>Private group</span></div>
      </div>
      <div data-reveal="">
        <p style="margin: 0; font-family: 'Instrument Serif', serif; font-size: clamp(20px, 2.1vw, 32px); line-height: 1.12; letter-spacing: -.015em">“Brought my kindergarten class of fourteen. Calm, patient, genuinely safe — and every kid left holding a bear.”</p>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(244,241,234,.4); margin-top: 12px; padding-top: 8px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase"><span>Mr. Hallberg</span><span>School group</span></div>
      </div>
      <div data-reveal="">
        <p style="margin: 0; font-family: 'Instrument Serif', serif; font-size: clamp(20px, 2.1vw, 32px); line-height: 1.12; letter-spacing: -.015em">“I made a gel candle with shells from our honeymoon beach. It sits on the shelf and I refuse to burn it.”</p>
        <div style="display: flex; justify-content: space-between; gap: 14px; border-top: 1px solid rgba(244,241,234,.4); margin-top: 12px; padding-top: 8px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase"><span>Dana &amp; Tom</span><span>Gel wax</span></div>
      </div>
    </div>
  </section>

  <section id="faq" style="padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid #100E0C; padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>10 — Questions</span>
      <span>Tap a line to open</span>
    </div>
    <div style="border-bottom: 1px solid rgba(16,14,12,.35)">
      <div class="hv-accent" data-faq="0" role="button" tabindex="0" aria-expanded="false" aria-controls="faqS0" style="display: grid; grid-template-columns: minmax(0, 1fr) 30px; align-items: center; gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.8vw, 22px) 0; cursor: pointer">
        <h3 style="margin: 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(24px, 3.4vw, 54px); line-height: 1; letter-spacing: -.025em">Do we need to book ahead?</h3>
        <span id="faqI0">+</span>
      </div>
      <div id="faqS0"><p style="margin: 0 0 clamp(14px, 2vw, 22px); max-width: 62ch; font-size: 14px; line-height: 1.6">Weekday sessions can usually take walk-ins, but the table only seats eight — a request the day before guarantees you a seat and lets us set the right materials out. Weekends are private groups only.</p></div>
      <div class="hv-accent" data-faq="1" role="button" tabindex="0" aria-expanded="false" aria-controls="faqS1" style="display: grid; grid-template-columns: minmax(0, 1fr) 30px; align-items: center; gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.8vw, 22px) 0; cursor: pointer">
        <h3 style="margin: 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(24px, 3.4vw, 54px); line-height: 1; letter-spacing: -.025em">How young is too young?</h3>
        <span id="faqI1">+</span>
      </div>
      <div id="faqS1"><p style="margin: 0 0 clamp(14px, 2vw, 22px); max-width: 62ch; font-size: 14px; line-height: 1.6">Four and up for coloring paraffin — it is soft, low-temperature and molds like playdough. Eight and up for gel wax, which is poured warm. Younger siblings can sit and paint wooden discs while the group works.</p></div>
      <div class="hv-accent" data-faq="2" role="button" tabindex="0" aria-expanded="false" aria-controls="faqS2" style="display: grid; grid-template-columns: minmax(0, 1fr) 30px; align-items: center; gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.8vw, 22px) 0; cursor: pointer">
        <h3 style="margin: 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(24px, 3.4vw, 54px); line-height: 1; letter-spacing: -.025em">Can I take it home the same day?</h3>
        <span id="faqI2">+</span>
      </div>
      <div id="faqS2"><p style="margin: 0 0 clamp(14px, 2vw, 22px); max-width: 62ch; font-size: 14px; line-height: 1.6">Usually yes — the same day, but not the same hour. Most candles need two to three hours to set, depending on size, so plan on collecting yours later in the day. The really big molds sometimes need until the following day. We will tell you which one you are making before you pour, so nobody is surprised.</p></div>
      <div class="hv-accent" data-faq="3" role="button" tabindex="0" aria-expanded="false" aria-controls="faqS3" style="display: grid; grid-template-columns: minmax(0, 1fr) 30px; align-items: center; gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.8vw, 22px) 0; cursor: pointer">
        <h3 style="margin: 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(24px, 3.4vw, 54px); line-height: 1; letter-spacing: -.025em">Can I bring my own shells or flowers?</h3>
        <span id="faqI3">+</span>
      </div>
      <div id="faqS3"><p style="margin: 0 0 clamp(14px, 2vw, 22px); max-width: 62ch; font-size: 14px; line-height: 1.6">Please do — holiday shells, a pressed flower from a bouquet, a small charm. Anything non-flammable, dry, and smaller than a thumb works in gel wax. We will tell you honestly if something will not survive the pour.</p></div>
      <div class="hv-accent" data-faq="4" role="button" tabindex="0" aria-expanded="false" aria-controls="faqS4" style="display: grid; grid-template-columns: minmax(0, 1fr) 30px; align-items: center; gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.8vw, 22px) 0; cursor: pointer">
        <h3 style="margin: 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(24px, 3.4vw, 54px); line-height: 1; letter-spacing: -.025em">What does a private group cost?</h3>
        <span id="faqI4">+</span>
      </div>
      <div id="faqS4"><p style="margin: 0 0 clamp(14px, 2vw, 22px); max-width: 62ch; font-size: 14px; line-height: 1.6">It depends on group size, session length and how much wax you get through, so we quote per booking. Send the date, headcount and rough ages and we will come back with a number the same day.</p></div>
      <div class="hv-accent" data-faq="5" role="button" tabindex="0" aria-expanded="false" aria-controls="faqS5" style="display: grid; grid-template-columns: minmax(0, 1fr) 30px; align-items: center; gap: 16px; border-top: 1px solid rgba(16,14,12,.35); padding: clamp(12px, 1.8vw, 22px) 0; cursor: pointer">
        <h3 style="margin: 0; font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(24px, 3.4vw, 54px); line-height: 1; letter-spacing: -.025em">Is it messy? Should we dress down?</h3>
        <span id="faqI5">+</span>
      </div>
      <div id="faqS5"><p style="margin: 0 0 clamp(14px, 2vw, 22px); max-width: 62ch; font-size: 14px; line-height: 1.6">Aprons for everyone, wipes on the table, and wax lifts off skin in one piece. Dress however you like — the only real casualty is the occasional sleeve dipped in mica.</p></div>
    </div>
  </section>

  <section id="book" style="background: #100E0C; color: #F4F1EA; padding: clamp(30px, 5vw, 84px) clamp(14px, 2.4vw, 30px)">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid rgba(244,241,234,.34); padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>11 — Reservations</span>
      <span>Placeholder calendar</span>
    </div>
    <h2 style="margin: clamp(14px, 2.4vw, 30px) 0 clamp(22px, 3.4vw, 46px); font-family: 'Instrument Serif', serif; font-weight: 400; font-size: clamp(40px, 8.4vw, 164px); line-height: .88; letter-spacing: -.03em">Book a session</h2>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: clamp(20px, 3.4vw, 56px); align-items: start">
      <div>
        <div style="display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(244,241,234,.34); padding-bottom: 10px">
          <div id="monthLabel" style="font-family: 'Instrument Serif', serif; font-size: clamp(22px, 2.4vw, 34px); letter-spacing: -.02em"></div>
          <div style="display: flex; gap: 6px">
            <button id="prevMonth" class="hv-cal" type="button" aria-label="Previous month" style="background: none; border: 1px solid rgba(244,241,234,.4); color: #F4F1EA; font: 400 12px/1 'Helvetica Neue', Helvetica, Arial, sans-serif; width: 36px; height: 32px; cursor: pointer">←</button>
            <button id="nextMonth" class="hv-cal" type="button" aria-label="Next month" style="background: none; border: 1px solid rgba(244,241,234,.4); color: #F4F1EA; font: 400 12px/1 'Helvetica Neue', Helvetica, Arial, sans-serif; width: 36px; height: 32px; cursor: pointer">→</button>
          </div>
        </div>
        <div style="display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin: 12px 0 6px; font-size: 10px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.6)">
          <span style="text-align: center">Su</span>
          <span style="text-align: center">Mo</span>
          <span style="text-align: center">Tu</span>
          <span style="text-align: center">We</span>
          <span style="text-align: center">Th</span>
          <span style="text-align: center">Fr</span>
          <span style="text-align: center">Sa</span>
        </div>
        <div id="calDays" style="display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px"></div>
        <p style="margin: 14px 0 0; font-size: 12px; line-height: 1.55; color: rgba(244,241,234,.65)">Weekdays 11 am–4 pm. Underlined weekend dates are private-group only — request one and we reply with options. Need a time that is not on this list? Contact us and we will arrange one. Live availability arrives with the real booking system.</p>
      </div>

      <div style="border: 1px solid rgba(244,241,234,.34); padding: clamp(16px, 2.2vw, 28px)">
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65)">Your session</div>
        <div id="selectionLabel" style="font-family: 'Instrument Serif', serif; font-size: clamp(26px, 3vw, 46px); line-height: 1.02; letter-spacing: -.02em; margin: 6px 0 20px">Pick a date</div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65); margin-bottom: 8px">Workshop</div>
        <div id="workshopChips" style="display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 20px"></div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65); margin-bottom: 8px">Time</div>
        <div id="timeChips" style="display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 20px"></div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(244,241,234,.65); margin-bottom: 8px">Your details</div>
        <label for="bkName" class="sr-only">Full name</label>
        <input id="bkName" class="bk-field" type="text" name="name" autocomplete="name" required placeholder="Full name" />
        <label for="bkEmail" class="sr-only">Email address</label>
        <input id="bkEmail" class="bk-field" type="email" name="email" autocomplete="email" required placeholder="Email address" />
        <label for="bkPhone" class="sr-only">Phone (optional)</label>
        <input id="bkPhone" class="bk-field" type="tel" name="phone" autocomplete="tel" placeholder="Phone (optional)" />
        <button id="submitBtn" type="button">Request this session</button>
        <p id="statusNote" style="margin: 12px 0 0; font-size: 12px; line-height: 1.55; color: rgba(244,241,234,.65)">No payment now. Requests are confirmed by email.</p>
      </div>
    </div>
  </section>

  <section id="visit" style="padding: clamp(30px, 5vw, 80px) clamp(14px, 2.4vw, 30px) 0">
    <div style="display: flex; justify-content: space-between; gap: 20px; border-bottom: 1px solid #100E0C; padding-bottom: 10px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase">
      <span>12 — Visit</span>
      <span>Kirkland, Washington</span>
    </div>
    <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: clamp(16px, 2.6vw, 40px); margin-top: clamp(18px, 3vw, 40px)">
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(16,14,12,.6)">Address</div>
        <p style="margin: 6px 0 0; font-family: 'Instrument Serif', serif; font-size: clamp(22px, 2.2vw, 34px); line-height: 1.08; letter-spacing: -.02em">9827 NE 120th Pl, Unit B<br />Kirkland, WA 98034</p>
      </div>
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(16,14,12,.6)">Contact</div>
        <p style="margin: 6px 0 0; font-family: 'Instrument Serif', serif; font-size: clamp(22px, 2.2vw, 34px); line-height: 1.08; letter-spacing: -.02em"><a href="/cdn-cgi/l/email-protection#bfdcded1dbd3dadecdcbc8deffd8d2ded6d391dcd0d2"><span class="__cf_email__" data-cfemail="c7a4a6a9a3aba2a6b5b3b0a687a0aaa6aeabe9a4a8aa">[email&#160;protected]</span></a><br /><a href="https://instagram.com/candle.art_craft">@candle.art_craft</a></p>
      </div>
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(16,14,12,.6)">Hours</div>
        <p style="margin: 6px 0 0; font-family: 'Instrument Serif', serif; font-size: clamp(22px, 2.2vw, 34px); line-height: 1.08; letter-spacing: -.02em">Mon–Fri 11 am–4 pm<br />Sat–Sun by appointment</p>
        <p style="margin: 10px 0 0; font-size: 13px; line-height: 1.55">Need a specific time outside these hours? Contact us and we will do our best to arrange it.</p>
      </div>
      <div>
        <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(16,14,12,.6)">Before you come</div>
        <p style="margin: 6px 0 0; font-size: 13px; line-height: 1.55">All materials provided. Arrive ten minutes early to smell your way through the scent library — it takes longer than people expect.</p>
      </div>
    </div>
    <img src="assets/gallery-photo-14.jpeg" alt="Shelves of jars, botanicals and pigments along the studio wall" style="display: block; width: 100%; height: clamp(240px, 46svh, 560px); object-fit: cover; object-position: 50% 40%; margin-top: clamp(20px, 3vw, 44px)" />
  </section>

  <div id="lightbox" hidden role="dialog" aria-modal="true" aria-label="Gallery photo">
    <div id="lbStage">
      <img id="lbImg" src="" alt="" />
    </div>
    <button id="lbPrev" class="lb-btn" type="button" aria-label="Previous photo">←</button>
    <button id="lbNext" class="lb-btn" type="button" aria-label="Next photo">→</button>
    <button id="lbClose" type="button" aria-label="Close gallery">Close</button>
    <div id="lbCap"><span id="lbCapText"></span><span id="lbCount"></span></div>
  </div>

  <footer style="background: #F4F1EA; color: #100E0C; padding: clamp(20px, 3vw, 40px) clamp(14px, 2.4vw, 30px) 18px; overflow: hidden">
    <div style="display: flex; align-items: end; justify-content: flex-end; gap: 20px; flex-wrap: wrap">
      <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; text-align: right; line-height: 1.7">
        <div>© 2026 Candle Art Workshop</div>
        <div>Terms · Privacy · <a href="/cdn-cgi/l/email-protection#e98a88878d858c889b9d9e88a98e84888085c78a8684"><span class="__cf_email__" data-cfemail="284b49464c444d495a5c5f49684f45494144064b4745">[email&#160;protected]</span></a></div>
      </div>
    </div>
    <div data-wordmark="" style="font-family: 'Instrument Serif', serif; font-size: clamp(60px, 19vw, 360px); line-height: .78; letter-spacing: -.045em; white-space: nowrap; margin-top: 6px">Candle Art</div>
    <div style="font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: rgba(16,14,12,.6); margin-top: 8px">Kirkland, Washington</div>
  </footer>

  <img data-peek-img="" src="" alt="" aria-hidden="true" />
</div>

<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
(function () {
  'use strict';

  var SLOTS_PER_DAY = 4;

  // Display label and the 24h value the booking payload sends. The label is what
  // the visitor reads; hhmm is what gets combined with the picked date to build a
  // start_time. Keep the two in step — never derive one by parsing the other.
  var SLOTS = [
    { label: '11 am', hhmm: '11:00' },
    { label: '12:30 pm', hhmm: '12:30' },
    { label: '2 pm', hhmm: '14:00' },
    { label: '3 pm', hhmm: '15:00' }
  ];
  function hhmmFor(label) {
    for (var i = 0; i < SLOTS.length; i++) { if (SLOTS[i].label === label) return SLOTS[i].hhmm; }
    return null;
  }
  var reduceMotion = !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);

  var state = { offset: 0, dayISO: null, time: null, workshop: 'Soy pour', sent: false, sending: false, error: null, menu: false, mx: null, my: null, faq: -1 };

  var STUDIO_EMAIL = 'candleartwa@gmail.com';

  function contact() {
    return {
      name: (document.getElementById('bkName').value || '').trim(),
      email: (document.getElementById('bkEmail').value || '').trim(),
      phone: (document.getElementById('bkPhone').value || '').trim()
    };
  }
  function emailLooksValid(v) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v); }

  var $ = function (sel) { return document.querySelector(sel); };
  var $$ = function (sel) { return Array.prototype.slice.call(document.querySelectorAll(sel)); };

  /* ---------- FAQ ---------- */
  function renderFaq() {
    for (var i = 0; i < 6; i++) {
      var open = state.faq === i;
      var panel = document.getElementById('faqS' + i);
      panel.style.overflow = 'hidden';
      panel.style.maxHeight = open ? '260px' : '0px';
      panel.style.opacity = open ? 1 : 0;
      panel.style.transition = 'max-height 420ms cubic-bezier(.2,.7,.2,1), opacity 300ms ease';
      var icon = document.getElementById('faqI' + i);
      icon.style.display = 'inline-block';
      icon.style.fontSize = '20px';
      icon.style.lineHeight = 1;
      icon.style.textAlign = 'right';
      icon.style.transition = 'transform 320ms cubic-bezier(.2,.7,.2,1)';
      icon.style.transform = open ? 'rotate(45deg)' : 'none';
      var head = document.querySelector('[data-faq="' + i + '"]');
      head.setAttribute('aria-expanded', open ? 'true' : 'false');
    }
  }

  /* ---------- menu ---------- */
  function renderMenu() {
    var open = state.menu;
    var btn = document.getElementById('menuBtn');
    var overlay = document.getElementById('menuOverlay');
    btn.textContent = open ? 'Close' : 'Menu';
    btn.setAttribute('aria-expanded', open ? 'true' : 'false');
    assign(btn.style, {
      position: 'fixed', zIndex: 80,
      left: (state.mx == null ? 'auto' : state.mx + 'px'),
      top: (state.my == null ? '50%' : state.my + 'px'),
      right: state.mx == null ? '18px' : 'auto',
      bottom: 'auto',
      transform: 'translate(' + (state.mx == null ? '0' : '-50%') + ', -50%)',
      background: open ? '#F4F1EA' : '#E0491B',
      color: open ? '#100E0C' : '#F4F1EA',
      border: 'none', borderRadius: '999px',
      width: '84px', height: '84px',
      font: "400 12px/1 'Helvetica Neue', Helvetica, Arial, sans-serif",
      letterSpacing: '.06em', textTransform: 'uppercase',
      cursor: 'grab', touchAction: 'none', userSelect: 'none'
    });
    assign(overlay.style, {
      position: 'fixed', inset: 0, zIndex: 70,
      display: 'flex', flexDirection: 'column', justifyContent: 'safe center',
      // The index is set in display type, so on a short viewport it is taller than
      // the screen. Without these two the flex centring pushes the first links above
      // the top edge where nothing can reach them — not merely ugly, unclickable.
      overflowY: 'auto', WebkitOverflowScrolling: 'touch',
      padding: 'clamp(16px, 4vw, 56px)',
      background: '#123F3A', color: '#F4F1EA',
      opacity: open ? 1 : 0,
      pointerEvents: open ? 'auto' : 'none',
      transition: 'opacity 320ms cubic-bezier(.2,.7,.2,1)'
    });
  }

  function assign(target, props) { for (var k in props) { if (Object.prototype.hasOwnProperty.call(props, k)) target[k] = props[k]; } }

  /* ---------- booking ---------- */
  function monthDate() { var t = new Date(); return new Date(t.getFullYear(), t.getMonth() + state.offset, 1); }

  function chip(active, dim) {
    return {
      background: active ? '#E0491B' : 'transparent',
      color: active ? '#F4F1EA' : (dim ? 'rgba(244,241,234,.4)' : '#F4F1EA'),
      border: '1px solid ' + (active ? '#E0491B' : 'rgba(244,241,234,.4)'),
      padding: '9px 13px',
      font: "400 11px/1 'Helvetica Neue', Helvetica, Arial, sans-serif",
      letterSpacing: '.04em',
      textTransform: 'uppercase',
      cursor: dim ? 'default' : 'pointer'
    };
  }

  function renderBooking() {
    var slots = Math.max(2, Math.min(4, SLOTS_PER_DAY));
    var first = monthDate();
    var today = new Date(); today.setHours(0, 0, 0, 0);
    var dim = new Date(first.getFullYear(), first.getMonth() + 1, 0).getDate();

    document.getElementById('monthLabel').textContent = first.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });

    var grid = document.getElementById('calDays');
    grid.textContent = '';
    var i, b;
    for (i = 0; i < first.getDay(); i++) {
      b = document.createElement('button');
      b.type = 'button';
      b.disabled = true;
      b.setAttribute('aria-hidden', 'true');
      assign(b.style, { visibility: 'hidden', border: 'none', background: 'none' });
      grid.appendChild(b);
    }
    for (var d = 1; d <= dim; d++) {
      var date = new Date(first.getFullYear(), first.getMonth(), d);
      var iso = isoOf(date);
      var past = date < today;
      var weekend = date.getDay() === 0 || date.getDay() === 6;
      var active = state.dayISO === iso;
      b = document.createElement('button');
      b.type = 'button';
      b.textContent = String(d);
      b.disabled = past;
      assign(b.style, {
        aspectRatio: '1 / 1', minHeight: '34px',
        background: active ? '#E0491B' : 'transparent',
        color: active ? '#F4F1EA' : (past ? 'rgba(244,241,234,.24)' : '#F4F1EA'),
        border: '1px solid ' + (active ? '#E0491B' : (past ? 'rgba(244,241,234,.1)' : 'rgba(244,241,234,.28)')),
        font: "400 13px/1 'Helvetica Neue', Helvetica, Arial, sans-serif",
        cursor: past ? 'default' : 'pointer',
        textDecoration: weekend && !past ? 'underline' : 'none',
        textUnderlineOffset: '3px'
      });
      if (!past) {
        b.setAttribute('aria-pressed', active ? 'true' : 'false');
        (function (pick) {
          b.addEventListener('click', function () { state.dayISO = pick; state.time = null; state.sent = false; renderBooking(); });
        })(iso);
      }
      grid.appendChild(b);
    }

    var sel = state.dayISO ? new Date(state.dayISO + 'T12:00:00') : null;
    var weekendSel = sel ? (sel.getDay() === 0 || sel.getDay() === 6) : false;

    var timeLabels = weekendSel ? ['By request'] : SLOTS.slice(0, slots).map(function (s) { return s.label; });
    fillChips(document.getElementById('timeChips'), timeLabels, function (label) {
      return { active: state.time === label, dim: !sel, onClick: sel ? function () { state.time = label; state.sent = false; renderBooking(); } : null };
    });

    fillChips(document.getElementById('workshopChips'), ['Soy pour', 'Gel wax', 'Kids coloring', 'Private group'], function (label) {
      return { active: state.workshop === label, dim: false, onClick: function () { state.workshop = label; state.sent = false; renderBooking(); } };
    });

    document.getElementById('selectionLabel').textContent = sel
      ? sel.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric' }) + (state.time ? ', ' + state.time : '')
      : 'Pick a date';

    var c = contact();
    var filled = !!(state.dayISO && state.time && c.name && emailLooksValid(c.email));
    var ready = filled && !state.sending;
    var submit = document.getElementById('submitBtn');
    submit.textContent = state.sending ? 'Sending…' : (state.sent ? 'Request sent' : 'Request this session');
    submit.disabled = !ready;
    assign(submit.style, {
      width: '100%',
      background: state.sent ? 'transparent' : (filled ? '#E0491B' : 'transparent'),
      color: state.sent ? '#E0491B' : (filled ? '#F4F1EA' : 'rgba(244,241,234,.35)'),
      border: '1px solid ' + (filled ? '#E0491B' : 'rgba(244,241,234,.24)'),
      padding: '15px 18px',
      font: "400 12px/1 'Helvetica Neue', Helvetica, Arial, sans-serif",
      letterSpacing: '.04em', textTransform: 'uppercase',
      cursor: ready ? 'pointer' : 'default'
    });

    var note = document.getElementById('statusNote');
    if (state.error) { note.textContent = state.error; }
    else if (state.sending) { note.textContent = 'Sending your request…'; }
    else if (state.sent) { note.textContent = 'Thank you — we confirm ' + state.workshop.toLowerCase() + ' by email within a day.'; }
    else if (weekendSel) { note.textContent = 'Weekend dates are private-group only; send a request and we reply with options.'; }
    else { note.textContent = 'No payment now. Requests are confirmed by email.'; }
  }

  function isoOf(date) {
    var m = date.getMonth() + 1, d = date.getDate();
    return date.getFullYear() + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;
  }

  function fillChips(host, labels, spec) {
    host.textContent = '';
    labels.forEach(function (label) {
      var cfg = spec(label);
      var b = document.createElement('button');
      b.type = 'button';
      b.textContent = label;
      b.setAttribute('aria-pressed', cfg.active ? 'true' : 'false');
      assign(b.style, chip(cfg.active, cfg.dim));
      if (cfg.onClick) b.addEventListener('click', cfg.onClick);
      else b.disabled = true;
      host.appendChild(b);
    });
  }

  /* ---------- reveal (never leaves content hidden) ---------- */
  var io = null, seen = null, failsafe = null, moveRaf = null, onMove = null;

  function show(el) { el.style.opacity = '1'; el.style.transform = 'none'; if (io) io.unobserve(el); }
  function showAll() { $$('[data-reveal]').forEach(show); }
  function sweep() {
    $$('[data-reveal]').forEach(function (el) {
      var r = el.getBoundingClientRect();
      if (r.top < (window.innerHeight || 800) * 0.94 && r.bottom > -40) show(el);
    });
  }
  function scanReveal() {
    if (reduceMotion || typeof IntersectionObserver === 'undefined') { showAll(); return; }
    if (!io) {
      io = new IntersectionObserver(function (es) { es.forEach(function (e) { if (e.isIntersecting) show(e.target); }); }, { rootMargin: '0px 0px -6% 0px', threshold: 0.04 });
      seen = new WeakSet();
      onMove = function () {
        if (moveRaf) return;
        moveRaf = requestAnimationFrame(function () { moveRaf = null; sweep(); });
      };
      document.addEventListener('scroll', onMove, true);
      window.addEventListener('resize', onMove);
      clearTimeout(failsafe);
      failsafe = setTimeout(showAll, 2200);
    }
    $$('[data-reveal]').forEach(function (el, i) {
      if (seen.has(el)) return;
      seen.add(el);
      if (el.getBoundingClientRect().top < (window.innerHeight || 800) * 0.94) { show(el); return; }
      el.style.opacity = '0';
      el.style.transform = 'translateY(14px)';
      el.style.transition = 'opacity 800ms cubic-bezier(.22,.61,.36,1) ' + ((i % 3) * 60) + 'ms, transform 800ms cubic-bezier(.22,.61,.36,1) ' + ((i % 3) * 60) + 'ms';
      io.observe(el);
    });
    sweep();
  }

  /* ---------- identity behaviours: stretched monogram, elastic reel, hover previews ---------- */
  function bind() {
    // Position is sampled every frame from getBoundingClientRect rather than from
    // scroll events, so the transforms stay correct through smooth-scroll and resize.
    var vh = function () { return window.innerHeight || 800; };
    var fxLoop = function () {
      requestAnimationFrame(fxLoop);
      var wm = $('[data-wordmark]');
      if (wm) {
        var r = wm.getBoundingClientRect();
        var t = Math.max(0, Math.min(1, 1 - r.top / vh()));
        wm.style.transformOrigin = '0 100%';
        wm.style.transform = 'scaleX(' + (1 + t * 0.14).toFixed(3) + ')';
      }
    };
    requestAnimationFrame(fxLoop);

    var reel = $('[data-reel]');
    if (reel) {
      var down = false, sx = 0, sl = 0, last = 0, vel = 0;
      reel.addEventListener('pointerdown', function (e) { down = true; sx = e.clientX; sl = reel.scrollLeft; last = e.clientX; reel.style.cursor = 'grabbing'; });
      reel.addEventListener('pointermove', function (e) {
        if (!down) return;
        e.preventDefault();
        reel.scrollLeft = sl - (e.clientX - sx);
        vel = e.clientX - last; last = e.clientX;
        reel.style.transition = 'none';
        Array.prototype.forEach.call(reel.children, function (f) { f.style.transform = 'skewX(' + Math.max(-7, Math.min(7, -vel * 0.35)).toFixed(2) + 'deg)'; });
      });
      var up = function () {
        if (!down) return;
        down = false; reel.style.cursor = 'grab';
        Array.prototype.forEach.call(reel.children, function (f) { f.style.transition = 'transform 620ms cubic-bezier(.16,.9,.2,1)'; f.style.transform = 'none'; });
      };
      reel.addEventListener('pointerup', up);
      reel.addEventListener('pointerleave', up);
      var status = $('[data-reel-status]');
      if (status) reel.addEventListener('scroll', function () {
        var max = reel.scrollWidth - reel.clientWidth;
        status.textContent = max > 0 ? String(Math.round((reel.scrollLeft / max) * 100)).padStart(2, '0') + ' / 100' : 'Drag sideways →';
      });
    }

    /* ---------- programme peek: click a row, photo appears, gone in 3s ----------
       Click-driven and self-cancelling on purpose. The old version followed the
       pointer, and on a touchscreen there is no pointerleave — so it latched on
       and covered the list. This one can only ever be on screen for 3 seconds.
       Tapping the same row again dismisses it early; tapping a different row
       swaps the photo and restarts the clock. */
    var peekImg = $('[data-peek-img]');
    if (peekImg) {
      var PEEK_MS = 3000;
      var peekTimer = null;
      var peekShowing = null;
      assign(peekImg.style, {
        position: 'fixed', zIndex: 45, left: '50%', top: '50%',
        width: 'clamp(200px, 46vw, 380px)', height: 'auto',
        opacity: 0, pointerEvents: 'none',
        transform: 'translate(-50%, -50%) scale(.9) rotate(-6deg)',
        transition: 'opacity 240ms ease, transform 420ms cubic-bezier(.16,.9,.2,1)'
      });

      var hidePeek = function () {
        if (peekTimer) { clearTimeout(peekTimer); peekTimer = null; }
        peekShowing = null;
        peekImg.style.opacity = '0';
        peekImg.style.transform = 'translate(-50%, -50%) scale(.9) rotate(-6deg)';
      };

      $$('[data-peek]').forEach(function (row) {
        row.addEventListener('click', function (e) {
          // the yellow Book chip navigates; it must not also fire the photo
          if (e.target && e.target.closest && e.target.closest('a')) return;
          var src = row.getAttribute('data-peek');

          // second tap on the row already showing = dismiss now
          if (peekShowing === src) { hidePeek(); return; }

          if (peekImg.getAttribute('src') !== src) peekImg.setAttribute('src', src);
          peekShowing = src;
          peekImg.style.opacity = '1';
          peekImg.style.transform = 'translate(-50%, -50%) scale(1) rotate(-2deg)';
          if (peekTimer) clearTimeout(peekTimer);
          peekTimer = setTimeout(hidePeek, PEEK_MS);
        });
      });

    }

    var toggle = $('[data-menu-toggle]');
    if (toggle) {
      var mdown = false, moved = false, ox = 0, oy = 0;
      toggle.addEventListener('pointerdown', function (e) {
        mdown = true; moved = false;
        var r = toggle.getBoundingClientRect();
        ox = e.clientX - r.left - r.width / 2; oy = e.clientY - r.top - r.height / 2;
        toggle.setPointerCapture(e.pointerId);
      });
      toggle.addEventListener('pointermove', function (e) {
        if (!mdown) return;
        if (Math.abs(e.movementX) + Math.abs(e.movementY) > 1) moved = true;
        state.mx = e.clientX - ox; state.my = e.clientY - oy;
        renderMenu();
      });
      toggle.addEventListener('pointerup', function () { mdown = false; if (!moved) { state.menu = !state.menu; renderMenu(); } });
      toggle.addEventListener('keydown', function (e) {
        if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); state.menu = !state.menu; renderMenu(); }
      });
    }
    $$('[data-menu-link]').forEach(function (a) {
      a.addEventListener('click', function () { state.menu = false; renderMenu(); });
    });

    $$('[data-faq]').forEach(function (head) {
      var i = parseInt(head.getAttribute('data-faq'), 10);
      var hit = function () { state.faq = state.faq === i ? -1 : i; renderFaq(); };
      head.addEventListener('click', hit);
      head.addEventListener('keydown', function (e) { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); hit(); } });
    });

    document.getElementById('prevMonth').addEventListener('click', function () { state.offset = Math.max(0, state.offset - 1); renderBooking(); });
    document.getElementById('nextMonth').addEventListener('click', function () { state.offset = Math.min(6, state.offset + 1); renderBooking(); });
    ['bkName', 'bkEmail', 'bkPhone'].forEach(function (id) {
      document.getElementById(id).addEventListener('input', function () {
        if (state.sent || state.error) { state.sent = false; state.error = null; }
        renderBooking();
      });
    });

    document.getElementById('submitBtn').addEventListener('click', function () {
      var c = contact();
      if (state.sending) return;
      if (!(state.dayISO && state.time && c.name && emailLooksValid(c.email))) return;

      state.sending = true; state.error = null; renderBooking();

      fetch('/api/book', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          date: state.dayISO,
          time: hhmmFor(state.time),
          timeLabel: state.time,
          workshop: state.workshop,
          name: c.name,
          email: c.email,
          phone: c.phone,
          timezone: (window.Intl && Intl.DateTimeFormat().resolvedOptions().timeZone) || 'America/Los_Angeles'
        })
      }).then(function (r) {
        return r.text().then(function (t) {
          var body = {};
          try { body = JSON.parse(t); } catch (e) { body = {}; }
          if (!r.ok) { var err = new Error(body.message || 'Booking failed.'); err.code = body.error; throw err; }
          return body;
        });
      }).then(function () {
        state.sending = false; state.sent = true; state.error = null; renderBooking();
      }).catch(function (err) {
        // No fake success. If the booking backend is not reachable the visitor is
        // told plainly and given the address that always works.
        state.sending = false;
        state.sent = false;
        state.error = (err && err.code === 'not_configured')
          ? 'Online booking is being set up. Email ' + STUDIO_EMAIL + ' and we will confirm your session.'
          : 'We could not send that request. Please email ' + STUDIO_EMAIL + ' and we will confirm your session.';
        renderBooking();
      });
    });

    document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && state.menu) { state.menu = false; renderMenu(); } });

    bindGallery();
  }

  /* ---------- gallery lightbox ----------
     The grid cells are real <button>s holding the thumbnail; the full-size file
     is only fetched when one is opened, so twenty photos cost 1.7 MB to browse
     rather than 5.6 MB. */
  function bindGallery() {
    var cells = $$('#galleryGrid .ga-cell');
    if (!cells.length) return;
    var box = document.getElementById('lightbox');
    var img = document.getElementById('lbImg');
    var capText = document.getElementById('lbCapText');
    var count = document.getElementById('lbCount');
    var opener = null;
    var at = 0;

    function show(i) {
      at = (i + cells.length) % cells.length;      // wraps both ways
      var cell = cells[at];
      img.src = cell.getAttribute('data-full');
      img.alt = cell.querySelector('img').alt;
      capText.textContent = cell.getAttribute('data-cap');
      count.textContent = (at + 1) + ' / ' + cells.length;
    }

    function open(i) {
      opener = cells[i];
      box.hidden = false;
      document.body.style.overflow = 'hidden';     // the page must not scroll behind it
      show(i);
      document.getElementById('lbClose').focus();
    }

    function close() {
      box.hidden = true;
      document.body.style.overflow = '';
      img.src = '';
      if (opener) opener.focus();                  // focus goes back where it came from
    }

    cells.forEach(function (cell, i) {
      cell.addEventListener('click', function () { open(i); });
    });
    document.getElementById('lbClose').addEventListener('click', close);
    document.getElementById('lbPrev').addEventListener('click', function () { show(at - 1); });
    document.getElementById('lbNext').addEventListener('click', function () { show(at + 1); });
    box.addEventListener('click', function (e) { if (e.target === box || e.target.id === 'lbStage') close(); });

    document.addEventListener('keydown', function (e) {
      if (box.hidden) return;
      if (e.key === 'Escape') { close(); }
      else if (e.key === 'ArrowLeft') { show(at - 1); }
      else if (e.key === 'ArrowRight') { show(at + 1); }
    });

    // Swipe. Tracked on the stage rather than the whole overlay so a swipe that
    // starts on a control still presses the control.
    var x0 = null;
    var stage = document.getElementById('lbStage');
    stage.addEventListener('touchstart', function (e) { x0 = e.changedTouches[0].clientX; }, { passive: true });
    stage.addEventListener('touchend', function (e) {
      if (x0 == null) return;
      var dx = e.changedTouches[0].clientX - x0;
      if (Math.abs(dx) > 45) show(dx < 0 ? at + 1 : at - 1);
      x0 = null;
    }, { passive: true });
  }

  renderFaq();
  renderMenu();
  renderBooking();
  bind();
  scanReveal();
})();
</script>
<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"0a50979063ea42e1aadf2374a8db4b29","r":1}' crossorigin="anonymous"></script>
</body>
</html>
