{"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-10-28T10:54:21","modified_gmt":"2026-10-28T02:54:21","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<!-- FCS \u57fa\u7840\u80fd\u529b\u7b5b\u67e5 \u00b7 \u89c6\u89c9\u89c4\u8303\u5bf9\u9f50 PHV \u8ba1\u7b97\u5668\uff08page 2127\uff09 -->\n<style>\n  \/* ================= \u8bbe\u8ba1\u4ee4\u724c\uff08\u5bf9\u9f50 PHV \u8ba1\u7b97\u5668\uff09 ================= *\/\n  #app {\n    --ink: #0f172a;\n    --ink-2: #334155;\n    --ink-3: #475569;\n    --muted: #64748b;\n    --line: #e2e8f0;\n    --line-2: #cbd5e1;\n    --soft: #f8fafc;\n    --accent: #2563eb;\n    --accent-dark: #1d4ed8;\n    max-width: 100%;\n    margin: 0 auto;\n    background: #ffffff;\n    border: 1px solid var(--line);\n    border-radius: 14px;\n    overflow: hidden;\n    box-shadow: 0 4px 22px rgba(15, 23, 42, 0.07);\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", Roboto, sans-serif;\n    font-size: 15px;\n    line-height: 1.65;\n    color: var(--ink-2);\n    -webkit-font-smoothing: antialiased;\n  }\n  #app *, #app *::before, #app *::after { box-sizing: border-box; }\n\n  \/* ================= \u9876\u90e8\u6807\u9898\u680f ================= *\/\n  #app .fcs-header {\n    background: linear-gradient(135deg, #0f172a 0%, #1e3a8a 100%);\n    padding: 24px 28px;\n    color: #ffffff;\n  }\n  #app .fcs-header h1 {\n    margin: 0 0 6px 0 !important;\n    padding: 0 !important;\n    font-size: 21px !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.3px;\n    line-height: 1.4 !important;\n    color: #ffffff !important;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    flex-wrap: wrap;\n    text-transform: none;\n  }\n  #app .fcs-header h1 small {\n    font-size: 11.5px;\n    font-weight: 600;\n    letter-spacing: 0.6px;\n    color: #dbeafe;\n    background: rgba(255, 255, 255, 0.13);\n    border: 1px solid rgba(255, 255, 255, 0.2);\n    padding: 2px 9px;\n    border-radius: 999px;\n    line-height: 1.6;\n  }\n  #app .fcs-header p {\n    margin: 0 !important;\n    font-size: 13.5px !important;\n    color: #cbd5e1 !important;\n    line-height: 1.6;\n  }\n\n  \/* ================= \u4e3b\u4f53 ================= *\/\n  #app .fcs-body { padding: 22px 28px 28px; }\n\n  \/* ================= \u6b65\u9aa4\u5bfc\u822a ================= *\/\n  #app .steps {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin: 0 0 22px 0 !important;\n    padding: 0 0 18px 0 !important;\n    border-bottom: 1px solid var(--line) !important;\n  }\n  #app .step-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    background: var(--soft) !important;\n    border: 1.5px solid var(--line-2) !important;\n    border-radius: 8px !important;\n    padding: 7px 13px !important;\n    font-family: inherit !important;\n    font-size: 13.5px !important;\n    font-weight: 600 !important;\n    line-height: 1.25 !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    color: var(--ink-3) !important;\n    cursor: pointer;\n    white-space: nowrap;\n    transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;\n    box-shadow: none !important;\n    text-decoration: none !important;\n  }\n  #app .step-btn .n {\n    font-size: 11px;\n    font-weight: 700;\n    color: #94a3b8;\n    letter-spacing: 0.3px;\n    transition: color 0.2s ease;\n  }\n  #app .step-btn:hover {\n    background: #f1f5f9 !important;\n    border-color: #94a3b8 !important;\n    color: var(--ink) !important;\n  }\n  #app .step-btn:hover .n { color: var(--muted); }\n  #app .step-btn.active {\n    background: #eff6ff !important;\n    border-color: var(--accent) !important;\n    color: var(--accent-dark) !important;\n  }\n  #app .step-btn.active .n { color: var(--accent); }\n  #app .step-btn.done {\n    background: #ffffff !important;\n    border-color: var(--line) !important;\n    color: var(--ink-3) !important;\n  }\n  #app .step-btn.done .n { color: #16a34a; }\n\n  \/* ================= \u9762\u677f ================= *\/\n  #app .panel { display: none; }\n  #app .panel.active { display: block; animation: fcsFadeUp 0.28s ease both; }\n  @keyframes fcsFadeUp {\n    from { opacity: 0; transform: translateY(8px); }\n    to { opacity: 1; transform: translateY(0); }\n  }\n  #app .panel-title {\n    margin: 0 0 6px 0 !important;\n    padding: 0 0 0 11px !important;\n    border-left: 3px solid var(--accent);\n    font-size: 17px !important;\n    font-weight: 700 !important;\n    line-height: 1.5 !important;\n    letter-spacing: normal !important;\n    color: var(--ink) !important;\n    text-transform: none;\n  }\n  #app .panel-desc {\n    margin: 0 0 20px 0 !important;\n    font-size: 13.5px !important;\n    color: var(--muted) !important;\n    line-height: 1.65;\n  }\n\n  \/* ================= \u8868\u5355\u6805\u683c ================= *\/\n  #app .card-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px 22px;\n  }\n  #app .field-group { display: flex; flex-direction: column; min-width: 0; }\n  #app .field-group label {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 2px 7px;\n    margin: 0 0 6px 0 !important;\n    font-size: 13.5px !important;\n    font-weight: 600 !important;\n    line-height: 1.45 !important;\n    color: #334155 !important;\n  }\n  #app .field-group .hint {\n    font-size: 11.5px !important;\n    font-weight: 400 !important;\n    color: var(--muted) !important;\n  }\n  #app .field-group input,\n  #app .field-group select {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    min-height: 42px;\n    margin: 0 !important;\n    padding: 10px 12px !important;\n    font-family: inherit !important;\n    font-size: 15px !important;\n    font-weight: 400 !important;\n    line-height: 1.4 !important;\n    color: var(--ink) !important;\n    background-color: var(--soft) !important;\n    border: 1.5px solid var(--line-2) !important;\n    border-radius: 8px !important;\n    box-shadow: none !important;\n    outline: none !important;\n    transition: border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;\n  }\n  #app .field-group input:focus,\n  #app .field-group select:focus {\n    border-color: var(--accent) !important;\n    background-color: #ffffff !important;\n    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12) !important;\n  }\n  #app .field-group input::placeholder { color: #94a3b8 !important; opacity: 1; }\n  #app .field-group .value-unit {\n    margin-top: 4px;\n    font-size: 12px;\n    color: var(--muted);\n  }\n\n  \/* ================= \u7ed3\u679c\u6846 ================= *\/\n  #app .result-box {\n    margin-top: 18px !important;\n    padding: 14px 18px !important;\n    background: var(--soft) !important;\n    border: 1px solid var(--line) !important;\n    border-left: 4px solid var(--accent) !important;\n    border-radius: 10px !important;\n  }\n  #app .result-box .label {\n    font-size: 12.5px !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.2px;\n    color: var(--ink-3) !important;\n  }\n  #app .result-box .value {\n    margin-top: 3px !important;\n    font-size: 19px !important;\n    font-weight: 700 !important;\n    line-height: 1.45 !important;\n    color: var(--ink) !important;\n  }\n  #app .result-box .value.pass, #app .result-box .pass { color: #15803d !important; }\n  #app .result-box .value.fail, #app .result-box .fail { color: #b91c1c !important; }\n  #app .result-box .value.st-pass { color: #15803d !important; }\n  #app .result-box .value.st-warn { color: #b45309 !important; }\n  #app .result-box .value.st-fail { color: #b91c1c !important; }\n  #app .result-box .value.st-idle { color: var(--muted) !important; }\n  #app .result-box .sub {\n    margin-top: 6px !important;\n    font-size: 13px !important;\n    font-weight: 400 !important;\n    line-height: 1.7 !important;\n    color: var(--ink-3) !important;\n  }\n\n  \/* ================= \u6309\u94ae ================= *\/\n  #app .btn-group {\n    display: flex !important;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-top: 24px !important;\n  }\n  #app .btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    margin: 0 !important;\n    padding: 11px 22px !important;\n    font-family: inherit !important;\n    font-size: 15px !important;\n    font-weight: 600 !important;\n    line-height: 1.25 !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    border-radius: 8px !important;\n    border: 1px solid var(--line-2) !important;\n    background: #f1f5f9 !important;\n    color: var(--ink-3) !important;\n    cursor: pointer;\n    box-shadow: none !important;\n    text-decoration: none !important;\n    transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;\n  }\n  #app .btn:hover { background: #e2e8f0 !important; color: var(--ink) !important; }\n  #app .btn-primary {\n    background: var(--accent) !important;\n    border-color: var(--accent) !important;\n    color: #ffffff !important;\n  }\n  #app .btn-primary:hover { background: var(--accent-dark) !important; border-color: var(--accent-dark) !important; color: #ffffff !important; }\n  #app .btn-success {\n    background: #0f172a !important;\n    border-color: #0f172a !important;\n    color: #ffffff !important;\n  }\n  #app .btn-success:hover { background: #1e293b !important; border-color: #1e293b !important; color: #ffffff !important; }\n  #app .btn-outline {\n    background: #ffffff !important;\n    border: 1px solid var(--line-2) !important;\n    color: var(--ink-3) !important;\n  }\n  #app .btn-outline:hover { background: var(--soft) !important; border-color: #94a3b8 !important; color: var(--ink) !important; }\n\n  \/* ================= \u62a5\u544a ================= *\/\n  #app .summary-total {\n    display: flex !important;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n    padding: 18px 22px !important;\n    background: linear-gradient(135deg, #0f172a 0%, #1e3a8a 100%) !important;\n    border-radius: 10px !important;\n    color: #ffffff !important;\n  }\n  #app .summary-total .big {\n    font-size: 26px !important;\n    font-weight: 700 !important;\n    line-height: 1.2 !important;\n    color: #ffffff !important;\n  }\n  #app .summary-total .sub {\n    margin-top: 2px !important;\n    font-size: 12.5px !important;\n    color: #cbd5e1 !important;\n  }\n  #app .summary-total > div:last-child { text-align: right; }\n  #app .summary-total > div:last-child > div:not(.sub) {\n    font-size: 16px !important;\n    font-weight: 600 !important;\n    color: #ffffff !important;\n  }\n  #app .report-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n  }\n  #app .report-card {\n    padding: 16px 18px !important;\n    background: #ffffff !important;\n    border: 1px solid var(--line) !important;\n    border-radius: 10px !important;\n    min-width: 0;\n  }\n  #app .report-card h3 {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    gap: 8px;\n    margin: 0 0 10px 0 !important;\n    padding: 0 !important;\n    font-size: 15px !important;\n    font-weight: 700 !important;\n    line-height: 1.45 !important;\n    color: var(--ink) !important;\n    border: none !important;\n  }\n  #app .report-card h3 .status-badge { margin-left: auto; }\n  #app .report-card .row {\n    display: flex !important;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 14px;\n    padding: 7px 0 !important;\n    font-size: 13.5px !important;\n    border-bottom: 1px dashed #eef2f6 !important;\n  }\n  #app .report-card .row:last-child { border-bottom: none !important; padding-bottom: 0 !important; }\n  #app .report-card .row .label {\n    flex: 0 0 auto;\n    font-size: 12.5px !important;\n    font-weight: 600 !important;\n    color: var(--muted) !important;\n  }\n  #app .report-card .row .val {\n    flex: 1 1 auto;\n    min-width: 0;\n    text-align: right;\n    font-weight: 600 !important;\n    color: var(--ink) !important;\n    line-height: 1.6;\n  }\n  \/* \u8be6\u60c5\u884c\uff1a\u6574\u884c\u94fa\u5f00\uff0c\u907f\u514d\u957f\u6587\u672c\u53f3\u5bf9\u9f50\u96be\u8bfb *\/\n  #app .report-card .row.row-detail {\n    display: block !important;\n    padding: 8px 12px !important;\n    margin-top: 2px;\n    background: var(--soft) !important;\n    border: 1px solid var(--line) !important;\n    border-radius: 8px !important;\n    border-bottom: 1px solid var(--line) !important;\n  }\n  #app .report-card .row.row-detail .label {\n    display: block;\n    margin-bottom: 3px;\n    font-size: 11.5px !important;\n    letter-spacing: 0.2px;\n    color: var(--muted) !important;\n  }\n  #app .report-card .row.row-detail .val {\n    display: block;\n    text-align: left;\n    font-size: 13px !important;\n    font-weight: 400 !important;\n    line-height: 1.7 !important;\n    color: var(--ink-3) !important;\n  }\n  #app .status-badge {\n    display: inline-block;\n    padding: 2px 10px !important;\n    border-radius: 999px !important;\n    font-size: 11.5px !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.3px;\n    line-height: 1.7;\n    white-space: nowrap;\n  }\n  #app .status-badge.pass { background: #dcfce7 !important; color: #15803d !important; }\n  #app .status-badge.fail { background: #fee2e2 !important; color: #b91c1c !important; }\n  #app .status-badge.warn { background: #fef3c7 !important; color: #b45309 !important; }\n  #app .print-btn {\n    padding: 8px 20px !important;\n    font-size: 14px !important;\n    font-weight: 600 !important;\n    border-radius: 8px !important;\n    border: 1px solid rgba(255, 255, 255, 0.35) !important;\n    background: rgba(255, 255, 255, 0.14) !important;\n    color: #ffffff !important;\n    cursor: pointer;\n  }\n\n  \/* ================= \u8f85\u52a9\u7c7b ================= *\/\n  #app .mt-12 { margin-top: 12px !important; }\n  #app .mt-20 { margin-top: 20px !important; }\n  #app .flex { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; }\n  #app .gap-8 { gap: 8px; }\n  #app .text-center { text-align: center; }\n  #app .w-full { width: 100%; }\n  #app .inline-block { display: inline-block; }\n\n  \/* ================= \u54cd\u5e94\u5f0f ================= *\/\n  @media (max-width: 760px) {\n    #app .fcs-header { padding: 20px 18px; }\n    #app .fcs-body { padding: 18px 16px 22px; }\n    #app .fcs-header h1 { font-size: 19px !important; }\n    #app .card-grid,\n    #app .report-grid { grid-template-columns: 1fr; }\n    #app .summary-total { flex-direction: column; align-items: flex-start; }\n    #app .summary-total > div:last-child { text-align: left; }\n    #app .btn { padding: 10px 16px !important; font-size: 14px !important; }\n    #app .step-btn { font-size: 12.5px !important; padding: 6px 11px !important; }\n  }\n  @media (max-width: 420px) {\n    #app .step-btn .n { display: none; }\n  }\n\n  \/* ================= \u6253\u5370 ================= *\/\n  @media print {\n    #app { border: none !important; box-shadow: none !important; border-radius: 0 !important; }\n    #app .fcs-header { background: #0f172a !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n    #app .steps, #app .btn-group, #app .print-btn, #app .no-print { display: none !important; }\n    #app .panel { display: block !important; page-break-after: always; }\n    #app .panel:last-child { page-break-after: auto; }\n    #app .report-grid { page-break-inside: avoid; }\n    #app .summary-total {\n      background: #f1f5f9 !important;\n      color: var(--ink) !important;\n      -webkit-print-color-adjust: exact;\n      print-color-adjust: exact;\n    }\n    #app .summary-total .big,\n    #app .summary-total > div:last-child > div:not(.sub) { color: var(--ink) !important; }\n    #app .summary-total .sub { color: var(--muted) !important; }\n  }\n<\/style>\n<div class=\"fcs-app\" id=\"app\">\n  <div class=\"fcs-header\">\n    <h1>\u57fa\u7840\u80fd\u529b\u7b5b\u67e5 <small>FCS v7.4<\/small><\/h1>\n    <p>\u57fa\u4e8e Fundamental Capacity Screen \u6d4b\u8bd5\u624b\u518c \u00b7 8 \u4e2a\u6a21\u5757 \u00b7 \u81ea\u52a8\u5224\u5b9a\u4e0e\u62a5\u544a\u8f93\u51fa<\/p>\n  <\/div>\n  <div class=\"fcs-body\">\n  <nav class=\"steps\" id=\"stepNav\">\n        <button class=\"step-btn active\" data-step=\"0\"><span class=\"n\">01<\/span>\u4fe1\u606f<\/button>\n        <button class=\"step-btn\" data-step=\"1\"><span class=\"n\">02<\/span>\u8e1d\u5173\u8282<\/button>\n        <button class=\"step-btn\" data-step=\"2\"><span class=\"n\">03<\/span>\u4e0b\u80a2 MCS<\/button>\n        <button class=\"step-btn\" data-step=\"3\"><span class=\"n\">04<\/span>\u4e0a\u80a2 MCS<\/button>\n        <button class=\"step-btn\" data-step=\"4\"><span class=\"n\">05<\/span>\u8d1f\u91cd<\/button>\n        <button class=\"step-btn\" data-step=\"5\"><span class=\"n\">06<\/span>\u7206\u53d1\u529b<\/button>\n        <button class=\"step-btn\" data-step=\"6\"><span class=\"n\">07<\/span>\u80fd\u91cf\u50a8\u5b58<\/button>\n        <button class=\"step-btn\" data-step=\"7\"><span class=\"n\">08<\/span>\u62a5\u544a<\/button>\n  <\/nav>\n    <section class=\"panel active\" data-panel=\"0\">\n            <h2 class=\"panel-title\">\u53d7\u8bd5\u8005\u4fe1\u606f<\/h2>\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>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u59d3\u540d<\/label>\n                    <input type=\"text\" id=\"name\" placeholder=\"\u4f8b\u5982\uff1a\u5f20\u660e\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u6027\u522b<\/label>\n                    <select id=\"gender\"><option value=\"\u7537\">\u7537<\/option><option value=\"\u5973\">\u5973<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5e74\u9f84 (\u5c81)<\/label>\n                    <input type=\"number\" id=\"age\" placeholder=\"25\" min=\"10\" max=\"80\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u8eab\u9ad8 (cm)<\/label>\n                    <input type=\"number\" id=\"height\" placeholder=\"175\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u4f53\u91cd (kg)<\/label>\n                    <input type=\"number\" id=\"weight\" placeholder=\"70\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u8db3\u957f (cm) <span class=\"hint\">\u7528\u4e8e\u4e0b\u80a2\/\u4e0a\u80a2MCS\u8ba1\u7b97<\/span><\/label>\n                    <input type=\"number\" id=\"footLength\" placeholder=\"26\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\n                    <label>\u5907\u6ce8 \/ \u65e2\u5f80\u53f2<\/label>\n                    <input type=\"text\" id=\"notes\" placeholder=\"\u65e2\u5f80\u635f\u4f24\u3001\u624b\u672f\u53f2\u7b49\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-primary\" onclick=\"goStep(1)\">\u4e0b\u4e00\u6b65 \u2192 \u8e1d\u5173\u8282\u7b5b\u67e5<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"1\">\n            <h2 class=\"panel-title\">\u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6\u7b5b\u67e5<\/h2>\n            <p class=\"panel-desc\">\u6d4b\u8bd5\u8e1d\u5173\u8282\u80cc\u5c48\u6d3b\u52a8\u5ea6\uff0c\u8bb0\u5f55\u75bc\u75db\u60c5\u51b5\u3002<\/p>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u5de6\u811a <span class=\"hint\">(Beyond \/ Within \/ Behind)<\/span><\/label>\n                    <select id=\"ankleLeft\">\n                        <option value=\"Beyond\">Beyond \u2014 \u819d\u8d85\u8fc7\u5185\u8e1d<\/option>\n                        <option value=\"Within\">Within \u2014 \u819d\u5728\u5185\u8e1d\u5bbd\u5ea6\u5185<\/option>\n                        <option value=\"Behind\">Behind \u2014 \u819d\u5728\u5185\u8e1d\u540e\u65b9<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u53f3\u811a <span class=\"hint\">(Beyond \/ Within \/ Behind)<\/span><\/label>\n                    <select id=\"ankleRight\">\n                        <option value=\"Beyond\">Beyond \u2014 \u819d\u8d85\u8fc7\u5185\u8e1d<\/option>\n                        <option value=\"Within\">Within \u2014 \u819d\u5728\u5185\u8e1d\u5bbd\u5ea6\u5185<\/option>\n                        <option value=\"Behind\">Behind \u2014 \u819d\u5728\u5185\u8e1d\u540e\u65b9<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5de6\u811a\u75bc\u75db<\/label>\n                    <select id=\"anklePainLeft\"><option value=\"\u5426\">\u65e0<\/option><option value=\"\u662f\">\u6709<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u53f3\u811a\u75bc\u75db<\/label>\n                    <select id=\"anklePainRight\"><option value=\"\u5426\">\u65e0<\/option><option value=\"\u662f\">\u6709<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\n                    <label>\u75bc\u75db\u4f4d\u7f6e\uff08\u5982\u6709\uff09<\/label>\n                    <input type=\"text\" id=\"anklePainLocation\" placeholder=\"\u524d\u4fa7 \/ \u540e\u4fa7 \/ \u4e24\u4fa7\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"result-box\" id=\"ankleResult\">\n                <div class=\"label\">\u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6\u8bc4\u4f30<\/div>\n                <div class=\"value st-idle\" id=\"ankleStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\n                <div class=\"sub\" id=\"ankleDetail\">\u8bf7\u5b8c\u6210\u5de6\u53f3\u811a\u9009\u62e9<\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(0)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-primary\" onclick=\"goStep(2)\">\u4e0b\u4e00\u6b65 \u2192 \u4e0b\u80a2MCS<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"2\">\n            <h2 class=\"panel-title\">\u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236 (MCS)<\/h2>\n            <p class=\"panel-desc\">\u524d\u4f38\u6d4b\u8bd5\uff0c\u8bb0\u5f55\u5de6\u53f3\u811a\u6700\u5927\u5230\u8fbe\u8ddd\u79bb (cm)\u3002<\/p>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u5de6\u811a\u524d\u4f38\u8ddd\u79bb (cm)<\/label>\n                    <input type=\"number\" id=\"lmbLeft\" placeholder=\"68\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u53f3\u811a\u524d\u4f38\u8ddd\u79bb (cm)<\/label>\n                    <input type=\"number\" id=\"lmbRight\" placeholder=\"63\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\n                    <label>\u8db3\u957f (cm) <span class=\"hint\">\u81ea\u52a8\u8bfb\u53d6\u4e2a\u4eba\u4fe1\u606f\u4e2d\u7684\u8db3\u957f<\/span><\/label>\n                    <input type=\"number\" id=\"lmbFootLength\" step=\"0.5\" placeholder=\"26\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"result-box\" id=\"lmbResult\">\n                <div class=\"label\">\u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236\u8bc4\u4f30<\/div>\n                <div class=\"value st-idle\" id=\"lmbStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\n                <div class=\"sub\" id=\"lmbDetail\">\u8bf7\u8f93\u5165\u5de6\u53f3\u811a\u524d\u4f38\u8ddd\u79bb<\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(1)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-primary\" onclick=\"goStep(3)\">\u4e0b\u4e00\u6b65 \u2192 \u4e0a\u80a2MCS<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"3\">\n            <h2 class=\"panel-title\">\u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236 (MCS)<\/h2>\n            <p class=\"panel-desc\">\u8155\u4f38\u7b5b\u67e5\u3001\u6c34\u5e73\u5185\u6536\u7b5b\u67e5\u53ca\u6c34\u5e73\u4f38\u6d4b\u8bd5\u3002<\/p>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u8155\u4f38\u7b5b\u67e5 (\u5de6) <\/label>\n                    <select id=\"wristLeft\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u8155\u4f38\u7b5b\u67e5 (\u53f3) <\/label>\n                    <select id=\"wristRight\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u6c34\u5e73\u5185\u6536\u7b5b\u67e5 (\u5de6) <\/label>\n                    <select id=\"addLeft\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u6c34\u5e73\u5185\u6536\u7b5b\u67e5 (\u53f3) <\/label>\n                    <select id=\"addRight\"><option value=\"\u901a\u8fc7\">\u901a\u8fc7<\/option><option value=\"\u5931\u8d25\">\u5931\u8d25<\/option><\/select>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u6c34\u5e73\u4f38\u8ddd\u79bb \u2014 \u5de6 (cm)<\/label>\n                    <input type=\"number\" id=\"umbLeft\" placeholder=\"68\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u6c34\u5e73\u4f38\u8ddd\u79bb \u2014 \u53f3 (cm)<\/label>\n                    <input type=\"number\" id=\"umbRight\" placeholder=\"63\" step=\"0.5\" \/>\n                <\/div>\n                <div class=\"field-group\" style=\"grid-column:1\/-1;\">\n                    <label>\u8db3\u957f (cm) <span class=\"hint\">\u7528\u4e8e\u8ba1\u7b97 2\u00d7\u8db3\u957f \u9608\u503c<\/span><\/label>\n                    <input type=\"number\" id=\"umbFootLength\" step=\"0.5\" placeholder=\"26\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"result-box\" id=\"umbResult\">\n                <div class=\"label\">\u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236\u8bc4\u4f30<\/div>\n                <div class=\"value st-idle\" id=\"umbStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\n                <div class=\"sub\" id=\"umbDetail\">\u8bf7\u8f93\u5165\u6c34\u5e73\u4f38\u8ddd\u79bb<\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(2)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-primary\" onclick=\"goStep(4)\">\u4e0b\u4e00\u6b65 \u2192 \u8d1f\u91cd\u63a7\u5236<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"4\">\n            <h2 class=\"panel-title\">\u8d1f\u91cd\u63a7\u5236 (Carry Screen)<\/h2>\n            <p class=\"panel-desc\">75% \u4f53\u91cd\u8d1f\u91cd\u884c\u8d70\uff0c\u8bb0\u5f55\u8ddd\u79bb\u548c\u65f6\u95f4\u3002<\/p>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u4f53\u91cd (kg) <span class=\"hint\">\u81ea\u52a8\u8bfb\u53d6<\/span><\/label>\n                    <input type=\"number\" id=\"carryWeight\" step=\"0.5\" placeholder=\"70\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u8d1f\u91cd\u91cd\u91cf (kg) <span class=\"hint\">\u5efa\u8bae 75% \u4f53\u91cd<\/span><\/label>\n                    <input type=\"number\" id=\"carryLoad\" step=\"0.5\" placeholder=\"52.5\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5b8c\u6210\u8ddd\u79bb (\u82f1\u5c3a)<\/label>\n                    <input type=\"number\" id=\"carryDist\" placeholder=\"280\" step=\"5\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5b8c\u6210\u65f6\u95f4 (\u79d2)<\/label>\n                    <input type=\"number\" id=\"carryTime\" placeholder=\"85\" step=\"1\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"result-box\" id=\"carryResult\">\n                <div class=\"label\">\u8d1f\u91cd\u63a7\u5236\u8bc4\u4f30<\/div>\n                <div class=\"value st-idle\" id=\"carryStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\n                <div class=\"sub\" id=\"carryDetail\">\u8bf7\u8f93\u5165\u8d1f\u91cd\u6570\u636e<\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(3)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-primary\" onclick=\"goStep(5)\">\u4e0b\u4e00\u6b65 \u2192 \u7206\u53d1\u529b<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"5\">\n            <h2 class=\"panel-title\">\u7206\u53d1\u529b\u63a7\u5236 (Power)<\/h2>\n            <p class=\"panel-desc\">\u7acb\u5b9a\u8df3\u8fdc\uff08\u6709\u6446\u81c2\/\u624b\u5728\u81c0\u90e8\uff09\u53ca\u5355\u817f\u8df3\u3002<\/p>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u7acb\u5b9a\u8df3\u8fdc \u6709\u6446\u81c2 (cm)<\/label>\n                    <input type=\"number\" id=\"bjArms\" placeholder=\"244\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u7acb\u5b9a\u8df3\u8fdc \u624b\u5728\u81c0\u90e8 (cm)<\/label>\n                    <input type=\"number\" id=\"bjHips\" placeholder=\"211\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u8eab\u9ad8 (cm) <span class=\"hint\">\u81ea\u52a8\u8bfb\u53d6<\/span><\/label>\n                    <input type=\"number\" id=\"bjHeight\" step=\"0.5\" placeholder=\"175\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5355\u817f\u8df3 \u2014 \u5de6 (cm)<\/label>\n                    <input type=\"number\" id=\"sljLeft\" placeholder=\"203\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5355\u817f\u8df3 \u2014 \u53f3 (cm)<\/label>\n                    <input type=\"number\" id=\"sljRight\" placeholder=\"207\" step=\"1\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"result-box\" id=\"powerResult\">\n                <div class=\"label\">\u7206\u53d1\u529b\u63a7\u5236\u8bc4\u4f30<\/div>\n                <div class=\"value st-idle\" id=\"powerStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\n                <div class=\"sub\" id=\"powerDetail\">\u8bf7\u8f93\u5165\u8df3\u8dc3\u6570\u636e<\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(4)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-primary\" onclick=\"goStep(6)\">\u4e0b\u4e00\u6b65 \u2192 \u80fd\u91cf\u50a8\u5b58<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"6\">\n            <h2 class=\"panel-title\">\u80fd\u91cf\u50a8\u5b58 (Energy Storing)<\/h2>\n            <p class=\"panel-desc\">\u53cc\u500d\u8df3\u3001\u4e09\u500d\u8df3\u30012-1-2 \u8df3\u8dc3\u3002<\/p>\n            <div class=\"card-grid\">\n                <div class=\"field-group\">\n                    <label>\u53cc\u500d\u7acb\u5b9a\u8df3\u8fdc (cm)<\/label>\n                    <input type=\"number\" id=\"dbj\" placeholder=\"498\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u4e09\u500d\u7acb\u5b9a\u8df3\u8fdc (cm)<\/label>\n                    <input type=\"number\" id=\"tbj\" placeholder=\"751\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u7acb\u5b9a\u8df3\u8fdc \u6709\u6446\u81c2 (cm) <span class=\"hint\">\u7528\u4e8e\u80fd\u91cf\u50a8\u5b58\u6bd4\u7387<\/span><\/label>\n                    <input type=\"number\" id=\"esBjArms\" placeholder=\"244\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>2-1-2 \u8df3 \u2014 \u5de6 (cm)<\/label>\n                    <input type=\"number\" id=\"boundLeft\" placeholder=\"271\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>2-1-2 \u8df3 \u2014 \u53f3 (cm)<\/label>\n                    <input type=\"number\" id=\"boundRight\" placeholder=\"274\" step=\"1\" \/>\n                <\/div>\n                <div class=\"field-group\">\n                    <label>\u5355\u817f\u8df3 \u2014 \u5bf9\u5e94\u4fa7 (cm) <span class=\"hint\">\u7528\u4e8e2-1-2\u6bd4\u7387<\/span><\/label>\n                    <input type=\"number\" id=\"esSljRef\" placeholder=\"205\" step=\"1\" \/>\n                <\/div>\n            <\/div>\n            <div class=\"result-box\" id=\"energyResult\">\n                <div class=\"label\">\u80fd\u91cf\u50a8\u5b58\u8bc4\u4f30<\/div>\n                <div class=\"value st-idle\" id=\"energyStatus\">\u7b49\u5f85\u8bc4\u4f30<\/div>\n                <div class=\"sub\" id=\"energyDetail\">\u8bf7\u8f93\u5165\u8df3\u8dc3\u6570\u636e<\/div>\n            <\/div>\n            <div class=\"btn-group\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(5)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-primary\" onclick=\"goStep(7)\">\u67e5\u770b\u62a5\u544a<\/button>\n            <\/div>\n        <\/section>\n    <section class=\"panel\" data-panel=\"7\">\n            <h2 class=\"panel-title\">\u8bc4\u4f30\u62a5\u544a<\/h2>\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>\n            <div id=\"reportContent\">\n                <!-- \u52a8\u6001\u6e32\u67d3 -->\n            <\/div>\n            <div class=\"btn-group no-print\">\n                <button class=\"btn btn-outline\" onclick=\"goStep(6)\">\u2190 \u4e0a\u4e00\u6b65<\/button>\n                <button class=\"btn btn-success\" onclick=\"window.print()\">\u6253\u5370\u62a5\u544a<\/button>\n                <button class=\"btn btn-outline\" onclick=\"resetAll()\">\u91cd\u7f6e\u6240\u6709\u6570\u636e<\/button>\n            <\/div>\n        <\/section>\n  <\/div><!-- \/fcs-body -->\n<\/div><!-- \/#app -->\n<script>\n        \/\/ ============================================================\n        \/\/  \u5de5\u5177\u51fd\u6570\n        \/\/ ============================================================\n        function getVal(id) { return document.getElementById(id)?.value || ''; }\n        function getNum(id) { const v = parseFloat(document.getElementById(id)?.value); return isNaN(v) ? null : v; }\n        function setVal(id, v) { const el = document.getElementById(id); if (el) el.value = v; }\n        function setText(id, v) {\n            const el = document.getElementById(id);\n            if (!el) return;\n            el.textContent = v;\n            if (\/Status$\/.test(id)) {\n                el.classList.remove('st-pass', 'st-warn', 'st-fail', 'st-idle');\n                const s = String(v).trim();\n                el.classList.add(s === '\u901a\u8fc7' ? 'st-pass'\n                    : s === '\u9700\u5173\u6ce8' ? 'st-warn'\n                    : (s === '\u672a\u901a\u8fc7' || s.indexOf('\u75bc\u75db') > -1) ? 'st-fail' : 'st-idle');\n            }\n        }\n        \/\/ \u81ea\u52a8\u540c\u6b65\u8db3\u957f\u3001\u8eab\u9ad8\u3001\u4f53\u91cd\n        function syncFields() {\n            const fl = getNum('footLength');\n            if (fl !== null) {\n                if (!document.getElementById('lmbFootLength')?.value) setVal('lmbFootLength', fl);\n                if (!document.getElementById('umbFootLength')?.value) setVal('umbFootLength', fl);\n            }\n            const h = getNum('height');\n            if (h !== null && !document.getElementById('bjHeight')?.value) setVal('bjHeight', h);\n            const w = getNum('weight');\n            if (w !== null && !document.getElementById('carryWeight')?.value) setVal('carryWeight', w);\n        }\n        \/\/ \u76d1\u542c\u4e2a\u4eba\u4fe1\u606f\u53d8\u5316\n        document.querySelectorAll('#footLength, #height, #weight').forEach(el => {\n            el.addEventListener('change', syncFields);\n            el.addEventListener('input', syncFields);\n        });\n        \/\/ ============================================================\n        \/\/  \u6b65\u9aa4\u5bfc\u822a\n        \/\/ ============================================================\n        let currentStep = 0;\n        const totalSteps = 8;\n        function goStep(n) {\n            if (n < 0 || n >= totalSteps) return;\n            \/\/ \u9690\u85cf\u6240\u6709\u9762\u677f\n            document.querySelectorAll('.panel').forEach(p => p.classList.remove('active'));\n            document.querySelectorAll('.step-btn').forEach(b => b.classList.remove('active', 'done'));\n            \/\/ \u663e\u793a\u76ee\u6807\u9762\u677f\n            const panel = document.querySelector(`.panel[data-panel=\"${n}\"]`);\n            if (panel) panel.classList.add('active');\n            \/\/ \u9ad8\u4eae\u6b65\u9aa4\n            const btns = document.querySelectorAll('.step-btn');\n            btns.forEach((b, i) => {\n                if (i === n) b.classList.add('active');\n                else if (i < n) b.classList.add('done');\n            });\n            currentStep = n;\n            \/\/ \u89e6\u53d1\u8bc4\u4f30\u66f4\u65b0\n            if (n === 1) updateAnkle();\n            if (n === 2) updateLMB();\n            if (n === 3) updateUMB();\n            if (n === 4) updateCarry();\n            if (n === 5) updatePower();\n            if (n === 6) updateEnergy();\n            if (n === 7) renderReport();\n            window.scrollTo({ top: 0, behavior: 'smooth' });\n        }\n        \/\/ \u6b65\u9aa4\u6309\u94ae\u70b9\u51fb\n        document.querySelectorAll('.step-btn').forEach((btn, i) => {\n            btn.addEventListener('click', () => goStep(i));\n        });\n        \/\/ ============================================================\n        \/\/  \u5404\u6a21\u5757\u8bc4\u4f30\u51fd\u6570\n        \/\/ ============================================================\n        \/\/ ---- \u8e1d\u5173\u8282 ----\n        function updateAnkle() {\n            const l = document.getElementById('ankleLeft').value;\n            const r = document.getElementById('ankleRight').value;\n            const pL = document.getElementById('anklePainLeft').value === '\u662f';\n            const pR = document.getElementById('anklePainRight').value === '\u662f';\n            let status = '\u901a\u8fc7';\n            let detail = '';\n            const issues = [];\n            if (pL) issues.push('\u5de6\u811a\u75bc\u75db');\n            if (pR) issues.push('\u53f3\u811a\u75bc\u75db');\n            if (l === 'Behind') issues.push('\u5de6\u811a\u6d3b\u52a8\u5ea6\u4e0d\u8db3 (Behind)');\n            if (r === 'Behind') issues.push('\u53f3\u811a\u6d3b\u52a8\u5ea6\u4e0d\u8db3 (Behind)');\n            if (l === 'Within') issues.push('\u5de6\u811a\u6d3b\u52a8\u5ea6\u53d7\u9650 (Within)');\n            if (r === 'Within') issues.push('\u53f3\u811a\u6d3b\u52a8\u5ea6\u53d7\u9650 (Within)');\n            if (issues.length === 0) {\n                detail = '\u53cc\u4fa7\u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6\u826f\u597d\uff0c\u65e0\u75bc\u75db\u3002';\n            } else {\n                status = '\u9700\u5173\u6ce8';\n                detail = '\u5b58\u5728\u95ee\u9898\uff1a' + issues.join('\uff1b');\n                if (pL || pR) status = '\u75bc\u75db \u2014 \u5efa\u8bae\u8f6c\u8bca';\n            }\n            setText('ankleStatus', status);\n            setText('ankleDetail', detail);\n        }\n        document.querySelectorAll('#ankleLeft,#ankleRight,#anklePainLeft,#anklePainRight').forEach(el => {\n            el.addEventListener('change', updateAnkle);\n        });\n        \/\/ ---- \u4e0b\u80a2MCS ----\n        function updateLMB() {\n            const fl = getNum('lmbFootLength') || getNum('footLength') || 26;\n            const left = getNum('lmbLeft');\n            const right = getNum('lmbRight');\n            if (left === null || right === null) {\n                setText('lmbStatus', '\u7b49\u5f85\u6570\u636e');\n                setText('lmbDetail', '\u8bf7\u8f93\u5165\u5de6\u53f3\u811a\u524d\u4f38\u8ddd\u79bb');\n                return;\n            }\n            const target = fl * 2;\n            const asym = Math.abs(left - right);\n            const passL = left > target;\n            const passR = right > target;\n            const passAsym = asym < 4; \/\/ 4cm \u9608\u503c\n            let status = '\u901a\u8fc7';\n            let detail = `\u5de6 ${left}cm, \u53f3 ${right}cm | 2\u00d7\u8db3\u957f = ${target.toFixed(1)}cm | \u4e0d\u5bf9\u79f0 ${asym.toFixed(1)}cm`;\n            const fails = [];\n            if (!passL) fails.push(`\u5de6\u811a\u672a\u8fbe\u9608\u503c (${left} < ${target.toFixed(1)})`);\n            if (!passR) fails.push(`\u53f3\u811a\u672a\u8fbe\u9608\u503c (${right} < ${target.toFixed(1)})`);\n            if (!passAsym) fails.push(`\u4e0d\u5bf9\u79f0\u8fc7\u5927 (${asym.toFixed(1)}cm \u2265 4cm)`);\n            if (fails.length) {\n                status = '\u672a\u901a\u8fc7';\n                detail += ' | ' + fails.join('\uff1b');\n            } else {\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 ';\n            }\n            setText('lmbStatus', status);\n            setText('lmbDetail', detail);\n        }\n        document.querySelectorAll('#lmbLeft,#lmbRight,#lmbFootLength').forEach(el => {\n            el.addEventListener('input', updateLMB);\n            el.addEventListener('change', updateLMB);\n        });\n        \/\/ ---- \u4e0a\u80a2MCS ----\n        function updateUMB() {\n            const fl = getNum('umbFootLength') || getNum('footLength') || 26;\n            const left = getNum('umbLeft');\n            const right = getNum('umbRight');\n            const wL = document.getElementById('wristLeft').value === '\u901a\u8fc7';\n            const wR = document.getElementById('wristRight').value === '\u901a\u8fc7';\n            const aL = document.getElementById('addLeft').value === '\u901a\u8fc7';\n            const aR = document.getElementById('addRight').value === '\u901a\u8fc7';\n            if (left === null || right === null) {\n                setText('umbStatus', '\u7b49\u5f85\u6570\u636e');\n                setText('umbDetail', '\u8bf7\u8f93\u5165\u6c34\u5e73\u4f38\u8ddd\u79bb');\n                return;\n            }\n            const target = fl * 2;\n            const asym = Math.abs(left - right);\n            const passL = left > target;\n            const passR = right > target;\n            const passAsym = asym < 4;\n            let status = '\u901a\u8fc7';\n            let detail =\n                `\u5de6 ${left}cm, \u53f3 ${right}cm | 2\u00d7\u8db3\u957f = ${target.toFixed(1)}cm | \u4e0d\u5bf9\u79f0 ${asym.toFixed(1)}cm`;\n            const fails = [];\n            if (!wL) fails.push('\u5de6\u8155\u4f38\u7b5b\u67e5\u5931\u8d25');\n            if (!wR) fails.push('\u53f3\u8155\u4f38\u7b5b\u67e5\u5931\u8d25');\n            if (!aL) fails.push('\u5de6\u6c34\u5e73\u5185\u6536\u7b5b\u67e5\u5931\u8d25');\n            if (!aR) fails.push('\u53f3\u6c34\u5e73\u5185\u6536\u7b5b\u67e5\u5931\u8d25');\n            if (!passL) fails.push(`\u5de6\u811a\u672a\u8fbe\u9608\u503c (${left} < ${target.toFixed(1)})`);\n            if (!passR) fails.push(`\u53f3\u811a\u672a\u8fbe\u9608\u503c (${right} < ${target.toFixed(1)})`);\n            if (!passAsym) fails.push(`\u4e0d\u5bf9\u79f0\u8fc7\u5927 (${asym.toFixed(1)}cm \u2265 4cm)`);\n            if (fails.length) {\n                status = '\u672a\u901a\u8fc7';\n                detail += ' | ' + fails.join('\uff1b');\n            } else {\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 ';\n            }\n            setText('umbStatus', status);\n            setText('umbDetail', detail);\n        }\n        document.querySelectorAll('#umbLeft,#umbRight,#umbFootLength,#wristLeft,#wristRight,#addLeft,#addRight').forEach(el => {\n            el.addEventListener('input', updateUMB);\n            el.addEventListener('change', updateUMB);\n        });\n        \/\/ ---- \u8d1f\u91cd\u63a7\u5236 ----\n        function updateCarry() {\n            const bw = getNum('carryWeight') || getNum('weight') || 70;\n            const load = getNum('carryLoad');\n            const dist = getNum('carryDist');\n            const time = getNum('carryTime');\n            if (load === null || dist === null || time === null) {\n                setText('carryStatus', '\u7b49\u5f85\u6570\u636e');\n                setText('carryDetail', '\u8bf7\u8f93\u5165\u8d1f\u91cd\u3001\u8ddd\u79bb\u548c\u65f6\u95f4');\n                return;\n            }\n            const passTime = time > 90;\n            const passDist = dist > 250;\n            const carryLoadVal = (load * dist * time) \/ bw;\n            const status = (passTime && passDist) ? '\u901a\u8fc7' : '\u672a\u901a\u8fc7';\n            let detail =\n                `\u8d1f\u91cd ${load}kg | \u8ddd\u79bb ${dist}ft | \u65f6\u95f4 ${time}s | Carry Load = ${carryLoadVal.toFixed(0)}`;\n            if (!passTime) detail += ' | \u65f6\u95f4\u4e0d\u8db3 (\u9700 >90s)';\n            if (!passDist) detail += ' | \u8ddd\u79bb\u4e0d\u8db3 (\u9700 >250ft)';\n            if (passTime && passDist) detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 ';\n            setText('carryStatus', status);\n            setText('carryDetail', detail);\n        }\n        document.querySelectorAll('#carryWeight,#carryLoad,#carryDist,#carryTime').forEach(el => {\n            el.addEventListener('input', updateCarry);\n            el.addEventListener('change', updateCarry);\n        });\n        \/\/ ---- \u7206\u53d1\u529b ----\n        function updatePower() {\n            const bjA = getNum('bjArms');\n            const bjH = getNum('bjHips');\n            const h = getNum('bjHeight') || getNum('height') || 175;\n            const sljL = getNum('sljLeft');\n            const sljR = getNum('sljRight');\n            if (bjA === null || bjH === null || sljL === null || sljR === null) {\n                setText('powerStatus', '\u7b49\u5f85\u6570\u636e');\n                setText('powerDetail', '\u8bf7\u8f93\u5165\u6240\u6709\u8df3\u8dc3\u8ddd\u79bb');\n                return;\n            }\n            const ratioHeight = (bjA \/ h) * 100;\n            const ratioArms = (bjA \/ bjH) * 100;\n            const sym = (Math.min(sljL, sljR) \/ Math.max(sljL, sljR)) * 100;\n            let status = '\u901a\u8fc7';\n            const fails = [];\n            if (ratioHeight < 110) fails.push(`\u7acb\u5b9a\u8df3\u8fdc\/\u8eab\u9ad8\u6bd4 ${ratioHeight.toFixed(0)}% < 110%`);\n            if (ratioArms < 115 || ratioArms > 125) fails.push(`\u6709\u6446\u81c2\/\u624b\u5728\u81c0\u90e8\u6bd4 ${ratioArms.toFixed(0)}% \u4e0d\u5728 115-125%`);\n            if (sym < 95) fails.push(`\u5355\u817f\u8df3\u5bf9\u79f0\u6027 ${sym.toFixed(0)}% < 95%`);\n            let detail =\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)}%`;\n            if (fails.length) {\n                status = '\u672a\u901a\u8fc7';\n                detail += ' | ' + fails.join('\uff1b');\n            } else {\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 ';\n            }\n            setText('powerStatus', status);\n            setText('powerDetail', detail);\n        }\n        document.querySelectorAll('#bjArms,#bjHips,#bjHeight,#sljLeft,#sljRight').forEach(el => {\n            el.addEventListener('input', updatePower);\n            el.addEventListener('change', updatePower);\n        });\n        \/\/ ---- \u80fd\u91cf\u50a8\u5b58 ----\n        function updateEnergy() {\n            const dbj = getNum('dbj');\n            const tbj = getNum('tbj');\n            const bjRef = getNum('esBjArms') || getNum('bjArms');\n            const bL = getNum('boundLeft');\n            const bR = getNum('boundRight');\n            const sljRef = getNum('esSljRef');\n            if (dbj === null || tbj === null || bL === null || bR === null || sljRef === null || bjRef === null) {\n                setText('energyStatus', '\u7b49\u5f85\u6570\u636e');\n                setText('energyDetail', '\u8bf7\u8f93\u5165\u6240\u6709\u8df3\u8dc3\u6570\u636e');\n                return;\n            }\n            const esRatio = ((tbj - dbj) \/ bjRef) * 100;\n            const boundSym = (Math.min(bL, bR) \/ Math.max(bL, bR)) * 100;\n            const boundRatioL = (bL \/ sljRef) * 100;\n            const boundRatioR = (bR \/ sljRef) * 100;\n            let status = '\u901a\u8fc7';\n            const fails = [];\n            if (esRatio < 110) fails.push(`\u80fd\u91cf\u50a8\u5b58\u6bd4 ${esRatio.toFixed(0)}% < 110%`);\n            if (boundSym < 95) fails.push(`2-1-2 \u5bf9\u79f0\u6027 ${boundSym.toFixed(0)}% < 95%`);\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%`);\n            let detail =\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)}%`;\n            if (fails.length) {\n                status = '\u672a\u901a\u8fc7';\n                detail += ' | ' + fails.join('\uff1b');\n            } else {\n                detail += ' | \u6240\u6709\u6807\u51c6\u901a\u8fc7 ';\n            }\n            setText('energyStatus', status);\n            setText('energyDetail', detail);\n        }\n        document.querySelectorAll('#dbj,#tbj,#esBjArms,#boundLeft,#boundRight,#esSljRef').forEach(el => {\n            el.addEventListener('input', updateEnergy);\n            el.addEventListener('change', updateEnergy);\n        });\n        \/\/ ============================================================\n        \/\/  \u62a5\u544a\u6e32\u67d3\n        \/\/ ============================================================\n        function renderReport() {\n            const name = document.getElementById('name').value || '\u672a\u586b\u5199';\n            const age = document.getElementById('age').value || '\u2014';\n            const gender = document.getElementById('gender').value || '\u2014';\n            const height = document.getElementById('height').value || '\u2014';\n            const weight = document.getElementById('weight').value || '\u2014';\n            const foot = document.getElementById('footLength').value || '\u2014';\n            \/\/ \u6536\u96c6\u5404\u6a21\u5757\u72b6\u6001\n            const modules = [{\n                title: ' \u8e1d\u5173\u8282\u6d3b\u52a8\u5ea6',\n                status: document.getElementById('ankleStatus').textContent,\n                detail: document.getElementById('ankleDetail').textContent,\n                raw: {\n                    left: document.getElementById('ankleLeft').value,\n                    right: document.getElementById('ankleRight').value,\n                    painL: document.getElementById('anklePainLeft').value,\n                    painR: document.getElementById('anklePainRight').value,\n                }\n            }, {\n                title: ' \u4e0b\u80a2\u8fd0\u52a8\u63a7\u5236',\n                status: document.getElementById('lmbStatus').textContent,\n                detail: document.getElementById('lmbDetail').textContent,\n                raw: {\n                    left: document.getElementById('lmbLeft').value || '\u2014',\n                    right: document.getElementById('lmbRight').value || '\u2014',\n                }\n            }, {\n                title: ' \u4e0a\u80a2\u8fd0\u52a8\u63a7\u5236',\n                status: document.getElementById('umbStatus').textContent,\n                detail: document.getElementById('umbDetail').textContent,\n                raw: {\n                    left: document.getElementById('umbLeft').value || '\u2014',\n                    right: document.getElementById('umbRight').value || '\u2014',\n                    wristL: document.getElementById('wristLeft').value,\n                    wristR: document.getElementById('wristRight').value,\n                    addL: document.getElementById('addLeft').value,\n                    addR: document.getElementById('addRight').value,\n                }\n            }, {\n                title: ' \u8d1f\u91cd\u63a7\u5236',\n                status: document.getElementById('carryStatus').textContent,\n                detail: document.getElementById('carryDetail').textContent,\n                raw: {\n                    load: document.getElementById('carryLoad').value || '\u2014',\n                    dist: document.getElementById('carryDist').value || '\u2014',\n                    time: document.getElementById('carryTime').value || '\u2014',\n                }\n            }, {\n                title: ' \u7206\u53d1\u529b\u63a7\u5236',\n                status: document.getElementById('powerStatus').textContent,\n                detail: document.getElementById('powerDetail').textContent,\n                raw: {\n                    bjArms: document.getElementById('bjArms').value || '\u2014',\n                    bjHips: document.getElementById('bjHips').value || '\u2014',\n                    sljL: document.getElementById('sljLeft').value || '\u2014',\n                    sljR: document.getElementById('sljRight').value || '\u2014',\n                }\n            }, {\n                title: ' \u80fd\u91cf\u50a8\u5b58',\n                status: document.getElementById('energyStatus').textContent,\n                detail: document.getElementById('energyDetail').textContent,\n                raw: {\n                    dbj: document.getElementById('dbj').value || '\u2014',\n                    tbj: document.getElementById('tbj').value || '\u2014',\n                    boundL: document.getElementById('boundLeft').value || '\u2014',\n                    boundR: document.getElementById('boundRight').value || '\u2014',\n                }\n            }];\n            const passCount = modules.filter(m => m.status.trim() === '\u901a\u8fc7').length;\n            const total = modules.length;\n            let html = `\n            <div class=\"summary-total\">\n              <div>\n                <div class=\"big\">${passCount} \/ ${total}<\/div>\n                <div class=\"sub\">\u6d4b\u8bd5\u901a\u8fc7\u6570<\/div>\n              <\/div>\n              <div style=\"text-align:right;\">\n                <div style=\"font-size:18px;font-weight:600;\">${name}<\/div>\n                <div class=\"sub\">${gender} \u00b7 ${age}\u5c81 \u00b7 ${height}cm \u00b7 ${weight}kg \u00b7 \u8db3\u957f ${foot}cm<\/div>\n              <\/div>\n            <\/div>\n            <div class=\"report-grid\" style=\"margin-top:20px;\">\n          `;\n            modules.forEach(m => {\n                const st = m.status.trim();\n                const isPass = st === '\u901a\u8fc7';\n                const badge = isPass ? '<span class=\"status-badge pass\">\u901a\u8fc7<\/span>' :\n                    st === '\u9700\u5173\u6ce8' ? '<span class=\"status-badge warn\">\u9700\u5173\u6ce8<\/span>' :\n                    (!st || st.includes('\u7b49\u5f85') || st.includes('\u8bf7\u586b\u5199')) ? '<span class=\"status-badge warn\">\u5f85\u6d4b<\/span>' :\n                    '<span class=\"status-badge fail\">\u672a\u901a\u8fc7<\/span>';\n                html += `\n              <div class=\"report-card\">\n                <h3>${m.title} ${badge}<\/h3>\n                <div class=\"row row-detail\"><span class=\"label\">\u8be6\u60c5<\/span><span class=\"val\">${m.detail}<\/span><\/div>\n              <\/div>\n            `;\n            });\n            html += `<\/div>`;\n            document.getElementById('reportContent').innerHTML = html;\n        }\n        \/\/ ============================================================\n        \/\/  \u91cd\u7f6e\n        \/\/ ============================================================\n        function resetAll() {\n            if (!confirm('\u786e\u5b9a\u8981\u6e05\u9664\u6240\u6709\u6570\u636e\u5417\uff1f')) return;\n            document.querySelectorAll('#app input, #app select').forEach(el => {\n                if (el.tagName === 'INPUT') el.value = '';\n                if (el.tagName === 'SELECT') el.selectedIndex = 0;\n            });\n            \/\/ \u6062\u590d\u9ed8\u8ba4\u8db3\u957f\u7b49\n            setVal('ankleLeft', 'Beyond');\n            setVal('ankleRight', 'Beyond');\n            setVal('anklePainLeft', '\u5426');\n            setVal('anklePainRight', '\u5426');\n            setVal('wristLeft', '\u901a\u8fc7');\n            setVal('wristRight', '\u901a\u8fc7');\n            setVal('addLeft', '\u901a\u8fc7');\n            setVal('addRight', '\u901a\u8fc7');\n            \/\/ \u91cd\u7f6e\u7ed3\u679c\n            ['ankleStatus', 'lmbStatus', 'umbStatus', 'carryStatus', 'powerStatus', 'energyStatus'].forEach(id => {\n                setText(id, '\u7b49\u5f85\u6570\u636e');\n            });\n            ['ankleDetail', 'lmbDetail', 'umbDetail', 'carryDetail', 'powerDetail', 'energyDetail'].forEach(id => {\n                setText(id, '\u8bf7\u586b\u5199\u5b8c\u6574\u6570\u636e');\n            });\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>';\n            goStep(0);\n        }\n        \/\/ ============================================================\n        \/\/  \u521d\u59cb\u5316\n        \/\/ ============================================================\n        \/\/ \u8bbe\u7f6e\u9ed8\u8ba4\u503c\n        setVal('ankleLeft', 'Beyond');\n        setVal('ankleRight', 'Beyond');\n        setVal('anklePainLeft', '\u5426');\n        setVal('anklePainRight', '\u5426');\n        setVal('wristLeft', '\u901a\u8fc7');\n        setVal('wristRight', '\u901a\u8fc7');\n        setVal('addLeft', '\u901a\u8fc7');\n        setVal('addRight', '\u901a\u8fc7');\n        \/\/ \u540c\u6b65\u5b57\u6bb5\n        setTimeout(syncFields, 100);\n        \/\/ \u66f4\u65b0\u521d\u59cb\u72b6\u6001\n        updateAnkle();\n        updateLMB();\n        updateUMB();\n        updateCarry();\n        updatePower();\n        updateEnergy();\n        console.log('FCS \u8bc4\u4f30\u7cfb\u7edf\u5df2\u52a0\u8f7d');\n        console.log('\u63d0\u793a\uff1a\u586b\u5199\u4e2a\u4eba\u4fe1\u606f\u540e\uff0c\u6309\u987a\u5e8f\u5b8c\u6210\u5404\u6a21\u5757\u6d4b\u8bd5\u3002');\n    <\/script>\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"],"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":7,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/2061\/revisions"}],"predecessor-version":[{"id":2155,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/2061\/revisions\/2155"}],"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}]}}