/* Bonny Billy — approved cursor set v2 (taupe clay artwork cut from the client cursor sheet, PNG) */
/* Generated from assets/cursors/hotspots.json — do not hand-edit. */
@media (pointer: fine) {
:root {
  --cur-default: url("../img/cursors/default-arrow.png?v=3") 1 0, auto;
  --cur-pointer: url("../img/cursors/hover-link-finger.png?v=3") 6 1, pointer;
  --cur-text: url("../img/cursors/text-select.png?v=3") 10 20, text;
  --cur-crosshair: url("../img/cursors/precision-select.png?v=3") 18 20, crosshair;
  --cur-move: url("../img/cursors/move-drag.png?v=3") 20 19, move;
  --cur-resize-nwse: url("../img/cursors/resize-diagonal.png?v=3") 19 20, nwse-resize;
  --cur-resize-nesw: url("../img/cursors/resize-diagonal.png?v=3") 19 20, nesw-resize;
  --cur-resize-h: url("../img/cursors/resize-horizontal.png?v=3") 20 7, ew-resize;
  --cur-resize-v: url("../img/cursors/resize-vertical.png?v=3") 7 20, ns-resize;
  --cur-loading: url("../img/cursors/loading-ring.png?v=3") 21 21, progress;
  --cur-wait: url("../img/cursors/wait-busy.png?v=3") 12 20, wait;
  --cur-help: url("../img/cursors/help-info.png?v=3") 1 1, help;
  --cur-zoom-in: url("../img/cursors/zoom-in.png?v=3") 14 15, zoom-in;
  --cur-zoom-out: url("../img/cursors/zoom-out.png?v=3") 14 15, zoom-out;
  --cur-grab: url("../img/cursors/grab.png?v=3") 16 18, grab;
  --cur-grabbing: url("../img/cursors/grabbing.png?v=3") 17 18, grabbing;
}
@supports (cursor: image-set(url("x.png") 1x, url("y.png") 2x) 0 0, auto) {
:root {
  --cur-default: image-set(url("../img/cursors/default-arrow.png?v=3") 1x, url("../img/cursors/default-arrow@2x.png?v=3") 2x) 1 0, auto;
  --cur-pointer: image-set(url("../img/cursors/hover-link-finger.png?v=3") 1x, url("../img/cursors/hover-link-finger@2x.png?v=3") 2x) 6 1, pointer;
  --cur-text: image-set(url("../img/cursors/text-select.png?v=3") 1x, url("../img/cursors/text-select@2x.png?v=3") 2x) 10 20, text;
  --cur-crosshair: image-set(url("../img/cursors/precision-select.png?v=3") 1x, url("../img/cursors/precision-select@2x.png?v=3") 2x) 18 20, crosshair;
  --cur-move: image-set(url("../img/cursors/move-drag.png?v=3") 1x, url("../img/cursors/move-drag@2x.png?v=3") 2x) 20 19, move;
  --cur-resize-nwse: image-set(url("../img/cursors/resize-diagonal.png?v=3") 1x, url("../img/cursors/resize-diagonal@2x.png?v=3") 2x) 19 20, nwse-resize;
  --cur-resize-nesw: image-set(url("../img/cursors/resize-diagonal.png?v=3") 1x, url("../img/cursors/resize-diagonal@2x.png?v=3") 2x) 19 20, nesw-resize;
  --cur-resize-h: image-set(url("../img/cursors/resize-horizontal.png?v=3") 1x, url("../img/cursors/resize-horizontal@2x.png?v=3") 2x) 20 7, ew-resize;
  --cur-resize-v: image-set(url("../img/cursors/resize-vertical.png?v=3") 1x, url("../img/cursors/resize-vertical@2x.png?v=3") 2x) 7 20, ns-resize;
  --cur-loading: image-set(url("../img/cursors/loading-ring.png?v=3") 1x, url("../img/cursors/loading-ring@2x.png?v=3") 2x) 21 21, progress;
  --cur-wait: image-set(url("../img/cursors/wait-busy.png?v=3") 1x, url("../img/cursors/wait-busy@2x.png?v=3") 2x) 12 20, wait;
  --cur-help: image-set(url("../img/cursors/help-info.png?v=3") 1x, url("../img/cursors/help-info@2x.png?v=3") 2x) 1 1, help;
  --cur-zoom-in: image-set(url("../img/cursors/zoom-in.png?v=3") 1x, url("../img/cursors/zoom-in@2x.png?v=3") 2x) 14 15, zoom-in;
  --cur-zoom-out: image-set(url("../img/cursors/zoom-out.png?v=3") 1x, url("../img/cursors/zoom-out@2x.png?v=3") 2x) 14 15, zoom-out;
  --cur-grab: image-set(url("../img/cursors/grab.png?v=3") 1x, url("../img/cursors/grab@2x.png?v=3") 2x) 16 18, grab;
  --cur-grabbing: image-set(url("../img/cursors/grabbing.png?v=3") 1x, url("../img/cursors/grabbing@2x.png?v=3") 2x) 17 18, grabbing;
}}

/* ---------- element mapping (generic) ---------- */
html, body                         { cursor: var(--cur-default); }

a, a *, button, button *, [role="button"], label[for], summary, select,
input[type="submit"], input[type="button"], input[type="reset"], input[type="checkbox"],
input[type="radio"], input[type="file"], .cur-pointer, .clickable   { cursor: var(--cur-pointer); }

input:not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]),
textarea, [contenteditable="true"], .cur-text            { cursor: var(--cur-text); }

