{"id":2297,"date":"2026-09-12T12:30:26","date_gmt":"2026-09-12T16:30:26","guid":{"rendered":"https:\/\/miniquasar.com\/?post_type=product&#038;p=2297"},"modified":"2026-10-01T08:06:58","modified_gmt":"2026-10-01T12:06:58","slug":"vessels-of-irinax","status":"publish","type":"product","link":"https:\/\/miniquasar.com\/us\/product\/vessels-of-irinax\/","title":{"rendered":"Vessels of Irinax \u2013 Elite Drow Soldiers"},"content":{"rendered":"<div class=\"tmq-below\">\n<div class=\"tmq-story\">\n<section>\n      <span class=\"label\">The full story<\/span><\/p>\n<h2>Vessels of Irinax \u2013 Elite Drow Soldiers<\/h2>\n<p>Irinax\u2019s most elite soldiers are hand-picked from the various cohorts of youthful warriors in Iriksha. Any who stand out beyond the chaff of their mundane counterparts. Those who are chosen undergo a rigorous transformation, consuming the potent ichor of a Dragonspider. One in five survive the process. Those that do are empowered with abilities far beyond any of their kin. Reflexes, strength, agility and speed that far exceed the body of a regular Drow, no matter their training. A single Vessel of Irinax is able to withstand a battle against three Glanbelite warriors.<\/p>\n<p>Yet, it does not come without a cost. From consuming the ichor, the hourglass turns for the days remaining for the Vessels of Irinax. For some, it may take years before the ichor claims their body. For others, it may only be weeks. The signs are never clear until only days before, as they move from completely healthy to standing upon death\u2019s door in less than a day. When these symptoms appear, with blackened eyes and lesions over the skin, their commanders quickly make a decision for what to do with them. Some are sent on suicide missions, desperate attempts to spend their final hours in glory to Irinax. Others are sacrificed, fed to the same Dragonspider from which their ichor was extracted, renewing the cycle. Few Vessels of Irinax have met their ends peacefully in bed.<\/p>\n<\/section>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The set<\/span><\/p>\n<p>The Drow of Lo Fuin have long been a secluded people, owing to the deadly nature of their homeland. In recent years, the Glanbelite Moon Drow have open limited contact with outsiders in the expeditionary outpost of Zander\u2019s Peril, but that has suddenly ceased. A schism is brewing within the ranks of the Moon Drow, and they suspect outside influence to be the cause, be it the Overworlders, or their Irinaxi Spider kin. Either way, they are now at each other\u2019s throats, and peace is carefully balanced on a knife\u2019s edge.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/schism-of-the-drow\/\"><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\/drow-release-tmq.png\" alt=\"Schism of the Drow set\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/schism-set-minis.png\" alt=\"Schism of the Drow miniatures\"><\/span><\/a><\/figure>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The campaign<\/span><\/p>\n<p>In Schism of the Drow the party undertakes a quest that no other adventurers at Zander\u2019s Peril dare: to escort a conjurer through the deathly swamps of Lo Fuin to the Glanbelite Drow city of Hirika. Whilst the journey itself is seen as nigh-suicidal with the friendly Drow no longer tending the route, finding entry to the city may be almost as difficult. If the party does manage to make it inside, they will find that tensions within the ranks of the Glanbelite Drow are bubbling, and the fabric of their once-peaceful society is beginning to unravel.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/schism-of-the-drow\/\"><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-drow-cover-logo.png\" alt=\"Schism of the Drow campaign\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/schism-open-book-1.png\" alt=\"Schism of the Drow 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\").hide();\n      $modelSel.addClass(\"tmq-size-native\").hide();\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\").hide();\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 in Canada.<\/p>\n<p class=\"tmq-chips\"><span>Humanoid<\/span><span>Drow<\/span><span>Normal<\/span><\/p>\n<div class=\"tmq-set\"><span class=\"label\">Campaign set<\/span><\/p>\n<h3>Schism of the Drow<\/h3>\n<p><a class=\"tmq-set-link\" href=\"https:\/\/miniquasar.com\/campaigns\/schism-of-the-drow\/\">View the set<\/a><\/div>\n","protected":false},"featured_media":2306,"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":[111],"product_tag":[],"class_list":["post-2297","product","type-product","status-publish","has-post-thumbnail","product_cat-schism-of-the-drow","pa_class-fighter","pa_class-ranger","pa_class-rogue","pa_gender-other","pa_mini-type-humanoid","pa_race-drow","pa_race-elf","pa_set-schism-of-the-drow","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\/2297","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=2297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media\/2306"}],"wp:attachment":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media?parent=2297"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_brand?post=2297"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_cat?post=2297"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_tag?post=2297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}