/* generated by tools/fh2oc - do not hand-edit */
.fp[data-fv] img.fh2oc-dyn-image,
img.fh2oc-dyn-image{
  position:absolute;
  left:0; top:0;
  width:100%; height:100%;
  max-width:none;
  /* cover, not contain. OpenCart pads a thumbnail out to the exact requested
     box, so `contain` fits the PADDING into the frame and the product ends up
     small and ringed with white. `cover` crops that padding away instead, which
     is what the design's own zoomed crop was doing. */
  object-fit:cover;
  /* The design's own framing, measured per image at build time
     (blocks.framing_style): focus, zoom and zoom origin. Defaults = plain
     centred cover. The design's baked matrix is still overridden. */
  object-position:var(--fh-px,50%) var(--fh-py,50%);
  transform:scale(var(--fh-z,1)) !important;
  transform-origin:var(--fh-ox,50%) var(--fh-oy,50%);
}
/* Bootstrap 3 (layered, for pages still on stock templates) sets
   html{font-size:10px}. The design sizes text in rem against the browser's
   16px, and a layer cannot shield a root rule the design never declares -
   every heading shrank ~2.5x. Unlayered, this restores the default. */
html{ font-size:100%; }
/* Real <input>s made from the design's placeholder spans (lib/blocks.py).
   They keep the span's classes, so font, size and colour stay the design's;
   :where() keeps these resets at zero specificity. */
:where(input.fh2oc-input){ border:0; background:transparent; outline:0;
  padding:0; margin:0; min-width:0; width:100%; box-sizing:border-box;
  font:inherit; color:inherit; -webkit-appearance:none; appearance:none; }
:where(input.fh2oc-input)::placeholder{ color:inherit; opacity:1; }
/* Ratings: the design only draws filled stars; unfilled ones are faded. */
.fp[data-fv] .fh2oc-star-off{ filter:grayscale(1); opacity:.3; }
/* Popovers, toast and overlay that ctheme.js appends to <body> live OUTSIDE
   .fp, so they inherit <body> - which on the storefront carries stock
   OpenCart's font-size:12px / line-height:20px (layered, for pages not yet
   converted). The design's own popovers inherit the browser defaults, and its
   CSS relies on that: rows came out 62px instead of 53. Restore the defaults. */
body > :where(.fse-popover, .fse-action-toast, .fse-interaction-overlay){
  font-size:16px; line-height:normal;
}
/* Language popover (ctheme.js) borrows the contacts popover's look, but not
   its fixed 280px: a list of language names is sized to its content. */
#fse-language-popover.fse-contact-popover{ width:max-content; min-width:160px; }
/* Partner logos (lib/blocks.py): fit whole, never crop a logo. */
.fp[data-fv] img.fh2oc-dyn-image.fh2oc-contain{ object-fit:contain; }
/* Menu links (lib/menus.py) turn the design's styled <div>s into <a>.
   :where() keeps these at zero specificity, so every display/colour the
   design declares on its own classes still wins; they only replace the
   browser's (and Bootstrap's) link look. */
:where(a.fh2oc-link, a.fh2oc-link:hover, a.fh2oc-link:focus){
  display:block; color:inherit; text-decoration:none;
}
/* Figma fixes each footer column's height to its design content; an
   admin-edited menu can hold more links than that. */
.fp[data-fv] .fh2oc-menu-col{ height:auto !important; }
/* ctheme.js builds the mega-menu from real <a> links where the export's
   prototype used <button>s; keep them looking like the design's buttons. */
.fse-popover a{ text-decoration:none; }
a.fse-category-item, a.fse-subcategory-item{ display:block; }

/* top-categories page (lib/toppage.py): rows of tiles grow the page;
   tiles keep DOM order */
.fp[data-fv] .n111{ height:auto !important; min-height:0 !important; }
.fp[data-fv] .n1{ height:auto !important; min-height:0 !important; }
.fp[data-fv] .n125{ height:auto !important; min-height:0 !important; }
.fp[data-fv] [data-fh2oc-row]{ order:0 !important; }
.fp[data-fv] [data-ct="tile-name"]{ white-space:pre-wrap !important; max-width:100% !important; overflow-wrap:break-word; }
/* breadcrumb borrowed from the listing design (prefix q) */
.fp[data-fv] :is(.q109){flex:0 0 auto;
  width:16px;
  height:16px;
  position:relative;
  overflow:hidden;
  border-radius:0}
