{"id":1880,"date":"2025-12-07T11:04:37","date_gmt":"2025-12-07T03:04:37","guid":{"rendered":"https:\/\/www.funpt.cn\/?page_id=1880"},"modified":"2026-02-06T17:49:53","modified_gmt":"2026-02-06T09:49:53","slug":"elementor-1880","status":"publish","type":"page","link":"https:\/\/www.funpt.cn\/?page_id=1880","title":{"rendered":"\u4e0b\u80a2Y-Balance\u6d4b\u8bd5"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1880\" class=\"elementor elementor-1880\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0cfc8fe e-flex e-con-boxed e-con e-parent\" data-id=\"0cfc8fe\" 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-fb57197 elementor-widget elementor-widget-html\" data-id=\"fb57197\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"zh-CN\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>\u4e0b\u80a2Y-Balance\u6d4b\u8bd5 (YBT-LQ) | FMS\u5b98\u65b9\u89c4\u8303<\/title>\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\">\r\n    <!-- html2canvas\u5e93\uff0c\u7528\u4e8e\u5bfc\u51fa\u56fe\u7247 -->\r\n    <script src=\"https:\/\/html2canvas.hertzen.com\/dist\/html2canvas.min.js\"><\/script>\r\n    <style>\r\n        :root {\r\n            --primary-color: #1a6dbb;\r\n            --secondary-color: #0c3e6e;\r\n            --success-color: #28a745;\r\n            --warning-color: #ffc107;\r\n            --danger-color: #dc3545;\r\n            --light-color: #f8f9fa;\r\n            --dark-color: #343a40;\r\n            --shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\r\n            --radius: 10px;\r\n            --transition: all 0.3s ease;\r\n        }\r\n        \r\n        * {\r\n            box-sizing: border-box;\r\n            margin: 0;\r\n            padding: 0;\r\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', sans-serif;\r\n        }\r\n        \r\n        body {\r\n            background-color: #f5f9fc;\r\n            color: #333;\r\n            line-height: 1.6;\r\n            padding: 0;\r\n        }\r\n        \r\n        .container {\r\n            max-width: 100%;\r\n            margin: 0 auto;\r\n            background-color: white;\r\n            min-height: 100vh;\r\n            display: flex;\r\n            flex-direction: column;\r\n        }\r\n        \r\n        \/* \u5934\u90e8\u6837\u5f0f *\/\r\n        header {\r\n            background: linear-gradient(135deg, #1a6dbb 0%, #0d4a8a 100%);\r\n            color: white;\r\n            padding: 20px 15px;\r\n            border-bottom: 4px solid #0c3e6e;\r\n            position: sticky;\r\n            top: 0;\r\n            z-index: 100;\r\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n        }\r\n        \r\n        .header-content {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: space-between;\r\n            flex-wrap: wrap;\r\n        }\r\n        \r\n        .logo {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 12px;\r\n        }\r\n        \r\n        .logo i {\r\n            font-size: 2rem;\r\n            color: white;\r\n        }\r\n        \r\n        .logo-text h1 {\r\n            font-size: 1.5rem;\r\n            margin-bottom: 4px;\r\n            line-height: 1.2;\r\n        }\r\n        \r\n        .logo-text p {\r\n            font-size: 0.85rem;\r\n            opacity: 0.9;\r\n            line-height: 1.3;\r\n        }\r\n        \r\n        .nav-toggle {\r\n            background: none;\r\n            border: none;\r\n            color: white;\r\n            font-size: 1.5rem;\r\n            cursor: pointer;\r\n            display: none;\r\n        }\r\n        \r\n        \/* \u4e3b\u5185\u5bb9\u533a\u57df *\/\r\n        .main-content {\r\n            flex: 1;\r\n            padding: 20px 15px;\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 25px;\r\n        }\r\n        \r\n        \/* \u5361\u7247\u6837\u5f0f *\/\r\n        .card {\r\n            background-color: white;\r\n            border-radius: var(--radius);\r\n            padding: 20px;\r\n            box-shadow: var(--shadow);\r\n            border-left: 4px solid var(--primary-color);\r\n            margin-bottom: 10px;\r\n        }\r\n        \r\n        .card-title {\r\n            color: var(--primary-color);\r\n            margin-bottom: 15px;\r\n            padding-bottom: 8px;\r\n            border-bottom: 1px solid #e1e8f0;\r\n            font-size: 1.4rem;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 10px;\r\n        }\r\n        \r\n        .card-title i {\r\n            font-size: 1.2rem;\r\n        }\r\n        \r\n        \/* \u8868\u5355\u5143\u7d20 *\/\r\n        .form-group {\r\n            margin-bottom: 18px;\r\n        }\r\n        \r\n        label {\r\n            display: block;\r\n            margin-bottom: 6px;\r\n            font-weight: 600;\r\n            color: #444;\r\n            font-size: 0.95rem;\r\n        }\r\n        \r\n        input, select, textarea {\r\n            width: 100%;\r\n            padding: 14px 15px;\r\n            border: 1px solid #d1d9e6;\r\n            border-radius: 8px;\r\n            font-size: 1rem;\r\n            transition: var(--transition);\r\n            background-color: #f9fbfd;\r\n        }\r\n        \r\n        input:focus, select:focus, textarea:focus {\r\n            border-color: var(--primary-color);\r\n            outline: none;\r\n            box-shadow: 0 0 0 3px rgba(26, 109, 187, 0.15);\r\n            background-color: white;\r\n        }\r\n        \r\n        .form-row {\r\n            display: flex;\r\n            gap: 15px;\r\n            margin-bottom: 15px;\r\n        }\r\n        \r\n        .form-row .form-group {\r\n            flex: 1;\r\n            margin-bottom: 0;\r\n        }\r\n        \r\n        \/* \u6309\u94ae\u6837\u5f0f *\/\r\n        .btn {\r\n            display: block;\r\n            background-color: var(--primary-color);\r\n            color: white;\r\n            padding: 16px 25px;\r\n            border: none;\r\n            border-radius: 8px;\r\n            cursor: pointer;\r\n            font-size: 1.05rem;\r\n            font-weight: 600;\r\n            transition: var(--transition);\r\n            width: 100%;\r\n            text-align: center;\r\n            margin-top: 10px;\r\n            box-shadow: 0 4px 6px rgba(26, 109, 187, 0.2);\r\n        }\r\n        \r\n        .btn:hover {\r\n            background-color: var(--secondary-color);\r\n            transform: translateY(-2px);\r\n            box-shadow: 0 6px 8px rgba(26, 109, 187, 0.25);\r\n        }\r\n        \r\n        .btn:active {\r\n            transform: translateY(0);\r\n        }\r\n        \r\n        .btn-reset {\r\n            background-color: #6c757d;\r\n        }\r\n        \r\n        .btn-reset:hover {\r\n            background-color: #545b62;\r\n        }\r\n        \r\n        .btn-secondary {\r\n            background-color: #6c757d;\r\n            width: auto;\r\n            padding: 12px 20px;\r\n            margin-top: 0;\r\n            font-size: 0.95rem;\r\n        }\r\n        \r\n        .btn-secondary:hover {\r\n            background-color: #545b62;\r\n        }\r\n        \r\n        .btn-success {\r\n            background-color: var(--success-color);\r\n        }\r\n        \r\n        .btn-success:hover {\r\n            background-color: #218838;\r\n        }\r\n        \r\n        .btn-danger {\r\n            background-color: var(--danger-color);\r\n        }\r\n        \r\n        .btn-danger:hover {\r\n            background-color: #c82333;\r\n        }\r\n        \r\n        .btn-info {\r\n            background-color: #17a2b8;\r\n        }\r\n        \r\n        .btn-info:hover {\r\n            background-color: #138496;\r\n        }\r\n        \r\n        \/* \u6d4b\u8bd5\u6b65\u9aa4 *\/\r\n        .test-sequence {\r\n            display: grid;\r\n            grid-template-columns: repeat(2, 1fr);\r\n            gap: 10px;\r\n            margin: 15px 0;\r\n        }\r\n        \r\n        .test-step {\r\n            background-color: #f0f7ff;\r\n            border-radius: 8px;\r\n            padding: 12px 10px;\r\n            text-align: center;\r\n            font-weight: 600;\r\n            font-size: 0.9rem;\r\n            border: 1px solid #d1e3ff;\r\n        }\r\n        \r\n        .test-step-number {\r\n            display: inline-block;\r\n            width: 26px;\r\n            height: 26px;\r\n            background-color: var(--primary-color);\r\n            color: white;\r\n            border-radius: 50%;\r\n            line-height: 26px;\r\n            margin-right: 6px;\r\n            font-size: 0.85rem;\r\n        }\r\n        \r\n        \/* \u6d4b\u8bd5\u65b9\u5411\u8f93\u5165 *\/\r\n        .reach-directions {\r\n            display: grid;\r\n            grid-template-columns: repeat(1, 1fr);\r\n            gap: 20px;\r\n            margin-top: 15px;\r\n        }\r\n        \r\n        .direction-group {\r\n            background-color: #f9fbfd;\r\n            border-radius: 8px;\r\n            padding: 15px;\r\n            border: 1px solid #e1e8f0;\r\n        }\r\n        \r\n        .direction-title {\r\n            background-color: var(--primary-color);\r\n            color: white;\r\n            padding: 10px 12px;\r\n            border-radius: 6px;\r\n            margin: -15px -15px 15px -15px;\r\n            font-size: 0.95rem;\r\n            text-align: center;\r\n            font-weight: 600;\r\n        }\r\n        \r\n        .direction-inputs {\r\n            display: grid;\r\n            grid-template-columns: repeat(3, 1fr);\r\n            gap: 10px;\r\n        }\r\n        \r\n        \/* \u4fe1\u606f\u63d0\u793a\u6846 *\/\r\n        .info-box {\r\n            background-color: #e8f4ff;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            margin: 15px 0;\r\n            font-size: 0.95rem;\r\n        }\r\n        \r\n        .warning-box {\r\n            background-color: #fff3cd;\r\n            border: 1px solid #ffeaa7;\r\n            color: #856404;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            margin: 15px 0;\r\n        }\r\n        \r\n        .danger-box {\r\n            background-color: #f8d7da;\r\n            border: 1px solid #f5c6cb;\r\n            color: #721c24;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            margin: 15px 0;\r\n        }\r\n        \r\n        .success-box {\r\n            background-color: #d4edda;\r\n            border: 1px solid #c3e6cb;\r\n            color: #155724;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            margin: 15px 0;\r\n        }\r\n        \r\n        \/* \u7ed3\u679c\u5bb9\u5668 *\/\r\n        .results-container {\r\n            display: none;\r\n            margin-top: 25px;\r\n            padding: 20px;\r\n            background-color: #f0f7ff;\r\n            border-radius: var(--radius);\r\n            border: 1px solid #cce0ff;\r\n        }\r\n        \r\n        .results-header {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            margin-bottom: 20px;\r\n            flex-wrap: wrap;\r\n            gap: 10px;\r\n        }\r\n        \r\n        .results-title {\r\n            color: var(--primary-color);\r\n            font-size: 1.5rem;\r\n        }\r\n        \r\n        \/* \u7ed3\u679c\u7f51\u683c *\/\r\n        .results-grid {\r\n            display: grid;\r\n            grid-template-columns: repeat(2, 1fr);\r\n            gap: 12px;\r\n            margin-top: 15px;\r\n        }\r\n        \r\n        .result-card {\r\n            background-color: white;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            text-align: center;\r\n            box-shadow: 0 3px 8px rgba(0, 0, 0, 0.05);\r\n            border-top: 4px solid var(--primary-color);\r\n        }\r\n        \r\n        .result-value {\r\n            font-size: 1.8rem;\r\n            font-weight: 700;\r\n            color: var(--primary-color);\r\n            margin: 8px 0;\r\n        }\r\n        \r\n        .result-label {\r\n            font-size: 0.85rem;\r\n            color: #666;\r\n        }\r\n        \r\n        \/* \u7ed3\u679c\u8868\u683c *\/\r\n        .results-table {\r\n            width: 100%;\r\n            border-collapse: collapse;\r\n            margin-top: 20px;\r\n            font-size: 0.9rem;\r\n        }\r\n        \r\n        .results-table th, .results-table td {\r\n            padding: 12px 10px;\r\n            text-align: center;\r\n            border: 1px solid #dee2e6;\r\n        }\r\n        \r\n        .results-table th {\r\n            background-color: #f8f9fa;\r\n            font-weight: 600;\r\n        }\r\n        \r\n        .results-table tr:nth-child(even) {\r\n            background-color: #f8f9fa;\r\n        }\r\n        \r\n        .standard-optimal {\r\n            color: var(--success-color);\r\n            font-weight: 600;\r\n        }\r\n        \r\n        .standard-pass {\r\n            color: var(--warning-color);\r\n            font-weight: 600;\r\n        }\r\n        \r\n        .standard-below {\r\n            color: var(--danger-color);\r\n            font-weight: 600;\r\n        }\r\n        \r\n        \/* \u6298\u53e0\u9762\u677f *\/\r\n        .accordion {\r\n            margin-top: 20px;\r\n        }\r\n        \r\n        .accordion-item {\r\n            border: 1px solid #e1e8f0;\r\n            border-radius: 8px;\r\n            margin-bottom: 10px;\r\n            overflow: hidden;\r\n        }\r\n        \r\n        .accordion-header {\r\n            padding: 15px;\r\n            background-color: #f8f9fa;\r\n            cursor: pointer;\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            font-weight: 600;\r\n            border-bottom: 1px solid transparent;\r\n        }\r\n        \r\n        .accordion-header.active {\r\n            background-color: #e8f4ff;\r\n            border-bottom-color: #cce0ff;\r\n        }\r\n        \r\n        .accordion-content {\r\n            padding: 0;\r\n            max-height: 0;\r\n            overflow: hidden;\r\n            transition: max-height 0.3s ease;\r\n        }\r\n        \r\n        .accordion-content.active {\r\n            padding: 15px;\r\n            max-height: 1000px;\r\n        }\r\n        \r\n        \/* \u5386\u53f2\u8bb0\u5f55\u8868\u683c *\/\r\n        .history-table-container {\r\n            overflow-x: auto;\r\n            margin-top: 15px;\r\n        }\r\n        \r\n        .history-table {\r\n            width: 100%;\r\n            border-collapse: collapse;\r\n            font-size: 0.85rem;\r\n        }\r\n        \r\n        .history-table th, .history-table td {\r\n            padding: 10px 8px;\r\n            text-align: center;\r\n            border: 1px solid #dee2e6;\r\n        }\r\n        \r\n        .history-table th {\r\n            background-color: #f1f5fa;\r\n            font-weight: 600;\r\n            color: var(--primary-color);\r\n        }\r\n        \r\n        .history-table tr:hover {\r\n            background-color: #f8f9fa;\r\n        }\r\n        \r\n        \/* \u7edf\u8ba1\u7ed3\u679c\u5bb9\u5668 *\/\r\n        .stats-container {\r\n            background-color: #f8f9fa;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            margin-top: 15px;\r\n            border: 1px solid #e1e8f0;\r\n        }\r\n        \r\n        .stats-grid {\r\n            display: grid;\r\n            grid-template-columns: repeat(2, 1fr);\r\n            gap: 10px;\r\n            margin-top: 15px;\r\n        }\r\n        \r\n        .stat-card {\r\n            background-color: white;\r\n            padding: 15px;\r\n            border-radius: 8px;\r\n            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);\r\n        }\r\n        \r\n        .stat-value {\r\n            font-size: 1.5rem;\r\n            font-weight: 700;\r\n            color: var(--primary-color);\r\n            margin: 5px 0;\r\n        }\r\n        \r\n        .stat-label {\r\n            font-size: 0.85rem;\r\n            color: #666;\r\n        }\r\n        \r\n        \/* \u62a5\u544a\u5bfc\u51fa\u6837\u5f0f *\/\r\n        .report-container {\r\n            display: none;\r\n            position: absolute;\r\n            left: -9999px;\r\n            width: 800px;\r\n            background-color: white;\r\n            padding: 40px;\r\n            box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\r\n        }\r\n        \r\n        .report-header {\r\n            text-align: center;\r\n            margin-bottom: 30px;\r\n            border-bottom: 2px solid var(--primary-color);\r\n            padding-bottom: 20px;\r\n        }\r\n        \r\n        .report-title {\r\n            color: var(--primary-color);\r\n            font-size: 28px;\r\n            margin-bottom: 10px;\r\n        }\r\n        \r\n        .report-subtitle {\r\n            color: #666;\r\n            font-size: 16px;\r\n        }\r\n        \r\n        .report-body {\r\n            margin-bottom: 30px;\r\n        }\r\n        \r\n        .report-section {\r\n            margin-bottom: 25px;\r\n        }\r\n        \r\n        .report-section-title {\r\n            color: var(--primary-color);\r\n            font-size: 20px;\r\n            margin-bottom: 15px;\r\n            padding-bottom: 8px;\r\n            border-bottom: 1px solid #e1e8f0;\r\n        }\r\n        \r\n        .report-table {\r\n            width: 100%;\r\n            border-collapse: collapse;\r\n            margin-top: 10px;\r\n        }\r\n        \r\n        .report-table th, .report-table td {\r\n            padding: 12px 10px;\r\n            text-align: center;\r\n            border: 1px solid #dee2e6;\r\n        }\r\n        \r\n        .report-table th {\r\n            background-color: #f1f5fa;\r\n            font-weight: 600;\r\n        }\r\n        \r\n        .report-footer {\r\n            margin-top: 30px;\r\n            padding-top: 20px;\r\n            border-top: 1px solid #e1e8f0;\r\n            text-align: center;\r\n            color: #666;\r\n            font-size: 14px;\r\n        }\r\n        \r\n        .report-watermark {\r\n            opacity: 0.1;\r\n            position: absolute;\r\n            font-size: 100px;\r\n            transform: rotate(-45deg);\r\n            color: var(--primary-color);\r\n            top: 50%;\r\n            left: 50%;\r\n            transform: translate(-50%, -50%) rotate(-45deg);\r\n            z-index: 1;\r\n            pointer-events: none;\r\n        }\r\n        \r\n        \/* \u5e95\u90e8\u6837\u5f0f *\/\r\n        footer {\r\n            text-align: center;\r\n            padding: 20px 15px;\r\n            color: #666;\r\n            font-size: 0.85rem;\r\n            border-top: 1px solid #eee;\r\n            margin-top: 30px;\r\n            background-color: #f8f9fa;\r\n        }\r\n        \r\n        \/* \u79fb\u52a8\u7aef\u4f18\u5316 *\/\r\n        @media (max-width: 768px) {\r\n            .header-content {\r\n                flex-direction: column;\r\n                align-items: flex-start;\r\n                gap: 15px;\r\n            }\r\n            \r\n            .logo {\r\n                width: 100%;\r\n            }\r\n            \r\n            .logo-text h1 {\r\n                font-size: 1.4rem;\r\n            }\r\n            \r\n            .nav-toggle {\r\n                display: block;\r\n                position: absolute;\r\n                top: 20px;\r\n                right: 15px;\r\n            }\r\n            \r\n            .form-row {\r\n                flex-direction: column;\r\n                gap: 0;\r\n            }\r\n            \r\n            .test-sequence {\r\n                grid-template-columns: repeat(1, 1fr);\r\n            }\r\n            \r\n            .results-grid {\r\n                grid-template-columns: repeat(2, 1fr);\r\n            }\r\n            \r\n            .direction-inputs {\r\n                grid-template-columns: repeat(1, 1fr);\r\n            }\r\n            \r\n            .results-table {\r\n                font-size: 0.8rem;\r\n            }\r\n            \r\n            .results-table th, .results-table td {\r\n                padding: 8px 5px;\r\n            }\r\n            \r\n            .btn {\r\n                padding: 14px 20px;\r\n            }\r\n            \r\n            .stats-grid {\r\n                grid-template-columns: repeat(1, 1fr);\r\n            }\r\n            \r\n            .history-table {\r\n                font-size: 0.75rem;\r\n            }\r\n            \r\n            .report-container {\r\n                width: 100%;\r\n                padding: 20px;\r\n            }\r\n            \r\n            .report-title {\r\n                font-size: 22px;\r\n            }\r\n        }\r\n        \r\n        @media (max-width: 480px) {\r\n            .main-content {\r\n                padding: 15px 10px;\r\n            }\r\n            \r\n            .card {\r\n                padding: 15px;\r\n            }\r\n            \r\n            .card-title {\r\n                font-size: 1.3rem;\r\n            }\r\n            \r\n            .results-grid {\r\n                grid-template-columns: repeat(1, 1fr);\r\n            }\r\n            \r\n            .test-step {\r\n                font-size: 0.85rem;\r\n                padding: 10px 8px;\r\n            }\r\n            \r\n            .result-value {\r\n                font-size: 1.6rem;\r\n            }\r\n            \r\n            .stat-value {\r\n                font-size: 1.3rem;\r\n            }\r\n            \r\n            .report-container {\r\n                padding: 15px;\r\n            }\r\n            \r\n            .report-title {\r\n                font-size: 18px;\r\n            }\r\n        }\r\n        \r\n        \/* \u5b9e\u7528\u7c7b *\/\r\n        .hidden {\r\n            display: none;\r\n        }\r\n        \r\n        .text-center {\r\n            text-align: center;\r\n        }\r\n        \r\n        .mt-20 {\r\n            margin-top: 20px;\r\n        }\r\n        \r\n        .mb-20 {\r\n            margin-bottom: 20px;\r\n        }\r\n        \r\n        .d-flex {\r\n            display: flex;\r\n        }\r\n        \r\n        .justify-between {\r\n            justify-content: space-between;\r\n        }\r\n        \r\n        .align-center {\r\n            align-items: center;\r\n        }\r\n        \r\n        .flex-wrap {\r\n            flex-wrap: wrap;\r\n        }\r\n        \r\n        .gap-10 {\r\n            gap: 10px;\r\n        }\r\n        \r\n        \/* \u52a0\u8f7d\u52a8\u753b *\/\r\n        .spinner {\r\n            display: inline-block;\r\n            width: 20px;\r\n            height: 20px;\r\n            border: 3px solid rgba(255, 255, 255, 0.3);\r\n            border-radius: 50%;\r\n            border-top-color: white;\r\n            animation: spin 1s ease-in-out infinite;\r\n        }\r\n        \r\n        @keyframes spin {\r\n            to { transform: rotate(360deg); }\r\n        }\r\n        \r\n        .loading-overlay {\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            right: 0;\r\n            bottom: 0;\r\n            background-color: rgba(255, 255, 255, 0.8);\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            z-index: 1000;\r\n            flex-direction: column;\r\n            font-size: 1.2rem;\r\n            color: var(--primary-color);\r\n        }\r\n        \r\n        .loading-spinner {\r\n            width: 50px;\r\n            height: 50px;\r\n            border: 5px solid #f3f3f3;\r\n            border-top: 5px solid var(--primary-color);\r\n            border-radius: 50%;\r\n            animation: spin 1s linear infinite;\r\n            margin-bottom: 20px;\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n    <div class=\"container\">\r\n        <header>\r\n            <div class=\"header-content\">\r\n                <div class=\"logo\">\r\n                    <i class=\"fas fa-balance-scale-right\"><\/i>\r\n                    <div class=\"logo-text\">\r\n                        <h1>\u4e0b\u80a2Y-Balance\u6d4b\u8bd5<\/h1>\r\n                        <p>\u57fa\u4e8eFMS\u5b98\u65b9\u89c4\u8303 (YBT-LQ) - \u5b8c\u6574\u7248<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n                <button class=\"nav-toggle\" id=\"menuToggle\">\r\n                    <i class=\"fas fa-bars\"><\/i>\r\n                <\/button>\r\n            <\/div>\r\n        <\/header>\r\n        \r\n        <main class=\"main-content\">\r\n            <!-- \u53d7\u8bd5\u8005\u4fe1\u606f -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-user\"><\/i> \u53d7\u8bd5\u8005\u4fe1\u606f<\/h2>\r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group\">\r\n                        <label for=\"subjectName\">\u59d3\u540d<\/label>\r\n                        <input type=\"text\" id=\"subjectName\" placeholder=\"\u8f93\u5165\u53d7\u8bd5\u8005\u59d3\u540d\">\r\n                    <\/div>\r\n                    <div class=\"form-group\">\r\n                        <label for=\"testDate\">\u6d4b\u8bd5\u65e5\u671f<\/label>\r\n                        <input type=\"date\" id=\"testDate\" value=\"\">\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group\">\r\n                        <label for=\"age\">\u5e74\u9f84<\/label>\r\n                        <input type=\"number\" id=\"age\" min=\"6\" max=\"100\" placeholder=\"\u5e74\u9f84\">\r\n                    <\/div>\r\n                    <div class=\"form-group\">\r\n                        <label for=\"gender\">\u6027\u522b<\/label>\r\n                        <select id=\"gender\">\r\n                            <option value=\"\">\u9009\u62e9\u6027\u522b<\/option>\r\n                            <option value=\"male\">\u7537\u6027<\/option>\r\n                            <option value=\"female\">\u5973\u6027<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <div class=\"form-group\">\r\n                    <label for=\"sportActivity\">\u8fd0\u52a8\/\u6d3b\u52a8\u7c7b\u578b<\/label>\r\n                    <select id=\"sportActivity\">\r\n                        <option value=\"\">\u9009\u62e9\u8fd0\u52a8\/\u6d3b\u52a8\u7c7b\u578b<\/option>\r\n                        <option value=\"basketball\">\u7bee\u7403<\/option>\r\n                        <option value=\"football\">\u7f8e\u5f0f\u8db3\u7403<\/option>\r\n                        <option value=\"soccer\">\u8db3\u7403<\/option>\r\n                        <option value=\"running\">\u8dd1\u6b65<\/option>\r\n                        <option value=\"rowing\">\u8d5b\u8247<\/option>\r\n                        <option value=\"general\">\u666e\u901a\u5065\u8eab<\/option>\r\n                        <option value=\"rehabilitation\">\u5eb7\u590d\u671f<\/option>\r\n                        <option value=\"other\">\u5176\u4ed6<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/section>\r\n            \r\n            <!-- \u80a2\u4f53\u957f\u5ea6\u6d4b\u91cf -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-ruler\"><\/i> \u4e0b\u80a2\u80a2\u4f53\u957f\u5ea6\u6d4b\u91cf<\/h2>\r\n                <div class=\"info-box\">\r\n                    <p><strong>\u6d4b\u91cf\u65b9\u6cd5:<\/strong> \u4ece\u9ac2\u524d\u4e0a\u68d8(ASIS)\u5230\u5185\u8e1d\u5c16\u7684\u8ddd\u79bb\u3002\u53d7\u8bd5\u8005\u4ef0\u5367\uff0c\u819d\u76d6\u4f38\u76f4\uff0c\u6d4b\u91cf\u81f3\u6700\u8fd10.5\u5398\u7c73\u3002<\/p>\r\n                <\/div>\r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group\">\r\n                        <label for=\"rightLegLength\">\u53f3\u817f\u957f\u5ea6 (cm)<\/label>\r\n                        <input type=\"number\" id=\"rightLegLength\" min=\"0\" step=\"0.5\" placeholder=\"\u4f8b\u5982: 85.5\">\r\n                    <\/div>\r\n                    <div class=\"form-group\">\r\n                        <label for=\"leftLegLength\">\u5de6\u817f\u957f\u5ea6 (cm)<\/label>\r\n                        <input type=\"number\" id=\"leftLegLength\" min=\"0\" step=\"0.5\" placeholder=\"\u4f8b\u5982: 85.0\">\r\n                    <\/div>\r\n                <\/div>\r\n            <\/section>\r\n            \r\n            <!-- \u6d4b\u8bd5\u8bf4\u660e -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-info-circle\"><\/i> \u6d4b\u8bd5\u8bf4\u660e\u4e0e\u6807\u51c6<\/h2>\r\n                <div class=\"info-box\">\r\n                    <p><strong>\u6d4b\u8bd5\u987a\u5e8f (FMS\u5b98\u65b9\u89c4\u8303):<\/strong><\/p>\r\n                    <div class=\"test-sequence\">\r\n                        <div class=\"test-step\"><span class=\"test-step-number\">1<\/span>\u53f3\u524d\u5411<\/div>\r\n                        <div class=\"test-step\"><span class=\"test-step-number\">2<\/span>\u5de6\u524d\u5411<\/div>\r\n                        <div class=\"test-step\"><span class=\"test-step-number\">3<\/span>\u53f3\u540e\u5185\u4fa7<\/div>\r\n                        <div class=\"test-step\"><span class=\"test-step-number\">4<\/span>\u5de6\u540e\u5185\u4fa7<\/div>\r\n                        <div class=\"test-step\"><span class=\"test-step-number\">5<\/span>\u53f3\u540e\u5916\u4fa7<\/div>\r\n                        <div class=\"test-step\"><span class=\"test-step-number\">6<\/span>\u5de6\u540e\u5916\u4fa7<\/div>\r\n                    <\/div>\r\n                    <p class=\"mt-20\"><strong>\u6ce8\u610f:<\/strong> \u6bcf\u4e2a\u65b9\u5411\u8fdb\u884c3\u6b21\u5c1d\u8bd5\uff0c\u8bb0\u5f55\u6700\u5927\u8ddd\u79bb\uff08\u975e\u5e73\u5747\u503c\uff09\u3002\u8ddd\u79bb\u6d4b\u91cf\u5230\u6700\u8fd10.5\u5398\u7c73\u3002<\/p>\r\n                <\/div>\r\n                \r\n                <div class=\"warning-box\">\r\n                    <p><strong>\u6d4b\u8bd5\u5931\u8d25\u6761\u4ef6 (\u4efb\u4f55\u4e00\u9879\u5c06\u5bfc\u81f4\u5c1d\u8bd5\u65e0\u6548):<\/strong><\/p>\r\n                    <ul>\r\n                        <li>\u8e22\u63a8\u7bb1<\/li>\r\n                        <li>\u672a\u53d7\u63a7\u8fd4\u56de\u8d77\u59cb\u4f4d\u7f6e<\/li>\r\n                        <li>\u89e6\u5730<\/li>\r\n                        <li>\u811a\u653e\u5728\u7ad9\u7acb\u677f\u4e0a<\/li>\r\n                    <\/ul>\r\n                <\/div>\r\n                \r\n                <div class=\"accordion\">\r\n                    <div class=\"accordion-item\">\r\n                        <div class=\"accordion-header\" id=\"thresholdHeader\">\r\n                            \u67e5\u770b\u8bc4\u4f30\u6807\u51c6\r\n                            <i class=\"fas fa-chevron-down\"><\/i>\r\n                        <\/div>\r\n                        <div class=\"accordion-content\" id=\"thresholdContent\">\r\n                            <p><strong>\u6839\u636eFMS\u5b98\u65b9\u6807\u51c6:<\/strong><\/p>\r\n                            <ul>\r\n                                <li><strong>\u524d\u5411\u4e0d\u5bf9\u79f0:<\/strong> > 4 cm (\u5371\u9669\u4fe1\u53f7)<\/li>\r\n                                <li><strong>\u540e\u5185\u4fa7\/\u540e\u5916\u4fa7\u4e0d\u5bf9\u79f0:<\/strong> > 6 cm (\u5371\u9669\u4fe1\u53f7)<\/li>\r\n                                <li><strong>\u590d\u5408\u5206\u6570\u9608\u503c (\u53c2\u8003):<\/strong>\r\n                                    <ul>\r\n                                        <li>\u9ad8\u4e2d\u7bee\u7403\u8fd0\u52a8\u5458: 94%<\/li>\r\n                                        <li>\u5927\u5b66\u8db3\u7403\u8fd0\u52a8\u5458: 89.6%<\/li>\r\n                                        <li>\u5927\u5b66\u8fd0\u52a8\u5458: \u9700\u6839\u636e\u8fd0\u52a8\u3001\u6027\u522b\u3001\u5e74\u9f84\u8c03\u6574<\/li>\r\n                                    <\/ul>\r\n                                <\/li>\r\n                            <\/ul>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <div class=\"form-group\">\r\n                    <label for=\"compositeThreshold\">\u81ea\u5b9a\u4e49\u590d\u5408\u5206\u6570\u9608\u503c (%)<\/label>\r\n                    <input type=\"number\" id=\"compositeThreshold\" min=\"0\" max=\"150\" step=\"0.1\" value=\"94\" placeholder=\"\u8f93\u5165\u9608\u503c\u767e\u5206\u6bd4\">\r\n                    <p style=\"font-size: 0.85rem; color: #666;\">\u6ce8: \u6839\u636e\u7814\u7a76\uff0c\u4e0d\u540c\u4eba\u7fa4\u7684\u9608\u503c\u4e0d\u540c\u3002\u9ad8\u4e2d\u7bee\u7403\u8fd0\u52a8\u5458\u4e3a94%\uff0c\u5927\u5b66\u8db3\u7403\u8fd0\u52a8\u5458\u4e3a89.6%\u3002<\/p>\r\n                <\/div>\r\n            <\/section>\r\n            \r\n            <!-- \u6d4b\u8bd5\u6570\u636e\u8f93\u5165 -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-edit\"><\/i> \u6d4b\u8bd5\u6570\u636e\u8f93\u5165<\/h2>\r\n                \r\n                <h3>\u53f3\u817f\u6d4b\u8bd5\u6570\u636e (cm)<\/h3>\r\n                <div class=\"reach-directions\">\r\n                    <div class=\"direction-group\">\r\n                        <div class=\"direction-title\">\u524d\u5411<\/div>\r\n                        <div class=\"direction-inputs\">\r\n                            <div>\r\n                                <label for=\"ra1\">\u5c1d\u8bd5 1<\/label>\r\n                                <input type=\"number\" id=\"ra1\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"ra2\">\u5c1d\u8bd5 2<\/label>\r\n                                <input type=\"number\" id=\"ra2\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"ra3\">\u5c1d\u8bd5 3<\/label>\r\n                                <input type=\"number\" id=\"ra3\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"direction-group\">\r\n                        <div class=\"direction-title\">\u540e\u5185\u4fa7<\/div>\r\n                        <div class=\"direction-inputs\">\r\n                            <div>\r\n                                <label for=\"rpm1\">\u5c1d\u8bd5 1<\/label>\r\n                                <input type=\"number\" id=\"rpm1\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"rpm2\">\u5c1d\u8bd5 2<\/label>\r\n                                <input type=\"number\" id=\"rpm2\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"rpm3\">\u5c1d\u8bd5 3<\/label>\r\n                                <input type=\"number\" id=\"rpm3\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"direction-group\">\r\n                        <div class=\"direction-title\">\u540e\u5916\u4fa7<\/div>\r\n                        <div class=\"direction-inputs\">\r\n                            <div>\r\n                                <label for=\"rpl1\">\u5c1d\u8bd5 1<\/label>\r\n                                <input type=\"number\" id=\"rpl1\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"rpl2\">\u5c1d\u8bd5 2<\/label>\r\n                                <input type=\"number\" id=\"rpl2\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"rpl3\">\u5c1d\u8bd5 3<\/label>\r\n                                <input type=\"number\" id=\"rpl3\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <h3 style=\"margin-top: 25px;\">\u5de6\u817f\u6d4b\u8bd5\u6570\u636e (cm)<\/h3>\r\n                <div class=\"reach-directions\">\r\n                    <div class=\"direction-group\">\r\n                        <div class=\"direction-title\">\u524d\u5411<\/div>\r\n                        <div class=\"direction-inputs\">\r\n                            <div>\r\n                                <label for=\"la1\">\u5c1d\u8bd5 1<\/label>\r\n                                <input type=\"number\" id=\"la1\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"la2\">\u5c1d\u8bd5 2<\/label>\r\n                                <input type=\"number\" id=\"la2\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"la3\">\u5c1d\u8bd5 3<\/label>\r\n                                <input type=\"number\" id=\"la3\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"direction-group\">\r\n                        <div class=\"direction-title\">\u540e\u5185\u4fa7<\/div>\r\n                        <div class=\"direction-inputs\">\r\n                            <div>\r\n                                <label for=\"lpm1\">\u5c1d\u8bd5 1<\/label>\r\n                                <input type=\"number\" id=\"lpm1\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"lpm2\">\u5c1d\u8bd5 2<\/label>\r\n                                <input type=\"number\" id=\"lpm2\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"lpm3\">\u5c1d\u8bd5 3<\/label>\r\n                                <input type=\"number\" id=\"lpm3\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"direction-group\">\r\n                        <div class=\"direction-title\">\u540e\u5916\u4fa7<\/div>\r\n                        <div class=\"direction-inputs\">\r\n                            <div>\r\n                                <label for=\"lpl1\">\u5c1d\u8bd5 1<\/label>\r\n                                <input type=\"number\" id=\"lpl1\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"lpl2\">\u5c1d\u8bd5 2<\/label>\r\n                                <input type=\"number\" id=\"lpl2\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                            <div>\r\n                                <label for=\"lpl3\">\u5c1d\u8bd5 3<\/label>\r\n                                <input type=\"number\" id=\"lpl3\" min=\"0\" step=\"0.5\" placeholder=\"0.0\">\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <button class=\"btn\" id=\"calculateBtn\">\r\n                    <i class=\"fas fa-calculator\"><\/i> \u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\r\n                <\/button>\r\n                <button class=\"btn btn-reset\" id=\"resetBtn\">\r\n                    <i class=\"fas fa-redo\"><\/i> \u91cd\u7f6e\u6240\u6709\u6570\u636e\r\n                <\/button>\r\n            <\/section>\r\n            \r\n            <!-- \u6d4b\u8bd5\u7ed3\u679c -->\r\n            <section class=\"results-container\" id=\"resultsContainer\">\r\n                <div class=\"results-header\">\r\n                    <h2 class=\"results-title\"><i class=\"fas fa-chart-bar\"><\/i> \u6d4b\u8bd5\u7ed3\u679c<\/h2>\r\n                    <div class=\"d-flex gap-10 flex-wrap\">\r\n                        <button class=\"btn-secondary\" id=\"exportBtn\">\r\n                            <i class=\"fas fa-download\"><\/i> \u5bfc\u51fa\u7ed3\u679c\r\n                        <\/button>\r\n                        <button class=\"btn-success\" id=\"saveBtn\">\r\n                            <i class=\"fas fa-save\"><\/i> \u4fdd\u5b58\u7ed3\u679c\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <div class=\"results-grid\">\r\n                    <div class=\"result-card\">\r\n                        <div class=\"result-label\">\u53f3\u817f\u590d\u5408\u5206\u6570<\/div>\r\n                        <div class=\"result-value\" id=\"rightComposite\">0.0<\/div>\r\n                        <div class=\"result-label\">% \u80a2\u4f53\u957f\u5ea6<\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"result-card\">\r\n                        <div class=\"result-label\">\u5de6\u817f\u590d\u5408\u5206\u6570<\/div>\r\n                        <div class=\"result-value\" id=\"leftComposite\">0.0<\/div>\r\n                        <div class=\"result-label\">% \u80a2\u4f53\u957f\u5ea6<\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"result-card\">\r\n                        <div class=\"result-label\">\u524d\u5411\u4e0d\u5bf9\u79f0<\/div>\r\n                        <div class=\"result-value\" id=\"anteriorAsymmetry\">0.0<\/div>\r\n                        <div class=\"result-label\">\u5398\u7c73<\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"result-card\">\r\n                        <div class=\"result-label\">\u6700\u5927\u4e0d\u5bf9\u79f0<\/div>\r\n                        <div class=\"result-value\" id=\"maxAsymmetry\">0.0<\/div>\r\n                        <div class=\"result-label\">\u5398\u7c73<\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <h3 style=\"margin-top: 25px;\">\u8be6\u7ec6\u7ed3\u679c\u8868<\/h3>\r\n                <table class=\"results-table\">\r\n                    <thead>\r\n                        <tr>\r\n                            <th>\u65b9\u5411<\/th>\r\n                            <th>\u53f3\u817f (cm)<\/th>\r\n                            <th>\u5de6\u817f (cm)<\/th>\r\n                            <th>\u5dee\u5f02 (cm)<\/th>\r\n                            <th>\u6807\u51c6<\/th>\r\n                        <\/tr>\r\n                    <\/thead>\r\n                    <tbody>\r\n                        <tr>\r\n                            <td>\u524d\u5411<\/td>\r\n                            <td id=\"rightAnteriorMax\">0.0<\/td>\r\n                            <td id=\"leftAnteriorMax\">0.0<\/td>\r\n                            <td id=\"anteriorDiff\">0.0<\/td>\r\n                            <td id=\"anteriorStandard\">-<\/td>\r\n                        <\/tr>\r\n                        <tr>\r\n                            <td>\u540e\u5185\u4fa7<\/td>\r\n                            <td id=\"rightPosteromedialMax\">0.0<\/td>\r\n                            <td id=\"leftPosteromedialMax\">0.0<\/td>\r\n                            <td id=\"posteromedialDiff\">0.0<\/td>\r\n                            <td id=\"posteromedialStandard\">-<\/td>\r\n                        <\/tr>\r\n                        <tr>\r\n                            <td>\u540e\u5916\u4fa7<\/td>\r\n                            <td id=\"rightPosterolateralMax\">0.0<\/td>\r\n                            <td id=\"leftPosterolateralMax\">0.0<\/td>\r\n                            <td id=\"posterolateralDiff\">0.0<\/td>\r\n                            <td id=\"posterolateralStandard\">-<\/td>\r\n                        <\/tr>\r\n                        <tr>\r\n                            <td><strong>\u590d\u5408\u5206\u6570<\/strong><\/td>\r\n                            <td id=\"rightCompositeScore\">0.0%<\/td>\r\n                            <td id=\"leftCompositeScore\">0.0%<\/td>\r\n                            <td>-<\/td>\r\n                            <td id=\"compositeStandard\">-<\/td>\r\n                        <\/tr>\r\n                    <\/tbody>\r\n                <\/table>\r\n                \r\n                <div id=\"asymmetryAlert\" class=\"danger-box\" style=\"display: none;\">\r\n                    <i class=\"fas fa-exclamation-triangle\"><\/i> <strong>\u6ce8\u610f:<\/strong> \u68c0\u6d4b\u5230\u663e\u8457\u7684\u529f\u80fd\u4e0d\u5bf9\u79f0\u6027\u3002\u524d\u5411\u4e0d\u5bf9\u79f0>4cm\u6216\u540e\u5185\u4fa7\/\u540e\u5916\u4fa7\u4e0d\u5bf9\u79f0>6cm\uff0c\u53ef\u80fd\u5b58\u5728\u53d7\u4f24\u98ce\u9669\u589e\u52a0\u3002\r\n                <\/div>\r\n                \r\n                <div id=\"compositeAlert\" class=\"danger-box\" style=\"display: none; margin-top: 15px;\">\r\n                    <i class=\"fas fa-exclamation-triangle\"><\/i> <strong>\u8b66\u544a:<\/strong> \u590d\u5408\u5206\u6570\u4f4e\u4e8e\u9608\u503c\u3002\u6839\u636e\u7814\u7a76\uff0c\u8fd9\u53ef\u80fd\u589e\u52a0\u4e0b\u80a2\u53d7\u4f24\u98ce\u9669\u3002\r\n                <\/div>\r\n                \r\n                <div class=\"accordion mt-20\">\r\n                    <div class=\"accordion-item\">\r\n                        <div class=\"accordion-header\" id=\"recommendationHeader\">\r\n                            \u67e5\u770b\u5efa\u8bae\u4e0e\u89e3\u91ca\r\n                            <i class=\"fas fa-chevron-down\"><\/i>\r\n                        <\/div>\r\n                        <div class=\"accordion-content\" id=\"recommendationContent\">\r\n                            <div id=\"recommendations\">\r\n                                <p>\u6839\u636e\u6d4b\u8bd5\u7ed3\u679c\uff0c\u5efa\u8bae\uff1a<\/p>\r\n                                <ul>\r\n                                    <li>\u5b8c\u6210\u6d4b\u8bd5\u8ba1\u7b97\u4ee5\u83b7\u53d6\u4e2a\u6027\u5316\u5efa\u8bae<\/li>\r\n                                <\/ul>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/section>\r\n            \r\n            <!-- \u62a5\u544a\u5bfc\u51fa -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-file-image\"><\/i> \u62a5\u544a\u5bfc\u51fa<\/h2>\r\n                \r\n                <div class=\"info-box\">\r\n                    <p><strong>\u4e2a\u4eba\u62a5\u544a\u5bfc\u51fa:<\/strong> \u5c06\u6d4b\u8bd5\u7ed3\u679c\u5bfc\u51fa\u4e3a\u9ad8\u8d28\u91cf\u7684PNG\u56fe\u7247\uff0c\u53ef\u7528\u4e8e\u6253\u5370\u3001\u5b58\u6863\u6216\u5206\u4eab\u3002<\/p>\r\n                <\/div>\r\n                \r\n                <div class=\"form-group\">\r\n                    <label for=\"reportTitle\">\u62a5\u544a\u6807\u9898<\/label>\r\n                    <input type=\"text\" id=\"reportTitle\" placeholder=\"\u8f93\u5165\u62a5\u544a\u6807\u9898\" value=\"\u4e0b\u80a2Y-Balance\u6d4b\u8bd5\u62a5\u544a\">\r\n                <\/div>\r\n                \r\n                <div class=\"form-group\">\r\n                    <label for=\"reportNotes\">\u5907\u6ce8\u4fe1\u606f<\/label>\r\n                    <textarea id=\"reportNotes\" rows=\"4\" placeholder=\"\u8f93\u5165\u6d4b\u8bd5\u5907\u6ce8\u3001\u89c2\u5bdf\u7ed3\u679c\u6216\u4e2a\u6027\u5316\u5efa\u8bae...\"><\/textarea>\r\n                <\/div>\r\n                \r\n                <button class=\"btn btn-info\" id=\"exportImageBtn\">\r\n                    <i class=\"fas fa-file-export\"><\/i> \u5bfc\u51fa\u4e2a\u4eba\u62a5\u544a\u4e3a\u56fe\u7247\r\n                <\/button>\r\n                \r\n                <div class=\"warning-box mt-20\">\r\n                    <p><strong>\u63d0\u793a:<\/strong> \u62a5\u544a\u5bfc\u51fa\u529f\u80fd\u9700\u8981\u5148\u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\u3002\u786e\u4fdd\u6240\u6709\u6d4b\u8bd5\u6570\u636e\u5df2\u586b\u5199\u5e76\u70b9\u51fb\"\u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\"\u6309\u94ae\u3002<\/p>\r\n                <\/div>\r\n            <\/section>\r\n            \r\n            <!-- \u6570\u636e\u7ba1\u7406\u4e0e\u7edf\u8ba1 -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-database\"><\/i> \u6570\u636e\u7ba1\u7406\u4e0e\u7edf\u8ba1<\/h2>\r\n                \r\n                <div class=\"info-box\">\r\n                    <p><strong>\u6570\u636e\u7ba1\u7406\u529f\u80fd:<\/strong> \u6240\u6709\u6d4b\u8bd5\u6570\u636e\u5c06\u4fdd\u5b58\u5230\u60a8\u7684\u6d4f\u89c8\u5668\u672c\u5730\u5b58\u50a8\u4e2d\uff0c\u4e0d\u4f1a\u4e0a\u4f20\u5230\u4efb\u4f55\u670d\u52a1\u5668\u3002\u60a8\u53ef\u4ee5\u968f\u65f6\u5bfc\u51fa\u6570\u636e\u5907\u4efd\u6216\u5bfc\u5165\u4e4b\u524d\u4fdd\u5b58\u7684\u6570\u636e\u3002<\/p>\r\n                <\/div>\r\n                \r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group\">\r\n                        <label for=\"searchName\">\u6309\u59d3\u540d\u641c\u7d22<\/label>\r\n                        <input type=\"text\" id=\"searchName\" placeholder=\"\u8f93\u5165\u59d3\u540d\u641c\u7d22\u8bb0\u5f55\">\r\n                    <\/div>\r\n                    <div class=\"form-group\">\r\n                        <label for=\"searchDate\">\u6309\u65e5\u671f\u7b5b\u9009<\/label>\r\n                        <input type=\"date\" id=\"searchDate\">\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <div class=\"d-flex gap-10 flex-wrap\">\r\n                    <button class=\"btn-secondary\" id=\"loadHistoryBtn\">\r\n                        <i class=\"fas fa-history\"><\/i> \u52a0\u8f7d\u5386\u53f2\u8bb0\u5f55\r\n                    <\/button>\r\n                    <button class=\"btn-info\" id=\"analyzeBtn\">\r\n                        <i class=\"fas fa-chart-pie\"><\/i> \u8fd0\u884c\u7edf\u8ba1\u5206\u6790\r\n                    <\/button>\r\n                    <button class=\"btn-success\" id=\"exportAllBtn\">\r\n                        <i class=\"fas fa-file-export\"><\/i> \u5bfc\u51fa\u6240\u6709\u6570\u636e\r\n                    <\/button>\r\n                    <button class=\"btn-danger\" id=\"clearAllBtn\">\r\n                        <i class=\"fas fa-trash-alt\"><\/i> \u6e05\u7a7a\u6240\u6709\u6570\u636e\r\n                    <\/button>\r\n                <\/div>\r\n                \r\n                <div class=\"form-group mt-20\">\r\n                    <label for=\"importFile\">\u5bfc\u5165\u6570\u636e\u6587\u4ef6<\/label>\r\n                    <input type=\"file\" id=\"importFile\" accept=\".json\">\r\n                    <button class=\"btn-secondary mt-10\" id=\"importBtn\">\r\n                        <i class=\"fas fa-file-import\"><\/i> \u5bfc\u5165\u6570\u636e\r\n                    <\/button>\r\n                <\/div>\r\n                \r\n                <div id=\"historyContainer\" class=\"mt-20\" style=\"display: none;\">\r\n                    <h3>\u5386\u53f2\u8bb0\u5f55 (<span id=\"recordCount\">0<\/span> \u6761)<\/h3>\r\n                    <div class=\"history-table-container\">\r\n                        <table class=\"history-table\" id=\"historyTable\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th>\u59d3\u540d<\/th>\r\n                                    <th>\u65e5\u671f<\/th>\r\n                                    <th>\u5e74\u9f84<\/th>\r\n                                    <th>\u6027\u522b<\/th>\r\n                                    <th>\u8fd0\u52a8\u7c7b\u578b<\/th>\r\n                                    <th>\u53f3\u590d\u5408\u5206<\/th>\r\n                                    <th>\u5de6\u590d\u5408\u5206<\/th>\r\n                                    <th>\u524d\u5411\u4e0d\u5bf9\u79f0<\/th>\r\n                                    <th>\u98ce\u9669\u7b49\u7ea7<\/th>\r\n                                    <th>\u64cd\u4f5c<\/th>\r\n                                <\/tr>\r\n                            <\/thead>\r\n                            <tbody id=\"historyTableBody\">\r\n                                <!-- \u5386\u53f2\u8bb0\u5f55\u5c06\u52a8\u6001\u52a0\u8f7d\u5230\u8fd9\u91cc -->\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <div id=\"statsContainer\" class=\"stats-container\" style=\"display: none;\">\r\n                    <h3>\u7edf\u8ba1\u5206\u6790\u7ed3\u679c<\/h3>\r\n                    <div id=\"statsContent\">\r\n                        <!-- \u7edf\u8ba1\u5185\u5bb9\u5c06\u52a8\u6001\u751f\u6210 -->\r\n                    <\/div>\r\n                <\/div>\r\n            <\/section>\r\n            \r\n            <!-- \u5feb\u901f\u793a\u4f8b\u586b\u5145 -->\r\n            <section class=\"card\">\r\n                <h2 class=\"card-title\"><i class=\"fas fa-vial\"><\/i> \u5feb\u901f\u793a\u4f8b<\/h2>\r\n                <p>\u70b9\u51fb\u4e0b\u65b9\u6309\u94ae\u586b\u5145\u793a\u4f8b\u6570\u636e\u4ee5\u4f53\u9a8c\u8ba1\u7b97\u5668\u529f\u80fd\uff1a<\/p>\r\n                <button class=\"btn-secondary\" id=\"fillSampleBtn\">\r\n                    <i class=\"fas fa-magic\"><\/i> \u586b\u5145\u793a\u4f8b\u6570\u636e\r\n                <\/button>\r\n            <\/section>\r\n        <\/main>\r\n        \r\n        <footer>\r\n            <p>\u00a9 2023 \u4e0b\u80a2Y-Balance\u6d4b\u8bd5\u8ba1\u7b97\u5668 | \u57fa\u4e8e\u529f\u80fd\u6027\u8fd0\u52a8\u7cfb\u7edf(FMS)\u5b98\u65b9\u89c4\u8303<\/p>\r\n            <p style=\"margin-top: 8px; font-size: 0.8rem;\">\u4ec5\u4f9b\u4e13\u4e1a\u533b\u7597\u4eba\u5458\u4f7f\u7528\u3002\u6b64\u5de5\u5177\u4ec5\u4f5c\u4e3a\u8f85\u52a9\u8bc4\u4f30\uff0c\u4e0d\u80fd\u66ff\u4ee3\u4e13\u4e1a\u533b\u7597\u8bca\u65ad\u3002<\/p>\r\n            <p style=\"margin-top: 5px; font-size: 0.8rem;\">\u53c2\u8003: Functional Movement Systems, Gray Cook and Phil Plisky. Y Balance Test Manual.<\/p>\r\n            <p style=\"margin-top: 15px;\">\r\n                <a href=\"#\" style=\"color: #1a6dbb; text-decoration: none;\">\u4e0a\u80a2YBT\u6d4b\u8bd5<\/a> | \r\n                <a href=\"#\" style=\"color: #1a6dbb; text-decoration: none;\">\u5173\u4e8eYBT\u6d4b\u8bd5<\/a>\r\n            <\/p>\r\n        <\/footer>\r\n        \r\n        <!-- \u62a5\u544a\u5bb9\u5668\uff08\u9690\u85cf\uff0c\u7528\u4e8e\u751f\u6210\u56fe\u7247\uff09 -->\r\n        <div id=\"reportForExport\" class=\"report-container\">\r\n            <!-- \u62a5\u544a\u5185\u5bb9\u5c06\u901a\u8fc7JavaScript\u52a8\u6001\u751f\u6210 -->\r\n        <\/div>\r\n        \r\n        <!-- \u52a0\u8f7d\u8986\u76d6\u5c42 -->\r\n        <div id=\"loadingOverlay\" class=\"loading-overlay\" style=\"display: none;\">\r\n            <div class=\"loading-spinner\"><\/div>\r\n            <p>\u6b63\u5728\u751f\u6210\u62a5\u544a\u56fe\u7247...<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    \r\n    <script>\r\n        \/\/ \u8bbe\u7f6e\u9ed8\u8ba4\u6d4b\u8bd5\u65e5\u671f\u4e3a\u4eca\u5929\r\n        document.getElementById('testDate').valueAsDate = new Date();\r\n        \r\n        \/\/ \u6298\u53e0\u9762\u677f\u529f\u80fd\r\n        document.getElementById('thresholdHeader').addEventListener('click', function() {\r\n            const content = document.getElementById('thresholdContent');\r\n            const icon = this.querySelector('i');\r\n            \r\n            content.classList.toggle('active');\r\n            this.classList.toggle('active');\r\n            \r\n            if (content.classList.contains('active')) {\r\n                icon.classList.remove('fa-chevron-down');\r\n                icon.classList.add('fa-chevron-up');\r\n            } else {\r\n                icon.classList.remove('fa-chevron-up');\r\n                icon.classList.add('fa-chevron-down');\r\n            }\r\n        });\r\n        \r\n        document.getElementById('recommendationHeader').addEventListener('click', function() {\r\n            const content = document.getElementById('recommendationContent');\r\n            const icon = this.querySelector('i');\r\n            \r\n            content.classList.toggle('active');\r\n            this.classList.toggle('active');\r\n            \r\n            if (content.classList.contains('active')) {\r\n                icon.classList.remove('fa-chevron-down');\r\n                icon.classList.add('fa-chevron-up');\r\n            } else {\r\n                icon.classList.remove('fa-chevron-up');\r\n                icon.classList.add('fa-chevron-down');\r\n            }\r\n        });\r\n        \r\n        \/\/ \u8ba1\u7b97\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('calculateBtn').addEventListener('click', calculateResults);\r\n        \r\n        \/\/ \u91cd\u7f6e\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('resetBtn').addEventListener('click', function() {\r\n            if (confirm(\"\u786e\u5b9a\u8981\u91cd\u7f6e\u6240\u6709\u6d4b\u8bd5\u6570\u636e\u5417\uff1f\")) {\r\n                resetForm();\r\n            }\r\n        });\r\n        \r\n        \/\/ \u5bfc\u51fa\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('exportBtn').addEventListener('click', exportResults);\r\n        \r\n        \/\/ \u4fdd\u5b58\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('saveBtn').addEventListener('click', saveTestResult);\r\n        \r\n        \/\/ \u5bfc\u51fa\u56fe\u7247\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('exportImageBtn').addEventListener('click', exportReportToImage);\r\n        \r\n        \/\/ \u793a\u4f8b\u6570\u636e\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('fillSampleBtn').addEventListener('click', fillSampleData);\r\n        \r\n        \/\/ \u5386\u53f2\u8bb0\u5f55\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('loadHistoryBtn').addEventListener('click', loadHistoryRecords);\r\n        \r\n        \/\/ \u7edf\u8ba1\u5206\u6790\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('analyzeBtn').addEventListener('click', performStatisticalAnalysis);\r\n        \r\n        \/\/ \u5bfc\u51fa\u6240\u6709\u6570\u636e\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('exportAllBtn').addEventListener('click', exportAllData);\r\n        \r\n        \/\/ \u6e05\u7a7a\u6240\u6709\u6570\u636e\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('clearAllBtn').addEventListener('click', function() {\r\n            if (confirm(\"\u786e\u5b9a\u8981\u6e05\u7a7a\u6240\u6709\u4fdd\u5b58\u7684\u6570\u636e\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01\")) {\r\n                clearAllRecords();\r\n            }\r\n        });\r\n        \r\n        \/\/ \u5bfc\u5165\u6570\u636e\u6309\u94ae\u4e8b\u4ef6\r\n        document.getElementById('importBtn').addEventListener('click', importDataFromFile);\r\n        \r\n        \/\/ \u641c\u7d22\u529f\u80fd\r\n        document.getElementById('searchName').addEventListener('input', loadHistoryRecords);\r\n        document.getElementById('searchDate').addEventListener('change', loadHistoryRecords);\r\n        \r\n        \/\/ \u83dc\u5355\u5207\u6362\u6309\u94ae\uff08\u79fb\u52a8\u7aef\uff09\r\n        document.getElementById('menuToggle').addEventListener('click', function() {\r\n            alert(\"\u79fb\u52a8\u7aef\u83dc\u5355\u529f\u80fd\uff08\u793a\u4f8b\uff09\");\r\n        });\r\n        \r\n        \/\/ \u5168\u5c40\u53d8\u91cf\u7528\u4e8e\u5b58\u50a8\u5f53\u524d\u8ba1\u7b97\u7ed3\u679c\r\n        let currentResult = null;\r\n        \r\n        \/\/ \u8ba1\u7b97YBT\u7ed3\u679c\r\n        function calculateResults() {\r\n            \/\/ \u83b7\u53d6\u53d7\u8bd5\u8005\u4fe1\u606f\r\n            const subjectName = document.getElementById('subjectName').value;\r\n            const testDate = document.getElementById('testDate').value;\r\n            const age = document.getElementById('age').value;\r\n            const gender = document.getElementById('gender').value;\r\n            const sportActivity = document.getElementById('sportActivity').value;\r\n            const rightLegLength = parseFloat(document.getElementById('rightLegLength').value);\r\n            const leftLegLength = parseFloat(document.getElementById('leftLegLength').value);\r\n            const compositeThreshold = parseFloat(document.getElementById('compositeThreshold').value);\r\n            \r\n            \/\/ \u9a8c\u8bc1\u8f93\u5165\r\n            if (!subjectName) {\r\n                alert(\"\u8bf7\u8f93\u5165\u53d7\u8bd5\u8005\u59d3\u540d\");\r\n                return;\r\n            }\r\n            \r\n            if (isNaN(rightLegLength) || isNaN(leftLegLength) || rightLegLength <= 0 || leftLegLength <= 0) {\r\n                alert(\"\u8bf7\u8f93\u5165\u6709\u6548\u7684\u4e0b\u80a2\u80a2\u4f53\u957f\u5ea6\uff08\u6b63\u6570\uff09\");\r\n                return;\r\n            }\r\n            \r\n            \/\/ \u8ba1\u7b97\u6bcf\u4e2a\u65b9\u5411\u7684\u6700\u5927\u503c\r\n            const rightAnterior = Math.max(\r\n                parseFloat(document.getElementById('ra1').value) || 0,\r\n                parseFloat(document.getElementById('ra2').value) || 0,\r\n                parseFloat(document.getElementById('ra3').value) || 0\r\n            );\r\n            \r\n            const rightPosteromedial = Math.max(\r\n                parseFloat(document.getElementById('rpm1').value) || 0,\r\n                parseFloat(document.getElementById('rpm2').value) || 0,\r\n                parseFloat(document.getElementById('rpm3').value) || 0\r\n            );\r\n            \r\n            const rightPosterolateral = Math.max(\r\n                parseFloat(document.getElementById('rpl1').value) || 0,\r\n                parseFloat(document.getElementById('rpl2').value) || 0,\r\n                parseFloat(document.getElementById('rpl3').value) || 0\r\n            );\r\n            \r\n            const leftAnterior = Math.max(\r\n                parseFloat(document.getElementById('la1').value) || 0,\r\n                parseFloat(document.getElementById('la2').value) || 0,\r\n                parseFloat(document.getElementById('la3').value) || 0\r\n            );\r\n            \r\n            const leftPosteromedial = Math.max(\r\n                parseFloat(document.getElementById('lpm1').value) || 0,\r\n                parseFloat(document.getElementById('lpm2').value) || 0,\r\n                parseFloat(document.getElementById('lpm3').value) || 0\r\n            );\r\n            \r\n            const leftPosterolateral = Math.max(\r\n                parseFloat(document.getElementById('lpl1').value) || 0,\r\n                parseFloat(document.getElementById('lpl2').value) || 0,\r\n                parseFloat(document.getElementById('lpl3').value) || 0\r\n            );\r\n            \r\n            \/\/ \u9a8c\u8bc1\u6d4b\u8bd5\u6570\u636e\r\n            if (rightAnterior === 0 && rightPosteromedial === 0 && rightPosterolateral === 0) {\r\n                alert(\"\u8bf7\u81f3\u5c11\u8f93\u5165\u4e00\u4e2a\u65b9\u5411\u7684\u6d4b\u8bd5\u6570\u636e\");\r\n                return;\r\n            }\r\n            \r\n            \/\/ \u8ba1\u7b97\u603b\u548c\r\n            const rightTotal = rightAnterior + rightPosteromedial + rightPosterolateral;\r\n            const leftTotal = leftAnterior + leftPosteromedial + leftPosterolateral;\r\n            \r\n            \/\/ \u8ba1\u7b97\u590d\u5408\u5206\u6570\uff08\u767e\u5206\u6bd4\uff09\r\n            const rightComposite = (rightTotal \/ (3 * rightLegLength)) * 100;\r\n            const leftComposite = (leftTotal \/ (3 * leftLegLength)) * 100;\r\n            \r\n            \/\/ \u8ba1\u7b97\u4e0d\u5bf9\u79f0\u6027\r\n            const anteriorDiff = Math.abs(rightAnterior - leftAnterior);\r\n            const posteromedialDiff = Math.abs(rightPosteromedial - leftPosteromedial);\r\n            const posterolateralDiff = Math.abs(rightPosterolateral - leftPosterolateral);\r\n            \r\n            const maxAsymmetry = Math.max(anteriorDiff, posteromedialDiff, posterolateralDiff);\r\n            \r\n            \/\/ \u8bc4\u4f30\u6807\u51c6\r\n            const anteriorStandard = anteriorDiff <= 4 ? \"optimal\" : (anteriorDiff > 4 && anteriorDiff <= 6 ? \"pass\" : \"below\");\r\n            const posteromedialStandard = posteromedialDiff <= 6 ? \"optimal\" : \"below\";\r\n            const posterolateralStandard = posterolateralDiff <= 6 ? \"optimal\" : \"below\";\r\n            \r\n            const rightCompositeStandard = rightComposite >= compositeThreshold ? \"optimal\" : \"below\";\r\n            const leftCompositeStandard = leftComposite >= compositeThreshold ? \"optimal\" : \"below\";\r\n            const compositeStandard = rightComposite >= compositeThreshold && leftComposite >= compositeThreshold ? \"optimal\" : \"below\";\r\n            \r\n            \/\/ \u66f4\u65b0\u7ed3\u679c\u663e\u793a\r\n            document.getElementById('rightComposite').textContent = rightComposite.toFixed(1);\r\n            document.getElementById('leftComposite').textContent = leftComposite.toFixed(1);\r\n            document.getElementById('anteriorAsymmetry').textContent = anteriorDiff.toFixed(1);\r\n            document.getElementById('maxAsymmetry').textContent = maxAsymmetry.toFixed(1);\r\n            \r\n            \/\/ \u66f4\u65b0\u8be6\u7ec6\u6570\u636e\r\n            document.getElementById('rightAnteriorMax').textContent = rightAnterior.toFixed(1);\r\n            document.getElementById('rightPosteromedialMax').textContent = rightPosteromedial.toFixed(1);\r\n            document.getElementById('rightPosterolateralMax').textContent = rightPosterolateral.toFixed(1);\r\n            \r\n            document.getElementById('leftAnteriorMax').textContent = leftAnterior.toFixed(1);\r\n            document.getElementById('leftPosteromedialMax').textContent = leftPosteromedial.toFixed(1);\r\n            document.getElementById('leftPosterolateralMax').textContent = leftPosterolateral.toFixed(1);\r\n            \r\n            document.getElementById('anteriorDiff').textContent = anteriorDiff.toFixed(1);\r\n            document.getElementById('posteromedialDiff').textContent = posteromedialDiff.toFixed(1);\r\n            document.getElementById('posterolateralDiff').textContent = posterolateralDiff.toFixed(1);\r\n            \r\n            document.getElementById('rightCompositeScore').textContent = rightComposite.toFixed(1) + \"%\";\r\n            document.getElementById('leftCompositeScore').textContent = leftComposite.toFixed(1) + \"%\";\r\n            \r\n            \/\/ \u66f4\u65b0\u6807\u51c6\u8bc4\u4f30\r\n            document.getElementById('anteriorStandard').innerHTML = getStandardHTML(anteriorStandard);\r\n            document.getElementById('posteromedialStandard').innerHTML = getStandardHTML(posteromedialStandard);\r\n            document.getElementById('posterolateralStandard').innerHTML = getStandardHTML(posterolateralStandard);\r\n            document.getElementById('compositeStandard').innerHTML = getStandardHTML(compositeStandard);\r\n            \r\n            \/\/ \u663e\u793a\u4e0d\u5bf9\u79f0\u6027\u8b66\u544a\r\n            const asymmetryAlert = document.getElementById('asymmetryAlert');\r\n            const compositeAlert = document.getElementById('compositeAlert');\r\n            \r\n            if (anteriorDiff > 4 || posteromedialDiff > 6 || posterolateralDiff > 6) {\r\n                asymmetryAlert.style.display = 'block';\r\n            } else {\r\n                asymmetryAlert.style.display = 'none';\r\n            }\r\n            \r\n            if (rightComposite < compositeThreshold || leftComposite < compositeThreshold) {\r\n                compositeAlert.style.display = 'block';\r\n            } else {\r\n                compositeAlert.style.display = 'none';\r\n            }\r\n            \r\n            \/\/ \u663e\u793a\u7ed3\u679c\u5bb9\u5668\r\n            document.getElementById('resultsContainer').style.display = 'block';\r\n            \r\n            \/\/ \u751f\u6210\u5efa\u8bae\r\n            generateRecommendations(rightComposite, leftComposite, anteriorDiff, compositeThreshold);\r\n            \r\n            \/\/ \u4fdd\u5b58\u5f53\u524d\u8ba1\u7b97\u7ed3\u679c\u5230\u5168\u5c40\u53d8\u91cf\r\n            currentResult = {\r\n                subjectName,\r\n                testDate,\r\n                age,\r\n                gender,\r\n                sportActivity,\r\n                rightLegLength,\r\n                leftLegLength,\r\n                compositeThreshold,\r\n                rightAnterior,\r\n                rightPosteromedial,\r\n                rightPosterolateral,\r\n                leftAnterior,\r\n                leftPosteromedial,\r\n                leftPosterolateral,\r\n                rightComposite,\r\n                leftComposite,\r\n                anteriorDiff,\r\n                posteromedialDiff,\r\n                posterolateralDiff,\r\n                maxAsymmetry,\r\n                anteriorStandard,\r\n                posteromedialStandard,\r\n                posterolateralStandard,\r\n                compositeStandard,\r\n                timestamp: new Date().getTime(),\r\n                id: 'result_' + new Date().getTime() + '_' + Math.random().toString(36).substr(2, 9)\r\n            };\r\n            \r\n            \/\/ \u6eda\u52a8\u5230\u7ed3\u679c\u533a\u57df\r\n            document.getElementById('resultsContainer').scrollIntoView({ behavior: 'smooth' });\r\n        }\r\n        \r\n        \/\/ \u83b7\u53d6\u6807\u51c6HTML\r\n        function getStandardHTML(standard) {\r\n            switch(standard) {\r\n                case \"optimal\":\r\n                    return '<span class=\"standard-optimal\">\u4f18\u79c0<\/span>';\r\n                case \"pass\":\r\n                    return '<span class=\"standard-pass\">\u5408\u683c<\/span>';\r\n                case \"below\":\r\n                    return '<span class=\"standard-below\">\u9700\u6539\u8fdb<\/span>';\r\n                default:\r\n                    return \"-\";\r\n            }\r\n        }\r\n        \r\n        \/\/ \u751f\u6210\u5efa\u8bae\r\n        function generateRecommendations(rightComposite, leftComposite, anteriorDiff, threshold) {\r\n            const recommendations = document.getElementById('recommendations');\r\n            let recommendationHTML = \"<p>\u6839\u636e\u6d4b\u8bd5\u7ed3\u679c\uff0c\u5efa\u8bae\uff1a<\/p><ul>\";\r\n            \r\n            if (anteriorDiff > 4) {\r\n                recommendationHTML += \"<li>\u8fdb\u884c\u524d\u5411\u4e0d\u5bf9\u79f0\u6027\u7684\u9488\u5bf9\u6027\u8bad\u7ec3\uff0c\u6539\u5584\u52a8\u6001\u5e73\u8861<\/li>\";\r\n            }\r\n            \r\n            if (rightComposite < threshold || leftComposite < threshold) {\r\n                recommendationHTML += `<li>\u8fdb\u884c\u4e0b\u80a2\u529b\u91cf\u3001\u67d4\u97e7\u6027\u548c\u6838\u5fc3\u7a33\u5b9a\u6027\u8bad\u7ec3\u4ee5\u63d0\u9ad8\u590d\u5408\u5206\u6570\uff08\u76ee\u6807\u2265${threshold}%\uff09<\/li>`;\r\n            }\r\n            \r\n            if (anteriorDiff <= 4 && rightComposite >= threshold && leftComposite >= threshold) {\r\n                recommendationHTML += \"<li>\u4e0b\u80a2\u529f\u80fd\u826f\u597d\uff0c\u5efa\u8bae\u7ef4\u6301\u5f53\u524d\u8bad\u7ec3\u8ba1\u5212<\/li>\";\r\n            }\r\n            \r\n            if (anteriorDiff > 4 || rightComposite < threshold || leftComposite < threshold) {\r\n                recommendationHTML += \"<li>\u8003\u8651\u7ed3\u5408\u529f\u80fd\u6027\u52a8\u4f5c\u7b5b\u67e5(FMS)\u8fdb\u884c\u66f4\u5168\u9762\u7684\u8bc4\u4f30<\/li>\";\r\n                recommendationHTML += \"<li>\u5982\u6709\u6301\u7eed\u75bc\u75db\u6216\u529f\u80fd\u9650\u5236\uff0c\u5efa\u8bae\u54a8\u8be2\u7269\u7406\u6cbb\u7597\u5e08\u6216\u8fd0\u52a8\u533b\u5b66\u4e13\u5bb6<\/li>\";\r\n            }\r\n            \r\n            recommendationHTML += \"<\/ul>\";\r\n            recommendations.innerHTML = recommendationHTML;\r\n            \r\n            \/\/ \u786e\u4fdd\u5efa\u8bae\u9762\u677f\u5c55\u5f00\r\n            document.getElementById('recommendationContent').classList.add('active');\r\n            document.getElementById('recommendationHeader').classList.add('active');\r\n            document.getElementById('recommendationHeader').querySelector('i').classList.remove('fa-chevron-down');\r\n            document.getElementById('recommendationHeader').querySelector('i').classList.add('fa-chevron-up');\r\n        }\r\n        \r\n        \/\/ \u4fdd\u5b58\u6d4b\u8bd5\u7ed3\u679c\u5230\u672c\u5730\u5b58\u50a8\r\n        function saveTestResult() {\r\n            if (!currentResult) {\r\n                alert(\"\u8bf7\u5148\u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\uff0c\u7136\u540e\u518d\u4fdd\u5b58\");\r\n                return;\r\n            }\r\n            \r\n            \/\/ \u4ecelocalStorage\u83b7\u53d6\u73b0\u6709\u8bb0\u5f55\r\n            let records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            \r\n            \/\/ \u6dfb\u52a0\u5f53\u524d\u8bb0\u5f55\r\n            records.push(currentResult);\r\n            \r\n            \/\/ \u4fdd\u5b58\u56delocalStorage\r\n            localStorage.setItem('ybtRecords', JSON.stringify(records));\r\n            \r\n            \/\/ \u663e\u793a\u6210\u529f\u6d88\u606f\r\n            alert(`\u6d4b\u8bd5\u7ed3\u679c\u5df2\u4fdd\u5b58\uff01\u5f53\u524d\u5171\u6709 ${records.length} \u6761\u8bb0\u5f55\u3002`);\r\n            \r\n            \/\/ \u91cd\u65b0\u52a0\u8f7d\u5386\u53f2\u8bb0\u5f55\r\n            loadHistoryRecords();\r\n            \r\n            \/\/ \u663e\u793a\u6210\u529f\u6d88\u606f\u6846\r\n            const resultsContainer = document.getElementById('resultsContainer');\r\n            const successBox = document.createElement('div');\r\n            successBox.className = 'success-box';\r\n            successBox.innerHTML = '<i class=\"fas fa-check-circle\"><\/i> <strong>\u6210\u529f!<\/strong> \u6d4b\u8bd5\u7ed3\u679c\u5df2\u4fdd\u5b58\u5230\u672c\u5730\u5b58\u50a8\u3002';\r\n            resultsContainer.insertBefore(successBox, resultsContainer.firstChild);\r\n            \r\n            \/\/ 3\u79d2\u540e\u79fb\u9664\u6210\u529f\u6d88\u606f\r\n            setTimeout(() => {\r\n                if (successBox.parentNode) {\r\n                    successBox.parentNode.removeChild(successBox);\r\n                }\r\n            }, 3000);\r\n        }\r\n        \r\n        \/\/ \u52a0\u8f7d\u5386\u53f2\u8bb0\u5f55\r\n        function loadHistoryRecords() {\r\n            const searchName = document.getElementById('searchName').value.toLowerCase();\r\n            const searchDate = document.getElementById('searchDate').value;\r\n            \r\n            \/\/ \u4ecelocalStorage\u83b7\u53d6\u8bb0\u5f55\r\n            let records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            \r\n            \/\/ \u7b5b\u9009\u8bb0\u5f55\r\n            let filteredRecords = records;\r\n            \r\n            if (searchName) {\r\n                filteredRecords = filteredRecords.filter(record => \r\n                    record.subjectName && record.subjectName.toLowerCase().includes(searchName)\r\n                );\r\n            }\r\n            \r\n            if (searchDate) {\r\n                filteredRecords = filteredRecords.filter(record => \r\n                    record.testDate === searchDate\r\n                );\r\n            }\r\n            \r\n            \/\/ \u66f4\u65b0\u8bb0\u5f55\u6570\u91cf\r\n            document.getElementById('recordCount').textContent = filteredRecords.length;\r\n            \r\n            \/\/ \u6e05\u7a7a\u8868\u683c\u5185\u5bb9\r\n            const tableBody = document.getElementById('historyTableBody');\r\n            tableBody.innerHTML = '';\r\n            \r\n            if (filteredRecords.length === 0) {\r\n                tableBody.innerHTML = '<tr><td colspan=\"10\" style=\"text-align: center; padding: 20px;\">\u6682\u65e0\u8bb0\u5f55<\/td><\/tr>';\r\n            } else {\r\n                \/\/ \u6309\u65e5\u671f\u964d\u5e8f\u6392\u5e8f\uff08\u6700\u65b0\u5728\u524d\uff09\r\n                filteredRecords.sort((a, b) => new Date(b.testDate) - new Date(a.testDate));\r\n                \r\n                \/\/ \u6dfb\u52a0\u8bb0\u5f55\u5230\u8868\u683c\r\n                filteredRecords.forEach(record => {\r\n                    const row = document.createElement('tr');\r\n                    \r\n                    \/\/ \u786e\u5b9a\u98ce\u9669\u7b49\u7ea7\r\n                    let riskLevel = \"\u4f4e\u98ce\u9669\";\r\n                    let riskClass = \"standard-optimal\";\r\n                    if (record.anteriorDiff > 4 || record.posteromedialDiff > 6 || record.posterolateralDiff > 6) {\r\n                        riskLevel = \"\u9ad8\u98ce\u9669\";\r\n                        riskClass = \"standard-below\";\r\n                    } else if (record.anteriorDiff > 2 || record.rightComposite < record.compositeThreshold || record.leftComposite < record.compositeThreshold) {\r\n                        riskLevel = \"\u4e2d\u98ce\u9669\";\r\n                        riskClass = \"standard-pass\";\r\n                    }\r\n                    \r\n                    row.innerHTML = `\r\n                        <td>${record.subjectName || '\u672a\u547d\u540d'}<\/td>\r\n                        <td>${record.testDate || '\u672a\u77e5'}<\/td>\r\n                        <td>${record.age || '\u672a\u77e5'}<\/td>\r\n                        <td>${record.gender === 'male' ? '\u7537' : record.gender === 'female' ? '\u5973' : '\u672a\u77e5'}<\/td>\r\n                        <td>${getSportActivityName(record.sportActivity)}<\/td>\r\n                        <td>${record.rightComposite ? record.rightComposite.toFixed(1) + '%' : 'N\/A'}<\/td>\r\n                        <td>${record.leftComposite ? record.leftComposite.toFixed(1) + '%' : 'N\/A'}<\/td>\r\n                        <td>${record.anteriorDiff ? record.anteriorDiff.toFixed(1) + 'cm' : 'N\/A'}<\/td>\r\n                        <td><span class=\"${riskClass}\">${riskLevel}<\/span><\/td>\r\n                        <td>\r\n                            <button class=\"btn-secondary\" style=\"padding: 5px 10px; font-size: 0.8rem;\" onclick=\"viewRecord('${record.id}')\">\u67e5\u770b<\/button>\r\n                            <button class=\"btn-danger\" style=\"padding: 5px 10px; font-size: 0.8rem;\" onclick=\"deleteRecord('${record.id}')\">\u5220\u9664<\/button>\r\n                        <\/td>\r\n                    `;\r\n                    \r\n                    tableBody.appendChild(row);\r\n                });\r\n            }\r\n            \r\n            \/\/ \u663e\u793a\u5386\u53f2\u8bb0\u5f55\u5bb9\u5668\r\n            document.getElementById('historyContainer').style.display = 'block';\r\n        }\r\n        \r\n        \/\/ \u67e5\u770b\u5355\u6761\u8bb0\u5f55\r\n        function viewRecord(recordId) {\r\n            const records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            const record = records.find(r => r.id === recordId);\r\n            \r\n            if (!record) {\r\n                alert(\"\u8bb0\u5f55\u672a\u627e\u5230\");\r\n                return;\r\n            }\r\n            \r\n            \/\/ \u586b\u5145\u8868\u5355\r\n            document.getElementById('subjectName').value = record.subjectName || '';\r\n            document.getElementById('testDate').value = record.testDate || '';\r\n            document.getElementById('age').value = record.age || '';\r\n            document.getElementById('gender').value = record.gender || '';\r\n            document.getElementById('sportActivity').value = record.sportActivity || '';\r\n            document.getElementById('rightLegLength').value = record.rightLegLength || '';\r\n            document.getElementById('leftLegLength').value = record.leftLegLength || '';\r\n            document.getElementById('compositeThreshold').value = record.compositeThreshold || 94;\r\n            \r\n            \/\/ \u586b\u5145\u6d4b\u8bd5\u6570\u636e\r\n            document.getElementById('ra1').value = record.rightAnterior || '';\r\n            document.getElementById('ra2').value = record.rightAnterior || '';\r\n            document.getElementById('ra3').value = record.rightAnterior || '';\r\n            \r\n            document.getElementById('rpm1').value = record.rightPosteromedial || '';\r\n            document.getElementById('rpm2').value = record.rightPosteromedial || '';\r\n            document.getElementById('rpm3').value = record.rightPosteromedial || '';\r\n            \r\n            document.getElementById('rpl1').value = record.rightPosterolateral || '';\r\n            document.getElementById('rpl2').value = record.rightPosterolateral || '';\r\n            document.getElementById('rpl3').value = record.rightPosterolateral || '';\r\n            \r\n            document.getElementById('la1').value = record.leftAnterior || '';\r\n            document.getElementById('la2').value = record.leftAnterior || '';\r\n            document.getElementById('la3').value = record.leftAnterior || '';\r\n            \r\n            document.getElementById('lpm1').value = record.leftPosteromedial || '';\r\n            document.getElementById('lpm2').value = record.leftPosteromedial || '';\r\n            document.getElementById('lpm3').value = record.leftPosteromedial || '';\r\n            \r\n            document.getElementById('lpl1').value = record.leftPosterolateral || '';\r\n            document.getElementById('lpl2').value = record.leftPosterolateral || '';\r\n            document.getElementById('lpl3').value = record.leftPosterolateral || '';\r\n            \r\n            \/\/ \u91cd\u65b0\u8ba1\u7b97\u7ed3\u679c\r\n            calculateResults();\r\n            \r\n            \/\/ \u6eda\u52a8\u5230\u9876\u90e8\r\n            window.scrollTo(0, 0);\r\n            \r\n            alert(\"\u8bb0\u5f55\u5df2\u52a0\u8f7d\u5230\u8868\u5355\u4e2d\uff0c\u5df2\u91cd\u65b0\u8ba1\u7b97\u7ed3\u679c\");\r\n        }\r\n        \r\n        \/\/ \u5220\u9664\u5355\u6761\u8bb0\u5f55\r\n        function deleteRecord(recordId) {\r\n            if (!confirm(\"\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bb0\u5f55\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\u3002\")) {\r\n                return;\r\n            }\r\n            \r\n            let records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            const initialLength = records.length;\r\n            \r\n            \/\/ \u8fc7\u6ee4\u6389\u8981\u5220\u9664\u7684\u8bb0\u5f55\r\n            records = records.filter(record => record.id !== recordId);\r\n            \r\n            \/\/ \u4fdd\u5b58\u56delocalStorage\r\n            localStorage.setItem('ybtRecords', JSON.stringify(records));\r\n            \r\n            \/\/ \u91cd\u65b0\u52a0\u8f7d\u5386\u53f2\u8bb0\u5f55\r\n            loadHistoryRecords();\r\n            \r\n            \/\/ \u663e\u793a\u6210\u529f\u6d88\u606f\r\n            if (records.length < initialLength) {\r\n                alert(\"\u8bb0\u5f55\u5df2\u5220\u9664\");\r\n            }\r\n        }\r\n        \r\n        \/\/ \u6e05\u7a7a\u6240\u6709\u8bb0\u5f55\r\n        function clearAllRecords() {\r\n            localStorage.removeItem('ybtRecords');\r\n            loadHistoryRecords();\r\n            alert(\"\u6240\u6709\u8bb0\u5f55\u5df2\u6e05\u7a7a\");\r\n        }\r\n        \r\n        \/\/ \u6267\u884c\u7edf\u8ba1\u5206\u6790\r\n        function performStatisticalAnalysis() {\r\n            const records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            \r\n            if (records.length === 0) {\r\n                alert(\"\u6ca1\u6709\u53ef\u5206\u6790\u7684\u6570\u636e\uff0c\u8bf7\u5148\u4fdd\u5b58\u4e00\u4e9b\u6d4b\u8bd5\u7ed3\u679c\");\r\n                return;\r\n            }\r\n            \r\n            \/\/ \u8ba1\u7b97\u7edf\u8ba1\u6307\u6807\r\n            const totalRecords = records.length;\r\n            \r\n            \/\/ \u590d\u5408\u5206\u6570\u7edf\u8ba1\r\n            const rightComposites = records.map(r => r.rightComposite || 0).filter(v => v > 0);\r\n            const leftComposites = records.map(r => r.leftComposite || 0).filter(v => v > 0);\r\n            \r\n            const avgRightComposite = rightComposites.length > 0 ? \r\n                rightComposites.reduce((a, b) => a + b, 0) \/ rightComposites.length : 0;\r\n            const avgLeftComposite = leftComposites.length > 0 ? \r\n                leftComposites.reduce((a, b) => a + b, 0) \/ leftComposites.length : 0;\r\n            \r\n            \/\/ \u4e0d\u5bf9\u79f0\u6027\u7edf\u8ba1\r\n            const anteriorDiffs = records.map(r => r.anteriorDiff || 0).filter(v => v > 0);\r\n            const avgAnteriorDiff = anteriorDiffs.length > 0 ? \r\n                anteriorDiffs.reduce((a, b) => a + b, 0) \/ anteriorDiffs.length : 0;\r\n            \r\n            \/\/ \u98ce\u9669\u7b49\u7ea7\u7edf\u8ba1\r\n            let highRisk = 0, mediumRisk = 0, lowRisk = 0;\r\n            records.forEach(record => {\r\n                if (record.anteriorDiff > 4 || record.posteromedialDiff > 6 || record.posterolateralDiff > 6) {\r\n                    highRisk++;\r\n                } else if (record.anteriorDiff > 2 || \r\n                          (record.rightComposite && record.rightComposite < record.compositeThreshold) || \r\n                          (record.leftComposite && record.leftComposite < record.compositeThreshold)) {\r\n                    mediumRisk++;\r\n                } else {\r\n                    lowRisk++;\r\n                }\r\n            });\r\n            \r\n            \/\/ \u6027\u522b\u5206\u5e03\r\n            let maleCount = 0, femaleCount = 0, unknownGender = 0;\r\n            records.forEach(record => {\r\n                if (record.gender === 'male') maleCount++;\r\n                else if (record.gender === 'female') femaleCount++;\r\n                else unknownGender++;\r\n            });\r\n            \r\n            \/\/ \u8fd0\u52a8\u7c7b\u578b\u5206\u5e03\r\n            const sportTypeCounts = {};\r\n            records.forEach(record => {\r\n                const sport = record.sportActivity || 'unknown';\r\n                sportTypeCounts[sport] = (sportTypeCounts[sport] || 0) + 1;\r\n            });\r\n            \r\n            \/\/ \u5e74\u9f84\u5206\u5e03\r\n            const ages = records.map(r => r.age || 0).filter(age => age > 0);\r\n            const avgAge = ages.length > 0 ? \r\n                ages.reduce((a, b) => a + b, 0) \/ ages.length : 0;\r\n            \r\n            \/\/ \u751f\u6210\u7edf\u8ba1HTML\r\n            const statsContent = document.getElementById('statsContent');\r\n            statsContent.innerHTML = generateStatisticsHTML({\r\n                totalRecords,\r\n                avgRightComposite: avgRightComposite.toFixed(1),\r\n                avgLeftComposite: avgLeftComposite.toFixed(1),\r\n                avgAnteriorDiff: avgAnteriorDiff.toFixed(1),\r\n                highRisk,\r\n                mediumRisk,\r\n                lowRisk,\r\n                maleCount,\r\n                femaleCount,\r\n                unknownGender,\r\n                sportTypeCounts,\r\n                avgAge: avgAge.toFixed(1),\r\n                minAge: ages.length > 0 ? Math.min(...ages) : 'N\/A',\r\n                maxAge: ages.length > 0 ? Math.max(...ages) : 'N\/A'\r\n            });\r\n            \r\n            \/\/ \u663e\u793a\u7edf\u8ba1\u5bb9\u5668\r\n            document.getElementById('statsContainer').style.display = 'block';\r\n            \r\n            \/\/ \u6eda\u52a8\u5230\u7edf\u8ba1\u533a\u57df\r\n            document.getElementById('statsContainer').scrollIntoView({ behavior: 'smooth' });\r\n        }\r\n        \r\n        \/\/ \u751f\u6210\u7edf\u8ba1HTML\r\n        function generateStatisticsHTML(data) {\r\n            const sportTypes = Object.entries(data.sportTypeCounts)\r\n                .map(([type, count]) => `${getSportActivityName(type)}: ${count}\u4eba (${(count\/data.totalRecords*100).toFixed(1)}%)`)\r\n                .join('<br>');\r\n            \r\n            return `\r\n                <div class=\"stats-grid\">\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u603b\u6d4b\u8bd5\u4eba\u6570<\/div>\r\n                        <div class=\"stat-value\">${data.totalRecords}<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u5e73\u5747\u53f3\u817f\u590d\u5408\u5206<\/div>\r\n                        <div class=\"stat-value\">${data.avgRightComposite}%<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u5e73\u5747\u5de6\u817f\u590d\u5408\u5206<\/div>\r\n                        <div class=\"stat-value\">${data.avgLeftComposite}%<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u5e73\u5747\u524d\u5411\u4e0d\u5bf9\u79f0<\/div>\r\n                        <div class=\"stat-value\">${data.avgAnteriorDiff}cm<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u9ad8\u98ce\u9669\u4eba\u6570<\/div>\r\n                        <div class=\"stat-value\" style=\"color: var(--danger-color);\">${data.highRisk}<\/div>\r\n                        <div class=\"stat-label\">${data.totalRecords > 0 ? (data.highRisk\/data.totalRecords*100).toFixed(1) : 0}%<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u4f4e\u98ce\u9669\u4eba\u6570<\/div>\r\n                        <div class=\"stat-value\" style=\"color: var(--success-color);\">${data.lowRisk}<\/div>\r\n                        <div class=\"stat-label\">${data.totalRecords > 0 ? (data.lowRisk\/data.totalRecords*100).toFixed(1) : 0}%<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u5e73\u5747\u5e74\u9f84<\/div>\r\n                        <div class=\"stat-value\">${data.avgAge}<\/div>\r\n                        <div class=\"stat-label\">\u8303\u56f4: ${data.minAge} - ${data.maxAge}\u5c81<\/div>\r\n                    <\/div>\r\n                    <div class=\"stat-card\">\r\n                        <div class=\"stat-label\">\u6027\u522b\u5206\u5e03<\/div>\r\n                        <div class=\"stat-value\">\u7537: ${data.maleCount} \u5973: ${data.femaleCount}<\/div>\r\n                        <div class=\"stat-label\">\u672a\u77e5: ${data.unknownGender}<\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n                <h4 style=\"margin-top: 20px;\">\u8fd0\u52a8\u7c7b\u578b\u5206\u5e03<\/h4>\r\n                <div class=\"info-box\">\r\n                    ${sportTypes}\r\n                <\/div>\r\n                \r\n                <h4 style=\"margin-top: 20px;\">\u98ce\u9669\u7b49\u7ea7\u5206\u5e03<\/h4>\r\n                <div class=\"info-box\">\r\n                    <div style=\"display: flex; align-items: center; gap: 15px; margin-bottom: 10px;\">\r\n                        <div style=\"display: flex; align-items: center;\">\r\n                            <div style=\"width: 15px; height: 15px; background-color: var(--danger-color); margin-right: 8px;\"><\/div>\r\n                            <span>\u9ad8\u98ce\u9669: ${data.highRisk}\u4eba (${data.totalRecords > 0 ? (data.highRisk\/data.totalRecords*100).toFixed(1) : 0}%)<\/span>\r\n                        <\/div>\r\n                        <div style=\"display: flex; align-items: center;\">\r\n                            <div style=\"width: 15px; height: 15px; background-color: var(--warning-color); margin-right: 8px;\"><\/div>\r\n                            <span>\u4e2d\u98ce\u9669: ${data.mediumRisk}\u4eba (${data.totalRecords > 0 ? (data.mediumRisk\/data.totalRecords*100).toFixed(1) : 0}%)<\/span>\r\n                        <\/div>\r\n                        <div style=\"display: flex; align-items: center;\">\r\n                            <div style=\"width: 15px; height: 15px; background-color: var(--success-color); margin-right: 8px;\"><\/div>\r\n                            <span>\u4f4e\u98ce\u9669: ${data.lowRisk}\u4eba (${data.totalRecords > 0 ? (data.lowRisk\/data.totalRecords*100).toFixed(1) : 0}%)<\/span>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            `;\r\n        }\r\n        \r\n        \/\/ \u5bfc\u51fa\u6240\u6709\u6570\u636e\r\n        function exportAllData() {\r\n            const records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            \r\n            if (records.length === 0) {\r\n                alert(\"\u6ca1\u6709\u53ef\u5bfc\u51fa\u7684\u6570\u636e\");\r\n                return;\r\n            }\r\n            \r\n            const exportData = {\r\n                exportDate: new Date().toISOString(),\r\n                recordCount: records.length,\r\n                records: records\r\n            };\r\n            \r\n            const dataStr = JSON.stringify(exportData, null, 2);\r\n            const dataBlob = new Blob([dataStr], { type: 'application\/json' });\r\n            \r\n            const url = URL.createObjectURL(dataBlob);\r\n            const link = document.createElement('a');\r\n            link.href = url;\r\n            link.download = `ybt_data_export_${new Date().toISOString().slice(0, 10)}.json`;\r\n            document.body.appendChild(link);\r\n            link.click();\r\n            document.body.removeChild(link);\r\n            URL.revokeObjectURL(url);\r\n            \r\n            alert(`\u6210\u529f\u5bfc\u51fa ${records.length} \u6761\u8bb0\u5f55`);\r\n        }\r\n        \r\n        \/\/ \u4ece\u6587\u4ef6\u5bfc\u5165\u6570\u636e\r\n        function importDataFromFile() {\r\n            const fileInput = document.getElementById('importFile');\r\n            \r\n            if (!fileInput.files.length) {\r\n                alert(\"\u8bf7\u5148\u9009\u62e9\u8981\u5bfc\u5165\u7684\u6587\u4ef6\");\r\n                return;\r\n            }\r\n            \r\n            const file = fileInput.files[0];\r\n            const reader = new FileReader();\r\n            \r\n            reader.onload = function(e) {\r\n                try {\r\n                    const importedData = JSON.parse(e.target.result);\r\n                    \r\n                    if (!importedData.records || !Array.isArray(importedData.records)) {\r\n                        throw new Error(\"\u6587\u4ef6\u683c\u5f0f\u4e0d\u6b63\u786e\");\r\n                    }\r\n                    \r\n                    \/\/ \u4ecelocalStorage\u83b7\u53d6\u73b0\u6709\u8bb0\u5f55\r\n                    let existingRecords = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n                    \r\n                    \/\/ \u5408\u5e76\u8bb0\u5f55\uff0c\u907f\u514d\u91cd\u590dID\r\n                    const existingIds = new Set(existingRecords.map(r => r.id));\r\n                    const newRecords = importedData.records.filter(record => !existingIds.has(record.id));\r\n                    \r\n                    \/\/ \u6dfb\u52a0\u65b0\u8bb0\u5f55\r\n                    existingRecords.push(...newRecords);\r\n                    \r\n                    \/\/ \u4fdd\u5b58\u56delocalStorage\r\n                    localStorage.setItem('ybtRecords', JSON.stringify(existingRecords));\r\n                    \r\n                    \/\/ \u91cd\u65b0\u52a0\u8f7d\u5386\u53f2\u8bb0\u5f55\r\n                    loadHistoryRecords();\r\n                    \r\n                    alert(`\u6210\u529f\u5bfc\u5165 ${newRecords.length} \u6761\u65b0\u8bb0\u5f55\u3002\u5f53\u524d\u5171\u6709 ${existingRecords.length} \u6761\u8bb0\u5f55\u3002`);\r\n                    \r\n                    \/\/ \u6e05\u7a7a\u6587\u4ef6\u8f93\u5165\r\n                    fileInput.value = '';\r\n                    \r\n                } catch (error) {\r\n                    alert(\"\u5bfc\u5165\u5931\u8d25: \" + error.message);\r\n                }\r\n            };\r\n            \r\n            reader.onerror = function() {\r\n                alert(\"\u8bfb\u53d6\u6587\u4ef6\u65f6\u53d1\u751f\u9519\u8bef\");\r\n            };\r\n            \r\n            reader.readAsText(file);\r\n        }\r\n        \r\n        \/\/ \u5bfc\u51fa\u4e2a\u4eba\u62a5\u544a\u4e3a\u56fe\u7247\r\n        function exportReportToImage() {\r\n            if (!currentResult) {\r\n                alert(\"\u8bf7\u5148\u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\uff0c\u7136\u540e\u518d\u5bfc\u51fa\u62a5\u544a\");\r\n                return;\r\n            }\r\n            \r\n            \/\/ \u663e\u793a\u52a0\u8f7d\u52a8\u753b\r\n            document.getElementById('loadingOverlay').style.display = 'flex';\r\n            \r\n            \/\/ \u83b7\u53d6\u62a5\u544a\u6807\u9898\u548c\u5907\u6ce8\r\n            const reportTitle = document.getElementById('reportTitle').value || \"\u4e0b\u80a2Y-Balance\u6d4b\u8bd5\u62a5\u544a\";\r\n            const reportNotes = document.getElementById('reportNotes').value || \"\";\r\n            \r\n            \/\/ \u751f\u6210\u62a5\u544aHTML\r\n            const reportHTML = generateReportHTML(reportTitle, reportNotes);\r\n            \r\n            \/\/ \u5c06\u62a5\u544aHTML\u63d2\u5165\u5230\u9690\u85cf\u7684\u5bb9\u5668\u4e2d\r\n            const reportContainer = document.getElementById('reportForExport');\r\n            reportContainer.innerHTML = reportHTML;\r\n            reportContainer.style.display = 'block';\r\n            \r\n            \/\/ \u4f7f\u7528html2canvas\u751f\u6210\u56fe\u7247\r\n            setTimeout(() => {\r\n                html2canvas(reportContainer, {\r\n                    scale: 2, \/\/ \u63d0\u9ad8\u56fe\u7247\u6e05\u6670\u5ea6\r\n                    backgroundColor: '#ffffff',\r\n                    useCORS: true,\r\n                    logging: false\r\n                }).then(canvas => {\r\n                    \/\/ \u5c06canvas\u8f6c\u6362\u4e3a\u56fe\u7247\r\n                    const imageData = canvas.toDataURL('image\/png');\r\n                    \r\n                    \/\/ \u521b\u5efa\u4e0b\u8f7d\u94fe\u63a5\r\n                    const link = document.createElement('a');\r\n                    link.href = imageData;\r\n                    const fileName = `YBT\u62a5\u544a_${currentResult.subjectName || '\u53d7\u8bd5\u8005'}_${currentResult.testDate || new Date().toISOString().slice(0, 10)}.png`;\r\n                    link.download = fileName;\r\n                    \r\n                    \/\/ \u89e6\u53d1\u4e0b\u8f7d\r\n                    document.body.appendChild(link);\r\n                    link.click();\r\n                    document.body.removeChild(link);\r\n                    \r\n                    \/\/ \u9690\u85cf\u52a0\u8f7d\u52a8\u753b\r\n                    document.getElementById('loadingOverlay').style.display = 'none';\r\n                    \r\n                    \/\/ \u9690\u85cf\u62a5\u544a\u5bb9\u5668\r\n                    reportContainer.style.display = 'none';\r\n                    \r\n                    \/\/ \u663e\u793a\u6210\u529f\u6d88\u606f\r\n                    alert(`\u62a5\u544a\u5df2\u6210\u529f\u5bfc\u51fa\u4e3a\u56fe\u7247: ${fileName}`);\r\n                }).catch(error => {\r\n                    \/\/ \u9690\u85cf\u52a0\u8f7d\u52a8\u753b\r\n                    document.getElementById('loadingOverlay').style.display = 'none';\r\n                    \r\n                    \/\/ \u9690\u85cf\u62a5\u544a\u5bb9\u5668\r\n                    reportContainer.style.display = 'none';\r\n                    \r\n                    console.error('\u751f\u6210\u56fe\u7247\u65f6\u51fa\u9519:', error);\r\n                    alert('\u5bfc\u51fa\u56fe\u7247\u65f6\u53d1\u751f\u9519\u8bef\uff0c\u8bf7\u91cd\u8bd5\u6216\u68c0\u67e5\u6d4f\u89c8\u5668\u517c\u5bb9\u6027\u3002');\r\n                });\r\n            }, 500);\r\n        }\r\n        \r\n        \/\/ \u751f\u6210\u62a5\u544aHTML\r\n        function generateReportHTML(title, notes) {\r\n            \/\/ \u83b7\u53d6\u98ce\u9669\u7b49\u7ea7\r\n            let riskLevel = \"\u4f4e\u98ce\u9669\";\r\n            let riskClass = \"standard-optimal\";\r\n            if (currentResult.anteriorDiff > 4 || currentResult.posteromedialDiff > 6 || currentResult.posterolateralDiff > 6) {\r\n                riskLevel = \"\u9ad8\u98ce\u9669\";\r\n                riskClass = \"standard-below\";\r\n            } else if (currentResult.anteriorDiff > 2 || currentResult.rightComposite < currentResult.compositeThreshold || currentResult.leftComposite < currentResult.compositeThreshold) {\r\n                riskLevel = \"\u4e2d\u98ce\u9669\";\r\n                riskClass = \"standard-pass\";\r\n            }\r\n            \r\n            \/\/ \u83b7\u53d6\u4e2d\u6587\u65e5\u671f\r\n            const chineseDate = getChineseDate(currentResult.testDate);\r\n            \r\n            \/\/ \u751f\u6210\u62a5\u544aHTML\r\n            return `\r\n                <div class=\"report-watermark\">YBT-LQ<\/div>\r\n                <div class=\"report-header\">\r\n                    <h1 class=\"report-title\">${title}<\/h1>\r\n                    <p class=\"report-subtitle\">\u57fa\u4e8e\u529f\u80fd\u6027\u8fd0\u52a8\u7cfb\u7edf(FMS)Y-Balance\u6d4b\u8bd5\u89c4\u8303<\/p>\r\n                <\/div>\r\n                \r\n                <div class=\"report-body\">\r\n                    <div class=\"report-section\">\r\n                        <h2 class=\"report-section-title\">\u53d7\u8bd5\u8005\u4fe1\u606f<\/h2>\r\n                        <table class=\"report-table\">\r\n                            <tr>\r\n                                <td style=\"width: 25%;\"><strong>\u59d3\u540d<\/strong><\/td>\r\n                                <td style=\"width: 25%;\">${currentResult.subjectName || '\u672a\u586b\u5199'}<\/td>\r\n                                <td style=\"width: 25%;\"><strong>\u5e74\u9f84<\/strong><\/td>\r\n                                <td style=\"width: 25%;\">${currentResult.age || '\u672a\u586b\u5199'} \u5c81<\/td>\r\n                            <\/tr>\r\n                            <tr>\r\n                                <td><strong>\u6027\u522b<\/strong><\/td>\r\n                                <td>${currentResult.gender === 'male' ? '\u7537\u6027' : currentResult.gender === 'female' ? '\u5973\u6027' : '\u672a\u586b\u5199'}<\/td>\r\n                                <td><strong>\u6d4b\u8bd5\u65e5\u671f<\/strong><\/td>\r\n                                <td>${chineseDate}<\/td>\r\n                            <\/tr>\r\n                            <tr>\r\n                                <td><strong>\u8fd0\u52a8\u7c7b\u578b<\/strong><\/td>\r\n                                <td>${getSportActivityName(currentResult.sportActivity)}<\/td>\r\n                                <td><strong>\u6d4b\u8bd5\u4eba\u5458<\/strong><\/td>\r\n                                <td>YBT\u4e13\u4e1a\u8bc4\u4f30\u7cfb\u7edf<\/td>\r\n                            <\/tr>\r\n                        <\/table>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"report-section\">\r\n                        <h2 class=\"report-section-title\">\u6d4b\u8bd5\u7ed3\u679c\u6982\u89c8<\/h2>\r\n                        <div style=\"display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 20px;\">\r\n                            <div style=\"background-color: #f0f7ff; padding: 15px; border-radius: 8px; text-align: center;\">\r\n                                <div style=\"font-size: 14px; color: #666; margin-bottom: 5px;\">\u53f3\u817f\u590d\u5408\u5206\u6570<\/div>\r\n                                <div style=\"font-size: 28px; font-weight: bold; color: #1a6dbb;\">${currentResult.rightComposite.toFixed(1)}%<\/div>\r\n                            <\/div>\r\n                            <div style=\"background-color: #f0f7ff; padding: 15px; border-radius: 8px; text-align: center;\">\r\n                                <div style=\"font-size: 14px; color: #666; margin-bottom: 5px;\">\u5de6\u817f\u590d\u5408\u5206\u6570<\/div>\r\n                                <div style=\"font-size: 28px; font-weight: bold; color: #1a6dbb;\">${currentResult.leftComposite.toFixed(1)}%<\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                        \r\n                        <div style=\"display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; margin-bottom: 20px;\">\r\n                            <div style=\"background-color: #f0f7ff; padding: 15px; border-radius: 8px; text-align: center;\">\r\n                                <div style=\"font-size: 14px; color: #666; margin-bottom: 5px;\">\u524d\u5411\u4e0d\u5bf9\u79f0<\/div>\r\n                                <div style=\"font-size: 28px; font-weight: bold; color: ${currentResult.anteriorDiff > 4 ? '#dc3545' : '#1a6dbb'};\">${currentResult.anteriorDiff.toFixed(1)} cm<\/div>\r\n                            <\/div>\r\n                            <div style=\"background-color: #f0f7ff; padding: 15px; border-radius: 8px; text-align: center;\">\r\n                                <div style=\"font-size: 14px; color: #666; margin-bottom: 5px;\">\u98ce\u9669\u7b49\u7ea7<\/div>\r\n                                <div style=\"font-size: 28px; font-weight: bold; color: ${riskLevel === '\u9ad8\u98ce\u9669' ? '#dc3545' : riskLevel === '\u4e2d\u98ce\u9669' ? '#ffc107' : '#28a745'};\">${riskLevel}<\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"report-section\">\r\n                        <h2 class=\"report-section-title\">\u8be6\u7ec6\u6d4b\u8bd5\u6570\u636e<\/h2>\r\n                        <table class=\"report-table\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th>\u6d4b\u8bd5\u65b9\u5411<\/th>\r\n                                    <th>\u53f3\u817f (cm)<\/th>\r\n                                    <th>\u5de6\u817f (cm)<\/th>\r\n                                    <th>\u5dee\u5f02 (cm)<\/th>\r\n                                    <th>\u8bc4\u4f30<\/th>\r\n                                <\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr>\r\n                                    <td>\u524d\u5411<\/td>\r\n                                    <td>${currentResult.rightAnterior.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.leftAnterior.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.anteriorDiff.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.anteriorStandard === 'optimal' ? '\u4f18\u79c0' : currentResult.anteriorStandard === 'pass' ? '\u5408\u683c' : '\u9700\u6539\u8fdb'}<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td>\u540e\u5185\u4fa7<\/td>\r\n                                    <td>${currentResult.rightPosteromedial.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.leftPosteromedial.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.posteromedialDiff.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.posteromedialStandard === 'optimal' ? '\u4f18\u79c0' : '\u9700\u6539\u8fdb'}<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <td>\u540e\u5916\u4fa7<\/td>\r\n                                    <td>${currentResult.rightPosterolateral.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.leftPosterolateral.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.posterolateralDiff.toFixed(1)}<\/td>\r\n                                    <td>${currentResult.posterolateralStandard === 'optimal' ? '\u4f18\u79c0' : '\u9700\u6539\u8fdb'}<\/td>\r\n                                <\/tr>\r\n                                <tr style=\"font-weight: bold;\">\r\n                                    <td>\u590d\u5408\u5206\u6570<\/td>\r\n                                    <td>${currentResult.rightComposite.toFixed(1)}%<\/td>\r\n                                    <td>${currentResult.leftComposite.toFixed(1)}%<\/td>\r\n                                    <td>-<\/td>\r\n                                    <td>${currentResult.compositeStandard === 'optimal' ? '\u4f18\u79c0' : '\u9700\u6539\u8fdb'}<\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                    \r\n                    <div class=\"report-section\">\r\n                        <h2 class=\"report-section-title\">\u4e13\u4e1a\u5efa\u8bae<\/h2>\r\n                        <div style=\"background-color: #f8f9fa; padding: 15px; border-radius: 8px;\">\r\n                            ${generateRecommendationsText()}\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    ${notes ? `\r\n                    <div class=\"report-section\">\r\n                        <h2 class=\"report-section-title\">\u5907\u6ce8\u4fe1\u606f<\/h2>\r\n                        <div style=\"background-color: #f8f9fa; padding: 15px; border-radius: 8px; white-space: pre-wrap;\">\r\n                            ${notes}\r\n                        <\/div>\r\n                    <\/div>\r\n                    ` : ''}\r\n                <\/div>\r\n                \r\n                <div class=\"report-footer\">\r\n                    <p>\u62a5\u544a\u751f\u6210\u65e5\u671f: ${getChineseDate(new Date().toISOString().slice(0, 10))}<\/p>\r\n                    <p>\u00a9 2023 \u4e0b\u80a2Y-Balance\u6d4b\u8bd5\u8ba1\u7b97\u5668 | \u57fa\u4e8e\u529f\u80fd\u6027\u8fd0\u52a8\u7cfb\u7edf(FMS)\u5b98\u65b9\u89c4\u8303<\/p>\r\n                    <p style=\"font-size: 12px; margin-top: 5px;\">\u672c\u62a5\u544a\u4ec5\u4f9b\u53c2\u8003\uff0c\u4e0d\u80fd\u66ff\u4ee3\u4e13\u4e1a\u533b\u7597\u8bc4\u4f30\u3002\u5982\u6709\u7591\u95ee\uff0c\u8bf7\u54a8\u8be2\u4e13\u4e1a\u533b\u7597\u4eba\u5458\u3002<\/p>\r\n                <\/div>\r\n            `;\r\n        }\r\n        \r\n        \/\/ \u751f\u6210\u5efa\u8bae\u6587\u672c\r\n        function generateRecommendationsText() {\r\n            let recommendations = \"<p><strong>\u6839\u636e\u6d4b\u8bd5\u7ed3\u679c\uff0c\u5efa\u8bae\uff1a<\/strong><\/p><ul>\";\r\n            \r\n            if (currentResult.anteriorDiff > 4) {\r\n                recommendations += \"<li>\u8fdb\u884c\u524d\u5411\u4e0d\u5bf9\u79f0\u6027\u7684\u9488\u5bf9\u6027\u8bad\u7ec3\uff0c\u6539\u5584\u52a8\u6001\u5e73\u8861<\/li>\";\r\n            }\r\n            \r\n            if (currentResult.rightComposite < currentResult.compositeThreshold || currentResult.leftComposite < currentResult.compositeThreshold) {\r\n                recommendations += `<li>\u8fdb\u884c\u4e0b\u80a2\u529b\u91cf\u3001\u67d4\u97e7\u6027\u548c\u6838\u5fc3\u7a33\u5b9a\u6027\u8bad\u7ec3\u4ee5\u63d0\u9ad8\u590d\u5408\u5206\u6570\uff08\u76ee\u6807\u2265${currentResult.compositeThreshold}%\uff09<\/li>`;\r\n            }\r\n            \r\n            if (currentResult.anteriorDiff <= 4 && currentResult.rightComposite >= currentResult.compositeThreshold && currentResult.leftComposite >= currentResult.compositeThreshold) {\r\n                recommendations += \"<li>\u4e0b\u80a2\u529f\u80fd\u826f\u597d\uff0c\u5efa\u8bae\u7ef4\u6301\u5f53\u524d\u8bad\u7ec3\u8ba1\u5212<\/li>\";\r\n            }\r\n            \r\n            if (currentResult.anteriorDiff > 4 || currentResult.rightComposite < currentResult.compositeThreshold || currentResult.leftComposite < currentResult.compositeThreshold) {\r\n                recommendations += \"<li>\u8003\u8651\u7ed3\u5408\u529f\u80fd\u6027\u52a8\u4f5c\u7b5b\u67e5(FMS)\u8fdb\u884c\u66f4\u5168\u9762\u7684\u8bc4\u4f30<\/li>\";\r\n                recommendations += \"<li>\u5982\u6709\u6301\u7eed\u75bc\u75db\u6216\u529f\u80fd\u9650\u5236\uff0c\u5efa\u8bae\u54a8\u8be2\u7269\u7406\u6cbb\u7597\u5e08\u6216\u8fd0\u52a8\u533b\u5b66\u4e13\u5bb6<\/li>\";\r\n            }\r\n            \r\n            recommendations += \"<\/ul>\";\r\n            return recommendations;\r\n        }\r\n        \r\n        \/\/ \u83b7\u53d6\u4e2d\u6587\u65e5\u671f\r\n        function getChineseDate(dateString) {\r\n            if (!dateString) return \"\u672a\u586b\u5199\";\r\n            const date = new Date(dateString);\r\n            const year = date.getFullYear();\r\n            const month = date.getMonth() + 1;\r\n            const day = date.getDate();\r\n            return `${year}\u5e74${month}\u6708${day}\u65e5`;\r\n        }\r\n        \r\n        \/\/ \u91cd\u7f6e\u8868\u5355\r\n        function resetForm() {\r\n            \/\/ \u91cd\u7f6e\u8f93\u5165\u5b57\u6bb5\r\n            const inputs = document.querySelectorAll('input[type=\"text\"], input[type=\"number\"], input[type=\"date\"]');\r\n            inputs.forEach(input => {\r\n                if (input.id !== 'compositeThreshold' && input.id !== 'testDate' && \r\n                    input.id !== 'searchName' && input.id !== 'searchDate' &&\r\n                    input.id !== 'reportTitle') {\r\n                    input.value = '';\r\n                }\r\n            });\r\n            \r\n            \/\/ \u91cd\u7f6e\u9009\u62e9\u5b57\u6bb5\r\n            document.getElementById('gender').value = '';\r\n            document.getElementById('sportActivity').value = '';\r\n            \r\n            \/\/ \u91cd\u7f6e\u6587\u672c\u57df\r\n            document.getElementById('reportNotes').value = '';\r\n            \r\n            \/\/ \u8bbe\u7f6e\u9ed8\u8ba4\u65e5\u671f\r\n            document.getElementById('testDate').valueAsDate = new Date();\r\n            \r\n            \/\/ \u9690\u85cf\u7ed3\u679c\u5bb9\u5668\r\n            document.getElementById('resultsContainer').style.display = 'none';\r\n            \r\n            \/\/ \u91cd\u7f6e\u5f53\u524d\u7ed3\u679c\r\n            currentResult = null;\r\n        }\r\n        \r\n        \/\/ \u5bfc\u51fa\u5f53\u524d\u7ed3\u679c\r\n        function exportResults() {\r\n            if (!currentResult) {\r\n                alert(\"\u8bf7\u5148\u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\");\r\n                return;\r\n            }\r\n            \r\n            const subjectName = currentResult.subjectName || \"\u672a\u547d\u540d\u53d7\u8bd5\u8005\";\r\n            const testDate = currentResult.testDate || new Date().toISOString().split('T')[0];\r\n            const age = currentResult.age || \"\u672a\u6307\u5b9a\";\r\n            const gender = currentResult.gender === \"male\" ? \"\u7537\u6027\" : \r\n                          currentResult.gender === \"female\" ? \"\u5973\u6027\" : \"\u672a\u6307\u5b9a\";\r\n            const sportActivity = getSportActivityName(currentResult.sportActivity) || \"\u672a\u6307\u5b9a\";\r\n            \r\n            let exportContent = `\u4e0b\u80a2Y-Balance\u6d4b\u8bd5\u62a5\u544a\\n`;\r\n            exportContent += `====================\\n\\n`;\r\n            exportContent += `\u53d7\u8bd5\u8005\u4fe1\u606f:\\n`;\r\n            exportContent += `\u59d3\u540d: ${subjectName}\\n`;\r\n            exportContent += `\u6d4b\u8bd5\u65e5\u671f: ${testDate}\\n`;\r\n            exportContent += `\u5e74\u9f84: ${age}\\n`;\r\n            exportContent += `\u6027\u522b: ${gender}\\n`;\r\n            exportContent += `\u8fd0\u52a8\/\u6d3b\u52a8\u7c7b\u578b: ${sportActivity}\\n`;\r\n            exportContent += `\u53f3\u817f\u957f\u5ea6: ${currentResult.rightLegLength} cm\\n`;\r\n            exportContent += `\u5de6\u817f\u957f\u5ea6: ${currentResult.leftLegLength} cm\\n\\n`;\r\n            \r\n            exportContent += `\u6d4b\u8bd5\u6570\u636e:\\n`;\r\n            exportContent += `-----------------\\n`;\r\n            exportContent += `\u53f3\u817f\u524d\u5411: ${currentResult.rightAnterior} cm\\n`;\r\n            exportContent += `\u53f3\u817f\u540e\u5185\u4fa7: ${currentResult.rightPosteromedial} cm\\n`;\r\n            exportContent += `\u53f3\u817f\u540e\u5916\u4fa7: ${currentResult.rightPosterolateral} cm\\n`;\r\n            exportContent += `\u5de6\u817f\u524d\u5411: ${currentResult.leftAnterior} cm\\n`;\r\n            exportContent += `\u5de6\u817f\u540e\u5185\u4fa7: ${currentResult.leftPosteromedial} cm\\n`;\r\n            exportContent += `\u5de6\u817f\u540e\u5916\u4fa7: ${currentResult.leftPosterolateral} cm\\n\\n`;\r\n            \r\n            exportContent += `\u6d4b\u8bd5\u7ed3\u679c:\\n`;\r\n            exportContent += `-----------------\\n`;\r\n            exportContent += `\u53f3\u817f\u590d\u5408\u5206\u6570: ${currentResult.rightComposite.toFixed(1)}%\\n`;\r\n            exportContent += `\u5de6\u817f\u590d\u5408\u5206\u6570: ${currentResult.leftComposite.toFixed(1)}%\\n`;\r\n            exportContent += `\u524d\u5411\u4e0d\u5bf9\u79f0: ${currentResult.anteriorDiff.toFixed(1)} cm\\n`;\r\n            exportContent += `\u540e\u5185\u4fa7\u4e0d\u5bf9\u79f0: ${currentResult.posteromedialDiff.toFixed(1)} cm\\n`;\r\n            exportContent += `\u540e\u5916\u4fa7\u4e0d\u5bf9\u79f0: ${currentResult.posterolateralDiff.toFixed(1)} cm\\n`;\r\n            exportContent += `\u6700\u5927\u4e0d\u5bf9\u79f0: ${currentResult.maxAsymmetry.toFixed(1)} cm\\n\\n`;\r\n            \r\n            exportContent += `\u8bc4\u4f30\u6807\u51c6:\\n`;\r\n            exportContent += `-----------------\\n`;\r\n            exportContent += `\u524d\u5411\u4e0d\u5bf9\u79f0: ${currentResult.anteriorStandard === 'optimal' ? '\u4f18\u79c0' : currentResult.anteriorStandard === 'pass' ? '\u5408\u683c' : '\u9700\u6539\u8fdb'}\\n`;\r\n            exportContent += `\u540e\u5185\u4fa7\u4e0d\u5bf9\u79f0: ${currentResult.posteromedialStandard === 'optimal' ? '\u4f18\u79c0' : '\u9700\u6539\u8fdb'}\\n`;\r\n            exportContent += `\u540e\u5916\u4fa7\u4e0d\u5bf9\u79f0: ${currentResult.posterolateralStandard === 'optimal' ? '\u4f18\u79c0' : '\u9700\u6539\u8fdb'}\\n`;\r\n            exportContent += `\u590d\u5408\u5206\u6570: ${currentResult.compositeStandard === 'optimal' ? '\u4f18\u79c0' : '\u9700\u6539\u8fdb'}\\n\\n`;\r\n            \r\n            exportContent += `\u6ce8: \u672c\u62a5\u544a\u57fa\u4e8e\u529f\u80fd\u6027\u8fd0\u52a8\u7cfb\u7edf(FMS)Y-Balance\u6d4b\u8bd5\u89c4\u8303\u751f\u6210\u3002\\n`;\r\n            exportContent += `\u7ed3\u679c\u4ec5\u4f9b\u53c2\u8003\uff0c\u4e0d\u80fd\u66ff\u4ee3\u4e13\u4e1a\u533b\u7597\u8bc4\u4f30\u3002\\n`;\r\n            exportContent += `\u62a5\u544a\u751f\u6210\u65e5\u671f: ${new Date().toLocaleDateString('zh-CN')}\\n`;\r\n            \r\n            \/\/ \u521b\u5efa\u4e0b\u8f7d\u94fe\u63a5\r\n            const blob = new Blob([exportContent], { type: 'text\/plain;charset=utf-8' });\r\n            const url = URL.createObjectURL(blob);\r\n            const a = document.createElement('a');\r\n            a.href = url;\r\n            a.download = `YBT-LQ_${subjectName}_${testDate}.txt`;\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n            URL.revokeObjectURL(url);\r\n            \r\n            \/\/ \u663e\u793a\u6210\u529f\u6d88\u606f\r\n            alert('\u6d4b\u8bd5\u7ed3\u679c\u5df2\u5bfc\u51fa\u4e3a\u6587\u672c\u6587\u4ef6\uff01');\r\n        }\r\n        \r\n        \/\/ \u586b\u5145\u793a\u4f8b\u6570\u636e\r\n        function fillSampleData() {\r\n            \/\/ \u53d7\u8bd5\u8005\u4fe1\u606f\r\n            document.getElementById('subjectName').value = '\u5f20\u660e';\r\n            document.getElementById('age').value = '25';\r\n            document.getElementById('gender').value = 'male';\r\n            document.getElementById('sportActivity').value = 'basketball';\r\n            \r\n            \/\/ \u4e0b\u80a2\u957f\u5ea6\r\n            document.getElementById('rightLegLength').value = '86.5';\r\n            document.getElementById('leftLegLength').value = '86.0';\r\n            \r\n            \/\/ \u4e0b\u80a2\u6d4b\u8bd5\u6570\u636e\r\n            document.getElementById('ra1').value = '65.5';\r\n            document.getElementById('ra2').value = '66.0';\r\n            document.getElementById('ra3').value = '65.0';\r\n            \r\n            document.getElementById('rpm1').value = '105.0';\r\n            document.getElementById('rpm2').value = '106.5';\r\n            document.getElementById('rpm3').value = '104.5';\r\n            \r\n            document.getElementById('rpl1').value = '102.0';\r\n            document.getElementById('rpl2').value = '103.5';\r\n            document.getElementById('rpl3').value = '101.5';\r\n            \r\n            document.getElementById('la1').value = '64.0';\r\n            document.getElementById('la2').value = '64.5';\r\n            document.getElementById('la3').value = '63.5';\r\n            \r\n            document.getElementById('lpm1').value = '103.0';\r\n            document.getElementById('lpm2').value = '104.5';\r\n            document.getElementById('lpm3').value = '102.5';\r\n            \r\n            document.getElementById('lpl1').value = '100.0';\r\n            document.getElementById('lpl2').value = '101.5';\r\n            document.getElementById('lpl3').value = '99.5';\r\n            \r\n            \/\/ \u62a5\u544a\u4fe1\u606f\r\n            document.getElementById('reportTitle').value = '\u5f20\u660e - \u4e0b\u80a2Y-Balance\u6d4b\u8bd5\u62a5\u544a';\r\n            document.getElementById('reportNotes').value = '\u53d7\u8bd5\u8005\u5b8c\u6210\u6d4b\u8bd5\u8fc7\u7a0b\u826f\u597d\uff0c\u65e0\u75bc\u75db\u62a5\u544a\u3002\u5efa\u8bae\u8fdb\u884c\u52a8\u6001\u5e73\u8861\u8bad\u7ec3\u3002';\r\n            \r\n            \/\/ \u663e\u793a\u6210\u529f\u6d88\u606f\r\n            alert('\u793a\u4f8b\u6570\u636e\u5df2\u586b\u5145\uff01\u73b0\u5728\u53ef\u4ee5\u70b9\u51fb\"\u8ba1\u7b97\u6d4b\u8bd5\u7ed3\u679c\"\u6309\u94ae\u67e5\u770b\u793a\u4f8b\u7ed3\u679c\u3002');\r\n        }\r\n        \r\n        \/\/ \u8f85\u52a9\u51fd\u6570\uff1a\u83b7\u53d6\u8fd0\u52a8\u7c7b\u578b\u540d\u79f0\r\n        function getSportActivityName(value) {\r\n            const sportMap = {\r\n                'basketball': '\u7bee\u7403',\r\n                'football': '\u7f8e\u5f0f\u8db3\u7403',\r\n                'soccer': '\u8db3\u7403',\r\n                'running': '\u8dd1\u6b65',\r\n                'rowing': '\u8d5b\u8247',\r\n                'general': '\u666e\u901a\u5065\u8eab',\r\n                'rehabilitation': '\u5eb7\u590d\u671f',\r\n                'other': '\u5176\u4ed6',\r\n                'unknown': '\u672a\u77e5'\r\n            };\r\n            \r\n            return sportMap[value] || value;\r\n        }\r\n        \r\n        \/\/ \u9875\u9762\u52a0\u8f7d\u65f6\u6267\u884c\r\n        window.addEventListener('load', function() {\r\n            \/\/ \u8bbe\u7f6e\u9ed8\u8ba4\u6d4b\u8bd5\u65e5\u671f\r\n            document.getElementById('testDate').valueAsDate = new Date();\r\n            \r\n            \/\/ \u79fb\u52a8\u7aef\u4f18\u5316\uff1a\u8c03\u6574\u8f93\u5165\u6846\u7c7b\u578b\u4ee5\u663e\u793a\u6570\u5b57\u952e\u76d8\r\n            const numberInputs = document.querySelectorAll('input[type=\"number\"]');\r\n            numberInputs.forEach(input => {\r\n                input.setAttribute('inputmode', 'decimal');\r\n            });\r\n            \r\n            \/\/ \u6dfb\u52a0\u89e6\u6478\u53cd\u9988\u6548\u679c\r\n            const buttons = document.querySelectorAll('.btn, .btn-secondary');\r\n            buttons.forEach(button => {\r\n                button.addEventListener('touchstart', function() {\r\n                    this.style.transform = 'scale(0.98)';\r\n                });\r\n                \r\n                button.addEventListener('touchend', function() {\r\n                    this.style.transform = '';\r\n                });\r\n            });\r\n            \r\n            \/\/ \u52a0\u8f7d\u5386\u53f2\u8bb0\u5f55\u6570\u91cf\r\n            const records = JSON.parse(localStorage.getItem('ybtRecords')) || [];\r\n            if (records.length > 0) {\r\n                document.getElementById('recordCount').textContent = records.length;\r\n            }\r\n        });\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u80a2Y-Balance\u6d4b\u8bd5 (YBT-LQ) | FMS\u5b98\u65b9\u89c4\u8303 \u4e0b\u80a2Y-Balance\u6d4b\u8bd5 \u57fa\u4e8eFMS\u5b98\u65b9\u89c4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1886,"parent":1307,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1880","page","type-page","status-publish","has-post-thumbnail","hentry"],"blocksy_meta":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1880","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=1880"}],"version-history":[{"count":14,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1880\/revisions"}],"predecessor-version":[{"id":2008,"href":"https:\/\/www.funpt.cn\/index.php?rest_route=\/wp\/v2\/pages\/1880\/revisions\/2008"}],"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\/1886"}],"wp:attachment":[{"href":"https:\/\/www.funpt.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}