
/* Wix renders the Locations dropdown at runtime; the stripped snapshot keeps
   only a bare hidden <ul>. These rules reproduce the live panel: black,
   right-aligned, white serif — matched against the real site. */
.wixclone-sub {
  display: none; position: absolute; top: 100%; right: 0; z-index: 9999;
  min-width: 165px; margin: 0; padding: 4px 0; list-style: none;
  background: #000; text-align: right;
}
li:hover > .wixclone-sub, .wixclone-sub:hover,
li[data-wixclone-open="true"] > .wixclone-sub { display: block; }
.wixclone-sub li { margin: 0; padding: 0; list-style: none; }
.wixclone-sub a {
  display: block; padding: 10px 20px; color: #fff; text-decoration: none;
  font-family: inherit; font-size: 19px; line-height: 1.2; white-space: nowrap;
}
.wixclone-sub a:hover { color: #b9b9b9; }

/* gallery arrows are real buttons again */
[data-hook="nav-arrow-next"], [data-hook="nav-arrow-prev"],
.nav-arrows-container { cursor: pointer; }
.gallery-horizontal-scroll { scroll-behavior: smooth; }

/* fullscreen image viewer (Wix opens a dialog on item click) */
.wixclone-lb {
  position: fixed; inset: 0; z-index: 100000; display: none;
  background: rgba(0,0,0,.92); align-items: center; justify-content: center;
}
.wixclone-lb[data-open="true"] { display: flex; }
.wixclone-lb img { max-width: 94vw; max-height: 90vh; object-fit: contain; }
/* the 250px crop stands in until the 2000px file arrives; blurring it reads as a
   deliberate progressive load rather than a soft photo */
.wixclone-lb[data-hd-loading="true"] img { filter: blur(6px); }
.wixclone-lb img { transition: filter .25s ease; }
.wixclone-lb[data-hd-loading="true"]::after {
  content: ""; position: absolute; width: 34px; height: 34px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.25); border-top-color: #fff;
  animation: wixclone-spin .8s linear infinite;
}
@keyframes wixclone-spin { to { transform: rotate(360deg); } }
.wixclone-lb button {
  position: absolute; top: 18px; right: 22px; background: none; border: 0;
  color: #fff; font-size: 34px; line-height: 1; cursor: pointer;
}

/* ---- galloping header logo ---------------------------------------------
   The logo PNG is one lockup: a leaping horse over the TRUFFLE wordmark, and
   the horse itself is a single fused silhouette -- connected-component analysis
   finds only three blobs, so the legs cannot be separated automatically.
   tools/split-logo.py cuts the horse off the wordmark; tools/rig-horse.py then
   cuts the horse into body/foreleg/hindleg/tail on that same canvas, hinging
   each limb at its joint with an overlap band so no notch opens when it swings.
   _clone.js stacks the layers back over the original <img>.

   Do not hand-edit the keyframes below -- run tools/gallop-css.py, which
   samples them from rig-horse.py's frames(), the same function that renders the
   filmstrip the gait was judged on. A stride is 0.7s: forelegs reach then
   fold, hind legs drive then tuck in counterphase, the tail streams, and the
   body rises and pitches once per stride. Three strides, then 7.5
   seconds standing still, forever.

   Every channel returns to zero at the end of the last stride, so the resting
   pose is pixel-identical to the untouched logo.

   The header sits flush with the top of the page, so the bound is capped: the
   horse's ear tip is only ~13px below y=0 at rest, and anything more than that
   gets cut off by the viewport, not by CSS. */

/* the Wix link class sets overflow:hidden, which would shear the horse's head
   off at the top of the bound -- outrank it rather than !important */
.twf-logo-wrap a.twf-logo, .twf-logo { position: relative; display: block; overflow: visible; }
.twf-logo-wrap { overflow: visible; }

.twf-horse {
  position: absolute; left: 0; top: 0; width: 100%; height: 100%;
  pointer-events: none; transform-origin: 50% 95%;
  animation: twf-bound 9.6s linear infinite;
}
.twf-horse img {
  position: absolute; left: 0; top: 0; width: 100%; height: 100%;
  will-change: transform;
}
/* Each limb hinges at its joint, given as a fraction of the horse canvas -- the
   same fractions serve the 100x94 mobile logo, which is rigged from the same
   reference geometry. */
.twf-horse-fore { transform-origin: 67.79% 30.71%; animation: twf-fore 9.6s linear infinite; }
.twf-horse-hind { transform-origin: 38.26% 44.29%; animation: twf-hind 9.6s linear infinite; }
.twf-horse-tail { transform-origin: 30.87% 32.86%; animation: twf-tail 9.6s linear infinite; }

