{"id":1709,"date":"2026-04-20T08:57:54","date_gmt":"2026-04-20T08:57:54","guid":{"rendered":"https:\/\/bbpmfg.com\/?page_id=1709"},"modified":"2026-04-21T02:00:16","modified_gmt":"2026-04-21T02:00:16","slug":"tco-calculato","status":"publish","type":"page","link":"https:\/\/bbpmfg.com\/pt\/sand-dredge-pumps\/gravel-pump\/tco-calculato\/","title":{"rendered":"tco-calculato"},"content":{"rendered":"\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-5bce92b\" data-block-id=\"5bce92b\"><style>.stk-5bce92b {margin-bottom:0px !important;}<\/style><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-5bce92b-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-3e82283\" data-v=\"4\" data-block-id=\"3e82283\"><style>.stk-3e82283-container{margin-top:var(--stk--preset--spacing--50, 1.5rem) !important;margin-right:var(--stk--preset--spacing--50, 1.5rem) !important;margin-bottom:var(--stk--preset--spacing--50, 1.5rem) !important;margin-left:var(--stk--preset--spacing--50, 1.5rem) !important;}<\/style><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-3e82283-container stk--no-background stk--no-padding\"><div class=\"has-text-align-center stk-block-content stk-inner-blocks stk-3e82283-inner-blocks\"><div class=\"ct-breadcrumbs\" data-source=\"rankmath\" ><nav aria-label=\"breadcrumbs\" class=\"rank-math-breadcrumb\"><p><span class=\"last\">Home<\/span><\/p><\/nav><\/div><\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-67824e6\" data-block-id=\"67824e6\"><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-67824e6-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-440e01b\" data-v=\"4\" data-block-id=\"440e01b\"><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-440e01b-container stk--no-background stk--no-padding\"><div class=\"stk-block-content stk-inner-blocks stk-440e01b-inner-blocks\">\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Gravel Pump vs. Slurry Pump \u2014 TCO Calculator | BBP<\/title>\n<style>\n\/* \u2500\u2500\u2500 Reset \u2500\u2500\u2500 *\/\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n\/* \u2500\u2500\u2500 Custom Properties \u2500\u2500\u2500 *\/\n#bbp-tco-tool {\n  --primary:    #1848C0;\n  --primary-dk: #0f2f8a;\n  --accent:     #F0C018;\n  --accent-dk:  #c9a010;\n  --bg:         #0a0e1a;\n  --surface:    #111827;\n  --surface-2:  #1c2436;\n  --border:     #2a3450;\n  --text:       #e8ecf4;\n  --text-dim:   #8a96b0;\n  --danger:     #e05252;\n  --success:    #2ecb71;\n  --mono:       'IBM Plex Mono', 'Courier New', monospace;\n  --sans:       'Inter', 'Segoe UI', system-ui, sans-serif;\n  --radius:     0px;\n  --shadow:     0 2px 12px rgba(0,0,0,0.5);\n\n  font-family: var(--sans);\n  background: var(--bg);\n  color: var(--text);\n  padding: 40px 20px 60px;\n  min-height: 100vh;\n  line-height: 1.5;\n}\n\n\/* \u2500\u2500\u2500 Layout \u2500\u2500\u2500 *\/\n.tco-inner {\n  max-width: 1120px;\n  margin: 0 auto;\n}\n\n\/* \u2500\u2500\u2500 Header \u2500\u2500\u2500 *\/\n.tco-header {\n  border-left: 4px solid var(--accent);\n  padding-left: 20px;\n  margin-bottom: 40px;\n}\n.tco-eyebrow {\n  font-family: var(--mono);\n  font-size: 11px;\n  letter-spacing: 0.15em;\n  color: var(--accent);\n  text-transform: uppercase;\n  margin-bottom: 8px;\n}\n.tco-title {\n  font-size: clamp(22px, 4vw, 32px);\n  font-weight: 700;\n  color: var(--text);\n  line-height: 1.2;\n  margin-bottom: 10px;\n}\n.tco-subtitle {\n  font-size: 15px;\n  color: var(--text-dim);\n  max-width: 640px;\n}\n\n\/* \u2500\u2500\u2500 Grid \u2500\u2500\u2500 *\/\n.tco-grid {\n  display: grid;\n  grid-template-columns: 340px 1fr;\n  gap: 24px;\n  align-items: start;\n}\n@media (max-width:690px) {\n  .tco-grid { grid-template-columns: 1fr; }\n}\n\n\/* \u2500\u2500\u2500 Panel \u2500\u2500\u2500 *\/\n.panel {\n  background: var(--surface);\n  border: 1px solid var(--border);\n  padding: 24px;\n}\n.panel-title {\n  font-family: var(--mono);\n  font-size: 11px;\n  letter-spacing: 0.12em;\n  color: var(--accent);\n  text-transform: uppercase;\n  margin-bottom: 20px;\n  padding-bottom: 12px;\n  border-bottom: 1px solid var(--border);\n}\n\n\/* \u2500\u2500\u2500 Form Fields \u2500\u2500\u2500 *\/\n.field-group {\n  margin-bottom: 20px;\n}\n.field-label {\n  display: block;\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--text-dim);\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin-bottom: 6px;\n}\n.field-label span {\n  font-family: var(--mono);\n  color: var(--accent);\n  font-weight: 400;\n  letter-spacing: 0;\n  text-transform: none;\n}\n\ninput[type=\"number\"],\ninput[type=\"range\"] {\n  -webkit-appearance: none;\n  appearance: none;\n}\ninput[type=\"number\"] {\n  width: 100%;\n  background: var(--bg);\n  border: 1px solid var(--border);\n  color: var(--text);\n  font-family: var(--mono);\n  font-size: 15px;\n  padding: 9px 12px;\n  outline: none;\n  transition: border-color 0.15s;\n}\ninput[type=\"number\"]:focus {\n  border-color: var(--primary);\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  opacity: 0.4;\n}\n\n\/* Range slider *\/\n.range-wrap {\n  position: relative;\n}\ninput[type=\"range\"] {\n  width: 100%;\n  height: 4px;\n  background: var(--border);\n  outline: none;\n  cursor: pointer;\n  margin-top: 8px;\n  accent-color: var(--primary);\n}\ninput[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 18px;\n  height: 18px;\n  background: var(--accent);\n  border: 2px solid var(--bg);\n  cursor: pointer;\n}\ninput[type=\"range\"]::-moz-range-thumb {\n  width: 18px;\n  height: 18px;\n  background: var(--accent);\n  border: 2px solid var(--bg);\n  cursor: pointer;\n  border-radius: 0;\n}\n.range-labels {\n  display: flex;\n  justify-content: space-between;\n  font-family: var(--mono);\n  font-size: 11px;\n  color: var(--text-dim);\n  margin-top: 4px;\n}\n.range-val {\n  font-family: var(--mono);\n  font-size: 18px;\n  font-weight: 700;\n  color: var(--accent);\n  display: block;\n  margin-bottom: 2px;\n}\n\n\/* Divider *\/\n.pump-divider {\n  border: none;\n  border-top: 1px solid var(--border);\n  margin: 24px 0 20px;\n}\n.pump-section-label {\n  font-family: var(--mono);\n  font-size: 10px;\n  letter-spacing: 0.14em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n  margin-bottom: 16px;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n.pump-section-label::after {\n  content: '';\n  flex: 1;\n  height: 1px;\n  background: var(--border);\n}\n.pump-a { color: var(--primary); border-left: 3px solid var(--primary); padding-left: 10px; }\n.pump-b { color: #e07040; border-left: 3px solid #e07040; padding-left: 10px; }\n\n\/* Field hint *\/\n.field-hint {\n  font-size: 11px;\n  color: var(--text-dim);\n  margin-top: 4px;\n}\n\n\/* \u2500\u2500\u2500 Results Panel \u2500\u2500\u2500 *\/\n.results-top {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 24px;\n}\n@media (max-width: 540px) {\n  .results-top { grid-template-columns: 1fr; }\n}\n\n.pump-card {\n  background: var(--surface-2);\n  border: 1px solid var(--border);\n  padding: 20px;\n  position: relative;\n  overflow: hidden;\n}\n.pump-card::before {\n  content: '';\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 3px;\n}\n.pump-card.card-a::before { background: var(--primary); }\n.pump-card.card-b::before { background: #e07040; }\n\n.card-pump-label {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: 0.1em;\n  text-transform: uppercase;\n  color: var(--text-dim);\n  margin-bottom: 4px;\n}\n.card-pump-name {\n  font-size: 15px;\n  font-weight: 700;\n  color: var(--text);\n  margin-bottom: 16px;\n}\n.card-a .card-pump-name { color: #6b9ef4; }\n.card-b .card-pump-name { color: #e07040; }\n\n.cost-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  padding: 6px 0;\n  border-bottom: 1px solid var(--border);\n}\n.cost-row:last-child { border-bottom: none; }\n.cost-label {\n  font-size: 12px;\n  color: var(--text-dim);\n}\n.cost-value {\n  font-family: var(--mono);\n  font-size: 13px;\n  color: var(--text);\n}\n.cost-total-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  margin-top: 14px;\n  padding-top: 14px;\n  border-top: 2px solid var(--border);\n}\n.cost-total-label {\n  font-size: 13px;\n  font-weight: 700;\n  color: var(--text);\n}\n.cost-total-value {\n  font-family: var(--mono);\n  font-size: 22px;\n  font-weight: 700;\n}\n.card-a .cost-total-value { color: var(--primary); }\n.card-b .cost-total-value { color: #e07040; }\n\n\/* Winner badge *\/\n.winner-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  background: var(--accent);\n  color: #000;\n  font-size: 10px;\n  font-weight: 800;\n  letter-spacing: 0.1em;\n  text-transform: uppercase;\n  padding: 3px 8px;\n  margin-bottom: 8px;\n}\n\n\/* \u2500\u2500\u2500 Savings Banner \u2500\u2500\u2500 *\/\n.savings-banner {\n  background: linear-gradient(135deg, var(--primary-dk), var(--primary));\n  border: 1px solid var(--primary);\n  padding: 20px 24px;\n  margin-bottom: 24px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 16px;\n}\n.savings-left {}\n.savings-label {\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: rgba(255,255,255,0.7);\n  margin-bottom: 4px;\n}\n.savings-amount {\n  font-family: var(--mono);\n  font-size: clamp(28px, 5vw, 42px);\n  font-weight: 700;\n  color: var(--accent);\n  line-height: 1;\n}\n.savings-sub {\n  font-size: 12px;\n  color: rgba(255,255,255,0.6);\n  margin-top: 4px;\n}\n.savings-right {\n  text-align: right;\n}\n.savings-stat {\n  font-family: var(--mono);\n  font-size: 13px;\n  color: rgba(255,255,255,0.85);\n  margin-bottom: 4px;\n}\n.savings-stat strong {\n  color: #fff;\n  font-size: 16px;\n}\n\n\/* \u2500\u2500\u2500 Chart \u2500\u2500\u2500 *\/\n.chart-section {\n  margin-bottom: 24px;\n}\n.chart-title {\n  font-family: var(--mono);\n  font-size: 11px;\n  letter-spacing: 0.1em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n  margin-bottom: 16px;\n}\n\n.chart-bars {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n.chart-row {\n  display: grid;\n  grid-template-columns: 140px 1fr auto;\n  align-items: center;\n  gap: 12px;\n}\n@media (max-width: 540px) {\n  .chart-row { grid-template-columns: 90px 1fr auto; }\n}\n.chart-row-label {\n  font-size: 12px;\n  color: var(--text-dim);\n  text-align: right;\n  line-height: 1.3;\n}\n.bar-track {\n  height: 32px;\n  background: var(--surface-2);\n  border: 1px solid var(--border);\n  position: relative;\n  overflow: hidden;\n}\n.bar-fill {\n  height: 100%;\n  transition: width 0.5s cubic-bezier(0.4,0,0.2,1);\n  position: relative;\n  min-width: 2px;\n}\n.bar-fill-a { background: var(--primary); }\n.bar-fill-b { background: #e07040; }\n.bar-fill::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(90deg, transparent 60%, rgba(255,255,255,0.08));\n}\n.bar-dollar {\n  font-family: var(--mono);\n  font-size: 12px;\n  color: var(--text);\n  white-space: nowrap;\n  min-width: 80px;\n  text-align: right;\n}\n\n\/* Sub-bars (maintenance vs downtime breakdown) *\/\n.bar-fill-maint-a { background: var(--primary); }\n.bar-fill-down-a  { background: #4a6fd8; }\n.bar-fill-maint-b { background: #e07040; }\n.bar-fill-down-b  { background: #a03020; }\n\n\/* \u2500\u2500\u2500 Breakdown Table \u2500\u2500\u2500 *\/\n.breakdown-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n  margin-bottom: 24px;\n}\n.breakdown-table th {\n  background: var(--surface-2);\n  border: 1px solid var(--border);\n  padding: 10px 14px;\n  font-family: var(--mono);\n  font-size: 11px;\n  letter-spacing: 0.08em;\n  color: var(--text-dim);\n  text-transform: uppercase;\n  text-align: left;\n}\n.breakdown-table td {\n  border: 1px solid var(--border);\n  padding: 10px 14px;\n  color: var(--text);\n}\n.breakdown-table tr:nth-child(even) td { background: rgba(255,255,255,0.02); }\n.breakdown-table td:not(:first-child) {\n  font-family: var(--mono);\n  font-size: 13px;\n}\n.td-a { color: #6b9ef4; }\n.td-b { color: #e07040; }\n.td-diff-pos { color: var(--success); }\n.td-diff-neg { color: var(--danger); }\n\n\/* \u2500\u2500\u2500 Disclaimer + CTA \u2500\u2500\u2500 *\/\n.disclaimer-cta {\n  background: var(--surface-2);\n  border: 1px solid var(--border);\n  padding: 20px 24px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n.disclaimer-text {\n  font-size: 12px;\n  color: var(--text-dim);\n  max-width: 600px;\n  line-height: 1.6;\n}\n.disclaimer-text strong {\n  color: var(--text);\n}\n.cta-btn {\n  display: inline-block;\n  background: var(--accent);\n  color: #000;\n  font-size: 13px;\n  font-weight: 800;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  padding: 14px 24px;\n  text-decoration: none;\n  white-space: nowrap;\n  cursor: pointer;\n  border: none;\n  transition: background 0.15s, transform 0.1s;\n  font-family: var(--sans);\n}\n.cta-btn:hover {\n  background: var(--accent-dk);\n  transform: translateY(-1px);\n}\n.cta-btn:active { transform: translateY(0); }\n\n\/* \u2500\u2500\u2500 Assumptions Callout \u2500\u2500\u2500 *\/\n.assumptions-strip {\n  background: rgba(24,72,192,0.12);\n  border: 1px solid rgba(24,72,192,0.3);\n  padding: 12px 16px;\n  margin-bottom: 16px;\n  font-size: 12px;\n  color: var(--text-dim);\n  line-height: 1.6;\n}\n.assumptions-strip strong { color: var(--text); }\n\n\/* \u2500\u2500\u2500 No-savings state \u2500\u2500\u2500 *\/\n.no-savings { color: var(--danger); }\n\n<\/style>\n<!-- IBM Plex Mono from Google Fonts (optional \u2014 falls back to Courier New) -->\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Mono:wght@400;700&#038;family=Inter:wght@400;600;700&#038;display=swap\" rel=\"stylesheet\">\n<\/head>\n<body>\n\n<div id=\"bbp-tco-tool\">\n<div class=\"tco-inner\">\n\n  <!-- Header -->\n  <header class=\"tco-header\">\n    <p class=\"tco-eyebrow\">BBP &mdash; Interactive Tool<\/p>\n    <h1 class=\"tco-title\">Gravel Pump vs. Slurry Pump<br>Total Cost of Ownership Calculator<\/h1>\n    <p class=\"tco-subtitle\">Adjust the parameters below to model your real operating costs over 1&ndash;5 years. Savings are calculated from wear-part cycles, overhaul costs, and unplanned downtime.<\/p>\n  <\/header>\n\n  <div class=\"tco-grid\">\n\n    <!-- \u2500\u2500 LEFT: Inputs \u2500\u2500 -->\n    <aside>\n      <div class=\"panel\">\n        <p class=\"panel-title\">Operating Parameters<\/p>\n\n        <!-- Annual Hours -->\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"annual-hours\">Annual Operating Hours <span id=\"annual-hours-display\">4,000 hrs<\/span><\/label>\n          <input type=\"number\" id=\"annual-hours\" min=\"1000\" max=\"8760\" value=\"4000\" step=\"100\">\n          <p class=\"field-hint\">Max continuous operation: 8,760 hrs\/yr<\/p>\n        <\/div>\n\n        <!-- Downtime Cost -->\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"downtime-cost\">Downtime Cost <span id=\"downtime-cost-display\">$500\/hr<\/span><\/label>\n          <input type=\"number\" id=\"downtime-cost\" min=\"100\" max=\"10000\" value=\"500\" step=\"50\">\n          <p class=\"field-hint\">Include lost production + crew idle time<\/p>\n        <\/div>\n\n        <!-- Years Slider -->\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"years-slider\">Comparison Period <span class=\"range-val\" id=\"years-display\">3 Years<\/span><\/label>\n          <div class=\"range-wrap\">\n            <input type=\"range\" id=\"years-slider\" min=\"1\" max=\"5\" value=\"3\" step=\"1\">\n            <div class=\"range-labels\"><span>1 yr<\/span><span>2 yr<\/span><span>3 yr<\/span><span>4 yr<\/span><span>5 yr<\/span><\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Pump A -->\n        <hr class=\"pump-divider\">\n        <p class=\"pump-section-label pump-a\">Pump A &mdash; BBP Gravel Pump<\/p>\n\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"a-interval\">Wear Part Interval (hrs) <span id=\"a-interval-display\">5,000 hrs<\/span><\/label>\n          <div class=\"range-wrap\">\n            <input type=\"range\" id=\"a-interval\" min=\"4000\" max=\"6000\" value=\"5000\" step=\"250\">\n            <div class=\"range-labels\"><span>4,000<\/span><span>6,000<\/span><\/div>\n          <\/div>\n          <p class=\"field-hint\">Field-serviceable; typical range 4,000&ndash;6,000 hrs<\/p>\n        <\/div>\n\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"a-cost\">Cost per Overhaul <span id=\"a-cost-display\">$3,000<\/span><\/label>\n          <input type=\"number\" id=\"a-cost\" min=\"500\" max=\"50000\" value=\"3000\" step=\"100\">\n        <\/div>\n\n        <!-- Pump B -->\n        <hr class=\"pump-divider\">\n        <p class=\"pump-section-label pump-b\">Pump B &mdash; Standard Slurry Pump<\/p>\n\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"b-interval\">Wear Part Interval (hrs) <span id=\"b-interval-display\">2,000 hrs<\/span><\/label>\n          <div class=\"range-wrap\">\n            <input type=\"range\" id=\"b-interval\" min=\"1500\" max=\"2500\" value=\"2000\" step=\"100\">\n            <div class=\"range-labels\"><span>1,500<\/span><span>2,500<\/span><\/div>\n          <\/div>\n          <p class=\"field-hint\">Full disassembly required; typical range 1,500&ndash;2,500 hrs<\/p>\n        <\/div>\n\n        <div class=\"field-group\">\n          <label class=\"field-label\" for=\"b-cost\">Cost per Overhaul <span id=\"b-cost-display\">$2,000<\/span><\/label>\n          <input type=\"number\" id=\"b-cost\" min=\"500\" max=\"50000\" value=\"2000\" step=\"100\">\n        <\/div>\n\n      <\/div>\n    <\/aside>\n\n    <!-- \u2500\u2500 RIGHT: Results \u2500\u2500 -->\n    <section>\n\n      <!-- Savings Banner -->\n      <div class=\"savings-banner\" id=\"savings-banner\">\n        <div class=\"savings-left\">\n          <p class=\"savings-label\">Total Savings with BBP Gravel Pump<\/p>\n          <p class=\"savings-amount\" id=\"savings-amount\">$0<\/p>\n          <p class=\"savings-sub\" id=\"savings-sub\">over <span id=\"savings-years\">3<\/span> years<\/p>\n        <\/div>\n        <div class=\"savings-right\">\n          <p class=\"savings-stat\" id=\"savings-annual-stat\"><\/p>\n          <p class=\"savings-stat\" id=\"savings-overhaul-stat\"><\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Card Row -->\n      <div class=\"results-top\">\n\n        <div class=\"pump-card card-a\" id=\"card-a\">\n          <p class=\"card-pump-label\">Pump A<\/p>\n          <p class=\"card-pump-name\">BBP Gravel Pump<\/p>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">No. of Overhauls<\/span>\n            <span class=\"cost-value\" id=\"a-overhauls\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">Maintenance Cost<\/span>\n            <span class=\"cost-value\" id=\"a-maintenance\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">Downtime Hours<\/span>\n            <span class=\"cost-value\" id=\"a-downtime-hrs\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">Downtime Cost<\/span>\n            <span class=\"cost-value\" id=\"a-downtime-cost\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-total-row\">\n            <span class=\"cost-total-label\">Total Cost<\/span>\n            <span class=\"cost-total-value\" id=\"a-total\">\u2014<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"pump-card card-b\" id=\"card-b\">\n          <p class=\"card-pump-label\">Pump B<\/p>\n          <p class=\"card-pump-name\">Standard Slurry Pump<\/p>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">No. of Overhauls<\/span>\n            <span class=\"cost-value\" id=\"b-overhauls\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">Maintenance Cost<\/span>\n            <span class=\"cost-value\" id=\"b-maintenance\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">Downtime Hours<\/span>\n            <span class=\"cost-value\" id=\"b-downtime-hrs\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-row\">\n            <span class=\"cost-label\">Downtime Cost<\/span>\n            <span class=\"cost-value\" id=\"b-downtime-cost\">\u2014<\/span>\n          <\/div>\n          <div class=\"cost-total-row\">\n            <span class=\"cost-total-label\">Total Cost<\/span>\n            <span class=\"cost-total-value\" id=\"b-total\">\u2014<\/span>\n          <\/div>\n        <\/div>\n\n      <\/div><!-- \/results-top -->\n\n      <!-- Bar Chart -->\n      <div class=\"chart-section\">\n        <p class=\"chart-title\">Cost Breakdown &mdash; Visual Comparison<\/p>\n        <div class=\"chart-bars\">\n\n          <div class=\"chart-row\">\n            <span class=\"chart-row-label\">BBP Gravel Pump<br><small>Total<\/small><\/span>\n            <div class=\"bar-track\">\n              <div class=\"bar-fill bar-fill-a\" id=\"chart-bar-a\" style=\"width:0%\"><\/div>\n            <\/div>\n            <span class=\"bar-dollar\" id=\"chart-label-a\">$0<\/span>\n          <\/div>\n\n          <div class=\"chart-row\">\n            <span class=\"chart-row-label\">Standard Slurry<br><small>Total<\/small><\/span>\n            <div class=\"bar-track\">\n              <div class=\"bar-fill bar-fill-b\" id=\"chart-bar-b\" style=\"width:100%\"><\/div>\n            <\/div>\n            <span class=\"bar-dollar\" id=\"chart-label-b\">$0<\/span>\n          <\/div>\n\n          <div class=\"chart-row\">\n            <span class=\"chart-row-label\">BBP Maint. Cost<\/span>\n            <div class=\"bar-track\">\n              <div class=\"bar-fill bar-fill-maint-a\" id=\"chart-bar-a-maint\" style=\"width:0%\"><\/div>\n            <\/div>\n            <span class=\"bar-dollar\" id=\"chart-label-a-maint\">$0<\/span>\n          <\/div>\n\n          <div class=\"chart-row\">\n            <span class=\"chart-row-label\">Slurry Maint. Cost<\/span>\n            <div class=\"bar-track\">\n              <div class=\"bar-fill bar-fill-maint-b\" id=\"chart-bar-b-maint\" style=\"width:0%\"><\/div>\n            <\/div>\n            <span class=\"bar-dollar\" id=\"chart-label-b-maint\">$0<\/span>\n          <\/div>\n\n          <div class=\"chart-row\">\n            <span class=\"chart-row-label\">BBP Downtime Cost<\/span>\n            <div class=\"bar-track\">\n              <div class=\"bar-fill bar-fill-down-a\" id=\"chart-bar-a-down\" style=\"width:0%\"><\/div>\n            <\/div>\n            <span class=\"bar-dollar\" id=\"chart-label-a-down\">$0<\/span>\n          <\/div>\n\n          <div class=\"chart-row\">\n            <span class=\"chart-row-label\">Slurry Downtime Cost<\/span>\n            <div class=\"bar-track\">\n              <div class=\"bar-fill bar-fill-down-b\" id=\"chart-bar-b-down\" style=\"width:0%\"><\/div>\n            <\/div>\n            <span class=\"bar-dollar\" id=\"chart-label-b-down\">$0<\/span>\n          <\/div>\n\n        <\/div>\n      <\/div><!-- \/chart -->\n\n      <!-- Breakdown Table -->\n      <table class=\"breakdown-table\" aria-label=\"Year-by-year TCO breakdown\">\n        <thead>\n          <tr>\n            <th>Metric<\/th>\n            <th>BBP Gravel Pump<\/th>\n            <th>Standard Slurry<\/th>\n            <th>Difference<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"breakdown-tbody\">\n          <tr><td colspan=\"4\" style=\"text-align:center;color:var(--text-dim);padding:20px;\">Adjust inputs to see results<\/td><\/tr>\n        <\/tbody>\n      <\/table>\n\n      <!-- Assumptions -->\n      <div class=\"assumptions-strip\">\n        <strong>Assumptions:<\/strong> BBP Gravel Pump downtime = <strong>8 hrs\/overhaul<\/strong> (field-serviceable). Standard Slurry Pump downtime = <strong>24 hrs\/overhaul<\/strong> (full disassembly). Overhaul count is rounded to two decimal places; partial intervals are prorated.\n      <\/div>\n\n      <!-- Disclaimer + CTA -->\n      <div class=\"disclaimer-cta\">\n        <p class=\"disclaimer-text\">\n          <strong>Disclaimer:<\/strong> Actual costs vary by application, slurry abrasivity, solids concentration, and site conditions. This calculator provides directional estimates only. Contact BBP for application-specific TCO analysis.\n        <\/p>\n        <a href=\"#ct-popup-820\" class=\"cta-btn\">Request Custom TCO Analysis<\/a>\n      <\/div>\n\n    <\/section>\n  <\/div><!-- \/tco-grid -->\n\n<\/div><!-- \/tco-inner -->\n<\/div><!-- \/bbp-tco-tool -->\n\n<script>\n(function () {\n  'use strict';\n\n  \/* \u2500\u2500 Element refs \u2500\u2500 *\/\n  var annualHours   = document.getElementById('annual-hours');\n  var downtimeCost  = document.getElementById('downtime-cost');\n  var yearsSlider   = document.getElementById('years-slider');\n  var aInterval     = document.getElementById('a-interval');\n  var aCost         = document.getElementById('a-cost');\n  var bInterval     = document.getElementById('b-interval');\n  var bCost         = document.getElementById('b-cost');\n\n  \/* \u2500\u2500 Display labels \u2500\u2500 *\/\n  var annualHoursDisplay  = document.getElementById('annual-hours-display');\n  var downtimeCostDisplay = document.getElementById('downtime-cost-display');\n  var yearsDisplay        = document.getElementById('years-display');\n  var aIntervalDisplay    = document.getElementById('a-interval-display');\n  var aCostDisplay        = document.getElementById('a-cost-display');\n  var bIntervalDisplay    = document.getElementById('b-interval-display');\n  var bCostDisplay        = document.getElementById('b-cost-display');\n\n  \/* \u2500\u2500 Output refs \u2500\u2500 *\/\n  var savingsAmount     = document.getElementById('savings-amount');\n  var savingsSub        = document.getElementById('savings-sub');\n  var savingsYears      = document.getElementById('savings-years');\n  var savingsAnnualStat = document.getElementById('savings-annual-stat');\n  var savingsOverhaul   = document.getElementById('savings-overhaul-stat');\n  var savingsBanner     = document.getElementById('savings-banner');\n\n  var aOverhauls    = document.getElementById('a-overhauls');\n  var aMaintenance  = document.getElementById('a-maintenance');\n  var aDowntimeHrs  = document.getElementById('a-downtime-hrs');\n  var aDowntimeCost = document.getElementById('a-downtime-cost');\n  var aTotal        = document.getElementById('a-total');\n\n  var bOverhauls    = document.getElementById('b-overhauls');\n  var bMaintenance  = document.getElementById('b-maintenance');\n  var bDowntimeHrs  = document.getElementById('b-downtime-hrs');\n  var bDowntimeCost = document.getElementById('b-downtime-cost');\n  var bTotal        = document.getElementById('b-total');\n\n  var chartBarA      = document.getElementById('chart-bar-a');\n  var chartBarB      = document.getElementById('chart-bar-b');\n  var chartBarAMaint = document.getElementById('chart-bar-a-maint');\n  var chartBarBMaint = document.getElementById('chart-bar-b-maint');\n  var chartBarADown  = document.getElementById('chart-bar-a-down');\n  var chartBarBDown  = document.getElementById('chart-bar-b-down');\n\n  var chartLabelA      = document.getElementById('chart-label-a');\n  var chartLabelB      = document.getElementById('chart-label-b');\n  var chartLabelAMaint = document.getElementById('chart-label-a-maint');\n  var chartLabelBMaint = document.getElementById('chart-label-b-maint');\n  var chartLabelADown  = document.getElementById('chart-label-a-down');\n  var chartLabelBDown  = document.getElementById('chart-label-b-down');\n\n  var breakdownTbody = document.getElementById('breakdown-tbody');\n\n  \/* \u2500\u2500 Helpers \u2500\u2500 *\/\n  function fmt(n) {\n    return '$' + Math.round(n).toLocaleString('en-US');\n  }\n  function fmtCompact(n) {\n    if (n >= 1000000) return '$' + (n \/ 1000000).toFixed(1) + 'M';\n    if (n >= 1000)    return '$' + (n \/ 1000).toFixed(1) + 'K';\n    return '$' + Math.round(n);\n  }\n  function clamp(v, mn, mx) { return Math.max(mn, Math.min(mx, v)); }\n\n  \/* \u2500\u2500 Core calculation \u2500\u2500 *\/\n  function calc() {\n    var hrs   = clamp(parseFloat(annualHours.value) || 4000, 1000, 8760);\n    var dcph  = clamp(parseFloat(downtimeCost.value) || 500, 100, 10000);\n    var years = parseInt(yearsSlider.value) || 3;\n    var aInt  = parseInt(aInterval.value) || 5000;\n    var aCostV= clamp(parseFloat(aCost.value) || 3000, 0, 99999);\n    var bInt  = parseInt(bInterval.value) || 2000;\n    var bCostV= clamp(parseFloat(bCost.value) || 2000, 0, 99999);\n\n    var A_DT_PER_OH = 8;   \/\/ hours downtime per BBP overhaul\n    var B_DT_PER_OH = 24;  \/\/ hours downtime per Slurry overhaul\n\n    var totalHrs = hrs * years;\n\n    var aOH = totalHrs \/ aInt;\n    var bOH = totalHrs \/ bInt;\n\n    var aMaint = aOH * aCostV;\n    var bMaint = bOH * bCostV;\n\n    var aDownHrs  = aOH * A_DT_PER_OH;\n    var bDownHrs  = bOH * B_DT_PER_OH;\n\n    var aDown = aDownHrs * dcph;\n    var bDown = bDownHrs * dcph;\n\n    var aTC = aMaint + aDown;\n    var bTC = bMaint + bDown;\n\n    var savings = bTC - aTC;\n\n    return {\n      hrs: hrs, dcph: dcph, years: years,\n      aInt: aInt, aCostV: aCostV,\n      bInt: bInt, bCostV: bCostV,\n      aOH: aOH, bOH: bOH,\n      aMaint: aMaint, bMaint: bMaint,\n      aDownHrs: aDownHrs, bDownHrs: bDownHrs,\n      aDown: aDown, bDown: bDown,\n      aTC: aTC, bTC: bTC,\n      savings: savings\n    };\n  }\n\n  \/* \u2500\u2500 Render \u2500\u2500 *\/\n  function render() {\n    var d = calc();\n\n    \/* label updates *\/\n    annualHoursDisplay.textContent  = (d.hrs).toLocaleString() + ' hrs';\n    downtimeCostDisplay.textContent = fmt(d.dcph) + '\/hr';\n    yearsDisplay.textContent        = d.years + (d.years === 1 ? ' Year' : ' Years');\n    aIntervalDisplay.textContent    = d.aInt.toLocaleString() + ' hrs';\n    aCostDisplay.textContent        = fmt(d.aCostV);\n    bIntervalDisplay.textContent    = d.bInt.toLocaleString() + ' hrs';\n    bCostDisplay.textContent        = fmt(d.bCostV);\n\n    \/* savings banner *\/\n    savingsYears.textContent = d.years + (d.years === 1 ? ' year' : ' years');\n    if (d.savings > 0) {\n      savingsAmount.textContent = fmt(d.savings);\n      savingsAmount.classList.remove('no-savings');\n      savingsBanner.style.background = 'linear-gradient(135deg, var(--primary-dk), var(--primary))';\n      savingsBanner.style.borderColor = 'var(--primary)';\n    } else {\n      savingsAmount.textContent = (d.savings === 0 ? '$0' : '-' + fmt(Math.abs(d.savings)));\n      savingsAmount.classList.add('no-savings');\n    }\n\n    var annualSavings = d.years > 0 ? d.savings \/ d.years : 0;\n    savingsAnnualStat.innerHTML = '<strong>' + fmtCompact(Math.abs(annualSavings)) + '\/yr<\/strong> avg annual ' + (annualSavings >= 0 ? 'savings' : 'premium');\n\n    var extraOH = Math.round(d.bOH - d.aOH);\n    savingsOverhaul.innerHTML = '<strong>' + Math.round(d.bOH) + '<\/strong> slurry overhauls vs <strong>' + Math.round(d.aOH) + '<\/strong> BBP';\n\n    \/* cards *\/\n    aOverhauls.textContent   = d.aOH.toFixed(1);\n    aMaintenance.textContent = fmt(d.aMaint);\n    aDowntimeHrs.textContent = Math.round(d.aDownHrs) + ' hrs';\n    aDowntimeCost.textContent= fmt(d.aDown);\n    aTotal.textContent       = fmt(d.aTC);\n\n    bOverhauls.textContent   = d.bOH.toFixed(1);\n    bMaintenance.textContent = fmt(d.bMaint);\n    bDowntimeHrs.textContent = Math.round(d.bDownHrs) + ' hrs';\n    bDowntimeCost.textContent= fmt(d.bDown);\n    bTotal.textContent       = fmt(d.bTC);\n\n    \/* chart bars *\/\n    var maxTotal = Math.max(d.aTC, d.bTC, 1);\n    var maxMaint = Math.max(d.aMaint, d.bMaint, 1);\n    var maxDown  = Math.max(d.aDown, d.bDown, 1);\n\n    chartBarA.style.width      = ((d.aTC \/ maxTotal) * 100).toFixed(1) + '%';\n    chartBarB.style.width      = ((d.bTC \/ maxTotal) * 100).toFixed(1) + '%';\n    chartBarAMaint.style.width = ((d.aMaint \/ maxMaint) * 100).toFixed(1) + '%';\n    chartBarBMaint.style.width = ((d.bMaint \/ maxMaint) * 100).toFixed(1) + '%';\n    chartBarADown.style.width  = ((d.aDown \/ maxDown) * 100).toFixed(1) + '%';\n    chartBarBDown.style.width  = ((d.bDown \/ maxDown) * 100).toFixed(1) + '%';\n\n    chartLabelA.textContent      = fmtCompact(d.aTC);\n    chartLabelB.textContent      = fmtCompact(d.bTC);\n    chartLabelAMaint.textContent = fmtCompact(d.aMaint);\n    chartLabelBMaint.textContent = fmtCompact(d.bMaint);\n    chartLabelADown.textContent  = fmtCompact(d.aDown);\n    chartLabelBDown.textContent  = fmtCompact(d.bDown);\n\n    \/* breakdown table *\/\n    var rows = [\n      ['Operating Hours (total)', (d.hrs * d.years).toLocaleString() + ' hrs', (d.hrs * d.years).toLocaleString() + ' hrs', '\u2014'],\n      ['Wear Part Interval', d.aInt.toLocaleString() + ' hrs', d.bInt.toLocaleString() + ' hrs', (d.bInt < d.aInt ? '\u25bc ' : '\u25b2 ') + Math.abs(d.bInt - d.aInt).toLocaleString() + ' hrs'],\n      ['Number of Overhauls', d.aOH.toFixed(2), d.bOH.toFixed(2), '+' + (d.bOH - d.aOH).toFixed(2) + ' more (slurry)'],\n      ['Downtime per Overhaul', '8 hrs', '24 hrs', '16 hrs more (slurry)'],\n      ['Total Downtime', Math.round(d.aDownHrs) + ' hrs', Math.round(d.bDownHrs) + ' hrs', '+' + Math.round(d.bDownHrs - d.aDownHrs) + ' hrs (slurry)'],\n      ['Maintenance Cost', fmt(d.aMaint), fmt(d.bMaint), fmt(d.bMaint - d.aMaint)],\n      ['Downtime Cost', fmt(d.aDown), fmt(d.bDown), fmt(d.bDown - d.aDown)],\n      ['TOTAL COST', fmt(d.aTC), fmt(d.bTC), fmt(d.savings)],\n    ];\n\n    var html = '';\n    for (var i = 0; i < rows.length; i++) {\n      var r = rows[i];\n      var isTotal = (i === rows.length - 1);\n      var diffClass = '';\n      if (isTotal) {\n        diffClass = d.savings > 0 ? 'td-diff-pos' : (d.savings < 0 ? 'td-diff-neg' : '');\n      }\n      html += '<tr' + (isTotal ? ' style=\"font-weight:700\"' : '') + '>' +\n        '<td>' + r[0] + '<\/td>' +\n        '<td class=\"td-a\">' + r[1] + '<\/td>' +\n        '<td class=\"td-b\">' + r[2] + '<\/td>' +\n        '<td class=\"' + diffClass + '\">' + (isTotal && d.savings > 0 ? '\u2193 ' : '') + r[3] + '<\/td>' +\n        '<\/tr>';\n    }\n    breakdownTbody.innerHTML = html;\n  }\n\n  \/* \u2500\u2500 Event binding \u2500\u2500 *\/\n  var inputs = [annualHours, downtimeCost, yearsSlider, aInterval, aCost, bInterval, bCost];\n  inputs.forEach(function (el) {\n    el.addEventListener('input', render);\n    el.addEventListener('change', render);\n  });\n\n  \/* Initial render *\/\n  render();\n\n})();\n<\/script>\n\n<\/body>\n<\/html>\n<\/div><\/div><\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Gravel Pump vs. Slurry Pump \u2014 TCO Calculator | BBP BBP &mdash; Interactive Tool Gravel Pump vs. Slurry PumpTotal Cost of Ownership Calculator Adjust the parameters below to model your real operating costs over 1&ndash;5 years. Savings are calculated from wear-part cycles, overhaul costs, and unplanned downtime. Operating Parameters Annual Operating Hours 4,000 hrs Max [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":879,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_gspb_post_css":"","footnotes":""},"class_list":["post-1709","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/pages\/1709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/comments?post=1709"}],"version-history":[{"count":0,"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/pages\/1709\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/pages\/879"}],"wp:attachment":[{"href":"https:\/\/bbpmfg.com\/pt\/wp-json\/wp\/v2\/media?parent=1709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}