{"product_id":"12x18-political-yard-signs-same-day-printing-in-waldorf-md-express-signs-dmv","title":"12x18 Yard Signs | Custom Printing in Waldorf MD | Express Signs DMV","description":"\u003cstyle\u003e\n\/* ===== Calculator-only view (hide Dawn default buy box) ===== *\/\n.product__info-wrapper,\n.product__info-container,\n.product-form,\n.product__info-container form,\nform[action=\"\/cart\/add\"] { display:none !important; }\n\n@media (min-width: 750px){\n  .product__media-wrapper, .product__media { width:100% !important; max-width:100% !important; }\n}\n\n\/* ===== Calculator styles ===== *\/\n:root{\n  --es-blue:#2c6ecb;\n  --es-blue2:#1e4d8b;\n  --es-red:#d62828;\n  --es-gray:#6c757d;\n  --es-border:#d9e3f2;\n  --es-soft:#f7f9fc;\n}\n\n.es-wrap{max-width:1200px;margin:30px auto;padding:0 18px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:#1d1d1f}\n.es-card{background:#fff;border:2px solid var(--es-blue);border-radius:14px;padding:22px}\n.es-title{margin:0 0 18px;font-size:28px;font-weight:900;color:var(--es-blue);text-align:center}\n.es-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px}\n@media(max-width:900px){.es-grid{grid-template-columns:1fr}}\n\n.es-group{margin-bottom:18px}\n.es-label{display:block;margin:0 0 8px;font-weight:800;color:var(--es-blue);font-size:15px}\n.es-input,.es-select{\n  width:100%;padding:12px 12px;border:2px solid #ddd;border-radius:10px;font-size:16px;background:#fff\n}\n.es-input:focus,.es-select:focus{outline:none;border-color:var(--es-blue)}\n\n.es-checkrow{display:flex;align-items:center;gap:10px;margin:10px 0}\n.es-checkrow input{width:20px;height:20px}\n.es-note{font-size:13px;color:#666;margin:2px 0 0 30px}\n\n.es-summary{background:var(--es-soft);border:2px solid var(--es-border);border-radius:12px;padding:18px}\n.es-line{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid #e3e7ee}\n.es-line:last-child{border-bottom:none}\n.es-total{\n  font-size:30px;font-weight:900;color:var(--es-blue);text-align:center;\n  padding:18px;background:#fff;border-radius:12px;margin:16px 0\n}\n.es-per{font-size:15px;color:#666;text-align:center;margin:-6px 0 14px}\n\n.es-btns{display:flex;flex-direction:column;gap:10px}\n.es-btn{\n  display:block;text-align:center;text-decoration:none;border:none;cursor:pointer;\n  padding:14px 18px;border-radius:10px;font-weight:900;font-size:16px;\n  transition:.15s transform,.15s box-shadow,.15s background\n}\n.es-btn:active{transform:scale(.99)}\n.es-btn-primary{background:var(--es-blue);color:#fff}\n.es-btn-primary:hover{background:var(--es-blue2);box-shadow:0 10px 20px rgba(44,110,203,.22)}\n.es-btn-secondary{background:var(--es-gray);color:#fff}\n.es-btn-secondary:hover{background:#565e64}\n.es-notice{\n  background:#e7f3ff;border:2px solid var(--es-blue);border-radius:12px;\n  padding:12px;margin-top:12px;color:var(--es-blue2);font-size:13px;text-align:center\n}\n\n\/* ===== Need anything else section ===== *\/\n.es-need{max-width:1200px;margin:26px auto 0;padding:0 18px}\n.es-needbox{background:#f6f7f9;border-radius:16px;padding:28px 18px;text-align:center}\n.es-needbox h3{margin:0 0 10px;font-size:34px;color:var(--es-blue);font-weight:900}\n.es-needbox p{margin:0 0 18px;color:#555;font-size:18px;line-height:1.4}\n.es-needgrid{display:grid;grid-template-columns:1fr;gap:12px;max-width:720px;margin:0 auto}\n.es-redbtn{background:var(--es-red);color:#fff;border-radius:14px;padding:18px 16px;font-weight:900;font-size:20px;text-decoration:none;display:block}\n.es-redbtn:hover{filter:brightness(.95)}\n.es-bluebtn{background:#2f6fcd;color:#fff;border-radius:14px;padding:18px 16px;font-weight:900;font-size:20px;text-decoration:none;display:block}\n.es-bluebtn:hover{filter:brightness(.95)}\n\u003c\/style\u003e\n\n\u003cdiv class=\"es-wrap\"\u003e\n  \u003cdiv class=\"es-card\"\u003e\n    \u003ch2 class=\"es-title\"\u003eYard Sign Pricing Calculator\u003c\/h2\u003e\n\n    \u003cdiv class=\"es-grid\"\u003e\n      \u003c!-- LEFT --\u003e\n      \u003cdiv\u003e\n        \u003cdiv class=\"es-group\"\u003e\n          \u003clabel class=\"es-label\" for=\"ysSize\"\u003eSign Size\u003c\/label\u003e\n          \u003cselect class=\"es-select\" id=\"ysSize\"\u003e\n            \u003coption value=\"12x18\"\u003e12×18 Yard Signs\u003c\/option\u003e\n            \u003coption value=\"18x24\"\u003e18×24 Yard Signs\u003c\/option\u003e\n            \u003coption value=\"36x24\"\u003e36×24 Yard Signs\u003c\/option\u003e\n          \u003c\/select\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"es-group\"\u003e\n          \u003clabel class=\"es-label\" for=\"ysQty\"\u003eQuantity\u003c\/label\u003e\n          \u003cinput class=\"es-input\" id=\"ysQty\" type=\"number\" min=\"1\" value=\"1\" inputmode=\"numeric\"\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"es-group\"\u003e\n          \u003clabel class=\"es-label\"\u003eAdd-Ons\u003c\/label\u003e\n\n          \u003cdiv class=\"es-checkrow\"\u003e\n            \u003cinput type=\"checkbox\" id=\"ysDouble\"\u003e\n            \u003clabel for=\"ysDouble\" style=\"font-weight:700;\"\u003eDouble-Sided (+$\u003cspan id=\"ysDoubleEach\"\u003e0\u003c\/span\u003e\/sign)\u003c\/label\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"es-checkrow\"\u003e\n            \u003cinput type=\"checkbox\" id=\"ysStakeOn\" checked\u003e\n            \u003clabel for=\"ysStakeOn\" style=\"font-weight:700;\"\u003eInclude H-Stakes (+$2 each)\u003c\/label\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"es-checkrow\" style=\"margin-left:28px;\"\u003e\n            \u003cinput type=\"checkbox\" id=\"ysStakeAuto\" checked\u003e\n            \u003clabel for=\"ysStakeAuto\" style=\"font-weight:700;\"\u003eMatch stake quantity to sign quantity\u003c\/label\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"es-group\" style=\"margin-left:28px;\"\u003e\n            \u003clabel class=\"es-label\" for=\"ysStakeQty\" style=\"margin-top:10px;\"\u003eStake Quantity\u003c\/label\u003e\n            \u003cinput class=\"es-input\" id=\"ysStakeQty\" type=\"number\" min=\"0\" value=\"1\" inputmode=\"numeric\"\u003e\n            \u003cdiv class=\"es-note\"\u003eA sign only needs \u003cstrong\u003eone\u003c\/strong\u003e stake.\u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"es-group\"\u003e\n          \u003clabel class=\"es-label\" for=\"ysRush\"\u003eProduction Speed\u003c\/label\u003e\n          \u003cselect class=\"es-select\" id=\"ysRush\"\u003e\n            \u003coption value=\"standard\" data-fee=\"0\"\u003eStandard (2–3 Days) — FREE\u003c\/option\u003e\n            \u003coption value=\"next\" data-fee=\"25\"\u003eNext Day Pickup (+$25)\u003c\/option\u003e\n            \u003coption value=\"same\" data-fee=\"50\"\u003eSame Day Pickup (+$50) — order before 10AM\u003c\/option\u003e\n          \u003c\/select\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- RIGHT SUMMARY --\u003e\n      \u003cdiv class=\"es-summary\"\u003e\n        \u003cdiv class=\"es-line\"\u003e\n\u003cspan\u003eBase price\u003c\/span\u003e\u003cspan id=\"ysBase\"\u003e$0.00\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"es-line\" id=\"ysDoubleLine\" style=\"display:none;\"\u003e\n\u003cspan\u003eDouble-sided\u003c\/span\u003e\u003cspan id=\"ysDoublePrice\"\u003e$0.00\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"es-line\" id=\"ysStakeLine\" style=\"display:none;\"\u003e\n\u003cspan\u003eH-stakes\u003c\/span\u003e\u003cspan id=\"ysStakePrice\"\u003e$0.00\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"es-line\" id=\"ysRushLine\"\u003e\n\u003cspan\u003eProduction speed\u003c\/span\u003e\u003cspan id=\"ysRushPrice\"\u003e$0.00\u003c\/span\u003e\n\u003c\/div\u003e\n\n        \u003cdiv class=\"es-total\"\u003eTotal: $\u003cspan id=\"ysTotal\"\u003e0.00\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"es-per\" id=\"ysPer\"\u003ePrice per sign: $0.00\u003c\/div\u003e\n\n        \u003cdiv class=\"es-btns\"\u003e\n          \u003ca class=\"es-btn es-btn-primary\" id=\"ysCheckoutBtn\" href=\"#\"\u003eHave Artwork \/ Checkout\u003c\/a\u003e\n          \u003ca class=\"es-btn es-btn-secondary\" href=\"\/pages\/templates\"\u003eBrowse Templates\u003c\/a\u003e\n          \u003ca class=\"es-btn es-btn-secondary\" href=\"\/pages\/design-help\"\u003eTalk to a Graphic Artist\u003c\/a\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"es-notice\"\u003e\n          After checkout, you’ll receive instructions to upload your artwork.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- Need Anything Else --\u003e\n\u003cdiv class=\"es-need\"\u003e\n  \u003cdiv class=\"es-needbox\"\u003e\n    \u003ch3\u003eNeed Anything Else?\u003c\/h3\u003e\n    \u003cp\u003eWe also offer embroidery, screen printing, promotional products and more.\u003c\/p\u003e\n\n    \u003cdiv class=\"es-needgrid\"\u003e\n      \u003ca class=\"es-redbtn\" href=\"\/pages\/embroidery\"\u003eEmbroidery\u003c\/a\u003e\n      \u003ca class=\"es-redbtn\" href=\"\/pages\/screen-printing\"\u003eScreen Printing\u003c\/a\u003e\n      \u003ca class=\"es-redbtn\" href=\"\/pages\/promotional-products\"\u003ePromotional Products\u003c\/a\u003e\n      \u003ca class=\"es-bluebtn\" href=\"\/pages\/contact\"\u003eContact Us\u003c\/a\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  const $ = (id)=\u003edocument.getElementById(id);\n  const money = (n)=\u003e (Math.round((n+Number.EPSILON)*100)\/100).toFixed(2);\n\n  \/* ===== YOUR YARD SIGN TIER PRICING (per sign) ===== *\/\n  const TIERS = {\n    \"12x18\": [\n      {min:1,  max:9,   each:15},\n      {min:10, max:24,  each:10},\n      {min:25, max:49,  each:7},\n      {min:50, max:99,  each:5},\n      {min:100,max:249, each:4},\n      {min:250,max:999999, each:3}\n    ],\n    \"18x24\": [\n      {min:1,  max:9,   each:25},\n      {min:10, max:24,  each:15},\n      {min:25, max:49,  each:12},\n      {min:50, max:99,  each:8},\n      {min:100,max:249, each:6},\n      {min:250,max:999999, each:5}\n    ],\n    \"36x24\": [\n      {min:1,  max:4,   each:45},\n      {min:5,  max:9,   each:35},\n      {min:10, max:24,  each:25},\n      {min:25, max:49,  each:18},\n      {min:50, max:999999, each:12}\n    ]\n  };\n\n  \/* ===== Add-ons (YOUR PRICING) ===== *\/\n  const DOUBLE_EACH = {\"12x18\":2, \"18x24\":3, \"36x24\":7};\n  const STAKE_EACH = 2; \/\/ YOU said $2 each\n  const RUSH_FEE = {standard:0, next:25, same:50}; \/\/ per order\n\n  \/* ===== Size -\u003e product page URLs (for correct checkout page) ===== *\/\n  const URLS = {\n    \"12x18\":\"https:\/\/expresssignsdmv.myshopify.com\/products\/12x18-political-yard-signs-same-day-printing-in-waldorf-md-express-signs-dmv\",\n    \"18x24\":\"https:\/\/expresssignsdmv.myshopify.com\/products\/18x24-yard-signs-same-day-printing-in-waldorf-md-express-signs-dmv\",\n    \"36x24\":\"https:\/\/expresssignsdmv.myshopify.com\/products\/36x24-yard-signs-same-day-printing-in-waldorf-md-express-signs-dmv\"\n  };\n\n  \/* ===== Default size based on which page you're on ===== *\/\n  const path = window.location.pathname;\n  const defaultSize =\n    path.includes(\"12x18\") ? \"12x18\" :\n    path.includes(\"18x24\") ? \"18x24\" :\n    path.includes(\"36x24\") ? \"36x24\" : \"18x24\";\n\n  $(\"ysSize\").value = defaultSize;\n\n  function tierEach(size, qty){\n    const list = TIERS[size] || [];\n    return (list.find(t=\u003eqty\u003e=t.min \u0026\u0026 qty\u003c=t.max) || {each:0}).each;\n  }\n\n  function syncStakeQty(){\n    const qty = Math.max(1, parseInt($(\"ysQty\").value||\"1\",10));\n    $(\"ysQty\").value = qty;\n\n    const stakeOn = $(\"ysStakeOn\").checked;\n    const auto = $(\"ysStakeAuto\").checked;\n\n    $(\"ysStakeAuto\").disabled = !stakeOn;\n    $(\"ysStakeQty\").disabled = !stakeOn;\n\n    if(!stakeOn){\n      $(\"ysStakeQty\").value = 0;\n      return;\n    }\n    if(auto){\n      $(\"ysStakeQty\").value = qty; \/\/ 1 stake per sign\n    }else{\n      const v = Math.max(0, parseInt($(\"ysStakeQty\").value||\"0\",10));\n      $(\"ysStakeQty\").value = v;\n    }\n  }\n\n  function calc(){\n    syncStakeQty();\n\n    const size = $(\"ysSize\").value;\n    const qty = Math.max(1, parseInt($(\"ysQty\").value||\"1\",10));\n    const each = tierEach(size, qty);\n\n    const base = each * qty;\n\n    \/\/ double\n    const dblOn = $(\"ysDouble\").checked;\n    const dblEach = DOUBLE_EACH[size] || 0;\n    $(\"ysDoubleEach\").textContent = dblEach;\n    const dblCost = dblOn ? dblEach * qty : 0;\n    $(\"ysDoubleLine\").style.display = dblOn ? \"flex\" : \"none\";\n    $(\"ysDoublePrice\").textContent = \"$\" + money(dblCost);\n\n    \/\/ stakes\n    const stakeOn = $(\"ysStakeOn\").checked;\n    const stakeQty = Math.max(0, parseInt($(\"ysStakeQty\").value||\"0\",10));\n    const stakeCost = stakeOn ? (stakeQty * STAKE_EACH) : 0;\n    $(\"ysStakeLine\").style.display = stakeOn ? \"flex\" : \"none\";\n    $(\"ysStakePrice\").textContent = \"$\" + money(stakeCost);\n\n    \/\/ rush\n    const rush = $(\"ysRush\").value;\n    const rushCost = RUSH_FEE[rush] || 0;\n    $(\"ysRushPrice\").textContent = \"$\" + money(rushCost);\n\n    const total = base + dblCost + stakeCost + rushCost;\n    const per = total \/ qty;\n\n    $(\"ysBase\").textContent = \"$\" + money(base);\n    $(\"ysTotal\").textContent = money(total);\n    $(\"ysPer\").textContent = \"Price per sign: $\" + money(per);\n\n    \/\/ checkout button goes to correct product page\n    $(\"ysCheckoutBtn\").href = (URLS[size] || \"#\");\n  }\n\n  \/\/ Rush warning (optional): same-day before 10AM\n  function rushRules(){\n    const rush = $(\"ysRush\").value;\n    if(rush === \"same\"){\n      const hr = new Date().getHours();\n      if(hr \u003e= 10){\n        $(\"ysRush\").value = \"standard\";\n      }\n    }\n  }\n\n  [\"ysSize\",\"ysQty\",\"ysDouble\",\"ysStakeOn\",\"ysStakeAuto\",\"ysStakeQty\",\"ysRush\"].forEach(id=\u003e{\n    $(id).addEventListener(\"input\", ()=\u003e{rushRules(); calc();});\n    $(id).addEventListener(\"change\", ()=\u003e{rushRules(); calc();});\n  });\n\n  calc();\n})();\n\u003c\/script\u003e","brand":"Express Signs DMV","offers":[{"title":"1-9","offer_id":43249326260283,"sku":null,"price":15.0,"currency_code":"USD","in_stock":true},{"title":"10-24","offer_id":43249326293051,"sku":null,"price":10.0,"currency_code":"USD","in_stock":true},{"title":"25-49","offer_id":43249326325819,"sku":null,"price":7.0,"currency_code":"USD","in_stock":true},{"title":"50-99","offer_id":43249326358587,"sku":null,"price":5.0,"currency_code":"USD","in_stock":true},{"title":"100-249","offer_id":43249326391355,"sku":null,"price":4.0,"currency_code":"USD","in_stock":true},{"title":"250+","offer_id":43249326424123,"sku":null,"price":3.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0655\/6781\/7787\/files\/Voting_Center_Signs-main.png?v=1769236656","url":"https:\/\/expresssignsdmv.com\/products\/12x18-political-yard-signs-same-day-printing-in-waldorf-md-express-signs-dmv","provider":"Express Signs DMV","version":"1.0","type":"link"}