@keyframes twf-bound {
        0% { transform: translateY(-0.00px) rotate(-0.00deg); }
   0.9115% { transform: translateY(-3.54px) rotate(-2.12deg); }
   1.8229% { transform: translateY(-5.00px) rotate(-3.00deg); }
   2.7344% { transform: translateY(-3.54px) rotate(-2.12deg); }
   3.6458% { transform: translateY(-0.00px) rotate(-0.00deg); }
   4.5573% { transform: translateY(-0.00px) rotate(2.12deg); }
   5.4688% { transform: translateY(-0.00px) rotate(3.00deg); }
   6.3802% { transform: translateY(-0.00px) rotate(2.12deg); }
   7.2917% { transform: translateY(-0.00px) rotate(0.00deg); }
   8.2031% { transform: translateY(-3.54px) rotate(-2.12deg); }
   9.1146% { transform: translateY(-5.00px) rotate(-3.00deg); }
   10.026% { transform: translateY(-3.54px) rotate(-2.12deg); }
  10.9375% { transform: translateY(-0.00px) rotate(-0.00deg); }
   11.849% { transform: translateY(-0.00px) rotate(2.12deg); }
  12.7604% { transform: translateY(-0.00px) rotate(3.00deg); }
  13.6719% { transform: translateY(-0.00px) rotate(2.12deg); }
  14.5833% { transform: translateY(-0.00px) rotate(0.00deg); }
  15.4948% { transform: translateY(-3.54px) rotate(-2.12deg); }
  16.4062% { transform: translateY(-5.00px) rotate(-3.00deg); }
  17.3177% { transform: translateY(-3.54px) rotate(-2.12deg); }
  18.2292% { transform: translateY(-0.00px) rotate(-0.00deg); }
  19.1406% { transform: translateY(-0.00px) rotate(2.12deg); }
  20.0521% { transform: translateY(-0.00px) rotate(3.00deg); }
  20.9635% { transform: translateY(-0.00px) rotate(2.12deg); }
   21.875% { transform: translateY(-0.00px) rotate(0.00deg); }
      100% { transform: translateY(0) rotate(0deg); }
}

@keyframes twf-fore {
        0% { transform: rotate(-0.0deg); }
   0.9115% { transform: rotate(-18.4deg); }
   1.8229% { transform: rotate(-26.0deg); }
   2.7344% { transform: rotate(-18.4deg); }
   3.6458% { transform: rotate(-0.0deg); }
   4.5573% { transform: rotate(18.4deg); }
   5.4688% { transform: rotate(26.0deg); }
   6.3802% { transform: rotate(18.4deg); }
   7.2917% { transform: rotate(0.0deg); }
   8.2031% { transform: rotate(-18.4deg); }
   9.1146% { transform: rotate(-26.0deg); }
   10.026% { transform: rotate(-18.4deg); }
  10.9375% { transform: rotate(-0.0deg); }
   11.849% { transform: rotate(18.4deg); }
  12.7604% { transform: rotate(26.0deg); }
  13.6719% { transform: rotate(18.4deg); }
  14.5833% { transform: rotate(0.0deg); }
  15.4948% { transform: rotate(-18.4deg); }
  16.4062% { transform: rotate(-26.0deg); }
  17.3177% { transform: rotate(-18.4deg); }
  18.2292% { transform: rotate(-0.0deg); }
  19.1406% { transform: rotate(18.4deg); }
  20.0521% { transform: rotate(26.0deg); }
  20.9635% { transform: rotate(18.4deg); }
   21.875% { transform: rotate(0.0deg); }
      100% { transform: rotate(0deg); }
}

@keyframes twf-hind {
        0% { transform: rotate(0.0deg); }
   0.9115% { transform: rotate(18.4deg); }
   1.8229% { transform: rotate(26.0deg); }
   2.7344% { transform: rotate(18.4deg); }
   3.6458% { transform: rotate(0.0deg); }
   4.5573% { transform: rotate(-18.4deg); }
   5.4688% { transform: rotate(-26.0deg); }
   6.3802% { transform: rotate(-18.4deg); }
   7.2917% { transform: rotate(-0.0deg); }
   8.2031% { transform: rotate(18.4deg); }
   9.1146% { transform: rotate(26.0deg); }
   10.026% { transform: rotate(18.4deg); }
  10.9375% { transform: rotate(0.0deg); }
   11.849% { transform: rotate(-18.4deg); }
  12.7604% { transform: rotate(-26.0deg); }
  13.6719% { transform: rotate(-18.4deg); }
  14.5833% { transform: rotate(-0.0deg); }
  15.4948% { transform: rotate(18.4deg); }
  16.4062% { transform: rotate(26.0deg); }
  17.3177% { transform: rotate(18.4deg); }
  18.2292% { transform: rotate(0.0deg); }
  19.1406% { transform: rotate(-18.4deg); }
  20.0521% { transform: rotate(-26.0deg); }
  20.9635% { transform: rotate(-18.4deg); }
   21.875% { transform: rotate(-0.0deg); }
      100% { transform: rotate(0deg); }
}

@keyframes twf-tail {
        0% { transform: rotate(-0.0deg); }
   0.9115% { transform: rotate(-4.2deg); }
   1.8229% { transform: rotate(-6.0deg); }
   2.7344% { transform: rotate(-4.2deg); }
   3.6458% { transform: rotate(-0.0deg); }
   4.5573% { transform: rotate(4.2deg); }
   5.4688% { transform: rotate(6.0deg); }
   6.3802% { transform: rotate(4.2deg); }
   7.2917% { transform: rotate(0.0deg); }
   8.2031% { transform: rotate(-4.2deg); }
   9.1146% { transform: rotate(-6.0deg); }
   10.026% { transform: rotate(-4.2deg); }
  10.9375% { transform: rotate(-0.0deg); }
   11.849% { transform: rotate(4.2deg); }
  12.7604% { transform: rotate(6.0deg); }
  13.6719% { transform: rotate(4.2deg); }
  14.5833% { transform: rotate(0.0deg); }
  15.4948% { transform: rotate(-4.2deg); }
  16.4062% { transform: rotate(-6.0deg); }
  17.3177% { transform: rotate(-4.2deg); }
  18.2292% { transform: rotate(-0.0deg); }
  19.1406% { transform: rotate(4.2deg); }
  20.0521% { transform: rotate(6.0deg); }
  20.9635% { transform: rotate(4.2deg); }
   21.875% { transform: rotate(0.0deg); }
      100% { transform: rotate(0deg); }
}

@media (prefers-reduced-motion: reduce) {
  .twf-horse, .twf-horse img { animation: none; }
}
