{"id":100221,"date":"2026-02-15T20:28:06","date_gmt":"2026-02-15T20:28:06","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100221"},"modified":"2026-03-05T15:43:25","modified_gmt":"2026-03-05T15:43:25","slug":"shaft-alignment-tolerance","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/bn\/calculators\/shaft-alignment-tolerance\/","title":{"rendered":"\u09b6\u09cd\u09af\u09be\u09ab\u099f \u09b8\u0982\u09af\u09cb\u0997 \u09b8\u09b9\u09a8\u09b6\u09c0\u09b2\u09a4\u09be \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0 | ISO 14691 \u09ac\u09bf\u09a8\u09be\u09ae\u09c2\u09b2\u09cd\u09af\u09c7 \u09b8\u09b0\u099e\u09cd\u099c\u09be\u09ae"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Shaft Alignment Tolerance Calculator\",\"alternateName\":[\"Coupling Alignment Calculator\",\"Misalignment Tolerance Calculator\",\"ISO 14691 Calculator\"],\"description\":\"Free online engineering calculator for shaft alignment tolerances based on ISO 14691 guidelines. Determine permissible offset and angular misalignment for any coupling type and RPM.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/shaft-alignment-tolerance\/\",\"applicationCategory\":\"Engineering Calculator\",\"operatingSystem\":\"Any (Web Browser)\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"EUR\"},\"creator\":{\"@type\":\"Organization\",\"name\":\"Vibromera\",\"url\":\"https:\/\/vibromera.eu\/\"},\"datePublished\":\"2024-01-01\",\"dateModified\":\"2025-02-14\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true,\"featureList\":[\"Flexible, high-performance, and rigid coupling types\",\"RPM-based tolerance lookup\",\"Offset and angular misalignment\",\"mrad and mm\/100mm angular units\",\"Auto-calculation on input change\",\"URL parameter sharing\",\"Calculation history\"],\"keywords\":\"shaft alignment, coupling tolerance, offset misalignment, angular misalignment, ISO 14691, laser alignment\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"What is shaft alignment?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Shaft alignment is the process of positioning two or more shafts so that their rotational centerlines are collinear during normal operating conditions. Proper alignment minimizes vibration, bearing loads, seal wear, and energy consumption.\"}},\n{\"@type\":\"Question\",\"name\":\"What is the difference between offset and angular misalignment?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Offset (parallel) misalignment occurs when two shaft centerlines are parallel but displaced from each other. Angular misalignment occurs when shaft centerlines intersect at an angle. Most real-world misalignment is a combination of both.\"}},\n{\"@type\":\"Question\",\"name\":\"How precise must shaft alignment be?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Alignment precision depends on operating speed and coupling type. At 1500 RPM with flexible couplings, tolerances are typically 0.08 mm offset and 0.10 mm\/100mm angular. Higher speeds require tighter tolerances because misalignment forces increase with the square of speed.\"}},\n{\"@type\":\"Question\",\"name\":\"Laser alignment vs dial indicators \u2014 which is better?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Laser alignment systems are faster, more accurate, and easier to use, especially for long spans. Dial indicators are lower cost and work well for simple setups. Laser systems typically achieve \u00b10.01 mm accuracy vs \u00b10.02\u20130.05 mm for dial indicators.\"}},\n{\"@type\":\"Question\",\"name\":\"Why are tolerances tighter at higher speeds?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Misalignment generates dynamic forces that increase with the square of rotational speed. A small misalignment at 6000 RPM produces 16 times the force of the same misalignment at 1500 RPM, leading to accelerated bearing and seal wear, higher vibration, and potential coupling failure.\"}}\n]}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[\n{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/vibromera.eu\/\"},\n{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculators\",\"item\":\"https:\/\/vibromera.eu\/calculators\/\"},\n{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Shaft Alignment Tolerance Calculator\",\"item\":\"https:\/\/vibromera.eu\/calculators\/shaft-alignment-tolerance\/\"}\n]}\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&#038;family=JetBrains+Mono:wght@400;500;600&#038;family=Fraunces:opsz,wght@9..144,700;9..144,800&#038;display=swap\" rel=\"stylesheet\">\n\n<style>\n:root {\n    --vc-bg: #f4f1ec;\n    --vc-surface: #ffffff;\n    --vc-surface-alt: #f8f6f2;\n    --vc-ink: #1a1a1a;\n    --vc-ink-secondary: #5a5650;\n    --vc-ink-muted: #8a857e;\n    --vc-accent: #c85a2a;\n    --vc-accent-hover: #b04d22;\n    --vc-accent-light: #fdf0ea;\n    --vc-blue: #2a5c8c;\n    --vc-blue-light: #eaf1f8;\n    --vc-green: #2a7a4b;\n    --vc-green-light: #eaf8ef;\n    --vc-yellow: #a67c00;\n    --vc-yellow-light: #fef9e8;\n    --vc-red: #b91c1c;\n    --vc-red-light: #fef2f2;\n    --vc-border: #d9d4cc;\n    --vc-border-light: #e8e4dd;\n    --vc-shadow: 0 1px 3px rgba(26,26,26,0.06), 0 4px 12px rgba(26,26,26,0.04);\n    --vc-shadow-lg: 0 4px 12px rgba(26,26,26,0.08), 0 16px 40px rgba(26,26,26,0.06);\n    --vc-radius: 8px;\n    --vc-radius-lg: 12px;\n    --vc-font: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    --vc-mono: 'JetBrains Mono', 'Consolas', 'Monaco', monospace;\n    --vc-display: 'Fraunces', Georgia, serif;\n}\n\n.vc-calculator {\n    font-family: var(--vc-font);\n    font-size: 15px;\n    line-height: 1.65;\n    color: var(--vc-ink);\n    max-width: 960px;\n    margin: 0 auto;\n    padding: 20px 16px 40px;\n    -webkit-font-smoothing: antialiased;\n}\n.vc-calculator *, .vc-calculator *::before, .vc-calculator *::after { box-sizing: border-box; }\n\n\/* \u2500\u2500 HEADER \u2500\u2500 *\/\n.vc-header { text-align: center; padding: 48px 24px 40px; position: relative; }\n.vc-header::after { content:''; position:absolute; bottom:0; left:50%; transform:translateX(-50%); width:80px; height:3px; background:var(--vc-accent); border-radius:2px; }\n.vc-header-eyebrow { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:var(--vc-accent); margin:0 0 12px; }\n.vc-header-title { font-family:var(--vc-display); font-size:clamp(24px,4vw,36px); font-weight:800; line-height:1.15; color:var(--vc-ink); margin:0 0 16px; letter-spacing:-0.02em; }\n.vc-header-subtitle { font-size:15px; color:var(--vc-ink-secondary); margin:0 auto 20px; max-width:600px; }\n.vc-badges { display:inline-flex; gap:8px; flex-wrap:wrap; justify-content:center; }\n.vc-badge { font-family:var(--vc-mono); font-size:11px; font-weight:500; padding:4px 10px; border-radius:4px; background:var(--vc-surface); border:1px solid var(--vc-border); color:var(--vc-ink-secondary); }\n\n\/* \u2500\u2500 CARD \u2500\u2500 *\/\n.vc-card { background:var(--vc-surface); border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); box-shadow:var(--vc-shadow); overflow:hidden; margin-top:32px; }\n\n\/* \u2500\u2500 FORM \u2500\u2500 *\/\n.vc-form { padding:24px; }\n.vc-form-grid { display:grid; grid-template-columns:1fr 1fr; gap:18px; }\n@media(max-width:600px) { .vc-form-grid { grid-template-columns:1fr; } }\n.vc-field { display:flex; flex-direction:column; }\n.vc-field-full { grid-column: 1 \/ -1; }\n.vc-label { font-size:12px; font-weight:600; letter-spacing:0.04em; text-transform:uppercase; color:var(--vc-ink-secondary); margin-bottom:6px; }\n.vc-label-hint { font-weight:400; text-transform:none; letter-spacing:0; color:var(--vc-ink-muted); font-size:11px; }\n.vc-select, .vc-input { width:100%; padding:10px 12px; border:1.5px solid var(--vc-border); border-radius:6px; font-family:var(--vc-font); font-size:14px; color:var(--vc-ink); background:var(--vc-surface); transition:border-color 0.15s, box-shadow 0.15s; }\n.vc-select { padding-right:36px; appearance:none; -webkit-appearance:none; cursor:pointer; background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='none' stroke='%235a5650' stroke-width='2'%3E%3Cpath d='M4 6l4 4 4-4'\/%3E%3C\/svg%3E\"); background-repeat:no-repeat; background-position:right 10px center; }\n.vc-select:focus, .vc-input:focus { outline:none; border-color:var(--vc-accent); box-shadow:0 0 0 3px rgba(200,90,42,0.12); }\n.vc-select:hover, .vc-input:hover { border-color:var(--vc-ink-muted); }\n\n\/* \u2500\u2500 PRESETS \u2500\u2500 *\/\n.vc-presets { display:flex; flex-wrap:wrap; gap:8px; margin-top:18px; padding-top:18px; border-top:1px solid var(--vc-border-light); }\n.vc-presets-label { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); width:100%; margin-bottom:2px; }\n.vc-preset-btn { padding:5px 12px; font-family:var(--vc-font); font-size:12px; font-weight:500; border:1px solid var(--vc-border); border-radius:6px; background:var(--vc-surface-alt); color:var(--vc-ink-secondary); cursor:pointer; transition:all 0.15s; }\n.vc-preset-btn:hover { border-color:var(--vc-accent); color:var(--vc-accent); background:var(--vc-accent-light); }\n\n\/* \u2500\u2500 RESULTS \u2500\u2500 *\/\n.vc-results { border-top:1px solid var(--vc-border-light); background:var(--vc-surface-alt); padding:0; max-height:0; overflow:hidden; transition:max-height 0.5s cubic-bezier(0.4,0,0.2,1), padding 0.3s; }\n.vc-results.vc-visible { max-height:2000px; padding:24px; }\n.vc-results-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:18px; }\n.vc-results-title { font-family:var(--vc-display); font-size:20px; font-weight:700; color:var(--vc-ink); margin:0; }\n.vc-copy-btn { display:inline-flex; align-items:center; gap:5px; padding:6px 12px; border:1px solid var(--vc-border); border-radius:6px; background:var(--vc-surface); font-family:var(--vc-font); font-size:12px; font-weight:500; color:var(--vc-ink-secondary); cursor:pointer; transition:all 0.15s; }\n.vc-copy-btn:hover { border-color:var(--vc-accent); color:var(--vc-accent); }\n.vc-copy-btn.vc-copied { background:var(--vc-green-light); border-color:var(--vc-green); color:var(--vc-green); }\n\n.vc-result-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:20px; }\n@media(max-width:500px) { .vc-result-grid { grid-template-columns:1fr; } }\n.vc-rcard { background:var(--vc-surface); border:1px solid var(--vc-border-light); border-radius:var(--vc-radius); padding:16px; transition:transform 0.2s; }\n.vc-rcard:hover { transform:translateY(-1px); }\n.vc-rcard-primary { border-color:var(--vc-accent); border-width:2px; background:linear-gradient(135deg, #fdf6f2 0%, var(--vc-surface) 100%); grid-column:1 \/ -1; }\n.vc-rcard-label { font-family:var(--vc-mono); font-size:10px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); margin-bottom:4px; }\n.vc-rcard-value { font-family:var(--vc-mono); font-size:22px; font-weight:600; color:var(--vc-ink); line-height:1.2; }\n.vc-rcard-primary .vc-rcard-value { font-size:30px; color:var(--vc-accent); }\n.vc-rcard-unit { font-size:14px; font-weight:400; color:var(--vc-ink-secondary); }\n\n\/* \u2500\u2500 STATUS BADGES \u2500\u2500 *\/\n.vc-status { display:inline-block; padding:3px 10px; border-radius:4px; font-family:var(--vc-mono); font-size:11px; font-weight:600; letter-spacing:0.04em; }\n.vc-status-pass { background:var(--vc-green-light); color:var(--vc-green); }\n.vc-status-warn { background:var(--vc-yellow-light); color:var(--vc-yellow); }\n.vc-status-fail { background:var(--vc-red-light); color:var(--vc-red); }\n\n\/* \u2500\u2500 COLLAPSIBLE SECTIONS \u2500\u2500 *\/\n.vc-section { margin-top:24px; border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); background:var(--vc-surface); box-shadow:var(--vc-shadow); overflow:hidden; }\n.vc-section-toggle { width:100%; display:flex; align-items:center; justify-content:space-between; padding:18px 24px; border:none; background:transparent; cursor:pointer; font-family:var(--vc-font); text-align:left; transition:background 0.15s; }\n.vc-section-toggle:hover { background:var(--vc-surface-alt); }\n.vc-section-toggle-text { display:flex; align-items:center; gap:10px; }\n.vc-section-icon { font-size:20px; line-height:1; }\n.vc-section-title { font-family:var(--vc-display); font-size:18px; font-weight:700; color:var(--vc-ink); margin:0; }\n.vc-section-chevron { width:20px; height:20px; color:var(--vc-ink-muted); transition:transform 0.3s; flex-shrink:0; }\n.vc-section.vc-open .vc-section-chevron { transform:rotate(180deg); }\n.vc-section-body { max-height:0; overflow:hidden; transition:max-height 0.4s cubic-bezier(0.4,0,0.2,1); }\n.vc-section.vc-open .vc-section-body { max-height:20000px; }\n.vc-section-inner { padding:0 24px 24px; border-top:1px solid var(--vc-border-light); }\n\n\/* \u2500\u2500 THEORY \u2500\u2500 *\/\n.vc-theory h3 { font-family:var(--vc-display); font-size:17px; font-weight:700; color:var(--vc-ink); margin:28px 0 10px; }\n.vc-theory h3:first-child { margin-top:20px; }\n.vc-theory p { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 10px; }\n.vc-theory ul, .vc-theory ol { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 12px 18px; padding:0; }\n.vc-theory li { margin-bottom:5px; }\n.vc-formula-box { background:var(--vc-surface-alt); border:2px solid var(--vc-border); border-radius:6px; padding:14px 20px; font-family:var(--vc-mono); font-size:16px; font-weight:500; text-align:center; margin:14px 0; color:var(--vc-ink); overflow-x:auto; }\n.vc-info-box { background:var(--vc-blue-light); border-left:3px solid var(--vc-blue); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-info-box p { margin:0; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-warning-box { background:var(--vc-yellow-light); border-left:3px solid var(--vc-yellow); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-example-box { background:var(--vc-surface-alt); border:1px solid var(--vc-border-light); border-radius:6px; padding:16px; margin:14px 0; }\n.vc-example-title { font-family:var(--vc-mono); font-size:13px; font-weight:600; color:var(--vc-accent); margin-bottom:8px; }\n.vc-table { width:100%; border-collapse:collapse; margin:14px 0; font-size:13px; }\n.vc-table th, .vc-table td { padding:10px 12px; border:1px solid var(--vc-border-light); text-align:left; }\n.vc-table th { background:var(--vc-surface-alt); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:0.05em; color:var(--vc-ink-secondary); }\n.vc-table tr:nth-child(even) { background:var(--vc-surface-alt); }\n@media(max-width:600px) { .vc-table { font-size:12px; } .vc-table th, .vc-table td { padding:8px; } }\n\n\/* \u2500\u2500 FAQ \u2500\u2500 *\/\n.vc-faq-list { display:flex; flex-direction:column; gap:8px; margin-top:20px; }\n.vc-faq-item { border:1px solid var(--vc-border-light); border-radius:6px; overflow:hidden; }\n.vc-faq-q { width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px; padding:14px 16px; border:none; background:var(--vc-surface-alt); cursor:pointer; font-family:var(--vc-font); font-size:15px; font-weight:600; color:var(--vc-ink); text-align:left; transition:background 0.15s; }\n.vc-faq-q:hover { background:#ede9e3; }\n.vc-faq-chevron { width:16px; height:16px; color:var(--vc-ink-muted); flex-shrink:0; transition:transform 0.25s; }\n.vc-faq-item.vc-open .vc-faq-chevron { transform:rotate(180deg); }\n.vc-faq-a { max-height:0; overflow:hidden; transition:max-height 0.35s; }\n.vc-faq-item.vc-open .vc-faq-a { max-height:1200px; }\n.vc-faq-a-inner { padding:14px 16px; border-top:1px solid var(--vc-border-light); font-size:14px; color:var(--vc-ink-secondary); }\n.vc-faq-a-inner p { margin:0 0 8px; }\n.vc-faq-a-inner p:last-child { margin-bottom:0; }\n.vc-faq-a-inner ul { margin:4px 0 8px 16px; padding:0; }\n.vc-faq-a-inner li { margin-bottom:3px; }\n\n\/* \u2500\u2500 RELATED \u2500\u2500 *\/\n.vc-related { display:flex; flex-wrap:wrap; gap:10px; margin-top:16px; }\n.vc-related-link { display:inline-block; padding:8px 16px; font-family:var(--vc-font); font-size:13px; font-weight:600; background:var(--vc-surface-alt); color:var(--vc-ink-secondary); border:1px solid var(--vc-border); border-radius:var(--vc-radius); text-decoration:none; transition:all 0.15s; }\n.vc-related-link:hover { border-color:var(--vc-accent); color:var(--vc-accent); background:var(--vc-accent-light); }\n\n\/* \u2500\u2500 PROMO \u2500\u2500 *\/\n.vc-promo { margin-top:24px; padding:20px; background:linear-gradient(135deg, var(--vc-accent-light), var(--vc-surface)); border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); display:flex; align-items:center; gap:16px; }\n.vc-promo-text { flex:1; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-promo-text strong { color:var(--vc-ink); }\n.vc-promo-link { padding:8px 20px; font-size:13px; font-weight:700; color:#fff; background:var(--vc-accent); border-radius:var(--vc-radius); text-decoration:none; white-space:nowrap; transition:background 0.15s; }\n.vc-promo-link:hover { background:var(--vc-accent-hover); }\n\n\/* \u2500\u2500 FOOTER \u2500\u2500 *\/\n.vc-footer { text-align:center; padding:32px 16px; font-size:13px; color:var(--vc-ink-muted); }\n.vc-footer a { color:var(--vc-accent); text-decoration:none; }\n.vc-footer a:hover { text-decoration:underline; }\n.vc-footer-links { margin-top:8px; font-size:12px; }\n.vc-footer-links a { margin:0 8px; }\n\n\/* \u2500\u2500 PRINT \u2500\u2500 *\/\n@media print {\n    .vc-section-body { max-height:none!important; }\n    .vc-faq-a { max-height:none!important; }\n    .vc-results { max-height:none!important; padding:24px!important; }\n    .vc-copy-btn, .vc-section-chevron, .vc-faq-chevron, .vc-presets, .vc-promo { display:none!important; }\n}\n<\/style>\n\n<div class=\"vc-calculator\" id=\"vc-shaft-alignment\">\n\n<!-- Header -->\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool<\/p>\n    <h1 class=\"vc-header-title\">Shaft Alignment Tolerance Calculator<\/h1>\n    <p class=\"vc-header-subtitle\">Determine permissible offset and angular misalignment tolerances for rotating machinery based on coupling type and operating speed.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">ISO 14691<\/span>\n        <span class=\"vc-badge\">Offset &amp; Angular<\/span>\n        <span class=\"vc-badge\">All Coupling Types<\/span>\n    <\/div>\n<\/header>\n\n<!-- Calculator Card -->\n<div class=\"vc-card\">\n    <form class=\"vc-form\" id=\"vc-form\" autocomplete=\"off\">\n        <div class=\"vc-form-grid\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-coupling\">Coupling Type<\/label>\n                <select class=\"vc-select\" id=\"vc-coupling\">\n                    <option value=\"flexible\" selected>Flexible \u2014 General purpose<\/option>\n                    <option value=\"high-perf\">Flexible \u2014 High-performance<\/option>\n                    <option value=\"rigid\">Rigid coupling<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-speed\">Shaft Speed <span class=\"vc-label-hint\">(RPM)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-speed\" inputmode=\"decimal\" step=\"any\" min=\"1\" placeholder=\"e.g. 1500\" value=\"1500\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-spacer\">Coupling Spacer Length <span class=\"vc-label-hint\">(mm, optional for angular)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-spacer\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 100\" value=\"100\">\n            <\/div>\n        <\/div>\n\n        <!-- Presets -->\n        <div class=\"vc-presets\">\n            <div class=\"vc-presets-label\">Quick presets<\/div>\n            <button type=\"button\" class=\"vc-preset-btn\" data-c=\"flexible\" data-s=\"1500\" data-sp=\"100\">Pump 1500 RPM flexible<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-c=\"flexible\" data-s=\"3000\" data-sp=\"150\">Motor-fan 3000 RPM<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-c=\"high-perf\" data-s=\"6000\" data-sp=\"200\">Turbine 6000 RPM<\/button>\n        <\/div>\n    <\/form>\n\n    <!-- Results -->\n    <div class=\"vc-results\" id=\"vc-results\">\n        <div class=\"vc-results-head\">\n            <h2 class=\"vc-results-title\">Results<\/h2>\n            <button type=\"button\" class=\"vc-copy-btn\" id=\"vc-copy-btn\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg>\n                Copy\n            <\/button>\n        <\/div>\n        <div class=\"vc-result-grid\">\n            <div class=\"vc-rcard vc-rcard-primary\">\n                <div class=\"vc-rcard-label\">Offset (Parallel) Tolerance<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-offset\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Angular Tolerance (mm\/100mm)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-angular-mm\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Angular Tolerance (mrad)<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-angular-mrad\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Angular Gap Difference at Spacer<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-gap\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Speed Category<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-category\">\u2014<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Coupling Type Correction<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-correction\">\u2014<\/div>\n            <\/div>\n        <\/div>\n        <div class=\"vc-viz\" id=\"vc-viz\" style=\"text-align:center;margin:16px 0 8px\"><\/div>\n    <\/div>\n<\/div>\n\n<!-- Theory & Reference -->\n<div class=\"vc-section vc-open\" id=\"vc-sec-theory\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"true\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udcd8<\/span>\n            <span class=\"vc-section-title\">Theory &amp; Reference<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner vc-theory\">\n            <h3>Shaft Alignment Fundamentals<\/h3>\n            <p>Shaft alignment ensures the rotational centerlines of coupled machines are collinear under operating conditions. Misalignment is the most common cause of premature bearing and seal failure in rotating machinery.<\/p>\n\n            <h3>Types of Misalignment<\/h3>\n            <ul>\n                <li><strong>Offset (Parallel)<\/strong> \u2014 shaft centerlines are parallel but displaced. Measured in mm at the coupling.<\/li>\n                <li><strong>Angular<\/strong> \u2014 shaft centerlines intersect at an angle. Measured in mm\/100mm or milliradians (mrad).<\/li>\n            <\/ul>\n\n            <h3>Tolerance Guidelines by Speed<\/h3>\n            <table class=\"vc-table\">\n                <thead><tr><th>Speed Range<\/th><th>Offset (mm)<\/th><th>Angular (mm\/100mm)<\/th><\/tr><\/thead>\n                <tbody>\n                    <tr><td>\u2264 750 RPM<\/td><td>0.10<\/td><td>0.15<\/td><\/tr>\n                    <tr><td>750 \u2013 1500 RPM<\/td><td>0.08<\/td><td>0.10<\/td><\/tr>\n                    <tr><td>1500 \u2013 3000 RPM<\/td><td>0.05<\/td><td>0.07<\/td><\/tr>\n                    <tr><td>3000 \u2013 6000 RPM<\/td><td>0.03<\/td><td>0.04<\/td><\/tr>\n                    <tr><td>&gt; 6000 RPM<\/td><td>0.02<\/td><td>0.03<\/td><\/tr>\n                <\/tbody>\n            <\/table>\n\n            <h3>Coupling Type Corrections<\/h3>\n            <ul>\n                <li><strong>Flexible general<\/strong> \u2014 base tolerance (\u00d71.0)<\/li>\n                <li><strong>Flexible high-performance<\/strong> \u2014 tighter (\u00d70.5)<\/li>\n                <li><strong>Rigid coupling<\/strong> \u2014 strictest (\u00f72, equivalent to \u00d70.5)<\/li>\n            <\/ul>\n\n            <div class=\"vc-formula-box\">Angular gap difference = angular tolerance (mm\/100mm) \u00d7 spacer length (mm) \/ 100<\/div>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example \u2014 Centrifugal Pump at 1500 RPM<\/div>\n                <p><strong>Given:<\/strong> Speed = 1500 RPM, Coupling = Flexible general, Spacer = 100 mm<\/p>\n                <p>Speed range: 750\u20131500 RPM \u2192 Offset = 0.08 mm, Angular = 0.10 mm\/100mm<\/p>\n                <p>Coupling correction: \u00d71.0 (flexible general)<\/p>\n                <p>Offset tolerance = <strong>0.08 mm<\/strong><\/p>\n                <p>Angular tolerance = <strong>0.10 mm\/100mm<\/strong> = 1.00 mrad<\/p>\n                <p>Gap difference at spacer = 0.10 \u00d7 100\/100 = <strong>0.10 mm<\/strong><\/p>\n            <\/div>\n\n            <div class=\"vc-warning-box\">\n                <p style=\"margin:0;font-size:14px;color:var(--vc-ink-secondary);\"><strong>\u26a0\ufe0f Note:<\/strong> These are general industry guidelines. Always check the coupling manufacturer&#8217;s specifications, which may be tighter or looser depending on the specific design. Account for thermal growth in hot-running machines.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Related Calculators -->\n<div class=\"vc-section\" id=\"vc-sec-related\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\ud83d\udd17<\/span>\n            <span class=\"vc-section-title\">Related Calculators<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-related\">\n                <a class=\"vc-related-link\" href=\"\/calculators\/thermal-growth-alignment\/\">Thermal Growth Compensation<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/soft-foot-calculator\/\">Soft Foot Calculator<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/vibration-velocity\/\">Vibration Velocity (ISO 10816)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/residual-unbalance-iso1940\/\">Residual Unbalance (ISO 21940)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/shaft-radial-runout\/\">Shaft Radial Runout<\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- FAQ -->\n<div class=\"vc-section\" id=\"vc-sec-faq\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">\u2753<\/span>\n            <span class=\"vc-section-title\">Frequently Asked Questions<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-faq-list\" id=\"vc-faq-list\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Promo -->\n<div class=\"vc-promo\">\n    <div class=\"vc-promo-text\">\n        <strong>Vibromera \u2014 Portable Balancing &amp; Vibration Analysis<\/strong><br>\n        Professional laser alignment and vibration analysis instruments. Achieve precision alignment on-site. Used in 50+ countries.\n    <\/div>\n    <a class=\"vc-promo-link\" href=\"https:\/\/vibromera.eu\/\" target=\"_blank\" rel=\"noopener\">Learn More<\/a>\n<\/div>\n\n<!-- Footer -->\n<footer class=\"vc-footer\">\n    <p>\u00a9 2024\u20132025 <a href=\"https:\/\/vibromera.eu\/\">Vibromera<\/a> \u2014 Engineering Calculators<\/p>\n    <p style=\"font-size:12px;margin-top:4px;\">Based on ISO 14691 guidelines. Last updated: February 2025<\/p>\n    <div class=\"vc-footer-links\">\n        <a href=\"\/calculators\/engineering-calculators\/\">All Calculators<\/a>\n        <a href=\"https:\/\/vibromera.eu\/contacts\/\">Contact<\/a>\n    <\/div>\n<\/footer>\n\n<\/div>\n\n<script>\n(function() {\n    'use strict';\n\n    var SLUG = 'shaft-alignment-tolerance';\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(n, d) { if(isNaN(n)) return '\u2014'; var f=n.toFixed(d===undefined?2:d); return f.replace(\/(\\.\\d*?)0+$\/,'$1').replace(\/\\.$\/,''); }\n\n    \/* \u2500\u2500 TOLERANCE DATA \u2500\u2500 *\/\n    var tolerances = [\n        { maxRPM: 750,  label: '\u2264 750 RPM',        offset: 0.10, angular: 0.15 },\n        { maxRPM: 1500, label: '750 \u2013 1500 RPM',    offset: 0.08, angular: 0.10 },\n        { maxRPM: 3000, label: '1500 \u2013 3000 RPM',   offset: 0.05, angular: 0.07 },\n        { maxRPM: 6000, label: '3000 \u2013 6000 RPM',   offset: 0.03, angular: 0.04 },\n        { maxRPM: Infinity, label: '> 6000 RPM',     offset: 0.02, angular: 0.03 }\n    ];\n\n    function getToleranceBand(rpm) {\n        for (var i = 0; i < tolerances.length; i++) {\n            if (rpm <= tolerances[i].maxRPM) return tolerances[i];\n        }\n        return tolerances[tolerances.length - 1];\n    }\n\n    function getCouplingFactor(type) {\n        if (type === 'high-perf') return 0.5;\n        if (type === 'rigid') return 0.5;\n        return 1.0;\n    }\n\n    function getCouplingLabel(type) {\n        if (type === 'high-perf') return '\u00d70.5 (High-performance)';\n        if (type === 'rigid') return '\u00d70.5 (Rigid \u2014 stricter)';\n        return '\u00d71.0 (Standard flexible)';\n    }\n\n    \/* \u2500\u2500 CALCULATION \u2500\u2500 *\/\n    function calculate() {\n        var speed = parseFloat($('vc-speed').value);\n        var coupling = $('vc-coupling').value;\n        var spacer = parseFloat($('vc-spacer').value);\n\n        if (!speed || speed <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        var band = getToleranceBand(speed);\n        var factor = getCouplingFactor(coupling);\n\n        var offsetTol = band.offset * factor;\n        var angularTol = band.angular * factor;\n        var angularMrad = angularTol \/ 100 * 1000; \/\/ mm\/100mm to mrad: (mm\/100mm) * (1000mm\/100mm) = *10\n        angularMrad = angularTol * 10 \/ 100 * 100; \/\/ Correct: mm\/100mm = mm per 100mm. To mrad: (value \/ 100) * 1000\n        \/\/ mm\/100mm means: for every 100mm of coupling diameter, X mm gap difference\n        \/\/ mrad = mm\/mm * 1000 = (angularTol \/ 100) * 1000\n        angularMrad = angularTol \/ 100 * 1000;\n\n        var gapDiff = NaN;\n        if (spacer > 0) {\n            gapDiff = angularTol * spacer \/ 100;\n        }\n\n        \/\/ Display results\n        $('vc-r-offset').innerHTML = fmt(offsetTol, 3) + ' <span class=\"vc-rcard-unit\">mm<\/span>';\n        $('vc-r-angular-mm').innerHTML = fmt(angularTol, 3) + ' <span class=\"vc-rcard-unit\">mm\/100mm<\/span>';\n        $('vc-r-angular-mrad').innerHTML = fmt(angularMrad, 2) + ' <span class=\"vc-rcard-unit\">mrad<\/span>';\n        if (!isNaN(gapDiff) && spacer > 0) {\n            $('vc-r-gap').innerHTML = fmt(gapDiff, 3) + ' <span class=\"vc-rcard-unit\">mm<\/span> <span class=\"vc-rcard-unit\">(at ' + fmt(spacer, 0) + ' mm spacer)<\/span>';\n        } else {\n            $('vc-r-gap').innerHTML = '\u2014 <span class=\"vc-rcard-unit\">(enter spacer length)<\/span>';\n        }\n        $('vc-r-category').innerHTML = band.label;\n        $('vc-r-correction').innerHTML = getCouplingLabel(coupling);\n\n        $('vc-results').classList.add('vc-visible');\n        drawViz(offsetTol, angularTol);\n\n        \/\/ URL params\n        var u = new URL(window.location);\n        u.searchParams.set('speed', speed);\n        u.searchParams.set('coupling', coupling);\n        if (spacer > 0) u.searchParams.set('spacer', spacer);\n        history.replaceState(null, '', u.toString());\n\n        \/\/ History\n        saveHistory({\n            speed: speed,\n            coupling: coupling,\n            spacer: spacer || '',\n            _summary: speed + ' RPM, ' + coupling + ', offset=' + fmt(offsetTol, 3) + ' mm'\n        });\n    }\n\n    \/* \u2500\u2500 PRESETS \u2500\u2500 *\/\n    document.querySelectorAll('.vc-preset-btn').forEach(function(btn) {\n        btn.addEventListener('click', function(e) {\n            e.preventDefault();\n            $('vc-coupling').value = this.getAttribute('data-c');\n            $('vc-speed').value = this.getAttribute('data-s');\n            $('vc-spacer').value = this.getAttribute('data-sp');\n            calculate();\n        });\n    });\n\n    \/* \u2500\u2500 AUTO-CALCULATE \u2500\u2500 *\/\n    $('vc-form').addEventListener('input', calculate);\n    $('vc-form').addEventListener('change', calculate);\n\n    \/* \u2500\u2500 COPY \u2500\u2500 *\/\n    $('vc-copy-btn').addEventListener('click', function() {\n        var text = 'Shaft Alignment Tolerance Calculation\\n' +\n            '\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\n' +\n            'Speed: ' + $('vc-speed').value + ' RPM\\n' +\n            'Coupling: ' + $('vc-coupling').options[$('vc-coupling').selectedIndex].text + '\\n' +\n            'Spacer: ' + ($('vc-spacer').value || 'N\/A') + ' mm\\n' +\n            'Offset Tolerance: ' + $('vc-r-offset').textContent + '\\n' +\n            'Angular Tolerance: ' + $('vc-r-angular-mm').textContent + '\\n' +\n            'Angular (mrad): ' + $('vc-r-angular-mrad').textContent + '\\n' +\n            'Gap Difference: ' + $('vc-r-gap').textContent + '\\n' +\n            '\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\n' +\n            'vibromera.eu\/calculators\/shaft-alignment-tolerance\/';\n\n        if (navigator.clipboard) {\n            navigator.clipboard.writeText(text).then(function() {\n                var btn = $('vc-copy-btn');\n                btn.classList.add('vc-copied');\n                btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg> Copied!';\n                setTimeout(function() {\n                    btn.classList.remove('vc-copied');\n                    btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg> Copy';\n                }, 2000);\n            });\n        }\n    });\n\n    \/* \u2500\u2500 COLLAPSIBLE SECTIONS \u2500\u2500 *\/\n    document.querySelectorAll('.vc-section-toggle').forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            var section = this.closest('.vc-section');\n            var isOpen = section.classList.contains('vc-open');\n            section.classList.toggle('vc-open');\n            this.setAttribute('aria-expanded', !isOpen);\n        });\n    });\n\n    \/* \u2500\u2500 FAQ \u2500\u2500 *\/\n    var faqData = [\n        { q: 'What is shaft alignment?', a: '<p>Shaft alignment is the process of positioning two or more coupled shafts so that their rotational centerlines are collinear under operating conditions. Proper alignment minimizes vibration, reduces bearing and seal loads, lowers energy consumption, and extends machinery life.<\/p><p>Studies show that up to 50% of all rotating machinery failures are related to misalignment.<\/p>' },\n        { q: 'What is the difference between offset and angular misalignment?', a: '<p><strong>Offset (parallel) misalignment<\/strong> occurs when two shaft centerlines are parallel but displaced vertically and\/or horizontally from each other.<\/p><p><strong>Angular misalignment<\/strong> occurs when the shaft centerlines intersect at an angle at or near the coupling.<\/p><p>In practice, most misalignment is a combination of both offset and angular components.<\/p>' },\n        { q: 'How precise must shaft alignment be?', a: '<p>Alignment precision depends on operating speed and coupling type. Typical tolerances for flexible couplings:<\/p><ul><li><strong>1500 RPM:<\/strong> 0.08 mm offset, 0.10 mm\/100mm angular<\/li><li><strong>3000 RPM:<\/strong> 0.05 mm offset, 0.07 mm\/100mm angular<\/li><li><strong>6000+ RPM:<\/strong> 0.02 mm offset, 0.03 mm\/100mm angular<\/li><\/ul><p>Rigid couplings and high-performance flexible couplings require approximately half these values.<\/p>' },\n        { q: 'Laser alignment vs dial indicators \u2014 which is better?', a: '<p><strong>Laser alignment systems<\/strong> are faster, more accurate (\u00b10.01 mm), provide real-time live movement display, and automatically calculate shim and foot corrections. Best for most applications.<\/p><p><strong>Dial indicators<\/strong> are lower cost, suitable for simple single-plane checks, and can achieve \u00b10.02\u20130.05 mm accuracy with careful technique. They require more skill and time.<\/p><p>For critical high-speed machinery, laser alignment is strongly recommended.<\/p>' },\n        { q: 'Why are tolerances tighter at higher speeds?', a: '<p>Misalignment generates dynamic forces proportional to the square of rotational speed. A given misalignment at 6000 RPM produces <strong>16 times<\/strong> the force compared to 1500 RPM.<\/p><p>Higher forces lead to:<\/p><ul><li>Accelerated bearing wear and fatigue<\/li><li>Premature seal failure<\/li><li>Higher vibration levels<\/li><li>Increased energy consumption<\/li><li>Potential coupling fatigue failure<\/li><\/ul>' }\n    ];\n\n    var faqList = $('vc-faq-list');\n    faqData.forEach(function(faq) {\n        faqList.innerHTML += '<div class=\"vc-faq-item\"><button type=\"button\" class=\"vc-faq-q\"><span>' + faq.q + '<\/span><svg class=\"vc-faq-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg><\/button><div class=\"vc-faq-a\"><div class=\"vc-faq-a-inner\">' + faq.a + '<\/div><\/div><\/div>';\n    });\n    faqList.addEventListener('click', function(e) {\n        var btn = e.target.closest('.vc-faq-q');\n        if (!btn) return;\n        btn.closest('.vc-faq-item').classList.toggle('vc-open');\n    });\n\n    \/* \u2500\u2500 VISUALIZATION \u2500\u2500 *\/\n    function drawViz(offsetTol, angularTol) {\n        var c = $('vc-viz'), W = 400, H = 180;\n        var svg = '<svg width=\"'+W+'\" height=\"'+H+'\" viewBox=\"0 0 '+W+' '+H+'\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">';\n        svg += '<defs><marker id=\"va\" markerWidth=\"7\" markerHeight=\"5\" refX=\"6\" refY=\"2.5\" orient=\"auto\"><path d=\"M0,0 L7,2.5 L0,5\" fill=\"#e74c3c\"\/><\/marker>';\n        svg += '<marker id=\"vb\" markerWidth=\"7\" markerHeight=\"5\" refX=\"6\" refY=\"2.5\" orient=\"auto\"><path d=\"M0,0 L7,2.5 L0,5\" fill=\"#2a5c8c\"\/><\/marker><\/defs>';\n        var cy = H \/ 2, cx = W \/ 2;\n        var shaftLen = 130, shaftH = 22, coupW = 16;\n        \/\/ Offset visualization (exaggerated)\n        var offVis = Math.max(3, Math.min(18, offsetTol * 150));\n        var angVis = Math.max(0.5, Math.min(6, angularTol * 40));\n        var angRad = angVis * Math.PI \/ 180 * 8;\n        \/\/ Left shaft (reference - centered)\n        var lx = cx - coupW \/ 2 - shaftLen;\n        svg += '<rect x=\"'+lx+'\" y=\"'+(cy - shaftH\/2)+'\" width=\"'+shaftLen+'\" height=\"'+shaftH+'\" rx=\"3\" fill=\"#d4e6f9\" stroke=\"#3578b2\" stroke-width=\"1.5\"\/>';\n        \/\/ Left coupling half\n        svg += '<rect x=\"'+(cx - coupW\/2 - 2)+'\" y=\"'+(cy - shaftH\/2 - 4)+'\" width=\"'+(coupW\/2 + 2)+'\" height=\"'+(shaftH + 8)+'\" rx=\"2\" fill=\"#3578b2\" opacity=\"0.3\" stroke=\"#3578b2\" stroke-width=\"1\"\/>';\n        \/\/ Left shaft centerline\n        svg += '<line x1=\"'+lx+'\" y1=\"'+cy+'\" x2=\"'+(cx - 2)+'\" y2=\"'+cy+'\" stroke=\"#3578b2\" stroke-width=\"0.7\" stroke-dasharray=\"4,3\"\/>';\n        \/\/ Right shaft (offset + angled)\n        var ry = cy - offVis;\n        var rx = cx + coupW \/ 2;\n        var endY = ry - angRad;\n        svg += '<polygon points=\"'+rx+','+(ry - shaftH\/2)+' '+(rx + shaftLen)+','+(endY - shaftH\/2)+' '+(rx + shaftLen)+','+(endY + shaftH\/2)+' '+rx+','+(ry + shaftH\/2)+'\" fill=\"#e0e7ef\" stroke=\"#7b8fa3\" stroke-width=\"1.5\"\/>';\n        \/\/ Right coupling half\n        svg += '<rect x=\"'+(cx)+'\" y=\"'+(ry - shaftH\/2 - 4)+'\" width=\"'+(coupW\/2 + 2)+'\" height=\"'+(shaftH + 8)+'\" rx=\"2\" fill=\"#7b8fa3\" opacity=\"0.3\" stroke=\"#7b8fa3\" stroke-width=\"1\"\/>';\n        \/\/ Right shaft centerline\n        svg += '<line x1=\"'+rx+'\" y1=\"'+ry+'\" x2=\"'+(rx + shaftLen)+'\" y2=\"'+endY+'\" stroke=\"#7b8fa3\" stroke-width=\"0.7\" stroke-dasharray=\"4,3\"\/>';\n        \/\/ Offset arrow (vertical, red)\n        if (offVis > 2) {\n            svg += '<line x1=\"'+(cx + coupW + 10)+'\" y1=\"'+cy+'\" x2=\"'+(cx + coupW + 10)+'\" y2=\"'+(ry + 2)+'\" stroke=\"#e74c3c\" stroke-width=\"1.5\" marker-end=\"url(#va)\"\/>';\n            svg += '<text x=\"'+(cx + coupW + 16)+'\" y=\"'+((cy + ry) \/ 2 + 4)+'\" fill=\"#e74c3c\" font-size=\"10\" font-weight=\"600\">offset<\/text>';\n        }\n        \/\/ Angular arrow (arc)\n        if (angRad > 0.3) {\n            var angX = rx + shaftLen * 0.6;\n            svg += '<line x1=\"'+angX+'\" y1=\"'+(ry - shaftH\/2 - 8)+'\" x2=\"'+angX+'\" y2=\"'+(endY - shaftH\/2 - 8)+'\" stroke=\"#2a5c8c\" stroke-width=\"1.5\" marker-end=\"url(#vb)\"\/>';\n            svg += '<text x=\"'+(angX + 6)+'\" y=\"'+(ry - shaftH\/2 - 12)+'\" fill=\"#2a5c8c\" font-size=\"10\" font-weight=\"600\">angular<\/text>';\n        }\n        \/\/ Bearing supports\n        svg += '<polygon points=\"'+(lx)+','+(cy + shaftH\/2)+' '+(lx - 10)+','+(cy + shaftH\/2 + 18)+' '+(lx + 10)+','+(cy + shaftH\/2 + 18)+'\" fill=\"#d9d4cc\" stroke=\"#8a857e\" stroke-width=\"1\"\/>';\n        svg += '<polygon points=\"'+(rx + shaftLen)+','+(endY + shaftH\/2)+' '+(rx + shaftLen - 10)+','+(endY + shaftH\/2 + 18)+' '+(rx + shaftLen + 10)+','+(endY + shaftH\/2 + 18)+'\" fill=\"#d9d4cc\" stroke=\"#8a857e\" stroke-width=\"1\"\/>';\n        \/\/ Labels\n        svg += '<text x=\"'+(lx + shaftLen\/2)+'\" y=\"'+(cy + shaftH\/2 + 34)+'\" text-anchor=\"middle\" fill=\"#3578b2\" font-size=\"10\">Driver<\/text>';\n        svg += '<text x=\"'+(rx + shaftLen\/2)+'\" y=\"'+(endY + shaftH\/2 + 34)+'\" text-anchor=\"middle\" fill=\"#7b8fa3\" font-size=\"10\">Driven<\/text>';\n        svg += '<text x=\"'+cx+'\" y=\"14\" text-anchor=\"middle\" fill=\"#2c3e50\" font-size=\"11\" font-weight=\"600\">Offset: '+fmt(offsetTol,3)+' mm | Angular: '+fmt(angularTol,3)+' mm\/100mm<\/text>';\n        svg += '<\/svg>';\n        c.innerHTML = svg;\n    }\n\n    \/* \u2500\u2500 HISTORY \u2500\u2500 *\/\n    function saveHistory(entry) {\n        var key = 'vc_history_' + SLUG;\n        var arr = [];\n        try { arr = JSON.parse(localStorage.getItem(key)) || []; } catch(e) {}\n        entry._ts = new Date().toISOString();\n        arr.unshift(entry);\n        if (arr.length > 10) arr = arr.slice(0, 10);\n        try { localStorage.setItem(key, JSON.stringify(arr)); } catch(e) {}\n    }\n\n    \/* \u2500\u2500 URL PARAMS \u2500\u2500 *\/\n    function loadParams() {\n        var p = new URLSearchParams(window.location.search);\n        if (p.get('speed')) $('vc-speed').value = p.get('speed');\n        if (p.get('coupling')) $('vc-coupling').value = p.get('coupling');\n        if (p.get('spacer')) $('vc-spacer').value = p.get('spacer');\n    }\n\n    \/* \u2500\u2500 INIT \u2500\u2500 *\/\n    function init() {\n        loadParams();\n        calculate();\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>ISO 14691 \u09a8\u09bf\u09b0\u09cd\u09a6\u09c7\u09b6\u09bf\u0995\u09be \u0989\u09aa\u09b0 \u09ad\u09bf\u09a4\u09cd\u09a4\u09bf \u0995\u09b0\u09c7 \u09ac\u09bf\u09a8\u09be\u09ae\u09c2\u09b2\u09cd\u09af\u09c7 \u0985\u09a8\u09b2\u09be\u0987\u09a8 \u09b6\u09cd\u09af\u09be\u09ab\u099f \u09b8\u0982\u09af\u09cb\u0997 \u09b8\u09b9\u09a8\u09b6\u09c0\u09b2\u09a4\u09be \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0\u0964 \u09af\u09c7\u0995\u09cb\u09a8\u09cb RPM \u098f \u09a8\u09ae\u09a8\u09c0\u09af\u09bc, \u0989\u099a\u09cd\u099a-\u0995\u09b0\u09cd\u09ae\u0995\u09cd\u09b7\u09ae\u09a4\u09be \u098f\u09ac\u0982 \u0995\u09a0\u09cb\u09b0 \u09b8\u0982\u09af\u09cb\u0997\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u0985\u09a8\u09c1\u09ae\u09cb\u09a6\u09bf\u09a4 \u0985\u09ab\u09b8\u09c7\u099f \u098f\u09ac\u0982 \u0995\u09cc\u09a3\u09bf\u0995 \u09ad\u09c1\u09b2 \u09b8\u0982\u09af\u09cb\u0997 \u09b8\u09b9\u09a8\u09b6\u09c0\u09b2\u09a4\u09be \u09a8\u09bf\u09b0\u09cd\u09a7\u09be\u09b0\u09a3 \u0995\u09b0\u09c1\u09a8\u0964<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100221","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":2,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100221\/revisions"}],"predecessor-version":[{"id":100776,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/calculator\/100221\/revisions\/100776"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/media?parent=100221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/categories?post=100221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/bn\/wp-json\/wp\/v2\/tags?post=100221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}