{"id":1657,"date":"2026-09-02T20:04:32","date_gmt":"2026-09-03T00:04:32","guid":{"rendered":"https:\/\/miniquasar.com\/?post_type=product&#038;p=1657"},"modified":"2026-09-15T05:34:08","modified_gmt":"2026-09-15T09:34:08","slug":"the-progressed","status":"publish","type":"product","link":"https:\/\/miniquasar.com\/us\/product\/the-progressed\/","title":{"rendered":"The Progressed \u2013 Dragonblight Stricken Students"},"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 Progressed \u2013 Dragonblight Stricken Students<\/h2>\n<p>Students that have become unintentionally stricken with Dragonblight during classes with Professor Frederik Vahlen. Rather than attempt to cure them (and since there is no known cure), the professor has instead confined the students to a secret chamber beneath the University. There he has studied them, attempting to alter the strain of the plague to unlock its psionic potential, without harming the hosts. It is in this hope, that he could potentially unlock the latent psionic powers that exist in all humans, and the memories of their past lives.<\/p>\n<p>The University of Ardris has undergone a spate of strange disappearances in recent weeks, with a total of six students going missing in six weeks. Whilst the Proctors desperately search for them, there are no apparent threads tying them all together. In truth, they are all students of Professor Vahlen, or members of House Aurveil, who have come into regular contact with him. Having contracted Dragonblight inadvertently from his altered strain, the Professor is forced to clandestinely abduct them before their symptoms come to light.<\/p>\n<p>Each of them now lies in the depths of the vaults beneath Noxas Block, many beginning to forget their life as students, or falling into a stupor as they still believe themselves to be in class. With their minds so quickly eroding, they are growing more hostile, with the most progressed students now attacking any potential foes on sight, with strength to tear their limbs from their sockets. Due to the nature of Dragonblight, they do not harm each other, and those who are less progressed may be outwitted before they are forced into a fight.<\/p>\n<\/section>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The set<\/span><\/p>\n<p>The University of Canos is one of the oldest and most prestigious arcane institutions on the continent of Tharador. It is a vessel for transforming raw, unrefined magic-users into elite mages, either of the court or lab, whilst some paths also exist for those who intend to use magic in creative pursuits. It is currently rebuilding itself, two years after Dragonblight tore it down. Whilst campus life continues in a strange, quiet peace, something sinister stirs within. Students continue to go missing, and the staff are turning to desperate measures to find out why.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-arcane-university\/\"><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\/au-release-tmq.png\" alt=\"The Arcane University set\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/au-set-minis.jpg\" alt=\"The Arcane University miniatures\"><\/span><\/a><\/figure>\n<div class=\"tmq-reveal-head\"><span class=\"kicker\">The campaign<\/span><\/p>\n<p>In The Arcane University the party must enter the University of Canos undercover as students, investigating a series of mysterious disappearances with six students currently missing in the school. Only her and one other investigating staff member are aware of their status, and the party will have to go through all the highs and lows of life at the Arcane University to immerse themselves in their roles, and uncover what has happened to the missing students.<\/p>\n<\/div>\n<figure class=\"tmq-reveal\"><a class=\"tmq-reveal-card\" href=\"https:\/\/miniquasar.com\/campaigns\/the-arcane-university\/\"><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-au-cover.png\" alt=\"The Arcane University campaign\"><img decoding=\"async\" class=\"tmq-reveal-b\" loading=\"eager\" width=\"420\" height=\"420\" src=\"https:\/\/miniquasar.com\/wp-content\/uploads\/2026\/09\/au-open-book.png\" alt=\"The Arcane University 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 in Canada.<\/p>\n<p class=\"tmq-chips\"><span>Monster<\/span><span>Aberration<\/span><span>Normal<\/span><\/p>\n<div class=\"tmq-set\"><span class=\"label\">Campaign set<\/span><\/p>\n<h3>The Arcane University<\/h3>\n<p><a class=\"tmq-set-link\" href=\"https:\/\/miniquasar.com\/campaigns\/the-arcane-university\/\">View the set<\/a><\/div>\n","protected":false},"featured_media":1666,"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,97],"product_tag":[],"class_list":["post-1657","product","type-product","status-publish","has-post-thumbnail","product_cat-individual-minis","product_cat-the-arcane-university","pa_gender-other","pa_mini-type-monster","pa_race-aberration","pa_set-the-arcane-university","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\/1657","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=1657"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media\/1666"}],"wp:attachment":[{"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/media?parent=1657"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_brand?post=1657"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_cat?post=1657"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/miniquasar.com\/us\/wp-json\/wp\/v2\/product_tag?post=1657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}