{"id":17030,"date":"2026-05-22T01:39:17","date_gmt":"2026-05-22T01:39:17","guid":{"rendered":"https:\/\/www.dgcrane.com\/?p=17030"},"modified":"2026-05-22T01:59:01","modified_gmt":"2026-05-22T01:59:01","slug":"crane-dynamic-loading-calculator","status":"publish","type":"post","link":"https:\/\/www.dgcrane.com\/bn\/crane-dynamic-loading-calculator\/","title":{"rendered":"\u0995\u09cd\u09b0\u09c7\u09a8 \u09a1\u09be\u0987\u09a8\u09be\u09ae\u09bf\u0995 \u09b2\u09cb\u09a1\u09bf\u0982 \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0"},"content":{"rendered":"<!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, user-scalable=yes\">\n    <title>\u0995\u09cd\u09b0\u09c7\u09a8 \u09a1\u09be\u0987\u09a8\u09be\u09ae\u09bf\u0995 \u09b2\u09cb\u09a1 \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0 | P_d = \u03c6\u00b7(Q+Q_h+G_t)<\/title>\n    <style>\n        \/* all styles are strictly scoped inside #calculator *\/\n        #calculator {\n            --primary-color: #0a3487;\n            --primary-hover: #F58423;\n            --error-color: #e53935;\n            --bg-color: #EAEEF7;\n            --text-color: #4a4a4a;\n            \n            display: block;\n            width: 100%;\n            background: var(--bg-color);\n            font-family: 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;\n            color: var(--text-color);\n        }\n        \n        \/* container for PC max-width & padding *\/\n        #calculator .calculator-container {\n            max-width: 545px;\n            padding: 30px;\n            margin: 0 auto;\n            background: var(--bg-color);\n            box-sizing: border-box;\n        }\n        \n        \/* typography *\/\n        #calculator .calculator-title {\n            font-size: 24px;\n            font-weight: 600;\n            margin: 0 0 4px 0;\n            color: var(--primary-color);\n            letter-spacing: -0.2px;\n        }\n        \n        #calculator .calculator-subtitle {\n            font-size: 14px;\n            margin: 0 0 24px 0;\n            font-family: monospace;\n            background: rgba(10,52,135,0.08);\n            display: inline-block;\n            padding: 4px 12px;\n            border-radius: 0;\n            color: var(--primary-color);\n        }\n        \n        \/* input groups *\/\n        #calculator .input-group {\n            margin-bottom: 20px;\n            width: 100%;\n            position: relative;\n        }\n        \n        #calculator label {\n            display: block;\n            font-size: 14px;\n            font-weight: 500;\n            margin-bottom: 6px;\n            color: var(--text-color);\n        }\n        \n        #calculator .var-symbol {\n            font-family: monospace;\n            font-weight: 700;\n            background: rgba(0,0,0,0.04);\n            padding: 0px 4px;\n            border-radius: 0;\n            margin-left: 4px;\n        }\n        \n        \/* wrapper for input + inline unit (unit placed inside input field on the right) *\/\n        #calculator .input-unit-wrapper {\n            position: relative;\n            width: 100%;\n        }\n        \n        #calculator .input-unit-wrapper .calculator-input {\n            width: 100%;\n            padding-right: 104px;\n        }\n        \n        #calculator .inline-unit {\n            position: absolute;\n            right: 1px;\n            top: 1px;\n            bottom: 1px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 14px;\n            font-weight: 500;\n            color: #aaaaaa;\n            background: transparent;\n            padding: 0 8px;\n            height: auto;\n            line-height: 1;\n            white-space: nowrap;\n            font-family: monospace;\n            pointer-events: none;\n            box-sizing: border-box;\n        }\n        \n        \/* select styling \u2014 no unit after select *\/\n        #calculator .calculator-input,\n        #calculator .calculator-select {\n            width: 100%;\n            height: 36px;\n            padding: 0 12px;\n            font-size: 16px;\n            border: 1px solid #ccc;\n            border-radius: 0;\n            background: white;\n            font-family: 'Segoe UI', 'SF Mono', monospace;\n            color: #333;\n            transition: all 0.2s ease;\n            box-sizing: border-box;\n        }\n        \n        #calculator .calculator-select {\n            cursor: pointer;\n            appearance: none;\n            background-image: url('data:image\/svg+xml;utf8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234a4a4a\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"><\/polyline><\/svg>');\n            background-repeat: no-repeat;\n            background-position: right 12px center;\n            background-size: 14px;\n        }\n        \n        \/* ensure dropdown options have consistent font and spacing *\/\n        #calculator .calculator-select option {\n            font-size: 14px;\n            padding: 8px;\n            font-family: 'Segoe UI', 'SF Mono', monospace;\n            line-height: 1.4;\n            color: #333;\n        }\n        \n        #calculator .calculator-input:focus,\n        #calculator .calculator-select:focus {\n            outline: none;\n            border: 2px solid var(--primary-color);\n            padding: 0 11px;\n            height: 36px;\n        }\n        \n        #calculator .input-unit-wrapper .calculator-input:focus {\n            padding-right: 103px;\n        }\n        \n        \/* error state: border 2px solid error-color *\/\n        #calculator .calculator-input.error-input,\n        #calculator .calculator-select.error-input {\n            border: 2px solid var(--error-color);\n            padding: 0 11px;\n            height: 36px;\n        }\n        \n        #calculator .input-unit-wrapper .calculator-input.error-input {\n            padding-right: 103px;\n        }\n        \n        \/* error message styling *\/\n        #calculator .error-msg {\n            font-size: 12px;\n            color: var(--error-color);\n            margin-top: 5px;\n            display: none;\n            line-height: 1.2;\n        }\n        \n        #calculator .error-msg.visible {\n            display: block;\n        }\n        \n        \/* result area *\/\n        #calculator .result-area {\n            background: white;\n            margin: 20px 0 24px 0;\n            padding: 18px 16px;\n            text-align: center;\n            border-left: 4px solid var(--primary-color);\n            box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n        }\n        \n        #calculator .result-label {\n            font-size: 14px;\n            font-weight: 500;\n            text-transform: uppercase;\n            letter-spacing: 1px;\n            color: var(--text-color);\n            margin-bottom: 8px;\n        }\n        \n        #calculator .result-value {\n            font-size: 40px;\n            font-weight: 800;\n            font-family: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n            color: var(--primary-color);\n            line-height: 1.1;\n            word-break: break-word;\n        }\n        \n        #calculator .calculation-detail {\n            font-size: 12px;\n            font-family: monospace;\n            color: #6b7280;\n            margin-top: 8px;\n            border-top: 1px solid #ececec;\n            padding-top: 6px;\n        }\n        \n        \/* button group: horizontal flex on PC *\/\n        #calculator .button-group {\n            display: flex;\n            flex-direction: row;\n            gap: 16px;\n            margin-top: 8px;\n        }\n        \n        #calculator button {\n            flex: 1;\n            height: 36px;\n            font-size: 14px;\n            font-weight: 600;\n            border: none;\n            border-radius: 0;\n            cursor: pointer;\n            transition: all 0.2s ease;\n            font-family: inherit;\n        }\n        \n        #calculator .btn-primary {\n            background: var(--primary-color);\n            color: white;\n        }\n        \n        #calculator .btn-primary:hover {\n            background: var(--primary-hover);\n        }\n        \n        #calculator .btn-secondary {\n            background: #6c757d;\n            color: white;\n        }\n        \n        #calculator .btn-secondary:hover {\n            background: #5a6268;\n        }\n        \n        \/* mobile responsiveness (rem based, following spec) *\/\n        @media (max-width: 768px) {\n            #calculator .calculator-container {\n                padding: 20px;\n                max-width: 100%;\n            }\n            #calculator .calculator-input,\n            #calculator .calculator-select,\n            #calculator button,\n            #calculator .inline-unit {\n                height: 0.7rem;\n                font-size: 0.28rem;\n                line-height: 0.7rem;\n            }\n            #calculator .calculator-input,\n            #calculator .calculator-select {\n                height: 0.7rem;\n                padding: 0 0.2rem;\n                font-size: 0.28rem;\n            }\n            #calculator .input-unit-wrapper .calculator-input {\n                padding-right: 1.8rem;\n            }\n            #calculator .calculator-input:focus,\n            #calculator .calculator-select:focus {\n                padding: 0 0.18rem;\n                height: 0.7rem;\n            }\n            #calculator .input-unit-wrapper .calculator-input:focus {\n                padding-right: 1.78rem;\n            }\n            #calculator .calculator-input.error-input,\n            #calculator .calculator-select.error-input {\n                padding: 0 0.18rem;\n                height: 0.7rem;\n            }\n            #calculator .input-unit-wrapper .calculator-input.error-input {\n                padding-right: 1.78rem;\n            }\n            #calculator label {\n                font-size: 0.28rem;\n            }\n            #calculator .result-value {\n                font-size: 0.7rem;\n            }\n            #calculator .result-label,\n            #calculator .calculation-detail {\n                font-size: 0.24rem;\n            }\n            #calculator .btn-primary,\n            #calculator .btn-secondary {\n                font-size: 0.28rem;\n                height: 0.7rem;\n            }\n            #calculator .button-group {\n                flex-direction: column;\n                gap: 12px;\n            }\n            #calculator button {\n                width: 100%;\n            }\n            #calculator .calculator-title {\n                font-size: 0.5rem;\n            }\n            #calculator .calculator-subtitle {\n                font-size: 0.24rem;\n            }\n            #calculator .inline-unit {\n                font-size: 0.28rem;\n                padding: 0 0.2rem;\n            }\n            \/* option text slightly smaller on mobile but consistent *\/\n            #calculator .calculator-select option {\n                font-size: 0.28rem;\n            }\n        }\n        \n        \/* error priority: error border overrides focus *\/\n        #calculator .calculator-input.error-input:focus,\n        #calculator .calculator-select.error-input:focus {\n            border: 2px solid var(--error-color);\n        }\n        \n        \/* remove any default spinner on number input *\/\n        #calculator .calculator-input[type=\"number\"] {\n            -moz-appearance: textfield;\n        }\n        #calculator .calculator-input[type=\"number\"]::-webkit-inner-spin-button,\n        #calculator .calculator-input[type=\"number\"]::-webkit-outer-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n    <\/style>\n<\/head>\n<body>\n<div id=\"calculator\">\n    <div class=\"calculator-container\">\n        \n        \n        <!-- \u03c6 factor selection: Using ASCII symbols [+], [-], [!] for perfect size consistency -->\n        <div class=\"input-group\">\n            <label for=\"calculator-phi\">\u0997\u09a4\u09bf\u09b6\u09c0\u09b2 \u09ab\u09cd\u09af\u09be\u0995\u09cd\u099f\u09b0 <span class=\"var-symbol\">\u03c6<\/span><\/label>\n            <select id=\"calculator-phi\" class=\"calculator-select\">\n                <option value=\"1.1\">\ud83d\udd38 \u0995\u09ae \u0997\u09a4\u09bf \/ \u09b9\u09be\u09b2\u0995\u09be \u0995\u09be\u099c \/ \u09b8\u09c2\u0995\u09cd\u09b7\u09cd\u09ae \u09a8\u09bf\u09af\u09bc\u09a8\u09cd\u09a4\u09cd\u09b0\u09a3 \u2192 \u03c6 = \u09e7.\u09e7\u09e6<\/option>\n                <option value=\"1.2\">\ud83d\udd38 \u09aa\u09cd\u09b0\u099a\u09b2\u09bf\u09a4 \u09b6\u09bf\u09b2\u09cd\u09aa (\u09b9\u09be\u09b2\u0995\u09be) \u2192 \u03c6 = \u09e7.\u09e8\u09e6<\/option>\n                <option value=\"1.25\" selected>\ud83d\udd38 \u09aa\u09cd\u09b0\u099a\u09b2\u09bf\u09a4 \u09b6\u09bf\u09b2\u09cd\u09aa (\u09ae\u09be\u099d\u09be\u09b0\u09bf) \u2192 \u03c6 = \u09e7.\u09e8\u09eb<\/option>\n                <option value=\"1.3\">\ud83d\udd38 \u09aa\u09cd\u09b0\u099a\u09b2\u09bf\u09a4 \u09b6\u09bf\u09b2\u09cd\u09aa (\u09ad\u09be\u09b0\u09c0) \u2192 \u03c6 = \u09e7.\u09e9\u09e6<\/option>\n                <option value=\"1.4\">\ud83d\udd38 \u09ad\u09be\u09b0\u09c0 \u0995\u09be\u099c \/ \u0995\u09a0\u09bf\u09a8 \u09aa\u09b0\u09bf\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf \u2192 \u03c6 = \u09e7.\u09ea\u09e6<\/option>\n                <option value=\"1.5\">\ud83d\udd38\u0989\u099a\u09cd\u099a \u09aa\u09cd\u09b0\u09ad\u09be\u09ac \/ \u09ae\u09bf\u09b2 \u09a1\u09bf\u0989\u099f\u09bf \u2192 \u03c6 = \u09e7.\u09eb\u09e6<\/option>\n                <option value=\"1.6\">\ud83d\udd38\u099a\u09b0\u09ae \u0985\u09ad\u09bf\u0998\u09be\u09a4 \/ \u0995\u09a0\u09bf\u09a8 \u0995\u09be\u099c \u2192 \u03c6 = \u09e7.\u09ec\u09e6<\/option>\n            <\/select>\n            <div class=\"error-msg\" id=\"error-phi\"><\/div>\n        <\/div>\n\n        <!-- Q : Rated load | unit placed AFTER input box (inline) -->\n        <div class=\"input-group\">\n            <label for=\"calculator-ratedLoad\">\u0997\u09cd\u09ae <span class=\"var-symbol\">\u09aa\u09cd\u09b0\u09b6\u09cd\u09a8<\/span><\/label>\n            <div class=\"input-unit-wrapper\">\n                <input type=\"number\" id=\"calculator-ratedLoad\" class=\"calculator-input\" placeholder=\"\u09af\u09c7\u09ae\u09a8, \u09e8\u09e6.\u09e6\" step=\"any\" value=\"20.0\">\n                <span class=\"inline-unit\">\u099f\u09a8 (t)<\/span>\n            <\/div>\n            <div class=\"error-msg\" id=\"error-ratedLoad\"><\/div>\n        <\/div>\n\n        <!-- Q_h : Hook + lifting attachment weight | unit after input -->\n        <div class=\"input-group\">\n            <label for=\"calculator-hookWeight\">\u09b9\u09c1\u0995 \u098f\u09ac\u0982 \u09b8\u0982\u09af\u09c1\u0995\u09cd\u09a4\u09bf \u09ad\u09b0 <span class=\"var-symbol\">\u09aa\u09cd\u09b0\u09b6\u09cd\u09a8<sub>\u099c<\/sub><\/span><\/label>\n            <div class=\"input-unit-wrapper\">\n                <input type=\"number\" id=\"calculator-hookWeight\" class=\"calculator-input\" placeholder=\"\u09af\u09c7\u09ae\u09a8, \u09e6.\u09ec\" step=\"any\" value=\"0.6\">\n                <span class=\"inline-unit\">\u099f\u09a8 (t)<\/span>\n            <\/div>\n            <div class=\"error-msg\" id=\"error-hookWeight\"><\/div>\n        <\/div>\n\n        <!-- G_t : Trolley self-weight | unit after input -->\n        <div class=\"input-group\">\n            <label for=\"calculator-trolleyWeight\">\u099f\u09cd\u09b0\u09b2\u09bf\u09b0 \u09a8\u09bf\u099c\u09b8\u09cd\u09ac \u0993\u099c\u09a8 <span class=\"var-symbol\">\u099c\u09bf<sub>t<\/sub><\/span><\/label>\n            <div class=\"input-unit-wrapper\">\n                <input type=\"number\" id=\"calculator-trolleyWeight\" class=\"calculator-input\" placeholder=\"\u09af\u09c7\u09ae\u09a8, \u09eb.\u09ea\" step=\"any\" value=\"5.4\">\n                <span class=\"inline-unit\">\u099f\u09a8 (t)<\/span>\n            <\/div>\n            <div class=\"error-msg\" id=\"error-trolleyWeight\"><\/div>\n        <\/div>\n\n        <!-- Result display area -->\n        <div class=\"result-area\">\n            <div class=\"result-label\">\u09a1\u09be\u0987\u09a8\u09be\u09ae\u09bf\u0995 \u09b2\u09cb\u09a1 \u09ab\u09b2\u09be\u09ab\u09b2 <span>\u09aa\u09c3<sub>d<\/sub><\/span><\/div>\n            <div class=\"result-value\" id=\"calculator-result\">\u2014 kN<\/div>\n            <div class=\"calculation-detail\" id=\"calc-detail\"><\/div>\n        <\/div>\n\n        <!-- Action Buttons -->\n        <div class=\"button-group\">\n            <button id=\"calculator-calcBtn\" class=\"btn-primary\">\u0997\u09a3\u09a8\u09be \u0995\u09b0\u09c1\u09a8<\/button>\n            <button id=\"calculator-resetBtn\" class=\"btn-secondary\">\u09b0\u09bf\u09b8\u09c7\u099f<\/button>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    (function() {\n        \/\/ DOM references\n        const phiSelect = document.getElementById('calculator-phi');\n        const ratedLoadInput = document.getElementById('calculator-ratedLoad');\n        const hookWeightInput = document.getElementById('calculator-hookWeight');\n        const trolleyWeightInput = document.getElementById('calculator-trolleyWeight');\n        const calcBtn = document.getElementById('calculator-calcBtn');\n        const resetBtn = document.getElementById('calculator-resetBtn');\n        const resultSpan = document.getElementById('calculator-result');\n        const calcDetailSpan = document.getElementById('calc-detail');\n        \n        \/\/ error message containers\n        const errorPhi = document.getElementById('error-phi');\n        const errorRated = document.getElementById('error-ratedLoad');\n        const errorHook = document.getElementById('error-hookWeight');\n        const errorTrolley = document.getElementById('error-trolleyWeight');\n        \n        \/\/ input fields for validation\n        const inputFields = [\n            { element: ratedLoadInput, errorDiv: errorRated, name: 'Rated load' },\n            { element: hookWeightInput, errorDiv: errorHook, name: 'Hook & attachment mass' },\n            { element: trolleyWeightInput, errorDiv: errorTrolley, name: 'Trolley self-weight' }\n        ];\n        const selectField = { element: phiSelect, errorDiv: errorPhi, name: 'Dynamic factor' };\n        \n        \/\/ conversion factor: tonnes -> kN\n        const TON_TO_KN = 9.80665;\n        \n        \/\/ Helper: clear error for a single input (remove class, hide message)\n        function clearErrorForInput(inputEl, errorDiv) {\n            if (inputEl) inputEl.classList.remove('error-input');\n            if (errorDiv) errorDiv.classList.remove('visible');\n        }\n        \n        \/\/ set error for single input\n        function setErrorForInput(inputEl, errorDiv, message) {\n            if (inputEl) inputEl.classList.add('error-input');\n            if (errorDiv) {\n                errorDiv.textContent = message || 'Invalid value';\n                errorDiv.classList.add('visible');\n            }\n        }\n        \n        \/\/ clear all errors\n        function clearAllErrors() {\n            inputFields.forEach(field => {\n                clearErrorForInput(field.element, field.errorDiv);\n            });\n            clearErrorForInput(selectField.element, selectField.errorDiv);\n        }\n        \n        \/\/ validate single numeric input (non-empty, valid number >=0)\n        function validateSingleInput(value, fieldName) {\n            if (value === undefined || value === null || value === '') {\n                return { valid: false, message: `${fieldName} cannot be empty.` };\n            }\n            const num = parseFloat(value);\n            if (isNaN(num)) {\n                return { valid: false, message: `${fieldName} must be a valid number.` };\n            }\n            if (num < 0) {\n                return { valid: false, message: `${fieldName} cannot be negative.` };\n            }\n            return { valid: true, value: num };\n        }\n        \n        \/\/ validate phi select\n        function validatePhi() {\n            const phiVal = phiSelect.value;\n            const num = parseFloat(phiVal);\n            if (isNaN(num)) {\n                return { valid: false, message: 'Dynamic factor must be a valid number.' };\n            }\n            if (num <= 0) {\n                return { valid: false, message: '\u03c6 must be greater than 0.' };\n            }\n            return { valid: true, value: num };\n        }\n        \n        \/\/ main validation routine\n        function validateAllInputs() {\n            let isValid = true;\n            \n            \/\/ Validate rated load\n            const ratedRaw = ratedLoadInput.value;\n            const ratedCheck = validateSingleInput(ratedRaw, 'Rated load');\n            if (!ratedCheck.valid) {\n                setErrorForInput(ratedLoadInput, errorRated, ratedCheck.message);\n                isValid = false;\n            } else {\n                clearErrorForInput(ratedLoadInput, errorRated);\n            }\n            \n            \/\/ Validate hook weight\n            const hookRaw = hookWeightInput.value;\n            const hookCheck = validateSingleInput(hookRaw, 'Hook &#038; attachment mass');\n            if (!hookCheck.valid) {\n                setErrorForInput(hookWeightInput, errorHook, hookCheck.message);\n                isValid = false;\n            } else {\n                clearErrorForInput(hookWeightInput, errorHook);\n            }\n            \n            \/\/ Validate trolley weight\n            const trolleyRaw = trolleyWeightInput.value;\n            const trolleyCheck = validateSingleInput(trolleyRaw, 'Trolley self-weight');\n            if (!trolleyCheck.valid) {\n                setErrorForInput(trolleyWeightInput, errorTrolley, trolleyCheck.message);\n                isValid = false;\n            } else {\n                clearErrorForInput(trolleyWeightInput, errorTrolley);\n            }\n            \n            \/\/ Validate phi\n            const phiCheck = validatePhi();\n            if (!phiCheck.valid) {\n                setErrorForInput(phiSelect, errorPhi, phiCheck.message);\n                isValid = false;\n            } else {\n                clearErrorForInput(phiSelect, errorPhi);\n            }\n            \n            if (isValid) {\n                return {\n                    valid: true,\n                    Q: parseFloat(ratedLoadInput.value),\n                    Qh: parseFloat(hookWeightInput.value),\n                    Gt: parseFloat(trolleyWeightInput.value),\n                    phi: parseFloat(phiSelect.value)\n                };\n            } else {\n                return { valid: false };\n            }\n        }\n        \n        \/\/ compute and update result (2 decimals)\n        function computeAndDisplay() {\n            const validation = validateAllInputs();\n            if (!validation.valid) {\n                resultSpan.textContent = '-- kN';\n                calcDetailSpan.textContent = '';\n                return;\n            }\n            \n            const { Q, Qh, Gt, phi } = validation;\n            const sumTon = Q + Qh + Gt;\n            const dynamicTonForce = phi * sumTon;\n            const dynamicKN = dynamicTonForce * TON_TO_KN;\n            const roundedKN = Math.round(dynamicKN * 100) \/ 100;\n            resultSpan.textContent = roundedKN.toFixed(2) + ' kN';\n            \n            \/\/ detail expression: consistent formatting\n            const sumFixed = sumTon.toFixed(3);\n            const phiFixed = phi.toFixed(3);\n            calcDetailSpan.innerHTML = `${phiFixed} \u00d7 (${Q.toFixed(2)} + ${Qh.toFixed(2)} + ${Gt.toFixed(2)}) t = ${phiFixed} \u00d7 ${sumFixed} t = ${dynamicTonForce.toFixed(3)} t \u2192 ${roundedKN.toFixed(2)} kN`;\n        }\n        \n        \/\/ reset all inputs to default values, clear errors &#038; reset result\n        function resetCalculator() {\n            ratedLoadInput.value = '20.0';\n            hookWeightInput.value = '0.6';\n            trolleyWeightInput.value = '5.4';\n            phiSelect.value = '1.25';   \/\/ medium duty default\n            \n            clearAllErrors();\n            \n            \/\/ reset result display\n            resultSpan.textContent = '-- kN';\n            calcDetailSpan.textContent = '';\n            \n            \/\/ additionally, remove error classes from all inputs (already cleared, but ensure)\n            inputFields.forEach(field => {\n                field.element.classList.remove('error-input');\n            });\n            if (phiSelect) phiSelect.classList.remove('error-input');\n        }\n        \n        \/\/ setup dynamic error clearing on input\/change\n        function setupDynamicErrorClearing() {\n            ratedLoadInput.addEventListener('input', function() {\n                clearErrorForInput(ratedLoadInput, errorRated);\n            });\n            hookWeightInput.addEventListener('input', function() {\n                clearErrorForInput(hookWeightInput, errorHook);\n            });\n            trolleyWeightInput.addEventListener('input', function() {\n                clearErrorForInput(trolleyWeightInput, errorTrolley);\n            });\n            phiSelect.addEventListener('change', function() {\n                clearErrorForInput(phiSelect, errorPhi);\n            });\n        }\n        \n        \/\/ calculate action\n        function onCalculate() {\n            computeAndDisplay();\n        }\n        \n        \/\/ reset action\n        function onReset() {\n            resetCalculator();\n        }\n        \n        \/\/ initialization\n        function init() {\n            setupDynamicErrorClearing();\n            calcBtn.addEventListener('click', onCalculate);\n            resetBtn.addEventListener('click', onReset);\n            \/\/ initial compute with default values (shows result on page load)\n            computeAndDisplay();\n        }\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', init);\n        } else {\n            init();\n        }\n    })();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<h2 class=\"wp-block-heading\">\u0995\u09cd\u09b0\u09c7\u09a8 \u09a1\u09be\u0987\u09a8\u09be\u09ae\u09bf\u0995 \u09b2\u09cb\u09a1\u09bf\u0982 \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0 \u09b8\u09c2\u09a4\u09cd\u09b0<\/h2>\n\n\n\n<p>\u09aa\u09c3<sub>d<\/sub>=\u03c6(Q+Q<sub>\u099c<\/sub>+\u099c\u09bf<sub>t<\/sub>)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u09aa\u09c3<sub>d<\/sub>\u09a1\u09be\u0987\u09a8\u09be\u09ae\u09bf\u0995 \u09b2\u09cb\u09a1<\/li>\n\n\n\n<li>\u03c6: \u09aa\u09cd\u09b0\u09ad\u09be\u09ac \u0997\u09c1\u09a3\u0995<\/li>\n\n\n\n<li>\u09aa\u09cd\u09b0\u09b6\u09cd\u09a8: \u09b0\u09c7\u099f\u09c7\u09a1 \u09b2\u09cb\u09a1<\/li>\n\n\n\n<li>\u09aa\u09cd\u09b0\u09b6\u09cd\u09a8<sub>\u099c<\/sub>\u09b9\u09c1\u0995 \u098f\u09ac\u0982 \u0989\u09a4\u09cd\u09a4\u09cb\u09b2\u09a8 \u09b8\u0982\u09af\u09c1\u0995\u09cd\u09a4\u09bf \u0993\u099c\u09a8<\/li>\n\n\n\n<li>\u099c\u09bf<sub>t<\/sub>\u099f\u09cd\u09b0\u09b2\u09bf\u09b0 \u09a8\u09bf\u099c\u09b8\u09cd\u09ac \u0993\u099c\u09a8<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af<\/h2>\n\n\n\n<p>\u09aa\u09cd\u09b0\u0995\u09c3\u09a4 \u0995\u09cd\u09b0\u09c7\u09a8 \u09aa\u09b0\u09bf\u099a\u09be\u09b2\u09a8\u09be\u09b0 \u09b8\u09ae\u09af\u09bc, \u098f\u09b0 \u0989\u09aa\u09b0 \u0995\u09cd\u09b0\u09bf\u09af\u09bc\u09be\u09b6\u09c0\u09b2 \u09ac\u09b2\u0997\u09c1\u09b2\u09cb \u09b8\u09b0\u09cd\u09ac\u09a6\u09be \u09b8\u09cd\u09a5\u09bf\u09b0 \u09b2\u09cb\u09a1\u09c7\u09b0 \u099a\u09c7\u09af\u09bc\u09c7 \u09ac\u09c7\u09b6\u09bf \u09a5\u09be\u0995\u09c7\u0964 \u0989\u09a4\u09cd\u09a4\u09cb\u09b2\u09a8 \u0993 \u099a\u09be\u09b2\u09c1 \u0995\u09b0\u09be\u09b0 \u09aa\u09cd\u09b0\u09ad\u09be\u09ac, \u09ac\u09cd\u09b0\u09c7\u0995 \u0995\u09b0\u09be\u09b0 \u09b8\u09ae\u09af\u09bc\u0995\u09be\u09b0 \u099c\u09a1\u09bc\u09a4\u09be, \u09ae\u09cb\u099f\u09b0\u09c7\u09b0 \u09a4\u09cd\u09ac\u09b0\u09a3 \u09a5\u09c7\u0995\u09c7 \u09b8\u09c3\u09b7\u09cd\u099f \u0995\u09ae\u09cd\u09aa\u09a8 \u098f\u09ac\u0982 \u09b2\u09cb\u09a1\u09c7\u09b0 \u09a6\u09cb\u09b2\u09a8 \u09a5\u09c7\u0995\u09c7 \u09b8\u09c3\u09b7\u09cd\u099f \u0997\u09a4\u09bf\u09b6\u09c0\u09b2 \u09ac\u09b2\u0997\u09c1\u09b2\u09cb \u09ac\u09bf\u09ac\u09b0\u09cd\u09a7\u09bf\u09a4 \u09b9\u09af\u09bc\u0964 \u09a4\u09be\u0987, \u0997\u09a3\u09a8\u09be\u09b0 \u09b8\u09ae\u09af\u09bc \u098f\u0987 \u0989\u09aa\u09be\u09a6\u09be\u09a8\u0997\u09c1\u09b2\u09cb\u0995\u09c7 \u098f\u0995\u099f\u09bf \u0997\u09a4\u09bf\u09b6\u09c0\u09b2 \u09b2\u09cb\u09a1 \u09ab\u09cd\u09af\u09be\u0995\u09cd\u099f\u09b0 \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u0997\u09c1\u09a3 \u0995\u09b0\u09a4\u09c7 \u09b9\u09af\u09bc\u0964<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0995\u09ae \u0997\u09a4\u09bf \u0993 \u09b9\u09be\u09b2\u0995\u09be \u09ad\u09be\u09b0\u09c7\u09b0 \u09aa\u09b0\u09bf\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf\u09a4\u09c7 \u0985\u09a5\u09ac\u09be \u09b8\u09c1\u09a8\u09bf\u09b0\u09cd\u09a6\u09bf\u09b7\u09cd\u099f \u09a8\u09bf\u09af\u09bc\u09a8\u09cd\u09a4\u09cd\u09b0\u09a3\u09c7\u09b0 \u099c\u09a8\u09cd\u09af, \u03c6=\u09e7.\u09e7<\/li>\n\n\n\n<li>\u09aa\u09cd\u09b0\u099a\u09b2\u09bf\u09a4 \u09b6\u09bf\u09b2\u09cd\u09aa \u0995\u09cd\u09b0\u09c7\u09a8\u09c7\u09b0 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7, \u03c6=\u09e7.\u09e8-\u09e7.\u09e9<\/li>\n\n\n\n<li>\u09ad\u09be\u09b0\u09c0 \u09ac\u09be \u09aa\u09cd\u09b0\u09a4\u09bf\u0995\u09c2\u09b2 \u0995\u09be\u099c\u09c7\u09b0 \u09aa\u09b0\u09bf\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf, \u0985\u09a5\u09ac\u09be \u0989\u09b2\u09cd\u09b2\u09c7\u0996\u09af\u09cb\u0997\u09cd\u09af \u09aa\u09cd\u09b0\u09ad\u09be\u09ac \u09b8\u09c3\u09b7\u09cd\u099f\u09bf\u0995\u09be\u09b0\u09c0 \u0985\u09aa\u09be\u09b0\u09c7\u099f\u09bf\u0982 \u0985\u09ac\u09b8\u09cd\u09a5\u09be\u09b0 \u099c\u09a8\u09cd\u09af, \u03c6=\u09e7.\u09ea-\u09e7.\u09ec<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u09aa\u09cd\u09b0\u09af\u09cb\u099c\u09cd\u09af \u0995\u09cd\u09b0\u09c7\u09a8<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0993\u09ad\u09be\u09b0\u09b9\u09c7\u09a1 \u0995\u09cd\u09b0\u09c7\u09a8\u09b8<\/li>\n\n\n\n<li>\u09a8\u09cd\u09af\u09be\u099f\u09cd\u09b0\u09bf \u0995\u09cd\u09b0\u09c7\u09a8<\/li>\n\n\n\n<li>\u09ac\u09c8\u09a6\u09cd\u09af\u09c1\u09a4\u09bf\u0995 \u099f\u09cd\u09b0\u09b2\u09bf\/\u09b9\u09cb\u0987\u09b8\u09cd\u099f<\/li>\n\n\n\n<li>\u09aa\u09cb\u09b0\u09cd\u099f \u0995\u09cd\u09b0\u09c7\u09a8\u09b8<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0985\u09aa\u09cd\u09b0\u09af\u09cb\u099c\u09cd\u09af \u09aa\u09b0\u09bf\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0989\u099a\u09cd\u099a-\u0997\u09a4\u09bf\u09b0 \u0998\u09c2\u09b0\u09cd\u09a3\u09be\u09af\u09bc\u09ae\u09be\u09a8 \u09af\u09a8\u09cd\u09a4\u09cd\u09b0\u09aa\u09be\u09a4\u09bf (\u099f\u09be\u09b0\u09ac\u09be\u0987\u09a8, \u0987\u099e\u09cd\u099c\u09bf\u09a8)<\/li>\n\n\n\n<li>\u09a8\u09bf\u09b0\u09cd\u09ad\u09c1\u09b2 \u09ae\u09c7\u09b6\u09bf\u09a8 \u099f\u09c1\u09b2 \u09b8\u09cd\u09aa\u09bf\u09a8\u09cd\u09a1\u09b2 \u09b8\u09bf\u09b8\u09cd\u099f\u09c7\u09ae<\/li>\n\n\n\n<li>\u09ac\u09c1\u09a6\u09cd\u09a7\u09bf\u09ae\u09be\u09a8 \u0989\u09a4\u09cd\u09a4\u09cb\u09b2\u09a8 \u09ac\u09cd\u09af\u09ac\u09b8\u09cd\u09a5\u09be (\u09b8\u09cd\u09ac\u09af\u09bc\u0982\u0995\u09cd\u09b0\u09bf\u09af\u09bc \u09a6\u09cb\u09b2\u09a8-\u09b0\u09cb\u09a7\u09c0 \u09a8\u09bf\u09af\u09bc\u09a8\u09cd\u09a4\u09cd\u09b0\u09a3)<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"\u0995\u09cd\u09b0\u09c7\u09a8 \u09a1\u09be\u0987\u09a8\u09be\u09ae\u09bf\u0995 \u09b2\u09cb\u09a1\u09bf\u0982 \u0995\u09cd\u09af\u09be\u09b2\u0995\u09c1\u09b2\u09c7\u099f\u09b0\u09c7\u09b0 \u09ae\u09c2\u09b2 \u0989\u09a6\u09cd\u09a6\u09c7\u09b6\u09cd\u09af \u09b9\u09b2\u09cb \u09b6\u09c1\u09a7\u09c1\u09ae\u09be\u09a4\u09cd\u09b0 \u09b8\u09cd\u09a5\u09bf\u09b0 \u0989\u09a4\u09cd\u09a4\u09cb\u09b2\u09a8 \u0993\u099c\u09a8\u09c7\u09b0 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09c7 \u09aa\u09cd\u09b0\u0995\u09c3\u09a4 \u0995\u09be\u09b0\u09cd\u09af\u09aa\u09b0\u09bf\u099a\u09be\u09b2\u09a8\u09be\u09b0 \u09b8\u09ae\u09af\u09bc \u09b8\u09c3\u09b7\u09cd\u099f \u0985\u09a4\u09bf\u09b0\u09bf\u0995\u09cd\u09a4 \u09ad\u09be\u09b0 \u09aa\u09cd\u09b0\u09a4\u09bf\u09ab\u09b2\u09bf\u09a4 \u0995\u09b0\u09be, \u09af\u09be\u09a4\u09c7 \u0989\u09a4\u09cd\u09a4\u09cb\u09b2\u09a8 \u09b6\u09c1\u09b0\u09c1, \u09ac\u09cd\u09b0\u09c7\u0995\u09bf\u0982, \u099a\u09b2\u09be\u09b0 \u09b8\u09ae\u09af\u09bc\u0995\u09be\u09b0 \u099d\u09be\u0981\u0995\u09c1\u09a8\u09bf, \u0995\u09ae\u09cd\u09aa\u09a8 \u098f\u09ac\u0982 \u09ad\u09be\u09b0\u09c7\u09b0 \u09a6\u09cb\u09b2\u09a8\u09c7\u09b0 \u09ae\u09a4\u09cb \u0997\u09a4\u09bf\u09b6\u09c0\u09b2 \u0986\u099a\u09b0\u09a3\u09c7\u09b0 \u09aa\u09cd\u09b0\u09ad\u09be\u09ac \u0995\u09cd\u09b0\u09c7\u09a8\u09c7\u09b0 \u0995\u09be\u09a0\u09be\u09ae\u09cb \u098f\u09ac\u0982 \u0995\u09be\u09b0\u09cd\u09af\u09aa\u09cd\u09b0\u09a3\u09be\u09b2\u09c0\u09b0 \u0989\u09aa\u09b0 \u09a8\u09bf\u09b0\u09cd\u09ad\u09c1\u09b2\u09ad\u09be\u09ac\u09c7 \u09ae\u09c2\u09b2\u09cd\u09af\u09be\u09af\u09bc\u09a8 \u0995\u09b0\u09be \u09af\u09be\u09af\u09bc\u0964 \u098f\u099f\u09bf \u09aa\u09cd\u09b0\u09a7\u09be\u09a8 \u0997\u09be\u09b0\u09cd\u09a1\u09be\u09b0\u09c7\u09b0 \u09b6\u0995\u09cd\u09a4\u09bf \u0993 \u09ac\u09bf\u099a\u09cd\u09af\u09c1\u09a4\u09bf \u09aa\u09b0\u09c0\u0995\u09cd\u09b7\u09be, \u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09c0\u09af\u09bc \u09ac\u09bf\u09ae\u09c7\u09b0 \u099a\u09be\u09aa \u0993 \u09b0\u09c7\u09b2\u09c7\u09b0 \u09aa\u09c0\u09a1\u09bc\u09a8 \u09ac\u09bf\u09b6\u09cd\u09b2\u09c7\u09b7\u09a3, \u09b8\u09c7\u0987\u09b8\u09be\u09a5\u09c7 \u09ae\u09cb\u099f\u09b0, \u09ac\u09cd\u09b0\u09c7\u0995 \u098f\u09ac\u0982 \u0985\u09a8\u09cd\u09af\u09be\u09a8\u09cd\u09af \u0997\u09c1\u09b0\u09c1\u09a4\u09cd\u09ac\u09aa\u09c2\u09b0\u09cd\u09a3 \u09af\u09a8\u09cd\u09a4\u09cd\u09b0\u09be\u0982\u09b6\u09c7\u09b0 \u09a7\u09b0\u09a8 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u0993 \u09a8\u09bf\u09b0\u09be\u09aa\u09a4\u09cd\u09a4\u09be \u09af\u09be\u099a\u09be\u0987\u09af\u09bc\u09c7 \u0995\u09be\u09b0\u09cd\u09af\u0995\u09b0\u09ad\u09be\u09ac\u09c7 \u09b8\u09b9\u09be\u09af\u09bc\u09a4\u09be \u0995\u09b0\u09c7 \u098f\u09ac\u0982 ISO, FEM, EN \u0993 GB \u09ae\u09be\u09a8 \u0985\u09a8\u09c1\u09af\u09be\u09af\u09bc\u09c0 \u0993\u09ad\u09be\u09b0\u09b9\u09c7\u09a1 \u0993 \u0997\u09cd\u09af\u09be\u09a8\u09cd\u099f\u09cd\u09b0\u09bf \u0995\u09cd\u09b0\u09c7\u09a8\u09c7\u09b0 \u0995\u09be\u09a0\u09be\u09ae\u09cb\u0997\u09a4 \u09a8\u0995\u09b6\u09be, \u0986\u09af\u09bc\u09c1\u09b7\u09cd\u0995\u09be\u09b2 \u09ae\u09c2\u09b2\u09cd\u09af\u09be\u09af\u09bc\u09a8 \u098f\u09ac\u0982 \u09a8\u09bf\u09b0\u09be\u09aa\u09a4\u09cd\u09a4\u09be \u09b8\u09a8\u09a6\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0997\u09c1\u09b0\u09c1\u09a4\u09cd\u09ac\u09aa\u09c2\u09b0\u09cd\u09a3 \u09ad\u09bf\u09a4\u09cd\u09a4\u09bf \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u0995\u09be\u099c \u0995\u09b0\u09c7\u0964","protected":false},"author":8,"featured_media":17038,"parent":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"single-onlinetools.php","format":"standard","meta":{"_acf_changed":false,"rank_math_lock_modified_date":false,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[63],"tags":[],"class_list":["post-17030","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-other"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/posts\/17030"}],"collection":[{"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/comments?post=17030"}],"version-history":[{"count":6,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/posts\/17030\/revisions"}],"predecessor-version":[{"id":17039,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/posts\/17030\/revisions\/17039"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/media\/17038"}],"wp:attachment":[{"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/media?parent=17030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/categories?post=17030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dgcrane.com\/bn\/wp-json\/wp\/v2\/tags?post=17030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}