{"id":1948,"date":"2025-12-07T16:16:47","date_gmt":"2025-12-07T08:16:47","guid":{"rendered":"https:\/\/www.funpt.cn\/?page_id=1948"},"modified":"2026-10-28T13:36:31","modified_gmt":"2026-10-28T05:36:31","slug":"fms%e5%8a%9f%e8%83%bd%e6%80%a7%e5%8a%a8%e4%bd%9c%e7%ad%9b%e6%9f%a5%e7%b3%bb%e7%bb%9f","status":"publish","type":"page","link":"https:\/\/www.funpt.cn\/?page_id=1948","title":{"rendered":"FMS\u529f\u80fd\u6027\u52a8\u4f5c\u7b5b\u67e5\u7cfb\u7edf"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1948\" class=\"elementor elementor-1948\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8835d92 e-flex e-con-boxed e-con e-parent\" data-id=\"8835d92\" 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-5ecbcda elementor-widget elementor-widget-html\" data-id=\"5ecbcda\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"app\">\n<style>\n  \/* ================= \u57fa\u7ebf\u53d8\u91cf ================= *\/\n  #app {\n    --primary: #2563eb;\n    --primary-d: #1d4ed8;\n    --primary-color: #2563eb;\n    --secondary-color: #1d4ed8;\n    --success-color: #15803d;\n    --warning-color: #b45309;\n    --danger-color: #b91c1c;\n    --accent-color: #2563eb;\n    --ink: #0f172a;\n    --body: #334155;\n    --muted: #64748b;\n    --line: #e2e8f0;\n    --soft: #f8fafc;\n    max-width: 100%;\n    margin: 0 auto;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", sans-serif;\n    color: var(--body);\n    font-size: 14.5px;\n    line-height: 1.75;\n    -webkit-text-size-adjust: 100%;\n  }\n  #app *, #app *::before, #app *::after { box-sizing: border-box; }\n  #app h1, #app h2, #app h3, #app h4, #app h5, #app p, #app ul, #app ol,\n  #app li, #app label, #app table { margin: 0; padding: 0; }\n  #app ul, #app ol { list-style: none; }\n  #app li { position: relative; padding-left: 15px; }\n  #app li::before {\n    content: \"\";\n    position: absolute;\n    left: 1px;\n    top: 0.72em;\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: #94a3b8;\n  }\n  #app ul ul { margin-top: 4px; }\n  #app ul ul li { color: var(--muted); font-size: 13.5px; }\n  #app strong { font-weight: 700; color: var(--ink); }\n  #app a { color: var(--primary-d); text-decoration: none; }\n  #app em { font-style: normal; }\n\n  \/* ================= \u5916\u58f3 ================= *\/\n  #app .ps-card {\n    background: #fff;\n    border: 1px solid var(--line);\n    border-radius: 14px;\n    overflow: hidden;\n    box-shadow: 0 1px 3px rgba(15, 23, 42, 0.05);\n  }\n  #app .ps-head {\n    background: linear-gradient(135deg, #0f172a 0%, #1e3a8a 100%);\n    padding: 24px 28px;\n    display: flex;\n    align-items: flex-start;\n    justify-content: space-between;\n    gap: 14px;\n    flex-wrap: wrap;\n  }\n  #app .ps-head h1 {\n    font-size: 21px;\n    font-weight: 700;\n    color: #fff;\n    line-height: 1.35;\n    letter-spacing: 0.2px;\n  }\n  #app .ps-head p { font-size: 13.5px; color: #cbd5e1; margin-top: 6px; line-height: 1.5; }\n  #app .ps-badge {\n    font-size: 11.5px;\n    font-weight: 600;\n    letter-spacing: 0.6px;\n    color: #dbeafe;\n    background: rgba(255, 255, 255, 0.14);\n    border: 1px solid rgba(255, 255, 255, 0.22);\n    padding: 3px 10px;\n    border-radius: 999px;\n    white-space: nowrap;\n    margin-top: 2px;\n  }\n  #app .ps-body { padding: 6px 28px 20px; }\n  #app .ps-foot {\n    padding: 18px 28px;\n    border-top: 1px solid #eef2f7;\n    background: var(--soft);\n    font-size: 12.5px;\n    line-height: 1.75;\n    color: var(--muted);\n  }\n  #app .ps-foot p + p { margin-top: 6px; }\n  #app .ps-foot a { color: var(--primary-d); font-weight: 600; }\n  #app .ps-foot a:hover { text-decoration: underline; }\n\n  \/* ================= \u5206\u533a ================= *\/\n  #app .sec { padding: 22px 0; border-top: 1px solid #eef2f7; }\n  #app .sec:first-child { border-top: none; padding-top: 18px; }\n  #app .sec-title {\n    display: flex;\n    align-items: baseline;\n    gap: 9px;\n    font-size: 17px;\n    font-weight: 700;\n    color: var(--ink);\n    line-height: 1.35;\n    border-left: 3px solid var(--primary);\n    padding-left: 11px;\n    margin-bottom: 16px;\n  }\n  #app .sec-num {\n    font-size: 11.5px;\n    font-weight: 700;\n    color: var(--primary-d);\n    background: #eff6ff;\n    border: 1px solid #dbeafe;\n    border-radius: 5px;\n    padding: 1px 6px;\n    letter-spacing: 0.4px;\n  }\n  #app .grp-title {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: 14px;\n    font-weight: 700;\n    color: var(--ink);\n    margin: 2px 0 10px;\n  }\n  #app .grp-title::before {\n    content: \"\";\n    width: 6px;\n    height: 6px;\n    background: var(--primary);\n    transform: rotate(45deg);\n    flex: 0 0 auto;\n  }\n\n  \/* ================= \u8868\u5355 ================= *\/\n  #app .grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }\n  #app .grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }\n  #app .field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n  #app .field label { font-size: 13px; font-weight: 600; color: #475569; }\n  #app input[type=\"text\"], #app input[type=\"number\"], #app input[type=\"date\"],\n  #app select, #app textarea {\n    width: 100%;\n    height: 42px;\n    padding: 0 12px;\n    font-family: inherit;\n    font-size: 14px;\n    color: var(--ink);\n    background: var(--soft);\n    border: 1.5px solid #cbd5e1;\n    border-radius: 8px;\n    transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;\n    -webkit-appearance: none;\n    appearance: none;\n    line-height: normal;\n  }\n  #app textarea { height: auto; padding: 10px 12px; line-height: 1.7; resize: vertical; }\n  #app input::placeholder, #app textarea::placeholder { color: #94a3b8; }\n  #app input:focus, #app select:focus, #app textarea:focus {\n    outline: none;\n    border-color: var(--primary);\n    background: #fff;\n    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n  }\n  #app select {\n    padding-right: 34px;\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n    background-repeat: no-repeat;\n    background-position: right 12px center;\n  }\n  #app input[type=\"date\"], #app input[type=\"file\"] { -webkit-appearance: auto; appearance: auto; }\n  #app input[type=\"file\"] { height: auto; padding: 8px 10px; background: #fff; font-size: 13px; color: var(--muted); }\n  #app .hint { font-size: 12.5px; color: var(--muted); line-height: 1.65; }\n\n  \/* ================= \u6309\u94ae ================= *\/\n  #app .btn, #app .btn-primary, #app .btn-secondary, #app .btn-accent,\n  #app .btn-info, #app .btn-success, #app .btn-danger, #app .btn-reset,\n  #app .correction-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    height: 42px;\n    padding: 0 18px;\n    font-family: inherit;\n    font-size: 14px;\n    font-weight: 600;\n    line-height: 1;\n    white-space: nowrap;\n    border: 1px solid transparent;\n    border-radius: 8px;\n    cursor: pointer;\n    text-transform: none;\n    letter-spacing: normal;\n    transition: background 0.15s, border-color 0.15s, color 0.15s, box-shadow 0.15s;\n  }\n  #app .btn, #app .btn-primary { background: var(--primary); color: #fff; }\n  #app .btn:hover, #app .btn-primary:hover { background: var(--primary-d); box-shadow: 0 2px 6px rgba(37, 99, 235, 0.25); color: #fff; }\n  #app .btn-secondary, #app .btn-reset, #app .correction-btn {\n    background: #f1f5f9;\n    color: #334155;\n    border-color: #e2e8f0;\n  }\n  #app .btn-secondary:hover, #app .btn-reset:hover, #app .correction-btn:hover { background: #e8eef5; border-color: #cbd5e1; color: #0f172a; }\n  #app .btn-info { background: #eff6ff; color: var(--primary-d); border-color: #bfdbfe; }\n  #app .btn-info:hover { background: #dbeafe; border-color: #93c5fd; color: var(--primary-d); }\n  #app .btn-accent, #app .btn-success { background: #15803d; color: #fff; }\n  #app .btn-accent:hover, #app .btn-success:hover { background: #166534; color: #fff; }\n  #app .btn-danger { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }\n  #app .btn-danger:hover { background: #fee2e2; border-color: #fca5a5; color: #b91c1c; }\n  #app .btn-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 18px; }\n  #app .buttons { display: flex; gap: 10px; flex-wrap: wrap; }\n  #app .buttons .btn,\n  #app .buttons .btn-primary,\n  #app .buttons .btn-secondary,\n  #app .buttons .btn-accent { flex: 1 1 0; min-width: 0; }\n\n  \/* ================= \u63d0\u793a\u6846 ================= *\/\n  #app .info-box, #app .warning-box, #app .danger-box, #app .success-box {\n    border-radius: 10px;\n    border: 1px solid;\n    padding: 14px 16px;\n    font-size: 13.5px;\n    line-height: 1.75;\n    margin-bottom: 14px;\n  }\n  #app .info-box { background: var(--soft); border-color: var(--line); color: var(--body); }\n  #app .warning-box { background: #fffbeb; border-color: #fde68a; color: #92400e; }\n  #app .danger-box { background: #fef2f2; border-color: #fecaca; color: #991b1b; }\n  #app .success-box { background: #f0fdf4; border-color: #bbf7d0; color: #166534; }\n  #app .info-box p + p, #app .warning-box p + p, #app .danger-box p + p, #app .success-box p + p { margin-top: 8px; }\n  #app .info-box ul, #app .warning-box ul, #app .danger-box ul, #app .success-box ul { margin-top: 6px; }\n  #app .info-box strong, #app .warning-box strong, #app .danger-box strong, #app .success-box strong { color: inherit; }\n  #app .warning-box li::before, #app .danger-box li::before, #app .success-box li::before { background: currentColor; opacity: 0.55; }\n\n  \/* ================= \u6298\u53e0\u9762\u677f ================= *\/\n  #app .accordion { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; margin-top: 14px; }\n  #app .accordion-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 12px 14px;\n    background: var(--soft);\n    font-size: 13.5px;\n    font-weight: 600;\n    color: #334155;\n    cursor: pointer;\n    user-select: none;\n    transition: background 0.15s, color 0.15s;\n  }\n  #app .accordion-header:hover { background: #f1f5f9; }\n  #app .accordion-header.active { background: #eff6ff; color: var(--primary-d); }\n  #app .accordion-header i {\n    display: inline-block;\n    width: 8px;\n    height: 8px;\n    flex: 0 0 auto;\n    border-right: 2px solid currentColor;\n    border-bottom: 2px solid currentColor;\n    transform: rotate(45deg);\n    margin-right: 3px;\n    margin-top: -3px;\n    transition: transform 0.25s ease, margin 0.25s ease;\n  }\n  #app .accordion-header i.fa-chevron-up { transform: rotate(-135deg); margin-top: 3px; }\n  #app .accordion-content {\n    max-height: 0;\n    overflow: hidden;\n    padding: 0 14px;\n    font-size: 13.5px;\n    line-height: 1.75;\n    transition: max-height 0.28s ease;\n  }\n  #app .accordion-content.active { max-height: 4000px; padding: 14px; }\n  #app .accordion-content h4 {\n    font-size: 13.5px;\n    font-weight: 700;\n    color: var(--ink);\n    margin: 14px 0 6px;\n    padding-left: 9px;\n    border-left: 2px solid #bfdbfe;\n  }\n  #app .accordion-content h4:first-child { margin-top: 0; }\n\n  \/* ================= \u8868\u683c ================= *\/\n  #app .tbl-wrap, #app .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 12px 0 4px; }\n  #app table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 13px;\n    background: #fff;\n  }\n  #app th, #app td {\n    padding: 10px 8px;\n    text-align: center;\n    border-bottom: 1px solid #eef2f7;\n    font-variant-numeric: tabular-nums;\n    vertical-align: middle;\n  }\n  #app th {\n    background: var(--soft);\n    font-size: 12.5px;\n    font-weight: 700;\n    color: #475569;\n    border-bottom: 1px solid var(--line);\n    white-space: nowrap;\n  }\n  #app th:first-child, #app td:first-child { text-align: left; }\n  #app tbody tr:last-child td { border-bottom: none; }\n  #app tbody tr:hover td { background: #fbfdff; }\n\n  \/* ================= \u56fe\u8868 ================= *\/\n  #app .chart-container { position: relative; width: 100%; height: 300px; }\n  #app .chart-container canvas { display: block; max-width: 100%; }\n\n  \/* ================= \u7ed3\u679c\u6570\u5b57 ================= *\/\n  #app .result-card {\n    background: #fff;\n    border: 1px solid var(--line);\n    border-top: 3px solid var(--primary);\n    border-radius: 10px;\n    padding: 14px 12px;\n    text-align: center;\n  }\n  #app .result-value {\n    font-size: 23px;\n    font-weight: 700;\n    color: var(--primary-d);\n    line-height: 1.25;\n    margin: 4px 0 2px;\n    font-variant-numeric: tabular-nums;\n    letter-spacing: -0.2px;\n  }\n  #app .result-label { font-size: 12px; font-weight: 600; color: var(--muted); }\n  #app .results-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }\n\n  \/* ================= \u72b6\u6001\u8272 ================= *\/\n  #app .standard-optimal, #app .green-text, #app .text-ok { color: #15803d; font-weight: 600; }\n  #app .standard-pass, #app .yellow-text, #app .text-warn { color: #b45309; font-weight: 600; }\n  #app .standard-below, #app .red-text, #app .text-bad { color: #b91c1c; font-weight: 600; }\n\n  \/* ================= \u5de5\u5177\u7c7b ================= *\/\n  #app .hidden { display: none !important; }\n  #app .mt14 { margin-top: 14px; }\n  #app .mt-20 { margin-top: 20px; }\n\n  \/* ================= \u54cd\u5e94\u5f0f ================= *\/\n  @media (min-width: 720px) {\n    #app .results-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n  }\n  @media (max-width: 560px) {\n    #app .ps-head { padding: 20px 18px; }\n    #app .ps-head h1 { font-size: 18px; }\n    #app .ps-body { padding: 4px 18px 16px; }\n    #app .ps-foot { padding: 16px 18px; }\n    #app .grid-2, #app .grid-3 { grid-template-columns: 1fr; gap: 12px; }\n    #app .results-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }\n    #app .result-value { font-size: 20px; }\n    #app .btn-row { grid-template-columns: 1fr; }\n    #app .btn, #app .btn-primary, #app .btn-secondary, #app .btn-accent,\n    #app .btn-info, #app .btn-success, #app .btn-danger, #app .btn-reset { padding: 0 14px; font-size: 13.5px; }\n    #app table { font-size: 12.5px; }\n    #app th, #app td { padding: 9px 5px; }\n  }\n\n  \/* ================= \u5e03\u5c40 ================= *\/\n  #app .main-content {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) 300px;\n    gap: 16px;\n    align-items: start;\n    padding: 6px 0 4px;\n  }\n  #app .main-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }\n\n  \/* ================= \u6d4b\u8bd5\u5217\u8868 ================= *\/\n  #app .test-selection { min-width: 0; }\n  #app .test-list {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(196px, 1fr));\n    gap: 8px;\n  }\n  #app .test-item {\n    border: 1px solid var(--line);\n    border-left: 3px solid #cbd5e1;\n    border-radius: 8px;\n    background: #fff;\n    padding: 10px 12px;\n    cursor: pointer;\n    transition: border-color 0.15s, background 0.15s;\n  }\n  #app .test-item:hover { border-color: #93c5fd; border-left-color: #93c5fd; background: #f8fbff; }\n  #app .test-item.active { border-color: #bfdbfe; border-left-color: var(--primary); background: #eff6ff; }\n  #app .test-item h3 { font-size: 13.5px; font-weight: 700; color: var(--ink); line-height: 1.45; }\n  #app .test-item p {\n    font-size: 11.5px;\n    color: var(--muted);\n    line-height: 1.55;\n    margin: 4px 0 6px;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n  }\n  #app .test-status {\n    font-size: 11.5px;\n    font-weight: 600;\n    color: var(--primary-d);\n    padding-top: 6px;\n    border-top: 1px dashed #e2e8f0;\n  }\n\n  \/* ================= \u6d4b\u8bd5\u5185\u5bb9 ================= *\/\n  #app .test-content {\n    border: 1px solid var(--line);\n    border-radius: 12px;\n    background: #fff;\n    padding: 16px 18px 18px;\n    min-height: 380px;\n    min-width: 0;\n  }\n  #app .test-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px;\n    padding-bottom: 12px;\n    border-bottom: 1px solid #eef2f7;\n    margin-bottom: 14px;\n  }\n  #app .test-header h2 {\n    font-size: 17px;\n    font-weight: 700;\n    color: var(--ink);\n    line-height: 1.35;\n    border-left: 3px solid var(--primary);\n    padding-left: 10px;\n  }\n  #app .test-number {\n    flex: 0 0 auto;\n    min-width: 26px;\n    height: 26px;\n    padding: 0 7px;\n    border-radius: 7px;\n    background: #eff6ff;\n    border: 1px solid #dbeafe;\n    color: var(--primary-d);\n    font-size: 12.5px;\n    font-weight: 700;\n    line-height: 24px;\n    text-align: center;\n    font-variant-numeric: tabular-nums;\n  }\n  #app .test-description > h3 {\n    font-size: 13.5px;\n    font-weight: 700;\n    color: var(--ink);\n    padding-left: 9px;\n    border-left: 2px solid #bfdbfe;\n    margin: 2px 0 8px;\n  }\n  #app .test-description > p { font-size: 13px; line-height: 1.85; color: var(--body); }\n\n  \/* ================= \u8bc4\u5206\u9009\u9879 ================= *\/\n  #app .scoring-section { margin-top: 14px; }\n  #app .score-options {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 8px;\n  }\n  #app .score-option {\n    display: grid;\n    grid-template-columns: 22px minmax(0, 1fr);\n    gap: 2px 9px;\n    align-items: center;\n    background: var(--soft);\n    border: 1.5px solid #cbd5e1;\n    border-radius: 8px;\n    padding: 10px 12px;\n    cursor: pointer;\n    transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;\n  }\n  #app .score-option:hover { border-color: #93c5fd; background: #f8fbff; }\n  #app .score-option.selected {\n    border-color: var(--primary);\n    background: #eff6ff;\n    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.08);\n  }\n  #app .score-value {\n    width: 22px;\n    height: 22px;\n    border-radius: 6px;\n    background: #e2e8f0;\n    color: #334155;\n    font-size: 12px;\n    font-weight: 700;\n    line-height: 22px;\n    text-align: center;\n  }\n  #app .score-option > strong { font-size: 13px; font-weight: 700; color: var(--ink); }\n  #app .score-3 .score-value { background: #bbf7d0; color: #166534; }\n  #app .score-2 .score-value { background: #dbeafe; color: #1d4ed8; }\n  #app .score-1 .score-value { background: #fde68a; color: #92400e; }\n  #app .score-0 .score-value { background: #fecaca; color: #991b1b; }\n  #app .score-criteria {\n    grid-column: 2;\n    font-size: 12px;\n    line-height: 1.65;\n    color: var(--muted);\n  }\n  #app .scoring-section > p { font-size: 12.5px; line-height: 1.7; color: var(--muted); }\n\n  \/* ================= \u53cc\u4fa7\u8bc4\u5206 ================= *\/\n  #app .bilateral-scoring {\n    margin-top: 14px;\n    border: 1px solid var(--line);\n    border-radius: 10px;\n    padding: 12px 14px 14px;\n  }\n  #app .bilateral-scoring h4 {\n    font-size: 13px;\n    font-weight: 700;\n    color: var(--ink);\n    margin-bottom: 10px;\n  }\n  #app .side-scoring { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }\n  #app .side-scoring > div { min-width: 0; }\n  #app .side-scoring h5 { font-size: 12.5px; font-weight: 600; color: #475569; margin-bottom: 6px; }\n  #app .side-buttons { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }\n  #app .side-btn {\n    height: 34px;\n    font-family: inherit;\n    font-size: 13px;\n    font-weight: 600;\n    color: #334155;\n    background: var(--soft);\n    border: 1.5px solid #cbd5e1;\n    border-radius: 7px;\n    cursor: pointer;\n    font-variant-numeric: tabular-nums;\n    transition: background 0.15s, border-color 0.15s, color 0.15s;\n  }\n  #app .side-btn:hover { border-color: #93c5fd; background: #f8fbff; }\n  #app .side-btn.selected { background: #eff6ff; border-color: var(--primary); color: var(--primary-d); }\n\n  \/* ================= \u6392\u9664\u6027\u68c0\u67e5 ================= *\/\n  #app .clearing-test, #app .ankle-clearing-test {\n    margin-top: 14px;\n    border: 1px solid #fde68a;\n    background: #fffbeb;\n    border-radius: 10px;\n    padding: 12px 14px 14px;\n  }\n  #app .ankle-clearing-test { border-top: 1px dashed #fcd34d; }\n  #app .clearing-test h4 {\n    font-size: 13px;\n    font-weight: 700;\n    color: #92400e;\n    margin-bottom: 6px;\n  }\n  #app .clearing-test > p, #app .ankle-clearing-instruction p {\n    font-size: 12.5px;\n    line-height: 1.7;\n    color: #92400e;\n  }\n  #app .clearing-test h5, #app .ankle-clearing-test h5 {\n    font-size: 12.5px;\n    font-weight: 700;\n    color: #78350f;\n    margin: 10px 0 6px;\n  }\n  #app .ankle-clearing-instruction { margin-bottom: 4px; }\n  #app .clearing-buttons, #app .clearing-btn-group { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }\n  #app .clearing-btn {\n    height: 32px;\n    padding: 0 14px;\n    font-family: inherit;\n    font-size: 12.5px;\n    font-weight: 600;\n    color: #475569;\n    background: #fff;\n    border: 1.5px solid #cbd5e1;\n    border-radius: 7px;\n    cursor: pointer;\n    transition: background 0.15s, border-color 0.15s, color 0.15s;\n  }\n  #app .clearing-btn:hover { border-color: #94a3b8; }\n  #app .clearing-btn.positive { background: #b91c1c; border-color: #b91c1c; color: #fff; }\n  #app .clearing-btn.negative { background: #15803d; border-color: #15803d; color: #fff; }\n\n  \/* \u6392\u9664\u6027\u68c0\u67e5\u8868 *\/\n  #app .exclusion-check-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-top: 10px;\n    background: #fff;\n    border-radius: 8px;\n    overflow: hidden;\n    font-size: 12.5px;\n  }\n  #app .exclusion-check-table th {\n    background: #fef3c7;\n    color: #92400e;\n    font-size: 11.5px;\n    font-weight: 700;\n    padding: 8px 6px;\n    border-bottom: 1px solid #fde68a;\n    text-align: center;\n  }\n  #app .exclusion-check-table td {\n    padding: 8px 6px;\n    border-bottom: 1px solid #fef3c7;\n    text-align: center;\n    color: #78350f;\n    font-size: 12px;\n  }\n  #app .exclusion-check-table tr:last-child td { border-bottom: none; }\n  #app .exclusion-buttons { display: flex; gap: 5px; justify-content: center; }\n  #app .exclusion-btn {\n    height: 28px;\n    padding: 0 9px;\n    font-family: inherit;\n    font-size: 11.5px;\n    font-weight: 600;\n    color: #475569;\n    background: #fff;\n    border: 1px solid #cbd5e1;\n    border-radius: 6px;\n    cursor: pointer;\n    white-space: nowrap;\n    transition: background 0.15s, border-color 0.15s, color 0.15s;\n  }\n  #app .exclusion-btn:hover { border-color: #94a3b8; }\n  #app .exclusion-btn.positive { background: #b91c1c; border-color: #b91c1c; color: #fff; }\n  #app .exclusion-btn.negative { background: #15803d; border-color: #15803d; color: #fff; }\n\n  \/* \u8e1d\u5173\u8282\u7075\u6d3b\u6027 *\/\n  #app .ankle-flexibility-section { margin-top: 4px; }\n  #app .flexibility-options { display: grid; gap: 5px; }\n  #app .flexibility-option {\n    display: grid;\n    grid-template-columns: 54px minmax(0, 1fr);\n    gap: 8px;\n    align-items: center;\n    border: 1.5px solid #cbd5e1;\n    border-radius: 7px;\n    background: #fff;\n    padding: 5px 6px;\n    cursor: pointer;\n    text-align: left;\n    transition: border-color 0.15s, background 0.15s;\n  }\n  #app .flexibility-option:hover { border-color: #93c5fd; }\n  #app .flexibility-option.selected { border-color: var(--primary); background: #eff6ff; }\n  #app .flexibility-visual { height: 38px; }\n  #app .visual-demo {\n    position: relative;\n    height: 38px;\n    border-bottom: 2px solid #cbd5e1;\n  }\n  #app .visual-demo > div { position: absolute; }\n  #app .foot-visual {\n    bottom: 0;\n    left: 4px;\n    width: 24px;\n    height: 7px;\n    background: #94a3b8;\n    border-radius: 3px 3px 0 0;\n  }\n  #app .ankle-visual {\n    bottom: 5px;\n    left: 20px;\n    width: 6px;\n    height: 13px;\n    background: #64748b;\n    border-radius: 2px;\n  }\n  #app .inner-ankle-marker {\n    bottom: 0;\n    left: 30px;\n    width: 2px;\n    height: 34px;\n    background: #f59e0b;\n    opacity: 0.75;\n  }\n  #app .marker-line {\n    bottom: 0;\n    left: 30px;\n    width: 0;\n    height: 0;\n  }\n  #app .knee-visual {\n    bottom: 15px;\n    width: 12px;\n    height: 12px;\n    border-radius: 50%;\n    box-shadow: 0 0 0 2px #fff;\n  }\n  #app .knee-visual.green-position { left: 27px; background: #15803d; }\n  #app .knee-visual.yellow-position { left: 18px; background: #b45309; }\n  #app .knee-visual.red-position { left: 9px; background: #b91c1c; }\n  #app .flexibility-info { display: flex; flex-direction: column; gap: 0; min-width: 0; }\n  #app .flexibility-label { font-size: 12px; font-weight: 700; line-height: 1.4; }\n  #app .flexibility-desc { font-size: 10.5px; color: var(--body); line-height: 1.4; }\n  #app .flexibility-detail { font-size: 10px; color: var(--muted); line-height: 1.35; }\n  #app .flexibility-check { display: none; }\n  #app .instruction-grid {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 6px;\n    margin-top: 8px;\n  }\n  #app .instruction-item {\n    display: flex;\n    gap: 6px;\n    background: #fff;\n    border: 1px solid #fde68a;\n    border-radius: 6px;\n    padding: 6px 8px;\n    min-width: 0;\n  }\n  #app .color-indicator {\n    flex: 0 0 auto;\n    width: 9px;\n    height: 9px;\n    border-radius: 50%;\n    margin-top: 5px;\n    background: #94a3b8;\n  }\n  #app .color-indicator.green { background: #15803d; }\n  #app .color-indicator.yellow { background: #b45309; }\n  #app .color-indicator.red { background: #b91c1c; }\n  #app .instruction-content { font-size: 10.5px; line-height: 1.55; color: #78350f; }\n\n  \/* ================= \u4fa7\u8fb9\u8bc4\u5206\u6c47\u603b ================= *\/\n  #app .sidebar { display: flex; flex-direction: column; gap: 12px; min-width: 0; }\n  #app .score-summary {\n    border: 1px solid var(--line);\n    border-radius: 12px;\n    background: #fff;\n    padding: 14px 12px 14px;\n  }\n  #app .score-summary h3 {\n    font-size: 14px;\n    font-weight: 700;\n    color: var(--ink);\n    border-left: 3px solid var(--primary);\n    padding-left: 9px;\n    margin-bottom: 10px;\n  }\n  #app .score-table { width: 100%; border-collapse: collapse; font-size: 11.5px; }\n  #app .score-table th {\n    background: var(--soft);\n    color: #475569;\n    font-size: 10.5px;\n    font-weight: 700;\n    padding: 6px 3px;\n    border-bottom: 1px solid var(--line);\n    white-space: nowrap;\n  }\n  #app .score-table td {\n    padding: 6px 3px;\n    border-bottom: 1px solid #eef2f7;\n    text-align: center;\n    color: var(--body);\n    font-variant-numeric: tabular-nums;\n  }\n  #app .score-table td:first-child { text-align: left; font-size: 11.5px; }\n  #app .score-table tr:hover td { background: #fbfdff; }\n  #app .score-table tbody tr:last-child td { border-bottom: none; }\n  #app .score-cell { font-weight: 700; }\n  #app .score-0-display { color: #b91c1c; }\n  #app .score-1-display { color: #b45309; }\n  #app .score-2-display { color: #1d4ed8; }\n  #app .score-3-display { color: #15803d; }\n\n  #app .total-score {\n    margin-top: 12px;\n    border: 1px solid #dbeafe;\n    background: linear-gradient(135deg, #f8fbff 0%, #eff6ff 100%);\n    border-radius: 10px;\n    padding: 12px 12px 14px;\n    text-align: center;\n  }\n  #app .total-score h4 { font-size: 12px; font-weight: 600; color: #475569; letter-spacing: 0.3px; }\n  #app .total-value {\n    font-size: 32px;\n    font-weight: 700;\n    color: var(--primary-d);\n    line-height: 1.2;\n    font-variant-numeric: tabular-nums;\n    letter-spacing: -0.5px;\n  }\n  #app .total-score p { font-size: 11.5px; color: var(--muted); margin-top: 2px; }\n  #app .total-score .correction-btn { width: 100%; margin-top: 10px; height: 36px; font-size: 12.5px; }\n  #app .sidebar > .buttons { flex-direction: column; }\n  #app .sidebar > .buttons .btn,\n  #app .sidebar > .buttons .btn-primary,\n  #app .sidebar > .buttons .btn-accent { flex: 0 0 auto; width: 100%; }\n\n  \/* ================= \u6d4b\u8bd5\u5185\u5bb9\u91cc\u7684\u7ffb\u9875\u6309\u94ae ================= *\/\n  #app .test-content .buttons { margin-top: 18px; }\n  #app .test-content .buttons .btn:disabled,\n  #app .test-content .buttons .btn-secondary:disabled {\n    opacity: 0.45;\n    cursor: not-allowed;\n    box-shadow: none;\n  }\n  #app .test-content .correction-btn { margin-top: 14px; }\n\n  \/* ================= \u6a21\u6001\u6846 ================= *\/\n  #app .modal {\n    display: none;\n    position: fixed;\n    inset: 0;\n    z-index: 99990;\n    background: rgba(15, 23, 42, 0.55);\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n  }\n  #app .modal-content {\n    background: #fff;\n    border-radius: 14px;\n    width: 100%;\n    max-width: 460px;\n    max-height: 88vh;\n    overflow: auto;\n    box-shadow: 0 20px 50px rgba(15, 23, 42, 0.28);\n  }\n  #app .modal-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 10px;\n    padding: 16px 20px;\n    border-bottom: 1px solid #eef2f7;\n    position: sticky;\n    top: 0;\n    background: #fff;\n    z-index: 1;\n  }\n  #app .modal-header h3 { font-size: 15px; font-weight: 700; color: var(--ink); }\n  #app .close-modal {\n    flex: 0 0 auto;\n    width: 30px;\n    height: 30px;\n    font-family: inherit;\n    font-size: 18px;\n    line-height: 1;\n    color: #64748b;\n    background: #f1f5f9;\n    border: none;\n    border-radius: 7px;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n  }\n  #app .close-modal:hover { background: #e2e8f0; color: #0f172a; }\n  #app .modal-content > form { padding: 16px 20px 20px; }\n  #app .modal-body { padding: 16px 20px 20px; }\n  #app .form-group { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }\n  #app .form-group label { font-size: 13px; font-weight: 600; color: #475569; }\n  #app .form-control {\n    width: 100%;\n    height: 42px;\n    padding: 0 12px;\n    font-family: inherit;\n    font-size: 14px;\n    color: var(--ink);\n    background: var(--soft);\n    border: 1.5px solid #cbd5e1;\n    border-radius: 8px;\n    -webkit-appearance: none;\n    appearance: none;\n    transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;\n  }\n  #app select.form-control {\n    padding-right: 34px;\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");\n    background-repeat: no-repeat;\n    background-position: right 12px center;\n  }\n  #app input[type=\"date\"].form-control { -webkit-appearance: auto; appearance: auto; }\n  #app .form-control:focus {\n    outline: none;\n    border-color: var(--primary);\n    background: #fff;\n    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n  }\n\n  \/* ================= \u7ea0\u6b63\u5efa\u8bae ================= *\/\n  #app .correction-content { padding: 16px 20px 20px; }\n  #app .correction-section h4 {\n    font-size: 14px;\n    font-weight: 700;\n    color: var(--ink);\n    padding-left: 9px;\n    border-left: 3px solid var(--primary);\n    margin-bottom: 10px;\n  }\n  #app .correction-section > p { font-size: 13px; line-height: 1.85; color: var(--body); margin-bottom: 6px; }\n  #app .correction-exercises { margin: 6px 0 0; padding-left: 0; }\n  #app .correction-exercises li {\n    position: relative;\n    padding-left: 14px;\n    font-size: 13px;\n    line-height: 1.7;\n    color: var(--body);\n    margin-bottom: 4px;\n  }\n  #app .correction-exercises li::before {\n    content: \"\";\n    position: absolute;\n    left: 2px;\n    top: 0.72em;\n    width: 5px;\n    height: 5px;\n    border-radius: 50%;\n    background: var(--primary);\n    opacity: 0.6;\n  }\n  #app .app-title-sub { font-weight: 600; opacity: 0.9; }\n\n  \/* ================= \u54cd\u5e94\u5f0f ================= *\/\n  @media (max-width: 992px) {\n    #app .main-content { grid-template-columns: minmax(0, 1fr); }\n    #app .score-summary { display: grid; grid-template-columns: minmax(0, 1fr) 200px; gap: 12px; align-items: start; }\n    #app .score-summary h3 { grid-column: 1 \/ -1; }\n    #app .total-score { margin-top: 0; }\n    #app .sidebar > .buttons { flex-direction: row; }\n  }\n  @media (max-width: 640px) {\n    #app .score-options { grid-template-columns: minmax(0, 1fr); }\n    #app .test-list { grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); }\n    #app .test-content { padding: 14px 14px 16px; }\n    #app .test-header h2 { font-size: 15.5px; }\n    #app .score-summary { display: block; }\n    #app .total-score { margin-top: 12px; }\n    #app .side-scoring { grid-template-columns: minmax(0, 1fr); gap: 10px; }\n    #app .instruction-grid { grid-template-columns: minmax(0, 1fr); }\n    #app .sidebar > .buttons { flex-direction: column; }\n    #app .test-content .buttons { flex-direction: column-reverse; }\n    #app .exclusion-buttons { flex-direction: column; }\n    #app .exclusion-btn { width: 100%; }\n  }\n<\/style>\n<div class=\"ps-card\">\n  <header class=\"ps-head\">\n    <div>\n      <h1 id=\"appTitle\">FMS \u529f\u80fd\u6027\u8fd0\u52a8\u7b5b\u67e5\u7cfb\u7edf<\/h1>\n      <p>\u57fa\u4e8e FMS Level 1 Manual V2.9 \u6807\u51c6 \u00b7 \u4e03\u9879\u57fa\u672c\u52a8\u4f5c\u6a21\u5f0f\u8bc4\u4f30\u4e0e\u9488\u5bf9\u6027\u7ea0\u6b63\u5efa\u8bae<\/p>\n    <\/div>\n    <span class=\"ps-badge\">FMS<\/span>\n  <\/header>\n  <div class=\"ps-body\">\n    <div class=\"main-content\">\n      <div class=\"main-col\">\n        <section class=\"test-selection\">\n          <h2 class=\"sec-title\"><span class=\"sec-num\">01<\/span>\u6d4b\u8bd5\u9879\u76ee<\/h2>\n          <div class=\"test-list\" id=\"testList\"><\/div>\n        <\/section>\n        <section class=\"test-content\" id=\"testContent\"><\/section>\n      <\/div>\n\n      <aside class=\"sidebar\">\n        <div class=\"score-summary\">\n          <h3>\u8bc4\u5206\u6c47\u603b<\/h3>\n          <table class=\"score-table\" id=\"scoreTable\">\n            <thead>\n              <tr><th>\u6d4b\u8bd5\u9879\u76ee<\/th><th>\u5de6\u4fa7<\/th><th>\u53f3\u4fa7<\/th><th>\u6700\u7ec8<\/th><\/tr>\n            <\/thead>\n            <tbody id=\"scoreTableBody\"><\/tbody>\n          <\/table>\n          <div class=\"total-score\">\n            <h4>\u603b\u5206<\/h4>\n            <div class=\"total-value\" id=\"totalScore\">0<\/div>\n            <p>\u6700\u9ad8 21 \u5206 \u00b7 <span id=\"riskIndicator\">-<\/span><\/p>\n            <button class=\"correction-btn\" id=\"viewCorrectionBtn\">\u67e5\u770b\u7efc\u5408\u7ea0\u6b63\u5efa\u8bae<\/button>\n          <\/div>\n        <\/div>\n        <div class=\"buttons\">\n          <button class=\"btn btn-accent\" id=\"saveResultsBtn\">\u4fdd\u5b58\u7ed3\u679c<\/button>\n          <button class=\"btn btn-primary\" id=\"newClientBtn\">\u65b0\u5ba2\u6237<\/button>\n        <\/div>\n      <\/aside>\n    <\/div>\n  <\/div>\n  <div class=\"ps-foot\">\n    <p>FMS \u529f\u80fd\u6027\u8fd0\u52a8\u7b5b\u67e5\u7cfb\u7edf \u00b7 \u57fa\u4e8e Functional Movement Systems Level 1 Manual V2.9\uff082021 \u5e74 11 \u6708\uff09\u6807\u51c6\u3002<\/p>\n    <p>\u603b\u5206 \u2264 14 \u5206\u63d0\u793a\u6574\u4f53\u53d7\u4f24\u98ce\u9669\u8f83\u9ad8\uff0c14\u201317 \u5206\u63d0\u793a\u5b58\u5728\u90e8\u5206\u52a8\u4f5c\u9650\u5236\uff0c\u2265 18 \u5206\u63d0\u793a\u57fa\u672c\u52a8\u4f5c\u6a21\u5f0f\u826f\u597d\u3002<\/p>\n    <p>\u4efb\u4e00\u6392\u9664\u6027\u68c0\u67e5\u4e3a\u9633\u6027\uff08\u4f34\u75bc\u75db\uff09\u65f6\uff0c\u8be5\u9879\u6700\u7ec8\u5f97\u5206\u4e3a 0\uff0c\u5e76\u5e94\u4f18\u5148\u8f6c\u4ecb\u533b\u7597\u8bc4\u4f30\u3002<\/p>\n  <\/div>\n<\/div>\n<div class=\"modal\" id=\"clientModal\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <h3>\u5ba2\u6237\u4fe1\u606f<\/h3>\n      <button class=\"close-modal\" id=\"closeModal\">&times;<\/button>\n    <\/div>\n    <form id=\"clientForm\">\n      <div class=\"form-group\"><label for=\"clientName\">\u59d3\u540d<\/label><input type=\"text\" id=\"clientName\" class=\"form-control\" required><\/div>\n      <div class=\"form-group\"><label for=\"clientDate\">\u6d4b\u8bd5\u65e5\u671f<\/label><input type=\"date\" id=\"clientDate\" class=\"form-control\" required><\/div>\n      <div class=\"form-group\"><label for=\"clientGender\">\u6027\u522b<\/label>\n        <select id=\"clientGender\" class=\"form-control\" required>\n          <option value=\"\">\u9009\u62e9\u6027\u522b<\/option>\n          <option value=\"male\">\u7537<\/option>\n          <option value=\"female\">\u5973<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"form-group\"><label for=\"clientAge\">\u5e74\u9f84<\/label><input type=\"number\" id=\"clientAge\" class=\"form-control\" min=\"7\" max=\"100\"><\/div>\n      <div class=\"form-group\"><label for=\"clientSport\">\u4e3b\u8981\u8fd0\u52a8 \/ \u6d3b\u52a8<\/label><input type=\"text\" id=\"clientSport\" class=\"form-control\"><\/div>\n      <div class=\"buttons\" style=\"margin-top: 8px;\">\n        <button type=\"submit\" class=\"btn btn-primary\" style=\"width: 100%;\">\u5f00\u59cb\u6d4b\u8bd5<\/button>\n      <\/div>\n    <\/form>\n  <\/div>\n<\/div>\n\n<div class=\"modal\" id=\"correctionModal\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <h3>\u7ea0\u6b63\u8bad\u7ec3\u5efa\u8bae<\/h3>\n      <button class=\"close-modal\" id=\"closeCorrectionModal\">&times;<\/button>\n    <\/div>\n    <div class=\"modal-body\" id=\"correctionBody\"><\/div>\n  <\/div>\n<\/div>\n<script>\/\/ ===================== \u5b8c\u65747\u4e2a\u6d4b\u8bd5\u6570\u636e =====================\n        const fmsTests = [\n            {\n                id: 1,\n                name: \"\u6df1\u8e72\",\n                fullName: \"\u6df1\u8e72\u8fd0\u52a8\u6a21\u5f0f\",\n                purpose: \"\u8bc4\u4f30\u5bf9\u79f0\u7ad9\u7acb\u59ff\u52bf\u4e0b\uff0c\u5168\u8eab\u52a8\u4f5c\u94fe\u7684\u7075\u6d3b\u6027\uff08\u8e1d\u3001\u819d\u3001\u9acb\u3001\u80f8\u690e\uff09\u4e0e\u6838\u5fc3\u7a33\u5b9a\u6027\u3002\u8fd9\u662f\u53d1\u5c55\u6027\u59ff\u52bf\u548c\u57fa\u7840\u8fd0\u52a8\u6a21\u5f0f\u3002\",\n                description: \"\u53d7\u8bd5\u8005\u53cc\u624b\u63e1\u6746\u4e3e\u8fc7\u5934\u9876\uff0c\u7f13\u6162\u4e0b\u8e72\u81f3\u6700\u4f4e\u70b9\u3002\u89c2\u5bdf\u811a\u8ddf\u3001\u8eaf\u5e72\u89d2\u5ea6\u3001\u819d\u76d6\u8f68\u8ff9\u548c\u6746\u7684\u4f4d\u7f6e\u3002\",\n                scoring: {\n                    3: \"\u8eaf\u5e72\u5e73\u884c\u4e8e\u80eb\u9aa8\u6216\u66f4\u76f4\u7acb\uff1b\u80a1\u9aa8\u4f4e\u4e8e\u6c34\u5e73\uff1b\u819d\u76d6\u672a\u5185\u6263\uff1b\u6746\u5728\u811a\u6b63\u4e0a\u65b9\u3002\",\n                    2: \"\u540c\u4e0a\uff0c\u4f46\u9700\u811a\u8ddf\u62ac\u8d77\u8865\u507f\u624d\u53ef\u8fbe\u6210\u3002\",\n                    1: \"\u8eaf\u5e72\u524d\u503e\u8fc7\u591a\uff1b\u80a1\u9aa8\u672a\u4f4e\u4e8e\u6c34\u5e73\uff1b\u819d\u76d6\u5185\u6263\uff1b\u6746\u4e0d\u5728\u811a\u4e0a\u65b9\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: false,\n                clearingTest: false, \/\/ \u6df1\u8e72\u6ca1\u6709\u6392\u9664\u6027\u6d4b\u8bd5\n                ankleClearingTest: false,\n                currentScore: { \n                    final: null,\n                },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u6df1\u8e72\u65f6\u51fa\u73b0\u75bc\u75db\u662f\u5371\u9669\u4fe1\u53f7\uff0c\u5fc5\u987b\u4f18\u5148\u7531\u533b\u7597\u4e13\u4e1a\u4eba\u58eb\u8fdb\u884c\u8bc4\u4f30\uff0c\u6392\u9664\u5173\u8282\u6216\u8f6f\u7ec4\u7ec7\u635f\u4f24\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u8e1d\u80cc\u5c48\", \"\u80f8\u690e\u4f38\u5c55\", \"\u9acb\u5173\u8282\u63a7\u5236\"], \n                        exercises: [\n                            \"\u6ce1\u6cab\u8f74\u653e\u677e\u5c0f\u817f\u4e09\u5934\u808c\u3001\u80a1\u56db\u5934\u808c\",\n                            \"\u9760\u5899\u8e1d\u80cc\u5c48\u6ed1\u52a8\uff08\u819d\u89e6\u5899\uff09\",\n                            \"\u4ef0\u5367\u8f6c\u4f53\uff08\u6539\u5584\u80f8\u690e\u65cb\u8f6c\uff09\",\n                            \"\u9ad8\u811a\u676f\u7bb1\u5f0f\u6df1\u8e72\uff08\u5b66\u4e60\u9acb\u4e3b\u5bfc\u6a21\u5f0f\uff09\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u52a8\u4f5c\u6a21\u5f0f\u5de9\u56fa\", \"\u80f8\u690e\u7075\u6d3b\u6027\", \"\u6838\u5fc3\u7a33\u5b9a\"], \n                        exercises: [\n                            \"\u9ad8\u811a\u676f\u6df1\u8e72\uff08\u5f3a\u8c03\u80f8\u690e\u633a\u76f4\uff09\",\n                            \"\u811a\u8e1d\u7075\u6d3b\u6027\u6301\u7eed\u8bad\u7ec3\",\n                            \"\u5e73\u677f\u652f\u6491\uff08\u5f3a\u5316\u524d\u4fa7\u6838\u5fc3\u94fe\uff09\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u6a21\u5f0f\u826f\u597d\uff0c\u53ef\u5728\u8bad\u7ec3\u4e2d\u7ee7\u7eed\u5f3a\u5316\u4f5c\u4e3a\u70ed\u8eab\u6216\u57fa\u7840\u52a8\u4f5c\uff0c\u6ce8\u610f\u4fdd\u6301\u65e0\u75db\u72b6\u6001\u3002\" \n                    }\n                }\n            },\n            {\n                id: 2,\n                name: \"\u8de8\u680f\u6b65\",\n                fullName: \"\u8de8\u680f\u6b65\u8fd0\u52a8\u6a21\u5f0f\",\n                purpose: \"\u8bc4\u4f30\u5355\u817f\u7ad9\u7acb\u65f6\u7684\u52a8\u6001\u7a33\u5b9a\u6027\uff0c\u4ee5\u53ca\u8e0f\u6b65\u817f\u7684\u9acb\u5173\u8282\u7075\u6d3b\u6027\uff0c\u6a21\u62df\u6b65\u6001\u4e2d\u7684\u652f\u6491\u76f8\u3002\",\n                description: \"\u53d7\u8bd5\u8005\u53cc\u811a\u5e76\u62e2\u7ad9\u7acb\uff0c\u5c06\u6746\u7f6e\u4e8e\u9888\u540e\uff0c\u7f13\u6162\u62ac\u8d77\u4e00\u817f\u8de8\u8fc7\u4e0e\u80eb\u9aa8\u7c97\u9686\u540c\u9ad8\u7684\u680f\u67b6\uff0c\u7528\u811a\u8ddf\u70b9\u5730\u540e\u8fd4\u56de\u3002\",\n                scoring: {\n                    3: \"\u9acb\u3001\u819d\u3001\u8e1d\u5728\u77e2\u72b6\u9762\u6210\u4e00\u76f4\u7ebf\uff1b\u8170\u690e\u65e0\u6643\u52a8\uff1b\u6746\u4e0e\u680f\u67b6\u5e73\u884c\u3002\",\n                    2: \"\u5931\u53bb\u5bf9\u9f50\uff1b\u8170\u690e\u51fa\u73b0\u79fb\u52a8\uff1b\u6746\u4e0e\u680f\u67b6\u4e0d\u5e73\u884c\u3002\",\n                    1: \"\u65e0\u6cd5\u8de8\u8fc7\u680f\u67b6\u7ef3\u7d22\uff1b\u5931\u53bb\u5e73\u8861\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: true,\n                clearingTest: false,\n                ankleClearingTest: false,\n                currentScore: { left: null, right: null, final: null },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u8de8\u6b65\u65f6\u75bc\u75db\u9700\u533b\u7597\u8bc4\u4f30\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u652f\u6491\u817f\u81c0\u4e2d\u808c\u7a33\u5b9a\", \"\u8e0f\u6b65\u817f\u9acb\u5c48\u66f2\u7075\u6d3b\u6027\"], \n                        exercises: [\n                            \"\u5f39\u529b\u5e26\u4fa7\u5411\u884c\u8d70\uff08\u6fc0\u6d3b\u81c0\u4e2d\u808c\uff09\",\n                            \"\u5355\u817f\u786c\u5730\u7ad9\u7acb\uff0830\u79d2\uff09\",\n                            \"\u4ef0\u5367\u5355\u817f\u62b1\u819d\uff08\u62c9\u4f38\u5c48\u9acb\u808c\u7fa4\uff09\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u52a8\u6001\u5e73\u8861\", \"\u9acb\u5173\u8282\u534f\u8c03\"], \n                        exercises: [\n                            \"\u5355\u817f\u7f57\u9a6c\u5c3c\u4e9a\u786c\u62c9\uff08\u65e0\u8d1f\u91cd\uff09\",\n                            \"\u7ad9\u59ff\u9acb\u5916\u5c55\u6297\u963b\",\n                            \"\u5728\u4f4e\u969c\u788d\u7269\u4e0a\u91cd\u590d\u8de8\u680f\u6b65\u7ec3\u4e60\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u52a8\u6001\u7a33\u5b9a\u6027\u826f\u597d\uff0c\u53ef\u5c06\u5355\u817f\u8bad\u7ec3\u7eb3\u5165\u5e38\u89c4\u8bad\u7ec3\u4ee5\u9884\u9632\u635f\u4f24\u3002\" \n                    }\n                }\n            },\n            {\n                id: 3,\n                name: \"\u76f4\u7ebf\u5f13\u6b65\u8e72\",\n                fullName: \"\u76f4\u7ebf\u5f13\u6b65\u8e72\u8fd0\u52a8\u6a21\u5f0f\",\n                purpose: \"\u8bc4\u4f30\u5728\u5206\u817f\u59ff\u52bf\u4e0b\uff0c\u9acb\u3001\u819d\u3001\u8e1d\u7684\u7075\u6d3b\u4e0e\u7a33\u5b9a\uff0c\u4ee5\u53ca\u8eaf\u5e72\u7684\u6297\u8fd0\u52a8\u80fd\u529b\u3002\",\n                description: \"\u53d7\u8bd5\u8005\u53cc\u811a\u524d\u540e\u6210\u4e00\u76f4\u7ebf\uff08\u8ddd\u79bb\u4e3a\u80eb\u9aa8\u957f\u5ea6\uff09\uff0c\u624b\u6301\u6746\u8d34\u4e8e\u80cc\u540e\u3002\u4e0b\u964d\u81f3\u540e\u819d\u89e6\u78b0\u677f\u5b50\uff0c\u7136\u540e\u8fd4\u56de\u3002\",\n                scoring: {\n                    3: \"\u6746\u5782\u76f4\u4e14\u63a5\u89e6\u5934\u3001\u80cc\u3001\u9ab6\u9aa8\uff1b\u8eaf\u5e72\u7a33\u5b9a\uff1b\u819d\u89e6\u677f\u4e2d\u5fc3\uff1b\u811a\u672a\u79fb\u52a8\u3002\",\n                    2: \"\u6746\u503e\u659c\u6216\u5931\u53bb\u63a5\u89e6\uff1b\u8eaf\u5e72\u6643\u52a8\uff1b\u819d\u672a\u89e6\u4e2d\u5fc3\uff1b\u811a\u79fb\u52a8\u3002\",\n                    1: \"\u5931\u53bb\u5e73\u8861\u6216\u65e0\u6cd5\u5b8c\u6210\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: true,\n                clearingTest: true,\n                ankleClearingTest: true, \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\u6709\u8e1d\u5173\u8282\u6392\u9664\u6027\u6d4b\u8bd5\n                currentScore: { \n                    left: null, \n                    right: null, \n                    final: null, \n                    clearing: null, \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\u6574\u4f53\u6392\u9664\u6027\u6d4b\u8bd5\n                    ankleClearingLeft: null, \/\/ \u8e1d\u5173\u8282\u5de6\u4fa7\u75bc\u75db\u53cd\u5e94\n                    ankleClearingRight: null, \/\/ \u8e1d\u5173\u8282\u53f3\u4fa7\u75bc\u75db\u53cd\u5e94\n                    ankleFlexibilityLeft: null, \/\/ \u8e1d\u5173\u8282\u5de6\u4fa7\u7075\u6d3b\u6027\u8bc4\u4f30\n                    ankleFlexibilityRight: null \/\/ \u8e1d\u5173\u8282\u53f3\u4fa7\u7075\u6d3b\u6027\u8bc4\u4f30\n                },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u5f13\u6b65\u65f6\u75bc\u75db\u9700\u8f6c\u4ecb\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u540e\u817f\u9acb\u4f38\u5c55\", \"\u524d\u817f\u8e1d\u80cc\u5c48\", \"\u8eaf\u5e72\u7a33\u5b9a\u6027\"], \n                        exercises: [\n                            \"\u534a\u8dea\u59ff\u5c48\u9acb\u808c\u62c9\u4f38\uff08\u540e\u817f\uff09\",\n                            \"\u534a\u8dea\u59ff\u8e1d\u80cc\u5c48\u6ed1\u52a8\uff08\u524d\u817f\uff09\",\n                            \"\u5e73\u677f\u652f\u6491\",\n                            \"\u8f85\u52a9\u4e0b\u5c0f\u5e45\u5206\u817f\u8e72\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u52a8\u4f5c\u63a7\u5236\", \"\u51a0\u72b6\u9762\u7a33\u5b9a\"], \n                        exercises: [\n                            \"\u9759\u6001\u5206\u817f\u8e72\u4fdd\u6301\uff0830\u79d2\uff09\",\n                            \"\u6297\u65cb\u8f6c\u8bad\u7ec3\uff08\u5982\u5e15\u6d1b\u592b\u63a8\uff09\",\n                            \"\u6ce1\u6cab\u8f74\u653e\u677e\u80a1\u56db\u5934\u808c\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u5f13\u6b65\u6a21\u5f0f\u826f\u597d\uff0c\u662f\u4f18\u79c0\u7684\u4e0b\u80a2\u8bad\u7ec3\u52a8\u4f5c\u3002\" \n                    }\n                }\n            },\n            {\n                id: 4,\n                name: \"\u80a9\u90e8\u6d3b\u52a8\u5ea6\",\n                fullName: \"\u80a9\u90e8\u590d\u5408\u6d3b\u52a8\u5ea6\",\n                purpose: \"\u8bc4\u4f30\u53cc\u80a9\u5728\u76f8\u53cd\u65b9\u5411\u4e0a\u7684\u590d\u5408\u6d3b\u52a8\u8303\u56f4\uff0c\u4ee5\u53ca\u80a9\u80db\u4e0e\u80f8\u690e\u7684\u534f\u8c03\u6027\u3002\",\n                description: \"\u53d7\u8bd5\u8005\u53cc\u624b\u63e1\u62f3\uff0c\u540c\u65f6\u5c06\u4e00\u624b\u7ecf\u9888\u540e\u5411\u4e0b\uff0c\u53e6\u4e00\u624b\u7ecf\u8170\u80cc\u4e0a\u4f38\uff0c\u6d4b\u91cf\u4e24\u62f3\u95f4\u6700\u77ed\u8ddd\u79bb\u3002\",\n                scoring: {\n                    3: \"\u4e24\u62f3\u8ddd\u79bb\u5728\u4e00\u4e2a\u624b\u957f\u4ee5\u5185\u3002\",\n                    2: \"\u8ddd\u79bb\u5728\u4e00\u5230\u4e00\u70b9\u4e94\u4e2a\u624b\u957f\u95f4\u3002\",\n                    1: \"\u8ddd\u79bb\u8d85\u8fc7\u4e00\u70b9\u4e94\u4e2a\u624b\u957f\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: true,\n                clearingTest: true,\n                ankleClearingTest: false,\n                currentScore: { left: null, right: null, final: null, clearingLeft: null, clearingRight: null },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u80a9\u90e8\u6d3b\u52a8\u51fa\u73b0\u75bc\u75db\u6216\u6e05\u7406\u6d4b\u8bd5\u9633\u6027\uff0c\u5fc5\u987b\u4f18\u5148\u533b\u7597\u8bc4\u4f30\uff0c\u53ef\u80fd\u6d89\u53ca\u80a9\u8896\u6216\u80a9\u5cf0\u4e0b\u95ee\u9898\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u80f8\u690e\u7075\u6d3b\u6027\", \"\u80a9\u540e\u56ca\u7075\u6d3b\u6027\", \"\u80a9\u80db\u9aa8\u63a7\u5236\"], \n                        exercises: [\n                            \"\u4ef0\u5367\u6ce1\u6cab\u8f74\u80f8\u690e\u4f38\u5c55\",\n                            \"\u4fa7\u5367\u80a9\u540e\u56ca\u62c9\u4f38\",\n                            \"\u5899\u89d2\u80f8\u808c\u62c9\u4f38\",\n                            \"\u4ef0\u5367\u5730\u677f\u5929\u4f7f\uff08\u6ed1\u52a8\uff09\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u80a9\u80db\u9aa8\u540e\u7f29\/\u4e0b\u6c89\", \"\u80f8\u690e\u4f38\u5c55\"], \n                        exercises: [\n                            \"\u9760\u5899\u5929\u4f7f\u6ed1\u52a8\uff08\u5f3a\u8c03\u80a9\u80db\u63a7\u5236\uff09\",\n                            \"\u5f39\u529b\u5e26\u9762\u62c9\",\n                            \"YTW\u5b57\u6bcd\u8bad\u7ec3\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u534f\u8c03\u6027\u826f\u597d\uff0c\u8bad\u7ec3\u4e2d\u6ce8\u610f\u4fdd\u6301\u80a9\u80db\u7684\u7a33\u5b9a\u548c\u63a7\u5236\u3002\" \n                    }\n                }\n            },\n            {\n                id: 5,\n                name: \"\u4e3b\u52a8\u76f4\u817f\u4e0a\u62ac\",\n                fullName: \"\u4e3b\u52a8\u76f4\u817f\u4e0a\u62ac\",\n                purpose: \"\u8bc4\u4f30\u5206\u817f\u6a21\u5f0f\u4e2d\u7684\u4e3b\u52a8\u9aa8\u76c6\u63a7\u5236\uff0c\u5305\u62ec\u8158\u7ef3\u808c\u7075\u6d3b\u6027\u4e0e\u5bf9\u4fa7\u817f\u7684\u4e3b\u52a8\u4f38\u5c55\u3002\",\n                description: \"\u4ef0\u5367\uff0c\u53cc\u819d\u4e0b\u57ab\u677f\u3002\u4fdd\u6301\u4e00\u817f\u4f38\u76f4\u8d34\u4e8e\u677f\uff0c\u4e3b\u52a8\u62ac\u8d77\u53e6\u4e00\u817f\uff0c\u6d4b\u91cf\u8e1d\u5173\u8282\u4f4d\u7f6e\u3002\",\n                scoring: {\n                    3: \"\u8e1d\u5173\u8282\u5782\u7ebf\u4f4d\u4e8e\u5927\u817f\u4e2d\u90e8\u4e0eASIS\u4e4b\u95f4\u3002\",\n                    2: \"\u8e1d\u5173\u8282\u5782\u7ebf\u4f4d\u4e8e\u5927\u817f\u4e2d\u90e8\u4e0e\u819d\u5173\u8282\u7ebf\u4e4b\u95f4\u3002\",\n                    1: \"\u8e1d\u5173\u8282\u5782\u7ebf\u4f4e\u4e8e\u819d\u5173\u8282\u7ebf\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: true,\n                clearingTest: false,\n                ankleClearingTest: false,\n                currentScore: { left: null, right: null, final: null },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u62ac\u817f\u65f6\u8170\u80cc\u6216\u817f\u90e8\u75bc\u75db\u9700\u8f6c\u4ecb\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u8158\u7ef3\u808c\u7075\u6d3b\u6027\", \"\u5bf9\u4fa7\u5c48\u9acb\u808c\u7075\u6d3b\u6027\", \"\u9aa8\u76c6\u540e\u503e\u63a7\u5236\"], \n                        exercises: [\n                            \"\u4ef0\u5367\u52a8\u6001\u8158\u7ef3\u808c\u62c9\u4f38\uff08\u5f39\u529b\u5e26\u8f85\u52a9\uff09\",\n                            \"\u534a\u8dea\u59ff\u5c48\u9acb\u808c\u62c9\u4f38\",\n                            \"\u6b7b\u866b\u5b50\u52a8\u4f5c\uff08\u5b66\u4e60\u9aa8\u76c6\u7a33\u5b9a\uff09\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u4e3b\u52a8\u8158\u7ef3\u808c\u67d4\u97e7\", \"\u6838\u5fc3\u7a33\u5b9a\"], \n                        exercises: [\n                            \"\u6539\u826f\u7248\u5355\u817f\u786c\u62c9\uff08\u89e6\u6905\uff09\",\n                            \"\u81c0\u6865\uff08\u5f3a\u8c03\u8158\u7ef3\u808c\u53d1\u529b\uff09\",\n                            \"\u9759\u6001\u8158\u7ef3\u808c\u62c9\u4f38\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u4e3b\u52a8\u5206\u817f\u80fd\u529b\u826f\u597d\uff0c\u662f\u8bb8\u591a\u8fd0\u52a8\u6a21\u5f0f\u7684\u57fa\u7840\u3002\" \n                    }\n                }\n            },\n            {\n                id: 6,\n                name: \"\u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\",\n                fullName: \"\u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\",\n                purpose: \"\u8bc4\u4f30\u5728\u4e0a\u80a2\u95ed\u5408\u94fe\u8fd0\u52a8\u4e2d\uff0c\u8eaf\u5e72\u5728\u77e2\u72b6\u9762\u62b5\u6297\u4f38\u5c55\u3001\u4fdd\u6301\u521a\u6027\u7684\u53cd\u5e94\u6027\u7a33\u5b9a\u6027\u3002\",\n                description: \"\u4fef\u5367\uff0c\u6839\u636e\u6027\u522b\u5c06\u624b\u653e\u5728\u7279\u5b9a\u4f4d\u7f6e\uff08\u7537\uff1a\u989d\u5934\/\u4e0b\u5df4\uff1b\u5973\uff1a\u4e0b\u5df4\/\u9501\u9aa8\uff09\uff0c\u4e00\u6b21\u6027\u5c06\u8eab\u4f53\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\u63a8\u8d77\u3002\",\n                scoring: {\n                    3: \"\u8eab\u4f53\u6574\u4f53\u62ac\u8d77\u65e0\u6ede\u540e\uff08\u7537\u989d\/\u5973\u988f\uff09\u3002\",\n                    2: \"\u8eab\u4f53\u6574\u4f53\u62ac\u8d77\uff08\u7537\u988f\/\u5973\u9501\uff09\u3002\",\n                    1: \"\u65e0\u6cd5\u57282\u5206\u624b\u4f4d\u5b8c\u6210\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: false,\n                clearingTest: true,\n                ankleClearingTest: false,\n                currentScore: { final: null, clearing: null },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u4fef\u5367\u6491\u6216\u4f38\u5c55\u6e05\u7406\u6d4b\u8bd5\u51fa\u73b0\u75bc\u75db\uff08\u5c24\u5176\u662f\u8170\u90e8\uff09\uff0c\u9700\u8f6c\u4ecb\u68c0\u67e5\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u6838\u5fc3\u524d\u4fa7\u6fc0\u6d3b\", \"\u80a9\u80db\u9aa8\u7a33\u5b9a\u6027\", \"\u52a8\u4f5c\u6a21\u5f0f\"], \n                        exercises: [\n                            \"\u8dea\u59ff\u9ad8\u4f4d\u5e73\u677f\u652f\u6491\uff0830-60\u79d2\uff09\",\n                            \"\u8dea\u59ff\u79bb\u5fc3\u4fef\u5367\u6491\",\n                            \"\u6b7b\u866b\u5b50\",\n                            \"\u4ef0\u5367\u8179\u90e8\u6fc0\u6d3b\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u5168\u8eab\u521a\u6027\", \"\u80a9\u80db\u529b\u91cf\"], \n                        exercises: [\n                            \"\u6807\u51c6\u5e73\u677f\u652f\u6491\u8fdb\u9636\uff08\u62ac\u624b\/\u811a\uff09\",\n                            \"\u8dea\u59ff\u6807\u51c6\u4fef\u5367\u6491\",\n                            \"\u5f39\u529b\u5e26\u5212\u8239\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u8eaf\u5e72\u7a33\u5b9a\u6027\u826f\u597d\uff0c\u662f\u529b\u91cf\u8bad\u7ec3\u7684\u91cd\u8981\u57fa\u7840\u3002\" \n                    }\n                }\n            },\n            {\n                id: 7,\n                name: \"\u65cb\u8f6c\u7a33\u5b9a\u6027\",\n                fullName: \"\u65cb\u8f6c\u7a33\u5b9a\u6027\",\n                purpose: \"\u8bc4\u4f30\u8eaf\u5e72\u5728\u5bf9\u6297\u5bf9\u89d2\u7ebf\u6a21\u5f0f\u8fd0\u52a8\u65f6\u7684\u53cd\u5e94\u6027\u591a\u5e73\u9762\u7a33\u5b9a\u4e0e\u63a7\u5236\u80fd\u529b\u3002\",\n                description: \"\u56db\u70b9\u8dea\u59ff\u4e8e\u677f\u4e0a\uff0c\u540c\u65f6\u4f38\u5c55\u540c\u4fa7\u624b\u81c2\u548c\u817f\u81f3\u4e0e\u8eab\u4f53\u5e73\u884c\uff0c\u7136\u540e\u5c48\u66f2\u4f7f\u8098\u819d\u76f8\u89e6\u4e8e\u677f\u4e0a\u65b9\uff0c\u518d\u4f38\u5c55\uff0c\u6700\u540e\u6536\u56de\u3002\",\n                scoring: {\n                    3: \"\u80fd\u6b63\u786e\u5b8c\u6210\u540c\u4fa7\u52a8\u4f5c\uff0c\u80a2\u4f53\u5728\u677f\u4e0a\u65b9\u89e6\u78b0\u3002\",\n                    2: \"\u80fd\u6b63\u786e\u5b8c\u6210\u5bf9\u4fa7\uff08\u5f02\u4fa7\uff09\u52a8\u4f5c\uff0c\u8098\u819d\u5728\u677f\u4e0a\u65b9\u89e6\u78b0\u3002\",\n                    1: \"\u65e0\u6cd5\u5b8c\u6210\u5bf9\u4fa7\u52a8\u4f5c\u3002\",\n                    0: \"\u4efb\u4f55\u90e8\u4f4d\u51fa\u73b0\u75bc\u75db\u3002\"\n                },\n                bilateral: true,\n                clearingTest: true,\n                ankleClearingTest: false,\n                currentScore: { left: null, right: null, final: null, clearingLeft: null, clearingRight: null },\n                corrections: {\n                    0: { \n                        priority: \"\u533b\u7597\u8f6c\u4ecb\", \n                        desc: \"\u65cb\u8f6c\u6216\u5c48\u66f2\u6e05\u7406\u6d4b\u8bd5\u51fa\u73b0\u75bc\u75db\uff08\u5c24\u5176\u662f\u8170\u90e8\uff09\u9700\u8f6c\u4ecb\u3002\" \n                    },\n                    1: { \n                        priority: \"\u9ad8\", \n                        focus: [\"\u57fa\u7840\u6838\u5fc3\u7a33\u5b9a\", \"\u56db\u80a2\u534f\u8c03\"], \n                        exercises: [\n                            \"\u9759\u6001\u9e1f\u72d7\u5f0f\u4fdd\u6301\uff08\u4f38\u5c55\u4f4d\uff09\",\n                            \"\u56db\u70b9\u8dea\u59ff\u9759\u6001\u5e73\u8861\",\n                            \"\u4ef0\u5367\u4ea4\u66ff\u811a\u8ddf\u6ed1\u52a8\"\n                        ] \n                    },\n                    2: { \n                        priority: \"\u4e2d\", \n                        focus: [\"\u5bf9\u89d2\u7ebf\u534f\u8c03\", \"\u6297\u65cb\u8f6c\"], \n                        exercises: [\n                            \"\u52a8\u6001\u9e1f\u72d7\u5f0f\uff08\u6162\u901f\uff09\",\n                            \"\u5e73\u677f\u652f\u6491\u62ac\u624b\",\n                            \"\u732b\u9a7c\u5f0f\u6d41\u52a8\"\n                        ] \n                    },\n                    3: { \n                        priority: \"\u4f4e\", \n                        desc: \"\u65cb\u8f6c\u7a33\u5b9a\u4e0e\u63a7\u5236\u80fd\u529b\u4f18\u79c0\u3002\" \n                    }\n                }\n            }\n        ];\n        let currentTestIndex = 0;\n        let clientInfo = {\n            name: \"\",\n            date: new Date().toISOString().split('T')[0],\n            gender: \"\",\n            age: \"\",\n            sport: \"\"\n        };\n        document.addEventListener('DOMContentLoaded', function() {\n            document.getElementById('clientModal').style.display = 'flex';\n            document.getElementById('clientDate').value = clientInfo.date;\n            initTestList();\n            updateScoreTable();\n            loadTest(currentTestIndex);\n            bindEventListeners();\n        });\n        function initTestList() {\n            const container = document.getElementById('testList');\n            container.innerHTML = '';\n            fmsTests.forEach((test, idx) => {\n                const item = document.createElement('div');\n                item.className = `test-item ${idx === currentTestIndex ? 'active' : ''}`;\n                let statusText = \"\u672a\u6d4b\u8bd5\";\n                if (test.bilateral) {\n                    if (test.currentScore.left !== null || test.currentScore.right !== null) {\n                        statusText = `\u5de6:${test.currentScore.left !== null ? test.currentScore.left : '-'} \u53f3:${test.currentScore.right !== null ? test.currentScore.right : '-'}`;\n                    }\n                } else {\n                    if (test.currentScore.final !== null) statusText = `\u5f97\u5206:${test.currentScore.final}`;\n                }\n                item.innerHTML = `<h3>${test.name}<\/h3><p>${test.purpose.substring(0, 75)}...<\/p><div class=\"test-status\">\u72b6\u6001: ${statusText}<\/div>`;\n                item.onclick = () => { currentTestIndex = idx; loadTest(idx); initTestList(); };\n                container.appendChild(item);\n            });\n        }\n        function loadTest(index) {\n            const test = fmsTests[index];\n            const contentEl = document.getElementById('testContent');\n            let bilateralHtml = '';\n            if (test.bilateral) {\n                bilateralHtml = `<div class=\"bilateral-scoring\">\n                    <h4>\u53cc\u4fa7\u8bc4\u5206<\/h4><div class=\"side-scoring\">\n                        <div><h5>\u5de6\u4fa7\u5f97\u5206<\/h5><div class=\"side-buttons\">${\n                            [3,2,1,0].map(s=>`<button class=\"side-btn ${test.currentScore.left===s?'selected':''}\" data-side=\"left\" data-score=\"${s}\">${s}<\/button>`).join('')\n                        }<\/div><\/div>\n                        <div><h5>\u53f3\u4fa7\u5f97\u5206<\/h5><div class=\"side-buttons\">${\n                            [3,2,1,0].map(s=>`<button class=\"side-btn ${test.currentScore.right===s?'selected':''}\" data-side=\"right\" data-score=\"${s}\">${s}<\/button>`).join('')\n                        }<\/div><\/div>\n                    <\/div><\/div>`;\n            }\n            let clearingHtml = '';\n            if (test.clearingTest) {\n                if (test.id === 4 || test.id === 7) {\n                    \/\/ \u80a9\u90e8\u6d3b\u52a8\u5ea6\u548c\u65cb\u8f6c\u7a33\u5b9a\u6027\u7684\u6392\u9664\u6027\u68c0\u67e5 - \u4f7f\u7528\u8868\u683c\u5f62\u5f0f\n                    clearingHtml = `<div class=\"clearing-test\">\n                        <h4> \u6392\u9664\u6027\u68c0\u67e5<\/h4>\n                        <p>\u68c0\u67e5\u662f\u5426\u5b58\u5728\u75bc\u75db\u53cd\u5e94\u3002\u7ed3\u679c\u4e3a\"\u9633\u6027\"(+)\u8868\u793a\u6709\u75bc\u75db\uff0c\u8be5\u6d4b\u8bd5\u6700\u7ec8\u5f97\u5206\u4e3a0\u3002<\/p>\n                        <table class=\"exclusion-check-table\">\n                            <thead>\n                                <tr>\n                                    <th>\u68c0\u67e5\u90e8\u4f4d<\/th>\n                                    <th>\u5de6\u4fa7<\/th>\n                                    <th>\u53f3\u4fa7<\/th>\n                                <\/tr>\n                            <\/thead>\n                            <tbody>\n                                <tr>\n                                    <td>\u75bc\u75db\u53cd\u5e94\u68c0\u67e5<\/td>\n                                    <td>\n                                        <div class=\"exclusion-buttons\">\n                                            <button class=\"exclusion-btn ${test.currentScore.clearingLeft===true?'positive':''}\" \n                                                data-side=\"left\" data-result=\"positive\" data-type=\"general\">\u9633\u6027(+)<\/button>\n                                            <button class=\"exclusion-btn ${test.currentScore.clearingLeft===false?'negative':''}\" \n                                                data-side=\"left\" data-result=\"negative\" data-type=\"general\">\u9634\u6027(-)<\/button>\n                                        <\/div>\n                                    <\/td>\n                                    <td>\n                                        <div class=\"exclusion-buttons\">\n                                            <button class=\"exclusion-btn ${test.currentScore.clearingRight===true?'positive':''}\" \n                                                data-side=\"right\" data-result=\"positive\" data-type=\"general\">\u9633\u6027(+)<\/button>\n                                            <button class=\"exclusion-btn ${test.currentScore.clearingRight===false?'negative':''}\" \n                                                data-side=\"right\" data-result=\"negative\" data-type=\"general\">\u9634\u6027(-)<\/button>\n                                        <\/div>\n                                    <\/td>\n                                <\/tr>\n                            <\/tbody>\n                        <\/table>\n                        <p style=\"font-size:0.9em; margin-top:15px; color:#666;\">\n                            <strong>\u6ce8\u610f\uff1a<\/strong>\u6700\u7ec8\u5f97\u5206\uff1a\u53d6\u5de6\u53f3\u4e24\u4fa7\u8f83\u4f4e\u5206\u3002\u82e5\u6392\u9664\u68c0\u67e5\u4efb\u610f\u4e00\u4fa7\u4e3a\u9633\u6027\uff0c\u6700\u7ec8\u5f97\u5206\u4e3a0\u3002\n                        <\/p>\n                    <\/div>`;\n                } else if (test.id === 6) {\n                    \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\u7684\u6392\u9664\u6027\u68c0\u67e5 - \u53ea\u6709\u6574\u4f53\u68c0\u67e5\n                    clearingHtml = `<div class=\"clearing-test\">\n                        <h4> \u6392\u9664\u6027\u68c0\u67e5<\/h4>\n                        <p>\u68c0\u67e5\u662f\u5426\u5b58\u5728\u75bc\u75db\u53cd\u5e94\u3002<\/p>\n                        <div style=\"text-align: center; margin-top: 15px;\">\n                            <h5>\u7ed3\u679c<\/h5>\n                            <div style=\"display: inline-flex; gap: 15px; margin-top: 10px;\">\n                                <button class=\"clearing-btn ${test.currentScore.clearing===true?'positive': test.currentScore.clearing===false?'negative':''}\" data-result=\"positive\" data-type=\"general\">\u9633\u6027(+)<\/button>\n                                <button class=\"clearing-btn ${test.currentScore.clearing===false?'negative': test.currentScore.clearing===true?'positive':''}\" data-result=\"negative\" data-type=\"general\">\u9634\u6027(-)<\/button>\n                            <\/div>\n                        <\/div>\n                        <p style=\"font-size:0.9em; margin-top:15px; color:#666;\"><strong>\u6ce8\u610f\uff1a<\/strong>\u7ed3\u679c\u4e3a\"\u9633\u6027\"(+)\u8868\u793a\u6709\u75bc\u75db\uff0c\u8be5\u6d4b\u8bd5\u6700\u7ec8\u5f97\u5206\u4e3a0\u3002<\/p>\n                    <\/div>`;\n                } else if (test.id === 3) {\n                    \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\u7684\u6392\u9664\u6027\u68c0\u67e5 - \u5305\u62ec\u6574\u4f53\u548c\u8e1d\u5173\u8282\u6392\u9664\u6027\u6d4b\u8bd5\n                    clearingHtml = `<div class=\"clearing-test\">\n                        <h4> \u6392\u9664\u6027\u68c0\u67e5<\/h4>\n                        <p>\u68c0\u67e5\u662f\u5426\u5b58\u5728\u75bc\u75db\u53cd\u5e94\u3002\u7ed3\u679c\u4e3a\"\u9633\u6027\"(+)\u8868\u793a\u6709\u75bc\u75db\uff0c\u8be5\u6d4b\u8bd5\u6700\u7ec8\u5f97\u5206\u4e3a0\u3002<\/p>`;\n                    \/\/ \u6574\u4f53\u6392\u9664\u6027\u68c0\u67e5\n                    clearingHtml += `<div style=\"margin-bottom: 20px;\">\n                        <h5>\u6574\u4f53\u75bc\u75db\u53cd\u5e94\u68c0\u67e5<\/h5>\n                        <div style=\"display: inline-flex; gap: 15px; margin-top: 10px;\">\n                            <button class=\"clearing-btn ${test.currentScore.clearing===true?'positive': test.currentScore.clearing===false?'negative':''}\" data-result=\"positive\" data-type=\"general\">\u9633\u6027(+)<\/button>\n                            <button class=\"clearing-btn ${test.currentScore.clearing===false?'negative': test.currentScore.clearing===true?'positive':''}\" data-result=\"negative\" data-type=\"general\">\u9634\u6027(-)<\/button>\n                        <\/div>\n                    <\/div>`;\n                    \/\/ \u8e1d\u5173\u8282\u6392\u9664\u6027\u6d4b\u8bd5\n                    if (test.ankleClearingTest) {\n                        clearingHtml += `<div class=\"ankle-clearing-test\">\n                            <h5> \u8e1d\u5173\u8282\u6392\u9664\u6027\u6d4b\u8bd5<\/h5>\n                            <div class=\"ankle-clearing-instruction\">\n                                <p><strong>\u6d4b\u8bd5\u65b9\u6cd5\uff1a<\/strong>\u8bc4\u4f30\u8e1d\u5173\u8282\u5728\u76f4\u7ebf\u5f13\u6b65\u8e72\u52a8\u4f5c\u4e2d\u662f\u5426\u6709\u75bc\u75db\u53cd\u5e94\u548c\u7075\u6d3b\u6027\u9650\u5236\u3002<\/p>\n                                <p><strong>\u6d4b\u91cf\u6807\u51c6\uff1a<\/strong>\u89c2\u5bdf\u819d\u76d6\u76f8\u5bf9\u4e8e\u524d\u817f\u5185\u8e1d\u7684\u4f4d\u7f6e\u3002<\/p>\n                            <\/div>\n                            <table class=\"exclusion-check-table\">\n                                <thead>\n                                    <tr>\n                                        <th>\u8bc4\u4f30\u7c7b\u578b<\/th>\n                                        <th>\u5de6\u4fa7<\/th>\n                                        <th>\u53f3\u4fa7<\/th>\n                                    <\/tr>\n                                <\/thead>\n                                <tbody>\n                                    <tr>\n                                        <td>\u75bc\u75db\u53cd\u5e94<\/td>\n                                        <td>\n                                            <div class=\"exclusion-buttons\">\n                                                <button class=\"exclusion-btn ${test.currentScore.ankleClearingLeft===true?'positive':''}\" \n                                                    data-side=\"left\" data-result=\"positive\" data-type=\"ankle-pain\">\u9633\u6027(+)<\/button>\n                                                <button class=\"exclusion-btn ${test.currentScore.ankleClearingLeft===false?'negative':''}\" \n                                                    data-side=\"left\" data-result=\"negative\" data-type=\"ankle-pain\">\u9634\u6027(-)<\/button>\n                                            <\/div>\n                                        <\/td>\n                                        <td>\n                                            <div class=\"exclusion-buttons\">\n                                                <button class=\"exclusion-btn ${test.currentScore.ankleClearingRight===true?'positive':''}\" \n                                                    data-side=\"right\" data-result=\"positive\" data-type=\"ankle-pain\">\u9633\u6027(+)<\/button>\n                                                <button class=\"exclusion-btn ${test.currentScore.ankleClearingRight===false?'negative':''}\" \n                                                    data-side=\"right\" data-result=\"negative\" data-type=\"ankle-pain\">\u9634\u6027(-)<\/button>\n                                            <\/div>\n                                        <\/td>\n                                    <\/tr>\n                                    <tr>\n                                        <td>\u7075\u6d3b\u6027\u8bc4\u4f30<\/td>\n                                        <td>\n                                            <div class=\"ankle-flexibility-section\" id=\"ankleFlexibilityLeft\">\n                                                <div class=\"flexibility-options\">\n                                                    <div class=\"flexibility-option ${test.currentScore.ankleFlexibilityLeft==='green'?'selected':''}\" \n                                                        data-side=\"left\" data-result=\"green\">\n                                                        <div class=\"flexibility-visual\">\n                                                            <div class=\"visual-demo\">\n                                                                <div class=\"foot-visual\"><\/div>\n                                                                <div class=\"ankle-visual\"><\/div>\n                                                                <div class=\"knee-visual green-position\"><\/div>\n                                                                <div class=\"marker-line\"><\/div>\n                                                                <div class=\"inner-ankle-marker\"><\/div>\n                                                            <\/div>\n                                                        <\/div>\n                                                        <div class=\"flexibility-info\">\n                                                            <span class=\"flexibility-label green-text\">\u7eff\u533a<\/span>\n                                                            <span class=\"flexibility-desc\">\u819d\u8d85\u8fc7\u524d\u817f\u5185\u8e1d<\/span>\n                                                            <span class=\"flexibility-detail\">\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u6ee1\u8db3\u8981\u6c42<\/span>\n                                                        <\/div>\n                                                        <div class=\"flexibility-check\"><\/div>\n                                                    <\/div>\n                                                    <div class=\"flexibility-option ${test.currentScore.ankleFlexibilityLeft==='yellow'?'selected':''}\" \n                                                        data-side=\"left\" data-result=\"yellow\">\n                                                        <div class=\"flexibility-visual\">\n                                                            <div class=\"visual-demo\">\n                                                                <div class=\"foot-visual\"><\/div>\n                                                                <div class=\"ankle-visual\"><\/div>\n                                                                <div class=\"knee-visual yellow-position\"><\/div>\n                                                                <div class=\"marker-line\"><\/div>\n                                                                <div class=\"inner-ankle-marker\"><\/div>\n                                                            <\/div>\n                                                        <\/div>\n                                                        <div class=\"flexibility-info\">\n                                                            <span class=\"flexibility-label yellow-text\">\u9ec4\u533a<\/span>\n                                                            <span class=\"flexibility-desc\">\u819d\u5728\u524d\u817f\u5185\u8e1d\u5bbd\u5ea6\u5185<\/span>\n                                                            <span class=\"flexibility-detail\">\u53ef\u80fd\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236<\/span>\n                                                        <\/div>\n                                                        <div class=\"flexibility-check\"><\/div>\n                                                    <\/div>\n                                                    <div class=\"flexibility-option ${test.currentScore.ankleFlexibilityLeft==='red'?'selected':''}\" \n                                                        data-side=\"left\" data-result=\"red\">\n                                                        <div class=\"flexibility-visual\">\n                                                            <div class=\"visual-demo\">\n                                                                <div class=\"foot-visual\"><\/div>\n                                                                <div class=\"ankle-visual\"><\/div>\n                                                                <div class=\"knee-visual red-position\"><\/div>\n                                                                <div class=\"marker-line\"><\/div>\n                                                                <div class=\"inner-ankle-marker\"><\/div>\n                                                            <\/div>\n                                                        <\/div>\n                                                        <div class=\"flexibility-info\">\n                                                            <span class=\"flexibility-label red-text\">\u7ea2\u533a<\/span>\n                                                            <span class=\"flexibility-desc\">\u819d\u672a\u5230\u8fbe\u524d\u817f\u5185\u8e1d<\/span>\n                                                            <span class=\"flexibility-detail\">\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236<\/span>\n                                                        <\/div>\n                                                        <div class=\"flexibility-check\"><\/div>\n                                                    <\/div>\n                                                <\/div>\n                                            <\/div>\n                                        <\/td>\n                                        <td>\n                                            <div class=\"ankle-flexibility-section\" id=\"ankleFlexibilityRight\">\n                                                <div class=\"flexibility-options\">\n                                                    <div class=\"flexibility-option ${test.currentScore.ankleFlexibilityRight==='green'?'selected':''}\" \n                                                        data-side=\"right\" data-result=\"green\">\n                                                        <div class=\"flexibility-visual\">\n                                                            <div class=\"visual-demo\">\n                                                                <div class=\"foot-visual\"><\/div>\n                                                                <div class=\"ankle-visual\"><\/div>\n                                                                <div class=\"knee-visual green-position\"><\/div>\n                                                                <div class=\"marker-line\"><\/div>\n                                                                <div class=\"inner-ankle-marker\"><\/div>\n                                                            <\/div>\n                                                        <\/div>\n                                                        <div class=\"flexibility-info\">\n                                                            <span class=\"flexibility-label green-text\">\u7eff\u533a<\/span>\n                                                            <span class=\"flexibility-desc\">\u819d\u8d85\u8fc7\u524d\u817f\u5185\u8e1d<\/span>\n                                                            <span class=\"flexibility-detail\">\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u6ee1\u8db3\u8981\u6c42<\/span>\n                                                        <\/div>\n                                                        <div class=\"flexibility-check\"><\/div>\n                                                    <\/div>\n                                                    <div class=\"flexibility-option ${test.currentScore.ankleFlexibilityRight==='yellow'?'selected':''}\" \n                                                        data-side=\"right\" data-result=\"yellow\">\n                                                        <div class=\"flexibility-visual\">\n                                                            <div class=\"visual-demo\">\n                                                                <div class=\"foot-visual\"><\/div>\n                                                                <div class=\"ankle-visual\"><\/div>\n                                                                <div class=\"knee-visual yellow-position\"><\/div>\n                                                                <div class=\"marker-line\"><\/div>\n                                                                <div class=\"inner-ankle-marker\"><\/div>\n                                                            <\/div>\n                                                        <\/div>\n                                                        <div class=\"flexibility-info\">\n                                                            <span class=\"flexibility-label yellow-text\">\u9ec4\u533a<\/span>\n                                                            <span class=\"flexibility-desc\">\u819d\u5728\u524d\u817f\u5185\u8e1d\u5bbd\u5ea6\u5185<\/span>\n                                                            <span class=\"flexibility-detail\">\u53ef\u80fd\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236<\/span>\n                                                        <\/div>\n                                                        <div class=\"flexibility-check\"><\/div>\n                                                    <\/div>\n                                                    <div class=\"flexibility-option ${test.currentScore.ankleFlexibilityRight==='red'?'selected':''}\" \n                                                        data-side=\"right\" data-result=\"red\">\n                                                        <div class=\"flexibility-visual\">\n                                                            <div class=\"visual-demo\">\n                                                                <div class=\"foot-visual\"><\/div>\n                                                                <div class=\"ankle-visual\"><\/div>\n                                                                <div class=\"knee-visual red-position\"><\/div>\n                                                                <div class=\"marker-line\"><\/div>\n                                                                <div class=\"inner-ankle-marker\"><\/div>\n                                                            <\/div>\n                                                        <\/div>\n                                                        <div class=\"flexibility-info\">\n                                                            <span class=\"flexibility-label red-text\">\u7ea2\u533a<\/span>\n                                                            <span class=\"flexibility-desc\">\u819d\u672a\u5230\u8fbe\u524d\u817f\u5185\u8e1d<\/span>\n                                                            <span class=\"flexibility-detail\">\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236<\/span>\n                                                        <\/div>\n                                                        <div class=\"flexibility-check\"><\/div>\n                                                    <\/div>\n                                                <\/div>\n                                            <\/div>\n                                        <\/td>\n                                    <\/tr>\n                                <\/tbody>\n                            <\/table>\n                            <div class=\"ankle-test-instructions\">\n                                <h6> \u8bc4\u4f30\u6807\u51c6\u8bf4\u660e\uff1a<\/h6>\n                                <div class=\"instruction-grid\">\n                                    <div class=\"instruction-item\">\n                                        <div class=\"color-indicator green\"><\/div>\n                                        <div class=\"instruction-content\">\n                                            <strong>\u7eff\u533a\uff1a<\/strong>\u819d\u76d6\u8d85\u8fc7\u524d\u817f\u5185\u8e1d\uff0c\u811a\u8ddf\u4fdd\u6301\u8d34\u5730 - \u8868\u660e\u8e1d\u5173\u8282\u5df2\u6ee1\u8db3\u7075\u6d3b\u6027\u8981\u6c42\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"instruction-item\">\n                                        <div class=\"color-indicator yellow\"><\/div>\n                                        <div class=\"instruction-content\">\n                                            <strong>\u9ec4\u533a\uff1a<\/strong>\u819d\u76d6\u5728\u524d\u817f\u5185\u8e1d\u5bbd\u5ea6\u5185\uff0c\u811a\u8ddf\u4fdd\u6301\u8d34\u5730 - \u8868\u660e\u53ef\u80fd\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"instruction-item\">\n                                        <div class=\"color-indicator red\"><\/div>\n                                        <div class=\"instruction-content\">\n                                            <strong>\u7ea2\u533a\uff1a<\/strong>\u819d\u76d6\u672a\u5230\u8fbe\u524d\u817f\u5185\u8e1d\uff0c\u811a\u8ddf\u4fdd\u6301\u8d34\u5730 - \u8868\u660e\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <p style=\"font-size: 0.85em; margin-top: 10px;\">\n                                    <strong>\u64cd\u4f5c\u63d0\u793a\uff1a<\/strong>\u70b9\u51fb\u4e0a\u65b9\u5bf9\u5e94\u7684\u533a\u57df\u5361\u7247\u6765\u9009\u62e9\u8bc4\u4f30\u7ed3\u679c\u3002\u6bcf\u4e2a\u533a\u57df\u90fd\u6709\u89c6\u89c9\u793a\u610f\u56fe\u5e2e\u52a9\u5224\u65ad\u3002\n                                <\/p>\n                            <\/div>\n                            <div class=\"ankle-test-instructions\">\n                                <h6> \u989d\u5916\u6ce8\u610f\u4e8b\u9879\uff1a<\/h6>\n                                <ul>\n                                    <li><strong>\u75bc\u75db\uff1a<\/strong>\u5982\u53d7\u8bd5\u8005\u5728\u6b64\u6d4b\u8bd5\u4e2d\u7ecf\u5386\u75bc\u75db\uff0c\u5728\u8bc4\u5206\u4e2d\u6807\u8bb0\u4e3a\u75bc\u75db\u9633\u6027\uff0c\u5e76\u5efa\u8bae\u8f6c\u8bca\u7ed9\u533b\u7597\u4e13\u4e1a\u4eba\u5458\u3002<\/li>\n                                    <li><strong>\u62c9\u4f38\u611f\uff1a<\/strong>\u5982\u53d7\u8bd5\u8005\u611f\u53d7\u5230\u8e1d\u5173\u8282\u7684\u62c9\u4f38\u6216\u7d27\u7ef7\u611f\uff0c\u4e14\u901a\u8fc7\u8f6f\u7ec4\u7ec7\u5904\u7406\u6216\u62c9\u4f38\u5e94\u7528\u672a\u7f13\u89e3\uff0c\u9700\u8981\u533b\u7597\u4e13\u4e1a\u4eba\u5458\u7684\u8fdb\u4e00\u6b65\u8bc4\u4f30\u3002<\/li>\n                                    <li><strong>\u5bf9\u79f0\u6027\u6bd4\u8f83\uff1a<\/strong>\u6ce8\u610f\u6bd4\u8f83\u5de6\u53f3\u4fa7\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u7684\u5dee\u5f02\uff0c\u5dee\u5f02\u8fc7\u5927\u53ef\u80fd\u63d0\u793a\u6f5c\u5728\u95ee\u9898\u3002<\/li>\n                                <\/ul>\n                            <\/div>\n                        <\/div>`;\n                    }\n                    clearingHtml += `<p style=\"font-size:0.9em; margin-top:15px; color:#666;\">\n                        <strong>\u6ce8\u610f\uff1a<\/strong>\u82e5\u6574\u4f53\u6392\u9664\u68c0\u67e5\u6216\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\u4e3a\u9633\u6027\uff0c\u6700\u7ec8\u5f97\u5206\u4e3a0\u3002\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u8bc4\u4f30\u7528\u4e8e\u8bc6\u522b\u6f5c\u5728\u7684\u7075\u6d3b\u6027\u9650\u5236\u3002\n                    <\/p>\n                    <\/div>`;\n                }\n            }\n            contentEl.innerHTML = `\n                <div class=\"test-header\">\n                    <h2>${test.name}<\/h2><div class=\"test-number\">${test.id}<\/div>\n                <\/div>\n                <div class=\"test-description\">\n                    <h3> \u6d4b\u8bd5\u76ee\u7684<\/h3><p>${test.purpose}<\/p>\n                    <h3 style=\"margin-top:20px;\"> \u8bc4\u5206\u6807\u51c6<\/h3>\n                    <div class=\"scoring-section\">\n                        <div class=\"score-options\">\n                            ${[3,2,1,0].map(score => `\n                                <div class=\"score-option score-${score} ${!test.bilateral && test.currentScore.final===score ? 'selected' : ''}\" data-score=\"${score}\">\n                                    <span class=\"score-value\">${score}<\/span><strong>${score}\u5206<\/strong>\n                                    <div class=\"score-criteria\">${test.scoring[score]}<\/div>\n                                <\/div>`).join('')}\n                        <\/div>\n                        ${bilateralHtml}\n                        ${clearingHtml}\n                        <p style=\"margin-top:15px; font-size:0.95em;\"><strong>\u6700\u7ec8\u5f97\u5206\uff1a<\/strong>${test.bilateral ? '\u53d6\u5de6\u53f3\u4e24\u4fa7\u8f83\u4f4e\u5206' : '\u5373\u6d4b\u8bd5\u5f97\u5206'}\u3002\u82e5\u6392\u9664\u68c0\u67e5\u4e3a\u9633\u6027\uff0c\u6700\u7ec8\u5f97\u5206\u4e3a0\u3002<\/p>\n                        <button class=\"correction-btn\" id=\"showCorrectionBtn\"> \u67e5\u770b\u9488\u5bf9\u6027\u7684\u7ea0\u6b63\u5efa\u8bae\n                        <\/button>\n                    <\/div>\n                <\/div>\n                <div class=\"buttons\">\n                    <button class=\"btn btn-secondary\" id=\"prevTestBtn\" ${index===0?'disabled':''}> \u4e0a\u4e00\u9879<\/button>\n                    <button class=\"btn btn-primary\" id=\"nextTestBtn\">${index === fmsTests.length-1 ? '\u5b8c\u6210\u7b5b\u67e5' : '\u4e0b\u4e00\u9879'}<\/button>\n                <\/div>\n            `;\n            bindTestSpecificEvents(test);\n        }\n        function bindTestSpecificEvents(test) {\n            if (!test.bilateral) {\n                document.querySelectorAll('#app .score-option').forEach(opt => {\n                    opt.onclick = () => {\n                        \/\/ \u68c0\u67e5\u6392\u9664\u6027\u68c0\u67e5\u662f\u5426\u6709\u9633\u6027\uff08\u4ec5\u9488\u5bf9\u6709\u6392\u9664\u6027\u6d4b\u8bd5\u7684\u9879\u76ee\uff09\n                        let hasPain = false;\n                        if (test.clearingTest && test.id === 6) {\n                            \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\uff1a\u68c0\u67e5\u6574\u4f53\u6392\u9664\u6027\u6d4b\u8bd5\n                            hasPain = test.currentScore.clearing;\n                        }\n                        if (hasPain) {\n                            alert('\u6392\u9664\u6027\u68c0\u67e5\u4e3a\u9633\u6027\uff0c\u6700\u7ec8\u5f97\u5206\u5fc5\u987b\u4e3a0\u3002\u8bf7\u5148\u4fee\u6539\u6392\u9664\u6027\u68c0\u67e5\u7ed3\u679c\u3002');\n                            return;\n                        }\n                        document.querySelectorAll('#app .score-option').forEach(o => o.classList.remove('selected'));\n                        opt.classList.add('selected');\n                        test.currentScore.final = parseInt(opt.dataset.score);\n                        updateScoreTable();\n                        initTestList();\n                    };\n                });\n            }\n            if (test.bilateral) {\n                document.querySelectorAll('#app .side-btn').forEach(btn => {\n                    btn.onclick = function() {\n                        \/\/ \u68c0\u67e5\u6392\u9664\u6027\u68c0\u67e5\u662f\u5426\u6709\u9633\u6027\n                        let hasPain = false;\n                        if (test.clearingTest) {\n                            if (test.id === 4 || test.id === 7) {\n                                hasPain = test.currentScore.clearingLeft || test.currentScore.clearingRight;\n                            } else if (test.id === 3) {\n                                \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\uff1a\u68c0\u67e5\u6574\u4f53\u548c\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\n                                hasPain = test.currentScore.clearing || \n                                         test.currentScore.ankleClearingLeft || \n                                         test.currentScore.ankleClearingRight;\n                            }\n                        }\n                        if (hasPain) {\n                            alert('\u6392\u9664\u6027\u68c0\u67e5\u4e3a\u9633\u6027\uff0c\u6700\u7ec8\u5f97\u5206\u5fc5\u987b\u4e3a0\u3002\u8bf7\u5148\u4fee\u6539\u6392\u9664\u6027\u68c0\u67e5\u7ed3\u679c\u3002');\n                            return;\n                        }\n                        const side = this.dataset.side;\n                        const score = parseInt(this.dataset.score);\n                        test.currentScore[side] = score;\n                        \/\/ \u8ba1\u7b97\u6700\u7ec8\u5f97\u5206\n                        if (test.currentScore.left !== null && test.currentScore.right !== null) {\n                            test.currentScore.final = Math.min(test.currentScore.left, test.currentScore.right);\n                        } else if (test.currentScore.left !== null) {\n                            test.currentScore.final = test.currentScore.left;\n                        } else if (test.currentScore.right !== null) {\n                            test.currentScore.final = test.currentScore.right;\n                        }\n                        document.querySelectorAll(`#app .side-btn[data-side=\"${side}\"]`).forEach(b => b.classList.remove('selected'));\n                        this.classList.add('selected');\n                        updateScoreTable();\n                        initTestList();\n                    };\n                });\n            }\n            if (test.clearingTest) {\n                \/\/ \u5904\u7406\u6392\u9664\u6027\u68c0\u67e5\u6309\u94ae\u70b9\u51fb\n                document.querySelectorAll('#app .clearing-btn, .exclusion-btn').forEach(btn => {\n                    btn.onclick = function() {\n                        const result = this.dataset.result;\n                        const type = this.dataset.type; \/\/ 'general', 'ankle-pain', \u6216 'ankle-flexibility'\n                        const side = this.dataset.side; \/\/ 'left', 'right', \u6216 undefined\n                        if (test.id === 6) {\n                            \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491 - \u6574\u4f53\u6392\u9664\u6027\u68c0\u67e5\n                            if (type === 'general') {\n                                const painResult = result === 'positive';\n                                test.currentScore.clearing = painResult;\n                                \/\/ \u66f4\u65b0\u6309\u94ae\u6837\u5f0f\n                                const parent = this.parentElement;\n                                parent.querySelectorAll('.clearing-btn').forEach(b => {\n                                    b.classList.remove('positive', 'negative');\n                                });\n                                this.classList.add(painResult ? 'positive' : 'negative');\n                                if (painResult) {\n                                    \/\/ \u5982\u679c\u6709\u75bc\u75db\uff0c\u6700\u7ec8\u5f97\u5206\u4e3a0\n                                    test.currentScore.final = 0;\n                                    \/\/ \u6e05\u7a7a\u8bc4\u5206\u9009\u62e9\n                                    document.querySelectorAll('#app .score-option.selected').forEach(el => {\n                                        el.classList.remove('selected');\n                                    });\n                                } else {\n                                    \/\/ \u5982\u679c\u6ca1\u6709\u75bc\u75db\uff0c\u6062\u590d\u8bc4\u5206\u9009\u62e9\n                                    if (test.currentScore.final === 0) {\n                                        test.currentScore.final = null;\n                                    }\n                                }\n                            }\n                        } else if (test.id === 3) {\n                            \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\n                            if (type === 'general') {\n                                \/\/ \u6574\u4f53\u6392\u9664\u6027\u68c0\u67e5\n                                const painResult = result === 'positive';\n                                test.currentScore.clearing = painResult;\n                                \/\/ \u66f4\u65b0\u6309\u94ae\u6837\u5f0f\n                                const parent = this.parentElement;\n                                parent.querySelectorAll('.clearing-btn').forEach(b => {\n                                    b.classList.remove('positive', 'negative');\n                                });\n                                this.classList.add(painResult ? 'positive' : 'negative');\n                            } else if (type === 'ankle-pain') {\n                                \/\/ \u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\n                                const painResult = result === 'positive';\n                                const sideKey = `ankleClearing${side.charAt(0).toUpperCase() + side.slice(1)}`;\n                                test.currentScore[sideKey] = painResult;\n                                \/\/ \u66f4\u65b0\u6309\u94ae\u6837\u5f0f\n                                const parent = this.parentElement;\n                                parent.querySelectorAll('.exclusion-btn').forEach(b => {\n                                    if (b.dataset.type === 'ankle-pain' && b.dataset.side === side) {\n                                        b.classList.remove('positive', 'negative');\n                                    }\n                                });\n                                this.classList.add(painResult ? 'positive' : 'negative');\n                            }\n                            \/\/ \u68c0\u67e5\u662f\u5426\u6709\u75bc\u75db\n                            const hasPain = test.currentScore.clearing || \n                                          test.currentScore.ankleClearingLeft || \n                                          test.currentScore.ankleClearingRight;\n                            if (hasPain) {\n                                \/\/ \u5982\u679c\u6709\u75bc\u75db\uff0c\u6700\u7ec8\u5f97\u5206\u4e3a0\n                                test.currentScore.final = 0;\n                                \/\/ \u6e05\u7a7a\u8bc4\u5206\n                                test.currentScore.left = null;\n                                test.currentScore.right = null;\n                                \/\/ \u6e05\u7a7a\u8bc4\u5206\u9009\u62e9\n                                document.querySelectorAll('#app .side-btn.selected').forEach(el => {\n                                    el.classList.remove('selected');\n                                });\n                            } else {\n                                \/\/ \u5982\u679c\u6ca1\u6709\u75bc\u75db\uff0c\u91cd\u65b0\u8ba1\u7b97\u6700\u7ec8\u5f97\u5206\n                                if (test.currentScore.left !== null && test.currentScore.right !== null) {\n                                    test.currentScore.final = Math.min(test.currentScore.left, test.currentScore.right);\n                                } else if (test.currentScore.left !== null) {\n                                    test.currentScore.final = test.currentScore.left;\n                                } else if (test.currentScore.right !== null) {\n                                    test.currentScore.final = test.currentScore.right;\n                                } else {\n                                    test.currentScore.final = null;\n                                }\n                            }\n                        } else if (test.id === 4 || test.id === 7) {\n                            \/\/ \u80a9\u90e8\u6d3b\u52a8\u5ea6\u548c\u65cb\u8f6c\u7a33\u5b9a\u6027 - \u5de6\u53f3\u4fa7\u5206\u522b\u8bb0\u5f55\n                            const painResult = result === 'positive';\n                            const sideKey = `clearing${side.charAt(0).toUpperCase() + side.slice(1)}`;\n                            test.currentScore[sideKey] = painResult;\n                            \/\/ \u66f4\u65b0\u6309\u94ae\u6837\u5f0f\n                            const parent = this.parentElement;\n                            parent.querySelectorAll('.exclusion-btn').forEach(b => {\n                                if (b.dataset.side === side) {\n                                    b.classList.remove('positive', 'negative');\n                                }\n                            });\n                            this.classList.add(painResult ? 'positive' : 'negative');\n                            \/\/ \u68c0\u67e5\u662f\u5426\u6709\u75bc\u75db\n                            const hasPain = test.currentScore.clearingLeft || test.currentScore.clearingRight;\n                            if (hasPain) {\n                                \/\/ \u5982\u679c\u6709\u75bc\u75db\uff0c\u6700\u7ec8\u5f97\u5206\u4e3a0\n                                test.currentScore.final = 0;\n                                \/\/ \u6e05\u7a7a\u8bc4\u5206\n                                test.currentScore.left = null;\n                                test.currentScore.right = null;\n                                \/\/ \u6e05\u7a7a\u8bc4\u5206\u9009\u62e9\n                                document.querySelectorAll('#app .side-btn.selected').forEach(el => {\n                                    el.classList.remove('selected');\n                                });\n                            } else {\n                                \/\/ \u5982\u679c\u6ca1\u6709\u75bc\u75db\uff0c\u91cd\u65b0\u8ba1\u7b97\u6700\u7ec8\u5f97\u5206\n                                if (test.currentScore.left !== null && test.currentScore.right !== null) {\n                                    test.currentScore.final = Math.min(test.currentScore.left, test.currentScore.right);\n                                } else if (test.currentScore.left !== null) {\n                                    test.currentScore.final = test.currentScore.left;\n                                } else if (test.currentScore.right !== null) {\n                                    test.currentScore.final = test.currentScore.right;\n                                } else {\n                                    test.currentScore.final = null;\n                                }\n                            }\n                        }\n                        updateScoreTable();\n                        initTestList();\n                    };\n                });\n            }\n            \/\/ \u589e\u5f3a\u7684\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u9009\u9879\u70b9\u51fb\u5904\u7406\n            if (test.id === 3 && test.ankleClearingTest) {\n                document.querySelectorAll('#app .flexibility-option').forEach(option => {\n                    option.onclick = function() {\n                        const side = this.dataset.side;\n                        const result = this.dataset.result;\n                        const sideKey = `ankleFlexibility${side.charAt(0).toUpperCase() + side.slice(1)}`;\n                        \/\/ \u6e05\u9664\u540c\u4fa7\u5176\u4ed6\u9009\u9879\u7684\u9009\u62e9\u72b6\u6001\n                        const container = this.closest('.ankle-flexibility-section');\n                        container.querySelectorAll('.flexibility-option').forEach(opt => {\n                            opt.classList.remove('selected');\n                        });\n                        \/\/ \u9009\u4e2d\u5f53\u524d\u9009\u9879\n                        this.classList.add('selected');\n                        \/\/ \u66f4\u65b0\u6d4b\u8bd5\u6570\u636e\n                        test.currentScore[sideKey] = result;\n                        \/\/ \u66f4\u65b0\u8bc4\u5206\u548c\u663e\u793a\n                        updateScoreTable();\n                        initTestList();\n                    };\n                });\n            }\n            document.getElementById('showCorrectionBtn').onclick = () => showCorrectionForTest(test);\n            document.getElementById('prevTestBtn').onclick = () => { if(currentTestIndex>0) { currentTestIndex--; loadTest(currentTestIndex); initTestList(); } };\n            document.getElementById('nextTestBtn').onclick = () => {\n                if(currentTestIndex < fmsTests.length-1) { currentTestIndex++; loadTest(currentTestIndex); initTestList(); }\n                else { alert('\u6240\u6709\u6d4b\u8bd5\u5df2\u5b8c\u6210\uff01\u8bf7\u67e5\u770b\u4fa7\u8fb9\u680f\u7684\u8bc4\u5206\u6c47\u603b\u4e0e\u7ea0\u6b63\u5efa\u8bae\u3002'); }\n            };\n        }\n        function showCorrectionForTest(test) {\n            \/\/ \u68c0\u67e5\u662f\u5426\u6709\u75bc\u75db\uff08\u5305\u62ec\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\uff09\n            let hasPain = false;\n            let anklePain = false;\n            let ankleFlexibilityLeft = '';\n            let ankleFlexibilityRight = '';\n            if (test.clearingTest) {\n                if (test.id === 6) {\n                    \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\uff1a\u68c0\u67e5\u6574\u4f53\u6392\u9664\u6027\u6d4b\u8bd5\n                    hasPain = test.currentScore.clearing;\n                } else if (test.id === 3) {\n                    \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\uff1a\u68c0\u67e5\u6574\u4f53\u548c\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\n                    hasPain = test.currentScore.clearing || \n                             test.currentScore.ankleClearingLeft || \n                             test.currentScore.ankleClearingRight;\n                    anklePain = test.currentScore.ankleClearingLeft || test.currentScore.ankleClearingRight;\n                    ankleFlexibilityLeft = test.currentScore.ankleFlexibilityLeft;\n                    ankleFlexibilityRight = test.currentScore.ankleFlexibilityRight;\n                } else if (test.id === 4 || test.id === 7) {\n                    hasPain = test.currentScore.clearingLeft || test.currentScore.clearingRight;\n                }\n            }\n            const score = test.currentScore.final;\n            const key = hasPain ? 0 : (score !== null ? score : 'na');\n            const advice = test.corrections[key] || {desc:'\u8bf7\u5148\u5b8c\u6210\u6d4b\u8bd5\u8bc4\u5206\u4ee5\u83b7\u5f97\u5efa\u8bae\u3002'};\n            let asymmetryNote = '';\n            if (test.bilateral && test.currentScore.left !== null && test.currentScore.right !== null && test.currentScore.left !== test.currentScore.right) {\n                asymmetryNote = `<p><strong>\u6ce8\u610f\uff1a<\/strong>\u5de6\u53f3\u4fa7\u5f97\u5206\u4e0d\u4e00\u81f4\uff08\u5de6:${test.currentScore.left}, \u53f3:${test.currentScore.right}\uff09\uff0c\u5efa\u8bae\u5728\u8bad\u7ec3\u4e2d\u989d\u5916\u5173\u6ce8\u8f83\u5f31\u4e00\u4fa7\u3002<\/p>`;\n            }\n            let ankleNote = '';\n            if (test.id === 3) {\n                if (anklePain) {\n                    ankleNote = `<p><strong>\u8e1d\u5173\u8282\u75bc\u75db\uff1a<\/strong>\u8e1d\u5173\u8282\u6392\u9664\u6027\u6d4b\u8bd5\u4e3a\u9633\u6027\uff0c\u8868\u660e\u8e1d\u5173\u8282\u5b58\u5728\u75bc\u75db\uff0c\u9700\u8981\u4f18\u5148\u533b\u7597\u8bc4\u4f30\u3002<\/p>`;\n                } else if (ankleFlexibilityLeft || ankleFlexibilityRight) {\n                    let flexibilityResults = [];\n                    if (ankleFlexibilityLeft) flexibilityResults.push(`\u5de6\u4fa7\uff1a${getAnkleFlexibilityText(ankleFlexibilityLeft)}`);\n                    if (ankleFlexibilityRight) flexibilityResults.push(`\u53f3\u4fa7\uff1a${getAnkleFlexibilityText(ankleFlexibilityRight)}`);\n                    if (flexibilityResults.length > 0) {\n                        ankleNote = `<p><strong>\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u8bc4\u4f30\uff1a<\/strong> ${flexibilityResults.join('\uff0c ')}<\/p>`;\n                        if (ankleFlexibilityLeft === 'red' || ankleFlexibilityLeft === 'yellow' || \n                            ankleFlexibilityRight === 'red' || ankleFlexibilityRight === 'yellow') {\n                            ankleNote += `<p><strong>\u5efa\u8bae\uff1a<\/strong>\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u8bc4\u4f30\u5931\u8d25\uff08\u9ec4\u533a\u6216\u7ea2\u533a\uff09\u610f\u5473\u7740\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u9700\u8981\u88ab\u89e3\u51b3\u548c\u6e05\u9664\u3002\u5efa\u8bae\u8fdb\u884c\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u8bad\u7ec3\u3002<\/p>`;\n                        }\n                    }\n                }\n            }\n            document.getElementById('correctionBody').innerHTML = `\n                <div class=\"correction-content\">\n                    <div class=\"correction-section\">\n                        <h4>${test.name} - \u7ea0\u6b63\u8bad\u7ec3\u5efa\u8bae<\/h4>\n                        <p><strong>\u6d4b\u8bd5\u5f97\u5206\uff1a<\/strong> ${hasPain ? '0\u5206\uff08\u5b58\u5728\u75bc\u75db\uff09' : (score !== null ? score + '\u5206' : '\u672a\u8bc4\u5206')}<\/p>\n                        ${asymmetryNote}\n                        ${ankleNote}\n                        <p><strong>\u4f18\u5148\u7ea7\uff1a<\/strong> ${advice.priority || 'N\/A'}<\/p>\n                        ${advice.desc ? `<p>${advice.desc}<\/p>` : ''}\n                        ${advice.focus ? `<p><strong>\u7ea0\u6b63\u91cd\u70b9\uff1a<\/strong> ${advice.focus.join('\u3001')}<\/p>` : ''}\n                        ${advice.exercises ? `\n                            <p><strong>\u63a8\u8350\u8bad\u7ec3\uff1a<\/strong><\/p>\n                            <ul class=\"correction-exercises\">\n                                ${advice.exercises.map(ex => `<li>${ex}<\/li>`).join('')}\n                            <\/ul>\n                            <p style=\"margin-top:15px;\"> <strong>\u8bad\u7ec3\u5efa\u8bae\uff1a<\/strong>\u9009\u62e92-3\u4e2a\u63a8\u8350\u52a8\u4f5c\uff0c\u6bcf\u4e2a\u8fdb\u884c2-3\u7ec4\uff0c\u6bcf\u7ec430-60\u79d2\u621610-15\u6b21\u91cd\u590d\uff0c\u6bcf\u5468\u7ec3\u4e603-4\u6b21\u3002<\/p>\n                        ` : ''}\n                        ${!hasPain ? `<p style=\"font-size:0.9em; color:#666; margin-top:20px;\"> \u4ee5\u4e0a\u5efa\u8bae\u57fa\u4e8eFMS V2.9\u624b\u518c\u6807\u51c6\u3002\u5728\u5f00\u59cb\u4efb\u4f55\u65b0\u8bad\u7ec3\u8ba1\u5212\u524d\uff0c\u8bf7\u786e\u4fdd\u52a8\u4f5c\u65e0\u75db\u3002<\/p>` : ''}\n                    <\/div>\n                <\/div>\n            `;\n            document.getElementById('correctionModal').style.display = 'flex';\n        }\n        function getAnkleFlexibilityText(result) {\n            switch(result) {\n                case 'green': return '\u7eff\u533a\uff08\u819d\u8d85\u8fc7\u524d\u817f\u5185\u8e1d\uff0c\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u6ee1\u8db3\u8981\u6c42\uff09';\n                case 'yellow': return '\u9ec4\u533a\uff08\u819d\u5728\u524d\u817f\u5185\u8e1d\u5bbd\u5ea6\u5185\uff0c\u53ef\u80fd\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236\uff09';\n                case 'red': return '\u7ea2\u533a\uff08\u819d\u672a\u5230\u8fbe\u524d\u817f\u5185\u8e1d\uff0c\u53ef\u80fd\u5b58\u5728\u7075\u6d3b\u6027\u9650\u5236\uff09';\n                default: return '';\n            }\n        }\n        document.getElementById('viewCorrectionBtn').onclick = function() {\n            let correctionHTML = '<div class=\"correction-content\">';\n            const testsNeedingCorrection = fmsTests.filter(test => {\n                \/\/ \u68c0\u67e5\u662f\u5426\u6709\u75bc\u75db\uff08\u5305\u62ec\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\uff09\n                let hasPain = false;\n                if (test.clearingTest) {\n                    if (test.id === 6) {\n                        \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\uff1a\u68c0\u67e5\u6574\u4f53\u6392\u9664\u6027\u6d4b\u8bd5\n                        hasPain = test.currentScore.clearing;\n                    } else if (test.id === 3) {\n                        \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\uff1a\u68c0\u67e5\u6574\u4f53\u548c\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\n                        hasPain = test.currentScore.clearing || \n                                 test.currentScore.ankleClearingLeft || \n                                 test.currentScore.ankleClearingRight;\n                    } else if (test.id === 4 || test.id === 7) {\n                        hasPain = test.currentScore.clearingLeft || test.currentScore.clearingRight;\n                    }\n                }\n                return hasPain || (test.currentScore.final !== null && test.currentScore.final <= 2);\n            });\n            if (testsNeedingCorrection.length === 0) {\n                correctionHTML += `<div class=\"correction-section\"><h4>\u7efc\u5408\u7ea0\u6b63\u5efa\u8bae<\/h4><p>\u6240\u6709\u6d4b\u8bd5\u5f97\u5206\u5747\u57283\u5206\uff08\u826f\u597d\uff09\u53ca\u4ee5\u4e0a\uff0c\u8fd0\u52a8\u6a21\u5f0f\u57fa\u672c\u6b63\u5e38\u3002<\/p><p>\u5efa\u8bae\u7ee7\u7eed\u4fdd\u6301\u5f53\u524d\u8bad\u7ec3\uff0c\u5b9a\u671f\u8fdb\u884cFMS\u7b5b\u67e5\u4ee5\u76d1\u63a7\u8fd0\u52a8\u6a21\u5f0f\u7684\u53d8\u5316\u3002<\/p><\/div>`;\n            } else {\n                correctionHTML += `<div class=\"correction-section\"><h4>\u7efc\u5408\u7ea0\u6b63\u5efa\u8bae<\/h4><p>\u4ee5\u4e0b${testsNeedingCorrection.length}\u4e2a\u6d4b\u8bd5\u9879\u76ee\u9700\u8981\u5173\u6ce8\u548c\u7ea0\u6b63\uff1a<\/p><\/div>`;\n                testsNeedingCorrection.forEach(test => {\n                    \/\/ \u68c0\u67e5\u662f\u5426\u6709\u75bc\u75db\uff08\u5305\u62ec\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\uff09\n                    let hasPain = false;\n                    let anklePain = false;\n                    let ankleFlexibilityInfo = '';\n                    if (test.clearingTest) {\n                        if (test.id === 6) {\n                            \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\uff1a\u68c0\u67e5\u6574\u4f53\u6392\u9664\u6027\u6d4b\u8bd5\n                            hasPain = test.currentScore.clearing;\n                        } else if (test.id === 3) {\n                            \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\uff1a\u68c0\u67e5\u6574\u4f53\u548c\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\n                            hasPain = test.currentScore.clearing || \n                                     test.currentScore.ankleClearingLeft || \n                                     test.currentScore.ankleClearingRight;\n                            anklePain = test.currentScore.ankleClearingLeft || test.currentScore.ankleClearingRight;\n                            \/\/ \u6536\u96c6\u8e1d\u5173\u8282\u7075\u6d3b\u6027\u8bc4\u4f30\u7ed3\u679c\n                            let flexibilityResults = [];\n                            if (test.currentScore.ankleFlexibilityLeft) {\n                                flexibilityResults.push(`\u5de6:${getAnkleFlexibilityText(test.currentScore.ankleFlexibilityLeft)}`);\n                            }\n                            if (test.currentScore.ankleFlexibilityRight) {\n                                flexibilityResults.push(`\u53f3:${getAnkleFlexibilityText(test.currentScore.ankleFlexibilityRight)}`);\n                            }\n                            if (flexibilityResults.length > 0) {\n                                ankleFlexibilityInfo = ` (${flexibilityResults.join('\uff0c')})`;\n                            }\n                        } else if (test.id === 4 || test.id === 7) {\n                            hasPain = test.currentScore.clearingLeft || test.currentScore.clearingRight;\n                        }\n                    }\n                    const key = hasPain ? 0 : test.currentScore.final;\n                    const advice = test.corrections[key] || {};\n                    let scoreText = '';\n                    if (hasPain) {\n                        if (anklePain) {\n                            scoreText = '0\u5206\uff08\u8e1d\u5173\u8282\u75bc\u75db\uff09';\n                        } else {\n                            scoreText = '0\u5206\uff08\u75bc\u75db\/\u9633\u6027\uff09';\n                        }\n                        scoreText += ankleFlexibilityInfo;\n                    } else {\n                        scoreText = test.currentScore.final + '\u5206' + ankleFlexibilityInfo;\n                    }\n                    correctionHTML += `<div class=\"correction-section\">\n                        <h4>${test.name}\uff08${scoreText}\uff09<\/h4>\n                        <p><strong>\u4f18\u5148\u7ea7\uff1a<\/strong> ${advice.priority || 'N\/A'}<\/p>\n                        ${advice.desc ? `<p>${advice.desc}<\/p>` : ''}\n                        ${advice.focus ? `<p><strong>\u7ea0\u6b63\u91cd\u70b9\uff1a<\/strong> ${advice.focus.join('\u3001')}<\/p>` : ''}\n                        ${advice.exercises ? `<p><strong>\u63a8\u8350\u8bad\u7ec3\uff1a<\/strong><\/p><ul class=\"correction-exercises\">${advice.exercises.map(ex=>`<li>${ex}<\/li>`).join('')}<\/ul>` : ''}\n                    <\/div>`;\n                });\n                correctionHTML += `<div class=\"correction-section\">\n                    <h4>\u8bad\u7ec3\u8ba1\u5212\u5efa\u8bae<\/h4>\n                    <p><strong>\u9891\u7387\uff1a<\/strong> \u6bcf\u54683-4\u6b21\u7ea0\u6b63\u8bad\u7ec3<\/p>\n                    <p><strong>\u65f6\u957f\uff1a<\/strong> \u6bcf\u6b2115-20\u5206\u949f<\/p>\n                    <p><strong>\u65b9\u6cd5\uff1a<\/strong> \u4ece\u6bcf\u4e2a\u9700\u8981\u7ea0\u6b63\u7684\u6d4b\u8bd5\u4e2d\u9009\u62e91-2\u4e2a\u63a8\u8350\u52a8\u4f5c\uff0c\u6bcf\u4e2a\u52a8\u4f5c\u8fdb\u884c2-3\u7ec4\u3002<\/p>\n                    <p><strong>\u6ce8\u610f\u4e8b\u9879\uff1a<\/strong> \u786e\u4fdd\u6240\u6709\u52a8\u4f5c\u5728\u65e0\u75db\u8303\u56f4\u5185\u8fdb\u884c\uff0c\u5982\u51fa\u73b0\u75bc\u75db\u5e94\u7acb\u5373\u505c\u6b62\u5e76\u54a8\u8be2\u4e13\u4e1a\u4eba\u58eb\u3002<\/p>\n                <\/div>`;\n            }\n            correctionHTML += '<\/div>';\n            document.getElementById('correctionBody').innerHTML = correctionHTML;\n            document.getElementById('correctionModal').style.display = 'flex';\n        };\n        function updateScoreTable() {\n            const tbody = document.getElementById('scoreTableBody');\n            tbody.innerHTML = '';\n            let total = 0;\n            fmsTests.forEach(test => {\n                let finalScore = test.currentScore.final;\n                \/\/ \u68c0\u67e5\u662f\u5426\u6709\u75bc\u75db\uff08\u5305\u62ec\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\uff09\n                if (test.clearingTest) {\n                    let isPain = false;\n                    if (test.id === 6) {\n                        \/\/ \u8eaf\u5e72\u7a33\u5b9a\u4fef\u5367\u6491\uff1a\u68c0\u67e5\u6574\u4f53\u6392\u9664\u6027\u6d4b\u8bd5\n                        isPain = test.currentScore.clearing;\n                    } else if (test.id === 3) {\n                        \/\/ \u76f4\u7ebf\u5f13\u6b65\u8e72\uff1a\u68c0\u67e5\u6574\u4f53\u548c\u8e1d\u5173\u8282\u75bc\u75db\u53cd\u5e94\n                        isPain = test.currentScore.clearing || \n                                test.currentScore.ankleClearingLeft || \n                                test.currentScore.ankleClearingRight;\n                    } else if (test.id === 4 || test.id === 7) {\n                        isPain = test.currentScore.clearingLeft || test.currentScore.clearingRight;\n                    }\n                    if (isPain) finalScore = 0;\n                }\n                if (finalScore !== null) total += finalScore;\n                const row = document.createElement('tr');\n                if (test.bilateral) {\n                    row.innerHTML = `\n                        <td>${test.name}<\/td>\n                        <td class=\"score-cell ${test.currentScore.left===0?'score-0-display': test.currentScore.left===1?'score-1-display': test.currentScore.left===2?'score-2-display': test.currentScore.left===3?'score-3-display':''}\">${test.currentScore.left??'-'}<\/td>\n                        <td class=\"score-cell ${test.currentScore.right===0?'score-0-display': test.currentScore.right===1?'score-1-display': test.currentScore.right===2?'score-2-display': test.currentScore.right===3?'score-3-display':''}\">${test.currentScore.right??'-'}<\/td>\n                        <td class=\"score-cell ${finalScore===0?'score-0-display': finalScore===1?'score-1-display': finalScore===2?'score-2-display': finalScore===3?'score-3-display':''}\">${finalScore??'-'}<\/td>\n                    `;\n                } else {\n                    row.innerHTML = `\n                        <td>${test.name}<\/td><td class=\"score-cell\">-<\/td><td class=\"score-cell\">-<\/td>\n                        <td class=\"score-cell ${finalScore===0?'score-0-display': finalScore===1?'score-1-display': finalScore===2?'score-2-display': finalScore===3?'score-3-display':''}\">${finalScore??'-'}<\/td>\n                    `;\n                }\n                tbody.appendChild(row);\n            });\n            document.getElementById('totalScore').textContent = total;\n            const riskEl = document.getElementById('riskIndicator');\n            if (total <= 14) { riskEl.textContent = '\u6574\u4f53\u98ce\u9669\u8f83\u9ad8'; riskEl.style.color = '#b91c1c'; }\n            else if (total <= 17) { riskEl.textContent = '\u5b58\u5728\u90e8\u5206\u9650\u5236'; riskEl.style.color = '#b45309'; }\n            else { riskEl.textContent = '\u57fa\u672c\u6a21\u5f0f\u826f\u597d'; riskEl.style.color = '#15803d'; }\n        }\n        function bindEventListeners() {\n            document.getElementById('clientForm').onsubmit = function(e) {\n                e.preventDefault();\n                clientInfo.name = document.getElementById('clientName').value;\n                clientInfo.date = document.getElementById('clientDate').value;\n                clientInfo.gender = document.getElementById('clientGender').value;\n                clientInfo.age = document.getElementById('clientAge').value;\n                clientInfo.sport = document.getElementById('clientSport').value;\n                document.getElementById('clientModal').style.display = 'none';\n                document.getElementById('appTitle').innerHTML = `FMS \u7b5b\u67e5 \u00b7 <span class=\"app-title-sub\">${clientInfo.name}<\/span>`;\n            };\n            document.getElementById('closeModal').onclick = () => document.getElementById('clientModal').style.display = 'none';\n            document.getElementById('closeCorrectionModal').onclick = () => document.getElementById('correctionModal').style.display = 'none';\n            document.getElementById('app').addEventListener('click', (e) => { if(e.target.classList.contains('modal')) e.target.style.display = 'none'; });\n            document.getElementById('saveResultsBtn').onclick = () => alert('\u672c\u5de5\u5177\u5f53\u524d\u4e3a\u672c\u5730\u6f14\u793a\u7248\u672c\uff0c\u8bc4\u5206\u4e0d\u4f1a\u4e0a\u4f20\u670d\u52a1\u5668\u3002\u5982\u9700\u5f52\u6863\uff0c\u8bf7\u622a\u56fe\u6216\u6253\u5370\u672c\u9875\u3002');\n            document.getElementById('newClientBtn').onclick = () => {\n                if(confirm('\u5c06\u91cd\u7f6e\u6240\u6709\u6570\u636e\u5e76\u5f00\u59cb\u65b0\u7b5b\u67e5\uff0c\u786e\u5b9a\u5417\uff1f')) {\n                    fmsTests.forEach(t => {\n                        t.currentScore = { \n                            left: null, \n                            right: null, \n                            final: null, \n                            clearing: null, \n                            clearingLeft: null, \n                            clearingRight: null,\n                            ankleClearingLeft: null,\n                            ankleClearingRight: null,\n                            ankleFlexibilityLeft: null,\n                            ankleFlexibilityRight: null\n                        };\n                    });\n                    clientInfo = { name: \"\", date: new Date().toISOString().split('T')[0], gender: \"\", age: \"\", sport: \"\" };\n                    currentTestIndex = 0;\n                    document.getElementById('clientDate').value = clientInfo.date;\n                    document.getElementById('clientForm').reset();\n                    document.getElementById('clientModal').style.display = 'flex';\n                    document.getElementById('appTitle').textContent = 'FMS \u529f\u80fd\u6027\u8fd0\u52a8\u7b5b\u67e5\u7cfb\u7edf';\n                    updateScoreTable();\n                    initTestList();\n                    loadTest(currentTestIndex);\n                }\n            };\n        }<\/script>\n<\/div>\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>FMS\u529f\u80fd\u6027\u8fd0\u52a8\u7b5b\u67e5\u6d4b\u8bd5\u7cfb\u7edf FMS\u529f\u80fd\u6027\u8fd0\u52a8\u7b5b\u67e5\u6d4b\u8bd5\u7cfb\u7edf \u57fa\u4e8e FMS Level 1 Manual V2. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1308,"parent":1307,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1948","page","type-page","status-publish","has-post-thumbnail","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1948","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=1948"}],"version-history":[{"count":10,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1948\/revisions"}],"predecessor-version":[{"id":2169,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1948\/revisions\/2169"}],"up":[{"embeddable":true,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1307"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/media\/1308"}],"wp:attachment":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}