{"product_id":"heavy-duty-cutting-tool","title":"18″ Heavy Duty Cr-V Bolt Cutter","description":"\u003cstyle\u003e\n  .product-trade-sheet {\n    --pts-bg: #ffffff;\n    --pts-surface: #ffffff;\n    --pts-soft: #f6f6f4;\n    --pts-text: #111111;\n    --pts-muted: #5a5a5a;\n    --pts-accent: #f26522;\n    --pts-accent-soft: #fff2e8;\n    --pts-line: #dfdfdb;\n    --pts-inverse: #ffffff;\n\n    width: 100%;\n    max-width: 100%;\n    color: var(--pts-text);\n    background: var(--pts-bg);\n\n    font-family:\n      -apple-system,\n      BlinkMacSystemFont,\n      \"Segoe UI\",\n      Arial,\n      sans-serif;\n\n    font-size: 14px;\n    line-height: 1.7;\n\n    container-type: inline-size;\n  }\n\n  .product-trade-sheet *,\n  .product-trade-sheet *::before,\n  .product-trade-sheet *::after {\n    box-sizing: border-box;\n  }\n\n  .product-trade-sheet p,\n  .product-trade-sheet h2 {\n    margin: 0;\n  }\n\n  .product-trade-sheet button,\n  .product-trade-sheet input {\n    font: inherit;\n  }\n\n\n  \/* =========================================================\n     PRODUCT OVERVIEW\n  ========================================================= *\/\n\n  .pts-hero {\n    width: 100%;\n    border-top: 4px solid var(--pts-accent);\n    border-bottom: 1px solid var(--pts-line);\n    background: var(--pts-surface);\n  }\n\n  .pts-hero-copy {\n    width: 100%;\n    padding: clamp(30px, 5cqw, 58px);\n    background: var(--pts-surface);\n  }\n\n  .pts-eyebrow {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n\n    margin-bottom: 18px;\n\n    color: var(--pts-accent);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1;\n    letter-spacing: 0.16em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-eyebrow::before {\n    content: \"\";\n    width: 34px;\n    height: 2px;\n    background: var(--pts-accent);\n  }\n\n\n  \/* =========================================================\n     PRODUCT TITLE\n  ========================================================= *\/\n\n  .pts-product-title {\n    width: 100%;\n    max-width: 980px;\n\n    margin: 0 0 24px !important;\n\n    color: var(--pts-text);\n\n    font-size: clamp(30px, 5.2cqw, 48px);\n    font-weight: 800;\n    line-height: 1.07;\n    letter-spacing: -0.045em;\n  }\n\n  .pts-intro {\n    width: 100%;\n    max-width: 980px;\n\n    color: var(--pts-muted);\n\n    font-size: clamp(15px, 2cqw, 18px);\n    line-height: 1.85;\n  }\n\n\n  \/* =========================================================\n     TOP STATISTICS\n  ========================================================= *\/\n\n  .pts-hero-aside {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n\n    width: 100%;\n\n    border-top: 1px solid var(--pts-line);\n\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-stat {\n    position: relative;\n\n    min-width: 0;\n    min-height: 126px;\n\n    padding: 20px;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n\n    border-right: 1px solid var(--pts-line);\n\n    background: var(--pts-accent-soft);\n\n    overflow: hidden;\n\n    transition:\n      background-color 0.25s ease,\n      padding-left 0.25s ease;\n  }\n\n  .pts-stat:last-child {\n    border-right: 0;\n  }\n\n  .pts-stat::after {\n    content: \"\";\n\n    position: absolute;\n    left: 0;\n    bottom: 0;\n\n    width: 0;\n    height: 3px;\n\n    background: var(--pts-accent);\n\n    transition: width 0.3s ease;\n  }\n\n  .pts-stat:hover {\n    padding-left: 24px;\n    background: #ffffff;\n  }\n\n  .pts-stat:hover::after {\n    width: 100%;\n  }\n\n  .pts-stat-label {\n    display: block;\n\n    color: var(--pts-muted);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1.4;\n    letter-spacing: 0.14em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-stat-value {\n    display: block;\n\n    margin-top: 22px;\n\n    color: var(--pts-text);\n\n    font-size: clamp(22px, 4cqw, 32px);\n    font-weight: 780;\n    line-height: 1;\n    letter-spacing: -0.035em;\n  }\n\n  .pts-stat-value small {\n    display: block;\n\n    margin-top: 8px;\n\n    color: var(--pts-muted);\n\n    font-size: 11px;\n    font-weight: 600;\n    line-height: 1.4;\n    letter-spacing: 0;\n  }\n\n\n  \/* =========================================================\n     PURCHASE PANEL\n  ========================================================= *\/\n\n  .pts-purchase-panel {\n    width: 100%;\n\n    padding: 18px;\n\n    border-bottom: 1px solid var(--pts-line);\n\n    background: var(--pts-soft);\n  }\n\n  .pts-purchase-card {\n    width: 100%;\n\n    border: 1px solid var(--pts-line);\n\n    background: #ffffff;\n  }\n\n  .pts-purchase-main {\n    display: grid;\n\n    grid-template-columns:\n      minmax(210px, 0.85fr)\n      minmax(190px, 0.75fr)\n      minmax(250px, 1.15fr);\n\n    width: 100%;\n    min-height: 118px;\n  }\n\n\n  \/* =========================================================\n     QUANTITY\n  ========================================================= *\/\n\n  .pts-purchase-quantity {\n    min-width: 0;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n\n    padding: 20px 22px;\n\n    border-right: 1px solid var(--pts-line);\n\n    background: #ffffff;\n  }\n\n  .pts-purchase-label {\n    display: block;\n\n    margin-bottom: 11px;\n\n    color: var(--pts-muted);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1.4;\n    letter-spacing: 0.13em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-quantity-selector {\n    display: grid;\n\n    grid-template-columns:\n      44px\n      82px\n      44px;\n\n    width: max-content;\n    height: 48px;\n\n    border: 1px solid var(--pts-line);\n\n    background: #ffffff;\n  }\n\n  .pts-quantity-button {\n    appearance: none;\n    -webkit-appearance: none;\n\n    width: 44px;\n    height: 46px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    margin: 0;\n    padding: 0;\n\n    border: 0;\n    border-radius: 0;\n\n    background: #ffffff;\n    color: var(--pts-text);\n\n    cursor: pointer;\n\n    font-size: 20px;\n    font-weight: 500;\n    line-height: 1;\n\n    transition:\n      background-color 0.2s ease,\n      color 0.2s ease;\n  }\n\n  .pts-quantity-button:hover:not(:disabled) {\n    background: var(--pts-accent);\n    color: #ffffff;\n  }\n\n  .pts-quantity-button:disabled {\n    cursor: not-allowed;\n\n    background: var(--pts-soft);\n    color: #b9b9b5;\n  }\n\n  .pts-quantity-input {\n    appearance: textfield;\n    -moz-appearance: textfield;\n\n    width: 82px;\n    height: 46px;\n\n    margin: 0;\n    padding: 0 6px;\n\n    border-top: 0;\n    border-bottom: 0;\n    border-left: 1px solid var(--pts-line);\n    border-right: 1px solid var(--pts-line);\n\n    border-radius: 0;\n\n    outline: none;\n\n    background: #ffffff;\n    color: var(--pts-text);\n\n    text-align: center;\n\n    font-size: 16px;\n    font-weight: 800;\n    line-height: 46px;\n  }\n\n  .pts-quantity-input:focus {\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-quantity-input::-webkit-inner-spin-button,\n  .pts-quantity-input::-webkit-outer-spin-button {\n    margin: 0;\n    -webkit-appearance: none;\n  }\n\n  .pts-minimum-note {\n    display: block;\n\n    margin-top: 9px;\n\n    color: var(--pts-muted);\n\n    font-size: 10px;\n    line-height: 1.45;\n  }\n\n  .pts-minimum-note strong {\n    color: var(--pts-text);\n  }\n\n\n  \/* =========================================================\n     ORDER TOTAL\n  ========================================================= *\/\n\n  .pts-purchase-total {\n    min-width: 0;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n\n    padding: 20px 22px;\n\n    border-right: 1px solid var(--pts-line);\n\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-order-total-value {\n    display: block;\n\n    color: var(--pts-text);\n\n    font-size: clamp(28px, 4.4cqw, 38px);\n    font-weight: 800;\n    line-height: 1;\n    letter-spacing: -0.04em;\n  }\n\n  .pts-order-total-meta {\n    display: block;\n\n    margin-top: 9px;\n\n    color: var(--pts-muted);\n\n    font-size: 11px;\n    line-height: 1.5;\n  }\n\n\n  \/* =========================================================\n     BUY BUTTONS\n  ========================================================= *\/\n\n  .pts-purchase-actions {\n    min-width: 0;\n\n    display: grid;\n    grid-template-columns: 1fr;\n\n    background: #111111;\n  }\n\n  .pts-buy-button {\n    appearance: none;\n    -webkit-appearance: none;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    width: 100%;\n    min-height: 59px;\n\n    margin: 0;\n    padding: 15px 18px;\n\n    border: 0;\n    border-radius: 0;\n\n    cursor: pointer;\n\n    font-size: 12px;\n    font-weight: 800;\n    line-height: 1.35;\n    letter-spacing: 0.055em;\n\n    text-align: center;\n    text-transform: uppercase;\n\n    transition:\n      background-color 0.25s ease,\n      color 0.25s ease,\n      opacity 0.25s ease;\n  }\n\n  .pts-add-cart {\n    border-bottom: 1px solid rgba(255, 255, 255, 0.16);\n\n    background: #111111;\n    color: #ffffff;\n  }\n\n  .pts-add-cart:hover {\n    background: #292929;\n  }\n\n  .pts-buy-now {\n    background: var(--pts-accent);\n    color: #ffffff;\n  }\n\n  .pts-buy-now:hover {\n    background: #111111;\n  }\n\n  .pts-buy-button:disabled {\n    cursor: wait;\n    opacity: 0.58;\n  }\n\n\n  \/* =========================================================\n     PURCHASE FOOTER\n  ========================================================= *\/\n\n  .pts-purchase-footer {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n\n    gap: 18px;\n\n    min-height: 46px;\n\n    padding: 10px 18px;\n\n    border-top: 1px solid var(--pts-line);\n\n    background: #ffffff;\n  }\n\n  .pts-purchase-footer-text {\n    color: var(--pts-muted);\n\n    font-size: 10px;\n    line-height: 1.5;\n  }\n\n  .pts-purchase-footer-text strong {\n    color: var(--pts-text);\n  }\n\n  .pts-purchase-status {\n    min-height: 15px;\n\n    color: var(--pts-muted);\n\n    font-size: 10px;\n    line-height: 1.5;\n\n    text-align: right;\n  }\n\n  .pts-purchase-status.is-error {\n    color: #b42318;\n  }\n\n  .pts-purchase-status.is-success {\n    color: var(--pts-text);\n  }\n\n\n  \/* =========================================================\n     SECTION INDEX\n  ========================================================= *\/\n\n  .pts-section-index {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n\n    width: 100%;\n\n    border-bottom: 1px solid var(--pts-line);\n\n    background: var(--pts-soft);\n  }\n\n  .pts-index-item {\n    min-width: 0;\n\n    padding: 16px 18px;\n\n    border-right: 1px solid var(--pts-line);\n\n    transition:\n      background-color 0.25s ease,\n      padding-left 0.25s ease;\n  }\n\n  .pts-index-item:last-child {\n    border-right: 0;\n  }\n\n  .pts-index-item:hover {\n    padding-left: 23px;\n\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-index-number {\n    display: block;\n\n    margin-bottom: 6px;\n\n    color: var(--pts-accent);\n\n    font-size: 9px;\n    font-weight: 850;\n    line-height: 1;\n    letter-spacing: 0.12em;\n  }\n\n  .pts-index-label {\n    display: block;\n\n    color: var(--pts-text);\n\n    font-size: 11px;\n    font-weight: 700;\n    line-height: 1.4;\n  }\n\n\n  \/* =========================================================\n     ACCORDION\n  ========================================================= *\/\n\n  .pts-sections {\n    width: 100%;\n    background: var(--pts-bg);\n  }\n\n  .pts-section {\n    width: 100%;\n    border-bottom: 1px solid var(--pts-line);\n  }\n\n  .pts-section details {\n    display: block;\n    width: 100%;\n  }\n\n  .pts-section summary {\n    display: grid;\n\n    grid-template-columns:\n      82px\n      minmax(0, 1fr)\n      64px;\n\n    align-items: stretch;\n\n    width: 100%;\n    min-height: 86px;\n\n    padding: 0;\n\n    background: var(--pts-surface);\n\n    cursor: pointer;\n    list-style: none;\n    user-select: none;\n\n    transition: background-color 0.25s ease;\n  }\n\n  .pts-section summary::-webkit-details-marker {\n    display: none;\n  }\n\n  .pts-section summary::marker {\n    content: \"\";\n  }\n\n  .pts-section summary:hover,\n  .pts-section details[open] \u003e summary {\n    background: var(--pts-soft);\n  }\n\n  .pts-section-no {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-right: 1px solid var(--pts-line);\n\n    color: var(--pts-accent);\n\n    font-size: 11px;\n    font-weight: 850;\n    line-height: 1;\n    letter-spacing: 0.12em;\n\n    transition:\n      background-color 0.3s ease,\n      color 0.3s ease;\n  }\n\n  .pts-section details[open] .pts-section-no {\n    background: var(--pts-accent);\n    color: #ffffff;\n  }\n\n  .pts-section-title {\n    min-width: 0;\n\n    display: flex;\n    align-items: center;\n\n    padding: 18px 24px;\n\n    color: var(--pts-text);\n\n    font-size: clamp(14px, 2.1cqw, 18px);\n    font-weight: 750;\n    line-height: 1.4;\n  }\n\n\n  \/* =========================================================\n     HAMMER\n  ========================================================= *\/\n\n  .pts-section-toggle {\n    position: relative;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    min-width: 64px;\n\n    border-left: 1px solid var(--pts-line);\n\n    background: var(--pts-surface);\n\n    overflow: hidden;\n\n    transition: background-color 0.25s ease;\n  }\n\n  .pts-section summary:hover .pts-section-toggle,\n  .pts-section details[open] .pts-section-toggle {\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-hammer {\n    position: relative;\n\n    display: block;\n\n    width: 26px;\n    height: 34px;\n\n    transform: rotate(0deg);\n    transform-origin: 50% 50%;\n\n    transition:\n      transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n  }\n\n  .pts-hammer::before {\n    content: \"\";\n\n    position: absolute;\n\n    left: 50%;\n    top: 11px;\n\n    width: 5px;\n    height: 23px;\n\n    background: var(--pts-accent);\n\n    transform: translateX(-50%);\n  }\n\n  .pts-hammer::after {\n    content: \"\";\n\n    position: absolute;\n\n    top: 4px;\n    left: 50%;\n\n    width: 24px;\n    height: 9px;\n\n    background: var(--pts-accent);\n\n    transform: translateX(-50%);\n  }\n\n  .pts-hammer-neck {\n    position: absolute;\n\n    top: 9px;\n    left: 50%;\n\n    width: 9px;\n    height: 8px;\n\n    background: var(--pts-accent);\n\n    transform: translateX(-50%);\n  }\n\n  .pts-section details[open] .pts-hammer {\n    transform: rotate(90deg);\n  }\n\n  .pts-section summary:hover .pts-hammer {\n    transform: rotate(-7deg);\n  }\n\n  .pts-section details[open] summary:hover .pts-hammer {\n    transform: rotate(97deg);\n  }\n\n\n  \/* =========================================================\n     SECTION BODY\n  ========================================================= *\/\n\n  .pts-section-body {\n    display: grid;\n\n    grid-template-columns:\n      82px\n      minmax(0, 1fr);\n\n    width: 100%;\n\n    background: var(--pts-bg);\n  }\n\n  .pts-body-rail {\n    border-right: 1px solid var(--pts-line);\n\n    background:\n      repeating-linear-gradient(\n        to bottom,\n        transparent 0,\n        transparent 17px,\n        rgba(242, 101, 34, 0.07) 17px,\n        rgba(242, 101, 34, 0.07) 18px\n      );\n  }\n\n  .pts-body-content {\n    min-width: 0;\n\n    padding: clamp(22px, 4cqw, 42px);\n\n    color: var(--pts-muted);\n  }\n\n  .pts-copy {\n    width: 100%;\n    max-width: 950px;\n  }\n\n  .pts-copy p {\n    margin-bottom: 18px;\n  }\n\n  .pts-copy p:last-child {\n    margin-bottom: 0;\n  }\n\n\n  \/* =========================================================\n     FEATURE BAND\n  ========================================================= *\/\n\n  .pts-feature-band {\n    display: grid;\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n\n    width: 100%;\n\n    margin-top: 28px;\n\n    border-top: 1px solid var(--pts-line);\n    border-bottom: 1px solid var(--pts-line);\n\n    background: var(--pts-surface);\n  }\n\n  .pts-feature {\n    position: relative;\n\n    min-width: 0;\n    min-height: 100px;\n\n    padding: 18px;\n\n    border-right: 1px solid var(--pts-line);\n\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n\n    background: var(--pts-surface);\n\n    overflow: hidden;\n\n    transition:\n      background-color 0.25s ease,\n      padding-left 0.25s ease;\n  }\n\n  .pts-feature:last-child {\n    border-right: 0;\n  }\n\n  .pts-feature::before {\n    content: \"\";\n\n    position: absolute;\n\n    top: 0;\n    left: 0;\n\n    width: 3px;\n    height: 0;\n\n    background: var(--pts-accent);\n\n    transition: height 0.3s ease;\n  }\n\n  .pts-feature:hover {\n    padding-left: 23px;\n\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-feature:hover::before {\n    height: 100%;\n  }\n\n  .pts-feature-label {\n    color: var(--pts-muted);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1.4;\n    letter-spacing: 0.12em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-feature-value {\n    margin-top: 17px;\n\n    color: var(--pts-text);\n\n    font-size: 13px;\n    font-weight: 750;\n    line-height: 1.45;\n  }\n\n\n  \/* =========================================================\n     SPECIFICATIONS\n  ========================================================= *\/\n\n  .pts-spec-list {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n\n    width: 100%;\n\n    margin: 0;\n    padding: 0;\n\n    border-top: 1px solid var(--pts-line);\n\n    list-style: none;\n  }\n\n  .pts-spec-list li {\n    position: relative;\n\n    min-width: 0;\n    min-height: 84px;\n\n    padding: 17px 20px;\n\n    border-right: 1px solid var(--pts-line);\n    border-bottom: 1px solid var(--pts-line);\n\n    background: var(--pts-surface);\n\n    overflow: hidden;\n\n    transition:\n      background-color 0.22s ease,\n      padding-left 0.22s ease;\n  }\n\n  .pts-spec-list li:nth-child(2n) {\n    border-right: 0;\n  }\n\n  .pts-spec-list li::before {\n    content: \"\";\n\n    position: absolute;\n\n    left: 0;\n    top: 0;\n\n    width: 3px;\n    height: 0;\n\n    background: var(--pts-accent);\n\n    transition: height 0.25s ease;\n  }\n\n  .pts-spec-list li:hover {\n    padding-left: 25px;\n    background: var(--pts-soft);\n  }\n\n  .pts-spec-list li:hover::before {\n    height: 100%;\n  }\n\n  .pts-spec-list strong {\n    display: block;\n\n    margin-bottom: 6px;\n\n    color: var(--pts-text);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1.4;\n    letter-spacing: 0.1em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-spec-list span {\n    display: block;\n\n    color: var(--pts-muted);\n\n    font-size: 13px;\n    line-height: 1.55;\n  }\n\n\n  \/* =========================================================\n     NOTE\n  ========================================================= *\/\n\n  .pts-note {\n    display: grid;\n\n    grid-template-columns:\n      46px\n      minmax(0, 1fr);\n\n    width: 100%;\n\n    margin-top: 20px;\n\n    border-top: 1px solid var(--pts-line);\n    border-bottom: 1px solid var(--pts-line);\n\n    background: var(--pts-accent-soft);\n  }\n\n  .pts-note-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-right: 1px solid var(--pts-line);\n\n    color: var(--pts-accent);\n\n    font-family: Georgia, serif;\n    font-size: 15px;\n    font-weight: 700;\n  }\n\n  .pts-note-copy {\n    min-width: 0;\n\n    padding: 14px 16px;\n\n    color: var(--pts-muted);\n\n    font-size: 12px;\n    line-height: 1.7;\n  }\n\n  .pts-note-copy strong {\n    color: var(--pts-text);\n  }\n\n\n  \/* =========================================================\n     WHOLESALE\n  ========================================================= *\/\n\n  .pts-wholesale-layout {\n    display: grid;\n\n    grid-template-columns:\n      minmax(0, 1.3fr)\n      minmax(230px, 0.7fr);\n\n    width: 100%;\n\n    margin-top: 28px;\n\n    border-top: 1px solid var(--pts-line);\n    border-bottom: 1px solid var(--pts-line);\n  }\n\n  .pts-wholesale-data {\n    min-width: 0;\n\n    background: var(--pts-surface);\n  }\n\n  .pts-wholesale-row {\n    display: grid;\n\n    grid-template-columns:\n      minmax(120px, 38%)\n      minmax(0, 1fr);\n\n    min-height: 54px;\n\n    border-bottom: 1px solid var(--pts-line);\n  }\n\n  .pts-wholesale-row:last-child {\n    border-bottom: 0;\n  }\n\n  .pts-wholesale-key {\n    display: flex;\n    align-items: center;\n\n    padding: 11px 15px;\n\n    border-right: 1px solid var(--pts-line);\n\n    background: var(--pts-soft);\n\n    color: var(--pts-muted);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1.4;\n    letter-spacing: 0.1em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-wholesale-value {\n    min-width: 0;\n\n    display: flex;\n    align-items: center;\n\n    padding: 11px 16px;\n\n    background: var(--pts-surface);\n\n    color: var(--pts-text);\n\n    font-size: 13px;\n    font-weight: 700;\n    line-height: 1.5;\n\n    transition:\n      background-color 0.22s ease,\n      padding-left 0.22s ease;\n  }\n\n  .pts-wholesale-row:hover .pts-wholesale-value {\n    padding-left: 21px;\n\n    background: var(--pts-accent-soft);\n  }\n\n\n  \/* =========================================================\n     WHOLESALE SUMMARY\n  ========================================================= *\/\n\n  .pts-wholesale-summary {\n    min-width: 0;\n\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n\n    padding: 28px;\n\n    background: #111111;\n    color: #ffffff;\n  }\n\n  .pts-summary-topline {\n    color: rgba(255, 255, 255, 0.64);\n\n    font-size: 9px;\n    font-weight: 800;\n    line-height: 1.4;\n    letter-spacing: 0.14em;\n\n    text-transform: uppercase;\n  }\n\n  .pts-summary-large {\n    margin: 30px 0;\n\n    color: #ffffff;\n\n    font-size: clamp(34px, 7cqw, 54px);\n    font-weight: 760;\n    line-height: 0.95;\n    letter-spacing: -0.05em;\n  }\n\n  .pts-summary-large::after {\n    content: \"\";\n\n    display: block;\n\n    width: 42px;\n    height: 3px;\n\n    margin-top: 18px;\n\n    background: var(--pts-accent);\n  }\n\n  .pts-summary-large small {\n    display: block;\n\n    margin-top: 11px;\n\n    color: rgba(255, 255, 255, 0.7);\n\n    font-size: 11px;\n    font-weight: 600;\n    line-height: 1.4;\n    letter-spacing: 0;\n  }\n\n  .pts-summary-lines {\n    color: rgba(255, 255, 255, 0.8);\n\n    font-size: 12px;\n    line-height: 1.85;\n  }\n\n  .pts-summary-lines strong {\n    color: #ffffff;\n  }\n\n  .pts-orange {\n    color: var(--pts-accent) !important;\n  }\n\n\n  \/* =========================================================\n     RESPONSIVE\n  ========================================================= *\/\n\n  @container (max-width: 760px) {\n    .pts-hero-copy {\n      padding: 30px 24px;\n    }\n\n    .pts-product-title {\n      font-size: 34px;\n    }\n\n    .pts-intro {\n      font-size: 15px;\n    }\n\n    .pts-hero-aside {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    .pts-stat {\n      border-bottom: 1px solid var(--pts-line);\n    }\n\n    .pts-stat:nth-child(2) {\n      border-right: 0;\n    }\n\n    .pts-stat:nth-child(3),\n    .pts-stat:nth-child(4) {\n      border-bottom: 0;\n    }\n\n    .pts-purchase-main {\n      grid-template-columns: 1fr 1fr;\n    }\n\n    .pts-purchase-total {\n      border-right: 0;\n    }\n\n    .pts-purchase-actions {\n      grid-column: 1 \/ -1;\n\n      grid-template-columns: 1fr 1fr;\n\n      border-top: 1px solid var(--pts-line);\n    }\n\n    .pts-add-cart {\n      border-right: 1px solid rgba(255, 255, 255, 0.16);\n      border-bottom: 0;\n    }\n\n    .pts-section-index {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    .pts-index-item:nth-child(2) {\n      border-right: 0;\n    }\n\n    .pts-index-item:nth-child(-n + 2) {\n      border-bottom: 1px solid var(--pts-line);\n    }\n\n    .pts-feature-band {\n      grid-template-columns: 1fr;\n    }\n\n    .pts-feature {\n      min-height: auto;\n\n      border-right: 0;\n      border-bottom: 1px solid var(--pts-line);\n    }\n\n    .pts-feature:last-child {\n      border-bottom: 0;\n    }\n\n    .pts-wholesale-layout {\n      grid-template-columns: 1fr;\n    }\n  }\n\n\n  @container (max-width: 540px) {\n    .pts-hero-copy {\n      padding: 26px 18px;\n    }\n\n    .pts-product-title {\n      margin-bottom: 18px !important;\n\n      font-size: 29px;\n      line-height: 1.1;\n    }\n\n    .pts-eyebrow {\n      margin-bottom: 16px;\n    }\n\n    .pts-intro {\n      font-size: 14px;\n      line-height: 1.8;\n    }\n\n    .pts-stat {\n      min-height: 108px;\n\n      padding: 16px;\n    }\n\n    .pts-stat-value {\n      margin-top: 17px;\n\n      font-size: 22px;\n    }\n\n    .pts-purchase-panel {\n      padding: 12px;\n    }\n\n    .pts-purchase-main {\n      grid-template-columns: 1fr;\n    }\n\n    .pts-purchase-quantity,\n    .pts-purchase-total {\n      border-right: 0;\n      border-bottom: 1px solid var(--pts-line);\n    }\n\n    .pts-quantity-selector {\n      grid-template-columns:\n        44px\n        90px\n        44px;\n    }\n\n    .pts-quantity-input {\n      width: 90px;\n    }\n\n    .pts-purchase-actions {\n      grid-column: auto;\n\n      grid-template-columns: 1fr;\n\n      border-top: 0;\n    }\n\n    .pts-add-cart {\n      border-right: 0;\n      border-bottom: 1px solid rgba(255, 255, 255, 0.16);\n    }\n\n    .pts-purchase-footer {\n      align-items: flex-start;\n      flex-direction: column;\n\n      gap: 4px;\n    }\n\n    .pts-purchase-status {\n      text-align: left;\n    }\n\n    .pts-section-index {\n      display: none;\n    }\n\n    .pts-section summary {\n      grid-template-columns:\n        52px\n        minmax(0, 1fr)\n        50px;\n\n      min-height: 72px;\n    }\n\n    .pts-section-no {\n      font-size: 9px;\n    }\n\n    .pts-section-title {\n      padding: 13px 14px;\n\n      font-size: 13px;\n    }\n\n    .pts-section-toggle {\n      min-width: 50px;\n    }\n\n    .pts-hammer {\n      transform: scale(0.86);\n    }\n\n    .pts-section details[open] .pts-hammer {\n      transform:\n        scale(0.86)\n        rotate(90deg);\n    }\n\n    .pts-section summary:hover .pts-hammer {\n      transform:\n        scale(0.86)\n        rotate(-7deg);\n    }\n\n    .pts-section details[open] summary:hover .pts-hammer {\n      transform:\n        scale(0.86)\n        rotate(97deg);\n    }\n\n    .pts-section-body {\n      grid-template-columns: 1fr;\n    }\n\n    .pts-body-rail {\n      display: none;\n    }\n\n    .pts-body-content {\n      padding: 22px 14px 27px;\n    }\n\n    .pts-spec-list {\n      grid-template-columns: 1fr;\n    }\n\n    .pts-spec-list li,\n    .pts-spec-list li:nth-child(2n) {\n      border-right: 0;\n    }\n\n    .pts-wholesale-row {\n      grid-template-columns: 1fr;\n    }\n\n    .pts-wholesale-key {\n      padding: 11px 13px 3px;\n\n      border-right: 0;\n\n      background: var(--pts-surface);\n    }\n\n    .pts-wholesale-value {\n      padding: 3px 13px 13px;\n    }\n\n    .pts-wholesale-summary {\n      padding: 24px 19px;\n    }\n  }\n\n\n  @container (max-width: 360px) {\n    .pts-hero-aside {\n      grid-template-columns: 1fr;\n    }\n\n    .pts-stat {\n      border-right: 0;\n      border-bottom: 1px solid var(--pts-line);\n    }\n\n    .pts-stat:last-child {\n      border-bottom: 0;\n    }\n  }\n\u003c\/style\u003e\n\u003cdiv class=\"product-trade-sheet\" id=\"pts-18in-bolt-cutter-card\" data-box-size=\"24\" data-unit-price=\"13.75\"\u003e\n\u003cinput type=\"hidden\" class=\"pts-current-variant\" value=\"{{ product.selected_or_first_available_variant.id }}\"\u003e\n\u003c!-- =======================================================\n       PRODUCT OVERVIEW\n  ======================================================== --\u003e\n\u003cdiv class=\"pts-hero\"\u003e\n\u003cdiv class=\"pts-hero-copy\"\u003e\n\u003cspan class=\"pts-eyebrow\"\u003e Heavy-duty cutting tool \u003c\/span\u003e\n\u003ch2 class=\"pts-product-title\"\u003e18″ Heavy Duty Cr-V Bolt Cutter\u003c\/h2\u003e\n\u003cp class=\"pts-intro\"\u003eA robust 18-inch bolt cutter designed for demanding cutting, maintenance and workshop tasks. The long-handle configuration provides increased mechanical leverage, helping the cutting jaws apply controlled force to suitable metal materials. Durable construction, textured hand grips and a straightforward manual mechanism make this a practical addition to hardware, workshop, maintenance and DIY ranges.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- KEY DATA --\u003e\n\u003cdiv class=\"pts-hero-aside\"\u003e\n\u003cdiv class=\"pts-stat\"\u003e\n\u003cspan class=\"pts-stat-label\"\u003e Tool length \u003c\/span\u003e \u003cspan class=\"pts-stat-value\"\u003e 18″ \u003csmall\u003e Approx. 457 mm \u003c\/small\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-stat\"\u003e\n\u003cspan class=\"pts-stat-label\"\u003e Unit price \u003c\/span\u003e \u003cspan class=\"pts-stat-value\"\u003e £13.75 \u003csmall\u003e Per bolt cutter \u003c\/small\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-stat\"\u003e\n\u003cspan class=\"pts-stat-label\"\u003e Minimum order \u003c\/span\u003e \u003cspan class=\"pts-stat-value\"\u003e 24 \u003csmall\u003e Bolt cutters \u003c\/small\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-stat\"\u003e\n\u003cspan class=\"pts-stat-label\"\u003e MOQ total \u003c\/span\u003e \u003cspan class=\"pts-stat-value\"\u003e £330.00 \u003csmall\u003e 24 bolt cutters \u003c\/small\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- =======================================================\n       QUANTITY + BUY BUTTONS\n  ======================================================== --\u003e\n\u003cdiv class=\"pts-purchase-panel\"\u003e\n\u003cdiv class=\"pts-purchase-card\"\u003e\n\u003cdiv class=\"pts-purchase-main\"\u003e\n\u003c!-- QUANTITY --\u003e\n\u003cdiv class=\"pts-purchase-quantity\"\u003e\n\u003cspan class=\"pts-purchase-label\"\u003e Boxes \u003c\/span\u003e\n\u003cdiv class=\"pts-quantity-selector\"\u003e\n\u003cbutton type=\"button\" class=\"pts-quantity-button pts-quantity-minus\" aria-label=\"Decrease box quantity\"\u003e−\u003c\/button\u003e \u003cinput type=\"number\" class=\"pts-quantity-input\" value=\"1\" min=\"1\" step=\"1\" inputmode=\"numeric\" aria-label=\"Box quantity\"\u003e \u003cbutton type=\"button\" class=\"pts-quantity-button pts-quantity-plus\" aria-label=\"Increase box quantity\"\u003e+\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cspan class=\"pts-minimum-note\"\u003e 1 box = \u003cstrong\u003e24 individual bolt cutters\u003c\/strong\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003c!-- TOTAL --\u003e\n\u003cdiv class=\"pts-purchase-total\"\u003e\n\u003cspan class=\"pts-purchase-label\"\u003e Order total \u003c\/span\u003e \u003cspan class=\"pts-order-total-value\"\u003e £330.00 \u003c\/span\u003e \u003cspan class=\"pts-order-total-meta\"\u003e 1 box · 24 bolt cutters × £13.75 \u003c\/span\u003e\n\u003c\/div\u003e\n\u003c!-- BUY BUTTONS --\u003e\n\u003cdiv class=\"pts-purchase-actions\"\u003e\n\u003cbutton type=\"button\" class=\"pts-buy-button pts-add-cart\"\u003eADD BOX · 24 BOLT CUTTERS\u003c\/button\u003e \u003cbutton type=\"button\" class=\"pts-buy-button pts-buy-now\"\u003eBUY NOW · £330.00\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-purchase-footer\"\u003e\n\u003cspan class=\"pts-purchase-footer-text\"\u003e Minimum order: \u003cstrong\u003e1 box = 24 bolt cutters\u003c\/strong\u003e · £13.75 per unit · £330.00 per box \u003c\/span\u003e \u003cspan class=\"pts-purchase-status\" aria-live=\"polite\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- =======================================================\n       SECTION INDEX\n  ======================================================== --\u003e\n\u003cdiv class=\"pts-section-index\"\u003e\n\u003cdiv class=\"pts-index-item\"\u003e\n\u003cspan class=\"pts-index-number\"\u003e01\u003c\/span\u003e \u003cspan class=\"pts-index-label\"\u003e Cutting \u0026amp; leverage \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-index-item\"\u003e\n\u003cspan class=\"pts-index-number\"\u003e02\u003c\/span\u003e \u003cspan class=\"pts-index-label\"\u003e Design \u0026amp; construction \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-index-item\"\u003e\n\u003cspan class=\"pts-index-number\"\u003e03\u003c\/span\u003e \u003cspan class=\"pts-index-label\"\u003e Use \u0026amp; care \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-index-item\"\u003e\n\u003cspan class=\"pts-index-number\"\u003e04\u003c\/span\u003e \u003cspan class=\"pts-index-label\"\u003e Wholesale supply \u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- =======================================================\n       SECTIONS\n  ======================================================== --\u003e\n\u003cdiv class=\"pts-sections\"\u003e\n\u003c!-- SECTION 01 --\u003e\n\u003cdiv class=\"pts-section\"\u003e\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cspan class=\"pts-section-no\"\u003e 01 \u003c\/span\u003e \u003cspan class=\"pts-section-title\"\u003e Heavy-Duty Cutting \u0026amp; Increased Leverage \u003c\/span\u003e \u003cspan class=\"pts-section-toggle\"\u003e \u003cspan class=\"pts-hammer\"\u003e \u003cspan class=\"pts-hammer-neck\"\u003e\u003c\/span\u003e \u003c\/span\u003e \u003c\/span\u003e\u003c\/summary\u003e\n\u003cdiv class=\"pts-section-body\"\u003e\n\u003cdiv class=\"pts-body-rail\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pts-body-content\"\u003e\n\u003cdiv class=\"pts-copy\"\u003e\n\u003cp\u003eThe 18-inch format combines useful cutting leverage with a manageable overall size, making the tool suitable for workshops, garages, maintenance areas, construction tool kits and general DIY environments.\u003c\/p\u003e\n\u003cp\u003eLong handles help multiply the user's applied force as the jaws close, supporting controlled manual cutting of suitable metal materials. The tool operates entirely mechanically and requires no batteries, electrical connection or powered equipment.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-feature-band\"\u003e\n\u003cdiv class=\"pts-feature\"\u003e\n\u003cspan class=\"pts-feature-label\"\u003e Tool format \u003c\/span\u003e \u003cspan class=\"pts-feature-value\"\u003e 18-inch heavy-duty cutter \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-feature\"\u003e\n\u003cspan class=\"pts-feature-label\"\u003e Operation \u003c\/span\u003e \u003cspan class=\"pts-feature-value\"\u003e Manual two-handed leverage \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-feature\"\u003e\n\u003cspan class=\"pts-feature-label\"\u003e Suitable for \u003c\/span\u003e \u003cspan class=\"pts-feature-value\"\u003e Workshop, maintenance \u0026amp; DIY use \u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c!-- SECTION 02 --\u003e\n\u003cdiv class=\"pts-section\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003e\u003cspan class=\"pts-section-no\"\u003e 02 \u003c\/span\u003e \u003cspan class=\"pts-section-title\"\u003e Construction, Handles \u0026amp; Tool Design \u003c\/span\u003e \u003cspan class=\"pts-section-toggle\"\u003e \u003cspan class=\"pts-hammer\"\u003e \u003cspan class=\"pts-hammer-neck\"\u003e\u003c\/span\u003e \u003c\/span\u003e \u003c\/span\u003e\u003c\/summary\u003e\n\u003cdiv class=\"pts-section-body\"\u003e\n\u003cdiv class=\"pts-body-rail\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pts-body-content\"\u003e\n\u003cul class=\"pts-spec-list\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eProduct type\u003c\/strong\u003e \u003cspan\u003eHeavy-duty manual bolt cutter.\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eOverall length\u003c\/strong\u003e \u003cspan\u003e18 inches \/ approximately 457 mm.\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eConstruction\u003c\/strong\u003e \u003cspan\u003eCr-V metal construction.\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCutting head\u003c\/strong\u003e \u003cspan\u003e Robust metal jaw assembly designed for controlled cutting. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHandle design\u003c\/strong\u003e \u003cspan\u003e Extended handles designed to increase mechanical leverage. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGrip design\u003c\/strong\u003e \u003cspan\u003e Textured moulded grips for stable two-handed handling. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eOperation\u003c\/strong\u003e \u003cspan\u003e Fully manual non-powered cutting mechanism. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eColour\u003c\/strong\u003e \u003cspan\u003e Orange handles with black grips and metal cutting head. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRecommended environments\u003c\/strong\u003e \u003cspan\u003e Workshops, garages, maintenance areas, construction tool collections and home DIY settings. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eStorage\u003c\/strong\u003e \u003cspan\u003e Suitable for workshop storage, larger tool boxes and dedicated hand-tool areas. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv class=\"pts-note\"\u003e\n\u003cdiv class=\"pts-note-icon\"\u003ei\u003c\/div\u003e\n\u003cdiv class=\"pts-note-copy\"\u003e\n\u003cstrong\u003e Cutting capacity: \u003c\/strong\u003e Maximum cutting capacity can vary depending on the diameter, composition and hardness of the material being cut. Use the tool only within its confirmed operating limits.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c!-- SECTION 03 --\u003e\n\u003cdiv class=\"pts-section\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003e\u003cspan class=\"pts-section-no\"\u003e 03 \u003c\/span\u003e \u003cspan class=\"pts-section-title\"\u003e Use, Handling \u0026amp; Product Care \u003c\/span\u003e \u003cspan class=\"pts-section-toggle\"\u003e \u003cspan class=\"pts-hammer\"\u003e \u003cspan class=\"pts-hammer-neck\"\u003e\u003c\/span\u003e \u003c\/span\u003e \u003c\/span\u003e\u003c\/summary\u003e\n\u003cdiv class=\"pts-section-body\"\u003e\n\u003cdiv class=\"pts-body-rail\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pts-body-content\"\u003e\n\u003cul class=\"pts-spec-list\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eBefore use\u003c\/strong\u003e \u003cspan\u003e Inspect the cutting jaws, handles and pivot area for visible damage or excessive wear. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePositioning\u003c\/strong\u003e \u003cspan\u003e Position suitable material securely between the cutting jaws before applying pressure. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eOperation\u003c\/strong\u003e \u003cspan\u003e Apply steady pressure with both hands while keeping the tool correctly aligned with the material. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCutting limits\u003c\/strong\u003e \u003cspan\u003e Do not attempt to cut materials beyond the rated capability of the tool. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003ePersonal protection\u003c\/strong\u003e \u003cspan\u003e Appropriate eye protection and suitable work gloves are recommended during cutting tasks. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCleaning\u003c\/strong\u003e \u003cspan\u003e Remove debris after use and wipe the tool with a clean, dry cloth. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eStorage\u003c\/strong\u003e \u003cspan\u003e Store in a clean, dry location away from prolonged exposure to moisture. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMaintenance\u003c\/strong\u003e \u003cspan\u003e Periodically inspect moving joints and cutting surfaces to support smooth operation. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv class=\"pts-note\"\u003e\n\u003cdiv class=\"pts-note-icon\"\u003e!\u003c\/div\u003e\n\u003cdiv class=\"pts-note-copy\"\u003e\n\u003cstrong\u003e Safety note: \u003c\/strong\u003e Keep hands and fingers clear of the cutting jaws. Do not use on live electrical cables or conductors. Discontinue use if the jaws, grips, handles or pivot mechanism become damaged.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c!-- SECTION 04 --\u003e\n\u003cdiv class=\"pts-section\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003e\u003cspan class=\"pts-section-no\"\u003e 04 \u003c\/span\u003e \u003cspan class=\"pts-section-title\"\u003e Packaging \u0026amp; Wholesale Supply \u003c\/span\u003e \u003cspan class=\"pts-section-toggle\"\u003e \u003cspan class=\"pts-hammer\"\u003e \u003cspan class=\"pts-hammer-neck\"\u003e\u003c\/span\u003e \u003c\/span\u003e \u003c\/span\u003e\u003c\/summary\u003e\n\u003cdiv class=\"pts-section-body\"\u003e\n\u003cdiv class=\"pts-body-rail\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"pts-body-content\"\u003e\n\u003cdiv class=\"pts-copy\"\u003e\n\u003cp\u003eOne Shopify selling unit is one individual 18-inch heavy-duty bolt cutter. Each wholesale box contains 24 bolt cutters. Each bolt cutter is priced at £13.75, giving a wholesale box value of £330.00. Additional boxes can be selected directly using the box quantity control above.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-layout\"\u003e\n\u003cdiv class=\"pts-wholesale-data\"\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eProduct\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003e18″ heavy-duty bolt cutter\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eTool length\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003e18″ \/ approximately 457 mm\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eConstruction\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003eCr-V metal construction\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eOperation\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003eManual\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eUnit price\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003e£13.75\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eBox quantity\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003e24 bolt cutters\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eMinimum order\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003e1 wholesale box\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-row\"\u003e\n\u003cdiv class=\"pts-wholesale-key\"\u003eBox total\u003c\/div\u003e\n\u003cdiv class=\"pts-wholesale-value\"\u003e£330.00\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003caside class=\"pts-wholesale-summary\"\u003e\n\u003cdiv\u003e\n\u003cspan class=\"pts-summary-topline\"\u003e Wholesale box \u003c\/span\u003e\n\u003cdiv class=\"pts-summary-large\"\u003e£330.00 \u003csmall\u003e 24 bolt cutters \u003c\/small\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-summary-lines\"\u003e\n\u003cstrong\u003e £13.75 \u003c\/strong\u003e per bolt cutter \u003cbr\u003e\u003cstrong\u003e 24 bolt cutters \u003c\/strong\u003e per box \u003cbr\u003e\u003cstrong class=\"pts-orange\"\u003e £330.00 \u003c\/strong\u003e per wholesale box\u003c\/div\u003e\n\u003c\/aside\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pts-note\"\u003e\n\u003cdiv class=\"pts-note-icon\"\u003ei\u003c\/div\u003e\n\u003cdiv class=\"pts-note-copy\"\u003e\n\u003cstrong\u003e Wholesale calculation: \u003c\/strong\u003e 1 box = 24 bolt cutters × £13.75 per bolt cutter = £330.00.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n\n  function initProductCard(){\n\n    var card =\n      document.getElementById(\n        \"pts-18in-bolt-cutter-card\"\n      );\n\n    if(\n      !card ||\n      card.dataset.ptsBound === \"true\"\n    ){\n      return;\n    }\n\n    card.dataset.ptsBound = \"true\";\n\n    var minus =\n      card.querySelector(\n        \".pts-quantity-minus\"\n      );\n\n    var plus =\n      card.querySelector(\n        \".pts-quantity-plus\"\n      );\n\n    var input =\n      card.querySelector(\n        \".pts-quantity-input\"\n      );\n\n    var addButton =\n      card.querySelector(\n        \".pts-add-cart\"\n      );\n\n    var buyButton =\n      card.querySelector(\n        \".pts-buy-now\"\n      );\n\n    var totalValue =\n      card.querySelector(\n        \".pts-order-total-value\"\n      );\n\n    var totalMeta =\n      card.querySelector(\n        \".pts-order-total-meta\"\n      );\n\n    var status =\n      card.querySelector(\n        \".pts-purchase-status\"\n      );\n\n    var variantField =\n      card.querySelector(\n        \".pts-current-variant\"\n      );\n\n    var boxSize =\n      parseInt(\n        card.dataset.boxSize || \"24\",\n        10\n      );\n\n    var unitPrice =\n      parseFloat(\n        card.dataset.unitPrice || \"13.75\"\n      );\n\n\n    function money(value){\n\n      return \"£\" +\n        Number(value).toLocaleString(\n          \"en-GB\",\n          {\n            minimumFractionDigits:2,\n            maximumFractionDigits:2\n          }\n        );\n\n    }\n\n\n    function getBoxes(){\n\n      var boxes =\n        parseInt(\n          input.value,\n          10\n        );\n\n      if(\n        isNaN(boxes) ||\n        boxes \u003c 1\n      ){\n        boxes = 1;\n      }\n\n      return boxes;\n\n    }\n\n\n    function setStatus(\n      message,\n      type\n    ){\n\n      if(!status){\n        return;\n      }\n\n      status.className =\n        \"pts-purchase-status\";\n\n      if(type){\n        status.classList.add(\n          \"is-\" + type\n        );\n      }\n\n      status.textContent =\n        message || \"\";\n\n    }\n\n\n    function refresh(){\n\n      var boxes =\n        getBoxes();\n\n      var units =\n        boxes * boxSize;\n\n      var total =\n        units * unitPrice;\n\n      input.value =\n        boxes;\n\n      minus.disabled =\n        boxes \u003c= 1;\n\n      totalValue.textContent =\n        money(total);\n\n      totalMeta.textContent =\n        boxes +\n        (\n          boxes === 1\n            ? \" box\"\n            : \" boxes\"\n        ) +\n        \" · \" +\n        units +\n        \" bolt cutters × \" +\n        money(unitPrice);\n\n      addButton.textContent =\n        boxes === 1\n          ? \"ADD BOX · \" +\n            units +\n            \" BOLT CUTTERS\"\n          : \"ADD \" +\n            boxes +\n            \" BOXES · \" +\n            units +\n            \" BOLT CUTTERS\";\n\n      buyButton.textContent =\n        \"BUY NOW · \" +\n        money(total);\n\n    }\n\n\n    function isValidVariantId(value){\n\n      if(\n        value === undefined ||\n        value === null\n      ){\n        return false;\n      }\n\n      var clean =\n        String(value).trim();\n\n      if(\n        !\/^\\d+$\/.test(clean)\n      ){\n        return false;\n      }\n\n      var number =\n        Number(clean);\n\n      return(\n        Number.isFinite(number) \u0026\u0026\n        number \u003e 0\n      );\n\n    }\n\n\n    function readVariantFromField(field){\n\n      if(!field){\n        return null;\n      }\n\n      if(\n        isValidVariantId(\n          field.value\n        )\n      ){\n        return Number(\n          field.value\n        );\n      }\n\n      return null;\n\n    }\n\n\n    async function getVariantId(){\n\n      var directId =\n        readVariantFromField(\n          variantField\n        );\n\n      if(directId){\n        return directId;\n      }\n\n      var urlVariant =\n        new URLSearchParams(\n          window.location.search\n        ).get(\"variant\");\n\n      if(\n        isValidVariantId(\n          urlVariant\n        )\n      ){\n        return Number(\n          urlVariant\n        );\n      }\n\n      var section =\n        card.closest(\n          \".shopify-section\"\n        );\n\n      if(section){\n\n        var sectionFields =\n          section.querySelectorAll(\n            'form[action*=\"\/cart\/add\"] [name=\"id\"], ' +\n            'product-form [name=\"id\"], ' +\n            'input[name=\"id\"], select[name=\"id\"]'\n          );\n\n        for(\n          var i = 0;\n          i \u003c sectionFields.length;\n          i++\n        ){\n\n          var sectionId =\n            readVariantFromField(\n              sectionFields[i]\n            );\n\n          if(sectionId){\n            return sectionId;\n          }\n\n        }\n\n      }\n\n      var globalFields =\n        document.querySelectorAll(\n          'form[action*=\"\/cart\/add\"] [name=\"id\"], ' +\n          'product-form [name=\"id\"], ' +\n          'input[name=\"id\"], select[name=\"id\"]'\n        );\n\n      for(\n        var j = 0;\n        j \u003c globalFields.length;\n        j++\n      ){\n\n        var globalId =\n          readVariantFromField(\n            globalFields[j]\n          );\n\n        if(globalId){\n          return globalId;\n        }\n\n      }\n\n      try{\n\n        if(\n          window.ShopifyAnalytics \u0026\u0026\n          ShopifyAnalytics.meta \u0026\u0026\n          isValidVariantId(\n            ShopifyAnalytics.meta.selectedVariantId\n          )\n        ){\n\n          return Number(\n            ShopifyAnalytics.meta.selectedVariantId\n          );\n\n        }\n\n      }catch(error){}\n\n      try{\n\n        if(\n          window.meta \u0026\u0026\n          meta.product \u0026\u0026\n          meta.product.variants \u0026\u0026\n          meta.product.variants.length\n        ){\n\n          for(\n            var m = 0;\n            m \u003c meta.product.variants.length;\n            m++\n          ){\n\n            if(\n              isValidVariantId(\n                meta.product.variants[m].id\n              )\n            ){\n\n              return Number(\n                meta.product.variants[m].id\n              );\n\n            }\n\n          }\n\n        }\n\n      }catch(error){}\n\n      try{\n\n        var productPath =\n          window.location.pathname;\n\n        var canonical =\n          document.querySelector(\n            'link[rel=\"canonical\"]'\n          );\n\n        if(\n          canonical \u0026\u0026\n          canonical.href\n        ){\n\n          try{\n\n            productPath =\n              new URL(\n                canonical.href,\n                window.location.origin\n              ).pathname;\n\n          }catch(error){}\n\n        }\n\n        productPath =\n          productPath.replace(\n            \/\\\/$\/,\n            \"\"\n          );\n\n        if(\n          productPath.indexOf(\n            \"\/products\/\"\n          ) !== -1\n        ){\n\n          var productResponse =\n            await fetch(\n              productPath + \".js\",\n              {\n                method:\"GET\",\n                headers:{\n                  \"Accept\":\"application\/json\"\n                },\n                credentials:\"same-origin\"\n              }\n            );\n\n          if(productResponse.ok){\n\n            var productData =\n              await productResponse.json();\n\n            if(\n              productData \u0026\u0026\n              productData.variants \u0026\u0026\n              productData.variants.length\n            ){\n\n              for(\n                var p = 0;\n                p \u003c productData.variants.length;\n                p++\n              ){\n\n                if(\n                  productData.variants[p].available \u0026\u0026\n                  isValidVariantId(\n                    productData.variants[p].id\n                  )\n                ){\n\n                  return Number(\n                    productData.variants[p].id\n                  );\n\n                }\n\n              }\n\n              if(\n                isValidVariantId(\n                  productData.variants[0].id\n                )\n              ){\n\n                return Number(\n                  productData.variants[0].id\n                );\n\n              }\n\n            }\n\n          }\n\n        }\n\n      }catch(error){\n\n        console.error(\n          \"PTS product JSON variant lookup failed:\",\n          error\n        );\n\n      }\n\n      return null;\n\n    }\n\n\n    function getRoot(){\n\n      return(\n        window.Shopify \u0026\u0026\n        Shopify.routes \u0026\u0026\n        Shopify.routes.root\n          ? Shopify.routes.root\n          : \"\/\"\n      );\n\n    }\n\n\n    async function getCart(root){\n\n      var response =\n        await fetch(\n          root + \"cart.js\",\n          {\n            method:\"GET\",\n            headers:{\n              \"Accept\":\"application\/json\"\n            },\n            credentials:\"same-origin\"\n          }\n        );\n\n      if(!response.ok){\n\n        throw new Error(\n          \"Could not read cart.\"\n        );\n\n      }\n\n      return await response.json();\n\n    }\n\n\n    function getActualVariantQuantity(\n      cart,\n      variantId\n    ){\n\n      var total = 0;\n\n      for(\n        var i = 0;\n        i \u003c cart.items.length;\n        i++\n      ){\n\n        if(\n          Number(\n            cart.items[i].variant_id\n          ) ===\n          Number(\n            variantId\n          )\n        ){\n\n          total +=\n            Number(\n              cart.items[i].quantity || 0\n            );\n\n        }\n\n      }\n\n      return total;\n\n    }\n\n\n    async function setExactCartQuantity(\n      root,\n      variantId,\n      targetUnits\n    ){\n\n      var cart =\n        await getCart(root);\n\n      var matchingLines = [];\n\n      for(\n        var i = 0;\n        i \u003c cart.items.length;\n        i++\n      ){\n\n        if(\n          Number(\n            cart.items[i].variant_id\n          ) ===\n          Number(\n            variantId\n          )\n        ){\n\n          matchingLines.push(\n            i + 1\n          );\n\n        }\n\n      }\n\n\n      if(\n        matchingLines.length === 1\n      ){\n\n        var changeResponse =\n          await fetch(\n            root + \"cart\/change.js\",\n            {\n              method:\"POST\",\n              headers:{\n                \"Content-Type\":\"application\/json\",\n                \"Accept\":\"application\/json\"\n              },\n              credentials:\"same-origin\",\n              body:JSON.stringify({\n                line:matchingLines[0],\n                quantity:targetUnits\n              })\n            }\n          );\n\n        var changeData =\n          await changeResponse.json();\n\n        if(!changeResponse.ok){\n\n          throw new Error(\n            changeData.description ||\n            changeData.message ||\n            \"Cart update failed.\"\n          );\n\n        }\n\n        return;\n      }\n\n\n      if(\n        matchingLines.length \u003e 1\n      ){\n\n        for(\n          var r = matchingLines.length - 1;\n          r \u003e= 0;\n          r--\n        ){\n\n          var removeResponse =\n            await fetch(\n              root + \"cart\/change.js\",\n              {\n                method:\"POST\",\n                headers:{\n                  \"Content-Type\":\"application\/json\",\n                  \"Accept\":\"application\/json\"\n                },\n                credentials:\"same-origin\",\n                body:JSON.stringify({\n                  line:matchingLines[r],\n                  quantity:0\n                })\n              }\n            );\n\n          var removeData =\n            await removeResponse.json();\n\n          if(!removeResponse.ok){\n\n            throw new Error(\n              removeData.description ||\n              removeData.message ||\n              \"Cart reset failed.\"\n            );\n\n          }\n\n        }\n\n      }\n\n\n      var addResponse =\n        await fetch(\n          root + \"cart\/add.js\",\n          {\n            method:\"POST\",\n            headers:{\n              \"Content-Type\":\"application\/json\",\n              \"Accept\":\"application\/json\"\n            },\n            credentials:\"same-origin\",\n            body:JSON.stringify({\n              items:[\n                {\n                  id:Number(variantId),\n                  quantity:targetUnits\n                }\n              ]\n            })\n          }\n        );\n\n      var addData =\n        await addResponse.json();\n\n      if(!addResponse.ok){\n\n        throw new Error(\n          addData.description ||\n          addData.message ||\n          \"Cart update failed.\"\n        );\n\n      }\n\n    }\n\n\n    async function updateCart(\n      goToCheckout\n    ){\n\n      setStatus(\n        \"Detecting product variant...\"\n      );\n\n      var variantId =\n        await getVariantId();\n\n      if(!variantId){\n\n        setStatus(\n          \"Unable to detect the Shopify product variant.\",\n          \"error\"\n        );\n\n        return;\n\n      }\n\n      var boxes =\n        getBoxes();\n\n      var targetUnits =\n        boxes * boxSize;\n\n      addButton.disabled =\n        true;\n\n      buyButton.disabled =\n        true;\n\n      try{\n\n        var root =\n          getRoot();\n\n        setStatus(\n          \"Setting cart quantity to \" +\n          targetUnits +\n          \" bolt cutters...\"\n        );\n\n        await setExactCartQuantity(\n          root,\n          variantId,\n          targetUnits\n        );\n\n        var verifiedCart =\n          await getCart(root);\n\n        var actualUnits =\n          getActualVariantQuantity(\n            verifiedCart,\n            variantId\n          );\n\n        if(\n          actualUnits !== targetUnits\n        ){\n\n          if(\n            actualUnits \u003c targetUnits\n          ){\n\n            throw new Error(\n              \"Shopify limited this item to \" +\n              actualUnits +\n              \" units. Requested \" +\n              targetUnits +\n              \" units.\"\n            );\n\n          }\n\n          throw new Error(\n            \"Cart quantity verification failed. Expected \" +\n            targetUnits +\n            \" units but found \" +\n            actualUnits +\n            \".\"\n          );\n\n        }\n\n        setStatus(\n          targetUnits +\n          \" bolt cutters confirmed in cart.\",\n          \"success\"\n        );\n\n        document.dispatchEvent(\n          new CustomEvent(\n            \"cart:refresh\",\n            {\n              bubbles:true,\n              detail:verifiedCart\n            }\n          )\n        );\n\n        document.dispatchEvent(\n          new CustomEvent(\n            \"cart:updated\",\n            {\n              bubbles:true,\n              detail:verifiedCart\n            }\n          )\n        );\n\n        window.location.href =\n          goToCheckout\n            ? root + \"checkout\"\n            : root + \"cart\";\n\n      }catch(error){\n\n        console.error(\n          \"PTS cart error:\",\n          error\n        );\n\n        setStatus(\n          error \u0026\u0026\n          error.message\n            ? error.message\n            : \"Unable to update the cart.\",\n          \"error\"\n        );\n\n      }finally{\n\n        addButton.disabled =\n          false;\n\n        buyButton.disabled =\n          false;\n\n      }\n\n    }\n\n\n    minus.addEventListener(\n      \"click\",\n      function(){\n\n        input.value =\n          Math.max(\n            1,\n            getBoxes() - 1\n          );\n\n        refresh();\n\n      }\n    );\n\n\n    plus.addEventListener(\n      \"click\",\n      function(){\n\n        input.value =\n          getBoxes() + 1;\n\n        refresh();\n\n      }\n    );\n\n\n    input.addEventListener(\n      \"input\",\n      function(){\n\n        if(\n          input.value === \"\"\n        ){\n          return;\n        }\n\n        refresh();\n\n      }\n    );\n\n\n    input.addEventListener(\n      \"change\",\n      refresh\n    );\n\n\n    input.addEventListener(\n      \"blur\",\n      refresh\n    );\n\n\n    addButton.addEventListener(\n      \"click\",\n      function(){\n\n        updateCart(false);\n\n      }\n    );\n\n\n    buyButton.addEventListener(\n      \"click\",\n      function(){\n\n        updateCart(true);\n\n      }\n    );\n\n\n    refresh();\n\n  }\n\n\n  if(\n    document.readyState ===\n    \"loading\"\n  ){\n\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initProductCard\n    );\n\n  }else{\n\n    initProductCard();\n\n  }\n\n\n  document.addEventListener(\n    \"shopify:section:load\",\n    initProductCard\n  );\n\n})();\n\u003c\/script\u003e\n","brand":"My Store","offers":[{"title":"Default Title","offer_id":56798487544148,"sku":null,"price":13.75,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1063\/3117\/7300\/files\/ChatGPTImage12_.2026_._15_03_19.png?v=1786724316","url":"https:\/\/buildpro-wholesale.com\/products\/heavy-duty-cutting-tool","provider":"BUILDPRO WHOLESALE","version":"1.0","type":"link"}