{"id":1327,"date":"2026-09-01T17:12:31","date_gmt":"2026-09-01T21:12:31","guid":{"rendered":"https:\/\/miniquasar.com\/?post_type=product&#038;p=1327"},"modified":"2026-10-01T08:03:27","modified_gmt":"2026-10-01T12:03:27","slug":"undead-dwarven-brothers","status":"publish","type":"product","link":"https:\/\/miniquasar.com\/us\/product\/undead-dwarven-brothers\/","title":{"rendered":"Sook, Crook, Mook, Brook, Hook \u2013 Undead Dwarven Brothers"},"content":{"rendered":"<div class=\"tmq-below\">\n<div class=\"tmq-story\">\n<section>\n\t      <span class=\"label\">The full story<\/span><\/p>\n<h2>Sook, Crook, Mook, Brook, Hook \u00e2\u20ac\u201c Undead Dwarven Brothers<\/h2>\n<p>When Mallory first began to unleash her evils upon the land of Grimmvale, seven Dwarven brothers assembled a small warband to bring justice to the evil Queen. Five of them were slaughtered, and two barely escaped with their lives. Those five that perished are now animated as her lackeys, forced into menial tasks and labour in undeath, or sent into quests that would be certain death for most others. Their souls are trapped in their corpses, passengers as they watch the horror inflicted by Mallory.<\/p>\n<p>Seven brothers of the Dwarven Clan Baranook manned their family mine. When Mallory first appeared, she demanded that the mine be given to her, and their output entirely donated to her rule. The brothers refused, mounting a defense against her at the entrance to the source of their family\u00e2\u20ac\u2122s fortune. Mallory did not hesitate in slaying each of them, yet spared the eldest to be burdened with the deaths of his younger siblings.<\/p>\n<p>The five that she slew were taken from the mine by her servants, reanimated as corpses to become her lackeys and minions even in death. They work the mines of their family now, but also are used to cut down those who oppose her. They are labourers and footsoldiers. Ones who do not eat, sleep or complain. The perfect minions.<\/p>\n<\/section>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The set<\/span><\/p>\n<p>The Tales Grimm is a campaign set of Grimmvale miniatures. Order the full lineup, or any five, and the digital campaign bundle comes with them.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-tales-grimm\/\"><span class=\"tmq-reveal-frame\"><img fetchpriority=\"high\" decoding=\"async\" class=\"tmq-reveal-a\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/grimm-release-tmq.png\" alt=\"The Tales Grimm set\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/grimm-set-minis.jpg\" alt=\"The Tales Grimm miniatures\"><\/span><\/a><\/figure>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The campaign<\/span><\/p>\n<p>A full monthly set from Grimmvale. The sculpts work in any game. Order the full lineup, or any five miniatures, and the digital campaign bundle comes with them.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-tales-grimm\/\"><span class=\"tmq-reveal-frame\"><img decoding=\"async\" class=\"tmq-reveal-a\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/campaign-grimm-cover.png\" alt=\"The Tales Grimm campaign\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/grimm-open-book.png\" alt=\"The Tales Grimm campaign book\"><\/span><\/a><\/figure>\n<figure class=\"tmq-size-guide\">\n\t      <img decoding=\"async\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/08\/size-guide-tmq.png\" alt=\"Size guide \u00e2\u20ac\u201d 32mm tabletop and 75mm display\"><br \/>\n\t    <\/figure>\n<\/p><\/div>\n<aside class=\"tmq-details\">\n\t    <span class=\"label\">Details<\/span><\/p>\n<h3>Painting<\/h3>\n<p>We specialize in custom painted miniatures, so if you are interested in painted minis, please send us a message and we will arrange that for you. All miniatures sold are unpainted, unless otherwise specified. If you would like us to add free matte black primer to the prints, you can let us know, and they&#8217;ll be ready to paint right out of the box!<\/p>\n<h3>Shipping<\/h3>\n<p>Our models are shipped assembled if they are not too delicate, but are usually separated from the base. Wings and some other parts may also be detached and need to be put together, especially for larger models. To put the pieces together, you could use epoxy putty, super glue, or any strong glue that works for plastics. This is to ensure that none of the delicate pieces break or get damaged during shipping. If you really need pieces glued together, please let us know and we will do our best to accommodate.<\/p>\n<h3>Free Miniature<\/h3>\n<p>Get a free miniature with your order. No requirements, every order gets one. It will be a random character from our store. If you order multiple minis, you may even get more than one for free! Enjoy.<\/p>\n<h3>Model Scale<\/h3>\n<p>Normal-sized miniatures come in two sizes: 32mm and 75mm, which is the height of the humanoid body, so with the base and other accessories like hats, they will end up being a little taller. 32mm is the standard size if you are playing D&amp;D on a physical battle map.<\/p>\n<p>Larger miniatures are measured by the diameter of their base. Large-sized miniatures usually have a 50mm base, huge-sized ones have a 75mm base, gargantuan ones have a 100-120mm base. For specific measurements on any model, please contact us and we&#8217;ll be happy to give you the exact numbers.<\/p>\n<h3>Creation of Miniatures<\/h3>\n<p>These models are made by the fantastic people at DM Stash, and they make incredible models, so please check them out. We are officially licensed to print and sell their models to you, so you can enjoy them too! We print them with an Elegoo Saturn 4 Ultra resin printer with 16K resolution (the highest quality available). They are printed using Elegoo Standard 3.0 Vanilla coloured resin, an expensive resin that ensures models are strong without compromising on the detail. The supports are cut off, the model is sanded if needed, and inspected to ensure perfection. The model is washed off with pure alcohol, then cured inside an Elegoo ultcuring enclosure, and prepared for printing.<\/p>\n<\/aside><\/div>\n<p>\t<script>\n\tjQuery(function ($) {\n\t  function tmqCartBounce() {\n\t    var $el = $(\".header-cart-wrap, .tmq-header-cart\").first();\n\t    if (!$el.length) {\n\t      return;\n\t    }\n\t    $el.removeClass(\"tmq-cart-bounce\");\n\t    if ($el[0]) {\n\t      $el[0].offsetWidth;\n\t    }\n\t    $el.addClass(\"tmq-cart-bounce\");\n\t    window.setTimeout(function () {\n\t      $el.removeClass(\"tmq-cart-bounce\");\n\t    }, 700);\n\t  }\n\t  if (window.sessionStorage) {\n\t    if (sessionStorage.getItem(\"tmqCartBounce\") === \"1\") {\n\t      sessionStorage.removeItem(\"tmqCartBounce\");\n\t      window.setTimeout(tmqCartBounce, 80);\n\t    }\n\t  }\n\t  $(document.body).on(\"added_to_cart\", function () {\n\t    if (window.sessionStorage) {\n\t      sessionStorage.setItem(\"tmqCartBounce\", \"1\");\n\t    }\n\t    tmqCartBounce();\n\t  });\n\t  var $sum = $(\"div.product .summary\");\n\t  function tmqMoney(prices) {\n\t    var raw, minor, n, prefix;\n\t    if (!prices) {\n\t      return \"\";\n\t    }\n\t    raw = prices.price;\n\t    minor = prices.currency_minor_unit;\n\t    if (typeof minor === \"undefined\") {\n\t      minor = 2;\n\t    }\n\t    n = Number(raw);\n\t    if (isNaN(n)) {\n\t      return \"\";\n\t    }\n\t    prefix = prices.currency_prefix;\n\t    if (!prefix) {\n\t      prefix = \"$\";\n\t    }\n\t    return prefix + (n \/ Math.pow(10, minor)).toFixed(2);\n\t  }\n\t  function tmqVarName(v) {\n\t    var i, a, attrs, text, idx;\n\t    attrs = v.attributes;\n\t    if (attrs) {\n\t      if (attrs.length) {\n\t        for (i = 0; i !== attrs.length; i++) {\n\t          a = attrs[i];\n\t          if (a.value) {\n\t            return a.value;\n\t          }\n\t          if (a.option) {\n\t            return a.option;\n\t          }\n\t        }\n\t      }\n\t    }\n\t    text = v.variation || \"\";\n\t    idx = text.lastIndexOf(\": \");\n\t    if (idx !== -1) {\n\t      return text.substring(idx + 2);\n\t    }\n\t    if (text) {\n\t      return text;\n\t    }\n\t    return \"\";\n\t  }\n\t  function tmqBlob(im) {\n\t    return ((im.name || \"\") + \" \" + (im.src || \"\") + \" \" + (im.thumbnail || \"\") + \" \" + (im.alt || \"\")).toLowerCase();\n\t  }\n\t  function tmqIsGuide(im) {\n\t    var s = tmqBlob(im);\n\t    if (s.indexOf(\"size-guide\") !== -1) {\n\t      return true;\n\t    }\n\t    if (s.indexOf(\"size_guide\") !== -1) {\n\t      return true;\n\t    }\n\t    if (s.indexOf(\"size guide\") !== -1) {\n\t      return true;\n\t    }\n\t    return false;\n\t  }\n\t  function tmqIsPack(im) {\n\t    var s = tmqBlob(im);\n\t    if (s.indexOf(\"pack-set\") !== -1) {\n\t      return true;\n\t    }\n\t    if (s.indexOf(\"pack_set\") !== -1) {\n\t      return true;\n\t    }\n\t    return false;\n\t  }\n\t  function tmqPickThumbs(imgs) {\n\t    var i, im, others, show;\n\t    others = [];\n\t    for (i = 0; i !== imgs.length; i++) {\n\t      im = imgs[i];\n\t      if (tmqIsGuide(im)) {\n\t        continue;\n\t      }\n\t      if (tmqIsPack(im)) {\n\t        continue;\n\t      }\n\t      others.push(im);\n\t    }\n\t    if (others.length > 4) {\n\t      return others;\n\t    }\n\t    show = [];\n\t    for (i = 0; i !== imgs.length; i++) {\n\t      im = imgs[i];\n\t      if (tmqIsGuide(im)) {\n\t        continue;\n\t      }\n\t      if (imgs.length > 6) {\n\t        if (i === 6) {\n\t          continue;\n\t        }\n\t      }\n\t      show.push(im);\n\t    }\n\t    return show;\n\t  }\n\t  function tmqRenderSizes($p, vars) {\n\t    var i, v, label, price, $rows, $row, $price, $link, list;\n\t    if (!vars) {\n\t      return;\n\t    }\n\t    if (!vars.length) {\n\t      return;\n\t    }\n\t    if ($p.find(\".tmq-size-rows\").length) {\n\t      return;\n\t    }\n\t    list = vars.slice().sort(function (a, b) {\n\t      var na = tmqVarName(a);\n\t      var nb = tmqVarName(b);\n\t      if (nb > na) {\n\t        return -1;\n\t      }\n\t      if (na > nb) {\n\t        return 1;\n\t      }\n\t      return 0;\n\t    });\n\t    $rows = $(document.createElement(\"div\")).addClass(\"tmq-size-rows\");\n\t    for (i = 0; i !== list.length; i++) {\n\t      v = list[i];\n\t      label = tmqVarName(v);\n\t      price = tmqMoney(v.prices);\n\t      if (!label) {\n\t        if (!price) {\n\t          continue;\n\t        }\n\t      }\n\t      $row = $(document.createElement(\"div\")).addClass(\"tmq-size-row\");\n\t      if (label) {\n\t        $row.append($(document.createElement(\"span\")).addClass(\"tmq-size-label\").text(label));\n\t      }\n\t      if (price) {\n\t        $row.append(document.createTextNode(\" \"));\n\t        $row.append($(document.createElement(\"span\")).addClass(\"tmq-size-amt\").text(price));\n\t      }\n\t      $rows.append($row);\n\t    }\n\t    if (!$rows.children().length) {\n\t      return;\n\t    }\n\t    $price = $p.find(\".price\").first();\n\t    $link = $p.find(\"a.woocommerce-LoopProduct-link\").first();\n\t    if ($price.length) {\n\t      $price.addClass(\"tmq-price-hide\");\n\t      $price.hide();\n\t      $price.after($rows);\n\t    } else {\n\t      if ($link.length) {\n\t        $link.after($rows);\n\t      } else {\n\t        $p.append($rows);\n\t      }\n\t    }\n\t  }\n\t  function tmqRenderThumbs($p, imgs) {\n\t    var i, im, show, $img, $photo, $thumbs, $t, thumb, full, origSrc, origSrcset;\n\t    if (!imgs) {\n\t      return;\n\t    }\n\t    if (!imgs.length) {\n\t      return;\n\t    }\n\t    if ($p.find(\".tmq-card-thumbs\").length) {\n\t      return;\n\t    }\n\t    show = tmqPickThumbs(imgs);\n\t    if (!show.length) {\n\t      return;\n\t    }\n\t    $img = $p.find(\"img\").first();\n\t    if (!$img.length) {\n\t      return;\n\t    }\n\t    origSrc = $img.attr(\"src\");\n\t    origSrcset = $img.attr(\"srcset\") || \"\";\n\t    $p.data(\"tmq-orig-src\", origSrc);\n\t    $p.data(\"tmq-orig-srcset\", origSrcset);\n\t    if (!$img.parent().hasClass(\"tmq-card-photo\")) {\n\t      $img.wrap($(document.createElement(\"span\")).addClass(\"tmq-card-photo\"));\n\t    }\n\t    $photo = $img.parent();\n\t    $thumbs = $(document.createElement(\"span\")).addClass(\"tmq-card-thumbs\");\n\t    for (i = 0; i !== show.length; i++) {\n\t      im = show[i];\n\t      thumb = im.thumbnail;\n\t      if (!thumb) {\n\t        thumb = im.src;\n\t      }\n\t      full = im.src;\n\t      if (!full) {\n\t        full = thumb;\n\t      }\n\t      if (!thumb) {\n\t        continue;\n\t      }\n\t      $t = $(document.createElement(\"img\"));\n\t      $t.attr(\"src\", thumb);\n\t      $t.attr(\"data-full\", full);\n\t      $t.attr(\"alt\", im.alt || im.name || \"\");\n\t      $thumbs.append($t);\n\t    }\n\t    $photo.append($thumbs);\n\t    $thumbs.on(\"click\", \"img\", function (e) {\n\t      var next = $(this).attr(\"data-full\");\n\t      e.preventDefault();\n\t      e.stopPropagation();\n\t      if (next) {\n\t        $img.attr(\"src\", next);\n\t        $img.removeAttr(\"srcset\");\n\t        $img.removeAttr(\"sizes\");\n\t      }\n\t      return false;\n\t    });\n\t    $p.on(\"mouseleave\", function () {\n\t      var src = $p.data(\"tmq-orig-src\");\n\t      var srcset = $p.data(\"tmq-orig-srcset\");\n\t      if (src) {\n\t        $img.attr(\"src\", src);\n\t      }\n\t      if (srcset) {\n\t        $img.attr(\"srcset\", srcset);\n\t      }\n\t    });\n\t  }\n\t  function tmqEnhanceCard($p) {\n\t    var cls, m, id;\n\t    if ($p.data(\"tmq-ready\")) {\n\t      return;\n\t    }\n\t    $p.data(\"tmq-ready\", 1);\n\t    cls = $p.attr(\"class\") || \"\";\n\t    m = cls.match(\/post-(\\d+)\/);\n\t    if (!m) {\n\t      return;\n\t    }\n\t    id = m[1];\n\t    $.getJSON(\"https:\/\/miniquasar.com\/wp-json\/wc\/store\/v1\/products\/\" + id, function (data) {\n\t      var vars;\n\t      if (!data) {\n\t        return;\n\t      }\n\t      tmqRenderThumbs($p, data.images || []);\n\t      vars = data.variations;\n\t      if (!vars) {\n\t        return;\n\t      }\n\t      if (!vars.length) {\n\t        return;\n\t      }\n\t      if (vars[0].prices) {\n\t        tmqRenderSizes($p, vars);\n\t        return;\n\t      }\n\t      $.getJSON(\n\t        \"https:\/\/miniquasar.com\/wp-json\/wc\/store\/v1\/products\",\n\t        { type: \"variation\", parent: id },\n\t        function (list) {\n\t          tmqRenderSizes($p, list);\n\t        }\n\t      );\n\t    });\n\t  }\n\t  function tmqPackIndividuals($form, variations, $sizeSel, $modelSel) {\n\t    var $sec, $grid, $art, $img, $h3, $btns, $btn, $gal, $host, $found, $slugFront, $slugHit, $wordFront, $wordHit, sizeOpts, si, sizeVal, sizeLabel, modelVal, modelLabel, slug, lastWord, src, alt, blob, found, price, priceText, i, a, k, hit, pid, vid, url, payload, attrs, idAttr, m, $b;\n\t    if ($(\".tmq-individuals\").length) {\n\t      return;\n\t    }\n\t    sizeOpts = [];\n\t    $sizeSel.find(\"option\").each(function () {\n\t      if (this.value) {\n\t        sizeOpts.push({ val: this.value, text: this.text || this.value });\n\t      }\n\t    });\n\t    sizeOpts.sort(function (a, b) {\n\t      var ra, rb, ta, tb;\n\t      ta = (a.text || \"\").toLowerCase();\n\t      tb = (b.text || \"\").toLowerCase();\n\t      ra = 2;\n\t      rb = 2;\n\t      if (ta.indexOf(\"32\") !== -1) {\n\t        ra = 0;\n\t      } else {\n\t        if (ta.indexOf(\"75\") !== -1) {\n\t          ra = 1;\n\t        }\n\t      }\n\t      if (tb.indexOf(\"32\") !== -1) {\n\t        rb = 0;\n\t      } else {\n\t        if (tb.indexOf(\"75\") !== -1) {\n\t          rb = 1;\n\t        }\n\t      }\n\t      return ra - rb;\n\t    });\n\t    $sec = $(document.createElement(\"div\")).addClass(\"tmq-individuals\");\n\t    $sec.append($(document.createElement(\"span\")).addClass(\"label\").text(\"Get individual miniatures from this set\"));\n\t    $grid = $(document.createElement(\"div\")).addClass(\"tmq-individuals-grid\");\n\t    $sec.append($grid);\n\t    $gal = $(\".woocommerce-product-gallery img\");\n\t    $modelSel.find(\"option\").each(function () {\n\t      if (!this.value) {\n\t        return;\n\t      }\n\t      modelVal = this.value;\n\t      modelLabel = (this.text || modelVal).replace(\/^Choose an option\/i, \"\").trim();\n\t      if (modelLabel.toLowerCase().indexOf(\"full set\") !== -1) {\n\t        return;\n\t      }\n\t      $art = $(document.createElement(\"article\")).addClass(\"tmq-ind\").attr(\"data-model\", modelVal);\n\t      slug = modelLabel.toLowerCase().replace(\/\\s+\/g, \"-\");\n\t      lastWord = modelLabel.toLowerCase().replace(\/^.*\\s\/, \"\");\n\t      $slugFront = $();\n\t      $slugHit = $();\n\t      $wordFront = $();\n\t      $wordHit = $();\n\t      $gal.each(function () {\n\t        var $im = $(this);\n\t        src = (($im.attr(\"src\") || \"\") + \" \" + ($im.attr(\"data-src\") || \"\") + \" \" + ($im.attr(\"data-large_image\") || \"\")).toLowerCase();\n\t        alt = ($im.attr(\"alt\") || \"\").toLowerCase();\n\t        blob = src + \" \" + alt;\n\t        if (blob.indexOf(slug) !== -1) {\n\t          if (!$slugHit.length) {\n\t            $slugHit = $im;\n\t          }\n\t          if (src.indexOf(\"-front\") !== -1) {\n\t            if (!$slugFront.length) {\n\t              $slugFront = $im;\n\t            }\n\t          }\n\t        }\n\t        if (lastWord) {\n\t          if (blob.indexOf(lastWord) !== -1) {\n\t            if (!$wordHit.length) {\n\t              $wordHit = $im;\n\t            }\n\t            if (src.indexOf(\"-front\") !== -1) {\n\t              if (!$wordFront.length) {\n\t                $wordFront = $im;\n\t              }\n\t            }\n\t          }\n\t        }\n\t      });\n\t      $found = $();\n\t      if ($slugFront.length) {\n\t        $found = $slugFront;\n\t      } else {\n\t        if ($slugHit.length) {\n\t          $found = $slugHit;\n\t        } else {\n\t          if ($wordFront.length) {\n\t            $found = $wordFront;\n\t          } else {\n\t            if ($wordHit.length) {\n\t              $found = $wordHit;\n\t            } else {\n\t              $found = $gal.first();\n\t            }\n\t          }\n\t        }\n\t      }\n\t      $img = $(document.createElement(\"img\")).attr(\"alt\", modelLabel);\n\t      src = \"\";\n\t      if ($found.length) {\n\t        src = $found.attr(\"data-large_image\") || \"\";\n\t        if (!src) {\n\t          src = $found.attr(\"data-src\") || \"\";\n\t        }\n\t        if (!src) {\n\t          src = $found.attr(\"src\") || \"\";\n\t        }\n\t      }\n\t      if (src) {\n\t        $img.attr(\"src\", src);\n\t        $art.append($img);\n\t      }\n\t      $h3 = $(document.createElement(\"h3\")).text(modelLabel);\n\t      $art.append($h3);\n\t      $btns = $(document.createElement(\"div\")).addClass(\"tmq-ind-btns\");\n\t      for (si = 0; si !== sizeOpts.length; si++) {\n\t        sizeVal = sizeOpts[si].val;\n\t        sizeLabel = (sizeOpts[si].text || sizeVal).replace(\/^Choose an option\/i, \"\").trim();\n\t        found = null;\n\t        for (i = 0; i !== variations.length; i++) {\n\t          a = variations[i].attributes || {};\n\t          hit = 0;\n\t          for (k in a) {\n\t            if (a[k] === sizeVal) {\n\t              hit = hit + 1;\n\t            }\n\t            if (a[k] === modelVal) {\n\t              hit = hit + 1;\n\t            }\n\t          }\n\t          if (hit > 1) {\n\t            found = variations[i];\n\t          }\n\t        }\n\t        if (!found) {\n\t          continue;\n\t        }\n\t        price = \"\";\n\t        if (found.display_price != null) {\n\t          price = found.display_price;\n\t        }\n\t        priceText = \"\";\n\t        if (price !== \"\") {\n\t          priceText = \"$\" + Number(price).toFixed(2);\n\t        }\n\t        $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-ind-btn\");\n\t        $btn.attr(\"data-size\", sizeVal);\n\t        $btn.attr(\"data-model\", modelVal);\n\t        $btn.attr(\"data-variation\", found.variation_id);\n\t        $btn.append($(document.createElement(\"span\")).addClass(\"tmq-ind-size\").text(sizeLabel));\n\t        if (priceText) {\n\t          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-ind-price\").text(priceText));\n\t        }\n\t        $btn.append($(document.createElement(\"span\")).addClass(\"tmq-ind-add\").text(\"Add to cart\"));\n\t        $btns.append($btn);\n\t      }\n\t      $art.append($btns);\n\t      $grid.append($art);\n\t    });\n\t    if (!$grid.children().length) {\n\t      return;\n\t    }\n\t    $host = $(\"div.product .summary\").first();\n\t    if ($host.length) {\n\t      $host.after($sec);\n\t    } else {\n\t      $host = $(\".woocommerce-product-gallery\").first();\n\t      if ($host.length) {\n\t        $host.after($sec);\n\t      } else {\n\t        $host = $(\".tmq-below\").first();\n\t        if ($host.length) {\n\t          $host.before($sec);\n\t        }\n\t      }\n\t    }\n\t    $sec.on(\"click\", \".tmq-ind-btn\", function (e) {\n\t      e.preventDefault();\n\t      $b = $(this);\n\t      vid = $b.attr(\"data-variation\");\n\t      pid = $form.data(\"product_id\");\n\t      if (!pid) {\n\t        pid = $form.find(\"input[name=product_id]\").val();\n\t      }\n\t      if (!pid) {\n\t        idAttr = $form.closest(\".product\").attr(\"id\") || \"\";\n\t        m = String(idAttr).match(\/(\\d+)\/);\n\t        if (m) {\n\t          pid = m[1];\n\t        }\n\t      }\n\t      url = \"\/?wc-ajax=add_to_cart\";\n\t      if (typeof wc_add_to_cart_params !== \"undefined\") {\n\t        if (wc_add_to_cart_params.wc_ajax_url) {\n\t          url = wc_add_to_cart_params.wc_ajax_url.replace(\"%%endpoint%%\", \"add_to_cart\");\n\t        }\n\t      }\n\t      if (!vid) {\n\t        return;\n\t      }\n\t      payload = {\n\t        product_id: vid,\n\t        variation_id: vid,\n\t        quantity: 1\n\t      };\n\t      if (pid) {\n\t        payload.parent_id = pid;\n\t      }\n\t      found = null;\n\t      for (i = 0; i !== variations.length; i++) {\n\t        if (String(variations[i].variation_id) === String(vid)) {\n\t          found = variations[i];\n\t        }\n\t      }\n\t      if (found) {\n\t        attrs = found.attributes;\n\t        if (attrs) {\n\t          for (k in attrs) {\n\t            payload[k] = attrs[k];\n\t            payload[\"variation[\" + k + \"]\"] = attrs[k];\n\t          }\n\t        }\n\t      }\n\t      $.post(url, payload, function (res) {\n\t        if (res) {\n\t          if (res.error) {\n\t            return;\n\t          }\n\t          if (res.fragments) {\n\t            $.each(res.fragments, function (sel, html) {\n\t              $(sel).replaceWith(html);\n\t            });\n\t          }\n\t        }\n\t        if (window.sessionStorage) {\n\t          sessionStorage.setItem(\"tmqCartBounce\", \"1\");\n\t        }\n\t        $(document.body).trigger(\"added_to_cart\");\n\t      });\n\t    });\n\t  }\n\t  var $form = $(\"form.variations_form\");\n\t  if ($form.length) {\n\t    var variations = $form.data(\"product_variations\");\n\t    if (!variations) {\n\t      variations = [];\n\t    }\n\t    var $sizeSel = $();\n\t    var $modelSel = $();\n\t    var grouped = 0;\n\t    $form.find(\"select\").each(function () {\n\t      var $s = $(this);\n\t      var n = ($s.attr(\"name\") || \"\").toLowerCase();\n\t      if (n.indexOf(\"size\") !== -1) {\n\t        if (n.indexOf(\"tabletop\") === -1) {\n\t          $sizeSel = $s;\n\t        }\n\t      }\n\t      if (n.indexOf(\"model\") !== -1) {\n\t        $modelSel = $s;\n\t      }\n\t    });\n\t    if ($sizeSel.length) {\n\t      if ($modelSel.length) {\n\t        grouped = 1;\n\t      }\n\t    }\n\t    if (grouped) {\n\t      var $box, sizeOpts, modelOpts, setOpts, si, mi, sizeVal, sizeLabel, modelVal, modelLabel, $btn, price, priceText, found, i, a, k, hit, currentSize, currentModel;\n\t      $sizeSel.addClass(\"tmq-size-native\");\n\t      $modelSel.addClass(\"tmq-size-native\");\n\t      $box = $(document.createElement(\"div\")).addClass(\"tmq-size-picks\").attr(\"role\", \"radiogroup\").attr(\"aria-label\", \"Size\");\n\t      sizeOpts = [];\n\t      $sizeSel.find(\"option\").each(function () {\n\t        if (this.value) {\n\t          sizeOpts.push({ val: this.value, text: this.text || this.value });\n\t        }\n\t      });\n\t      sizeOpts.sort(function (a, b) {\n\t        var ra, rb, ta, tb;\n\t        ta = (a.text || \"\").toLowerCase();\n\t        tb = (b.text || \"\").toLowerCase();\n\t        ra = 2;\n\t        rb = 2;\n\t        if (ta.indexOf(\"32\") !== -1) {\n\t          ra = 0;\n\t        } else {\n\t          if (ta.indexOf(\"75\") !== -1) {\n\t            ra = 1;\n\t          }\n\t        }\n\t        if (tb.indexOf(\"32\") !== -1) {\n\t          rb = 0;\n\t        } else {\n\t          if (tb.indexOf(\"75\") !== -1) {\n\t            rb = 1;\n\t          }\n\t        }\n\t        return ra - rb;\n\t      });\n\t      modelOpts = [];\n\t      $modelSel.find(\"option\").each(function () {\n\t        if (this.value) {\n\t          modelOpts.push({ val: this.value, text: this.text || this.value });\n\t        }\n\t      });\n\t      setOpts = [];\n\t      for (mi = 0; mi !== modelOpts.length; mi++) {\n\t        modelLabel = (modelOpts[mi].text || modelOpts[mi].val).replace(\/^Choose an option\/i, \"\").trim();\n\t        if (modelLabel.toLowerCase().indexOf(\"full set\") !== -1) {\n\t          setOpts.push(modelOpts[mi]);\n\t        }\n\t      }\n\t      for (si = 0; si !== sizeOpts.length; si++) {\n\t        sizeVal = sizeOpts[si].val;\n\t        sizeLabel = (sizeOpts[si].text || sizeVal).replace(\/^Choose an option\/i, \"\").trim();\n\t        for (mi = 0; mi !== setOpts.length; mi++) {\n\t          modelVal = setOpts[mi].val;\n\t          price = \"\";\n\t          found = null;\n\t          for (i = 0; i !== variations.length; i++) {\n\t            a = variations[i].attributes || {};\n\t            hit = 0;\n\t            for (k in a) {\n\t              if (a[k] === sizeVal) {\n\t                hit = hit + 1;\n\t              }\n\t              if (a[k] === modelVal) {\n\t                hit = hit + 1;\n\t              }\n\t            }\n\t            if (hit > 1) {\n\t              found = variations[i];\n\t            }\n\t          }\n\t          if (!found) {\n\t            continue;\n\t          }\n\t          if (found.display_price != null) {\n\t            price = found.display_price;\n\t          }\n\t          priceText = \"\";\n\t          if (price !== \"\") {\n\t            priceText = \"$\" + Number(price).toFixed(2);\n\t          }\n\t          $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-size-pick\").attr(\"role\", \"radio\").attr(\"aria-checked\", \"false\");\n\t          $btn.attr(\"data-size\", sizeVal);\n\t          $btn.attr(\"data-model\", modelVal);\n\t          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-name\").text(sizeLabel));\n\t          if (priceText) {\n\t            $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-price\").text(priceText));\n\t          }\n\t          $btn.on(\"click\", function () {\n\t            var sv = $(this).attr(\"data-size\");\n\t            var mv = $(this).attr(\"data-model\");\n\t            $box.find(\".tmq-size-pick\").removeClass(\"is-on\").attr(\"aria-checked\", \"false\");\n\t            $(this).addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n\t            $sizeSel.val(sv);\n\t            $sizeSel.trigger(\"change\");\n\t            $modelSel.val(mv);\n\t            $modelSel.trigger(\"change\");\n\t          });\n\t          $box.append($btn);\n\t        }\n\t      }\n\t      $form.find(\"select\").last().after($box);\n\t      currentSize = $sizeSel.val();\n\t      currentModel = $modelSel.val();\n\t      if (currentSize) {\n\t        if (currentModel) {\n\t          $box.find('.tmq-size-pick[data-size=\"' + currentSize + '\"][data-model=\"' + currentModel + '\"]').addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n\t        } else {\n\t          $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n\t        }\n\t      } else {\n\t        $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n\t      }\n\t      tmqPackIndividuals($form, variations, $sizeSel, $modelSel);\n\t    } else {\n\t      $form.find(\"select\").each(function () {\n\t        var $sel = $(this);\n\t        var $box, current, usable;\n\t        usable = $sel.find(\"option[value]\").filter(function () {\n\t          return this.value;\n\t        });\n\t        if (!(usable.length >= 1)) {\n\t          return;\n\t        }\n\t        $sel.addClass(\"tmq-size-native\");\n\t        $box = $(document.createElement(\"div\")).addClass(\"tmq-size-picks\").attr(\"role\", \"radiogroup\").attr(\"aria-label\", \"Size\");\n\t        $sel.find(\"option\").each(function () {\n\t          var val = this.value;\n\t          var label, price, priceText, $btn, i, a, k;\n\t          if (!val) {\n\t            return;\n\t          }\n\t          label = (this.text || val).replace(\/^Choose an option\/i, \"\").trim();\n\t          price = \"\";\n\t          for (i = 0; i !== variations.length; i++) {\n\t            a = variations[i].attributes || {};\n\t            for (k in a) {\n\t              if (a[k] === val) {\n\t                if (variations[i].display_price != null) {\n\t                  price = variations[i].display_price;\n\t                }\n\t              }\n\t            }\n\t          }\n\t          priceText = \"\";\n\t          if (price !== \"\") {\n\t            priceText = \"$\" + Number(price).toFixed(2);\n\t          }\n\t          $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-size-pick\").attr(\"role\", \"radio\").attr(\"aria-checked\", \"false\");\n\t          $btn.attr(\"data-value\", val);\n\t          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-name\").text(label));\n\t          if (priceText) {\n\t            $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-price\").text(priceText));\n\t          }\n\t          $btn.on(\"click\", function () {\n\t            $box.find(\".tmq-size-pick\").removeClass(\"is-on\").attr(\"aria-checked\", \"false\");\n\t            $(this).addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n\t            $sel.val(val).trigger(\"change\");\n\t          });\n\t          $box.append($btn);\n\t        });\n\t        $sel.after($box);\n\t        current = $sel.val();\n\t        if (current) {\n\t          $box.find('[data-value=\"' + current + '\"]').addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n\t        } else {\n\t          $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n\t        }\n\t      });\n\t    }\n\t  }\n\t  var paintHref = \"https:\/\/miniquasar.com\/contact\/\";\n\t  var paintHtml = $(document.createElement(\"a\")).addClass(\"tmq-paint-link\").attr(\"href\", paintHref).text(\"Inquire about Painted Miniatures\");\n\t  var $after;\n\t  if ($sum.length) {\n\t    if (!$sum.find(\".tmq-paint-link\").length) {\n\t      $after = $sum.find(\".tmq-size-picks\").first();\n\t      if ($after.length) {\n\t        $after.after(paintHtml);\n\t      } else {\n\t        $sum.find(\"form.cart\").before(paintHtml);\n\t      }\n\t    }\n\t  }\n\t});\n\t<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unpainted 16K resin miniatures. Set of 5. Sizes 32mm and 75mm. Made to order in Canada.<\/p>\n<p class=\"tmq-chips\"><span>Monster<\/span><span>Undead<\/span><span>Normal<\/span><\/p>\n<div class=\"tmq-set\"><span class=\"label\">Campaign set<\/span><\/p>\n<h3>The Tales Grimm<\/h3>\n<p>This miniature belongs to The Tales Grimm.<\/p>\n<p><a class=\"tmq-set-link\" href=\"https:\/\/miniquasar.com\/campaigns\/the-tales-grimm\/\">View the set<\/a><\/div>\n","protected":false},"featured_media":1468,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"default","_kad_post_title":"","_kad_post_layout":"default","_kad_post_sidebar_id":"","_kad_post_content_style":"default","_kad_post_vertical_padding":"default","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":""},"product_brand":[],"product_cat":[24,90],"product_tag":[],"class_list":["post-1327","product","type-product","status-publish","has-post-thumbnail","product_cat-individual-minis","product_cat-the-tales-grimm","pa_gender-other","pa_mini-type-monster","pa_race-undead","pa_set-the-tales-grimm","pa_size-32mm","pa_size-75mm","pa_tabletop-size-normal","first","instock","taxable","shipping-taxable","purchasable","product-type-variable","entry","content-bg","loop-entry"],"_links":{"self":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product\/1327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/types\/product"}],"replies":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/comments?post=1327"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media\/1468"}],"wp:attachment":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media?parent=1327"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_brand?post=1327"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_cat?post=1327"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_tag?post=1327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}