{"id":2061,"date":"2026-06-18T08:53:07","date_gmt":"2026-06-18T00:53:07","guid":{"rendered":"https:\/\/www.funpt.cn\/?page_id=2061"},"modified":"2026-06-18T08:56:11","modified_gmt":"2026-06-18T00:56:11","slug":"fcs%ef%bc%88fundamental-capacity-screen%ef%bc%89","status":"publish","type":"page","link":"https:\/\/www.funpt.cn\/?page_id=2061","title":{"rendered":"FCS\uff08\u57fa\u7840\u4f53\u80fd\u7b5b\u67e5\uff09"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2061\" class=\"elementor elementor-2061\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd1fa78 e-flex e-con-boxed e-con e-parent\" data-id=\"dd1fa78\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7efd0b0 elementor-widget elementor-widget-html\" data-id=\"7efd0b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"zh-CN\">\r\n<head>\r\n    <meta charset=\"UTF-8\" \/>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\r\n    <title>\u57fa\u7840\u80fd\u529b\u7b5b\u67e5 (FCS) \u8bc4\u4f30\u7cfb\u7edf<\/title>\r\n    <style>\r\n        \/* ===== \u5168\u5c40 ===== *\/\r\n        * {\r\n            box-sizing: border-box;\r\n            margin: 0;\r\n            padding: 0;\r\n        }\r\n        body {\r\n            font-family: 'Segoe UI', Roboto, system-ui, sans-serif;\r\n            background: #f5f7fc;\r\n            color: #1e293b;\r\n            padding: 20px;\r\n        }\r\n        .container {\r\n            max-width: 1000px;\r\n            margin: 0 auto;\r\n            background: #ffffff;\r\n            border-radius: 24px;\r\n            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.08);\r\n            overflow: hidden;\r\n            padding: 28px 32px 40px;\r\n        }\r\n        h1 {\r\n            font-size: 28px;\r\n            font-weight: 700;\r\n            letter-spacing: -0.3px;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 12px;\r\n            margin-bottom: 4px;\r\n        }\r\n        h1 small {\r\n            font-size: 15px;\r\n            font-weight: 400;\r\n            color: #64748b;\r\n            margin-left: 6px;\r\n        }\r\n        .subhead {\r\n            color: #64748b;\r\n            font-size: 15px;\r\n            border-bottom: 2px solid #eef2f6;\r\n            padding-bottom: 18px;\r\n            margin-bottom: 28px;\r\n            display: flex;\r\n            justify-content: space-between;\r\n            flex-wrap: wrap;\r\n            gap: 8px;\r\n        }\r\n        .subhead .badge {\r\n            background: #eef2ff;\r\n            color: #4338ca;\r\n            font-weight: 600;\r\n            font-size: 13px;\r\n            padding: 4px 14px;\r\n            border-radius: 30px;\r\n        }\r\n\r\n        \/* ===== \u6b65\u9aa4\u5bfc\u822a ===== *\/\r\n        .steps {\r\n            display: flex;\r\n            flex-wrap: wrap;\r\n            gap: 6px 4px;\r\n            margin-bottom: 28px;\r\n            padding: 4px 0;\r\n            border-bottom: 1px solid #e9edf2;\r\n            padding-bottom: 16px;\r\n        }\r\n        .step-btn {\r\n            background: #f1f4f9;\r\n            border: none;\r\n            padding: 6px 16px;\r\n            border-radius: 30px;\r\n            font-size: 13px;\r\n            font-weight: 600;\r\n            color: #475569;\r\n            cursor: pointer;\r\n            transition: all 0.2s;\r\n            white-space: nowrap;\r\n        }\r\n        .step-btn:hover {\r\n            background: #e2e8f0;\r\n        }\r\n        .step-btn.active {\r\n            background: #1e293b;\r\n            color: #fff;\r\n        }\r\n        .step-btn.done {\r\n            background: #dbeafe;\r\n            color: #1e40af;\r\n        }\r\n\r\n        \/* ===== \u9762\u677f ===== *\/\r\n        .panel {\r\n            display: none;\r\n            animation: fadeUp 0.3s ease;\r\n        }\r\n        .panel.active {\r\n            display: block;\r\n        }\r\n        @keyframes fadeUp {\r\n            from {\r\n                opacity: 0;\r\n                transform: translateY(12px);\r\n            }\r\n            to {\r\n                opacity: 1;\r\n                transform: translateY(0);\r\n            }\r\n        }\r\n\r\n        .panel-title {\r\n            font-size: 22px;\r\n            font-weight: 700;\r\n            margin-bottom: 4px;\r\n        }\r\n        .panel-desc {\r\n            color: #64748b;\r\n            font-size: 14px;\r\n            margin-bottom: 20px;\r\n        }\r\n\r\n        .card-grid {\r\n            display: grid;\r\n            grid-template-columns: 1fr 1fr;\r\n            gap: 18px 24px;\r\n        }\r\n        @media (max-width: 640px) {\r\n            .card-grid {\r\n                grid-template-columns: 1fr;\r\n            }\r\n        }\r\n\r\n        .field-group {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 4px;\r\n        }\r\n        .field-group label {\r\n            font-weight: 600;\r\n            font-size: 14px;\r\n            color: #334155;\r\n        }\r\n        .field-group .hint {\r\n            font-size: 12px;\r\n            color: #94a3b8;\r\n            font-weight: 400;\r\n        }\r\n        .field-group input,\r\n        .field-group select {\r\n            padding: 8px 12px;\r\n            border: 1.5px solid #d1d9e6;\r\n            border-radius: 10px;\r\n            font-size: 15px;\r\n            background: #fafcff;\r\n            transition: 0.2s;\r\n            width: 100%;\r\n        }\r\n        .field-group input:focus,\r\n        .field-group select:focus {\r\n            border-color: #3b82f6;\r\n            outline: none;\r\n            background: #fff;\r\n            box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);\r\n        }\r\n        .field-group .value-unit {\r\n            font-size: 13px;\r\n            color: #64748b;\r\n            margin-top: 2px;\r\n        }\r\n\r\n        .result-box {\r\n            background: #f8fafc;\r\n            border-radius: 14px;\r\n            padding: 16px 20px;\r\n            margin-top: 20px;\r\n            border-left: 5px solid #3b82f6;\r\n        }\r\n        .result-box .label {\r\n            font-weight: 600;\r\n            font-size: 14px;\r\n            color: #475569;\r\n        }\r\n        .result-box .value {\r\n            font-size: 20px;\r\n            font-weight: 700;\r\n            margin-top: 2px;\r\n        }\r\n        .result-box .pass {\r\n            color: #16a34a;\r\n        }\r\n        .result-box .fail {\r\n            color: #dc2626;\r\n        }\r\n        .result-box .sub {\r\n            font-size: 14px;\r\n            font-weight: 400;\r\n            color: #475569;\r\n            margin-top: 6px;\r\n        }\r\n\r\n        .btn-group {\r\n            display: flex;\r\n            gap: 12px;\r\n            margin-top: 28px;\r\n            flex-wrap: wrap;\r\n        }\r\n        .btn {\r\n            padding: 10px 28px;\r\n            border: none;\r\n            border-radius: 30px;\r\n            font-weight: 600;\r\n            font-size: 15px;\r\n            cursor: pointer;\r\n            transition: 0.2s;\r\n            background: #eef2f6;\r\n            color: #1e293b;\r\n        }\r\n        .btn:hover {\r\n            background: #dce2ea;\r\n        }\r\n        .btn-primary {\r\n            background: #1e293b;\r\n            color: #fff;\r\n        }\r\n        .btn-primary:hover {\r\n            background: #0f172a;\r\n        }\r\n        .btn-success {\r\n            background: #16a34a;\r\n            color: #fff;\r\n        }\r\n        .btn-success:hover {\r\n            background: #15803d;\r\n        }\r\n        .btn-outline {\r\n            background: transparent;\r\n            border: 2px solid #d1d9e6;\r\n        }\r\n        .btn-outline:hover {\r\n            border-color: #94a3b8;\r\n            background: #f1f4f9;\r\n        }\r\n\r\n        \/* ===== \u62a5\u544a ===== *\/\r\n        .report-grid {\r\n            display: grid;\r\n            grid-template-columns: 1fr 1fr;\r\n            gap: 20px;\r\n        }\r\n        @media (max-width: 700px) {\r\n            .report-grid {\r\n                grid-template-columns: 1fr;\r\n            }\r\n        }\r\n        .report-card {\r\n            background: #f8fafc;\r\n            border-radius: 16px;\r\n            padding: 18px 20px;\r\n            border: 1px solid #e9edf2;\r\n        }\r\n        .report-card h3 {\r\n            font-size: 16px;\r\n            font-weight: 700;\r\n            margin-bottom: 10px;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n        .report-card .row {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            padding: 5px 0;\r\n            font-size: 14px;\r\n            border-bottom: 1px solid #eef2f6;\r\n        }\r\n        .report-card .row:last-child {\r\n            border-bottom: none;\r\n        }\r\n        .report-card .row .label {\r\n            color: #64748b;\r\n        }\r\n        .report-card .row .val {\r\n            font-weight: 600;\r\n        }\r\n        .status-badge {\r\n            display: inline-block;\r\n            padding: 2px 14px;\r\n            border-radius: 30px;\r\n            font-size: 13px;\r\n            font-weight: 600;\r\n        }\r\n        .status-badge.pass {\r\n            background: #dcfce7;\r\n            color: #16a34a;\r\n        }\r\n        .status-badge.fail {\r\n            background: #fee2e2;\r\n            color: #dc2626;\r\n        }\r\n        .status-badge.warn {\r\n            background: #fef3c7;\r\n            color: #d97706;\r\n        }\r\n\r\n        .summary-total {\r\n            background: #1e293b;\r\n            color: #fff;\r\n            border-radius: 16px;\r\n            padding: 20px 24px;\r\n            margin-top: 24px;\r\n            display: flex;\r\n            flex-wrap: wrap;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n        }\r\n        .summary-total .big {\r\n            font-size: 28px;\r\n            font-weight: 700;\r\n        }\r\n        .summary-total .sub {\r\n            font-size: 14px;\r\n            color: #94a3b8;\r\n        }\r\n\r\n        .print-btn {\r\n            background: #ffffff20;\r\n            color: #fff;\r\n            border: 1px solid #ffffff40;\r\n            padding: 8px 24px;\r\n            border-radius: 30px;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: 0.2s;\r\n            font-size: 14px;\r\n        }\r\n        .print-btn:hover {\r\n            background: #ffffff30;\r\n        }\r\n\r\n        \/* ===== \u8f85\u52a9 ===== *\/\r\n        .mt-12 {\r\n            margin-top: 12px;\r\n        }\r\n        .mt-20 {\r\n            margin-top: 20px;\r\n        }\r\n        .flex {\r\n            display: flex;\r\n            gap: 16px;\r\n            flex-wrap: wrap;\r\n            align-items: center;\r\n        }\r\n        .gap-8 {\r\n            gap: 8px;\r\n        }\r\n        .text-center {\r\n            text-align: center;\r\n        }\r\n        .w-full {\r\n            width: 100%;\r\n        }\r\n        .inline-block {\r\n            display: inline-block;\r\n        }\r\n\r\n        \/* ===== \u54cd\u5e94\u5f0f ===== *\/\r\n        @media (max-width: 480px) {\r\n            .container {\r\n                padding: 16px;\r\n            }\r\n            h1 {\r\n                font-size: 22px;\r\n                flex-wrap: wrap;\r\n            }\r\n            .steps {\r\n                gap: 4px;\r\n            }\r\n            .step-btn {\r\n                font-size: 12px;\r\n                padding: 4px 12px;\r\n            }\r\n            .btn {\r\n                padding: 8px 18px;\r\n                font-size: 14px;\r\n            }\r\n            .summary-total {\r\n                flex-direction: column;\r\n                align-items: flex-start;\r\n                gap: 12px;\r\n            }\r\n        }\r\n\r\n        \/* print *\/\r\n        @media print {\r\n            body {\r\n                background: #fff;\r\n                padding: 0;\r\n            }\r\n            .container {\r\n                box-shadow: none;\r\n                padding: 16px;\r\n                border-radius: 0;\r\n            }\r\n            .steps,\r\n            .btn-group,\r\n            .print-btn,\r\n            .no-print {\r\n                display: none !important;\r\n            }\r\n            .panel {\r\n                display: block !important;\r\n                page-break-after: always;\r\n            }\r\n            .panel:last-child {\r\n                page-break-after: avoid;\r\n            }\r\n            .report-grid {\r\n                page-break-inside: avoid;\r\n            }\r\n            .summary-total {\r\n                background: #f1f4f9 !important;\r\n                color: #1e293b !important;\r\n            }\r\n            .summary-total .sub {\r\n                color: #64748b !important;\r\n            }\r\n            .print-btn {\r\n                display: none !important;\r\n            }\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n    <div class=\"container\" id=\"app\">\r\n\r\n        <!-- \u5934\u90e8 -->\r\n        <header>\r\n            <h1>\r\n                \u26a1 \u57fa\u7840\u80fd\u529b\u7b5b\u67e5\r\n                <small>FCS v7.4<\/small>\r\n            <\/h1>\r\n            <div class=\"subhead\">\r\n                <span>\u57fa\u4e8e Fundamental Capacity Screen \u6d4b\u8bd5\u624b\u518c<\/span>\r\n                <span class=\"badge\">\u8bc4\u4f30\u5de5\u5177<\/span>\r\n            <\/div>\r\n        <\/header>\r\n\r\n        <!-- \u6b65\u9aa4\u5bfc\u822a -->\r\n        <nav class=\"steps\" id=\"stepNav\">\r\n            <button class=\"step-btn active\" data-step=\"0\">\ud83d\udccb \u4fe1\u606f<\/button>\r\n            <button class=\"step-btn\" data-step=\"1\">\ud83e\uddb6 \u8e1d\u5173\u8282<\/button>\r\n            <button class=\"step-btn\" data-step=\"2\">\ud83e\uddb5 \u4e0b\u80a2MCS<\/button>\r\n            <button class=\"step-btn\" data-step=\"3\">\ud83d\udcaa \u4e0a\u80a2MCS<\/button>\r\n            <button class=\"step-btn\" data-step=\"4\">\ud83c\udfcb\ufe0f \u8d1f\u91cd<\/button>\r\n            <button class=\"step-btn\" data-step=\"5\">\ud83d\ude80 \u7206\u53d1\u529b<\/button>\r\n            <button class=\"step-btn\" data-step=\"6\">\u26a1 \u80fd\u91cf\u50a8\u5b58<\/button>\r\n            <button class=\"step-btn\" data-step=\"7\">\ud83d\udcca \u62a5\u544a<\/button>\r\n        <\/nav>\r\n\r\n        <!-- ======================== \u6b65\u9aa40\uff1a\u4e2a\u4eba\u4fe1\u606f ======================== -->\r\n        <section class=\"panel active\" data-panel=\"0\">\r\n            <h2 class=\"panel-title\">\ud83d\udccb \u53d7\u8bd5\u8005\u4fe1\u606f<\/h2>\r\n            <p class=\"panel-desc\">\u586b\u5199\u57fa\u672c\u4fe1\u606f\uff0c\u6240\u6709\u6d4b\u8bd5\u5c06\u57fa\u4e8e\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u8bc4\u4f30\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u59d3\u540d<\/label>\r\n                    <input type=\"text\" id=\"name\" placeholder=\"\u4f8b\u5982\uff1a\u5f20\u660e\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u6027\u522b<\/label>\r\n                    <select id=\"gender\"><option value=\"\u7537\">\u7537<\/option><option value=\"\u5973\">\u5973<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5e74\u9f84 (\u5c81)<\/label>\r\n                    <input type=\"number\" id=\"age\" placeholder=\"25\" min=\"10\" max=\"80\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u8eab\u9ad8 (cm)<\/label>\r\n                    <input type=\"number\" id=\"height\" placeholder=\"175\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u4f53\u91cd (kg)<\/label>\r\n                    <input type=\"number\" id=\"weight\" placeholder=\"70\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u8db3\u957f (cm) <span class=\"hint\">\u7528\u4e8e\u4e0b\u80a2\/\u4e0a\u80a2MCS\u8ba1\u7b97<\/span><\/label>\r\n                    <input type=\"number\" id=\"footLength\" placeholder=\"26\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\r\n                    <label>\u5907\u6ce8 \/ \u65e2\u5f80\u53f2<\/label>\r\n                    <input type=\"text\" id=\"notes\" placeholder=\"\u65e2\u5f80\u635f\u4f24\u3001\u624b\u672f\u53f2\u7b49\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(1)\">\u4e0b\u4e00\u6b65 \u2192 \u8e1d\u5173\u8282\u7b5b\u67e5<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa41\uff1a\u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6 ======================== -->\r\n        <section class=\"panel\" data-panel=\"1\">\r\n            <h2 class=\"panel-title\">\ud83e\uddb6 \u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6\u7b5b\u67e5<\/h2>\r\n            <p class=\"panel-desc\">\u6d4b\u8bd5\u8e1d\u5173\u8282\u80cc\u5c48\u6d3b\u52a8\u5ea6\uff0c\u8bb0\u5f55\u75bc\u75db\u60c5\u51b5\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u5de6\u811a <span class=\"hint\">(Beyond \/ Within \/ Behind)<\/span><\/label>\r\n                    <select id=\"ankleLeft\">\r\n                        <option value=\"Beyond\">Beyond \u2014 \u819d\u8d85\u8fc7\u5185\u8e1d<\/option>\r\n                        <option value=\"Within\">Within \u2014 \u819d\u5728\u5185\u8e1d\u5bbd\u5ea6\u5185<\/option>\r\n                        <option value=\"Behind\">Behind \u2014 \u819d\u5728\u5185\u8e1d\u540e\u65b9<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u53f3\u811a <span class=\"hint\">(Beyond \/ Within \/ Behind)<\/span><\/label>\r\n                    <select id=\"ankleRight\">\r\n                        <option value=\"Beyond\">Beyond \u2014 \u819d\u8d85\u8fc7\u5185\u8e1d<\/option>\r\n                        <option value=\"Within\">Within \u2014 \u819d\u5728\u5185\u8e1d\u5bbd\u5ea6\u5185<\/option>\r\n                        <option value=\"Behind\">Behind \u2014 \u819d\u5728\u5185\u8e1d\u540e\u65b9<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5de6\u811a\u75bc\u75db<\/label>\r\n                    <select id=\"anklePainLeft\"><option value=\"\u5426\">\u65e0<\/option><option value=\"\u662f\">\u6709<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u53f3\u811a\u75bc\u75db<\/label>\r\n                    <select id=\"anklePainRight\"><option value=\"\u5426\">\u65e0<\/option><option value=\"\u662f\">\u6709<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\r\n                    <label>\u75bc\u75db\u4f4d\u7f6e\uff08\u5982\u6709\uff09<\/label>\r\n                    <input type=\"text\" id=\"anklePainLocation\" placeholder=\"\u524d\u4fa7 \/ \u540e\u4fa7 \/ \u4e24\u4fa7\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"result-box\" id=\"ankleResult\">\r\n                <div class=\"label\">\ud83d\udccc \u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6\u8bc4\u4f30<\/div>\r\n                <div class=\"value\" id=\"ankleStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\r\n                <div class=\"sub\" id=\"ankleDetail\">\u8bf7\u5b8c\u6210\u5de6\u53f3\u811a\u9009\u62e9<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(0)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(2)\">\u4e0b\u4e00\u6b65 \u2192 \u4e0b\u80a2MCS<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa42\uff1a\u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236 ======================== -->\r\n        <section class=\"panel\" data-panel=\"2\">\r\n            <h2 class=\"panel-title\">\ud83e\uddb5 \u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236 (MCS)<\/h2>\r\n            <p class=\"panel-desc\">\u524d\u4f38\u6d4b\u8bd5\uff0c\u8bb0\u5f55\u5de6\u53f3\u811a\u6700\u5927\u5230\u8fbe\u8ddd\u79bb (cm)\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u5de6\u811a\u524d\u4f38\u8ddd\u79bb (cm)<\/label>\r\n                    <input type=\"number\" id=\"lmbLeft\" placeholder=\"68\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u53f3\u811a\u524d\u4f38\u8ddd\u79bb (cm)<\/label>\r\n                    <input type=\"number\" id=\"lmbRight\" placeholder=\"63\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\r\n                    <label>\u8db3\u957f (cm) <span class=\"hint\">\u81ea\u52a8\u8bfb\u53d6\u4e2a\u4eba\u4fe1\u606f\u4e2d\u7684\u8db3\u957f<\/span><\/label>\r\n                    <input type=\"number\" id=\"lmbFootLength\" step=\"0.5\" placeholder=\"26\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"result-box\" id=\"lmbResult\">\r\n                <div class=\"label\">\ud83d\udccc \u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236\u8bc4\u4f30<\/div>\r\n                <div class=\"value\" id=\"lmbStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\r\n                <div class=\"sub\" id=\"lmbDetail\">\u8bf7\u8f93\u5165\u5de6\u53f3\u811a\u524d\u4f38\u8ddd\u79bb<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(1)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(3)\">\u4e0b\u4e00\u6b65 \u2192 \u4e0a\u80a2MCS<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa43\uff1a\u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236 ======================== -->\r\n        <section class=\"panel\" data-panel=\"3\">\r\n            <h2 class=\"panel-title\">\ud83d\udcaa \u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236 (MCS)<\/h2>\r\n            <p class=\"panel-desc\">\u8155\u4f38\u7b5b\u67e5\u3001\u6c34\u5e73\u5185\u6536\u7b5b\u67e5\u53ca\u6c34\u5e73\u4f38\u6d4b\u8bd5\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u8155\u4f38\u7b5b\u67e5 (\u5de6) <\/label>\r\n                    <select id=\"wristLeft\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u8155\u4f38\u7b5b\u67e5 (\u53f3) <\/label>\r\n                    <select id=\"wristRight\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u6c34\u5e73\u5185\u6536\u7b5b\u67e5 (\u5de6) <\/label>\r\n                    <select id=\"addLeft\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u6c34\u5e73\u5185\u6536\u7b5b\u67e5 (\u53f3) <\/label>\r\n                    <select id=\"addRight\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u6c34\u5e73\u4f38\u8ddd\u79bb \u2014 \u5de6 (cm)<\/label>\r\n                    <input type=\"number\" id=\"umbLeft\" placeholder=\"68\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u6c34\u5e73\u4f38\u8ddd\u79bb \u2014 \u53f3 (cm)<\/label>\r\n                    <input type=\"number\" id=\"umbRight\" placeholder=\"63\" step=\"0.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\r\n                    <label>\u8db3\u957f (cm) <span class=\"hint\">\u7528\u4e8e\u8ba1\u7b97 2\u00d7\u8db3\u957f \u9608\u503c<\/span><\/label>\r\n                    <input type=\"number\" id=\"umbFootLength\" step=\"0.5\" placeholder=\"26\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"result-box\" id=\"umbResult\">\r\n                <div class=\"label\">\ud83d\udccc \u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236\u8bc4\u4f30<\/div>\r\n                <div class=\"value\" id=\"umbStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\r\n                <div class=\"sub\" id=\"umbDetail\">\u8bf7\u8f93\u5165\u6c34\u5e73\u4f38\u8ddd\u79bb<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(2)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(4)\">\u4e0b\u4e00\u6b65 \u2192 \u8d1f\u91cd\u63a7\u5236<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa44\uff1a\u8d1f\u91cd\u63a7\u5236 ======================== -->\r\n        <section class=\"panel\" data-panel=\"4\">\r\n            <h2 class=\"panel-title\">\ud83c\udfcb\ufe0f \u8d1f\u91cd\u63a7\u5236 (Carry Screen)<\/h2>\r\n            <p class=\"panel-desc\">75% \u4f53\u91cd\u8d1f\u91cd\u884c\u8d70\uff0c\u8bb0\u5f55\u8ddd\u79bb\u548c\u65f6\u95f4\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u4f53\u91cd (kg) <span class=\"hint\">\u81ea\u52a8\u8bfb\u53d6<\/span><\/label>\r\n                    <input type=\"number\" id=\"carryWeight\" step=\"0.5\" placeholder=\"70\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u8d1f\u91cd\u91cd\u91cf (kg) <span class=\"hint\">\u5efa\u8bae 75% \u4f53\u91cd<\/span><\/label>\r\n                    <input type=\"number\" id=\"carryLoad\" step=\"0.5\" placeholder=\"52.5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5b8c\u6210\u8ddd\u79bb (\u82f1\u5c3a)<\/label>\r\n                    <input type=\"number\" id=\"carryDist\" placeholder=\"280\" step=\"5\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5b8c\u6210\u65f6\u95f4 (\u79d2)<\/label>\r\n                    <input type=\"number\" id=\"carryTime\" placeholder=\"85\" step=\"1\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"result-box\" id=\"carryResult\">\r\n                <div class=\"label\">\ud83d\udccc \u8d1f\u91cd\u63a7\u5236\u8bc4\u4f30<\/div>\r\n                <div class=\"value\" id=\"carryStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\r\n                <div class=\"sub\" id=\"carryDetail\">\u8bf7\u8f93\u5165\u8d1f\u91cd\u6570\u636e<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(3)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(5)\">\u4e0b\u4e00\u6b65 \u2192 \u7206\u53d1\u529b<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa45\uff1a\u7206\u53d1\u529b\u63a7\u5236 ======================== -->\r\n        <section class=\"panel\" data-panel=\"5\">\r\n            <h2 class=\"panel-title\">\ud83d\ude80 \u7206\u53d1\u529b\u63a7\u5236 (Power)<\/h2>\r\n            <p class=\"panel-desc\">\u7acb\u5b9a\u8df3\u8fdc\uff08\u6709\u6446\u81c2\/\u624b\u5728\u81c0\u90e8\uff09\u53ca\u5355\u817f\u8df3\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u7acb\u5b9a\u8df3\u8fdc \u6709\u6446\u81c2 (cm)<\/label>\r\n                    <input type=\"number\" id=\"bjArms\" placeholder=\"244\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u7acb\u5b9a\u8df3\u8fdc \u624b\u5728\u81c0\u90e8 (cm)<\/label>\r\n                    <input type=\"number\" id=\"bjHips\" placeholder=\"211\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u8eab\u9ad8 (cm) <span class=\"hint\">\u81ea\u52a8\u8bfb\u53d6<\/span><\/label>\r\n                    <input type=\"number\" id=\"bjHeight\" step=\"0.5\" placeholder=\"175\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5355\u817f\u8df3 \u2014 \u5de6 (cm)<\/label>\r\n                    <input type=\"number\" id=\"sljLeft\" placeholder=\"203\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5355\u817f\u8df3 \u2014 \u53f3 (cm)<\/label>\r\n                    <input type=\"number\" id=\"sljRight\" placeholder=\"207\" step=\"1\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"result-box\" id=\"powerResult\">\r\n                <div class=\"label\">\ud83d\udccc \u7206\u53d1\u529b\u63a7\u5236\u8bc4\u4f30<\/div>\r\n                <div class=\"value\" id=\"powerStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\r\n                <div class=\"sub\" id=\"powerDetail\">\u8bf7\u8f93\u5165\u8df3\u8dc3\u6570\u636e<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(4)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(6)\">\u4e0b\u4e00\u6b65 \u2192 \u80fd\u91cf\u50a8\u5b58<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa46\uff1a\u80fd\u91cf\u50a8\u5b58 ======================== -->\r\n        <section class=\"panel\" data-panel=\"6\">\r\n            <h2 class=\"panel-title\">\u26a1 \u80fd\u91cf\u50a8\u5b58 (Energy Storing)<\/h2>\r\n            <p class=\"panel-desc\">\u53cc\u500d\u8df3\u3001\u4e09\u500d\u8df3\u30012-1-2 \u8df3\u8dc3\u3002<\/p>\r\n\r\n            <div class=\"card-grid\">\r\n                <div class=\"field-group\">\r\n                    <label>\u53cc\u500d\u7acb\u5b9a\u8df3\u8fdc (cm)<\/label>\r\n                    <input type=\"number\" id=\"dbj\" placeholder=\"498\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u4e09\u500d\u7acb\u5b9a\u8df3\u8fdc (cm)<\/label>\r\n                    <input type=\"number\" id=\"tbj\" placeholder=\"751\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u7acb\u5b9a\u8df3\u8fdc \u6709\u6446\u81c2 (cm) <span class=\"hint\">\u7528\u4e8e\u80fd\u91cf\u50a8\u5b58\u6bd4\u7387<\/span><\/label>\r\n                    <input type=\"number\" id=\"esBjArms\" placeholder=\"244\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>2-1-2 \u8df3 \u2014 \u5de6 (cm)<\/label>\r\n                    <input type=\"number\" id=\"boundLeft\" placeholder=\"271\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>2-1-2 \u8df3 \u2014 \u53f3 (cm)<\/label>\r\n                    <input type=\"number\" id=\"boundRight\" placeholder=\"274\" step=\"1\" \/>\r\n                <\/div>\r\n                <div class=\"field-group\">\r\n                    <label>\u5355\u817f\u8df3 \u2014 \u5bf9\u5e94\u4fa7 (cm) <span class=\"hint\">\u7528\u4e8e2-1-2\u6bd4\u7387<\/span><\/label>\r\n                    <input type=\"number\" id=\"esSljRef\" placeholder=\"205\" step=\"1\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"result-box\" id=\"energyResult\">\r\n                <div class=\"label\">\ud83d\udccc \u80fd\u91cf\u50a8\u5b58\u8bc4\u4f30<\/div>\r\n                <div class=\"value\" id=\"energyStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\r\n                <div class=\"sub\" id=\"energyDetail\">\u8bf7\u8f93\u5165\u8df3\u8dc3\u6570\u636e<\/div>\r\n            <\/div>\r\n\r\n            <div class=\"btn-group\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(5)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-primary\" onclick=\"goStep(7)\">\ud83d\udcca \u67e5\u770b\u62a5\u544a<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n        <!-- ======================== \u6b65\u9aa47\uff1a\u62a5\u544a ======================== -->\r\n        <section class=\"panel\" data-panel=\"7\">\r\n            <h2 class=\"panel-title\">\ud83d\udcca \u8bc4\u4f30\u62a5\u544a<\/h2>\r\n            <p class=\"panel-desc\">\u6240\u6709\u6d4b\u8bd5\u7ed3\u679c\u6c47\u603b\u3002\u70b9\u51fb\u6253\u5370\u53ef\u4fdd\u5b58\u4e3a\u7eb8\u8d28\u62a5\u544a\u3002<\/p>\r\n\r\n            <div id=\"reportContent\">\r\n                <!-- \u52a8\u6001\u6e32\u67d3 -->\r\n            <\/div>\r\n\r\n            <div class=\"btn-group no-print\">\r\n                <button class=\"btn btn-outline\" onclick=\"goStep(6)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\r\n                <button class=\"btn btn-success\" onclick=\"window.print()\">\ud83d\udda8\ufe0f \u6253\u5370\u62a5\u544a<\/button>\r\n                <button class=\"btn btn-outline\" onclick=\"resetAll()\">\ud83d\udd04 \u91cd\u7f6e\u6240\u6709\u6570\u636e<\/button>\r\n            <\/div>\r\n        <\/section>\r\n\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ ============================================================\r\n        \/\/  \u5de5\u5177\u51fd\u6570\r\n        \/\/ ============================================================\r\n        function getVal(id) { return document.getElementById(id)?.value || ''; }\r\n\r\n        function getNum(id) { const v = parseFloat(document.getElementById(id)?.value); return isNaN(v) ? null : v; }\r\n\r\n        function setVal(id, v) { const el = document.getElementById(id); if (el) el.value = v; }\r\n\r\n        function setText(id, v) { const el = document.getElementById(id); if (el) el.textContent = v; }\r\n\r\n        \/\/ \u81ea\u52a8\u540c\u6b65\u8db3\u957f\u3001\u8eab\u9ad8\u3001\u4f53\u91cd\r\n        function syncFields() {\r\n            const fl = getNum('footLength');\r\n            if (fl !== null) {\r\n                if (!document.getElementById('lmbFootLength')?.value) setVal('lmbFootLength', fl);\r\n                if (!document.getElementById('umbFootLength')?.value) setVal('umbFootLength', fl);\r\n            }\r\n            const h = getNum('height');\r\n            if (h !== null && !document.getElementById('bjHeight')?.value) setVal('bjHeight', h);\r\n            const w = getNum('weight');\r\n            if (w !== null && !document.getElementById('carryWeight')?.value) setVal('carryWeight', w);\r\n        }\r\n\r\n        \/\/ \u76d1\u542c\u4e2a\u4eba\u4fe1\u606f\u53d8\u5316\r\n        document.querySelectorAll('#footLength, #height, #weight').forEach(el => {\r\n            el.addEventListener('change', syncFields);\r\n            el.addEventListener('input', syncFields);\r\n        });\r\n\r\n        \/\/ ============================================================\r\n        \/\/  \u6b65\u9aa4\u5bfc\u822a\r\n        \/\/ ============================================================\r\n        let currentStep = 0;\r\n        const totalSteps = 8;\r\n\r\n        function goStep(n) {\r\n            if (n < 0 || n >= totalSteps) return;\r\n            \/\/ \u9690\u85cf\u6240\u6709\u9762\u677f\r\n            document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\r\n            document.querySelectorAll('.step-btn').forEach(b => b.classList.remove('active', 'done'));\r\n            \/\/ \u663e\u793a\u76ee\u6807\u9762\u677f\r\n            const panel = document.querySelector(`.panel[data-panel=\"${n}\"]`);\r\n            if (panel) panel.classList.add('active');\r\n            \/\/ \u9ad8\u4eae\u6b65\u9aa4\r\n            const btns = document.querySelectorAll('.step-btn');\r\n            btns.forEach((b, i) => {\r\n                if (i === n) b.classList.add('active');\r\n                else if (i < n) b.classList.add('done');\r\n            });\r\n            currentStep = n;\r\n            \/\/ \u89e6\u53d1\u8bc4\u4f30\u66f4\u65b0\r\n            if (n === 1) updateAnkle();\r\n            if (n === 2) updateLMB();\r\n            if (n === 3) updateUMB();\r\n            if (n === 4) updateCarry();\r\n            if (n === 5) updatePower();\r\n            if (n === 6) updateEnergy();\r\n            if (n === 7) renderReport();\r\n            window.scrollTo({ top: 0, behavior: 'smooth' });\r\n        }\r\n\r\n        \/\/ \u6b65\u9aa4\u6309\u94ae\u70b9\u51fb\r\n        document.querySelectorAll('.step-btn').forEach((btn, i) => {\r\n            btn.addEventListener('click', () => goStep(i));\r\n        });\r\n\r\n        \/\/ ============================================================\r\n        \/\/  \u5404\u6a21\u5757\u8bc4\u4f30\u51fd\u6570\r\n        \/\/ ============================================================\r\n\r\n        \/\/ ---- \u8e1d\u5173\u8282 ----\r\n        function updateAnkle() {\r\n            const l = document.getElementById('ankleLeft').value;\r\n            const r = document.getElementById('ankleRight').value;\r\n            const pL = document.getElementById('anklePainLeft').value === '\u662f';\r\n            const pR = document.getElementById('anklePainRight').value === '\u662f';\r\n\r\n            let status = '\u2705 \u901a\u8fc7';\r\n            let detail = '';\r\n            const issues = [];\r\n            if (pL) issues.push('\u5de6\u811a\u75bc\u75db');\r\n            if (pR) issues.push('\u53f3\u811a\u75bc\u75db');\r\n            if (l === 'Behind') issues.push('\u5de6\u811a\u6d3b\u52a8\u5ea6\u4e0d\u8db3 (Behind)');\r\n            if (r === 'Behind') issues.push('\u53f3\u811a\u6d3b\u52a8\u5ea6\u4e0d\u8db3 (Behind)');\r\n            if (l === 'Within') issues.push('\u5de6\u811a\u6d3b\u52a8\u5ea6\u53d7\u9650 (Within)');\r\n            if (r === 'Within') issues.push('\u53f3\u811a\u6d3b\u52a8\u5ea6\u53d7\u9650 (Within)');\r\n\r\n            if (issues.length === 0) {\r\n                detail = '\u53cc\u4fa7\u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6\u826f\u597d\uff0c\u65e0\u75bc\u75db\u3002';\r\n            } else {\r\n                status = '\u26a0\ufe0f \u9700\u5173\u6ce8';\r\n                detail = '\u5b58\u5728\u95ee\u9898\uff1a' + issues.join('\uff1b');\r\n                if (pL || pR) status = '\u274c \u75bc\u75db \u2014 \u5efa\u8bae\u8f6c\u8bca';\r\n            }\r\n            setText('ankleStatus', status);\r\n            setText('ankleDetail', detail);\r\n        }\r\n        document.querySelectorAll('#ankleLeft,#ankleRight,#anklePainLeft,#anklePainRight').forEach(el => {\r\n            el.addEventListener('change', updateAnkle);\r\n        });\r\n\r\n        \/\/ ---- \u4e0b\u80a2MCS ----\r\n        function updateLMB() {\r\n            const fl = getNum('lmbFootLength') || getNum('footLength') || 26;\r\n            const left = getNum('lmbLeft');\r\n            const right = getNum('lmbRight');\r\n\r\n            if (left === null || right === null) {\r\n                setText('lmbStatus', '\u23f3 \u7b49\u5f85\u6570\u636e');\r\n                setText('lmbDetail', '\u8bf7\u8f93\u5165\u5de6\u53f3\u811a\u524d\u4f38\u8ddd\u79bb');\r\n                return;\r\n            }\r\n            const target = fl * 2;\r\n            const asym = Math.abs(left - right);\r\n            const passL = left > target;\r\n            const passR = right > target;\r\n            const passAsym = asym < 4; \/\/ 4cm \u9608\u503c\r\n\r\n            let status = '\u2705 \u901a\u8fc7';\r\n            let detail = `\u5de6 ${left}cm, \u53f3 ${right}cm | 2\u00d7\u8db3\u957f = ${target.toFixed(1)}cm | \u4e0d\u5bf9\u79f0 ${asym.toFixed(1)}cm`;\r\n            const fails = [];\r\n            if (!passL) fails.push(`\u5de6\u811a\u672a\u8fbe\u9608\u503c (${left} < ${target.toFixed(1)})`);\r\n            if (!passR) fails.push(`\u53f3\u811a\u672a\u8fbe\u9608\u503c (${right} < ${target.toFixed(1)})`);\r\n            if (!passAsym) fails.push(`\u4e0d\u5bf9\u79f0\u8fc7\u5927 (${asym.toFixed(1)}cm \u2265 4cm)`);\r\n\r\n            if (fails.length) {\r\n                status = '\u274c \u672a\u901a\u8fc7';\r\n                detail += ' | ' + fails.join('\uff1b');\r\n            } else {\r\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 \u2713';\r\n            }\r\n            setText('lmbStatus', status);\r\n            setText('lmbDetail', detail);\r\n        }\r\n        document.querySelectorAll('#lmbLeft,#lmbRight,#lmbFootLength').forEach(el => {\r\n            el.addEventListener('input', updateLMB);\r\n            el.addEventListener('change', updateLMB);\r\n        });\r\n\r\n        \/\/ ---- \u4e0a\u80a2MCS ----\r\n        function updateUMB() {\r\n            const fl = getNum('umbFootLength') || getNum('footLength') || 26;\r\n            const left = getNum('umbLeft');\r\n            const right = getNum('umbRight');\r\n            const wL = document.getElementById('wristLeft').value === '\u901a\u8fc7';\r\n            const wR = document.getElementById('wristRight').value === '\u901a\u8fc7';\r\n            const aL = document.getElementById('addLeft').value === '\u901a\u8fc7';\r\n            const aR = document.getElementById('addRight').value === '\u901a\u8fc7';\r\n\r\n            if (left === null || right === null) {\r\n                setText('umbStatus', '\u23f3 \u7b49\u5f85\u6570\u636e');\r\n                setText('umbDetail', '\u8bf7\u8f93\u5165\u6c34\u5e73\u4f38\u8ddd\u79bb');\r\n                return;\r\n            }\r\n            const target = fl * 2;\r\n            const asym = Math.abs(left - right);\r\n            const passL = left > target;\r\n            const passR = right > target;\r\n            const passAsym = asym < 4;\r\n\r\n            let status = '\u2705 \u901a\u8fc7';\r\n            let detail =\r\n                `\u5de6 ${left}cm, \u53f3 ${right}cm | 2\u00d7\u8db3\u957f = ${target.toFixed(1)}cm | \u4e0d\u5bf9\u79f0 ${asym.toFixed(1)}cm`;\r\n            const fails = [];\r\n            if (!wL) fails.push('\u5de6\u8155\u4f38\u7b5b\u67e5\u5931\u8d25');\r\n            if (!wR) fails.push('\u53f3\u8155\u4f38\u7b5b\u67e5\u5931\u8d25');\r\n            if (!aL) fails.push('\u5de6\u6c34\u5e73\u5185\u6536\u7b5b\u67e5\u5931\u8d25');\r\n            if (!aR) fails.push('\u53f3\u6c34\u5e73\u5185\u6536\u7b5b\u67e5\u5931\u8d25');\r\n            if (!passL) fails.push(`\u5de6\u811a\u672a\u8fbe\u9608\u503c (${left} < ${target.toFixed(1)})`);\r\n            if (!passR) fails.push(`\u53f3\u811a\u672a\u8fbe\u9608\u503c (${right} < ${target.toFixed(1)})`);\r\n            if (!passAsym) fails.push(`\u4e0d\u5bf9\u79f0\u8fc7\u5927 (${asym.toFixed(1)}cm \u2265 4cm)`);\r\n\r\n            if (fails.length) {\r\n                status = '\u274c \u672a\u901a\u8fc7';\r\n                detail += ' | ' + fails.join('\uff1b');\r\n            } else {\r\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 \u2713';\r\n            }\r\n            setText('umbStatus', status);\r\n            setText('umbDetail', detail);\r\n        }\r\n        document.querySelectorAll('#umbLeft,#umbRight,#umbFootLength,#wristLeft,#wristRight,#addLeft,#addRight').forEach(el => {\r\n            el.addEventListener('input', updateUMB);\r\n            el.addEventListener('change', updateUMB);\r\n        });\r\n\r\n        \/\/ ---- \u8d1f\u91cd\u63a7\u5236 ----\r\n        function updateCarry() {\r\n            const bw = getNum('carryWeight') || getNum('weight') || 70;\r\n            const load = getNum('carryLoad');\r\n            const dist = getNum('carryDist');\r\n            const time = getNum('carryTime');\r\n\r\n            if (load === null || dist === null || time === null) {\r\n                setText('carryStatus', '\u23f3 \u7b49\u5f85\u6570\u636e');\r\n                setText('carryDetail', '\u8bf7\u8f93\u5165\u8d1f\u91cd\u3001\u8ddd\u79bb\u548c\u65f6\u95f4');\r\n                return;\r\n            }\r\n            const passTime = time > 90;\r\n            const passDist = dist > 250;\r\n            const carryLoadVal = (load * dist * time) \/ bw;\r\n            const status = (passTime && passDist) ? '\u2705 \u901a\u8fc7' : '\u274c \u672a\u901a\u8fc7';\r\n            let detail =\r\n                `\u8d1f\u91cd ${load}kg | \u8ddd\u79bb ${dist}ft | \u65f6\u95f4 ${time}s | Carry Load = ${carryLoadVal.toFixed(0)}`;\r\n            if (!passTime) detail += ' | \u65f6\u95f4\u4e0d\u8db3 (\u9700 >90s)';\r\n            if (!passDist) detail += ' | \u8ddd\u79bb\u4e0d\u8db3 (\u9700 >250ft)';\r\n            if (passTime && passDist) detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 \u2713';\r\n            setText('carryStatus', status);\r\n            setText('carryDetail', detail);\r\n        }\r\n        document.querySelectorAll('#carryWeight,#carryLoad,#carryDist,#carryTime').forEach(el => {\r\n            el.addEventListener('input', updateCarry);\r\n            el.addEventListener('change', updateCarry);\r\n        });\r\n\r\n        \/\/ ---- \u7206\u53d1\u529b ----\r\n        function updatePower() {\r\n            const bjA = getNum('bjArms');\r\n            const bjH = getNum('bjHips');\r\n            const h = getNum('bjHeight') || getNum('height') || 175;\r\n            const sljL = getNum('sljLeft');\r\n            const sljR = getNum('sljRight');\r\n\r\n            if (bjA === null || bjH === null || sljL === null || sljR === null) {\r\n                setText('powerStatus', '\u23f3 \u7b49\u5f85\u6570\u636e');\r\n                setText('powerDetail', '\u8bf7\u8f93\u5165\u6240\u6709\u8df3\u8dc3\u8ddd\u79bb');\r\n                return;\r\n            }\r\n            const ratioHeight = (bjA \/ h) * 100;\r\n            const ratioArms = (bjA \/ bjH) * 100;\r\n            const sym = (Math.min(sljL, sljR) \/ Math.max(sljL, sljR)) * 100;\r\n\r\n            let status = '\u2705 \u901a\u8fc7';\r\n            const fails = [];\r\n            if (ratioHeight < 110) fails.push(`\u7acb\u5b9a\u8df3\u8fdc\/\u8eab\u9ad8\u6bd4 ${ratioHeight.toFixed(0)}% < 110%`);\r\n            if (ratioArms < 115 || ratioArms > 125) fails.push(`\u6709\u6446\u81c2\/\u624b\u5728\u81c0\u90e8\u6bd4 ${ratioArms.toFixed(0)}% \u4e0d\u5728 115-125%`);\r\n            if (sym < 95) fails.push(`\u5355\u817f\u8df3\u5bf9\u79f0\u6027 ${sym.toFixed(0)}% < 95%`);\r\n\r\n            let detail =\r\n                `\u7acb\u5b9a\u8df3\u8fdc ${bjA}cm | \u624b\u5728\u81c0\u90e8 ${bjH}cm | \u8eab\u9ad8\u6bd4 ${ratioHeight.toFixed(0)}% | \u6446\u81c2\u6bd4 ${ratioArms.toFixed(0)}% | \u5355\u817f\u8df3\u5bf9\u79f0 ${sym.toFixed(0)}%`;\r\n            if (fails.length) {\r\n                status = '\u274c \u672a\u901a\u8fc7';\r\n                detail += ' | ' + fails.join('\uff1b');\r\n            } else {\r\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 \u2713';\r\n            }\r\n            setText('powerStatus', status);\r\n            setText('powerDetail', detail);\r\n        }\r\n        document.querySelectorAll('#bjArms,#bjHips,#bjHeight,#sljLeft,#sljRight').forEach(el => {\r\n            el.addEventListener('input', updatePower);\r\n            el.addEventListener('change', updatePower);\r\n        });\r\n\r\n        \/\/ ---- \u80fd\u91cf\u50a8\u5b58 ----\r\n        function updateEnergy() {\r\n            const dbj = getNum('dbj');\r\n            const tbj = getNum('tbj');\r\n            const bjRef = getNum('esBjArms') || getNum('bjArms');\r\n            const bL = getNum('boundLeft');\r\n            const bR = getNum('boundRight');\r\n            const sljRef = getNum('esSljRef');\r\n\r\n            if (dbj === null || tbj === null || bL === null || bR === null || sljRef === null || bjRef === null) {\r\n                setText('energyStatus', '\u23f3 \u7b49\u5f85\u6570\u636e');\r\n                setText('energyDetail', '\u8bf7\u8f93\u5165\u6240\u6709\u8df3\u8dc3\u6570\u636e');\r\n                return;\r\n            }\r\n            const esRatio = ((tbj - dbj) \/ bjRef) * 100;\r\n            const boundSym = (Math.min(bL, bR) \/ Math.max(bL, bR)) * 100;\r\n            const boundRatioL = (bL \/ sljRef) * 100;\r\n            const boundRatioR = (bR \/ sljRef) * 100;\r\n\r\n            let status = '\u2705 \u901a\u8fc7';\r\n            const fails = [];\r\n            if (esRatio < 110) fails.push(`\u80fd\u91cf\u50a8\u5b58\u6bd4 ${esRatio.toFixed(0)}% < 110%`);\r\n            if (boundSym < 95) fails.push(`2-1-2 \u5bf9\u79f0\u6027 ${boundSym.toFixed(0)}% < 95%`);\r\n            if (boundRatioL < 120 || boundRatioR < 120) fails.push(`2-1-2\/\u5355\u817f\u8df3\u6bd4 \u5de6${boundRatioL.toFixed(0)}% \u53f3${boundRatioR.toFixed(0)}% \u9700 \u2265120%`);\r\n\r\n            let detail =\r\n                `\u53cc\u500d\u8df3 ${dbj}cm | \u4e09\u500d\u8df3 ${tbj}cm | \u80fd\u91cf\u50a8\u5b58\u6bd4 ${esRatio.toFixed(0)}% | 2-1-2 \u5bf9\u79f0 ${boundSym.toFixed(0)}% | 2-1-2\/\u5355\u817f\u8df3 \u5de6${boundRatioL.toFixed(0)}% \u53f3${boundRatioR.toFixed(0)}%`;\r\n            if (fails.length) {\r\n                status = '\u274c \u672a\u901a\u8fc7';\r\n                detail += ' | ' + fails.join('\uff1b');\r\n            } else {\r\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 \u2713';\r\n            }\r\n            setText('energyStatus', status);\r\n            setText('energyDetail', detail);\r\n        }\r\n        document.querySelectorAll('#dbj,#tbj,#esBjArms,#boundLeft,#boundRight,#esSljRef').forEach(el => {\r\n            el.addEventListener('input', updateEnergy);\r\n            el.addEventListener('change', updateEnergy);\r\n        });\r\n\r\n        \/\/ ============================================================\r\n        \/\/  \u62a5\u544a\u6e32\u67d3\r\n        \/\/ ============================================================\r\n        function renderReport() {\r\n            const name = document.getElementById('name').value || '\u672a\u586b\u5199';\r\n            const age = document.getElementById('age').value || '\u2014';\r\n            const gender = document.getElementById('gender').value || '\u2014';\r\n            const height = document.getElementById('height').value || '\u2014';\r\n            const weight = document.getElementById('weight').value || '\u2014';\r\n            const foot = document.getElementById('footLength').value || '\u2014';\r\n\r\n            \/\/ \u6536\u96c6\u5404\u6a21\u5757\u72b6\u6001\r\n            const modules = [{\r\n                title: '\ud83e\uddb6 \u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6',\r\n                status: document.getElementById('ankleStatus').textContent,\r\n                detail: document.getElementById('ankleDetail').textContent,\r\n                raw: {\r\n                    left: document.getElementById('ankleLeft').value,\r\n                    right: document.getElementById('ankleRight').value,\r\n                    painL: document.getElementById('anklePainLeft').value,\r\n                    painR: document.getElementById('anklePainRight').value,\r\n                }\r\n            }, {\r\n                title: '\ud83e\uddb5 \u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236',\r\n                status: document.getElementById('lmbStatus').textContent,\r\n                detail: document.getElementById('lmbDetail').textContent,\r\n                raw: {\r\n                    left: document.getElementById('lmbLeft').value || '\u2014',\r\n                    right: document.getElementById('lmbRight').value || '\u2014',\r\n                }\r\n            }, {\r\n                title: '\ud83d\udcaa \u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236',\r\n                status: document.getElementById('umbStatus').textContent,\r\n                detail: document.getElementById('umbDetail').textContent,\r\n                raw: {\r\n                    left: document.getElementById('umbLeft').value || '\u2014',\r\n                    right: document.getElementById('umbRight').value || '\u2014',\r\n                    wristL: document.getElementById('wristLeft').value,\r\n                    wristR: document.getElementById('wristRight').value,\r\n                    addL: document.getElementById('addLeft').value,\r\n                    addR: document.getElementById('addRight').value,\r\n                }\r\n            }, {\r\n                title: '\ud83c\udfcb\ufe0f \u8d1f\u91cd\u63a7\u5236',\r\n                status: document.getElementById('carryStatus').textContent,\r\n                detail: document.getElementById('carryDetail').textContent,\r\n                raw: {\r\n                    load: document.getElementById('carryLoad').value || '\u2014',\r\n                    dist: document.getElementById('carryDist').value || '\u2014',\r\n                    time: document.getElementById('carryTime').value || '\u2014',\r\n                }\r\n            }, {\r\n                title: '\ud83d\ude80 \u7206\u53d1\u529b\u63a7\u5236',\r\n                status: document.getElementById('powerStatus').textContent,\r\n                detail: document.getElementById('powerDetail').textContent,\r\n                raw: {\r\n                    bjArms: document.getElementById('bjArms').value || '\u2014',\r\n                    bjHips: document.getElementById('bjHips').value || '\u2014',\r\n                    sljL: document.getElementById('sljLeft').value || '\u2014',\r\n                    sljR: document.getElementById('sljRight').value || '\u2014',\r\n                }\r\n            }, {\r\n                title: '\u26a1 \u80fd\u91cf\u50a8\u5b58',\r\n                status: document.getElementById('energyStatus').textContent,\r\n                detail: document.getElementById('energyDetail').textContent,\r\n                raw: {\r\n                    dbj: document.getElementById('dbj').value || '\u2014',\r\n                    tbj: document.getElementById('tbj').value || '\u2014',\r\n                    boundL: document.getElementById('boundLeft').value || '\u2014',\r\n                    boundR: document.getElementById('boundRight').value || '\u2014',\r\n                }\r\n            }];\r\n\r\n            const passCount = modules.filter(m => m.status.includes('\u2705')).length;\r\n            const total = modules.length;\r\n\r\n            let html = `\r\n            <div class=\"summary-total\">\r\n              <div>\r\n                <div class=\"big\">${passCount} \/ ${total}<\/div>\r\n                <div class=\"sub\">\u6d4b\u8bd5\u901a\u8fc7\u6570<\/div>\r\n              <\/div>\r\n              <div style=\"text-align:right;\">\r\n                <div style=\"font-size:18px;font-weight:600;\">${name}<\/div>\r\n                <div class=\"sub\">${gender} \u00b7 ${age}\u5c81 \u00b7 ${height}cm \u00b7 ${weight}kg \u00b7 \u8db3\u957f ${foot}cm<\/div>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"report-grid\" style=\"margin-top:20px;\">\r\n          `;\r\n\r\n            modules.forEach(m => {\r\n                const isPass = m.status.includes('\u2705');\r\n                const badge = isPass ? '<span class=\"status-badge pass\">\u901a\u8fc7<\/span>' :\r\n                    m.status.includes('\u23f3') ? '<span class=\"status-badge warn\">\u5f85\u6d4b<\/span>' :\r\n                    '<span class=\"status-badge fail\">\u672a\u901a\u8fc7<\/span>';\r\n                html += `\r\n              <div class=\"report-card\">\r\n                <h3>${m.title} ${badge}<\/h3>\r\n                <div class=\"row\"><span class=\"label\">\u72b6\u6001<\/span><span class=\"val\">${m.status}<\/span><\/div>\r\n                <div class=\"row\"><span class=\"label\">\u8be6\u60c5<\/span><span class=\"val\" style=\"font-weight:400;font-size:13px;\">${m.detail}<\/span><\/div>\r\n              <\/div>\r\n            `;\r\n            });\r\n\r\n            html += `<\/div>`;\r\n            document.getElementById('reportContent').innerHTML = html;\r\n        }\r\n\r\n        \/\/ ============================================================\r\n        \/\/  \u91cd\u7f6e\r\n        \/\/ ============================================================\r\n        function resetAll() {\r\n            if (!confirm('\u786e\u5b9a\u8981\u6e05\u9664\u6240\u6709\u6570\u636e\u5417\uff1f')) return;\r\n            document.querySelectorAll('input, select').forEach(el => {\r\n                if (el.tagName === 'INPUT') el.value = '';\r\n                if (el.tagName === 'SELECT') el.selectedIndex = 0;\r\n            });\r\n            \/\/ \u6062\u590d\u9ed8\u8ba4\u8db3\u957f\u7b49\r\n            setVal('ankleLeft', 'Beyond');\r\n            setVal('ankleRight', 'Beyond');\r\n            setVal('anklePainLeft', '\u5426');\r\n            setVal('anklePainRight', '\u5426');\r\n            setVal('wristLeft', '\u901a\u8fc7');\r\n            setVal('wristRight', '\u901a\u8fc7');\r\n            setVal('addLeft', '\u901a\u8fc7');\r\n            setVal('addRight', '\u901a\u8fc7');\r\n            \/\/ \u91cd\u7f6e\u7ed3\u679c\r\n            ['ankleStatus', 'lmbStatus', 'umbStatus', 'carryStatus', 'powerStatus', 'energyStatus'].forEach(id => {\r\n                setText(id, '\u23f3 \u7b49\u5f85\u6570\u636e');\r\n            });\r\n            ['ankleDetail', 'lmbDetail', 'umbDetail', 'carryDetail', 'powerDetail', 'energyDetail'].forEach(id => {\r\n                setText(id, '\u8bf7\u586b\u5199\u5b8c\u6574\u6570\u636e');\r\n            });\r\n            document.getElementById('reportContent').innerHTML = '<p style=\"color:#94a3b8;\">\u6570\u636e\u5df2\u91cd\u7f6e\uff0c\u8bf7\u586b\u5199\u6d4b\u8bd5\u6570\u636e\u540e\u67e5\u770b\u62a5\u544a\u3002<\/p>';\r\n            goStep(0);\r\n        }\r\n\r\n        \/\/ ============================================================\r\n        \/\/  \u521d\u59cb\u5316\r\n        \/\/ ============================================================\r\n        \/\/ \u8bbe\u7f6e\u9ed8\u8ba4\u503c\r\n        setVal('ankleLeft', 'Beyond');\r\n        setVal('ankleRight', 'Beyond');\r\n        setVal('anklePainLeft', '\u5426');\r\n        setVal('anklePainRight', '\u5426');\r\n        setVal('wristLeft', '\u901a\u8fc7');\r\n        setVal('wristRight', '\u901a\u8fc7');\r\n        setVal('addLeft', '\u901a\u8fc7');\r\n        setVal('addRight', '\u901a\u8fc7');\r\n        \/\/ \u540c\u6b65\u5b57\u6bb5\r\n        setTimeout(syncFields, 100);\r\n        \/\/ \u66f4\u65b0\u521d\u59cb\u72b6\u6001\r\n        updateAnkle();\r\n        updateLMB();\r\n        updateUMB();\r\n        updateCarry();\r\n        updatePower();\r\n        updateEnergy();\r\n\r\n        console.log('\u2705 FCS \u8bc4\u4f30\u7cfb\u7edf\u5df2\u52a0\u8f7d');\r\n        console.log('\ud83d\udccc \u63d0\u793a\uff1a\u586b\u5199\u4e2a\u4eba\u4fe1\u606f\u540e\uff0c\u6309\u987a\u5e8f\u5b8c\u6210\u5404\u6a21\u5757\u6d4b\u8bd5\u3002');\r\n    <\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u57fa\u7840\u80fd\u529b\u7b5b\u67e5 (FCS) \u8bc4\u4f30\u7cfb\u7edf \u26a1 \u57fa\u7840\u80fd\u529b\u7b5b\u67e5 FCS v7.4 \u57fa\u4e8e Fundamental Capa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1307,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2061","page","type-page","status-publish","hentry"],"blocksy_meta":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/2061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2061"}],"version-history":[{"count":5,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/2061\/revisions"}],"predecessor-version":[{"id":2066,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/2061\/revisions\/2066"}],"up":[{"embeddable":true,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1307"}],"wp:attachment":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}