{"id":9848,"date":"2026-07-31T08:55:39","date_gmt":"2026-07-31T08:55:39","guid":{"rendered":"https:\/\/tradegoai.app\/?post_type=tools&#038;p=9848"},"modified":"2026-07-31T08:55:39","modified_gmt":"2026-07-31T08:55:39","slug":"calculadora-carga-pales","status":"publish","type":"tools","link":"https:\/\/tradegoai.app\/es\/tools\/pallet-loading-calculator\/","title":{"rendered":"Calculadora de carga de pal\u00e9s"},"content":{"rendered":"    <main\n        id=\"tga-pallet-loading-1\"\n        class=\"tga-pallet-tool\"\n        aria-labelledby=\"tga-pallet-loading-1-title\"\n    >\n        <style>\n            #tga-pallet-loading-1 {\n                --tga-tool-navy: #0f1831;\n                --tga-tool-purple: #6528f7;\n                --tga-tool-purple-dark: #501bd8;\n                --tga-tool-lilac: #f2efff;\n                --tga-tool-muted: #64748b;\n                --tga-tool-line: #e2e8f0;\n                --tga-tool-white: #ffffff;\n                --tga-tool-success: #047857;\n                --tga-tool-warning: #a16207;\n                --tga-tool-danger: #b91c1c;\n                width: 100%;\n                max-width: 1180px;\n                margin: 44px auto 72px;\n                padding: 0 22px;\n                color: var(--tga-tool-navy);\n                font-family: inherit;\n                box-sizing: border-box;\n            }\n            #tga-pallet-loading-1 *,\n            #tga-pallet-loading-1 *::before,\n            #tga-pallet-loading-1 *::after {\n                box-sizing: border-box;\n            }\n            #tga-pallet-loading-1 .tga-pallet-hero {\n                position: relative;\n                overflow: hidden;\n                padding: 46px 48px;\n                border-radius: 22px;\n                background:\n                    radial-gradient(circle at 88% 18%, rgba(101, 40, 247, .78), transparent 34%),\n                    linear-gradient(135deg, #081127 0%, #131d42 100%);\n                color: var(--tga-tool-white);\n            }\n            #tga-pallet-loading-1 .tga-pallet-hero::after {\n                position: absolute;\n                right: -78px;\n                bottom: -118px;\n                width: 320px;\n                height: 320px;\n                border: 1px solid rgba(255, 255, 255, .16);\n                border-radius: 50%;\n                content: \"\";\n            }\n            #tga-pallet-loading-1 .tga-pallet-eyebrow {\n                position: relative;\n                z-index: 1;\n                margin: 0 0 12px;\n                color: #cbbcff;\n                font-size: 12px;\n                font-weight: 800;\n                letter-spacing: .12em;\n                text-transform: uppercase;\n            }\n            #tga-pallet-loading-1 .tga-pallet-hero h1 {\n                position: relative;\n                z-index: 1;\n                max-width: 900px;\n                margin: 0 0 14px;\n                color: var(--tga-tool-white);\n                font-size: clamp(36px, 5.5vw, 62px);\n                line-height: 1.03;\n                letter-spacing: -.04em;\n            }\n            #tga-pallet-loading-1 .tga-pallet-hero p {\n                position: relative;\n                z-index: 1;\n                max-width: 780px;\n                margin: 0;\n                color: #dce4ff;\n                font-size: 18px;\n                line-height: 1.65;\n            }\n            #tga-pallet-loading-1 .tga-pallet-workspace {\n                display: grid;\n                grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);\n                gap: 24px;\n                margin-top: 28px;\n                align-items: start;\n            }\n            #tga-pallet-loading-1 .tga-pallet-panel,\n            #tga-pallet-loading-1 .tga-pallet-section {\n                border: 1px solid var(--tga-tool-line);\n                border-radius: 18px;\n                background: var(--tga-tool-white);\n                box-shadow: 0 16px 45px rgba(15, 24, 49, .06);\n            }\n            #tga-pallet-loading-1 .tga-pallet-panel {\n                padding: 28px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-section {\n                margin-top: 28px;\n                padding: 30px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-panel h2,\n            #tga-pallet-loading-1 .tga-pallet-section h2 {\n                margin: 0 0 8px;\n                color: var(--tga-tool-navy);\n                font-size: 25px;\n                line-height: 1.25;\n                letter-spacing: -.02em;\n            }\n            #tga-pallet-loading-1 .tga-pallet-intro,\n            #tga-pallet-loading-1 .tga-pallet-section > p {\n                margin: 0;\n                color: var(--tga-tool-muted);\n                line-height: 1.7;\n            }\n            #tga-pallet-loading-1 .tga-pallet-fieldset {\n                margin: 22px 0 0;\n                padding: 0;\n                border: 0;\n            }\n            #tga-pallet-loading-1 .tga-pallet-fieldset legend {\n                width: 100%;\n                margin-bottom: 13px;\n                padding: 0 0 9px;\n                border-bottom: 1px solid var(--tga-tool-line);\n                color: var(--tga-tool-navy);\n                font-size: 15px;\n                font-weight: 800;\n            }\n            #tga-pallet-loading-1 .tga-pallet-grid {\n                display: grid;\n                grid-template-columns: repeat(2, minmax(0, 1fr));\n                gap: 14px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-field-wide {\n                grid-column: 1 \/ -1;\n            }\n            #tga-pallet-loading-1 label {\n                display: block;\n                margin: 0 0 7px;\n                color: #334155;\n                font-size: 13px;\n                font-weight: 700;\n            }\n            #tga-pallet-loading-1 input,\n            #tga-pallet-loading-1 select {\n                width: 100%;\n                min-height: 48px;\n                margin: 0;\n                padding: 10px 13px;\n                border: 1px solid #cbd5e1;\n                border-radius: 10px;\n                outline: 0;\n                background: var(--tga-tool-white);\n                color: var(--tga-tool-navy);\n                font: inherit;\n                font-size: 15px;\n            }\n            #tga-pallet-loading-1 input:focus,\n            #tga-pallet-loading-1 select:focus {\n                border-color: var(--tga-tool-purple);\n                box-shadow: 0 0 0 3px rgba(101, 40, 247, .12);\n            }\n            #tga-pallet-loading-1 input:disabled {\n                background: #f8fafc;\n                color: #64748b;\n                cursor: not-allowed;\n            }\n            #tga-pallet-loading-1 .tga-pallet-help {\n                display: block;\n                margin-top: 6px;\n                color: var(--tga-tool-muted);\n                font-size: 12px;\n                line-height: 1.45;\n            }\n            #tga-pallet-loading-1 .tga-pallet-check {\n                display: flex;\n                gap: 10px;\n                align-items: flex-start;\n                min-height: 48px;\n                padding: 12px 13px;\n                border: 1px solid var(--tga-tool-line);\n                border-radius: 10px;\n                background: #f8fafc;\n            }\n            #tga-pallet-loading-1 .tga-pallet-check input {\n                flex: 0 0 auto;\n                width: 18px;\n                min-height: 18px;\n                margin: 2px 0 0;\n                accent-color: var(--tga-tool-purple);\n            }\n            #tga-pallet-loading-1 .tga-pallet-check label {\n                margin: 0;\n                line-height: 1.45;\n            }\n            #tga-pallet-loading-1 .tga-pallet-error {\n                min-height: 22px;\n                margin: 14px 0 0;\n                color: var(--tga-tool-danger);\n                font-size: 13px;\n                font-weight: 700;\n                line-height: 1.5;\n            }\n            #tga-pallet-loading-1 .tga-pallet-actions {\n                display: flex;\n                flex-wrap: wrap;\n                gap: 10px;\n                margin-top: 16px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-button {\n                display: inline-flex;\n                align-items: center;\n                justify-content: center;\n                min-height: 42px;\n                padding: 9px 14px;\n                border: 1px solid #cbd5e1;\n                border-radius: 9px;\n                background: var(--tga-tool-white);\n                color: var(--tga-tool-navy);\n                cursor: pointer;\n                font: inherit;\n                font-size: 14px;\n                font-weight: 800;\n                line-height: 1.2;\n                text-decoration: none;\n                transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;\n            }\n            #tga-pallet-loading-1 .tga-pallet-button:hover {\n                border-color: var(--tga-tool-purple);\n                transform: translateY(-1px);\n            }\n            #tga-pallet-loading-1 .tga-pallet-button:focus-visible,\n            #tga-pallet-loading-1 summary:focus-visible,\n            #tga-pallet-loading-1 a:focus-visible {\n                outline: 3px solid rgba(101, 40, 247, .28);\n                outline-offset: 3px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-primary {\n                min-height: 50px;\n                padding: 11px 19px;\n                border-color: var(--tga-tool-purple);\n                background: var(--tga-tool-purple);\n                color: var(--tga-tool-white);\n            }\n            #tga-pallet-loading-1 .tga-pallet-primary:hover {\n                border-color: var(--tga-tool-purple-dark);\n                background: var(--tga-tool-purple-dark);\n            }\n            #tga-pallet-loading-1 .tga-pallet-button:disabled {\n                border-color: #e2e8f0;\n                background: #f1f5f9;\n                color: #94a3b8;\n                cursor: not-allowed;\n                transform: none;\n            }\n            #tga-pallet-loading-1 .tga-pallet-result {\n                min-height: 560px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-empty {\n                margin-top: 22px;\n                padding: 28px 22px;\n                border: 1px dashed #cbd5e1;\n                border-radius: 14px;\n                background: #f8fafc;\n                color: var(--tga-tool-muted);\n                line-height: 1.7;\n                text-align: center;\n            }\n            #tga-pallet-loading-1 .tga-pallet-output[hidden],\n            #tga-pallet-loading-1 .tga-pallet-empty[hidden],\n            #tga-pallet-loading-1 [data-error-message][hidden],\n            #tga-pallet-loading-1 [data-status-message][hidden],\n            #tga-pallet-loading-1 [data-reset-status][hidden] {\n                display: none !important;\n            }\n            #tga-pallet-loading-1 .tga-pallet-metrics {\n                display: grid;\n                grid-template-columns: repeat(2, minmax(0, 1fr));\n                gap: 12px;\n                margin-top: 20px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-metric {\n                min-width: 0;\n                padding: 15px;\n                border: 1px solid var(--tga-tool-line);\n                border-radius: 12px;\n                background: #fbfdff;\n            }\n            #tga-pallet-loading-1 .tga-pallet-metric span {\n                display: block;\n                color: var(--tga-tool-muted);\n                font-size: 12px;\n                font-weight: 700;\n                line-height: 1.4;\n            }\n            #tga-pallet-loading-1 .tga-pallet-metric strong {\n                display: block;\n                margin-top: 5px;\n                color: var(--tga-tool-navy);\n                font-size: 22px;\n                line-height: 1.25;\n                overflow-wrap: anywhere;\n            }\n            #tga-pallet-loading-1 .tga-pallet-plan {\n                margin-top: 15px;\n                padding: 16px;\n                border-left: 4px solid var(--tga-tool-purple);\n                border-radius: 10px;\n                background: var(--tga-tool-lilac);\n                color: #334155;\n                line-height: 1.65;\n            }\n            #tga-pallet-loading-1 .tga-pallet-plan strong {\n                color: var(--tga-tool-navy);\n            }\n            #tga-pallet-loading-1 .tga-pallet-status {\n                min-height: 22px;\n                margin: 12px 0 0;\n                color: var(--tga-tool-success);\n                font-size: 13px;\n                font-weight: 700;\n                line-height: 1.5;\n            }\n            #tga-pallet-loading-1 .tga-pallet-notes {\n                display: grid;\n                grid-template-columns: repeat(3, minmax(0, 1fr));\n                gap: 14px;\n                margin-top: 20px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-note {\n                padding: 18px;\n                border: 1px solid var(--tga-tool-line);\n                border-radius: 13px;\n                background: #fbfdff;\n            }\n            #tga-pallet-loading-1 .tga-pallet-note h3 {\n                margin: 0 0 7px;\n                color: var(--tga-tool-navy);\n                font-size: 16px;\n                line-height: 1.35;\n            }\n            #tga-pallet-loading-1 .tga-pallet-note p {\n                margin: 0;\n                color: var(--tga-tool-muted);\n                font-size: 14px;\n                line-height: 1.65;\n            }\n            #tga-pallet-loading-1 .tga-pallet-cta {\n                display: flex;\n                gap: 28px;\n                align-items: center;\n                justify-content: space-between;\n                margin-top: 28px;\n                padding: 34px 38px;\n                border-radius: 18px;\n                background:\n                    radial-gradient(circle at 88% 18%, rgba(101, 40, 247, .65), transparent 38%),\n                    linear-gradient(135deg, #081127 0%, #131d42 100%);\n                color: var(--tga-tool-white);\n            }\n            #tga-pallet-loading-1 .tga-pallet-cta h2 {\n                margin: 0 0 8px;\n                color: var(--tga-tool-white);\n                font-size: 28px;\n                line-height: 1.25;\n            }\n            #tga-pallet-loading-1 .tga-pallet-cta p {\n                max-width: 720px;\n                margin: 0;\n                color: #dce4ff;\n                line-height: 1.7;\n            }\n            #tga-pallet-loading-1 .tga-pallet-cta a {\n                flex: 0 0 auto;\n                display: inline-flex;\n                align-items: center;\n                justify-content: center;\n                min-height: 50px;\n                padding: 11px 19px;\n                border-radius: 10px;\n                background: var(--tga-tool-white);\n                color: var(--tga-tool-navy);\n                font-weight: 800;\n                text-decoration: none;\n            }\n            #tga-pallet-loading-1 .tga-pallet-faq-list {\n                display: grid;\n                gap: 10px;\n                margin-top: 20px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-faq-list details {\n                border: 1px solid var(--tga-tool-line);\n                border-radius: 12px;\n                background: var(--tga-tool-white);\n            }\n            #tga-pallet-loading-1 .tga-pallet-faq-list summary {\n                padding: 16px 18px;\n                color: var(--tga-tool-navy);\n                cursor: pointer;\n                font-weight: 800;\n                line-height: 1.45;\n            }\n            #tga-pallet-loading-1 .tga-pallet-faq-list details p {\n                margin: 0;\n                padding: 0 18px 18px;\n                color: var(--tga-tool-muted);\n                line-height: 1.7;\n            }\n            #tga-pallet-loading-1 .tga-pallet-related-grid {\n                display: grid;\n                grid-template-columns: repeat(3, minmax(0, 1fr));\n                gap: 16px;\n                margin-top: 20px;\n            }\n            #tga-pallet-loading-1 .tga-pallet-related {\n                display: block;\n                min-width: 0;\n                padding: 20px;\n                border: 1px solid var(--tga-tool-line);\n                border-radius: 13px;\n                background: var(--tga-tool-white);\n                color: var(--tga-tool-navy);\n                text-decoration: none;\n                transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;\n            }\n            #tga-pallet-loading-1 .tga-pallet-related:hover,\n            #tga-pallet-loading-1 .tga-pallet-related:focus-visible {\n                border-color: var(--tga-tool-purple);\n                box-shadow: 0 10px 24px rgba(15, 24, 49, .08);\n                transform: translateY(-2px);\n            }\n            #tga-pallet-loading-1 .tga-pallet-related strong {\n                display: block;\n                margin-bottom: 7px;\n                color: var(--tga-tool-navy);\n                font-size: 16px;\n                line-height: 1.35;\n            }\n            #tga-pallet-loading-1 .tga-pallet-related span {\n                display: block;\n                color: var(--tga-tool-muted);\n                font-size: 14px;\n                line-height: 1.6;\n            }\n            #tga-pallet-loading-1 .tga-pallet-i18n {\n                position: absolute !important;\n                width: 1px !important;\n                height: 1px !important;\n                overflow: hidden !important;\n                clip: rect(0 0 0 0) !important;\n                white-space: nowrap !important;\n            }\n            @media (max-width: 900px) {\n                #tga-pallet-loading-1 .tga-pallet-workspace {\n                    grid-template-columns: minmax(0, 1fr);\n                }\n                #tga-pallet-loading-1 .tga-pallet-result {\n                    min-height: 0;\n                }\n                #tga-pallet-loading-1 .tga-pallet-notes,\n                #tga-pallet-loading-1 .tga-pallet-related-grid {\n                    grid-template-columns: minmax(0, 1fr);\n                }\n                #tga-pallet-loading-1 .tga-pallet-cta {\n                    align-items: flex-start;\n                    flex-direction: column;\n                }\n            }\n            @media (max-width: 600px) {\n                #tga-pallet-loading-1 {\n                    margin-top: 28px;\n                    padding: 0 15px;\n                }\n                #tga-pallet-loading-1 .tga-pallet-hero {\n                    padding: 31px 23px;\n                    border-radius: 16px;\n                }\n                #tga-pallet-loading-1 .tga-pallet-hero h1 {\n                    font-size: 39px;\n                }\n                #tga-pallet-loading-1 .tga-pallet-hero p {\n                    font-size: 16px;\n                }\n                #tga-pallet-loading-1 .tga-pallet-panel,\n                #tga-pallet-loading-1 .tga-pallet-section {\n                    padding: 22px 18px;\n                }\n                #tga-pallet-loading-1 .tga-pallet-grid,\n                #tga-pallet-loading-1 .tga-pallet-metrics {\n                    grid-template-columns: minmax(0, 1fr);\n                }\n                #tga-pallet-loading-1 input,\n                #tga-pallet-loading-1 select {\n                    font-size: 16px;\n                }\n                #tga-pallet-loading-1 .tga-pallet-actions {\n                    display: grid;\n                    grid-template-columns: minmax(0, 1fr);\n                }\n                #tga-pallet-loading-1 .tga-pallet-button,\n                #tga-pallet-loading-1 .tga-pallet-cta a {\n                    width: 100%;\n                }\n                #tga-pallet-loading-1 .tga-pallet-cta {\n                    padding: 28px 22px;\n                }\n            }\n        <\/style>\n\n        <section class=\"tga-pallet-hero\">\n            <p class=\"tga-pallet-eyebrow\">Plan Each Pallet Before Packing<\/p>\n            <h1 id=\"tga-pallet-loading-1-title\">Pallet Loading Calculator<\/h1>\n            <p>Estimate cartons per layer, stack limits, pallet gross weight, footprint use, and the number of pallets needed for a shipment.<\/p>\n        <\/section>\n\n        <section class=\"tga-pallet-workspace\" aria-label=\"Pallet loading workspace\">\n            <form class=\"tga-pallet-panel tga-pallet-form\" novalidate>\n                <h2>Enter Pallet and Carton Details<\/h2>\n                <p class=\"tga-pallet-intro\">Use packed carton dimensions and the limits that apply to your warehouse or carrier.<\/p>\n\n                <fieldset class=\"tga-pallet-fieldset\">\n                    <legend>Pallet<\/legend>\n                    <div class=\"tga-pallet-grid\">\n                        <div class=\"tga-pallet-field-wide\">\n                            <label for=\"tga-pallet-loading-1-preset\">Pallet preset<\/label>\n                            <select id=\"tga-pallet-loading-1-preset\" data-field=\"preset\">\n                                <option value=\"eur\">EUR \/ EPAL 1 \u2014 1200 \u00d7 800 mm<\/option>\n                                <option value=\"iso\">ISO \u2014 1200 \u00d7 1000 mm<\/option>\n                                <option value=\"us\">North America \u2014 1219 \u00d7 1016 mm<\/option>\n                                <option value=\"custom\">Custom pallet size<\/option>\n                            <\/select>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-pallet-length\">Pallet length (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-pallet-length\" data-field=\"palletLength\" type=\"number\" value=\"1200\" min=\"100\" max=\"5000\" step=\"1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-pallet-width\">Pallet width (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-pallet-width\" data-field=\"palletWidth\" type=\"number\" value=\"800\" min=\"100\" max=\"5000\" step=\"1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-pallet-height\">Pallet height (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-pallet-height\" data-field=\"palletHeight\" type=\"number\" value=\"144\" min=\"1\" max=\"1000\" step=\"1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-pallet-tare\">Pallet tare weight (kg)<\/label>\n                            <input id=\"tga-pallet-loading-1-pallet-tare\" data-field=\"palletTare\" type=\"number\" value=\"25\" min=\"0\" max=\"500\" step=\"0.1\" inputmode=\"decimal\" required>\n                        <\/div>\n                    <\/div>\n                <\/fieldset>\n\n                <fieldset class=\"tga-pallet-fieldset\">\n                    <legend>Carton and shipment<\/legend>\n                    <div class=\"tga-pallet-grid\">\n                        <div>\n                            <label for=\"tga-pallet-loading-1-carton-length\">Carton length (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-carton-length\" data-field=\"cartonLength\" type=\"number\" value=\"400\" min=\"1\" max=\"5000\" step=\"1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-carton-width\">Carton width (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-carton-width\" data-field=\"cartonWidth\" type=\"number\" value=\"300\" min=\"1\" max=\"5000\" step=\"1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-carton-height\">Carton height (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-carton-height\" data-field=\"cartonHeight\" type=\"number\" value=\"250\" min=\"1\" max=\"5000\" step=\"1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-carton-weight\">Carton gross weight (kg)<\/label>\n                            <input id=\"tga-pallet-loading-1-carton-weight\" data-field=\"cartonWeight\" type=\"number\" value=\"12\" min=\"0.01\" max=\"10000\" step=\"0.01\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-total-cartons\">Total cartons<\/label>\n                            <input id=\"tga-pallet-loading-1-total-cartons\" data-field=\"totalCartons\" type=\"number\" value=\"240\" min=\"1\" max=\"1000000\" step=\"1\" inputmode=\"numeric\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-max-height\">Maximum loaded height (mm)<\/label>\n                            <input id=\"tga-pallet-loading-1-max-height\" data-field=\"maxHeight\" type=\"number\" value=\"1800\" min=\"1\" max=\"10000\" step=\"1\" inputmode=\"decimal\" required>\n                            <span class=\"tga-pallet-help\">Includes the pallet height.<\/span>\n                        <\/div>\n                        <div>\n                            <label for=\"tga-pallet-loading-1-max-weight\">Maximum pallet gross weight (kg)<\/label>\n                            <input id=\"tga-pallet-loading-1-max-weight\" data-field=\"maxWeight\" type=\"number\" value=\"1000\" min=\"0.01\" max=\"100000\" step=\"0.1\" inputmode=\"decimal\" required>\n                        <\/div>\n                        <div class=\"tga-pallet-check\">\n                            <input id=\"tga-pallet-loading-1-rotation\" data-field=\"rotation\" type=\"checkbox\" checked>\n                            <label for=\"tga-pallet-loading-1-rotation\">Allow a uniform 90\u00b0 carton rotation<\/label>\n                        <\/div>\n                    <\/div>\n                <\/fieldset>\n\n                <p class=\"tga-pallet-error\" data-role=\"error\" role=\"alert\" aria-live=\"assertive\">\n                    <span data-error-message=\"invalid\" hidden>Enter positive values within the displayed limits for every required field.<\/span>\n                    <span data-error-message=\"heightError\" hidden>Maximum loaded height must be greater than the pallet height.<\/span>\n                    <span data-error-message=\"weightError\" hidden>Maximum pallet gross weight must be greater than the pallet tare weight.<\/span>\n                    <span data-error-message=\"fitError\" hidden>The carton footprint does not fit on this pallet without overhang.<\/span>\n                    <span data-error-message=\"limitError\" hidden>The selected height or weight limit does not allow one complete carton.<\/span>\n                <\/p>\n                <div class=\"tga-pallet-actions\">\n                    <button class=\"tga-pallet-button tga-pallet-primary\" type=\"submit\">Calculate Pallet Load<\/button>\n                    <button class=\"tga-pallet-button\" data-action=\"reset\" type=\"button\">Reset<\/button>\n                <\/div>\n            <\/form>\n\n            <section class=\"tga-pallet-panel tga-pallet-result\" aria-labelledby=\"tga-pallet-loading-1-results-title\">\n                <h2 id=\"tga-pallet-loading-1-results-title\">Pallet Plan<\/h2>\n                <p class=\"tga-pallet-intro\">Review the footprint, height, and weight limits together before packing.<\/p>\n                <div class=\"tga-pallet-empty\" data-role=\"empty\">\n                    <span>Enter your packed dimensions and select Calculate Pallet Load to create a plan.<\/span>\n                    <span class=\"tga-pallet-status\" data-reset-status hidden>The example values have been restored.<\/span>\n                <\/div>\n                <div class=\"tga-pallet-output\" data-role=\"output\" hidden>\n                    <div class=\"tga-pallet-metrics\">\n                        <div class=\"tga-pallet-metric\"><span>Cartons per layer<\/span><strong data-result=\"perLayer\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Stacked layers<\/span><strong data-result=\"layers\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Cartons per pallet<\/span><strong data-result=\"perPallet\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Pallets needed<\/span><strong data-result=\"pallets\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Loaded height<\/span><strong data-result=\"loadedHeight\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Full pallet gross weight<\/span><strong data-result=\"grossWeight\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Footprint use<\/span><strong data-result=\"utilization\">\u2014<\/strong><\/div>\n                        <div class=\"tga-pallet-metric\"><span>Last pallet cartons<\/span><strong data-result=\"lastPallet\">\u2014<\/strong><\/div>\n                    <\/div>\n                    <div class=\"tga-pallet-plan\" data-role=\"plan\"><\/div>\n                    <div class=\"tga-pallet-actions\">\n                        <button class=\"tga-pallet-button\" data-action=\"copy\" type=\"button\">Copy Summary<\/button>\n                        <button class=\"tga-pallet-button\" data-action=\"download\" type=\"button\">Download CSV<\/button>\n                    <\/div>\n                    <p class=\"tga-pallet-status\" data-role=\"status\" role=\"status\" aria-live=\"polite\">\n                        <span data-status-message=\"calculated\" hidden>Pallet loading estimate calculated.<\/span>\n                        <span data-status-message=\"copied\" hidden>Summary copied.<\/span>\n                        <span data-status-message=\"copyFailed\" hidden>Copy failed. Select and copy the result manually.<\/span>\n                        <span data-status-message=\"downloaded\" hidden>CSV downloaded.<\/span>\n                    <\/p>\n                <\/div>\n            <\/section>\n        <\/section>\n\n        <section class=\"tga-pallet-section\">\n            <h2>How to Read the Estimate<\/h2>\n                <p>The calculator applies footprint, loaded-height, and gross-weight limits. The lower resulting carton capacity controls how many cartons fit on one pallet.<\/p>\n            <div class=\"tga-pallet-notes\">\n                <article class=\"tga-pallet-note\">\n                    <h3>Footprint<\/h3>\n                    <p>The two uniform carton orientations are compared without overhang. Mixed or interlocked layer patterns are not simulated.<\/p>\n                <\/article>\n                <article class=\"tga-pallet-note\">\n                    <h3>Height<\/h3>\n                    <p>Available stack height equals the maximum loaded height minus the pallet height, divided by carton height.<\/p>\n                <\/article>\n                <article class=\"tga-pallet-note\">\n                    <h3>Weight<\/h3>\n                    <p>Available cargo weight equals the maximum pallet gross weight minus pallet tare weight, divided by carton gross weight. The final layer can be partial.<\/p>\n                <\/article>\n            <\/div>\n        <\/section>\n\n        <section class=\"tga-pallet-cta\">\n            <div>\n                <h2>Plan International Trade With Fewer Surprises<\/h2>\n                <p>Explore TradeGoAI services for buyer research, sales preparation, trade documentation, risk review, and market visibility.<\/p>\n            <\/div>\n            <a href=\"https:\/\/tradegoai.app\/es\/services\/\">Explore Services \u2192<\/a>\n        <\/section>\n\n        <section class=\"tga-pallet-section\">\n            <h2>Frequently Asked Questions<\/h2>\n            <div class=\"tga-pallet-faq-list\">\n                                    <details>\n                        <summary>How does the calculator choose a carton orientation?<\/summary>\n                        <p>It compares a uniform lengthwise layout with a uniform 90-degree rotated layout and uses the one that fits more cartons per full layer. A weight limit or the remaining shipment quantity can leave the final layer partly filled.<\/p>\n                    <\/details>\n                                    <details>\n                        <summary>Does the maximum loaded height include the pallet?<\/summary>\n                        <p>Yes. The loaded-height limit includes the pallet height, so the available carton stack height is the limit minus the pallet itself.<\/p>\n                    <\/details>\n                                    <details>\n                        <summary>How is the pallet gross weight calculated?<\/summary>\n                        <p>Pallet gross weight equals the pallet tare weight plus the gross weight of every carton placed on it. The result uses the weight unit selected in the form.<\/p>\n                    <\/details>\n                                    <details>\n                        <summary>Can I use the result as a final warehouse loading plan?<\/summary>\n                        <p>Use it as an early planning estimate. Confirm carton strength, load stability, pallet capacity, wrapping, overhang rules, handling equipment, and carrier requirements before packing.<\/p>\n                    <\/details>\n                                    <details>\n                        <summary>Are the carton and pallet details saved?<\/summary>\n                        <p>The details are used only to calculate the results shown in your browser. Reset clears the current plan.<\/p>\n                    <\/details>\n                            <\/div>\n        <\/section>\n\n        <section class=\"tga-pallet-section\">\n            <h2>Related Free Tools<\/h2>\n            <p>Continue from pallet planning into shipment volume, container capacity, and chargeable-weight estimates.<\/p>\n            <div class=\"tga-pallet-related-grid\">\n                <a class=\"tga-pallet-related\" href=\"https:\/\/tradegoai.app\/es\/tools\/cbm-carton-calculator\/\">\n                    <strong>CBM &amp; Carton Calculator<\/strong>\n                    <span>Combine several carton types into shipment volume and gross-weight totals.<\/span>\n                <\/a>\n                <a class=\"tga-pallet-related\" href=\"https:\/\/tradegoai.app\/es\/tools\/container-loading-estimator\/\">\n                    <strong>Container Loading Estimator<\/strong>\n                    <span>Compare theoretical carton capacity across common container sizes.<\/span>\n                <\/a>\n                <a class=\"tga-pallet-related\" href=\"https:\/\/tradegoai.app\/es\/tools\/volumetric-weight-calculator\/\">\n                    <strong>Volumetric Weight Calculator<\/strong>\n                    <span>Compare actual and dimensional weight for air, express, and road shipments.<\/span>\n                <\/a>\n            <\/div>\n        <\/section>\n\n        <div class=\"tga-pallet-i18n\" aria-hidden=\"true\">\n            <span data-key=\"empty\">Enter your packed dimensions and select Calculate Pallet Load to create a plan.<\/span>\n            <span data-key=\"invalid\">Enter positive values within the displayed limits for every required field.<\/span>\n            <span data-key=\"heightError\">Maximum loaded height must be greater than the pallet height.<\/span>\n            <span data-key=\"weightError\">Maximum pallet gross weight must be greater than the pallet tare weight.<\/span>\n            <span data-key=\"fitError\">The carton footprint does not fit on this pallet without overhang.<\/span>\n            <span data-key=\"limitError\">The selected height or weight limit does not allow one complete carton.<\/span>\n            <span data-key=\"calculated\">Pallet loading estimate calculated.<\/span>\n            <span data-key=\"copied\">Summary copied.<\/span>\n            <span data-key=\"copyFailed\">Copy failed. Select and copy the result manually.<\/span>\n            <span data-key=\"downloaded\">CSV downloaded.<\/span>\n            <span data-key=\"reset\">The example values have been restored.<\/span>\n            <span data-key=\"orientationLengthwise\">Lengthwise orientation<\/span>\n            <span data-key=\"orientationRotated\">90\u00b0 rotated orientation<\/span>\n            <span data-key=\"heightLimited\">height limit<\/span>\n            <span data-key=\"weightLimited\">weight limit<\/span>\n            <span data-key=\"bothLimited\">height and weight limits<\/span>\n            <span data-key=\"planPrefix\">Best uniform layout:<\/span>\n            <span data-key=\"arrangement\">cartons along pallet length \u00d7 cartons along pallet width.<\/span>\n            <span data-key=\"limiterPrefix\">Stack is limited by the<\/span>\n            <span data-key=\"partialPrefix\">The final pallet contains<\/span>\n            <span data-key=\"cartons\">cartons.<\/span>\n            <span data-key=\"summaryTitle\">Pallet Loading Estimate<\/span>\n            <span data-key=\"labelOrientation\">Orientation<\/span>\n            <span data-key=\"labelArrangement\">Layer arrangement<\/span>\n            <span data-key=\"labelPerLayer\">Cartons per layer<\/span>\n            <span data-key=\"labelLayers\">Stacked layers<\/span>\n            <span data-key=\"labelPerPallet\">Cartons per pallet<\/span>\n            <span data-key=\"labelPallets\">Pallets needed<\/span>\n            <span data-key=\"labelLast\">Last pallet cartons<\/span>\n            <span data-key=\"labelHeight\">Loaded height<\/span>\n            <span data-key=\"labelWeight\">Full pallet gross weight<\/span>\n            <span data-key=\"labelUtilization\">Footprint use<\/span>\n            <span data-key=\"labelLimiter\">Limiting factor<\/span>\n        <\/div>\n\n        <script>\n            (function () {\n                const root = document.getElementById(\"tga-pallet-loading-1\");\n                if (!root || root.dataset.ready === '1') {\n                    return;\n                }\n                root.dataset.ready = '1';\n\n                const form = root.querySelector('.tga-pallet-form');\n                const empty = root.querySelector('[data-role=\"empty\"]');\n                const output = root.querySelector('[data-role=\"output\"]');\n                const plan = root.querySelector('[data-role=\"plan\"]');\n                const preset = root.querySelector('[data-field=\"preset\"]');\n                const resultNodes = {};\n                const labels = {};\n                let current = null;\n\n                root.querySelectorAll('[data-result]').forEach(function (node) {\n                    resultNodes[node.dataset.result] = node;\n                });\n                function loadLabels() {\n                    root.querySelectorAll('.tga-pallet-i18n [data-key]').forEach(function (node) {\n                        labels[node.dataset.key] = node.textContent.trim();\n                    });\n                }\n                loadLabels();\n\n                const defaults = {\n                    preset: 'eur',\n                    palletLength: 1200,\n                    palletWidth: 800,\n                    palletHeight: 144,\n                    palletTare: 25,\n                    cartonLength: 400,\n                    cartonWidth: 300,\n                    cartonHeight: 250,\n                    cartonWeight: 12,\n                    totalCartons: 240,\n                    maxHeight: 1800,\n                    maxWeight: 1000,\n                    rotation: true\n                };\n\n                const presets = {\n                    eur: {length: 1200, width: 800, height: 144, tare: 25},\n                    iso: {length: 1200, width: 1000, height: 150, tare: 28},\n                    us: {length: 1219, width: 1016, height: 140, tare: 23}\n                };\n\n                function field(name) {\n                    return root.querySelector('[data-field=\"' + name + '\"]');\n                }\n\n                function value(name) {\n                    return Number(field(name).value);\n                }\n\n                function formatNumber(number, decimals) {\n                    return Number(number).toLocaleString(undefined, {\n                        minimumFractionDigits: decimals,\n                        maximumFractionDigits: decimals\n                    });\n                }\n\n                function clearMessages() {\n                    writeError('');\n                    writeStatus('');\n                    const resetMessage = root.querySelector('[data-reset-status]');\n                    if (resetMessage) {\n                        resetMessage.hidden = true;\n                    }\n                }\n\n                function writeError(key) {\n                    root.querySelectorAll('[data-error-message]').forEach(function (node) {\n                        node.hidden = !key || node.dataset.errorMessage !== key;\n                    });\n                }\n\n                function writeStatus(key) {\n                    root.querySelectorAll('[data-status-message]').forEach(function (node) {\n                        node.hidden = !key || node.dataset.statusMessage !== key;\n                    });\n                }\n\n                function updatePalletFields() {\n                    const isCustom = preset.value === 'custom';\n                    ['palletLength', 'palletWidth', 'palletHeight', 'palletTare'].forEach(function (name) {\n                        field(name).disabled = !isCustom;\n                    });\n                }\n\n                function applyPreset() {\n                    const selected = presets[preset.value];\n                    if (selected) {\n                        field('palletLength').value = selected.length;\n                        field('palletWidth').value = selected.width;\n                        field('palletHeight').value = selected.height;\n                        field('palletTare').value = selected.tare;\n                    }\n                    updatePalletFields();\n                    clearMessages();\n                }\n\n                function parseInputs() {\n                    const data = {\n                        palletLength: value('palletLength'),\n                        palletWidth: value('palletWidth'),\n                        palletHeight: value('palletHeight'),\n                        palletTare: value('palletTare'),\n                        cartonLength: value('cartonLength'),\n                        cartonWidth: value('cartonWidth'),\n                        cartonHeight: value('cartonHeight'),\n                        cartonWeight: value('cartonWeight'),\n                        totalCartons: value('totalCartons'),\n                        maxHeight: value('maxHeight'),\n                        maxWeight: value('maxWeight'),\n                        rotation: field('rotation').checked\n                    };\n\n                    const positive = [\n                        data.palletLength,\n                        data.palletWidth,\n                        data.palletHeight,\n                        data.cartonLength,\n                        data.cartonWidth,\n                        data.cartonHeight,\n                        data.cartonWeight,\n                        data.totalCartons,\n                        data.maxHeight,\n                        data.maxWeight\n                    ].every(function (number) {\n                        return Number.isFinite(number) && number > 0;\n                    });\n\n                    if (!positive || !Number.isFinite(data.palletTare) || data.palletTare < 0) {\n                        throw new Error('invalid');\n                    }\n                    const withinLimits =\n                        data.palletLength <= 5000 &&\n                        data.palletWidth <= 5000 &&\n                        data.palletHeight <= 1000 &&\n                        data.palletTare <= 500 &&\n                        data.cartonLength <= 5000 &&\n                        data.cartonWidth <= 5000 &&\n                        data.cartonHeight <= 5000 &&\n                        data.cartonWeight <= 10000 &&\n                        Number.isInteger(data.totalCartons) &&\n                        data.totalCartons <= 1000000 &&\n                        data.maxHeight <= 10000 &&\n                        data.maxWeight <= 100000;\n                    if (!withinLimits) {\n                        throw new Error('invalid');\n                    }\n                    if (data.maxHeight <= data.palletHeight) {\n                        throw new Error('heightError');\n                    }\n                    if (data.maxWeight <= data.palletTare) {\n                        throw new Error('weightError');\n                    }\n\n                    return data;\n                }\n\n                function calculate(data) {\n                    const lengthwise = {\n                        name: labels.orientationLengthwise,\n                        alongLength: Math.floor(data.palletLength \/ data.cartonLength),\n                        alongWidth: Math.floor(data.palletWidth \/ data.cartonWidth)\n                    };\n                    lengthwise.perLayer = lengthwise.alongLength * lengthwise.alongWidth;\n\n                    const rotated = {\n                        name: labels.orientationRotated,\n                        alongLength: Math.floor(data.palletLength \/ data.cartonWidth),\n                        alongWidth: Math.floor(data.palletWidth \/ data.cartonLength)\n                    };\n                    rotated.perLayer = rotated.alongLength * rotated.alongWidth;\n\n                    let layout = lengthwise;\n                    if (data.rotation && rotated.perLayer > lengthwise.perLayer) {\n                        layout = rotated;\n                    }\n                    if (layout.perLayer < 1) {\n                        throw new Error('fitError');\n                    }\n\n                    const heightLayers = Math.floor((data.maxHeight - data.palletHeight) \/ data.cartonHeight);\n                    const maxCartonsByHeight = layout.perLayer * heightLayers;\n                    const maxCartonsByWeight = Math.floor((data.maxWeight - data.palletTare) \/ data.cartonWeight);\n                    const perPallet = Math.min(maxCartonsByHeight, maxCartonsByWeight);\n                    const layers = Math.ceil(perPallet \/ layout.perLayer);\n\n                    if (perPallet < 1) {\n                        throw new Error('limitError');\n                    }\n\n                    const pallets = Math.ceil(data.totalCartons \/ perPallet);\n                    const lastPallet = data.totalCartons - ((pallets - 1) * perPallet);\n                    const loadedHeight = data.palletHeight + (layers * data.cartonHeight);\n                    const grossWeight = data.palletTare + (perPallet * data.cartonWeight);\n                    const cartonArea = data.cartonLength * data.cartonWidth;\n                    const palletArea = data.palletLength * data.palletWidth;\n                    const utilization = (layout.perLayer * cartonArea \/ palletArea) * 100;\n                    let limiter = labels.bothLimited;\n\n                    if (maxCartonsByHeight < maxCartonsByWeight) {\n                        limiter = labels.heightLimited;\n                    } else if (maxCartonsByWeight < maxCartonsByHeight) {\n                        limiter = labels.weightLimited;\n                    }\n\n                    return {\n                        input: data,\n                        layout: layout,\n                        heightLayers: heightLayers,\n                        maxCartonsByHeight: maxCartonsByHeight,\n                        maxCartonsByWeight: maxCartonsByWeight,\n                        layers: layers,\n                        perPallet: perPallet,\n                        pallets: pallets,\n                        lastPallet: lastPallet,\n                        loadedHeight: loadedHeight,\n                        grossWeight: grossWeight,\n                        utilization: utilization,\n                        limiter: limiter\n                    };\n                }\n\n                function summaryLines(result) {\n                    return [\n                        labels.summaryTitle,\n                        labels.labelOrientation + ': ' + result.layout.name,\n                        labels.labelArrangement + ': ' + result.layout.alongLength + ' \u00d7 ' + result.layout.alongWidth,\n                        labels.labelPerLayer + ': ' + result.layout.perLayer,\n                        labels.labelLayers + ': ' + result.layers,\n                        labels.labelPerPallet + ': ' + result.perPallet,\n                        labels.labelPallets + ': ' + result.pallets,\n                        labels.labelLast + ': ' + result.lastPallet,\n                        labels.labelHeight + ': ' + formatNumber(result.loadedHeight, 0) + ' mm',\n                        labels.labelWeight + ': ' + formatNumber(result.grossWeight, 2) + ' kg',\n                        labels.labelUtilization + ': ' + formatNumber(result.utilization, 1) + '%',\n                        labels.labelLimiter + ': ' + result.limiter\n                    ];\n                }\n\n                function render(result) {\n                    resultNodes.perLayer.textContent = formatNumber(result.layout.perLayer, 0);\n                    resultNodes.layers.textContent = formatNumber(result.layers, 0);\n                    resultNodes.perPallet.textContent = formatNumber(result.perPallet, 0);\n                    resultNodes.pallets.textContent = formatNumber(result.pallets, 0);\n                    resultNodes.loadedHeight.textContent = formatNumber(result.loadedHeight, 0) + ' mm';\n                    resultNodes.grossWeight.textContent = formatNumber(result.grossWeight, 2) + ' kg';\n                    resultNodes.utilization.textContent = formatNumber(result.utilization, 1) + '%';\n                    resultNodes.lastPallet.textContent = formatNumber(result.lastPallet, 0);\n\n                    plan.textContent = '';\n                    const layoutStrong = document.createElement('strong');\n                    layoutStrong.textContent = labels.planPrefix + ' ';\n                    plan.appendChild(layoutStrong);\n                    plan.appendChild(document.createTextNode(\n                        result.layout.name + ' \u2014 ' +\n                        result.layout.alongLength + ' \u00d7 ' +\n                        result.layout.alongWidth + ' ' +\n                        labels.arrangement + ' ' +\n                        labels.limiterPrefix + ' ' +\n                        result.limiter + '. ' +\n                        labels.partialPrefix + ' ' +\n                        result.lastPallet + ' ' +\n                        labels.cartons\n                    ));\n\n                    empty.hidden = true;\n                    output.hidden = false;\n                    writeStatus('calculated');\n                }\n\n                function csvCell(valueToEscape) {\n                    let text = String(valueToEscape);\n                    if (\/^[=+\\-@]\/.test(text)) {\n                        text = \"'\" + text;\n                    }\n                    return '\"' + text.replace(\/\"\/g, '\"\"') + '\"';\n                }\n\n                function downloadCsv() {\n                    if (!current) {\n                        return;\n                    }\n                    loadLabels();\n                    const rows = [\n                        ['Metric', 'Value'],\n                        [labels.labelOrientation, current.layout.name],\n                        [labels.labelArrangement, current.layout.alongLength + ' x ' + current.layout.alongWidth],\n                        [labels.labelPerLayer, current.layout.perLayer],\n                        [labels.labelLayers, current.layers],\n                        [labels.labelPerPallet, current.perPallet],\n                        [labels.labelPallets, current.pallets],\n                        [labels.labelLast, current.lastPallet],\n                        [labels.labelHeight, current.loadedHeight + ' mm'],\n                        [labels.labelWeight, current.grossWeight.toFixed(2) + ' kg'],\n                        [labels.labelUtilization, current.utilization.toFixed(1) + '%'],\n                        [labels.labelLimiter, current.limiter]\n                    ];\n                    const csv = '\\uFEFF' + rows.map(function (row) {\n                        return row.map(csvCell).join(',');\n                    }).join('\\r\\n');\n                    const blob = new Blob([csv], {type: 'text\/csv;charset=utf-8'});\n                    const url = URL.createObjectURL(blob);\n                    const link = document.createElement('a');\n                    link.href = url;\n                    link.download = 'pallet-loading-estimate.csv';\n                    document.body.appendChild(link);\n                    link.click();\n                    link.remove();\n                    URL.revokeObjectURL(url);\n                    writeStatus('downloaded');\n                }\n\n                async function copySummary() {\n                    if (!current) {\n                        return;\n                    }\n                    loadLabels();\n                    const text = summaryLines(current).join('\\n');\n                    try {\n                        if (navigator.clipboard && window.isSecureContext) {\n                            await navigator.clipboard.writeText(text);\n                        } else {\n                            const area = document.createElement('textarea');\n                            area.value = text;\n                            area.setAttribute('readonly', '');\n                            area.style.position = 'fixed';\n                            area.style.opacity = '0';\n                            document.body.appendChild(area);\n                            area.select();\n                            if (!document.execCommand('copy')) {\n                                throw new Error('copy');\n                            }\n                            area.remove();\n                        }\n                        writeStatus('copied');\n                    } catch (copyError) {\n                        writeStatus('copyFailed');\n                    }\n                }\n\n                function restoreDefaults() {\n                    loadLabels();\n                    Object.keys(defaults).forEach(function (name) {\n                        const node = field(name);\n                        if (!node) {\n                            return;\n                        }\n                        if (node.type === 'checkbox') {\n                            node.checked = defaults[name];\n                        } else {\n                            node.value = defaults[name];\n                        }\n                    });\n                    applyPreset();\n                    current = null;\n                    clearMessages();\n                    output.hidden = true;\n                    empty.hidden = false;\n                    const resetStatus = root.querySelector('[data-reset-status]');\n                    if (resetStatus) {\n                        resetStatus.hidden = false;\n                    }\n                    field('cartonLength').focus();\n                }\n\n                preset.addEventListener('change', applyPreset);\n                form.addEventListener('submit', function (event) {\n                    event.preventDefault();\n                    loadLabels();\n                    clearMessages();\n                    try {\n                        current = calculate(parseInputs());\n                        render(current);\n                    } catch (calculationError) {\n                        current = null;\n                        output.hidden = true;\n                        empty.hidden = false;\n                        writeError(calculationError.message || 'invalid');\n                    }\n                });\n                root.querySelector('[data-action=\"reset\"]').addEventListener('click', restoreDefaults);\n                root.querySelector('[data-action=\"copy\"]').addEventListener('click', copySummary);\n                root.querySelector('[data-action=\"download\"]').addEventListener('click', downloadCsv);\n\n                updatePalletFields();\n            })();\n        <\/script>\n    <\/main>\n    \n","protected":false},"excerpt":{"rendered":"<p>Calcula las cajas por pal\u00e9, la altura de apilado, el peso bruto, el uso de superficie y los pal\u00e9s necesarios para planificar el env\u00edo.<\/p>","protected":false},"featured_media":9850,"template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"spectra_gs_classes":"[\"\"]"},"tool_categories":[51,46],"class_list":["post-9848","tools","type-tools","status-publish","has-post-thumbnail","hentry","tool_categories-shipping-calculators","tool_categories-trade-operations"],"spectra_custom_meta":{"spectra_gs_classes":["[\"\"]"],"rank_math_internal_links_processed":["1"],"wp_statistics_words_count":["1"],"_thumbnail_id":["9850"],"rank_math_title":["%title% %sep% %sitename%"],"rank_math_description":["%excerpt%"],"rank_math_robots":["a:2:{i:0;s:5:\"index\";i:1;s:6:\"follow\";}"],"rank_math_facebook_image":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share.webp"],"rank_math_facebook_image_id":["9850"],"rank_math_twitter_use_facebook":["on"],"rank_math_twitter_card_type":["summary_large_image"],"astra_style_timestamp_css":["1787210763"],"_uag_page_assets":["a:9:{s:3:\"css\";s:4963:\".uag-blocks-common-selector{z-index:var(--z-index-desktop) !important}@media (max-width: 976px){.uag-blocks-common-selector{z-index:var(--z-index-tablet) !important}}@media (max-width: 767px){.uag-blocks-common-selector{z-index:var(--z-index-mobile) !important}}\n.uagb-icon-list__wrap{display:flex;align-items:flex-start;justify-content:flex-start}.wp-block-uagb-icon-list-child{padding:0;transition:all 0.2s;display:inline-flex;color:#3a3a3a;align-items:center;text-decoration:none;box-shadow:none}.wp-block-uagb-icon-list-child span.uagb-icon-list__source-wrap{display:block;align-items:center}.uagb-icon-list__source-wrap svg{display:block}.uagb-icon-list__source-image{width:40px}.uagb-icon-list__outer-wrap .uagb-icon-list__content-wrap{color:#3a3a3a;display:flex;align-items:center}\n.wp-block-uagb-icon-list-child{position:relative}.wp-block-uagb-icon-list-child>a{position:absolute;top:0;left:0;width:100%;height:100%}img.uagb-icon-list__source-image{max-width:unset}.wp-block-uagb-icon-list-child .uagb-icon-list__label{word-break:break-word}\n.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__source-image{width: 16px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap svg{width: 16px;height: 16px;font-size: 16px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{padding: 0px;border-radius: 0px;border-width: 0px;align-self: center;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__label{text-decoration: !important;font-weight: 600;line-height: em;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__wrap{display: flex;flex-direction: column;justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: flex-start;-ms-flex-align: flex-start;align-items: flex-start;margin-top: 30px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__label{text-align: left;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child{text-decoration: !important;font-weight: 600;line-height: em;}.wp-block-uagb-icon-list.uagb-block-b5768981.wp-block-uagb-icon-list .wp-block-uagb-icon-list-child{margin-left: 0;margin-right: 0;margin-bottom: 10px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__source-wrap{margin-right: 15px;}.uagb-block-75fa870d.wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-75fa870d.wp-block-uagb-icon-list-child:hover .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-5bf81fd2.wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-5bf81fd2.wp-block-uagb-icon-list-child:hover .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}@media only screen and (max-width: 976px) {.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__source-image{width: 16px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap svg{width: 16px;height: 16px;font-size: 16px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap {padding: 0px;border-width: 0px;align-self: center;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__wrap{display: flex;flex-direction: column;justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: flex-start;-ms-flex-align: flex-start;align-items: flex-start;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__label{text-align: left;}.wp-block-uagb-icon-list.uagb-block-b5768981.wp-block-uagb-icon-list .wp-block-uagb-icon-list-child{margin-left: 0;margin-right: 0;margin-bottom: 10px;}}@media only screen and (max-width: 767px) {.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__source-image{width: 16px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__label{text-align: center;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap svg{width: 16px;height: 16px;font-size: 16px;}.wp-block-uagb-icon-list.uagb-block-b5768981 .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{padding: 0px;border-width: 0px;align-self: center;}.wp-block-uagb-icon-list.uagb-block-b5768981 .uagb-icon-list__wrap{display: flex;flex-direction: column;justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;}.wp-block-uagb-icon-list.uagb-block-b5768981.wp-block-uagb-icon-list .wp-block-uagb-icon-list-child{margin-left: 0;margin-right: 0;margin-bottom: 10px;}}\";s:2:\"js\";s:0:\"\";s:18:\"current_block_list\";a:10:{i:0;s:11:\"core\/search\";i:1;s:10:\"core\/group\";i:2;s:12:\"core\/heading\";i:3;s:17:\"core\/latest-posts\";i:4;s:20:\"core\/latest-comments\";i:5;s:13:\"core\/archives\";i:6;s:15:\"core\/categories\";i:7;s:14:\"uagb\/icon-list\";i:8;s:20:\"uagb\/icon-list-child\";i:9;s:14:\"core\/shortcode\";}s:8:\"uag_flag\";b:1;s:11:\"uag_version\";s:10:\"1787709447\";s:6:\"gfonts\";a:0:{}s:10:\"gfonts_url\";s:0:\"\";s:12:\"gfonts_files\";a:0:{}s:14:\"uag_faq_layout\";b:0;}"],"rank_math_schema_SoftwareApplication":["a:8:{s:5:\"@type\";s:19:\"SoftwareApplication\";s:4:\"name\";s:25:\"Pallet Loading Calculator\";s:11:\"description\";s:130:\"Calculate cartons per pallet, stack height, gross weight, floor-space use, and the number of pallets needed for shipment planning.\";s:3:\"url\";s:54:\"https:\/\/tradegoai.app\/tools\/pallet-loading-calculator\/\";s:5:\"image\";s:92:\"https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share.webp\";s:19:\"applicationCategory\";s:19:\"BusinessApplication\";s:15:\"operatingSystem\";s:11:\"Web Browser\";s:6:\"offers\";a:3:{s:5:\"@type\";s:5:\"Offer\";s:5:\"price\";s:1:\"0\";s:13:\"priceCurrency\";s:3:\"USD\";}}"],"_uag_css_file_name":["uag-css-9848.css"]},"uagb_featured_image_src":{"full":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share.webp",1200,630,false],"thumbnail":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share-150x150.webp",150,150,true],"medium":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share-300x158.webp",300,158,true],"medium_large":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share-768x403.webp",768,403,true],"large":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share-1024x538.webp",1024,538,true],"1536x1536":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share.webp",1200,630,false],"2048x2048":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share.webp",1200,630,false],"trp-custom-language-flag":["https:\/\/tradegoai.app\/wp-content\/uploads\/2026\/07\/pallet-loading-calculator-social-share-18x9.webp",18,9,true]},"uagb_author_info":{"display_name":"","author_link":"https:\/\/tradegoai.app\/es\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"Calculate cartons per pallet, stack height, gross weight, floor-space use, and the number of pallets needed for shipment planning.","_links":{"self":[{"href":"https:\/\/tradegoai.app\/es\/wp-json\/wp\/v2\/tools\/9848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tradegoai.app\/es\/wp-json\/wp\/v2\/tools"}],"about":[{"href":"https:\/\/tradegoai.app\/es\/wp-json\/wp\/v2\/types\/tools"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tradegoai.app\/es\/wp-json\/wp\/v2\/media\/9850"}],"wp:attachment":[{"href":"https:\/\/tradegoai.app\/es\/wp-json\/wp\/v2\/media?parent=9848"}],"wp:term":[{"taxonomy":"tool_categories","embeddable":true,"href":"https:\/\/tradegoai.app\/es\/wp-json\/wp\/v2\/tool_categories?post=9848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}