input[type="range"], .cur-resize-h                        { cursor: var(--cur-resize-h); }
.cur-resize-v                                             { cursor: var(--cur-resize-v); }
.cur-resize-nwse, .cur-resize-diagonal                    { cursor: var(--cur-resize-nwse); }
.cur-resize-nesw                                          { cursor: var(--cur-resize-nesw); }
.cur-move                                                 { cursor: var(--cur-move); }
.cur-crosshair                                            { cursor: var(--cur-crosshair); }
abbr[title], .cur-help                                    { cursor: var(--cur-help); }
.cur-zoom-in                                              { cursor: var(--cur-zoom-in); }
.cur-zoom-out                                             { cursor: var(--cur-zoom-out); }
[draggable="true"], .cur-grab                             { cursor: var(--cur-grab); }
[draggable="true"]:active, .cur-grab:active, .is-grabbing, .is-grabbing * { cursor: var(--cur-grabbing); }

/* states toggled by cursors.js (or by your own code) */
html.is-loading, html.is-loading *                        { cursor: var(--cur-loading); }
html.is-loading.has-ptr, html.is-loading.has-ptr *        { cursor: none !important; }
html.is-busy, html.is-busy *, .is-busy, .is-busy *        { cursor: var(--cur-wait); }
[disabled], [aria-disabled="true"], .is-disabled          { cursor: not-allowed; }

/* ---------- WordPress · Elementor · WooCommerce hooks ---------- */
.elementor-button, .elementor-widget-button a, .elementor-post__thumbnail__link, .elementor-post__read-more,
.elementor-icon-list-item a, .elementor-nav-menu a, .elementor-tab-title, .elementor-accordion-title, .elementor-toggle-title,
.woocommerce ul.products li.product a, .woocommerce-loop-product__link, .add_to_cart_button, .single_add_to_cart_button,
.woocommerce a.button, .woocommerce button.button, .checkout-button, .wc-block-components-button,
.swiper-button-next, .swiper-button-prev, .swiper-pagination-bullet, .elementor-swiper-button { cursor: var(--cur-pointer); }

.woocommerce-product-gallery__image a, .woocommerce-product-gallery__wrapper img, .elementor-lightbox-trigger img { cursor: var(--cur-zoom-in); }
.pswp, .pswp__img, .elementor-lightbox, .elementor-lightbox .swiper-slide                                        { cursor: var(--cur-zoom-out); }
.pswp__button, .elementor-lightbox .dialog-close-button, .elementor-lightbox .elementor-swiper-button              { cursor: var(--cur-pointer); }

.elementor-widget-image-carousel .swiper-wrapper, .elementor-widget-slides .swiper-wrapper,
.elementor-widget-testimonial-carousel .swiper-wrapper, .swiper-container-free-mode .swiper-wrapper,
.woocommerce-product-gallery .flex-viewport                                                                        { cursor: var(--cur-grab); }
.swiper-wrapper:active, .flex-viewport:active                                                                      { cursor: var(--cur-grabbing); }

.woocommerce .blockUI.blockOverlay, .woocommerce .processing, .processing *                                        { cursor: var(--cur-wait) !important; }

/* ---------- loading: a REAL spinning cursor ----------
   Browsers cannot animate a cursor image, so while html.is-loading.has-ptr is set the native cursor is
   hidden and this fixed element (moved to the pointer by bb-cursors.js) rotates the whole loader
   360° around its centre — one object, linear, infinite, no fades. */
.bb-cur-spin{position:fixed;left:0;top:0;width:40px;height:40px;margin:-20px 0 0 -20px;pointer-events:none;z-index:2147483647;display:none;will-change:transform}
html.is-loading.has-ptr .bb-cur-spin{display:block}
.bb-cur-spin::before{content:"";position:absolute;inset:0;background:url("../img/cursors/loading-ring@2x.png?v=3") center / 40px 40px no-repeat;transform-origin:center center;animation:bbCurSpin 1.2s linear infinite}
@keyframes bbCurSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.bb-cur-spin::before{animation:none}}}

/* touch devices: no custom cursors — nothing downloaded on phones/tablets */

/* bb-cursors-v3: footer bar always shows the set (nothing inherits cursor:none from the playground) */
@media (pointer: fine){.bb-ftr-bar-line, .bb-ftr-bar-line *, .bb-ftr-bar, .bb-ftr-bar *{cursor:var(--cur-default)!important}.bb-ftr-bar-line a, .bb-ftr-bar-line a *, .bb-ftr-bar a, .bb-ftr-bar a *{cursor:var(--cur-pointer)!important}}