.fp[data-fv] :is(.q96,.q102){flex:0 0 auto;
  width:16px;
  order:1;
  height:16px;
  position:relative;
  overflow:hidden;
  border-radius:0}
.fp[data-fv] :is(.q97,.q103){position:absolute;
  left:5.25px;
  top:13.25px;
  width:10.5px;
  height:6px;
  transform:rotate(-90deg);
  transform-origin:top left;
  display:none!important;
  background:rgba(0, 0, 0, 1);
  border-radius:0}
.fp[data-fv] :is(.q98,.q104){position:absolute;
  left:6px;
  top:12.5px;
  width:9px;
  height:4.5px;
  transform:rotate(-90deg);
  transform-origin:top left}
.fp[data-fv] :is(.q99,.q105){position:absolute;
  left:5.25px;
  top:13.25px;
  width:10.5px;
  height:6px;
  transform:rotate(-90deg);
  transform-origin:top left}
@media (min-width:767.98px){.fp[data-fv] :is(.q101){min-height:21px;
    font-size:.9375rem}}
@media (min-width:1023.98px){.fp[data-fv] :is(.q101){min-height:20px;
    font-size:.875rem}}
@media (min-width:1439.98px){.fp[data-fv] :is(.q95){width:max-content;
    max-width:100%}
.fp[data-fv] :is(.q108){overflow:hidden}}
@media (min-width:1024.02px) and (max-width:1439.98px){.fp[data-fv] :is(.q101){white-space:normal;
    overflow-wrap:normal;
    word-break:normal;
    height:auto;
    min-height:0}}
@media (min-width:1024.02px) and (max-width:1439.98px){.fp[data-fv] :is(.q92,.q93,.q106){min-width:0;
    max-width:100%;
    height:auto;
    min-height:0}
.fp[data-fv] :is(.q94,.q100,.q108){height:auto;
    min-height:0}
.fp[data-fv] :is(.q95,.q101,.q107,.q114){min-width:0;
    max-width:100%}
.fp[data-fv] :is(.q92,.q93,.q94,.q100,.q106,.q108){height:auto}
.fp[data-fv] :is(.q92,.q93,.q94,.q100,.q106,.q108){max-width:100%}}
@media (min-width:768.02px) and (max-width:1023.98px){.fp[data-fv] :is(.q101){white-space:normal;
    overflow-wrap:normal;
    word-break:normal;
    height:auto;
    min-height:0}
.fp[data-fv] :is(.q107){white-space:normal;
    overflow-wrap:normal;
    word-break:normal;
    height:auto;
    min-height:0;
    min-height:0!important;
    max-height:none!important;
    overflow:visible!important}}
@media (min-width:768.02px) and (max-width:1023.98px){.fp[data-fv] :is(.q92,.q93,.q106){min-width:0;
    max-width:100%;
    height:auto;
    min-height:0}
.fp[data-fv] :is(.q107){min-width:0;
    max-width:100%;
    --fse-multiline:1}
.fp[data-fv] :is(.q94,.q100,.q108){height:auto;
    min-height:0}
.fp[data-fv] :is(.q95,.q101,.q114){min-width:0;
    max-width:100%}
.fp[data-fv] :is(.q92,.q93,.q94,.q100,.q106,.q108){height:auto}
.fp[data-fv] :is(.q92,.q93,.q94,.q100,.q106,.q108){max-width:100%}}
@media (max-width:389.98px),(min-width:390.02px) and (max-width:767.98px){.fp[data-fv] :is(.q107){white-space:normal;
    overflow-wrap:normal;
    word-break:normal;
    height:auto;
    min-height:0;
    min-height:0!important;
    max-height:none!important;
    overflow:visible!important}
.fp[data-fv] :is(.q101){white-space:normal;
    overflow-wrap:normal;
    word-break:normal;
    height:auto;
    min-height:0}}
