{"id":24661,"date":"2026-08-17T07:52:29","date_gmt":"2026-08-17T07:52:29","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24661"},"modified":"2026-08-17T08:03:55","modified_gmt":"2026-08-17T08:03:55","slug":"bearing-temperature-rise-estimator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/bearing-temperature-rise-estimator\/","title":{"rendered":"Bearing Temperature Rise Estimator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Bearing Temperature Rise Estimator<\/strong> is an efficient engineering tool designed to predict bearing temperature increases during operation based on factors such as load, speed, friction, lubrication conditions, and operating environment. It helps engineers and maintenance teams evaluate thermal performance, identify potential overheating risks, and optimize bearing selection and operating conditions. By using the Bearing Temperature Rise Estimator, users can improve machine reliability, reduce unexpected failures, and ensure longer bearing service life in various industrial applications.<\/p>\n\n\n\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  <meta name=\"description\" content=\"Estimate rolling-element bearing operating temperature, temperature rise, frictional torque and heat generation from ISO\/TR 14179 and SKF heat-balance methods.\" \/>\n  <title>Bearing Temperature Rise Estimator | ISO\/TR 14179 \u00b7 SKF Heat Balance<\/title>\n  <style id=\"btre-calc-styles\">\n    \/*\n     * WordPress-safe isolation:\n     * Every rule is scoped under #btre-root except the standalone-only\n     * body:has(...) guard, which does not match a normal WordPress page\n     * (body has header\/content\/footer siblings). This stylesheet cannot\n     * restyle theme content outside the calculator.\n     *\/\n    body:has(> #btre-root:only-child) {\n      margin: 0;\n      padding: 0;\n      background: #f8fafc;\n    }\n\n    #btre-root {\n      --bg: transparent;\n      --surface: #ffffff;\n      --surface-2: #f1f5f9;\n      --ink: #0f172a;\n      --muted: #64748b;\n      --line: #e2e8f0;\n      --steel: #1e3a8a;\n      --accent: #2563eb;\n      --accent-soft: rgba(37, 99, 235, 0.12);\n      --teal: #0d9488;\n      --teal-soft: rgba(13, 148, 136, 0.12);\n      --ok: #16a34a;\n      --ok-bg: #dcfce7;\n      --warn: #d97706;\n      --warn-bg: #fef3c7;\n      --crit: #dc2626;\n      --crit-bg: #fee2e2;\n      --radius: 12px;\n      --shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 8px 24px rgba(15, 23, 42, 0.06);\n      --mono: ui-monospace, \"Cascadia Mono\", \"Segoe UI Mono\", Consolas, monospace;\n      --sans: \"Segoe UI\", system-ui, -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n      --serif-math: \"Cambria Math\", Cambria, \"Times New Roman\", serif;\n\n      box-sizing: border-box;\n      isolation: isolate;\n      contain: layout style;\n      font-family: var(--sans);\n      font-size: 15px;\n      font-weight: 400;\n      line-height: 1.5;\n      color: var(--ink);\n      background: var(--bg);\n      width: 1000px;\n      max-width: 100%;\n      margin: 0 auto;\n      padding: 1.25rem 1rem 2rem;\n      text-align: left;\n      letter-spacing: normal;\n      text-transform: none;\n      float: none;\n      position: relative;\n      z-index: 1;\n    }\n\n    #btre-root *,\n    #btre-root *::before,\n    #btre-root *::after { box-sizing: border-box; }\n\n    #btre-root h1, #btre-root h2, #btre-root h3, #btre-root h4,\n    #btre-root p, #btre-root ul, #btre-root ol, #btre-root li,\n    #btre-root figure, #btre-root blockquote, #btre-root section,\n    #btre-root header, #btre-root footer, #btre-root div, #btre-root span,\n    #btre-root strong, #btre-root em, #btre-root i, #btre-root b {\n      margin: 0;\n      padding: 0;\n      border: none;\n      background: none;\n      box-shadow: none;\n      font-family: inherit;\n      font-size: inherit;\n      font-weight: inherit;\n      font-style: inherit;\n      line-height: inherit;\n      color: inherit;\n      letter-spacing: inherit;\n      text-transform: none;\n      text-decoration: none;\n      float: none;\n    }\n\n    #btre-root button, #btre-root input, #btre-root select, #btre-root textarea, #btre-root label {\n      font: inherit;\n      color: inherit;\n      margin: 0;\n      max-width: none;\n      min-width: 0;\n      float: none;\n    }\n\n    #btre-root button {\n      cursor: pointer;\n      background: transparent;\n      border: none;\n      padding: 0;\n      box-shadow: none;\n      text-decoration: none;\n      appearance: none;\n      -webkit-appearance: none;\n    }\n\n    #btre-root img, #btre-root svg, #btre-root video {\n      display: block;\n      max-width: 100%;\n      height: auto;\n    }\n    #btre-root canvas { display: block; max-width: 100%; }\n\n    #btre-root a { color: inherit; text-decoration: none; }\n    #btre-root table { border-collapse: collapse; border-spacing: 0; width: auto; }\n    #btre-root .mono { font-family: var(--mono); }\n    #btre-root .sym { font-family: var(--serif-math); font-style: italic; }\n    #btre-root sub, #btre-root sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n    #btre-root sub { bottom: -0.2em; }\n    #btre-root sup { top: -0.45em; }\n\n    \/* \u2500\u2500 Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    #btre-root .btre-stack {\n      display: flex;\n      flex-direction: column;\n      gap: 1.1rem;\n    }\n\n    #btre-root .btre-card {\n      background: var(--surface);\n      border: 1px solid var(--line);\n      border-radius: var(--radius);\n      box-shadow: var(--shadow);\n      overflow: hidden;\n    }\n\n    #btre-root .btre-card-head {\n      display: flex;\n      align-items: center;\n      gap: 0.55rem;\n      padding: 0.85rem 1.15rem;\n      background: var(--surface-2);\n      border-bottom: 1px solid var(--line);\n      font-size: 0.72rem;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--steel);\n    }\n\n    #btre-root .btre-card-head svg { flex-shrink: 0; color: var(--accent); }\n    #btre-root .btre-card-body { padding: 1.1rem 1.15rem 1.25rem; }\n\n    \/* \u2500\u2500 Presets \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    #btre-root .btre-presets {\n      display: grid;\n      grid-template-columns: 1fr 1fr 1fr;\n      gap: 0.5rem;\n      margin-bottom: 1.15rem;\n    }\n\n    #btre-root .btre-preset {\n      appearance: none !important;\n      -webkit-appearance: none !important;\n      text-align: left !important;\n      padding: 0.65rem 0.7rem !important;\n      border: 1px solid var(--line) !important;\n      border-radius: 8px !important;\n      background: var(--surface-2) !important;\n      color: var(--ink) !important;\n      box-shadow: none !important;\n      text-transform: none !important;\n      text-decoration: none !important;\n      line-height: 1.3 !important;\n      font-family: inherit !important;\n      cursor: pointer !important;\n      transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;\n    }\n\n    #btre-root .btre-preset:hover { border-color: var(--accent); }\n    #btre-root .btre-preset.is-active {\n      background: var(--accent-soft) !important;\n      border-color: var(--accent) !important;\n      box-shadow: 0 0 0 3px var(--accent-soft) !important;\n    }\n\n    #btre-root .btre-preset strong {\n      display: block;\n      font-size: 0.78rem;\n      font-weight: 650;\n      color: var(--ink);\n      line-height: 1.3;\n    }\n\n    #btre-root .btre-preset span {\n      display: block;\n      margin-top: 0.15rem;\n      font-size: 0.68rem;\n      color: var(--muted);\n      font-family: var(--mono);\n    }\n\n    \/* \u2500\u2500 Form \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    #btre-root .btre-group { margin-bottom: 1.15rem; }\n    #btre-root .btre-group:last-child { margin-bottom: 0; }\n\n    #btre-root .btre-group-title {\n      font-size: 0.68rem;\n      font-weight: 700;\n      letter-spacing: 0.07em;\n      text-transform: uppercase;\n      color: var(--teal);\n      margin-bottom: 0.7rem;\n      padding-bottom: 0.4rem;\n      border-bottom: 1px dashed var(--line);\n    }\n\n    #btre-root .btre-fields {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 0.75rem 0.85rem;\n    }\n\n    #btre-root .btre-field { display: flex; flex-direction: column; gap: 0.32rem; min-width: 0; }\n    #btre-root .btre-field.span-2 { grid-column: 1 \/ -1; }\n\n    #btre-root .btre-label {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      gap: 0.5rem;\n      font-size: 0.8rem;\n      font-weight: 500;\n    }\n\n    #btre-root .btre-unit {\n      color: var(--muted);\n      font-size: 0.72rem;\n      font-weight: 400;\n      font-family: var(--mono);\n      white-space: nowrap;\n    }\n\n    #btre-root .btre-input,\n    #btre-root .btre-select {\n      display: block !important;\n      width: 100% !important;\n      max-width: 100% !important;\n      height: auto !important;\n      min-height: 0 !important;\n      background: var(--surface-2) !important;\n      border: 1px solid var(--line) !important;\n      border-radius: 7px !important;\n      padding: 0.5rem 0.7rem !important;\n      font-size: 0.95rem !important;\n      font-family: inherit !important;\n      color: var(--ink) !important;\n      line-height: 1.4 !important;\n      outline: none !important;\n      box-shadow: none !important;\n      transition: border-color 0.15s, box-shadow 0.15s;\n      -moz-appearance: textfield;\n      appearance: textfield;\n    }\n\n    #btre-root .btre-input::-webkit-outer-spin-button,\n    #btre-root .btre-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n\n    #btre-root .btre-input:focus,\n    #btre-root .btre-select:focus {\n      border-color: var(--accent);\n      box-shadow: 0 0 0 3px var(--accent-soft);\n      background: #fff;\n    }\n\n    #btre-root .btre-input.is-invalid {\n      border-color: var(--crit);\n      box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.12);\n    }\n\n    #btre-root .btre-chips {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.4rem;\n      margin-top: 0.15rem;\n    }\n\n    #btre-root .btre-chip {\n      appearance: none !important;\n      -webkit-appearance: none !important;\n      font-size: 0.72rem !important;\n      font-weight: 600 !important;\n      font-family: inherit !important;\n      line-height: 1.25 !important;\n      padding: 0.28rem 0.55rem !important;\n      border-radius: 999px !important;\n      border: 1px solid var(--line) !important;\n      background: #fff !important;\n      color: var(--muted) !important;\n      box-shadow: none !important;\n      text-transform: none !important;\n      text-decoration: none !important;\n      cursor: pointer !important;\n      transition: background 0.15s, border-color 0.15s, color 0.15s;\n    }\n\n    #btre-root .btre-chip:hover,\n    #btre-root .btre-chip.is-active {\n      border-color: var(--teal) !important;\n      color: var(--teal) !important;\n      background: var(--teal-soft) !important;\n    }\n\n    #btre-root .btre-hint {\n      font-size: 0.72rem;\n      color: var(--muted);\n      margin-top: 0.15rem;\n    }\n\n    #btre-root .btre-dm {\n      margin-top: 0.55rem;\n      padding: 0.5rem 0.7rem;\n      background: var(--teal-soft);\n      border-radius: 7px;\n      font-size: 0.8rem;\n      color: #0f766e;\n    }\n\n    #btre-root .btre-calc-wrap {\n      display: flex;\n      justify-content: center;\n      margin-top: 0.25rem;\n      padding-top: 1.1rem;\n      border-top: 1px solid var(--line);\n    }\n\n    #btre-root #btnCalculate.btre-calc-btn {\n      appearance: none !important;\n      -webkit-appearance: none !important;\n      display: inline-flex !important;\n      align-items: center !important;\n      justify-content: center !important;\n      min-width: 220px !important;\n      width: auto !important;\n      max-width: 100% !important;\n      margin: 0 !important;\n      padding: 0.8rem 2.5rem !important;\n      font-size: 1.05rem !important;\n      font-weight: 700 !important;\n      font-family: inherit !important;\n      line-height: 1.25 !important;\n      letter-spacing: 0.02em !important;\n      color: #fff !important;\n      background: var(--accent) !important;\n      border: none !important;\n      border-radius: 8px !important;\n      cursor: pointer !important;\n      box-shadow: 0 1px 2px rgba(37, 99, 235, 0.25) !important;\n      text-decoration: none !important;\n      text-transform: none !important;\n      transition: background 0.15s, transform 0.1s;\n    }\n\n    #btre-root #btnCalculate.btre-calc-btn:hover { background: #1d4ed8 !important; color: #fff !important; }\n    #btre-root #btnCalculate.btre-calc-btn:active { transform: scale(0.98); }\n\n    \/* \u2500\u2500 Results hero \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n    #btre-root .btre-hero {\n      display: grid;\n      grid-template-columns: 1.15fr 0.85fr;\n      gap: 1rem;\n      margin-bottom: 1rem;\n    }\n\n    #btre-root .btre-temp-block {\n      padding: 0.85rem 1rem 1rem;\n      border-radius: 10px;\n      background: linear-gradient(180deg, #f8fafc, #eef2ff);\n      border: 1px solid var(--line);\n    }\n\n    #btre-root .btre-kicker {\n      font-size: 0.68rem;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--muted);\n    }\n\n    #btre-root .btre-temp-value {\n      display: flex;\n      align-items: baseline;\n      gap: 0.35rem;\n      margin: 0.15rem 0 0.15rem;\n      font-variant-numeric: tabular-nums;\n    }\n\n    #btre-root .btre-temp-value .btre-num {\n      font-size: 2.55rem;\n      font-weight: 750;\n      letter-spacing: -0.04em;\n      line-height: 1.05;\n      font-family: var(--mono);\n    }\n\n    #btre-root .btre-temp-value .btre-temp-unit {\n      font-size: 1rem;\n      color: var(--muted);\n      font-weight: 600;\n    }\n\n    #btre-root .btre-temp-sub {\n      font-size: 0.82rem;\n      color: var(--muted);\n    }\n\n    #btre-root .btre-temp-sub strong { color: var(--ink); font-weight: 650; }\n\n    #btre-root .btre-status-ok .btre-num { color: var(--ok); }\n    #btre-root .btre-status-warn .btre-num { color: var(--warn); }\n    #btre-root .btre-status-crit .btre-num { color: var(--crit); }\n\n    \/* Gauge *\/\n    #btre-root .btre-gauge-wrap { margin-top: 0.85rem; }\n    #btre-root .btre-gauge-track {\n      position: relative;\n      height: 12px;\n      border-radius: 999px;\n      background: linear-gradient(90deg, #16a34a 0%, #16a34a 58.3%, #d97706 58.3%, #d97706 75%, #dc2626 75%, #dc2626 100%);\n      box-shadow: inset 0 1px 2px rgba(15, 23, 42, 0.15);\n    }\n\n    #btre-root .btre-gauge-marker {\n      position: absolute;\n      top: -5px;\n      width: 4px;\n      height: 22px;\n      margin-left: -2px;\n      background: var(--ink);\n      border-radius: 2px;\n      box-shadow: 0 0 0 2px #fff;\n      transition: left 0.25s ease;\n    }\n\n    #btre-root .btre-gauge-ticks {\n      display: flex;\n      justify-content: space-between;\n      margin-top: 0.35rem;\n      font-size: 0.65rem;\n      color: var(--muted);\n      font-family: var(--mono);\n    }\n\n    #btre-root .btre-status-banner {\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      gap: 0.35rem;\n      padding: 0.9rem 1rem;\n      border-radius: 10px;\n      border: 1px solid transparent;\n    }\n\n    #btre-root .btre-status-banner.btre-status-ok { background: var(--ok-bg); border-color: #86efac; color: #166534; }\n    #btre-root .btre-status-banner.btre-status-warn { background: var(--warn-bg); border-color: #fcd34d; color: #92400e; }\n    #btre-root .btre-status-banner.btre-status-crit { background: var(--crit-bg); border-color: #fca5a5; color: #991b1b; }\n\n    #btre-root .btre-status-banner strong {\n      font-size: 0.92rem;\n      font-weight: 700;\n    }\n\n    #btre-root .btre-status-banner p { font-size: 0.78rem; opacity: 0.92; }\n\n    \/* Metrics *\/\n    #btre-root .btre-metrics {\n      display: grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 0.6rem;\n      margin-bottom: 1rem;\n    }\n\n    #btre-root .btre-metric {\n      padding: 0.7rem 0.75rem;\n      background: var(--surface-2);\n      border: 1px solid var(--line);\n      border-radius: 9px;\n    }\n\n    #btre-root .btre-metric .btre-lbl {\n      font-size: 0.65rem;\n      font-weight: 700;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      color: var(--muted);\n    }\n\n    #btre-root .btre-metric .btre-val {\n      margin-top: 0.15rem;\n      font-family: var(--mono);\n      font-size: 1.05rem;\n      font-weight: 650;\n      font-variant-numeric: tabular-nums;\n    }\n\n    #btre-root .btre-metric .btre-sub {\n      font-size: 0.68rem;\n      color: var(--muted);\n      margin-top: 0.1rem;\n    }\n\n    \/* Torque split *\/\n    #btre-root .btre-split { margin-bottom: 1.05rem; }\n    #btre-root .btre-split-bar {\n      display: flex;\n      height: 14px;\n      border-radius: 999px;\n      overflow: hidden;\n      background: var(--surface-2);\n    }\n\n    #btre-root .btre-split-m0 { background: var(--accent); }\n    #btre-root .btre-split-m1 { background: var(--teal); }\n    #btre-root .btre-split-legend {\n      display: flex;\n      gap: 1rem;\n      margin-top: 0.45rem;\n      font-size: 0.75rem;\n      color: var(--muted);\n    }\n\n    #btre-root .btre-dot {\n      display: inline-block;\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      margin-right: 0.35rem;\n      vertical-align: middle;\n    }\n\n    #btre-root .btre-dot.btre-m0 { background: var(--accent); }\n    #btre-root .btre-dot.btre-m1 { background: var(--teal); }\n\n    \/* Chart *\/\n    #btre-root .btre-chart-toolbar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 0.6rem;\n      margin-bottom: 0.65rem;\n    }\n\n    #btre-root .btre-toggle {\n      display: inline-flex;\n      padding: 3px;\n      background: var(--surface-2);\n      border: 1px solid var(--line);\n      border-radius: 8px;\n    }\n\n    #btre-root .btre-toggle button {\n      appearance: none !important;\n      -webkit-appearance: none !important;\n      font-size: 0.72rem !important;\n      font-weight: 650 !important;\n      font-family: inherit !important;\n      line-height: 1.25 !important;\n      padding: 0.32rem 0.65rem !important;\n      border-radius: 6px !important;\n      border: none !important;\n      color: var(--muted) !important;\n      background: transparent !important;\n      box-shadow: none !important;\n      text-transform: none !important;\n      cursor: pointer !important;\n    }\n\n    #btre-root .btre-toggle button.btre-active {\n      background: #fff !important;\n      color: var(--steel) !important;\n      box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08) !important;\n    }\n\n    #btre-root .btre-chart-box {\n      position: relative;\n      height: 250px;\n    }\n\n    #btre-root .btre-chart-note {\n      margin-top: 0.5rem;\n      font-size: 0.72rem;\n      color: var(--muted);\n    }\n\n    #btre-root .btre-error {\n      display: none !important;\n      margin-bottom: 0.85rem;\n      padding: 0.65rem 0.8rem;\n      background: var(--crit-bg);\n      color: #991b1b;\n      border: 1px solid #fca5a5;\n      border-radius: 8px;\n      font-size: 0.8rem;\n    }\n\n    #btre-root .btre-error.is-visible { display: block !important; }\n\n    #btre-root .btre-results { display: none !important; }\n    #btre-root .btre-results.is-visible { display: block !important; }\n\n    @media (max-width: 900px) {\n      #btre-root .btre-hero { grid-template-columns: 1fr; }\n      #btre-root .btre-metrics { grid-template-columns: 1fr 1fr; }\n    }\n\n    @media (max-width: 560px) {\n      #btre-root .btre-presets,\n      #btre-root .btre-fields { grid-template-columns: 1fr; }\n      #btre-root .btre-metrics { grid-template-columns: 1fr; }\n      #btre-root .btre-temp-value .btre-num { font-size: 2.1rem; }\n    }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"btre-root\">\n    <div class=\"btre-stack\">\n      <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 INPUTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n      <section class=\"btre-card\">\n        <div class=\"btre-card-head\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n          Operating Inputs\n        <\/div>\n        <div class=\"btre-card-body\">\n          <div class=\"btre-group\">\n            <div class=\"btre-group-title\">Bearing type presets<\/div>\n            <div class=\"btre-presets\" id=\"presetRow\"><\/div>\n            <p class=\"btre-hint\">Presets fill <span class=\"sym\">f<\/span><sub>0<\/sub> and <span class=\"sym\">f<\/span><sub>1<\/sub> (oil-bath typical). Geometry stays editable.<\/p>\n          <\/div>\n\n          <div class=\"btre-group\">\n            <div class=\"btre-group-title\">Bearing geometry<\/div>\n            <div class=\"btre-fields\">\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-d\">Inner diameter <span class=\"sym\">d<\/span><\/label>\n                  <span class=\"btre-unit\">mm<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-d\" type=\"number\" min=\"1\" step=\"0.1\" value=\"40\" \/>\n              <\/div>\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-D\">Outer diameter <span class=\"sym\">D<\/span><\/label>\n                  <span class=\"btre-unit\">mm<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-D\" type=\"number\" min=\"1\" step=\"0.1\" value=\"80\" \/>\n              <\/div>\n            <\/div>\n            <div class=\"btre-dm\">Mean diameter <span class=\"sym\">d<\/span><sub>m<\/sub> = (<span class=\"sym\">d<\/span> + <span class=\"sym\">D<\/span>)\/2 = <strong class=\"mono\" id=\"out-dm\">60.0 mm<\/strong><\/div>\n          <\/div>\n\n          <div class=\"btre-group\">\n            <div class=\"btre-group-title\">Operating parameters<\/div>\n            <div class=\"btre-fields\">\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-n\">Speed <span class=\"sym\">n<\/span><\/label>\n                  <span class=\"btre-unit\">rpm<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-n\" type=\"number\" min=\"0\" step=\"10\" value=\"3000\" \/>\n              <\/div>\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-P\">Equiv. dynamic load <span class=\"sym\">P<\/span><sub>1<\/sub><\/label>\n                  <span class=\"btre-unit\">N<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-P\" type=\"number\" min=\"0\" step=\"10\" value=\"5000\" \/>\n              <\/div>\n              <div class=\"btre-field span-2\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-Tamb\">Ambient temperature <span class=\"sym\">T<\/span><sub>ambient<\/sub><\/label>\n                  <span class=\"btre-unit\">\u00b0C<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-Tamb\" type=\"number\" step=\"0.5\" value=\"25\" \/>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"btre-group\">\n            <div class=\"btre-group-title\">Lubrication &amp; friction factors<\/div>\n            <div class=\"btre-fields\">\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-nu\">Kinematic viscosity <span class=\"sym\">\u03bd<\/span><\/label>\n                  <span class=\"btre-unit\">cSt<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-nu\" type=\"number\" min=\"0.1\" step=\"1\" value=\"68\" \/>\n                <div class=\"btre-chips\" id=\"vgChips\">\n                  <button type=\"button\" class=\"btre-chip\" data-nu=\"32\">VG 32<\/button>\n                  <button type=\"button\" class=\"btre-chip is-active\" data-nu=\"68\">VG 68<\/button>\n                  <button type=\"button\" class=\"btre-chip\" data-nu=\"150\">VG 150<\/button>\n                  <button type=\"button\" class=\"btre-chip\" data-nu=\"220\">VG 220<\/button>\n                <\/div>\n              <\/div>\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-f0\">Lubrication factor <span class=\"sym\">f<\/span><sub>0<\/sub><\/label>\n                  <span class=\"btre-unit\">1.5\u20138<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-f0\" type=\"number\" min=\"0.5\" max=\"20\" step=\"0.1\" value=\"2.0\" \/>\n              <\/div>\n              <div class=\"btre-field span-2\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-f1\">Load friction factor <span class=\"sym\">f<\/span><sub>1<\/sub><\/label>\n                  <span class=\"btre-unit\">\u2014<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-f1\" type=\"number\" min=\"0\" step=\"0.0001\" value=\"0.0006\" \/>\n                <p class=\"btre-hint\">Typical: ball 0.0005\u20130.0010 \u00b7 roller 0.0002\u20130.0005 (Palmgren load torque).<\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"btre-group\">\n            <div class=\"btre-group-title\">Heat dissipation<\/div>\n            <div class=\"btre-fields\">\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-Hs\">Heat transfer coeff. <span class=\"sym\">H<\/span><sub>s<\/sub><\/label>\n                  <span class=\"btre-unit\">W\/m\u00b2K<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-Hs\" type=\"number\" min=\"1\" step=\"1\" value=\"80\" \/>\n                <div class=\"btre-chips\" id=\"coolChips\">\n                  <button type=\"button\" class=\"btre-chip is-active\" data-hs=\"80\">Natural<\/button>\n                  <button type=\"button\" class=\"btre-chip\" data-hs=\"180\">Forced air<\/button>\n                  <button type=\"button\" class=\"btre-chip\" data-hs=\"300\">Oil cooling<\/button>\n                <\/div>\n              <\/div>\n              <div class=\"btre-field\">\n                <div class=\"btre-label\">\n                  <label for=\"inp-A\">Housing surface area <span class=\"sym\">A<\/span><\/label>\n                  <span class=\"btre-unit\">m\u00b2<\/span>\n                <\/div>\n                <input class=\"btre-input\" id=\"inp-A\" type=\"number\" min=\"0.001\" step=\"0.01\" value=\"0.10\" \/>\n                <p class=\"btre-hint\">Pillow block \u2248 0.06\u20130.20 m\u00b2 for this size class.<\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"btre-calc-wrap\">\n            <button type=\"button\" class=\"btre-calc-btn\" id=\"btnCalculate\" onclick=\"if(window.btreCalculate){window.btreCalculate();return false;}\">Calculate<\/button>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 RESULTS \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n      <section class=\"btre-card btre-results\" id=\"resultsCard\">\n        <div class=\"btre-card-head\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M4 19V5M4 19h16\"\/><path d=\"M8 15l3-4 3 2 4-6\"\/><\/svg>\n          Heat-Balance Results\n        <\/div>\n        <div class=\"btre-card-body\">\n          <div class=\"btre-error\" id=\"errBox\"><\/div>\n\n          <div class=\"btre-hero\">\n            <div class=\"btre-temp-block\" id=\"tempBlock\">\n              <div class=\"btre-kicker\">Estimated operating temperature<\/div>\n              <div class=\"btre-temp-value\">\n                <span class=\"btre-num\" id=\"out-T\">\u2014<\/span>\n                <span class=\"btre-temp-unit\">\u00b0C<\/span>\n              <\/div>\n              <div class=\"btre-temp-sub\">Temperature rise <span class=\"sym\">\u0394T<\/span> = <strong id=\"out-dT\">\u2014<\/strong> \u00b0C above ambient<\/div>\n              <div class=\"btre-gauge-wrap\">\n                <div class=\"btre-gauge-track\" aria-hidden=\"true\">\n                  <div class=\"btre-gauge-marker\" id=\"gaugeMarker\"><\/div>\n                <\/div>\n                <div class=\"btre-gauge-ticks\">\n                  <span>20 \u00b0C<\/span><span>70<\/span><span>90<\/span><span>120 \u00b0C<\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n            <div class=\"btre-status-banner\" id=\"statusBanner\">\n              <strong id=\"statusTitle\">\u2014<\/strong>\n              <p id=\"statusText\">Enter valid inputs to estimate bearing temperature.<\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"btre-metrics\">\n            <div class=\"btre-metric\">\n              <div class=\"btre-lbl\">Heat generation Q<sub>gen<\/sub><\/div>\n              <div class=\"btre-val\" id=\"out-Q\">\u2014<\/div>\n              <div class=\"btre-sub\">W at equilibrium = Q<sub>diss<\/sub><\/div>\n            <\/div>\n            <div class=\"btre-metric\">\n              <div class=\"btre-lbl\">Total torque M<\/div>\n              <div class=\"btre-val\" id=\"out-M\">\u2014<\/div>\n              <div class=\"btre-sub\">N\u00b7mm = M<sub>0<\/sub> + M<sub>1<\/sub><\/div>\n            <\/div>\n            <div class=\"btre-metric\">\n              <div class=\"btre-lbl\">Viscosity product \u03bd\u00b7n<\/div>\n              <div class=\"btre-val\" id=\"out-nun\">\u2014<\/div>\n              <div class=\"btre-sub\" id=\"out-m0branch\">M<sub>0<\/sub> formula branch<\/div>\n            <\/div>\n            <div class=\"btre-metric\">\n              <div class=\"btre-lbl\">Viscous torque M<sub>0<\/sub><\/div>\n              <div class=\"btre-val\" id=\"out-M0\">\u2014<\/div>\n              <div class=\"btre-sub\">N\u00b7mm \u00b7 lubricant churning<\/div>\n            <\/div>\n            <div class=\"btre-metric\">\n              <div class=\"btre-lbl\">Load torque M<sub>1<\/sub><\/div>\n              <div class=\"btre-val\" id=\"out-M1\">\u2014<\/div>\n              <div class=\"btre-sub\">N\u00b7mm \u00b7 f<sub>1<\/sub> \u00b7 P<sub>1<\/sub> \u00b7 d<sub>m<\/sub><\/div>\n            <\/div>\n            <div class=\"btre-metric\">\n              <div class=\"btre-lbl\">Thermal resistance<\/div>\n              <div class=\"btre-val\" id=\"out-Rth\">\u2014<\/div>\n              <div class=\"btre-sub\">K\/W = 1 \/ (H<sub>s<\/sub> \u00b7 A)<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"btre-split\">\n            <div class=\"btre-kicker\" style=\"margin-bottom:0.4rem\">Torque breakdown<\/div>\n            <div class=\"btre-split-bar\">\n              <div class=\"btre-split-m0\" id=\"splitM0\" style=\"width:50%\"><\/div>\n              <div class=\"btre-split-m1\" id=\"splitM1\" style=\"width:50%\"><\/div>\n            <\/div>\n            <div class=\"btre-split-legend\">\n              <span><i class=\"btre-dot btre-m0\"><\/i>M<sub>0<\/sub> viscous <strong class=\"mono\" id=\"pctM0\">\u2014<\/strong><\/span>\n              <span><i class=\"btre-dot btre-m1\"><\/i>M<sub>1<\/sub> load <strong class=\"mono\" id=\"pctM1\">\u2014<\/strong><\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"btre-chart-toolbar\">\n            <div class=\"btre-kicker\">Interactive visualization<\/div>\n            <div class=\"btre-toggle\" role=\"tablist\">\n              <button type=\"button\" class=\"btre-active\" id=\"btnChartSpeed\">\u0394T vs Speed<\/button>\n              <button type=\"button\" id=\"btnChartTime\">Warm-up vs Time<\/button>\n            <\/div>\n          <\/div>\n          <div class=\"btre-chart-box\">\n            <canvas id=\"btreChart\"><\/canvas>\n          <\/div>\n          <p class=\"btre-chart-note\" id=\"chartNote\">Speed sweep uses the current load, lubricant and housing. Dashed lines mark 70 \u00b0C and 90 \u00b0C alert thresholds.<\/p>\n        <\/div>\n      <\/section>\n    <\/div>\n  <\/div>\n\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\n  <script>\n    (function () {\n      \"use strict\";\n\n      var root = document.getElementById(\"btre-root\");\n      if (!root || root.getAttribute(\"data-btre-ready\") === \"1\") return;\n      root.setAttribute(\"data-btre-ready\", \"1\");\n\n      function byId(id) {\n        return root.querySelector(\"#\" + id);\n      }\n\n      var PRESETS = [\n        { id: \"dgb\", name: \"Deep Groove Ball\", hint: \"f0=2.0  f1=0.0006\", f0: 2.0, f1: 0.0006 },\n        { id: \"trb\", name: \"Tapered Roller\", hint: \"f0=4.0  f1=0.0004\", f0: 4.0, f1: 0.0004 },\n        { id: \"srb\", name: \"Spherical Roller\", hint: \"f0=4.5  f1=0.0005\", f0: 4.5, f1: 0.0005 }\n      ];\n\n      var GAUGE_MIN = 20;\n      var GAUGE_MAX = 120;\n      var chartMode = \"speed\";\n      var chart = null;\n      var activePreset = \"dgb\";\n\n      var el = {\n        d: byId(\"inp-d\"),\n        D: byId(\"inp-D\"),\n        n: byId(\"inp-n\"),\n        P: byId(\"inp-P\"),\n        Tamb: byId(\"inp-Tamb\"),\n        nu: byId(\"inp-nu\"),\n        f0: byId(\"inp-f0\"),\n        f1: byId(\"inp-f1\"),\n        Hs: byId(\"inp-Hs\"),\n        A: byId(\"inp-A\")\n      };\n\n      function num(node) {\n        var v = parseFloat(node.value);\n        return isFinite(v) ? v : NaN;\n      }\n\n      function compute(p) {\n        var dm = (p.d + p.D) \/ 2;\n        var nun = p.nu * p.n;\n        var M0;\n        var branch;\n        if (nun >= 2000) {\n          M0 = 1e-7 * p.f0 * Math.pow(nun, 2 \/ 3) * Math.pow(dm, 3);\n          branch = \"nu*n >= 2000  ->  (nu*n)^(2\/3) branch\";\n        } else {\n          M0 = 160e-7 * p.f0 * Math.pow(dm, 3);\n          branch = \"nu*n below 2000  ->  low-speed branch\";\n        }\n        var M1 = p.f1 * p.P * dm;\n        var M = M0 + M1;\n        var Qgen = (2 * Math.PI * p.n * (M \/ 1000)) \/ 60;\n        var HA = p.Hs * p.A;\n        var dT = HA > 0 ? Qgen \/ HA : Infinity;\n        var T = p.Tamb + dT;\n        return { dm: dm, nun: nun, M0: M0, M1: M1, M: M, Qgen: Qgen, HA: HA, dT: dT, T: T, branch: branch };\n      }\n\n      function statusOf(T) {\n        if (70 > T) {\n          return {\n            cls: \"btre-status-ok\",\n            title: \"Normal operation\",\n            text: \"Estimated ring\/housing temperature is below 70 C. Mineral oil or standard grease is usually acceptable if viscosity at this temperature still forms a film.\"\n          };\n        }\n        if (!(T > 90)) {\n          return {\n            cls: \"btre-status-warn\",\n            title: \"High temperature - synthetic lube recommended\",\n            text: \"70-90 C range. Check oil viscosity at operating temperature, consider synthetic grease\/oil, verify relubrication interval, and improve airflow if possible.\"\n          };\n        }\n        return {\n          cls: \"btre-status-crit\",\n          title: \"Critical - forced cooling required\",\n          text: \"Above 90 C. Reduce speed or load, lower viscosity \/ oil-jet lubrication, increase housing area, or add forced-air \/ circulating-oil cooling before running continuously.\"\n        };\n      }\n\n      function fmt(v, digits) {\n        if (!isFinite(v)) return \"-\";\n        var d = digits == null ? 1 : digits;\n        return v.toLocaleString(\"en-US\", { maximumFractionDigits: d, minimumFractionDigits: d });\n      }\n\n      function readInputs() {\n        return {\n          d: num(el.d),\n          D: num(el.D),\n          n: num(el.n),\n          P: num(el.P),\n          Tamb: num(el.Tamb),\n          nu: num(el.nu),\n          f0: num(el.f0),\n          f1: num(el.f1),\n          Hs: num(el.Hs),\n          A: num(el.A)\n        };\n      }\n\n      function validate(p) {\n        var msgs = [];\n        [\"d\", \"D\", \"n\", \"P\", \"nu\", \"f0\", \"f1\", \"Hs\", \"A\"].forEach(function (k) {\n          if (!isFinite(p[k]) || 0 > p[k]) msgs.push(\"All numeric fields must be non-negative numbers.\");\n        });\n        if (isFinite(p.d) && isFinite(p.D) && !(p.D > p.d)) msgs.push(\"Outer diameter D must be greater than inner diameter d.\");\n        if (!(p.d > 0) || !(p.D > 0)) msgs.push(\"Bearing diameters must be positive.\");\n        if (!(p.Hs > 0) || !(p.A > 0)) msgs.push(\"Heat-transfer coefficient and housing area must be positive.\");\n        if (!(p.nu > 0)) msgs.push(\"Viscosity must be greater than zero.\");\n        return msgs.filter(function (m, i, a) { return a.indexOf(m) === i; });\n      }\n\n      function markInvalid(p) {\n        el.d.classList.toggle(\"is-invalid\", !(p.d > 0) || !(p.D > p.d));\n        el.D.classList.toggle(\"is-invalid\", !(p.D > 0) || !(p.D > p.d));\n        el.n.classList.toggle(\"is-invalid\", !(p.n >= 0));\n        el.P.classList.toggle(\"is-invalid\", !(p.P >= 0));\n        el.nu.classList.toggle(\"is-invalid\", !(p.nu > 0));\n        el.f0.classList.toggle(\"is-invalid\", !(p.f0 > 0));\n        el.f1.classList.toggle(\"is-invalid\", !(p.f1 >= 0));\n        el.Hs.classList.toggle(\"is-invalid\", !(p.Hs > 0));\n        el.A.classList.toggle(\"is-invalid\", !(p.A > 0));\n      }\n\n      function cloneParams(p, n) {\n        return {\n          d: p.d, D: p.D, n: n, P: p.P, Tamb: p.Tamb,\n          nu: p.nu, f0: p.f0, f1: p.f1, Hs: p.Hs, A: p.A\n        };\n      }\n\n      function buildSpeedSeries(p) {\n        var nMax = Math.max(p.n * 2, 4000);\n        var nMaxRound = Math.ceil(nMax \/ 500) * 500;\n        var labels = [];\n        var temps = [];\n        var amb = [];\n        var lim70 = [];\n        var lim90 = [];\n        var step = !(nMaxRound > 6000) ? 100 : 200;\n        var n;\n        for (n = 0; !(n > nMaxRound); n += step) {\n          var r = compute(cloneParams(p, n));\n          labels.push(n);\n          temps.push(r.T);\n          amb.push(p.Tamb);\n          lim70.push(70);\n          lim90.push(90);\n        }\n        return {\n          labels: labels,\n          temps: temps,\n          amb: amb,\n          lim70: lim70,\n          lim90: lim90,\n          xTitle: \"Rotational speed n (rpm)\",\n          yTitle: \"Temperature (C)\"\n        };\n      }\n\n      function thermalCapacity(A) {\n        var thickness = 0.012;\n        var rho = 7850;\n        var cp = 480;\n        return A * thickness * rho * cp;\n      }\n\n      function buildTimeSeries(p, r) {\n        var Cth = thermalCapacity(p.A);\n        var tau = r.HA > 0 ? Cth \/ r.HA : 1;\n        var tEnd = Math.min(Math.max(tau * 5, 300), 7200);\n        var labels = [];\n        var temps = [];\n        var amb = [];\n        var lim70 = [];\n        var lim90 = [];\n        var nPts = 80;\n        var i;\n        for (i = 0; !(i > nPts); i += 1) {\n          var t = (tEnd * i) \/ nPts;\n          var T = r.T + (p.Tamb - r.T) * Math.exp(-t \/ tau);\n          labels.push(t \/ 60);\n          temps.push(T);\n          amb.push(p.Tamb);\n          lim70.push(70);\n          lim90.push(90);\n        }\n        return {\n          labels: labels,\n          temps: temps,\n          amb: amb,\n          lim70: lim70,\n          lim90: lim90,\n          xTitle: \"Time (min)\",\n          yTitle: \"Temperature (C)\",\n          tauMin: tau \/ 60,\n          Cth: Cth\n        };\n      }\n\n      function renderChart(series) {\n        var canvas = byId(\"btreChart\");\n        if (!canvas || typeof Chart === \"undefined\") return;\n        try {\n          var ctx = canvas.getContext(\"2d\");\n          var data = {\n            labels: series.labels,\n            datasets: [\n              {\n                label: \"Bearing temperature\",\n                data: series.temps,\n                borderColor: \"#2563eb\",\n                backgroundColor: \"rgba(37, 99, 235, 0.10)\",\n                fill: true,\n                tension: 0.25,\n                borderWidth: 2,\n                pointRadius: 0,\n                pointHoverRadius: 4\n              },\n              {\n                label: \"Ambient\",\n                data: series.amb,\n                borderColor: \"#94a3b8\",\n                borderDash: [5, 4],\n                borderWidth: 1.5,\n                pointRadius: 0,\n                fill: false\n              },\n              {\n                label: \"70 C alert\",\n                data: series.lim70,\n                borderColor: \"#d97706\",\n                borderDash: [2, 4],\n                borderWidth: 1,\n                pointRadius: 0,\n                fill: false\n              },\n              {\n                label: \"90 C critical\",\n                data: series.lim90,\n                borderColor: \"#dc2626\",\n                borderDash: [2, 4],\n                borderWidth: 1,\n                pointRadius: 0,\n                fill: false\n              }\n            ]\n          };\n          var options = {\n            responsive: true,\n            maintainAspectRatio: false,\n            interaction: { mode: \"index\", intersect: false },\n            plugins: {\n              legend: {\n                position: \"bottom\",\n                labels: { boxWidth: 12, font: { size: 11 }, color: \"#475569\" }\n              },\n              tooltip: {\n                callbacks: {\n                  title: function (items) {\n                    var x = items[0].label;\n                    return chartMode === \"speed\" ? (\"n = \" + x + \" rpm\") : (\"t = \" + Number(x).toFixed(1) + \" min\");\n                  },\n                  label: function (item) {\n                    return item.dataset.label + \": \" + Number(item.parsed.y).toFixed(1) + \" C\";\n                  }\n                }\n              }\n            },\n            scales: {\n              x: {\n                title: { display: true, text: series.xTitle, color: \"#64748b\", font: { size: 11 } },\n                ticks: { color: \"#64748b\", maxTicksLimit: 8, font: { size: 10 } },\n                grid: { color: \"#e2e8f0\" }\n              },\n              y: {\n                title: { display: true, text: series.yTitle, color: \"#64748b\", font: { size: 11 } },\n                ticks: { color: \"#64748b\", font: { size: 10 } },\n                grid: { color: \"#e2e8f0\" }\n              }\n            }\n          };\n          if (chart) {\n            chart.data = data;\n            chart.options.scales.x.title.text = series.xTitle;\n            chart.update(\"none\");\n          } else {\n            chart = new Chart(ctx, { type: \"line\", data: data, options: options });\n          }\n        } catch (err) {}\n      }\n\n      function setStatus(cls, title, text) {\n        var block = byId(\"tempBlock\");\n        var banner = byId(\"statusBanner\");\n        block.classList.remove(\"btre-status-ok\", \"btre-status-warn\", \"btre-status-crit\");\n        banner.classList.remove(\"btre-status-ok\", \"btre-status-warn\", \"btre-status-crit\");\n        block.classList.add(cls);\n        banner.classList.add(cls);\n        byId(\"statusTitle\").textContent = title;\n        byId(\"statusText\").textContent = text;\n      }\n\n      function updateDm() {\n        var d = num(el.d);\n        var D = num(el.D);\n        if (isFinite(d) && isFinite(D)) {\n          byId(\"out-dm\").textContent = fmt((d + D) \/ 2, 1) + \" mm\";\n        }\n      }\n\n      function update() {\n        var p = readInputs();\n        markInvalid(p);\n        updateDm();\n        var errs = validate(p);\n        var errBox = byId(\"errBox\");\n\n        if (errs.length) {\n          errBox.textContent = errs[0];\n          errBox.classList.add(\"is-visible\");\n          byId(\"out-T\").textContent = \"-\";\n          byId(\"out-dT\").textContent = \"-\";\n          setStatus(\"btre-status-warn\", \"Invalid input\", errs[0]);\n          return;\n        }\n        errBox.classList.remove(\"is-visible\");\n\n        var r = compute(p);\n        byId(\"out-T\").textContent = fmt(r.T, 1);\n        byId(\"out-dT\").textContent = fmt(r.dT, 1);\n        byId(\"out-Q\").textContent = fmt(r.Qgen, 2) + \" W\";\n        byId(\"out-M\").textContent = fmt(r.M, 1);\n        byId(\"out-M0\").textContent = fmt(r.M0, 1);\n        byId(\"out-M1\").textContent = fmt(r.M1, 1);\n        byId(\"out-nun\").textContent = fmt(r.nun, 0);\n        byId(\"out-m0branch\").textContent = r.branch;\n        byId(\"out-Rth\").textContent = fmt(1 \/ r.HA, 3);\n\n        var st = statusOf(r.T);\n        setStatus(st.cls, st.title, st.text);\n\n        var pct = Math.max(GAUGE_MIN, Math.min(GAUGE_MAX, r.T));\n        var left = ((pct - GAUGE_MIN) \/ (GAUGE_MAX - GAUGE_MIN)) * 100;\n        byId(\"gaugeMarker\").style.left = left + \"%\";\n\n        var sum = Math.abs(r.M0) + Math.abs(r.M1);\n        var p0 = sum > 0 ? (100 * r.M0 \/ sum) : 50;\n        var p1 = 100 - p0;\n        byId(\"splitM0\").style.width = p0 + \"%\";\n        byId(\"splitM1\").style.width = p1 + \"%\";\n        byId(\"pctM0\").textContent = fmt(p0, 0) + \"%\";\n        byId(\"pctM1\").textContent = fmt(p1, 0) + \"%\";\n\n        if (chartMode === \"speed\") {\n          renderChart(buildSpeedSeries(p));\n          byId(\"chartNote\").textContent =\n            \"Speed sweep at current load, lubricant and housing. Marker thresholds: 70 C (amber) and 90 C (red).\";\n        } else {\n          var ts = buildTimeSeries(p, r);\n          renderChart(ts);\n          byId(\"chartNote\").textContent =\n            \"First-order warm-up from ambient. Thermal time constant tau ~ \" +\n            fmt(ts.tauMin, 1) + \" min (Cth ~ \" + fmt(ts.Cth \/ 1000, 1) + \" kJ\/K, 12 mm steel wall).\";\n        }\n\n        if (chart) chart.resize();\n      }\n\n      function runCalculate() {\n        var resultsCard = byId(\"resultsCard\");\n        if (!resultsCard) return;\n        resultsCard.classList.add(\"is-visible\");\n        try {\n          update();\n        } catch (err) {}\n        if (typeof requestAnimationFrame === \"function\") {\n          requestAnimationFrame(function () {\n            if (chart) chart.resize();\n          });\n        }\n        if (resultsCard.scrollIntoView) {\n          resultsCard.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        }\n      }\n\n      window.btreCalculate = runCalculate;\n\n      function renderPresets() {\n        var row = byId(\"presetRow\");\n        row.textContent = \"\";\n        PRESETS.forEach(function (pr) {\n          var btn = document.createElement(\"button\");\n          btn.type = \"button\";\n          btn.className = \"btre-preset\" + (pr.id === activePreset ? \" is-active\" : \"\");\n          btn.setAttribute(\"data-id\", pr.id);\n          var strong = document.createElement(\"strong\");\n          strong.textContent = pr.name;\n          var span = document.createElement(\"span\");\n          span.textContent = pr.hint;\n          btn.appendChild(strong);\n          btn.appendChild(span);\n          row.appendChild(btn);\n        });\n      }\n\n      byId(\"presetRow\").addEventListener(\"click\", function (e) {\n        var btn = e.target.closest ? e.target.closest(\".btre-preset\") : null;\n        if (!btn) return;\n        var pr = PRESETS.filter(function (x) { return x.id === btn.getAttribute(\"data-id\"); })[0];\n        if (!pr) return;\n        activePreset = pr.id;\n        el.f0.value = pr.f0.toFixed(1);\n        el.f1.value = pr.f1.toFixed(4);\n        renderPresets();\n      });\n\n      byId(\"vgChips\").addEventListener(\"click\", function (e) {\n        var btn = e.target.closest ? e.target.closest(\".btre-chip\") : null;\n        if (!btn) return;\n        el.nu.value = btn.getAttribute(\"data-nu\");\n        Array.prototype.forEach.call(this.querySelectorAll(\".btre-chip\"), function (c) {\n          c.classList.toggle(\"is-active\", c === btn);\n        });\n      });\n\n      byId(\"coolChips\").addEventListener(\"click\", function (e) {\n        var btn = e.target.closest ? e.target.closest(\".btre-chip\") : null;\n        if (!btn) return;\n        el.Hs.value = btn.getAttribute(\"data-hs\");\n        Array.prototype.forEach.call(this.querySelectorAll(\".btre-chip\"), function (c) {\n          c.classList.toggle(\"is-active\", c === btn);\n        });\n      });\n\n      el.nu.addEventListener(\"input\", function () {\n        var v = String(parseInt(el.nu.value, 10));\n        Array.prototype.forEach.call(root.querySelectorAll(\"#vgChips .btre-chip\"), function (c) {\n          c.classList.toggle(\"is-active\", c.getAttribute(\"data-nu\") === v);\n        });\n      });\n\n      el.Hs.addEventListener(\"input\", function () {\n        var v = String(parseInt(el.Hs.value, 10));\n        Array.prototype.forEach.call(root.querySelectorAll(\"#coolChips .btre-chip\"), function (c) {\n          c.classList.toggle(\"is-active\", c.getAttribute(\"data-hs\") === v);\n        });\n      });\n\n      byId(\"btnChartSpeed\").addEventListener(\"click\", function () {\n        chartMode = \"speed\";\n        this.classList.add(\"btre-active\");\n        byId(\"btnChartTime\").classList.remove(\"btre-active\");\n        if (byId(\"resultsCard\").classList.contains(\"is-visible\")) update();\n      });\n\n      byId(\"btnChartTime\").addEventListener(\"click\", function () {\n        chartMode = \"time\";\n        this.classList.add(\"btre-active\");\n        byId(\"btnChartSpeed\").classList.remove(\"btre-active\");\n        if (byId(\"resultsCard\").classList.contains(\"is-visible\")) update();\n      });\n\n      el.d.addEventListener(\"input\", updateDm);\n      el.D.addEventListener(\"input\", updateDm);\n\n      byId(\"btnCalculate\").addEventListener(\"click\", runCalculate);\n\n      renderPresets();\n      updateDm();\n    })();\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Bearing Temperature Rise Estimator is an efficient engineering tool designed to predict bearing temperature increases during operation based on factors such as load, speed,&#8230;<\/p>","protected":false},"author":2,"featured_media":24662,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8584,8586,3515,8585],"class_list":["post-24661","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bearing-temperature","tag-bearing-tools","tag-engineering-calculator","tag-thermal-analysis","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Bearing-Temperature-Rise-Estimator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24661"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24661\/revisions"}],"predecessor-version":[{"id":24664,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24661\/revisions\/24664"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24662"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}