{"id":1424,"date":"2026-09-01T20:00:18","date_gmt":"2026-09-02T00:00:18","guid":{"rendered":"https:\/\/miniquasar.com\/?post_type=product&#038;p=1424"},"modified":"2026-10-01T08:07:41","modified_gmt":"2026-10-01T12:07:41","slug":"the-blights-warriors","status":"publish","type":"product","link":"https:\/\/miniquasar.com\/us\/product\/the-blights-warriors\/","title":{"rendered":"The Blight\u2019s Warriors \u2013 Blighted Knights"},"content":{"rendered":"<div class=\"tmq-below\">\n<div class=\"tmq-story\">\n<section>\n      <span class=\"label\">The full story<\/span><\/p>\n<h2>The Blight&#x27;s Warriors \u2013 Blighted Knights<\/h2>\n<p>Soldiers of Draksborne who have become infected with the most aggressive forms of Dragonblight. It seems that in those with martial prowess and weaponry, the disease bolsters its hold, focusing additional energy into growing masses of flesh that it uses as weapons, as well as armour.<\/p>\n<p>When the first soldiers were sent into Limlight ahead of the quarantine being established, the intention was containment. They were experienced men, disciplined, and the reports coming out of the village had not yet conveyed the full scale of what Phrenic Concordia was capable of. Within a day, half of them had been infected. Within three, those who had turned were unrecognisable as the men who had marched in. The disease does something different to those who carry weapons and wear armour, as though it can read the purpose of a body and choose to amplify it. Where a civilian host becomes aggressive and directionless, a soldier host becomes something closer to a siege weapon. The flesh that pushes through gaps in their armour has hardened into dense, dark growth that reinforces the steel from beneath, and the masses that bloom from their sword arms have formed into crude but effective bludgeoning weights that the disease swings with more force than the original limb ever could have managed.<\/p>\n<p>They still hold their weapons. That is the detail that unsettles survivors most, more than the flesh, more than the smell. The muscle memory of trained soldiers persists inside the corruption, and the Blighted Knights do not flail or stumble the way newly turned hosts do. They advance in something resembling formation. They respond to each other in ways that suggest the Consciousness is coordinating them, using whatever martial knowledge remained in their minds at the moment of turning and putting it to work with a patience and economy that no mindless plague beast should be capable of. Fighting them as though they are monsters is a mistake. They have to be fought as though they are soldiers, which is precisely what Phrenic Concordia intended.<\/p>\n<\/section>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The set<\/span><\/p>\n<p>Limlight was a village mostly spared by the Dragonblight outbreak two years prior. Now it has become the epicentre of the latest outbreak, trapped in an arcane quarantine. The clock is ticking until all within are infected, or wiped out by the kingdom\u2019s contingency and containment plans. A squad of elite knights and paladins now enter, volunteering their lives to try end the outbreak and purge the plague.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-dire-end\/\"><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\/dire-end-release-tmq.png\" alt=\"The Dire End set\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/dire-end-set-minis.jpg\" alt=\"The Dire End miniatures\"><\/span><\/a><\/figure>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The campaign<\/span><\/p>\n<p>In The Dire End, the party is trapped within the arcane quarantine zone of Limlight Village. The village is a victim of a new strain of Dragonblight, which has erupted only recently. It was very swiftly quarantined by arcane mages of the kingdom of Draksborne, who are now threatening that the entire quarantine zone will be purged in three days, if those inside are not able to end the plague themselves. With the hourglass quickly emptying, the party will need to join forces with a group of volunteers who have entered the quarantine, in a bid to eradicate the infestation and save the lives of hundreds of survivors.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-dire-end\/\"><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-dire-end-cover.png\" alt=\"The Dire End campaign\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/dire-open-book.png\" alt=\"The Dire End campaign book\"><\/span><\/a><\/figure>\n<figure class=\"tmq-size-guide\">\n      <img decoding=\"async\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/08\/size-guide-tmq.png\" alt=\"Size guide \u2014 32mm tabletop and 75mm display\"><br \/>\n    <\/figure>\n<\/p><\/div>\n<aside class=\"tmq-details\">\n    <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>\n<\/div>\n<p><script>\njQuery(function ($) {\n  function tmqCartBounce() {\n    var $el = $(\".header-cart-wrap, .tmq-header-cart\").first();\n    if (!$el.length) {\n      return;\n    }\n    $el.removeClass(\"tmq-cart-bounce\");\n    if ($el[0]) {\n      $el[0].offsetWidth;\n    }\n    $el.addClass(\"tmq-cart-bounce\");\n    window.setTimeout(function () {\n      $el.removeClass(\"tmq-cart-bounce\");\n    }, 700);\n  }\n  if (window.sessionStorage) {\n    if (sessionStorage.getItem(\"tmqCartBounce\") === \"1\") {\n      sessionStorage.removeItem(\"tmqCartBounce\");\n      window.setTimeout(tmqCartBounce, 80);\n    }\n  }\n  $(document.body).on(\"added_to_cart\", function () {\n    if (window.sessionStorage) {\n      sessionStorage.setItem(\"tmqCartBounce\", \"1\");\n    }\n    tmqCartBounce();\n  });\n  var $sum = $(\"div.product .summary\");\n  function tmqMoney(prices) {\n    var raw, minor, n, prefix;\n    if (!prices) {\n      return \"\";\n    }\n    raw = prices.price;\n    minor = prices.currency_minor_unit;\n    if (typeof minor === \"undefined\") {\n      minor = 2;\n    }\n    n = Number(raw);\n    if (isNaN(n)) {\n      return \"\";\n    }\n    prefix = prices.currency_prefix;\n    if (!prefix) {\n      prefix = \"$\";\n    }\n    return prefix + (n \/ Math.pow(10, minor)).toFixed(2);\n  }\n  function tmqVarName(v) {\n    var i, a, attrs, text, idx;\n    attrs = v.attributes;\n    if (attrs) {\n      if (attrs.length) {\n        for (i = 0; i !== attrs.length; i++) {\n          a = attrs[i];\n          if (a.value) {\n            return a.value;\n          }\n          if (a.option) {\n            return a.option;\n          }\n        }\n      }\n    }\n    text = v.variation || \"\";\n    idx = text.lastIndexOf(\": \");\n    if (idx !== -1) {\n      return text.substring(idx + 2);\n    }\n    if (text) {\n      return text;\n    }\n    return \"\";\n  }\n  function tmqBlob(im) {\n    return ((im.name || \"\") + \" \" + (im.src || \"\") + \" \" + (im.thumbnail || \"\") + \" \" + (im.alt || \"\")).toLowerCase();\n  }\n  function tmqIsGuide(im) {\n    var s = tmqBlob(im);\n    if (s.indexOf(\"size-guide\") !== -1) {\n      return true;\n    }\n    if (s.indexOf(\"size_guide\") !== -1) {\n      return true;\n    }\n    if (s.indexOf(\"size guide\") !== -1) {\n      return true;\n    }\n    return false;\n  }\n  function tmqIsPack(im) {\n    var s = tmqBlob(im);\n    if (s.indexOf(\"pack-set\") !== -1) {\n      return true;\n    }\n    if (s.indexOf(\"pack_set\") !== -1) {\n      return true;\n    }\n    return false;\n  }\n  function tmqPickThumbs(imgs) {\n    var i, im, others, show;\n    others = [];\n    for (i = 0; i !== imgs.length; i++) {\n      im = imgs[i];\n      if (tmqIsGuide(im)) {\n        continue;\n      }\n      if (tmqIsPack(im)) {\n        continue;\n      }\n      others.push(im);\n    }\n    if (others.length > 4) {\n      return others;\n    }\n    show = [];\n    for (i = 0; i !== imgs.length; i++) {\n      im = imgs[i];\n      if (tmqIsGuide(im)) {\n        continue;\n      }\n      if (imgs.length > 6) {\n        if (i === 6) {\n          continue;\n        }\n      }\n      show.push(im);\n    }\n    return show;\n  }\n  function tmqRenderSizes($p, vars) {\n    var i, v, label, price, $rows, $row, $price, $link, list;\n    if (!vars) {\n      return;\n    }\n    if (!vars.length) {\n      return;\n    }\n    if ($p.find(\".tmq-size-rows\").length) {\n      return;\n    }\n    list = vars.slice().sort(function (a, b) {\n      var na = tmqVarName(a);\n      var nb = tmqVarName(b);\n      if (nb > na) {\n        return -1;\n      }\n      if (na > nb) {\n        return 1;\n      }\n      return 0;\n    });\n    $rows = $(document.createElement(\"div\")).addClass(\"tmq-size-rows\");\n    for (i = 0; i !== list.length; i++) {\n      v = list[i];\n      label = tmqVarName(v);\n      price = tmqMoney(v.prices);\n      if (!label) {\n        if (!price) {\n          continue;\n        }\n      }\n      $row = $(document.createElement(\"div\")).addClass(\"tmq-size-row\");\n      if (label) {\n        $row.append($(document.createElement(\"span\")).addClass(\"tmq-size-label\").text(label));\n      }\n      if (price) {\n        $row.append(document.createTextNode(\" \"));\n        $row.append($(document.createElement(\"span\")).addClass(\"tmq-size-amt\").text(price));\n      }\n      $rows.append($row);\n    }\n    if (!$rows.children().length) {\n      return;\n    }\n    $price = $p.find(\".price\").first();\n    $link = $p.find(\"a.woocommerce-LoopProduct-link\").first();\n    if ($price.length) {\n      $price.addClass(\"tmq-price-hide\");\n      $price.hide();\n      $price.after($rows);\n    } else {\n      if ($link.length) {\n        $link.after($rows);\n      } else {\n        $p.append($rows);\n      }\n    }\n  }\n  function tmqRenderThumbs($p, imgs) {\n    var i, im, show, $img, $photo, $thumbs, $t, thumb, full, origSrc, origSrcset;\n    if (!imgs) {\n      return;\n    }\n    if (!imgs.length) {\n      return;\n    }\n    if ($p.find(\".tmq-card-thumbs\").length) {\n      return;\n    }\n    show = tmqPickThumbs(imgs);\n    if (!show.length) {\n      return;\n    }\n    $img = $p.find(\"img\").first();\n    if (!$img.length) {\n      return;\n    }\n    origSrc = $img.attr(\"src\");\n    origSrcset = $img.attr(\"srcset\") || \"\";\n    $p.data(\"tmq-orig-src\", origSrc);\n    $p.data(\"tmq-orig-srcset\", origSrcset);\n    if (!$img.parent().hasClass(\"tmq-card-photo\")) {\n      $img.wrap($(document.createElement(\"span\")).addClass(\"tmq-card-photo\"));\n    }\n    $photo = $img.parent();\n    $thumbs = $(document.createElement(\"span\")).addClass(\"tmq-card-thumbs\");\n    for (i = 0; i !== show.length; i++) {\n      im = show[i];\n      thumb = im.thumbnail;\n      if (!thumb) {\n        thumb = im.src;\n      }\n      full = im.src;\n      if (!full) {\n        full = thumb;\n      }\n      if (!thumb) {\n        continue;\n      }\n      $t = $(document.createElement(\"img\"));\n      $t.attr(\"src\", thumb);\n      $t.attr(\"data-full\", full);\n      $t.attr(\"alt\", im.alt || im.name || \"\");\n      $thumbs.append($t);\n    }\n    $photo.append($thumbs);\n    $thumbs.on(\"click\", \"img\", function (e) {\n      var next = $(this).attr(\"data-full\");\n      e.preventDefault();\n      e.stopPropagation();\n      if (next) {\n        $img.attr(\"src\", next);\n        $img.removeAttr(\"srcset\");\n        $img.removeAttr(\"sizes\");\n      }\n      return false;\n    });\n    $p.on(\"mouseleave\", function () {\n      var src = $p.data(\"tmq-orig-src\");\n      var srcset = $p.data(\"tmq-orig-srcset\");\n      if (src) {\n        $img.attr(\"src\", src);\n      }\n      if (srcset) {\n        $img.attr(\"srcset\", srcset);\n      }\n    });\n  }\n  function tmqEnhanceCard($p) {\n    var cls, m, id;\n    if ($p.data(\"tmq-ready\")) {\n      return;\n    }\n    $p.data(\"tmq-ready\", 1);\n    cls = $p.attr(\"class\") || \"\";\n    m = cls.match(\/post-(\\d+)\/);\n    if (!m) {\n      return;\n    }\n    id = m[1];\n    $.getJSON(\"https:\/\/miniquasar.com\/wp-json\/wc\/store\/v1\/products\/\" + id, function (data) {\n      var vars;\n      if (!data) {\n        return;\n      }\n      tmqRenderThumbs($p, data.images || []);\n      vars = data.variations;\n      if (!vars) {\n        return;\n      }\n      if (!vars.length) {\n        return;\n      }\n      if (vars[0].prices) {\n        tmqRenderSizes($p, vars);\n        return;\n      }\n      $.getJSON(\n        \"https:\/\/miniquasar.com\/wp-json\/wc\/store\/v1\/products\",\n        { type: \"variation\", parent: id },\n        function (list) {\n          tmqRenderSizes($p, list);\n        }\n      );\n    });\n  }\n  function tmqPackIndividuals($form, variations, $sizeSel, $modelSel) {\n    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    if ($(\".tmq-individuals\").length) {\n      return;\n    }\n    sizeOpts = [];\n    $sizeSel.find(\"option\").each(function () {\n      if (this.value) {\n        sizeOpts.push({ val: this.value, text: this.text || this.value });\n      }\n    });\n    sizeOpts.sort(function (a, b) {\n      var ra, rb, ta, tb;\n      ta = (a.text || \"\").toLowerCase();\n      tb = (b.text || \"\").toLowerCase();\n      ra = 2;\n      rb = 2;\n      if (ta.indexOf(\"32\") !== -1) {\n        ra = 0;\n      } else {\n        if (ta.indexOf(\"75\") !== -1) {\n          ra = 1;\n        }\n      }\n      if (tb.indexOf(\"32\") !== -1) {\n        rb = 0;\n      } else {\n        if (tb.indexOf(\"75\") !== -1) {\n          rb = 1;\n        }\n      }\n      return ra - rb;\n    });\n    $sec = $(document.createElement(\"div\")).addClass(\"tmq-individuals\");\n    $sec.append($(document.createElement(\"span\")).addClass(\"label\").text(\"Get individual miniatures from this set\"));\n    $grid = $(document.createElement(\"div\")).addClass(\"tmq-individuals-grid\");\n    $sec.append($grid);\n    $gal = $(\".woocommerce-product-gallery img\");\n    $modelSel.find(\"option\").each(function () {\n      if (!this.value) {\n        return;\n      }\n      modelVal = this.value;\n      modelLabel = (this.text || modelVal).replace(\/^Choose an option\/i, \"\").trim();\n      if (modelLabel.toLowerCase().indexOf(\"full set\") !== -1) {\n        return;\n      }\n      $art = $(document.createElement(\"article\")).addClass(\"tmq-ind\").attr(\"data-model\", modelVal);\n      slug = modelLabel.toLowerCase().replace(\/\\s+\/g, \"-\");\n      lastWord = modelLabel.toLowerCase().replace(\/^.*\\s\/, \"\");\n      $slugFront = $();\n      $slugHit = $();\n      $wordFront = $();\n      $wordHit = $();\n      $gal.each(function () {\n        var $im = $(this);\n        src = (($im.attr(\"src\") || \"\") + \" \" + ($im.attr(\"data-src\") || \"\") + \" \" + ($im.attr(\"data-large_image\") || \"\")).toLowerCase();\n        alt = ($im.attr(\"alt\") || \"\").toLowerCase();\n        blob = src + \" \" + alt;\n        if (blob.indexOf(slug) !== -1) {\n          if (!$slugHit.length) {\n            $slugHit = $im;\n          }\n          if (src.indexOf(\"-front\") !== -1) {\n            if (!$slugFront.length) {\n              $slugFront = $im;\n            }\n          }\n        }\n        if (lastWord) {\n          if (blob.indexOf(lastWord) !== -1) {\n            if (!$wordHit.length) {\n              $wordHit = $im;\n            }\n            if (src.indexOf(\"-front\") !== -1) {\n              if (!$wordFront.length) {\n                $wordFront = $im;\n              }\n            }\n          }\n        }\n      });\n      $found = $();\n      if ($slugFront.length) {\n        $found = $slugFront;\n      } else {\n        if ($slugHit.length) {\n          $found = $slugHit;\n        } else {\n          if ($wordFront.length) {\n            $found = $wordFront;\n          } else {\n            if ($wordHit.length) {\n              $found = $wordHit;\n            } else {\n              $found = $gal.first();\n            }\n          }\n        }\n      }\n      $img = $(document.createElement(\"img\")).attr(\"alt\", modelLabel);\n      src = \"\";\n      if ($found.length) {\n        src = $found.attr(\"data-large_image\") || \"\";\n        if (!src) {\n          src = $found.attr(\"data-src\") || \"\";\n        }\n        if (!src) {\n          src = $found.attr(\"src\") || \"\";\n        }\n      }\n      if (src) {\n        $img.attr(\"src\", src);\n        $art.append($img);\n      }\n      $h3 = $(document.createElement(\"h3\")).text(modelLabel);\n      $art.append($h3);\n      $btns = $(document.createElement(\"div\")).addClass(\"tmq-ind-btns\");\n      for (si = 0; si !== sizeOpts.length; si++) {\n        sizeVal = sizeOpts[si].val;\n        sizeLabel = (sizeOpts[si].text || sizeVal).replace(\/^Choose an option\/i, \"\").trim();\n        found = null;\n        for (i = 0; i !== variations.length; i++) {\n          a = variations[i].attributes || {};\n          hit = 0;\n          for (k in a) {\n            if (a[k] === sizeVal) {\n              hit = hit + 1;\n            }\n            if (a[k] === modelVal) {\n              hit = hit + 1;\n            }\n          }\n          if (hit > 1) {\n            found = variations[i];\n          }\n        }\n        if (!found) {\n          continue;\n        }\n        price = \"\";\n        if (found.display_price != null) {\n          price = found.display_price;\n        }\n        priceText = \"\";\n        if (price !== \"\") {\n          priceText = \"$\" + Number(price).toFixed(2);\n        }\n        $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-ind-btn\");\n        $btn.attr(\"data-size\", sizeVal);\n        $btn.attr(\"data-model\", modelVal);\n        $btn.attr(\"data-variation\", found.variation_id);\n        $btn.append($(document.createElement(\"span\")).addClass(\"tmq-ind-size\").text(sizeLabel));\n        if (priceText) {\n          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-ind-price\").text(priceText));\n        }\n        $btn.append($(document.createElement(\"span\")).addClass(\"tmq-ind-add\").text(\"Add to cart\"));\n        $btns.append($btn);\n      }\n      $art.append($btns);\n      $grid.append($art);\n    });\n    if (!$grid.children().length) {\n      return;\n    }\n    $host = $(\"div.product .summary\").first();\n    if ($host.length) {\n      $host.after($sec);\n    } else {\n      $host = $(\".woocommerce-product-gallery\").first();\n      if ($host.length) {\n        $host.after($sec);\n      } else {\n        $host = $(\".tmq-below\").first();\n        if ($host.length) {\n          $host.before($sec);\n        }\n      }\n    }\n    $sec.on(\"click\", \".tmq-ind-btn\", function (e) {\n      e.preventDefault();\n      $b = $(this);\n      vid = $b.attr(\"data-variation\");\n      pid = $form.data(\"product_id\");\n      if (!pid) {\n        pid = $form.find(\"input[name=product_id]\").val();\n      }\n      if (!pid) {\n        idAttr = $form.closest(\".product\").attr(\"id\") || \"\";\n        m = String(idAttr).match(\/(\\d+)\/);\n        if (m) {\n          pid = m[1];\n        }\n      }\n      url = \"\/?wc-ajax=add_to_cart\";\n      if (typeof wc_add_to_cart_params !== \"undefined\") {\n        if (wc_add_to_cart_params.wc_ajax_url) {\n          url = wc_add_to_cart_params.wc_ajax_url.replace(\"%%endpoint%%\", \"add_to_cart\");\n        }\n      }\n      if (!vid) {\n        return;\n      }\n      payload = {\n        product_id: vid,\n        variation_id: vid,\n        quantity: 1\n      };\n      if (pid) {\n        payload.parent_id = pid;\n      }\n      found = null;\n      for (i = 0; i !== variations.length; i++) {\n        if (String(variations[i].variation_id) === String(vid)) {\n          found = variations[i];\n        }\n      }\n      if (found) {\n        attrs = found.attributes;\n        if (attrs) {\n          for (k in attrs) {\n            payload[k] = attrs[k];\n            payload[\"variation[\" + k + \"]\"] = attrs[k];\n          }\n        }\n      }\n      $.post(url, payload, function (res) {\n        if (res) {\n          if (res.error) {\n            return;\n          }\n          if (res.fragments) {\n            $.each(res.fragments, function (sel, html) {\n              $(sel).replaceWith(html);\n            });\n          }\n        }\n        if (window.sessionStorage) {\n          sessionStorage.setItem(\"tmqCartBounce\", \"1\");\n        }\n        $(document.body).trigger(\"added_to_cart\");\n      });\n    });\n  }\n  var $form = $(\"form.variations_form\");\n  if ($form.length) {\n    var variations = $form.data(\"product_variations\");\n    if (!variations) {\n      variations = [];\n    }\n    var $sizeSel = $();\n    var $modelSel = $();\n    var grouped = 0;\n    $form.find(\"select\").each(function () {\n      var $s = $(this);\n      var n = ($s.attr(\"name\") || \"\").toLowerCase();\n      if (n.indexOf(\"size\") !== -1) {\n        if (n.indexOf(\"tabletop\") === -1) {\n          $sizeSel = $s;\n        }\n      }\n      if (n.indexOf(\"model\") !== -1) {\n        $modelSel = $s;\n      }\n    });\n    if ($sizeSel.length) {\n      if ($modelSel.length) {\n        grouped = 1;\n      }\n    }\n    if (grouped) {\n      var $box, sizeOpts, modelOpts, setOpts, si, mi, sizeVal, sizeLabel, modelVal, modelLabel, $btn, price, priceText, found, i, a, k, hit, currentSize, currentModel;\n      $sizeSel.addClass(\"tmq-size-native\");\n      $modelSel.addClass(\"tmq-size-native\");\n      $box = $(document.createElement(\"div\")).addClass(\"tmq-size-picks\").attr(\"role\", \"radiogroup\").attr(\"aria-label\", \"Size\");\n      sizeOpts = [];\n      $sizeSel.find(\"option\").each(function () {\n        if (this.value) {\n          sizeOpts.push({ val: this.value, text: this.text || this.value });\n        }\n      });\n      sizeOpts.sort(function (a, b) {\n        var ra, rb, ta, tb;\n        ta = (a.text || \"\").toLowerCase();\n        tb = (b.text || \"\").toLowerCase();\n        ra = 2;\n        rb = 2;\n        if (ta.indexOf(\"32\") !== -1) {\n          ra = 0;\n        } else {\n          if (ta.indexOf(\"75\") !== -1) {\n            ra = 1;\n          }\n        }\n        if (tb.indexOf(\"32\") !== -1) {\n          rb = 0;\n        } else {\n          if (tb.indexOf(\"75\") !== -1) {\n            rb = 1;\n          }\n        }\n        return ra - rb;\n      });\n      modelOpts = [];\n      $modelSel.find(\"option\").each(function () {\n        if (this.value) {\n          modelOpts.push({ val: this.value, text: this.text || this.value });\n        }\n      });\n      setOpts = [];\n      for (mi = 0; mi !== modelOpts.length; mi++) {\n        modelLabel = (modelOpts[mi].text || modelOpts[mi].val).replace(\/^Choose an option\/i, \"\").trim();\n        if (modelLabel.toLowerCase().indexOf(\"full set\") !== -1) {\n          setOpts.push(modelOpts[mi]);\n        }\n      }\n      for (si = 0; si !== sizeOpts.length; si++) {\n        sizeVal = sizeOpts[si].val;\n        sizeLabel = (sizeOpts[si].text || sizeVal).replace(\/^Choose an option\/i, \"\").trim();\n        for (mi = 0; mi !== setOpts.length; mi++) {\n          modelVal = setOpts[mi].val;\n          price = \"\";\n          found = null;\n          for (i = 0; i !== variations.length; i++) {\n            a = variations[i].attributes || {};\n            hit = 0;\n            for (k in a) {\n              if (a[k] === sizeVal) {\n                hit = hit + 1;\n              }\n              if (a[k] === modelVal) {\n                hit = hit + 1;\n              }\n            }\n            if (hit > 1) {\n              found = variations[i];\n            }\n          }\n          if (!found) {\n            continue;\n          }\n          if (found.display_price != null) {\n            price = found.display_price;\n          }\n          priceText = \"\";\n          if (price !== \"\") {\n            priceText = \"$\" + Number(price).toFixed(2);\n          }\n          $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-size-pick\").attr(\"role\", \"radio\").attr(\"aria-checked\", \"false\");\n          $btn.attr(\"data-size\", sizeVal);\n          $btn.attr(\"data-model\", modelVal);\n          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-name\").text(sizeLabel));\n          if (priceText) {\n            $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-price\").text(priceText));\n          }\n          $btn.on(\"click\", function () {\n            var sv = $(this).attr(\"data-size\");\n            var mv = $(this).attr(\"data-model\");\n            $box.find(\".tmq-size-pick\").removeClass(\"is-on\").attr(\"aria-checked\", \"false\");\n            $(this).addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n            $sizeSel.val(sv);\n            $sizeSel.trigger(\"change\");\n            $modelSel.val(mv);\n            $modelSel.trigger(\"change\");\n          });\n          $box.append($btn);\n        }\n      }\n      $form.find(\"select\").last().after($box);\n      currentSize = $sizeSel.val();\n      currentModel = $modelSel.val();\n      if (currentSize) {\n        if (currentModel) {\n          $box.find('.tmq-size-pick[data-size=\"' + currentSize + '\"][data-model=\"' + currentModel + '\"]').addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n        } else {\n          $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n        }\n      } else {\n        $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n      }\n      tmqPackIndividuals($form, variations, $sizeSel, $modelSel);\n    } else {\n      $form.find(\"select\").each(function () {\n        var $sel = $(this);\n        var $box, current, usable;\n        usable = $sel.find(\"option[value]\").filter(function () {\n          return this.value;\n        });\n        if (!(usable.length >= 1)) {\n          return;\n        }\n        $sel.addClass(\"tmq-size-native\");\n        $box = $(document.createElement(\"div\")).addClass(\"tmq-size-picks\").attr(\"role\", \"radiogroup\").attr(\"aria-label\", \"Size\");\n        $sel.find(\"option\").each(function () {\n          var val = this.value;\n          var label, price, priceText, $btn, i, a, k;\n          if (!val) {\n            return;\n          }\n          label = (this.text || val).replace(\/^Choose an option\/i, \"\").trim();\n          price = \"\";\n          for (i = 0; i !== variations.length; i++) {\n            a = variations[i].attributes || {};\n            for (k in a) {\n              if (a[k] === val) {\n                if (variations[i].display_price != null) {\n                  price = variations[i].display_price;\n                }\n              }\n            }\n          }\n          priceText = \"\";\n          if (price !== \"\") {\n            priceText = \"$\" + Number(price).toFixed(2);\n          }\n          $btn = $(document.createElement(\"button\")).attr(\"type\", \"button\").addClass(\"tmq-size-pick\").attr(\"role\", \"radio\").attr(\"aria-checked\", \"false\");\n          $btn.attr(\"data-value\", val);\n          $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-name\").text(label));\n          if (priceText) {\n            $btn.append($(document.createElement(\"span\")).addClass(\"tmq-size-price\").text(priceText));\n          }\n          $btn.on(\"click\", function () {\n            $box.find(\".tmq-size-pick\").removeClass(\"is-on\").attr(\"aria-checked\", \"false\");\n            $(this).addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n            $sel.val(val).trigger(\"change\");\n          });\n          $box.append($btn);\n        });\n        $sel.after($box);\n        current = $sel.val();\n        if (current) {\n          $box.find('[data-value=\"' + current + '\"]').addClass(\"is-on\").attr(\"aria-checked\", \"true\");\n        } else {\n          $box.find(\".tmq-size-pick\").first().trigger(\"click\");\n        }\n      });\n    }\n  }\n  var paintHref = \"https:\/\/miniquasar.com\/contact\/\";\n  var paintHtml = $(document.createElement(\"a\")).addClass(\"tmq-paint-link\").attr(\"href\", paintHref).text(\"Inquire about Painted Miniatures\");\n  var $after;\n  if ($sum.length) {\n    if (!$sum.find(\".tmq-paint-link\").length) {\n      $after = $sum.find(\".tmq-size-picks\").first();\n      if ($after.length) {\n        $after.after(paintHtml);\n      } else {\n        $sum.find(\"form.cart\").before(paintHtml);\n      }\n    }\n  }\n});\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unpainted 16K resin miniatures. Set of 3. 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 Dire End<\/h3>\n<p>This miniature belongs to The Dire End.<\/p>\n<p><a class=\"tmq-set-link\" href=\"https:\/\/miniquasar.com\/campaigns\/the-dire-end\/\">View the set<\/a><\/div>\n","protected":false},"featured_media":1427,"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,95],"product_tag":[],"class_list":["post-1424","product","type-product","status-publish","has-post-thumbnail","product_cat-individual-minis","product_cat-the-dire-end","pa_gender-other","pa_mini-type-monster","pa_race-aberration","pa_set-the-dire-end","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\/1424","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=1424"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media\/1427"}],"wp:attachment":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media?parent=1424"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_brand?post=1424"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_cat?post=1424"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_tag?post=1424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}