@media (max-width:389.98px),(min-width:390.02px) and (max-width:767.98px){.fp[data-fv] :is(.q107){min-width:0;
    max-width:100%;
    --fse-multiline:1}
.fp[data-fv] :is(.q92,.q93,.q106){min-width:0;
    max-width:100%;
    height:auto;
    min-height:0}
.fp[data-fv] :is(.q94,.q100,.q108){height:auto;
    min-height:0}
.fp[data-fv] :is(.q95,.q101,.q114){min-width:0;
    max-width:100%}
.fp[data-fv] :is(.q92,.q93,.q94,.q100,.q106,.q108){height:auto}
.fp[data-fv] :is(.q92,.q93,.q94,.q100,.q106,.q108){max-width:100%}}
@media (min-width:390.02px) and (max-width:767.98px){.fp :is(.q95,.q101,.q107){font-size:clamp(.9375rem,calc(1.064484rem - .26455vw),1rem)}}
@media (min-width:768.02px) and (max-width:1023.98px){.fp :is(.q95,.q101,.q107){font-size:clamp(.875rem,calc(1.125rem - .390625vw),.9375rem)}}
/* breadcrumb (lib/breadcrumb.py): crumbs sized to their own text; the
   page's own crumb ends in an ellipsis when the row runs out of room */
.fp[data-fv] [data-ct="crumb"], .fp[data-fv] [data-ct="crumb-text"]{ width:auto !important; }
.fp[data-fv] [data-ct="crumb"][data-last]{ min-width:0 !important; flex-shrink:1 !important; }
.fp[data-fv] [data-last] > [data-ct="crumb-text"]{ max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap !important; }
/* hover / focus effects for the body (lib/hover.py; the example theme's system) */
.fp[data-fv] [data-hover="card"], .fp[data-fv] .fh2oc-hover-primary, .fp[data-fv] .fh2oc-hover-outline, .fp[data-fv] .fh2oc-hover-soft{ transition:transform .2s, background-color .15s, box-shadow .2s, border-color .15s, color .15s; }
.fp[data-fv] [data-hover="card"]:hover{ transform:translateY(-4px); }
.fp[data-fv] :is([data-sr="button"], a[href], [role="button"], [role="radio"], [role="option"], [role="switch"], [role="checkbox"], [data-hover="card"], .fh2oc-hover-primary, .fh2oc-hover-outline, .fh2oc-hover-soft):not([data-ct="locker-list"], [aria-disabled="true"]){ cursor:pointer; }
.fp[data-fv] .fh2oc-hover-primary:hover{ background-color:#6aac38 !important; transform:translateY(-2px); }
.fp[data-fv] .fh2oc-hover-primary:active, .fp[data-fv] .fh2oc-hover-outline:active, .fp[data-fv] .fh2oc-hover-soft:active{ transform:translateY(0); }
.fp[data-fv] .fh2oc-hover-outline:hover{ background-color:#f4f9f0 !important; transform:translateY(-1px); }
.fp[data-fv] .fh2oc-hover-soft:hover{ transform:translateY(-1px); box-shadow:-4px -4px 10px rgba(255,255,255,.95), 4px 4px 10px rgba(163,177,198,.7) !important; }
.fp[data-fv] a[data-fh2oc-row]:not([aria-current]):hover :is(span, h3, h4){ color:#639e36 !important; }
.fp[data-fv] a[data-fh2oc-row] :is(span, h3, h4){ transition:color .15s; }
.fp[data-fv] [role="radio"][aria-checked="false"]{ transition:box-shadow .15s; }
.fp[data-fv] [role="radio"][aria-checked="false"]:hover{ box-shadow:inset 0 0 0 1px rgba(123,193,67,.55); }
.fp[data-fv] :is([data-field-box], [data-cart-box]){ transition:box-shadow .15s; }
.fp[data-fv] :is(:has(> [data-field-box]:focus-within), :has(> [data-cart-box]:focus-within)){ box-shadow:0 0 0 2px rgba(123,193,67,.45) !important; }
.fp[data-fv] a.fh2oc-inline:hover{ text-decoration:underline; }
@media (prefers-reduced-motion: reduce){ .fp[data-fv] :is([data-hover="card"], .fh2oc-hover-primary, .fh2oc-hover-outline, .fh2oc-hover-soft):hover{ transform:none !important; } }
.fp[data-fv] .q92{ margin-block:-72px !important; }
.fp[data-fv] .n1{ height:auto !important; min-height:0 !important; }
.fp[data-fv] .n2{ height:auto !important; min-height:0 !important; }

