{"id":18133,"date":"2026-09-16T13:03:35","date_gmt":"2026-09-16T13:03:35","guid":{"rendered":"https:\/\/blackbeltwhitehat.com\/?page_id=18133"},"modified":"2026-09-19T16:22:05","modified_gmt":"2026-09-19T16:22:05","slug":"directorio-de-ejercicios","status":"publish","type":"page","link":"https:\/\/blackbeltwhitehat.com\/es\/directorio-de-ejercicios\/","title":{"rendered":"Directorio de ejercicios de gimnasio"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><!-- Exercise Directory \u2014 paste this whole thing into a Gutenberg Custom HTML block --><br>\n<!-- Data source: Free Exercise DB, public domain (Unlicense). ~800 exercises fetched at page load. --><\/p>\n\n\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\n\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\n\n\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&amp;display=swap\" rel=\"stylesheet\">\n\n\n\n<style>\n<p>  .exdir {\n    --bg: #FFFFFF;\n    --panel: #F8F6F1;\n    --card: #FFFFFF;\n    --ink: #0F0F0F;\n    --ink-2: #262626;\n    --meta: #767676;\n    --rule: #E4E1D8;\n    --rule-strong: #B8B3A6;\n    --accent: #B33A2F;\n    --accent-soft: rgba(179, 58, 47, 0.08);\n    --tag-bg: #F0EBE1;\n    --tag-ink: #2E2718;\n    --focus: #B33A2F;\n    --shadow: 0 1px 0 rgba(15,15,15,0.04);\n  }\n  @media (prefers-color-scheme: dark) {\n    .exdir:not([data-theme=\"light\"]) {\n      --bg: #14130F;\n      --panel: #1C1B17;\n      --card: #1C1B17;\n      --ink: #EDEAE1;\n      --ink-2: #C4C0B4;\n      --meta: #8A8578;\n      --rule: #2E2C26;\n      --rule-strong: #423F37;\n      --accent: #E86155;\n      --accent-soft: rgba(232, 97, 85, 0.14);\n      --tag-bg: #2A2822;\n      --tag-ink: #C4B99E;\n      --focus: #E86155;\n      --shadow: 0 1px 0 rgba(0,0,0,0.4);\n    }\n  }\n  .exdir[data-theme=\"dark\"] {\n    --bg: #14130F;\n    --panel: #1C1B17;\n    --card: #1C1B17;\n    --ink: #EDEAE1;\n    --ink-2: #C4C0B4;\n    --meta: #8A8578;\n    --rule: #2E2C26;\n    --rule-strong: #423F37;\n    --accent: #E86155;\n    --accent-soft: rgba(232, 97, 85, 0.14);\n    --tag-bg: #2A2822;\n    --tag-ink: #C4B99E;\n    --focus: #E86155;\n    --shadow: 0 1px 0 rgba(0,0,0,0.4);\n  }<\/p>\n<p>  .exdir, .exdir *, .exdir *::before, .exdir *::after { box-sizing: border-box; }<\/p>\n<p>  .exdir {\n    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 15px;\n    line-height: 1.5;\n    color: var(--ink);\n    background: var(--bg);\n    -webkit-font-smoothing: antialiased;\n    text-rendering: optimizeLegibility;\n  }\n  .exdir img { max-width: 100%; height: auto; display: block; }\n  .exdir button { font: inherit; color: inherit; cursor: pointer; background: none; border: none; padding: 0; }<\/p>\n<p>  .exdir :focus-visible {\n    outline: 2px solid var(--focus);\n    outline-offset: 2px;\n  }<\/p>\n<p>  .exdir .wrap {\n    max-width: 1600px;\n    margin: 0 auto;\n    padding: 32px 32px 80px;\n  }\n  @media (max-width: 640px) {\n    .wrap { padding: 20px 16px 60px; }\n  }<\/p>\n<p>  \/* Header *\/\n  .exdir header.top {\n    display: flex;\n    align-items: flex-end;\n    justify-content: space-between;\n    gap: 24px;\n    padding-bottom: 20px;\n    border-bottom: 1px solid var(--rule-strong);\n    margin-bottom: 24px;\n  }\n  .exdir header.top h1 {\n    font-size: 32px;\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    margin: 0 0 4px;\n    line-height: 1.1;\n  }\n  .exdir header.top .subtitle {\n    font-size: 15px;\n    color: var(--meta);\n    margin: 0;\n    max-width: 44ch;\n  }\n  .exdir header.top .count {\n    font-size: 13px;\n    color: var(--meta);\n    font-variant-numeric: tabular-nums;\n    white-space: nowrap;\n    padding-bottom: 4px;\n  }\n  .exdir header.top .count strong {\n    font-weight: 600;\n    color: var(--ink);\n  }\n  @media (max-width: 640px) {\n    header.top { flex-direction: column; align-items: flex-start; gap: 8px; }\n    header.top h1 { font-size: 26px; }\n  }<\/p>\n<p>  \/* Search + filters *\/\n  .exdir .controls {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 20px;\n    margin-bottom: 32px;\n  }\n  .exdir .search-row {\n    position: relative;\n  }\n  .exdir .search-row input {\n    width: 100%;\n    padding: 12px 14px 12px 40px;\n    font-size: 15px;\n    font-family: inherit;\n    color: var(--ink);\n    background: var(--card);\n    border: 1px solid var(--rule);\n    border-radius: 6px;\n    transition: border-color 0.15s, box-shadow 0.15s;\n  }\n  .exdir .search-row input:focus {\n    outline: none;\n    border-color: var(--accent);\n    box-shadow: 0 0 0 3px var(--accent-soft);\n  }\n  .search-row input::placeholder { color: var(--meta); }\n  .exdir .search-row .search-icon {\n    position: absolute;\n    left: 14px;\n    top: 50%;\n    transform: translateY(-50%);\n    color: var(--meta);\n    pointer-events: none;\n    width: 16px;\n    height: 16px;\n  }<\/p>\n<p>  .exdir .filter-groups {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 16px;\n  }\n  .exdir .filter-group {\n    display: grid;\n    grid-template-columns: 90px 1fr;\n    gap: 12px;\n    align-items: baseline;\n  }\n  .exdir .filter-group h3 {\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--meta);\n    margin: 0;\n    padding-top: 6px;\n  }\n  .exdir .chips {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n  }\n  .exdir .chip {\n    background: transparent;\n    border: 1px solid var(--rule);\n    color: var(--ink-2);\n    padding: 5px 11px;\n    border-radius: 4px;\n    font-size: 13px;\n    font-weight: 500;\n    line-height: 1.4;\n    transition: all 0.12s;\n    text-transform: capitalize;\n  }\n  .chip:hover { border-color: var(--rule-strong); color: var(--ink); }\n  .exdir .chip.active {\n    background: var(--ink);\n    color: var(--bg);\n    border-color: var(--ink);\n  }\n  .exdir[data-theme=\"dark\"] .chip.active,\n  .exdir:not([data-theme=\"light\"]) .chip.active {\n    background: var(--ink);\n    color: var(--bg);\n  }\n  @media (max-width: 640px) {\n    .filter-group { grid-template-columns: 1fr; gap: 4px; }\n    .filter-group h3 { padding-top: 0; }\n  }<\/p>\n<p>  .exdir .toolbar {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 20px;\n    padding-top: 16px;\n    border-top: 1px solid var(--rule);\n    font-size: 13px;\n    color: var(--meta);\n  }\n  .exdir .clear-btn {\n    background: transparent;\n    border: none;\n    padding: 4px 8px;\n    margin: -4px -8px;\n    border-radius: 4px;\n    color: var(--accent);\n    font-weight: 500;\n    font-size: 13px;\n  }\n  .clear-btn:hover { background: var(--accent-soft); }\n  .clear-btn[hidden] { display: none; }<\/p>\n<p>  \/* Grid *\/\n  .exdir .grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n    gap: 16px;\n  }<\/p>\n<p>  .exdir .card {\n    background: var(--card);\n    border: 1px solid var(--rule);\n    border-radius: 6px;\n    overflow: hidden;\n    cursor: pointer;\n    transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n    text-align: left;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    font: inherit;\n    color: inherit;\n    width: 100%;\n    box-shadow: 0 1px 2px rgba(15, 15, 15, 0.04);\n    position: relative;\n  }\n  .exdir .card:hover {\n    border-color: var(--accent);\n    box-shadow: 0 6px 20px rgba(15, 15, 15, 0.10);\n    transform: translateY(-2px);\n  }\n  .exdir .card::after {\n    content: \"\u2192\";\n    position: absolute;\n    bottom: 12px;\n    right: 14px;\n    color: var(--meta);\n    font-size: 18px;\n    font-weight: 500;\n    line-height: 1;\n    opacity: 0.5;\n    transition: color 0.15s, opacity 0.15s, transform 0.15s;\n    pointer-events: none;\n  }\n  .exdir .card:hover::after {\n    color: var(--accent);\n    opacity: 1;\n    transform: translateX(3px);\n  }\n  .exdir .card-body {\n    padding-right: 32px;\n  }\n  .card:hover .card-name { color: var(--accent); }\n  .exdir .card:focus-visible {\n    outline-offset: -2px;\n  }<\/p>\n<p>  .exdir .card-img {\n    position: relative;\n    aspect-ratio: 4 \/ 3;\n    background: var(--panel);\n    overflow: hidden;\n    border-bottom: 1px solid var(--rule);\n  }\n  .exdir .card-img img {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n  .exdir .card-img .frame-b {\n    animation: crossfade 1.8s ease-in-out infinite;\n  }\n  @keyframes crossfade {\n    0%, 30%   { opacity: 0; }\n    50%, 80%  { opacity: 1; }\n    100%      { opacity: 0; }\n  }\n  @media (prefers-reduced-motion: reduce) {\n    .card-img .frame-b { animation: none; opacity: 0.5; }\n  }<\/p>\n<p>  .exdir .card-body {\n    padding: 12px 14px 14px;\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n  }\n  .exdir .card-name {\n    font-size: 15px;\n    font-weight: 600;\n    color: var(--ink);\n    line-height: 1.3;\n    letter-spacing: -0.005em;\n    transition: color 0.15s;\n  }\n  .exdir .card-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 4px;\n    align-items: center;\n  }\n  .exdir .tag {\n    background: var(--tag-bg);\n    color: var(--tag-ink);\n    font-size: 11.5px;\n    font-weight: 500;\n    padding: 2px 7px;\n    border-radius: 3px;\n    line-height: 1.5;\n    text-transform: capitalize;\n  }\n  .exdir .tag.muscle {\n    background: transparent;\n    color: var(--accent);\n    padding: 2px 0;\n    font-weight: 600;\n    font-size: 11.5px;\n  }<\/p>\n<p>  \/* Empty state *\/\n  .exdir .empty {\n    text-align: center;\n    padding: 60px 20px;\n    color: var(--meta);\n  }\n  .empty p { margin: 0 0 12px; font-size: 15px; }\n  .exdir .empty button {\n    background: var(--ink);\n    color: var(--bg);\n    border: none;\n    padding: 8px 16px;\n    border-radius: 4px;\n    font-size: 14px;\n    font-weight: 500;\n  }<\/p>\n<p>  \/* Footer *\/\n  .exdir footer {\n    margin-top: 60px;\n    padding-top: 20px;\n    border-top: 1px solid var(--rule);\n    font-size: 12.5px;\n    color: var(--meta);\n    line-height: 1.6;\n  }\n  footer a { color: var(--ink-2); }<\/p>\n<p>  \/* Modal *\/\n  .exdir .modal {\n    position: fixed;\n    inset: 0;\n    background: rgba(15, 15, 15, 0.5);\n    display: flex;\n    align-items: flex-start;\n    justify-content: center;\n    padding: 40px 20px;\n    z-index: 100;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity 0.15s;\n    overflow-y: auto;\n  }\n  .exdir .modal.open {\n    opacity: 1;\n    pointer-events: auto;\n  }\n  .exdir .modal-panel {\n    background: var(--card);\n    border-radius: 8px;\n    max-width: 720px;\n    width: 100%;\n    max-height: none;\n    display: flex;\n    flex-direction: column;\n    border: 1px solid var(--rule-strong);\n    box-shadow: 0 20px 60px rgba(0,0,0,0.15);\n  }\n  @media (max-width: 640px) {\n    .modal { padding: 12px; }\n  }\n  .exdir .modal-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    padding: 20px 24px 16px;\n    border-bottom: 1px solid var(--rule);\n    gap: 16px;\n  }\n  .exdir .modal-header h2 {\n    font-size: 22px;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n    margin: 0;\n    line-height: 1.2;\n  }\n  .exdir .modal-close {\n    background: transparent;\n    border: 1px solid var(--rule);\n    width: 32px;\n    height: 32px;\n    border-radius: 4px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--ink-2);\n    flex-shrink: 0;\n  }\n  .modal-close:hover { border-color: var(--rule-strong); color: var(--ink); }\n  .exdir .modal-body {\n    padding: 20px 24px 24px;\n    overflow-y: auto;\n  }\n  .exdir .modal-media {\n    aspect-ratio: 16 \/ 10;\n    background: var(--panel);\n    border-radius: 6px;\n    position: relative;\n    overflow: hidden;\n    margin-bottom: 20px;\n    border: 1px solid var(--rule);\n  }\n  .exdir .modal-media img {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n  }\n  .exdir .modal-media .frame-b {\n    animation: crossfade 1.8s ease-in-out infinite;\n  }\n  .exdir .modal-meta {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n    gap: 16px;\n    padding: 16px 0;\n    border-top: 1px solid var(--rule);\n    border-bottom: 1px solid var(--rule);\n    margin-bottom: 20px;\n  }\n  .exdir .modal-meta dt {\n    font-size: 12px;\n    color: var(--meta);\n    margin: 0 0 3px;\n    font-weight: 500;\n  }\n  .exdir .modal-meta dd {\n    font-size: 14px;\n    color: var(--ink);\n    margin: 0;\n    font-weight: 500;\n    text-transform: capitalize;\n  }\n  .exdir .modal-body h3 {\n    font-size: 14px;\n    font-weight: 600;\n    margin: 20px 0 10px;\n    color: var(--ink);\n  }\n  .modal-body h3:first-of-type { margin-top: 0; }\n  .exdir .modal-body ol {\n    padding-left: 22px;\n    margin: 0;\n    color: var(--ink);\n  }\n  .exdir .modal-body ol li {\n    margin-bottom: 10px;\n    line-height: 1.55;\n  }\n  .exdir .modal-body ol li::marker {\n    color: var(--accent);\n    font-weight: 600;\n  }\n  .exdir .muscle-list {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n  .exdir .muscle-list li {\n    background: var(--tag-bg);\n    color: var(--tag-ink);\n    padding: 3px 9px;\n    border-radius: 3px;\n    font-size: 13px;\n    text-transform: capitalize;\n    font-weight: 500;\n  }\n  .exdir .muscle-list li.primary {\n    background: var(--accent);\n    color: white;\n  }<\/p>\n<\/style>\n\n\n\n<!-- Exercise Directory \u2014 paste this whole thing into a Gutenberg Custom HTML block -->\n<!-- Data source: Free Exercise DB, public domain (Unlicense). ~800 exercises fetched at page load. -->\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n\n<style>\n\n  .exdir {\n    --bg: #FFFFFF;\n    --panel: #F8F6F1;\n    --card: #FFFFFF;\n    --ink: #0F0F0F;\n    --ink-2: #262626;\n    --meta: #767676;\n    --rule: #E4E1D8;\n    --rule-strong: #B8B3A6;\n    --accent: #B33A2F;\n    --accent-soft: rgba(179, 58, 47, 0.08);\n    --tag-bg: #F0EBE1;\n    --tag-ink: #2E2718;\n    --focus: #B33A2F;\n    --shadow: 0 1px 0 rgba(15,15,15,0.04);\n  }\n  @media (prefers-color-scheme: dark) {\n    .exdir:not([data-theme=\"light\"]) {\n      --bg: #14130F;\n      --panel: #1C1B17;\n      --card: #1C1B17;\n      --ink: #EDEAE1;\n      --ink-2: #C4C0B4;\n      --meta: #8A8578;\n      --rule: #2E2C26;\n      --rule-strong: #423F37;\n      --accent: #E86155;\n      --accent-soft: rgba(232, 97, 85, 0.14);\n      --tag-bg: #2A2822;\n      --tag-ink: #C4B99E;\n      --focus: #E86155;\n      --shadow: 0 1px 0 rgba(0,0,0,0.4);\n    }\n  }\n  .exdir[data-theme=\"dark\"] {\n    --bg: #14130F;\n    --panel: #1C1B17;\n    --card: #1C1B17;\n    --ink: #EDEAE1;\n    --ink-2: #C4C0B4;\n    --meta: #8A8578;\n    --rule: #2E2C26;\n    --rule-strong: #423F37;\n    --accent: #E86155;\n    --accent-soft: rgba(232, 97, 85, 0.14);\n    --tag-bg: #2A2822;\n    --tag-ink: #C4B99E;\n    --focus: #E86155;\n    --shadow: 0 1px 0 rgba(0,0,0,0.4);\n  }\n\n  .exdir, .exdir *, .exdir *::before, .exdir *::after { box-sizing: border-box; }\n  \n  .exdir {\n    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 15px;\n    line-height: 1.5;\n    color: var(--ink);\n    background: var(--bg);\n    -webkit-font-smoothing: antialiased;\n    text-rendering: optimizeLegibility;\n  }\n  .exdir img { max-width: 100%; height: auto; display: block; }\n  .exdir button { font: inherit; color: inherit; cursor: pointer; background: none; border: none; padding: 0; }\n\n  .exdir :focus-visible {\n    outline: 2px solid var(--focus);\n    outline-offset: 2px;\n  }\n\n  .exdir .wrap {\n    max-width: 1600px;\n    margin: 0 auto;\n    padding: 32px 32px 80px;\n  }\n  @media (max-width: 640px) {\n    .wrap { padding: 20px 16px 60px; }\n  }\n\n  \/* Header *\/\n  .exdir header.top {\n    display: flex;\n    align-items: flex-end;\n    justify-content: space-between;\n    gap: 24px;\n    padding-bottom: 20px;\n    border-bottom: 1px solid var(--rule-strong);\n    margin-bottom: 24px;\n  }\n  .exdir header.top h1 {\n    font-size: 32px;\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    margin: 0 0 4px;\n    line-height: 1.1;\n  }\n  .exdir header.top .subtitle {\n    font-size: 15px;\n    color: var(--meta);\n    margin: 0;\n    max-width: 44ch;\n  }\n  .exdir header.top .count {\n    font-size: 13px;\n    color: var(--meta);\n    font-variant-numeric: tabular-nums;\n    white-space: nowrap;\n    padding-bottom: 4px;\n  }\n  .exdir header.top .count strong {\n    font-weight: 600;\n    color: var(--ink);\n  }\n  @media (max-width: 640px) {\n    header.top { flex-direction: column; align-items: flex-start; gap: 8px; }\n    header.top h1 { font-size: 26px; }\n  }\n\n  \/* Search + filters *\/\n  .exdir .controls {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 20px;\n    margin-bottom: 32px;\n  }\n  .exdir .search-row {\n    position: relative;\n  }\n  .exdir .search-row input {\n    width: 100%;\n    padding: 12px 14px 12px 40px;\n    font-size: 15px;\n    font-family: inherit;\n    color: var(--ink);\n    background: var(--card);\n    border: 1px solid var(--rule);\n    border-radius: 6px;\n    transition: border-color 0.15s, box-shadow 0.15s;\n  }\n  .exdir .search-row input:focus {\n    outline: none;\n    border-color: var(--accent);\n    box-shadow: 0 0 0 3px var(--accent-soft);\n  }\n  .search-row input::placeholder { color: var(--meta); }\n  .exdir .search-row .search-icon {\n    position: absolute;\n    left: 14px;\n    top: 50%;\n    transform: translateY(-50%);\n    color: var(--meta);\n    pointer-events: none;\n    width: 16px;\n    height: 16px;\n  }\n\n  .exdir .filter-groups {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 16px;\n  }\n  .exdir .filter-group {\n    display: grid;\n    grid-template-columns: 90px 1fr;\n    gap: 12px;\n    align-items: baseline;\n  }\n  .exdir .filter-group h3 {\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--meta);\n    margin: 0;\n    padding-top: 6px;\n  }\n  .exdir .chips {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n  }\n  .exdir .chip {\n    background: transparent;\n    border: 1px solid var(--rule);\n    color: var(--ink-2);\n    padding: 5px 11px;\n    border-radius: 4px;\n    font-size: 13px;\n    font-weight: 500;\n    line-height: 1.4;\n    transition: all 0.12s;\n    text-transform: capitalize;\n  }\n  .chip:hover { border-color: var(--rule-strong); color: var(--ink); }\n  .exdir .chip.active {\n    background: var(--ink);\n    color: var(--bg);\n    border-color: var(--ink);\n  }\n  .exdir[data-theme=\"dark\"] .chip.active,\n  .exdir:not([data-theme=\"light\"]) .chip.active {\n    background: var(--ink);\n    color: var(--bg);\n  }\n  @media (max-width: 640px) {\n    .filter-group { grid-template-columns: 1fr; gap: 4px; }\n    .filter-group h3 { padding-top: 0; }\n  }\n\n  .exdir .toolbar {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 20px;\n    padding-top: 16px;\n    border-top: 1px solid var(--rule);\n    font-size: 13px;\n    color: var(--meta);\n  }\n  .exdir .clear-btn {\n    background: transparent;\n    border: none;\n    padding: 4px 8px;\n    margin: -4px -8px;\n    border-radius: 4px;\n    color: var(--accent);\n    font-weight: 500;\n    font-size: 13px;\n  }\n  .clear-btn:hover { background: var(--accent-soft); }\n  .clear-btn[hidden] { display: none; }\n\n  \/* Grid *\/\n  .exdir .grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n    gap: 16px;\n  }\n\n  .exdir .card {\n    background: var(--card);\n    border: 1px solid var(--rule);\n    border-radius: 6px;\n    overflow: hidden;\n    cursor: pointer;\n    transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n    text-align: left;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    font: inherit;\n    color: inherit;\n    width: 100%;\n    box-shadow: 0 1px 2px rgba(15, 15, 15, 0.04);\n    position: relative;\n  }\n  .exdir .card:hover {\n    border-color: var(--accent);\n    box-shadow: 0 6px 20px rgba(15, 15, 15, 0.10);\n    transform: translateY(-2px);\n  }\n  .exdir .card::after {\n    content: \"\u2192\";\n    position: absolute;\n    bottom: 12px;\n    right: 14px;\n    color: var(--meta);\n    font-size: 18px;\n    font-weight: 500;\n    line-height: 1;\n    opacity: 0.5;\n    transition: color 0.15s, opacity 0.15s, transform 0.15s;\n    pointer-events: none;\n  }\n  .exdir .card:hover::after {\n    color: var(--accent);\n    opacity: 1;\n    transform: translateX(3px);\n  }\n  .exdir .card-body {\n    padding-right: 32px;\n  }\n  .card:hover .card-name { color: var(--accent); }\n  .exdir .card:focus-visible {\n    outline-offset: -2px;\n  }\n\n  .exdir .card-img {\n    position: relative;\n    aspect-ratio: 4 \/ 3;\n    background: var(--panel);\n    overflow: hidden;\n    border-bottom: 1px solid var(--rule);\n  }\n  .exdir .card-img img {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n  }\n  .exdir .card-img .frame-b {\n    animation: crossfade 1.8s ease-in-out infinite;\n  }\n  @keyframes crossfade {\n    0%, 30%   { opacity: 0; }\n    50%, 80%  { opacity: 1; }\n    100%      { opacity: 0; }\n  }\n  @media (prefers-reduced-motion: reduce) {\n    .card-img .frame-b { animation: none; opacity: 0.5; }\n  }\n\n  .exdir .card-body {\n    padding: 12px 14px 14px;\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n  }\n  .exdir .card-name {\n    font-size: 15px;\n    font-weight: 600;\n    color: var(--ink);\n    line-height: 1.3;\n    letter-spacing: -0.005em;\n    transition: color 0.15s;\n  }\n  .exdir .card-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 4px;\n    align-items: center;\n  }\n  .exdir .tag {\n    background: var(--tag-bg);\n    color: var(--tag-ink);\n    font-size: 11.5px;\n    font-weight: 500;\n    padding: 2px 7px;\n    border-radius: 3px;\n    line-height: 1.5;\n    text-transform: capitalize;\n  }\n  .exdir .tag.muscle {\n    background: transparent;\n    color: var(--accent);\n    padding: 2px 0;\n    font-weight: 600;\n    font-size: 11.5px;\n  }\n\n  \/* Empty state *\/\n  .exdir .empty {\n    text-align: center;\n    padding: 60px 20px;\n    color: var(--meta);\n  }\n  .empty p { margin: 0 0 12px; font-size: 15px; }\n  .exdir .empty button {\n    background: var(--ink);\n    color: var(--bg);\n    border: none;\n    padding: 8px 16px;\n    border-radius: 4px;\n    font-size: 14px;\n    font-weight: 500;\n  }\n\n  \/* Footer *\/\n  .exdir footer {\n    margin-top: 60px;\n    padding-top: 20px;\n    border-top: 1px solid var(--rule);\n    font-size: 12.5px;\n    color: var(--meta);\n    line-height: 1.6;\n  }\n  footer a { color: var(--ink-2); }\n\n  \/* Modal *\/\n  .exdir .modal {\n    position: fixed;\n    inset: 0;\n    background: rgba(15, 15, 15, 0.5);\n    display: flex;\n    align-items: flex-start;\n    justify-content: center;\n    padding: 40px 20px;\n    z-index: 100;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity 0.15s;\n    overflow-y: auto;\n  }\n  .exdir .modal.open {\n    opacity: 1;\n    pointer-events: auto;\n  }\n  .exdir .modal-panel {\n    background: var(--card);\n    border-radius: 8px;\n    max-width: 720px;\n    width: 100%;\n    max-height: none;\n    display: flex;\n    flex-direction: column;\n    border: 1px solid var(--rule-strong);\n    box-shadow: 0 20px 60px rgba(0,0,0,0.15);\n  }\n  @media (max-width: 640px) {\n    .modal { padding: 12px; }\n  }\n  .exdir .modal-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    padding: 20px 24px 16px;\n    border-bottom: 1px solid var(--rule);\n    gap: 16px;\n  }\n  .exdir .modal-header h2 {\n    font-size: 22px;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n    margin: 0;\n    line-height: 1.2;\n  }\n  .exdir .modal-close {\n    background: transparent;\n    border: 1px solid var(--rule);\n    width: 32px;\n    height: 32px;\n    border-radius: 4px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--ink-2);\n    flex-shrink: 0;\n  }\n  .modal-close:hover { border-color: var(--rule-strong); color: var(--ink); }\n  .exdir .modal-body {\n    padding: 20px 24px 24px;\n    overflow-y: auto;\n  }\n  .exdir .modal-media {\n    aspect-ratio: 16 \/ 10;\n    background: var(--panel);\n    border-radius: 6px;\n    position: relative;\n    overflow: hidden;\n    margin-bottom: 20px;\n    border: 1px solid var(--rule);\n  }\n  .exdir .modal-media img {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n  }\n  .exdir .modal-media .frame-b {\n    animation: crossfade 1.8s ease-in-out infinite;\n  }\n  .exdir .modal-meta {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n    gap: 16px;\n    padding: 16px 0;\n    border-top: 1px solid var(--rule);\n    border-bottom: 1px solid var(--rule);\n    margin-bottom: 20px;\n  }\n  .exdir .modal-meta dt {\n    font-size: 12px;\n    color: var(--meta);\n    margin: 0 0 3px;\n    font-weight: 500;\n  }\n  .exdir .modal-meta dd {\n    font-size: 14px;\n    color: var(--ink);\n    margin: 0;\n    font-weight: 500;\n    text-transform: capitalize;\n  }\n  .exdir .modal-body h3 {\n    font-size: 14px;\n    font-weight: 600;\n    margin: 20px 0 10px;\n    color: var(--ink);\n  }\n  .modal-body h3:first-of-type { margin-top: 0; }\n  .exdir .modal-body ol {\n    padding-left: 22px;\n    margin: 0;\n    color: var(--ink);\n  }\n  .exdir .modal-body ol li {\n    margin-bottom: 10px;\n    line-height: 1.55;\n  }\n  .exdir .modal-body ol li::marker {\n    color: var(--accent);\n    font-weight: 600;\n  }\n  .exdir .muscle-list {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n  .exdir .muscle-list li {\n    background: var(--tag-bg);\n    color: var(--tag-ink);\n    padding: 3px 9px;\n    border-radius: 3px;\n    font-size: 13px;\n    text-transform: capitalize;\n    font-weight: 500;\n  }\n  .exdir .muscle-list li.primary {\n    background: var(--accent);\n    color: white;\n  }\n\n<\/style>\n\n<div class=\"exdir\">\n<div class=\"wrap\">\n  <header class=\"top\">\n    <div>\n      <h1>Exercise Directory<\/h1>\n      <p class=\"subtitle\">Filter by muscle group, equipment, or category. Tap a card for coaching notes and full instructions.<\/p>\n    <\/div>\n    <div class=\"count\"><strong id=\"exdir-visible-count\">0<\/strong> of <span id=\"exdir-total-count\">0<\/span> exercises<\/div>\n  <\/header>\n\n  <div class=\"controls\">\n    <div class=\"search-row\">\n      <svg class=\"search-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.3-4.3\"\/><\/svg>\n      <input type=\"search\" id=\"exdir-search\" placeholder=\"Search \u2014 e.g. squat, dumbbell, hamstring\" autocomplete=\"off\">\n    <\/div>\n    <div class=\"filter-groups\" id=\"exdir-filter-groups\"><\/div>\n  <\/div>\n\n  <div class=\"toolbar\">\n    <div id=\"exdir-active-summary\">Showing all exercises<\/div>\n    <button class=\"clear-btn\" id=\"exdir-clear-btn\" hidden>Clear filters<\/button>\n  <\/div>\n\n  <main class=\"grid\" id=\"exdir-grid\" role=\"list\"><\/main>\n\n  <div class=\"empty\" id=\"exdir-empty\" hidden>\n    <p>No exercises match these filters.<\/p>\n    <button id=\"exdir-empty-clear\">Clear filters<\/button>\n  <\/div>\n\n  <footer>\n    <p>Data: <a href=\"https:\/\/github.com\/yuhonas\/free-exercise-db\" target=\"_blank\" rel=\"noopener\">Free Exercise DB<\/a> \u2014 public domain (Unlicense), 800+ exercises. Frames alternate between the start and peak of each rep.<\/p>\n  <\/footer>\n<\/div>\n\n<div class=\"modal\" id=\"exdir-modal\" hidden aria-hidden=\"true\" role=\"dialog\" aria-labelledby=\"exdir-modal-title\" aria-modal=\"true\">\n  <div class=\"modal-panel\">\n    <div class=\"modal-header\">\n      <h2 id=\"exdir-modal-title\"><\/h2>\n      <button class=\"modal-close\" id=\"exdir-modal-close\" aria-label=\"Close\">\n        <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 6 6 18\"\/><path d=\"m6 6 12 12\"\/><\/svg>\n      <\/button>\n    <\/div>\n    <div class=\"modal-body\" id=\"exdir-modal-body\"><\/div>\n  <\/div>\n<\/div>\n<\/div>\n\n<script>\n(function() {\n\n\/\/ Source: Free Exercise DB (public domain \/ Unlicense).\n\/\/ Attempts to fetch the full 800+ dataset from GitHub; falls back to an\n\/\/ inline curated set of ~50 exercises if the fetch is blocked (some\n\/\/ WordPress cache\/security plugins block outbound requests from inline JS).\nconst DATA_URL = 'https:\/\/raw.githubusercontent.com\/yuhonas\/free-exercise-db\/main\/dist\/exercises.json';\nconst IMAGE_BASE = 'https:\/\/raw.githubusercontent.com\/yuhonas\/free-exercise-db\/main\/exercises\/';\n\nconst FALLBACK_EXERCISES = [{\"name\":\"Barbell Bench Press - Medium Grip\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie back on a flat bench. Using a medium width grip (a grip that creates a 90-degree angle in the middle of the movement between the forearms and the upper arms), lift the bar from the rack and hold it straight over you with your arms locked. This will be your starting position.\",\"From the starting position, breathe in and begin coming down slowly until the bar touches your middle chest.\",\"After a brief pause, push the bar back to the starting position as you breathe out. Focus on pushing the bar using your chest muscles. Lock your arms and squeeze your chest in the contracted position at the top of the motion, hold for a second and then start coming down slowly again. Tip: Ideally, lowering the weight should take about twice as long as raising it.\",\"Repeat the movement for the prescribed amount of repetitions.\",\"When you are done, place the bar back in the rack.\"],\"category\":\"strength\",\"images\":[\"Barbell_Bench_Press_-_Medium_Grip\/0.jpg\",\"Barbell_Bench_Press_-_Medium_Grip\/1.jpg\"]},{\"name\":\"Dumbbell Bench Press\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie down on a flat bench with a dumbbell in each hand resting on top of your thighs. The palms of your hands will be facing each other.\",\"Then, using your thighs to help raise the dumbbells up, lift the dumbbells one at a time so that you can hold them in front of you at shoulder width.\",\"Once at shoulder width, rotate your wrists forward so that the palms of your hands are facing away from you. The dumbbells should be just to the sides of your chest, with your upper arm and forearm creating a 90 degree angle. Be sure to maintain full control of the dumbbells at all times. This will be your starting position.\",\"Then, as you breathe out, use your chest to push the dumbbells up. Lock your arms at the top of the lift and squeeze your chest, hold for a second and then begin coming down slowly. Tip: Ideally, lowering the weight should take about twice as long as raising it.\",\"Repeat the movement for the prescribed amount of repetitions of your training program.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Bench_Press\/0.jpg\",\"Dumbbell_Bench_Press\/1.jpg\"]},{\"name\":\"Pushups\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie on the floor face down and place your hands about 36 inches apart while holding your torso up at arms length.\",\"Next, lower yourself downward until your chest almost touches the floor as you inhale.\",\"Now breathe out and press your upper body back up to the starting position while squeezing your chest.\",\"After a brief pause at the top contracted position, you can begin to lower yourself downward again for as many repetitions as needed.\"],\"category\":\"strength\",\"images\":[\"Pushups\/0.jpg\",\"Pushups\/1.jpg\"]},{\"name\":\"Cable Crossover\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"cable\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\"],\"instructions\":[\"To get yourself into the starting position, place the pulleys on a high position (above your head), select the resistance to be used and hold the pulleys in each hand.\",\"Step forward in front of an imaginary straight line between both pulleys while pulling your arms together in front of you. Your torso should have a small forward bend from the waist. This will be your starting position.\",\"With a slight bend on your elbows in order to prevent stress at the biceps tendon, extend your arms to the side (straight out at both sides) in a wide arc until you feel a stretch on your chest. Breathe in as you perform this portion of the movement. Tip: Keep in mind that throughout the movement, the arms and torso should remain stationary; the movement should only occur at the shoulder joint.\",\"Return your arms back to the starting position as you breathe out. Make sure to use the same arc of motion used to lower the weights.\",\"Hold for a second at the starting position and repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Cable_Crossover\/0.jpg\",\"Cable_Crossover\/1.jpg\"]},{\"name\":\"Barbell Incline Bench Press - Medium Grip\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie back on an incline bench. Using a medium-width grip (a grip that creates a 90-degree angle in the middle of the movement between the forearms and the upper arms), lift the bar from the rack and hold it straight over you with your arms locked. This will be your starting position.\",\"As you breathe in, come down slowly until you feel the bar on you upper chest.\",\"After a second pause, bring the bar back to the starting position as you breathe out and push the bar using your chest muscles. Lock your arms in the contracted position, squeeze your chest, hold for a second and then start coming down slowly again. Tip: it should take at least twice as long to go down than to come up.\",\"Repeat the movement for the prescribed amount of repetitions.\",\"When you are done, place the bar back in the rack.\"],\"category\":\"strength\",\"images\":[\"Barbell_Incline_Bench_Press_-_Medium_Grip\/0.jpg\",\"Barbell_Incline_Bench_Press_-_Medium_Grip\/1.jpg\"]},{\"name\":\"Dumbbell Flyes\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[],\"instructions\":[\"Lie down on a flat bench with a dumbbell on each hand resting on top of your thighs. The palms of your hand will be facing each other.\",\"Then using your thighs to help raise the dumbbells, lift the dumbbells one at a time so you can hold them in front of you at shoulder width with the palms of your hands facing each other. Raise the dumbbells up like you're pressing them, but stop and hold just before you lock out. This will be your starting position.\",\"With a slight bend on your elbows in order to prevent stress at the biceps tendon, lower your arms out at both sides in a wide arc until you feel a stretch on your chest. Breathe in as you perform this portion of the movement. Tip: Keep in mind that throughout the movement, the arms should remain stationary; the movement should only occur at the shoulder joint.\",\"Return your arms back to the starting position as you squeeze your chest muscles and breathe out. Tip: Make sure to use the same arc of motion used to lower the weights.\",\"Hold for a second at the contracted position and repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Flyes\/0.jpg\",\"Dumbbell_Flyes\/1.jpg\"]},{\"name\":\"Dips - Chest Version\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"For this exercise you will need access to parallel bars. To get yourself into the starting position, hold your body at arms length (arms locked) above the bars.\",\"While breathing in, lower yourself slowly with your torso leaning forward around 30 degrees or so and your elbows flared out slightly until you feel a slight stretch in the chest.\",\"Once you feel the stretch, use your chest to bring your body back to the starting position as you breathe out. Tip: Remember to squeeze the chest at the top of the movement for a second.\",\"Repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dips_-_Chest_Version\/0.jpg\",\"Dips_-_Chest_Version\/1.jpg\"]},{\"name\":\"Pullups\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"lats\"],\"secondaryMuscles\":[\"biceps\",\"middle back\"],\"instructions\":[\"Grab the pull-up bar with the palms facing forward using the prescribed grip. Note on grips: For a wide grip, your hands need to be spaced out at a distance wider than your shoulder width. For a medium grip, your hands need to be spaced out at a distance equal to your shoulder width and for a close grip at a distance smaller than your shoulder width.\",\"As you have both arms extended in front of you holding the bar at the chosen grip width, bring your torso back around 30 degrees or so while creating a curvature on your lower back and sticking your chest out. This is your starting position.\",\"Pull your torso up until the bar touches your upper chest by drawing the shoulders and the upper arms down and back. Exhale as you perform this portion of the movement. Tip: Concentrate on squeezing the back muscles once you reach the full contracted position. The upper torso should remain stationary as it moves through space and only the arms should move. The forearms should do no other work other than hold the bar.\",\"After a second on the contracted position, start to inhale and slowly lower your torso back to the starting position when your arms are fully extended and the lats are fully stretched.\",\"Repeat this motion for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Pullups\/0.jpg\",\"Pullups\/1.jpg\"]},{\"name\":\"Chin-Up\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"lats\"],\"secondaryMuscles\":[\"biceps\",\"forearms\",\"middle back\"],\"instructions\":[\"Grab the pull-up bar with the palms facing your torso and a grip closer than the shoulder width.\",\"As you have both arms extended in front of you holding the bar at the chosen grip width, keep your torso as straight as possible while creating a curvature on your lower back and sticking your chest out. This is your starting position. Tip: Keeping the torso as straight as possible maximizes biceps stimulation while minimizing back involvement.\",\"As you breathe out, pull your torso up until your head is around the level of the pull-up bar. Concentrate on using the biceps muscles in order to perform the movement. Keep the elbows close to your body. Tip: The upper torso should remain stationary as it moves through space and only the arms should move. The forearms should do no other work other than hold the bar.\",\"After a second of squeezing the biceps in the contracted position, slowly lower your torso back to the starting position; when your arms are fully extended. Breathe in as you perform this portion of the movement.\",\"Repeat this motion for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Chin-Up\/0.jpg\",\"Chin-Up\/1.jpg\"]},{\"name\":\"Bent Over Barbell Row\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"middle back\"],\"secondaryMuscles\":[\"biceps\",\"lats\",\"shoulders\"],\"instructions\":[\"Holding a barbell with a pronated grip (palms facing down), bend your knees slightly and bring your torso forward, by bending at the waist, while keeping the back straight until it is almost parallel to the floor. Tip: Make sure that you keep the head up. The barbell should hang directly in front of you as your arms hang perpendicular to the floor and your torso. This is your starting position.\",\"Now, while keeping the torso stationary, breathe out and lift the barbell to you. Keep the elbows close to the body and only use the forearms to hold the weight. At the top contracted position, squeeze the back muscles and hold for a brief pause.\",\"Then inhale and slowly lower the barbell back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Bent_Over_Barbell_Row\/0.jpg\",\"Bent_Over_Barbell_Row\/1.jpg\"]},{\"name\":\"Seated Cable Rows\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"cable\",\"primaryMuscles\":[\"middle back\"],\"secondaryMuscles\":[\"biceps\",\"lats\",\"shoulders\"],\"instructions\":[\"For this exercise you will need access to a low pulley row machine with a V-bar. Note: The V-bar will enable you to have a neutral grip where the palms of your hands face each other. To get into the starting position, first sit down on the machine and place your feet on the front platform or crossbar provided making sure that your knees are slightly bent and not locked.\",\"Lean over as you keep the natural alignment of your back and grab the V-bar handles.\",\"With your arms extended pull back until your torso is at a 90-degree angle from your legs. Your back should be slightly arched and your chest should be sticking out. You should be feeling a nice stretch on your lats as you hold the bar in front of you. This is the starting position of the exercise.\",\"Keeping the torso stationary, pull the handles back towards your torso while keeping the arms close to it until you touch the abdominals. Breathe out as you perform that movement. At that point you should be squeezing your back muscles hard. Hold that contraction for a second and slowly go back to the original position while breathing in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Seated_Cable_Rows\/0.jpg\",\"Seated_Cable_Rows\/1.jpg\"]},{\"name\":\"Barbell Deadlift\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"lower back\"],\"secondaryMuscles\":[\"calves\",\"forearms\",\"glutes\",\"hamstrings\",\"lats\",\"middle back\",\"quadriceps\",\"traps\"],\"instructions\":[\"Stand in front of a loaded barbell.\",\"While keeping the back as straight as possible, bend your knees, bend forward and grasp the bar using a medium (shoulder width) overhand grip. This will be the starting position of the exercise. Tip: If it is difficult to hold on to the bar with this grip, alternate your grip or use wrist straps.\",\"While holding the bar, start the lift by pushing with your legs while simultaneously getting your torso to the upright position as you breathe out. In the upright position, stick your chest out and contract the back by bringing the shoulder blades back. Think of how the soldiers in the military look when they are in standing in attention.\",\"Go back to the starting position by bending at the knees while simultaneously leaning the torso forward at the waist while keeping the back straight. When the weights on the bar touch the floor you are back at the starting position and ready to perform another repetition.\",\"Perform the amount of repetitions prescribed in the program.\"],\"category\":\"strength\",\"images\":[\"Barbell_Deadlift\/0.jpg\",\"Barbell_Deadlift\/1.jpg\"]},{\"name\":\"Wide-Grip Lat Pulldown\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"cable\",\"primaryMuscles\":[\"lats\"],\"secondaryMuscles\":[\"biceps\",\"middle back\",\"shoulders\"],\"instructions\":[\"Sit down on a pull-down machine with a wide bar attached to the top pulley. Make sure that you adjust the knee pad of the machine to fit your height. These pads will prevent your body from being raised by the resistance attached to the bar.\",\"Grab the bar with the palms facing forward using the prescribed grip. Note on grips: For a wide grip, your hands need to be spaced out at a distance wider than shoulder width. For a medium grip, your hands need to be spaced out at a distance equal to your shoulder width and for a close grip at a distance smaller than your shoulder width.\",\"As you have both arms extended in front of you holding the bar at the chosen grip width, bring your torso back around 30 degrees or so while creating a curvature on your lower back and sticking your chest out. This is your starting position.\",\"As you breathe out, bring the bar down until it touches your upper chest by drawing the shoulders and the upper arms down and back. Tip: Concentrate on squeezing the back muscles once you reach the full contracted position. The upper torso should remain stationary and only the arms should move. The forearms should do no other work except for holding the bar; therefore do not try to pull down the bar using the forearms.\",\"After a second at the contracted position squeezing your shoulder blades together, slowly raise the bar back to the starting position when your arms are fully extended and the lats are fully stretched. Inhale during this portion of the movement.\",\"Repeat this motion for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Wide-Grip_Lat_Pulldown\/0.jpg\",\"Wide-Grip_Lat_Pulldown\/1.jpg\"]},{\"name\":\"One-Arm Dumbbell Row\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"middle back\"],\"secondaryMuscles\":[\"biceps\",\"lats\",\"shoulders\"],\"instructions\":[\"Choose a flat bench and place a dumbbell on each side of it.\",\"Place the right leg on top of the end of the bench, bend your torso forward from the waist until your upper body is parallel to the floor, and place your right hand on the other end of the bench for support.\",\"Use the left hand to pick up the dumbbell on the floor and hold the weight while keeping your lower back straight. The palm of the hand should be facing your torso. This will be your starting position.\",\"Pull the resistance straight up to the side of your chest, keeping your upper arm close to your side and keeping the torso stationary. Breathe out as you perform this step. Tip: Concentrate on squeezing the back muscles once you reach the full contracted position. Also, make sure that the force is performed with the back muscles and not the arms. Finally, the upper torso should remain stationary and only the arms should move. The forearms should do no other work except for holding the dumbbell; therefore do not try to pull the dumbbell up using the forearms.\",\"Lower the resistance straight down to the starting position. Breathe in as you perform this step.\",\"Repeat the movement for the specified amount of repetitions.\",\"Switch sides and repeat again with the other arm.\"],\"category\":\"strength\",\"images\":[\"One-Arm_Dumbbell_Row\/0.jpg\",\"One-Arm_Dumbbell_Row\/1.jpg\"]},{\"name\":\"Standing Military Press\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"triceps\"],\"instructions\":[\"Start by placing a barbell that is about chest high on a squat rack. Once you have selected the weights, grab the barbell using a pronated (palms facing forward) grip. Make sure to grip the bar wider than shoulder width apart from each other.\",\"Slightly bend the knees and place the barbell on your collar bone. Lift the barbell up keeping it lying on your chest. Take a step back and position your feet shoulder width apart from each other.\",\"Once you pick up the barbell with the correct grip length, lift the bar up over your head by locking your arms. Hold at about shoulder level and slightly in front of your head. This is your starting position.\",\"Lower the bar down to the collarbone slowly as you inhale.\",\"Lift the bar back up to the starting position as you exhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Standing_Military_Press\/0.jpg\",\"Standing_Military_Press\/1.jpg\"]},{\"name\":\"Dumbbell Shoulder Press\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"triceps\"],\"instructions\":[\"While holding a dumbbell in each hand, sit on a military press bench or utility bench that has back support. Place the dumbbells upright on top of your thighs.\",\"Now raise the dumbbells to shoulder height one at a time using your thighs to help propel them up into position.\",\"Make sure to rotate your wrists so that the palms of your hands are facing forward. This is your starting position.\",\"Now, exhale and push the dumbbells upward until they touch at the top.\",\"Then, after a brief pause at the top contracted position, slowly lower the weights back down to the starting position while inhaling.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Shoulder_Press\/0.jpg\",\"Dumbbell_Shoulder_Press\/1.jpg\"]},{\"name\":\"Side Lateral Raise\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[],\"instructions\":[\"Pick a couple of dumbbells and stand with a straight torso and the dumbbells by your side at arms length with the palms of the hand facing you. This will be your starting position.\",\"While maintaining the torso in a stationary position (no swinging), lift the dumbbells to your side with a slight bend on the elbow and the hands slightly tilted forward as if pouring water in a glass. Continue to go up until you arms are parallel to the floor. Exhale as you execute this movement and pause for a second at the top.\",\"Lower the dumbbells back down slowly to the starting position as you inhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Side_Lateral_Raise\/0.jpg\",\"Side_Lateral_Raise\/1.jpg\"]},{\"name\":\"Face Pull\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"cable\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"middle back\"],\"instructions\":[\"Facing a high pulley with a rope or dual handles attached, pull the weight directly towards your face, separating your hands as you do so. Keep your upper arms parallel to the ground.\"],\"category\":\"strength\",\"images\":[\"Face_Pull\/0.jpg\",\"Face_Pull\/1.jpg\"]},{\"name\":\"Front Dumbbell Raise\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[],\"instructions\":[\"Pick a couple of dumbbells and stand with a straight torso and the dumbbells on front of your thighs at arms length with the palms of the hand facing your thighs. This will be your starting position.\",\"While maintaining the torso stationary (no swinging), lift the left dumbbell to the front with a slight bend on the elbow and the palms of the hands always facing down. Continue to go up until you arm is slightly above parallel to the floor. Exhale as you execute this portion of the movement and pause for a second at the top. Inhale after the second pause.\",\"Now lower the dumbbell back down slowly to the starting position as you simultaneously lift the right dumbbell.\",\"Continue alternating in this fashion until all of the recommended amount of repetitions have been performed for each arm.\"],\"category\":\"strength\",\"images\":[\"Front_Dumbbell_Raise\/0.jpg\",\"Front_Dumbbell_Raise\/1.jpg\"]},{\"name\":\"Barbell Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"biceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Stand up with your torso upright while holding a barbell at a shoulder-width grip. The palm of your hands should be facing forward and the elbows should be close to the torso. This will be your starting position.\",\"While holding the upper arms stationary, curl the weights forward while contracting the biceps as you breathe out. Tip: Only the forearms should move.\",\"Continue the movement until your biceps are fully contracted and the bar is at shoulder level. Hold the contracted position for a second and squeeze the biceps hard.\",\"Slowly begin to bring the bar back to starting position as your breathe in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Barbell_Curl\/0.jpg\",\"Barbell_Curl\/1.jpg\"]},{\"name\":\"Alternate Incline Dumbbell Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"biceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Sit down on an incline bench with a dumbbell in each hand being held at arms length. Tip: Keep the elbows close to the torso.This will be your starting position.\",\"While holding the upper arm stationary, curl the right weight forward while contracting the biceps as you breathe out. As you do so, rotate the hand so that the palm is facing up. Continue the movement until your biceps is fully contracted and the dumbbells are at shoulder level. Hold the contracted position for a second as you squeeze the biceps. Tip: Only the forearms should move.\",\"Slowly begin to bring the dumbbell back to starting position as your breathe in.\",\"Repeat the movement with the left hand. This equals one repetition.\",\"Continue alternating in this manner for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Alternate_Incline_Dumbbell_Curl\/0.jpg\",\"Alternate_Incline_Dumbbell_Curl\/1.jpg\"]},{\"name\":\"Alternate Hammer Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"biceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Stand up with your torso upright and a dumbbell in each hand being held at arms length. The elbows should be close to the torso.\",\"The palms of the hands should be facing your torso. This will be your starting position.\",\"While holding the upper arm stationary, curl the right weight forward while contracting the biceps as you breathe out. Continue the movement until your biceps is fully contracted and the dumbbells are at shoulder level. Hold the contracted position for a second as you squeeze the biceps. Tip: Only the forearms should move.\",\"Slowly begin to bring the dumbbells back to starting position as your breathe in.\",\"Repeat the movement with the left hand. This equals one repetition.\",\"Continue alternating in this manner for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Alternate_Hammer_Curl\/0.jpg\",\"Alternate_Hammer_Curl\/1.jpg\"]},{\"name\":\"Bench Dips\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"chest\",\"shoulders\"],\"instructions\":[\"For this exercise you will need to place a bench behind your back. With the bench perpendicular to your body, and while looking away from it, hold on to the bench on its edge with the hands fully extended, separated at shoulder width. The legs will be extended forward, bent at the waist and perpendicular to your torso. This will be your starting position.\",\"Slowly lower your body as you inhale by bending at the elbows until you lower yourself far enough to where there is an angle slightly smaller than 90 degrees between the upper arm and the forearm. Tip: Keep the elbows as close as possible throughout the movement. Forearms should always be pointing down.\",\"Using your triceps to bring your torso up again, lift yourself back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Bench_Dips\/0.jpg\",\"Bench_Dips\/1.jpg\"]},{\"name\":\"EZ-Bar Skullcrusher\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"e-z curl bar\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Using a close grip, lift the EZ bar and hold it with your elbows in as you lie on the bench. Your arms should be perpendicular to the floor. This will be your starting position.\",\"Keeping the upper arms stationary, lower the bar by allowing the elbows to flex. Inhale as you perform this portion of the movement. Pause once the bar is directly above the forehead.\",\"Lift the bar back to the starting position by extending the elbow and exhaling.\",\"Repeat.\"],\"category\":\"strength\",\"images\":[\"EZ-Bar_Skullcrusher\/0.jpg\",\"EZ-Bar_Skullcrusher\/1.jpg\"]},{\"name\":\"Close-Grip Barbell Bench Press\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"chest\",\"shoulders\"],\"instructions\":[\"Lie back on a flat bench. Using a close grip (around shoulder width), lift the bar from the rack and hold it straight over you with your arms locked. This will be your starting position.\",\"As you breathe in, come down slowly until you feel the bar on your middle chest. Tip: Make sure that - as opposed to a regular bench press - you keep the elbows close to the torso at all times in order to maximize triceps involvement.\",\"After a second pause, bring the bar back to the starting position as you breathe out and push the bar using your triceps muscles. Lock your arms in the contracted position, hold for a second and then start coming down slowly again. Tip: It should take at least twice as long to go down than to come up.\",\"Repeat the movement for the prescribed amount of repetitions.\",\"When you are done, place the bar back in the rack.\"],\"category\":\"strength\",\"images\":[\"Close-Grip_Barbell_Bench_Press\/0.jpg\",\"Close-Grip_Barbell_Bench_Press\/1.jpg\"]},{\"name\":\"Dips - Triceps Version\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"chest\",\"shoulders\"],\"instructions\":[\"To get into the starting position, hold your body at arm's length with your arms nearly locked above the bars.\",\"Now, inhale and slowly lower yourself downward. Your torso should remain upright and your elbows should stay close to your body. This helps to better focus on tricep involvement. Lower yourself until there is a 90 degree angle formed between the upper arm and forearm.\",\"Then, exhale and push your torso back up using your triceps to bring your body back to the starting position.\",\"Repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dips_-_Triceps_Version\/0.jpg\",\"Dips_-_Triceps_Version\/1.jpg\"]},{\"name\":\"Barbell Squat\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\",\"lower back\"],\"instructions\":[\"This exercise is best performed inside a squat rack for safety purposes. To begin, first set the bar on a rack to just below shoulder level. Once the correct height is chosen and the bar is loaded, step under the bar and place the back of your shoulders (slightly below the neck) across it.\",\"Hold on to the bar using both arms at each side and lift it off the rack by first pushing with your legs and at the same time straightening your torso.\",\"Step away from the rack and position your legs using a shoulder width medium stance with the toes slightly pointed out. Keep your head up at all times and also maintain a straight back. This will be your starting position. (Note: For the purposes of this discussion we will use the medium stance described above which targets overall development; however you can choose any of the three stances discussed in the foot stances section).\",\"Begin to slowly lower the bar by bending the knees and hips as you maintain a straight posture with the head up. Continue down until the angle between the upper leg and the calves becomes slightly less than 90-degrees. Inhale as you perform this portion of the movement. Tip: If you performed the exercise correctly, the front of the knees should make an imaginary straight line with the toes that is perpendicular to the front. If your knees are past that imaginary line (if they are past your toes) then you are placing undue stress on the knee and the exercise has been performed incorrectly.\",\"Begin to raise the bar as you exhale by pushing the floor with the heel of your foot as you straighten the legs again and go back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Barbell_Squat\/0.jpg\",\"Barbell_Squat\/1.jpg\"]},{\"name\":\"Front Barbell Squat\",\"force\":\"push\",\"level\":\"expert\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\"],\"instructions\":[\"This exercise is best performed inside a squat rack for safety purposes. To begin, first set the bar on a rack that best matches your height. Once the correct height is chosen and the bar is loaded, bring your arms up under the bar while keeping the elbows high and the upper arm slightly above parallel to the floor. Rest the bar on top of the deltoids and cross your arms while grasping the bar for total control.\",\"Lift the bar off the rack by first pushing with your legs and at the same time straightening your torso.\",\"Step away from the rack and position your legs using a shoulder width medium stance with the toes slightly pointed out. Keep your head up at all times as looking down will get you off balance and also maintain a straight back. This will be your starting position. (Note: For the purposes of this discussion we will use the medium stance described above which targets overall development; however you can choose any of the three stances described in the foot positioning section).\",\"Begin to slowly lower the bar by bending the knees as you maintain a straight posture with the head up. Continue down until the angle between the upper leg and the calves becomes slightly less than 90-degrees (which is the point in which the upper legs are below parallel to the floor). Inhale as you perform this portion of the movement. Tip: If you performed the exercise correctly, the front of the knees should make an imaginary straight line with the toes that is perpendicular to the front. If your knees are past that imaginary line (if they are past your toes) then you are placing undue stress on the knee and the exercise has been performed incorrectly.\",\"Begin to raise the bar as you exhale by pushing the floor mainly with the middle of your foot as you straighten the legs again and go back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Front_Barbell_Squat\/0.jpg\",\"Front_Barbell_Squat\/1.jpg\"]},{\"name\":\"Goblet Squat\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"kettlebells\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\",\"shoulders\"],\"instructions\":[\"Stand holding a light kettlebell by the horns close to your chest. This will be your starting position.\",\"Squat down between your legs until your hamstrings are on your calves. Keep your chest and head up and your back straight.\",\"At the bottom position, pause and use your elbows to push your knees out. Return to the starting position, and repeat for 10-20 repetitions.\"],\"category\":\"strength\",\"images\":[\"Goblet_Squat\/0.jpg\",\"Goblet_Squat\/1.jpg\"]},{\"name\":\"Barbell Lunge\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\"],\"instructions\":[\"This exercise is best performed inside a squat rack for safety purposes. To begin, first set the bar on a rack just below shoulder level. Once the correct height is chosen and the bar is loaded, step under the bar and place the back of your shoulders (slightly below the neck) across it.\",\"Hold on to the bar using both arms at each side and lift it off the rack by first pushing with your legs and at the same time straightening your torso.\",\"Step away from the rack and step forward with your right leg and squat down through your hips, while keeping the torso upright and maintaining balance. Inhale as you go down. Note: Do not allow your knee to go forward beyond your toes as you come down, as this will put undue stress on the knee joint. li>\",\"Using mainly the heel of your foot, push up and go back to the starting position as you exhale.\",\"Repeat the movement for the recommended amount of repetitions and then perform with the left leg.\"],\"category\":\"strength\",\"images\":[\"Barbell_Lunge\/0.jpg\",\"Barbell_Lunge\/1.jpg\"]},{\"name\":\"Split Squat with Dumbbells\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"glutes\",\"hamstrings\"],\"instructions\":[\"Position yourself into a staggered stance with the rear foot elevated and front foot forward.\",\"Hold a dumbbell in each hand, letting them hang at the sides. This will be your starting position.\",\"Begin by descending, flexing your knee and hip to lower your body down. Maintain good posture througout the movement. Keep the front knee in line with the foot as you perform the exercise.\",\"At the bottom of the movement, drive through the heel to extend the knee and hip to return to the starting position.\"],\"category\":\"strength\",\"images\":[\"Split_Squat_with_Dumbbells\/0.jpg\",\"Split_Squat_with_Dumbbells\/1.jpg\"]},{\"name\":\"Bodyweight Squat\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"glutes\",\"hamstrings\"],\"instructions\":[\"Stand with your feet shoulder width apart. You can place your hands behind your head. This will be your starting position.\",\"Begin the movement by flexing your knees and hips, sitting back with your hips.\",\"Continue down to full depth if you are able,and quickly reverse the motion until you return to the starting position. As you squat, keep your head and chest up and push your knees out.\"],\"category\":\"strength\",\"images\":[\"Bodyweight_Squat\/0.jpg\",\"Bodyweight_Squat\/1.jpg\"]},{\"name\":\"Romanian Deadlift\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"lower back\"],\"instructions\":[\"Put a barbell in front of you on the ground and grab it using a pronated (palms facing down) grip that a little wider than shoulder width. Tip: Depending on the weight used, you may need wrist wraps to perform the exercise and also a raised platform in order to allow for better range of motion.\",\"Bend the knees slightly and keep the shins vertical, hips back and back straight. This will be your starting position.\",\"Keeping your back and arms completely straight at all times, use your hips to lift the bar as you exhale. Tip: The movement should not be fast but steady and under control.\",\"Once you are standing completely straight up, lower the bar by pushing the hips back, only slightly bending the knees, unlike when squatting. Tip: Take a deep breath at the start of the movement and keep your chest up. Hold your breath as you lower and exhale as you complete the movement.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Romanian_Deadlift\/0.jpg\",\"Romanian_Deadlift\/1.jpg\"]},{\"name\":\"Lying Leg Curls\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"machine\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[],\"instructions\":[\"Adjust the machine lever to fit your height and lie face down on the leg curl machine with the pad of the lever on the back of your legs (just a few inches under the calves). Tip: Preferably use a leg curl machine that is angled as opposed to flat since an angled position is more favorable for hamstrings recruitment.\",\"Keeping the torso flat on the bench, ensure your legs are fully stretched and grab the side handles of the machine. Position your toes straight (or you can also use any of the other two stances described on the foot positioning section). This will be your starting position.\",\"As you exhale, curl your legs up as far as possible without lifting the upper legs from the pad. Once you hit the fully contracted position, hold it for a second.\",\"As you inhale, bring the legs back to the initial position. Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Lying_Leg_Curls\/0.jpg\",\"Lying_Leg_Curls\/1.jpg\"]},{\"name\":\"Barbell Hip Thrust\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"glutes\"],\"secondaryMuscles\":[\"calves\",\"hamstrings\"],\"instructions\":[\"Begin seated on the ground with a bench directly behind you. Have a loaded barbell over your legs. Using a fat bar or having a pad on the bar can greatly reduce the discomfort caused by this exercise.\",\"Roll the bar so that it is directly above your hips, and lean back against the bench so that your shoulder blades are near the top of it.\",\"Begin the movement by driving through your feet, extending your hips vertically through the bar. Your weight should be supported by your shoulder blades and your feet. Extend as far as possible, then reverse the motion to return to the starting position.\"],\"category\":\"powerlifting\",\"images\":[\"Barbell_Hip_Thrust\/0.jpg\",\"Barbell_Hip_Thrust\/1.jpg\"]},{\"name\":\"Barbell Glute Bridge\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"glutes\"],\"secondaryMuscles\":[\"calves\",\"hamstrings\"],\"instructions\":[\"Begin seated on the ground with a loaded barbell over your legs. Using a fat bar or having a pad on the bar can greatly reduce the discomfort caused by this exercise. Roll the bar so that it is directly above your hips, and lay down flat on the floor.\",\"Begin the movement by driving through with your heels, extending your hips vertically through the bar. Your weight should be supported by your upper back and the heels of your feet.\",\"Extend as far as possible, then reverse the motion to return to the starting position.\"],\"category\":\"powerlifting\",\"images\":[\"Barbell_Glute_Bridge\/0.jpg\",\"Barbell_Glute_Bridge\/1.jpg\"]},{\"name\":\"Plank\",\"force\":\"static\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Get into a prone position on the floor, supporting your weight on your toes and your forearms. Your arms are bent and directly below the shoulder.\",\"Keep your body straight at all times, and hold this position as long as possible. To increase difficulty, an arm or leg can be raised.\"],\"category\":\"strength\",\"images\":[\"Plank\/0.jpg\",\"Plank\/1.jpg\"]},{\"name\":\"Hanging Leg Raise\",\"force\":\"pull\",\"level\":\"expert\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Hang from a chin-up bar with both arms extended at arms length in top of you using either a wide grip or a medium grip. The legs should be straight down with the pelvis rolled slightly backwards. This will be your starting position.\",\"Raise your legs until the torso makes a 90-degree angle with the legs. Exhale as you perform this movement and hold the contraction for a second or so.\",\"Go back slowly to the starting position as you breathe in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Hanging_Leg_Raise\/0.jpg\",\"Hanging_Leg_Raise\/1.jpg\"]},{\"name\":\"Cable Crunch\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"cable\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Kneel below a high pulley that contains a rope attachment.\",\"Grasp cable rope attachment and lower the rope until your hands are placed next to your face.\",\"Flex your hips slightly and allow the weight to hyperextend the lower back. This will be your starting position.\",\"With the hips stationary, flex the waist as you contract the abs so that the elbows travel towards the middle of the thighs. Exhale as you perform this portion of the movement and hold the contraction for a second.\",\"Slowly return to the starting position as you inhale. Tip: Make sure that you keep constant tension on the abs throughout the movement. Also, do not choose a weight so heavy that the lower back handles the brunt of the work.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Cable_Crunch\/0.jpg\",\"Cable_Crunch\/1.jpg\"]},{\"name\":\"Decline Crunch\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Secure your legs at the end of the decline bench and lie down.\",\"Now place your hands lightly on either side of your head keeping your elbows in. Tip: Don't lock your fingers behind your head.\",\"While pushing the small of your back down in the bench to better isolate your abdominal muscles, begin to roll your shoulders off it.\",\"Continue to push down as hard as you can with your lower back as you contract your abdominals and exhale. Your shoulders should come up off the bench only about four inches, and your lower back should remain on the bench. At the top of the movement, contract your abdominals hard and keep the contraction for a second. Tip: Focus on slow, controlled movement - don't cheat yourself by using momentum.\",\"After the one second contraction, begin to come down slowly again to the starting position as you inhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Decline_Crunch\/0.jpg\",\"Decline_Crunch\/1.jpg\"]},{\"name\":\"Crunches\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Lie flat on your back with your feet flat on the ground, or resting on a bench with your knees bent at a 90 degree angle. If you are resting your feet on a bench, place them three to four inches apart and point your toes inward so they touch.\",\"Now place your hands lightly on either side of your head keeping your elbows in. Tip: Don't lock your fingers behind your head.\",\"While pushing the small of your back down in the floor to better isolate your abdominal muscles, begin to roll your shoulders off the floor.\",\"Continue to push down as hard as you can with your lower back as you contract your abdominals and exhale. Your shoulders should come up off the floor only about four inches, and your lower back should remain on the floor. At the top of the movement, contract your abdominals hard and keep the contraction for a second. Tip: Focus on slow, controlled movement - don't cheat yourself by using momentum.\",\"After the one second contraction, begin to come down slowly again to the starting position as you inhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Crunches\/0.jpg\",\"Crunches\/1.jpg\"]},{\"name\":\"Standing Calf Raises\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"machine\",\"primaryMuscles\":[\"calves\"],\"secondaryMuscles\":[],\"instructions\":[\"Adjust the padded lever of the calf raise machine to fit your height.\",\"Place your shoulders under the pads provided and position your toes facing forward (or using any of the two other positions described at the beginning of the chapter). The balls of your feet should be secured on top of the calf block with the heels extending off it. Push the lever up by extending your hips and knees until your torso is standing erect. The knees should be kept with a slight bend; never locked. Toes should be facing forward, outwards or inwards as described at the beginning of the chapter. This will be your starting position.\",\"Raise your heels as you breathe out by extending your ankles as high as possible and flexing your calf. Ensure that the knee is kept stationary at all times. There should be no bending at any time. Hold the contracted position by a second before you start to go back down.\",\"Go back slowly to the starting position as you breathe in by lowering your heels as you bend the ankles until calves are stretched.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Standing_Calf_Raises\/0.jpg\",\"Standing_Calf_Raises\/1.jpg\"]},{\"name\":\"Barbell Shrug\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"traps\"],\"secondaryMuscles\":[],\"instructions\":[\"Stand up straight with your feet at shoulder width as you hold a barbell with both hands in front of you using a pronated grip (palms facing the thighs). Tip: Your hands should be a little wider than shoulder width apart. You can use wrist wraps for this exercise for a better grip. This will be your starting position.\",\"Raise your shoulders up as far as you can go as you breathe out and hold the contraction for a second. Tip: Refrain from trying to lift the barbell by using your biceps.\",\"Slowly return to the starting position as you breathe in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Barbell_Shrug\/0.jpg\",\"Barbell_Shrug\/1.jpg\"]},{\"name\":\"Dumbbell Shrug\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"traps\"],\"secondaryMuscles\":[],\"instructions\":[\"Stand erect with a dumbbell on each hand (palms facing your torso), arms extended on the sides.\",\"Lift the dumbbells by elevating the shoulders as high as possible while you exhale. Hold the contraction at the top for a second. Tip: The arms should remain extended at all times. Refrain from using the biceps to help lift the dumbbells. Only the shoulders should be moving up and down.\",\"Lower the dumbbells back to the original position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Shrug\/0.jpg\",\"Dumbbell_Shrug\/1.jpg\"]},{\"name\":\"Cable Wrist Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"cable\",\"primaryMuscles\":[\"forearms\"],\"secondaryMuscles\":[],\"instructions\":[\"Start out by placing a flat bench in front of a low pulley cable that has a straight bar attachment.\",\"Use your arms to grab the cable bar with a narrow to shoulder width supinated grip (palms up) and bring them up so that your forearms are resting against the top of your thighs. Your wrists should be hanging just beyond your knees.\",\"Start out by curling your wrist upwards and exhaling. Keep the contraction for a second.\",\"Slowly lower your wrists back down to the starting position while inhaling.\",\"Your forearms should be stationary as your wrist is the only movement needed to perform this exercise.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Cable_Wrist_Curl\/0.jpg\",\"Cable_Wrist_Curl\/1.jpg\"]},{\"name\":\"Clean and Jerk\",\"force\":\"push\",\"level\":\"expert\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"abdominals\",\"glutes\",\"hamstrings\",\"lower back\",\"quadriceps\",\"traps\",\"triceps\"],\"instructions\":[\"With a barbell on the floor close to the shins, take an overhand or hook grip just outside the legs. Lower your hips with the weight focused on the heels, back straight, head facing forward, chest up, with your shoulders just in front of the bar. This will be your starting position.\",\"Begin the first pull by driving through the heels, extending your knees. Your back angle should stay the same, and your arms should remain straight. Move the weight with control as you continue to above the knees.\",\"Next comes the second pull, the main source of acceleration for the clean. As the bar approaches the mid-thigh position, begin extending through the hips. In a jumping motion, accelerate by extending the hips, knees, and ankles, using speed to move the bar upward. There should be no need to actively pull through the arms to accelerate the weight; at the end of the second pull, the body should be fully extended, leaning slightly back, with the arms still extended.\",\"As full extension is achieved, transition into the third pull by aggressively shrugging and flexing the arms with the elbows up and out. At peak extension, aggressively pull yourself down, rotating your elbows under the bar as you do so. Receive the bar in a front squat position, the depth of which is dependent upon the height of the bar at the end of the third pull. The bar should be racked onto the protracted shoulders, lightly touching the throat with the hands relaxed. Continue to descend to the bottom squat position, which will help in the recovery.\",\"Immediately recover by driving through the heels, keeping the torso upright and elbows up. Continue until you have risen to a standing position.\",\"The second phase is the jerk, which raises the weight overhead. Standing with the weight racked on the front of the shoulders, begin with the dip. With your feet directly under your hips, flex the knees without moving the hips backward. Go down only slightly, and reverse direction as powerfully as possible.\",\"Drive through the heels create as much speed and force as possible, and be sure to move your head out of the way as the bar leaves the shoulders.\",\"At this moment as the feet leave the floor, the feet must be placed into the receiving position as quickly as possible. In the brief moment the feet are not actively driving against the platform, the athletes effort to push the bar up will drive them down. The feet should be split, with one foot forward, and one foot back. Receive the bar with the arms locked out overhead. Return to a standing position.\"],\"category\":\"olympic weightlifting\",\"images\":[\"Clean_and_Jerk\/0.jpg\",\"Clean_and_Jerk\/1.jpg\"]},{\"name\":\"One-Arm Kettlebell Swings\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"kettlebells\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"lower back\",\"shoulders\"],\"instructions\":[],\"category\":\"strength\",\"images\":[\"One-Arm_Kettlebell_Swings\/0.jpg\",\"One-Arm_Kettlebell_Swings\/1.jpg\"]},{\"name\":\"Farmer's Walk\",\"force\":null,\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"forearms\"],\"secondaryMuscles\":[\"abdominals\",\"glutes\",\"hamstrings\",\"lower back\",\"quadriceps\",\"traps\"],\"instructions\":[\"There are various implements that can be used for the farmers walk. These can also be performed with heavy dumbbells or short bars if these implements aren't available. Begin by standing between the implements.\",\"After gripping the handles, lift them up by driving through your heels, keeping your back straight and your head up.\",\"Walk taking short, quick steps, and don't forget to breathe. Move for a given distance, typically 50-100 feet, as fast as possible.\"],\"category\":\"strongman\",\"images\":[\"Farmers_Walk\/0.jpg\",\"Farmers_Walk\/1.jpg\"]},{\"name\":\"Box Jump (Multiple Response)\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"abductors\",\"adductors\",\"calves\",\"glutes\",\"quadriceps\"],\"instructions\":[\"Assume a relaxed stance facing the box or platform approximately an arm's length away. Arms should be down at the sides and legs slightly bent.\",\"Using the arms to aid in the initial burst, jump upward and forward, landing with feet simultaneously on top of the box or platform.\",\"Immediately drop or jump back down to the original starting place; then repeat the sequence.\"],\"category\":\"plyometrics\",\"images\":[\"Box_Jump_Multiple_Response\/0.jpg\",\"Box_Jump_Multiple_Response\/1.jpg\"]},{\"name\":\"Rope Jumping\",\"force\":null,\"level\":\"intermediate\",\"mechanic\":null,\"equipment\":\"other\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"hamstrings\"],\"instructions\":[\"Hold an end of the rope in each hand. Position the rope behind you on the ground. Raise your arms up and turn the rope over your head bringing it down in front of you. When it reaches the ground, jump over it. Find a good turning pace that can be maintained. Different speeds and techniques can be used to introduce variation.\",\"Rope jumping is exciting, challenges your coordination, and requires a lot of energy. A 150 lb person will burn about 350 calories jumping rope for 30 minutes, compared to over 450 calories running.\"],\"category\":\"cardio\",\"images\":[\"Rope_Jumping\/0.jpg\",\"Rope_Jumping\/1.jpg\"]},{\"name\":\"Prowler Sprint\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"calves\",\"chest\",\"glutes\",\"quadriceps\",\"shoulders\"],\"instructions\":[\"Place your sled on an appropriate surface, loaded to a suitable weight. The sled should provide enough resistance to require effort, but not so heavy that you are significantly slowed down.\",\"You may use the upright or the low handles for this exercise. Place your hands on the handles with your arms extended, leaning into the implement.\",\"With good posture, drive through the ground with alternating, short steps. Move as fast as you can for a short distance.\"],\"category\":\"cardio\",\"images\":[\"Prowler_Sprint\/0.jpg\",\"Prowler_Sprint\/1.jpg\"]},{\"name\":\"Hamstring Stretch\",\"force\":\"static\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[],\"instructions\":[\"Lie on your back with one leg extended above you, with the hip at ninety degrees. Keep the other leg flat on the floor.\",\"Loop a belt, band, or rope over the ball of your foot. This will be your starting position.\",\"Pull on the belt to create tension in the calves and hamstrings. Hold this stretch for 10-30 seconds, and repeat with the other leg.\"],\"category\":\"stretching\",\"images\":[\"Hamstring_Stretch\/0.jpg\",\"Hamstring_Stretch\/1.jpg\"]},{\"name\":\"Kneeling Hip Flexor\",\"force\":\"static\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"quadriceps\"],\"instructions\":[\"Kneel on a mat and bring your right knee up so the bottom of your foot is on the floor and extend your left leg out behind you so the top of your foot is on the floor.\",\"Shift your weight forward until you feel a stretch in your hip. Hold for 15 seconds, then repeat for your other side.\"],\"category\":\"stretching\",\"images\":[\"Kneeling_Hip_Flexor\/0.jpg\",\"Kneeling_Hip_Flexor\/1.jpg\"]},{\"name\":\"Shoulder Stretch\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":null,\"equipment\":\"\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[],\"instructions\":[\"Reach your left arm across your body and hold it straight.\"],\"category\":\"stretching\",\"images\":[\"Shoulder_Stretch\/0.jpg\",\"Shoulder_Stretch\/1.jpg\"]}];\n\nlet EXERCISES = [];\nconst IMAGES = new Proxy({}, {\n  get(_, path) {\n    return typeof path === 'string' ? IMAGE_BASE + path : undefined;\n  }\n});\n\nconst FILTERS = [\n  { key: 'primary',   label: 'Muscle' },\n  { key: 'equipment', label: 'Kit' },\n  { key: 'category',  label: 'Type' },\n  { key: 'level',     label: 'Level' }\n];\n\nconst state = {\n  search: '',\n  active: { primary: null, equipment: null, category: null, level: null }\n};\n\n\/\/ -----------------------------------------------------------\n\/\/ Init\n\/\/ -----------------------------------------------------------\nconst grid = document.getElementById('exdir-grid');\nconst empty = document.getElementById('exdir-empty');\nconst searchInput = document.getElementById('exdir-search');\nconst filterGroups = document.getElementById('exdir-filter-groups');\nconst visibleCountEl = document.getElementById('exdir-visible-count');\nconst totalCountEl = document.getElementById('exdir-total-count');\nconst activeSummary = document.getElementById('exdir-active-summary');\nconst clearBtn = document.getElementById('exdir-clear-btn');\nconst emptyClear = document.getElementById('exdir-empty-clear');\nconst modal = document.getElementById('exdir-modal');\nconst modalTitle = document.getElementById('exdir-modal-title');\nconst modalBody = document.getElementById('exdir-modal-body');\nconst modalClose = document.getElementById('exdir-modal-close');\n\n\/\/ Compute options for each filter\nfunction optionsFor(key) {\n  const set = new Set();\n  for (const ex of EXERCISES) {\n    if (key === 'primary') {\n      (ex.primaryMuscles || []).forEach(m => set.add(m));\n    } else if (ex[key]) {\n      set.add(ex[key]);\n    }\n  }\n  return [...set].sort();\n}\n\n\/\/ Render filter chips\nfunction renderFilters() {\n  filterGroups.innerHTML = '';\n  for (const f of FILTERS) {\n    const opts = optionsFor(f.key);\n    if (!opts.length) continue;\n    const wrap = document.createElement('div');\n    wrap.className = 'filter-group';\n    wrap.dataset.key = f.key;\n    wrap.innerHTML = `<h3>${f.label}<\/h3><div class=\"chips\"><\/div>`;\n    const chipsContainer = wrap.querySelector('.chips');\n    for (const opt of opts) {\n      const btn = document.createElement('button');\n      btn.className = 'chip';\n      btn.type = 'button';\n      btn.textContent = opt;\n      btn.dataset.key = f.key;\n      btn.dataset.value = opt;\n      btn.addEventListener('click', () => {\n        state.active[f.key] = state.active[f.key] === opt ? null : opt;\n        update();\n      });\n      chipsContainer.appendChild(btn);\n    }\n    filterGroups.appendChild(wrap);\n  }\n}\n\n\/\/ Filter logic\nfunction matches(ex) {\n  if (state.search) {\n    const q = state.search.toLowerCase();\n    const hay = (ex.name + ' ' + (ex.primaryMuscles || []).join(' ') + ' ' + (ex.equipment || '')).toLowerCase();\n    if (!hay.includes(q)) return false;\n  }\n  for (const key of Object.keys(state.active)) {\n    const val = state.active[key];\n    if (!val) continue;\n    if (key === 'primary') {\n      if (!(ex.primaryMuscles || []).includes(val)) return false;\n    } else {\n      if (ex[key] !== val) return false;\n    }\n  }\n  return true;\n}\n\n\/\/ Render grid\nfunction renderGrid() {\n  const filtered = EXERCISES.filter(matches);\n  visibleCountEl.textContent = filtered.length;\n\n  if (filtered.length === 0) {\n    grid.hidden = true;\n    empty.hidden = false;\n    return;\n  }\n  grid.hidden = false;\n  empty.hidden = true;\n\n  const frag = document.createDocumentFragment();\n  for (const ex of filtered) {\n    const card = document.createElement('button');\n    card.className = 'card';\n    card.type = 'button';\n    card.setAttribute('role', 'listitem');\n    card.addEventListener('click', () => openModal(ex));\n\n    const imgs = (ex.images || []).map(p => IMAGES[p]).filter(Boolean);\n    const [imgA, imgB] = imgs.length >= 2 ? imgs : [imgs[0], imgs[0]];\n\n    const primary = (ex.primaryMuscles || [])[0] || '';\n    const equip = ex.equipment && ex.equipment !== 'body only' ? ex.equipment : (ex.equipment === 'body only' ? 'bodyweight' : '');\n\n    card.innerHTML = `\n      <div class=\"card-img\">\n        ${imgA ? `<img decoding=\"async\" loading=\"lazy\" src=\"${imgA}\" alt=\"\">` : ''}\n        ${imgB ? `<img decoding=\"async\" loading=\"lazy\" class=\"frame-b\" src=\"${imgB}\" alt=\"\">` : ''}\n      <\/div>\n      <div class=\"card-body\">\n        <div class=\"card-name\">${escapeHtml(ex.name)}<\/div>\n        <div class=\"card-tags\">\n          ${primary ? `<span class=\"tag muscle\">${escapeHtml(primary)}<\/span>` : ''}\n          ${equip ? `<span class=\"tag\">${escapeHtml(equip)}<\/span>` : ''}\n        <\/div>\n      <\/div>\n    `;\n    frag.appendChild(card);\n  }\n  grid.innerHTML = '';\n  grid.appendChild(frag);\n}\n\nfunction renderChipStates() {\n  document.querySelectorAll('.chip').forEach(chip => {\n    const key = chip.dataset.key;\n    const val = chip.dataset.value;\n    chip.classList.toggle('active', state.active[key] === val);\n  });\n}\n\nfunction renderSummary() {\n  const parts = [];\n  for (const f of FILTERS) {\n    if (state.active[f.key]) parts.push(state.active[f.key]);\n  }\n  if (state.search) parts.push('\"' + state.search + '\"');\n  const anyActive = parts.length > 0;\n  activeSummary.textContent = anyActive\n    ? 'Filtered: ' + parts.join(' \u00b7 ')\n    : 'Showing all exercises';\n  clearBtn.hidden = !anyActive;\n}\n\nfunction update() {\n  renderChipStates();\n  renderSummary();\n  renderGrid();\n}\n\nfunction clearAll() {\n  state.search = '';\n  searchInput.value = '';\n  for (const key of Object.keys(state.active)) state.active[key] = null;\n  update();\n}\n\n\/\/ Modal\nfunction openModal(ex) {\n  modalTitle.textContent = ex.name;\n  const imgs = (ex.images || []).map(p => IMAGES[p]).filter(Boolean);\n  const [imgA, imgB] = imgs.length >= 2 ? imgs : [imgs[0], imgs[0]];\n\n  const primaryMuscles = (ex.primaryMuscles || []).map(m => `<li class=\"primary\">${escapeHtml(m)}<\/li>`).join('');\n  const secondaryMuscles = (ex.secondaryMuscles || []).map(m => `<li>${escapeHtml(m)}<\/li>`).join('');\n  const allMuscles = primaryMuscles + secondaryMuscles;\n\n  const instructions = (ex.instructions || []).map(i => `<li>${escapeHtml(i)}<\/li>`).join('');\n\n  const meta = [\n    { l: 'Equipment', v: ex.equipment || '\u2014' },\n    { l: 'Category', v: ex.category || '\u2014' },\n    { l: 'Level', v: ex.level || '\u2014' },\n    { l: 'Force', v: ex.force || '\u2014' },\n    { l: 'Mechanic', v: ex.mechanic || '\u2014' }\n  ].map(m => `<div><dt>${m.l}<\/dt><dd>${escapeHtml(String(m.v))}<\/dd><\/div>`).join('');\n\n  modalBody.innerHTML = `\n    <div class=\"modal-media\">\n      ${imgA ? `<img decoding=\"async\" src=\"${imgA}\" alt=\"\">` : ''}\n      ${imgB ? `<img decoding=\"async\" class=\"frame-b\" src=\"${imgB}\" alt=\"\">` : ''}\n    <\/div>\n    <dl class=\"modal-meta\">${meta}<\/dl>\n    ${allMuscles ? `<h3>Muscles worked<\/h3><ul class=\"muscle-list\">${allMuscles}<\/ul>` : ''}\n    ${instructions ? `<h3>Instructions<\/h3><ol>${instructions}<\/ol>` : ''}\n  `;\n\n  modal.hidden = false;\n  requestAnimationFrame(() => modal.classList.add('open'));\n  modal.setAttribute('aria-hidden', 'false');\n  modalClose.focus();\n  document.body.style.overflow = 'hidden';\n}\n\nfunction closeModal() {\n  modal.classList.remove('open');\n  modal.setAttribute('aria-hidden', 'true');\n  document.body.style.overflow = '';\n  setTimeout(() => { modal.hidden = true; }, 150);\n}\n\n\/\/ Utils\nfunction escapeHtml(s) {\n  return String(s).replace(\/[&<>\"']\/g, c => ({\n    '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\n  })[c]);\n}\n\n\/\/ Event handlers\nsearchInput.addEventListener('input', e => {\n  state.search = e.target.value.trim();\n  update();\n});\nclearBtn.addEventListener('click', clearAll);\nemptyClear.addEventListener('click', clearAll);\nmodalClose.addEventListener('click', closeModal);\nmodal.addEventListener('click', e => { if (e.target === modal) closeModal(); });\ndocument.addEventListener('keydown', e => {\n  if (e.key === 'Escape' && !modal.hidden) closeModal();\n});\n\n\/\/ Init: try live fetch first, fall back to inline dataset on any failure.\nasync function init() {\n  activeSummary.textContent = 'Loading exercises\u2026';\n  let source = 'fallback';\n  try {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 6000);\n    const res = await fetch(DATA_URL, { signal: controller.signal });\n    clearTimeout(timeoutId);\n    if (!res.ok) throw new Error('HTTP ' + res.status);\n    const data = await res.json();\n    if (Array.isArray(data) && data.length > 0) {\n      EXERCISES = data;\n      source = 'live';\n    } else {\n      throw new Error('Empty or invalid response');\n    }\n  } catch (err) {\n    console.warn('[Exercise Directory] Live fetch failed, using inline fallback:', err && err.message);\n    EXERCISES = FALLBACK_EXERCISES;\n  }\n  totalCountEl.textContent = EXERCISES.length;\n  renderFilters();\n  update();\n  \/\/ If we fell back, add a small note so the user (and admin) knows\n  if (source === 'fallback') {\n    const note = document.createElement('div');\n    note.style.cssText = 'font-size:12px;color:var(--meta);margin-top:8px;';\n    note.textContent = 'Showing curated set (live source unavailable \u2014 check browser console for details).';\n    activeSummary.parentNode.insertBefore(note, activeSummary.nextSibling);\n  }\n}\ninit();\n\n})();\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><script>\n(function() {<\/p>\n<p>\/\/ Source: Free Exercise DB (public domain \/ Unlicense).\n\/\/ Attempts to fetch the full 800+ dataset from GitHub; falls back to an\n\/\/ inline curated set of ~50 exercises if the fetch is blocked (some\n\/\/ WordPress cache\/security plugins block outbound requests from inline JS).\nconst DATA_URL = 'https:\/\/raw.githubusercontent.com\/yuhonas\/free-exercise-db\/main\/dist\/exercises.json';\nconst IMAGE_BASE = 'https:\/\/raw.githubusercontent.com\/yuhonas\/free-exercise-db\/main\/exercises\/';<\/p>\n<p>const FALLBACK_EXERCISES = [{\"name\":\"Barbell Bench Press - Medium Grip\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie back on a flat bench. Using a medium width grip (a grip that creates a 90-degree angle in the middle of the movement between the forearms and the upper arms), lift the bar from the rack and hold it straight over you with your arms locked. This will be your starting position.\",\"From the starting position, breathe in and begin coming down slowly until the bar touches your middle chest.\",\"After a brief pause, push the bar back to the starting position as you breathe out. Focus on pushing the bar using your chest muscles. Lock your arms and squeeze your chest in the contracted position at the top of the motion, hold for a second and then start coming down slowly again. Tip: Ideally, lowering the weight should take about twice as long as raising it.\",\"Repeat the movement for the prescribed amount of repetitions.\",\"When you are done, place the bar back in the rack.\"],\"category\":\"strength\",\"images\":[\"Barbell_Bench_Press_-_Medium_Grip\/0.jpg\",\"Barbell_Bench_Press_-_Medium_Grip\/1.jpg\"]},{\"name\":\"Dumbbell Bench Press\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie down on a flat bench with a dumbbell in each hand resting on top of your thighs. The palms of your hands will be facing each other.\",\"Then, using your thighs to help raise the dumbbells up, lift the dumbbells one at a time so that you can hold them in front of you at shoulder width.\",\"Once at shoulder width, rotate your wrists forward so that the palms of your hands are facing away from you. The dumbbells should be just to the sides of your chest, with your upper arm and forearm creating a 90 degree angle. Be sure to maintain full control of the dumbbells at all times. This will be your starting position.\",\"Then, as you breathe out, use your chest to push the dumbbells up. Lock your arms at the top of the lift and squeeze your chest, hold for a second and then begin coming down slowly. Tip: Ideally, lowering the weight should take about twice as long as raising it.\",\"Repeat the movement for the prescribed amount of repetitions of your training program.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Bench_Press\/0.jpg\",\"Dumbbell_Bench_Press\/1.jpg\"]},{\"name\":\"Pushups\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie on the floor face down and place your hands about 36 inches apart while holding your torso up at arms length.\",\"Next, lower yourself downward until your chest almost touches the floor as you inhale.\",\"Now breathe out and press your upper body back up to the starting position while squeezing your chest.\",\"After a brief pause at the top contracted position, you can begin to lower yourself downward again for as many repetitions as needed.\"],\"category\":\"strength\",\"images\":[\"Pushups\/0.jpg\",\"Pushups\/1.jpg\"]},{\"name\":\"Cable Crossover\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"cable\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\"],\"instructions\":[\"To get yourself into the starting position, place the pulleys on a high position (above your head), select the resistance to be used and hold the pulleys in each hand.\",\"Step forward in front of an imaginary straight line between both pulleys while pulling your arms together in front of you. Your torso should have a small forward bend from the waist. This will be your starting position.\",\"With a slight bend on your elbows in order to prevent stress at the biceps tendon, extend your arms to the side (straight out at both sides) in a wide arc until you feel a stretch on your chest. Breathe in as you perform this portion of the movement. Tip: Keep in mind that throughout the movement, the arms and torso should remain stationary; the movement should only occur at the shoulder joint.\",\"Return your arms back to the starting position as you breathe out. Make sure to use the same arc of motion used to lower the weights.\",\"Hold for a second at the starting position and repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Cable_Crossover\/0.jpg\",\"Cable_Crossover\/1.jpg\"]},{\"name\":\"Barbell Incline Bench Press - Medium Grip\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"Lie back on an incline bench. Using a medium-width grip (a grip that creates a 90-degree angle in the middle of the movement between the forearms and the upper arms), lift the bar from the rack and hold it straight over you with your arms locked. This will be your starting position.\",\"As you breathe in, come down slowly until you feel the bar on you upper chest.\",\"After a second pause, bring the bar back to the starting position as you breathe out and push the bar using your chest muscles. Lock your arms in the contracted position, squeeze your chest, hold for a second and then start coming down slowly again. Tip: it should take at least twice as long to go down than to come up.\",\"Repeat the movement for the prescribed amount of repetitions.\",\"When you are done, place the bar back in the rack.\"],\"category\":\"strength\",\"images\":[\"Barbell_Incline_Bench_Press_-_Medium_Grip\/0.jpg\",\"Barbell_Incline_Bench_Press_-_Medium_Grip\/1.jpg\"]},{\"name\":\"Dumbbell Flyes\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[],\"instructions\":[\"Lie down on a flat bench with a dumbbell on each hand resting on top of your thighs. The palms of your hand will be facing each other.\",\"Then using your thighs to help raise the dumbbells, lift the dumbbells one at a time so you can hold them in front of you at shoulder width with the palms of your hands facing each other. Raise the dumbbells up like you're pressing them, but stop and hold just before you lock out. This will be your starting position.\",\"With a slight bend on your elbows in order to prevent stress at the biceps tendon, lower your arms out at both sides in a wide arc until you feel a stretch on your chest. Breathe in as you perform this portion of the movement. Tip: Keep in mind that throughout the movement, the arms should remain stationary; the movement should only occur at the shoulder joint.\",\"Return your arms back to the starting position as you squeeze your chest muscles and breathe out. Tip: Make sure to use the same arc of motion used to lower the weights.\",\"Hold for a second at the contracted position and repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Flyes\/0.jpg\",\"Dumbbell_Flyes\/1.jpg\"]},{\"name\":\"Dips - Chest Version\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"chest\"],\"secondaryMuscles\":[\"shoulders\",\"triceps\"],\"instructions\":[\"For this exercise you will need access to parallel bars. To get yourself into the starting position, hold your body at arms length (arms locked) above the bars.\",\"While breathing in, lower yourself slowly with your torso leaning forward around 30 degrees or so and your elbows flared out slightly until you feel a slight stretch in the chest.\",\"Once you feel the stretch, use your chest to bring your body back to the starting position as you breathe out. Tip: Remember to squeeze the chest at the top of the movement for a second.\",\"Repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dips_-_Chest_Version\/0.jpg\",\"Dips_-_Chest_Version\/1.jpg\"]},{\"name\":\"Pullups\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"lats\"],\"secondaryMuscles\":[\"biceps\",\"middle back\"],\"instructions\":[\"Grab the pull-up bar with the palms facing forward using the prescribed grip. Note on grips: For a wide grip, your hands need to be spaced out at a distance wider than your shoulder width. For a medium grip, your hands need to be spaced out at a distance equal to your shoulder width and for a close grip at a distance smaller than your shoulder width.\",\"As you have both arms extended in front of you holding the bar at the chosen grip width, bring your torso back around 30 degrees or so while creating a curvature on your lower back and sticking your chest out. This is your starting position.\",\"Pull your torso up until the bar touches your upper chest by drawing the shoulders and the upper arms down and back. Exhale as you perform this portion of the movement. Tip: Concentrate on squeezing the back muscles once you reach the full contracted position. The upper torso should remain stationary as it moves through space and only the arms should move. The forearms should do no other work other than hold the bar.\",\"After a second on the contracted position, start to inhale and slowly lower your torso back to the starting position when your arms are fully extended and the lats are fully stretched.\",\"Repeat this motion for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Pullups\/0.jpg\",\"Pullups\/1.jpg\"]},{\"name\":\"Chin-Up\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"lats\"],\"secondaryMuscles\":[\"biceps\",\"forearms\",\"middle back\"],\"instructions\":[\"Grab the pull-up bar with the palms facing your torso and a grip closer than the shoulder width.\",\"As you have both arms extended in front of you holding the bar at the chosen grip width, keep your torso as straight as possible while creating a curvature on your lower back and sticking your chest out. This is your starting position. Tip: Keeping the torso as straight as possible maximizes biceps stimulation while minimizing back involvement.\",\"As you breathe out, pull your torso up until your head is around the level of the pull-up bar. Concentrate on using the biceps muscles in order to perform the movement. Keep the elbows close to your body. Tip: The upper torso should remain stationary as it moves through space and only the arms should move. The forearms should do no other work other than hold the bar.\",\"After a second of squeezing the biceps in the contracted position, slowly lower your torso back to the starting position; when your arms are fully extended. Breathe in as you perform this portion of the movement.\",\"Repeat this motion for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Chin-Up\/0.jpg\",\"Chin-Up\/1.jpg\"]},{\"name\":\"Bent Over Barbell Row\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"middle back\"],\"secondaryMuscles\":[\"biceps\",\"lats\",\"shoulders\"],\"instructions\":[\"Holding a barbell with a pronated grip (palms facing down), bend your knees slightly and bring your torso forward, by bending at the waist, while keeping the back straight until it is almost parallel to the floor. Tip: Make sure that you keep the head up. The barbell should hang directly in front of you as your arms hang perpendicular to the floor and your torso. This is your starting position.\",\"Now, while keeping the torso stationary, breathe out and lift the barbell to you. Keep the elbows close to the body and only use the forearms to hold the weight. At the top contracted position, squeeze the back muscles and hold for a brief pause.\",\"Then inhale and slowly lower the barbell back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Bent_Over_Barbell_Row\/0.jpg\",\"Bent_Over_Barbell_Row\/1.jpg\"]},{\"name\":\"Seated Cable Rows\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"cable\",\"primaryMuscles\":[\"middle back\"],\"secondaryMuscles\":[\"biceps\",\"lats\",\"shoulders\"],\"instructions\":[\"For this exercise you will need access to a low pulley row machine with a V-bar. Note: The V-bar will enable you to have a neutral grip where the palms of your hands face each other. To get into the starting position, first sit down on the machine and place your feet on the front platform or crossbar provided making sure that your knees are slightly bent and not locked.\",\"Lean over as you keep the natural alignment of your back and grab the V-bar handles.\",\"With your arms extended pull back until your torso is at a 90-degree angle from your legs. Your back should be slightly arched and your chest should be sticking out. You should be feeling a nice stretch on your lats as you hold the bar in front of you. This is the starting position of the exercise.\",\"Keeping the torso stationary, pull the handles back towards your torso while keeping the arms close to it until you touch the abdominals. Breathe out as you perform that movement. At that point you should be squeezing your back muscles hard. Hold that contraction for a second and slowly go back to the original position while breathing in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Seated_Cable_Rows\/0.jpg\",\"Seated_Cable_Rows\/1.jpg\"]},{\"name\":\"Barbell Deadlift\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"lower back\"],\"secondaryMuscles\":[\"calves\",\"forearms\",\"glutes\",\"hamstrings\",\"lats\",\"middle back\",\"quadriceps\",\"traps\"],\"instructions\":[\"Stand in front of a loaded barbell.\",\"While keeping the back as straight as possible, bend your knees, bend forward and grasp the bar using a medium (shoulder width) overhand grip. This will be the starting position of the exercise. Tip: If it is difficult to hold on to the bar with this grip, alternate your grip or use wrist straps.\",\"While holding the bar, start the lift by pushing with your legs while simultaneously getting your torso to the upright position as you breathe out. In the upright position, stick your chest out and contract the back by bringing the shoulder blades back. Think of how the soldiers in the military look when they are in standing in attention.\",\"Go back to the starting position by bending at the knees while simultaneously leaning the torso forward at the waist while keeping the back straight. When the weights on the bar touch the floor you are back at the starting position and ready to perform another repetition.\",\"Perform the amount of repetitions prescribed in the program.\"],\"category\":\"strength\",\"images\":[\"Barbell_Deadlift\/0.jpg\",\"Barbell_Deadlift\/1.jpg\"]},{\"name\":\"Wide-Grip Lat Pulldown\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"cable\",\"primaryMuscles\":[\"lats\"],\"secondaryMuscles\":[\"biceps\",\"middle back\",\"shoulders\"],\"instructions\":[\"Sit down on a pull-down machine with a wide bar attached to the top pulley. Make sure that you adjust the knee pad of the machine to fit your height. These pads will prevent your body from being raised by the resistance attached to the bar.\",\"Grab the bar with the palms facing forward using the prescribed grip. Note on grips: For a wide grip, your hands need to be spaced out at a distance wider than shoulder width. For a medium grip, your hands need to be spaced out at a distance equal to your shoulder width and for a close grip at a distance smaller than your shoulder width.\",\"As you have both arms extended in front of you holding the bar at the chosen grip width, bring your torso back around 30 degrees or so while creating a curvature on your lower back and sticking your chest out. This is your starting position.\",\"As you breathe out, bring the bar down until it touches your upper chest by drawing the shoulders and the upper arms down and back. Tip: Concentrate on squeezing the back muscles once you reach the full contracted position. The upper torso should remain stationary and only the arms should move. The forearms should do no other work except for holding the bar; therefore do not try to pull down the bar using the forearms.\",\"After a second at the contracted position squeezing your shoulder blades together, slowly raise the bar back to the starting position when your arms are fully extended and the lats are fully stretched. Inhale during this portion of the movement.\",\"Repeat this motion for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Wide-Grip_Lat_Pulldown\/0.jpg\",\"Wide-Grip_Lat_Pulldown\/1.jpg\"]},{\"name\":\"One-Arm Dumbbell Row\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"middle back\"],\"secondaryMuscles\":[\"biceps\",\"lats\",\"shoulders\"],\"instructions\":[\"Choose a flat bench and place a dumbbell on each side of it.\",\"Place the right leg on top of the end of the bench, bend your torso forward from the waist until your upper body is parallel to the floor, and place your right hand on the other end of the bench for support.\",\"Use the left hand to pick up the dumbbell on the floor and hold the weight while keeping your lower back straight. The palm of the hand should be facing your torso. This will be your starting position.\",\"Pull the resistance straight up to the side of your chest, keeping your upper arm close to your side and keeping the torso stationary. Breathe out as you perform this step. Tip: Concentrate on squeezing the back muscles once you reach the full contracted position. Also, make sure that the force is performed with the back muscles and not the arms. Finally, the upper torso should remain stationary and only the arms should move. The forearms should do no other work except for holding the dumbbell; therefore do not try to pull the dumbbell up using the forearms.\",\"Lower the resistance straight down to the starting position. Breathe in as you perform this step.\",\"Repeat the movement for the specified amount of repetitions.\",\"Switch sides and repeat again with the other arm.\"],\"category\":\"strength\",\"images\":[\"One-Arm_Dumbbell_Row\/0.jpg\",\"One-Arm_Dumbbell_Row\/1.jpg\"]},{\"name\":\"Standing Military Press\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"triceps\"],\"instructions\":[\"Start by placing a barbell that is about chest high on a squat rack. Once you have selected the weights, grab the barbell using a pronated (palms facing forward) grip. Make sure to grip the bar wider than shoulder width apart from each other.\",\"Slightly bend the knees and place the barbell on your collar bone. Lift the barbell up keeping it lying on your chest. Take a step back and position your feet shoulder width apart from each other.\",\"Once you pick up the barbell with the correct grip length, lift the bar up over your head by locking your arms. Hold at about shoulder level and slightly in front of your head. This is your starting position.\",\"Lower the bar down to the collarbone slowly as you inhale.\",\"Lift the bar back up to the starting position as you exhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Standing_Military_Press\/0.jpg\",\"Standing_Military_Press\/1.jpg\"]},{\"name\":\"Dumbbell Shoulder Press\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"triceps\"],\"instructions\":[\"While holding a dumbbell in each hand, sit on a military press bench or utility bench that has back support. Place the dumbbells upright on top of your thighs.\",\"Now raise the dumbbells to shoulder height one at a time using your thighs to help propel them up into position.\",\"Make sure to rotate your wrists so that the palms of your hands are facing forward. This is your starting position.\",\"Now, exhale and push the dumbbells upward until they touch at the top.\",\"Then, after a brief pause at the top contracted position, slowly lower the weights back down to the starting position while inhaling.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Shoulder_Press\/0.jpg\",\"Dumbbell_Shoulder_Press\/1.jpg\"]},{\"name\":\"Side Lateral Raise\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[],\"instructions\":[\"Pick a couple of dumbbells and stand with a straight torso and the dumbbells by your side at arms length with the palms of the hand facing you. This will be your starting position.\",\"While maintaining the torso in a stationary position (no swinging), lift the dumbbells to your side with a slight bend on the elbow and the hands slightly tilted forward as if pouring water in a glass. Continue to go up until you arms are parallel to the floor. Exhale as you execute this movement and pause for a second at the top.\",\"Lower the dumbbells back down slowly to the starting position as you inhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Side_Lateral_Raise\/0.jpg\",\"Side_Lateral_Raise\/1.jpg\"]},{\"name\":\"Face Pull\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"cable\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"middle back\"],\"instructions\":[\"Facing a high pulley with a rope or dual handles attached, pull the weight directly towards your face, separating your hands as you do so. Keep your upper arms parallel to the ground.\"],\"category\":\"strength\",\"images\":[\"Face_Pull\/0.jpg\",\"Face_Pull\/1.jpg\"]},{\"name\":\"Front Dumbbell Raise\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[],\"instructions\":[\"Pick a couple of dumbbells and stand with a straight torso and the dumbbells on front of your thighs at arms length with the palms of the hand facing your thighs. This will be your starting position.\",\"While maintaining the torso stationary (no swinging), lift the left dumbbell to the front with a slight bend on the elbow and the palms of the hands always facing down. Continue to go up until you arm is slightly above parallel to the floor. Exhale as you execute this portion of the movement and pause for a second at the top. Inhale after the second pause.\",\"Now lower the dumbbell back down slowly to the starting position as you simultaneously lift the right dumbbell.\",\"Continue alternating in this fashion until all of the recommended amount of repetitions have been performed for each arm.\"],\"category\":\"strength\",\"images\":[\"Front_Dumbbell_Raise\/0.jpg\",\"Front_Dumbbell_Raise\/1.jpg\"]},{\"name\":\"Barbell Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"biceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Stand up with your torso upright while holding a barbell at a shoulder-width grip. The palm of your hands should be facing forward and the elbows should be close to the torso. This will be your starting position.\",\"While holding the upper arms stationary, curl the weights forward while contracting the biceps as you breathe out. Tip: Only the forearms should move.\",\"Continue the movement until your biceps are fully contracted and the bar is at shoulder level. Hold the contracted position for a second and squeeze the biceps hard.\",\"Slowly begin to bring the bar back to starting position as your breathe in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Barbell_Curl\/0.jpg\",\"Barbell_Curl\/1.jpg\"]},{\"name\":\"Alternate Incline Dumbbell Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"biceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Sit down on an incline bench with a dumbbell in each hand being held at arms length. Tip: Keep the elbows close to the torso.This will be your starting position.\",\"While holding the upper arm stationary, curl the right weight forward while contracting the biceps as you breathe out. As you do so, rotate the hand so that the palm is facing up. Continue the movement until your biceps is fully contracted and the dumbbells are at shoulder level. Hold the contracted position for a second as you squeeze the biceps. Tip: Only the forearms should move.\",\"Slowly begin to bring the dumbbell back to starting position as your breathe in.\",\"Repeat the movement with the left hand. This equals one repetition.\",\"Continue alternating in this manner for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Alternate_Incline_Dumbbell_Curl\/0.jpg\",\"Alternate_Incline_Dumbbell_Curl\/1.jpg\"]},{\"name\":\"Alternate Hammer Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"biceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Stand up with your torso upright and a dumbbell in each hand being held at arms length. The elbows should be close to the torso.\",\"The palms of the hands should be facing your torso. This will be your starting position.\",\"While holding the upper arm stationary, curl the right weight forward while contracting the biceps as you breathe out. Continue the movement until your biceps is fully contracted and the dumbbells are at shoulder level. Hold the contracted position for a second as you squeeze the biceps. Tip: Only the forearms should move.\",\"Slowly begin to bring the dumbbells back to starting position as your breathe in.\",\"Repeat the movement with the left hand. This equals one repetition.\",\"Continue alternating in this manner for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Alternate_Hammer_Curl\/0.jpg\",\"Alternate_Hammer_Curl\/1.jpg\"]},{\"name\":\"Bench Dips\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"chest\",\"shoulders\"],\"instructions\":[\"For this exercise you will need to place a bench behind your back. With the bench perpendicular to your body, and while looking away from it, hold on to the bench on its edge with the hands fully extended, separated at shoulder width. The legs will be extended forward, bent at the waist and perpendicular to your torso. This will be your starting position.\",\"Slowly lower your body as you inhale by bending at the elbows until you lower yourself far enough to where there is an angle slightly smaller than 90 degrees between the upper arm and the forearm. Tip: Keep the elbows as close as possible throughout the movement. Forearms should always be pointing down.\",\"Using your triceps to bring your torso up again, lift yourself back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Bench_Dips\/0.jpg\",\"Bench_Dips\/1.jpg\"]},{\"name\":\"EZ-Bar Skullcrusher\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"e-z curl bar\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"forearms\"],\"instructions\":[\"Using a close grip, lift the EZ bar and hold it with your elbows in as you lie on the bench. Your arms should be perpendicular to the floor. This will be your starting position.\",\"Keeping the upper arms stationary, lower the bar by allowing the elbows to flex. Inhale as you perform this portion of the movement. Pause once the bar is directly above the forehead.\",\"Lift the bar back to the starting position by extending the elbow and exhaling.\",\"Repeat.\"],\"category\":\"strength\",\"images\":[\"EZ-Bar_Skullcrusher\/0.jpg\",\"EZ-Bar_Skullcrusher\/1.jpg\"]},{\"name\":\"Close-Grip Barbell Bench Press\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"chest\",\"shoulders\"],\"instructions\":[\"Lie back on a flat bench. Using a close grip (around shoulder width), lift the bar from the rack and hold it straight over you with your arms locked. This will be your starting position.\",\"As you breathe in, come down slowly until you feel the bar on your middle chest. Tip: Make sure that - as opposed to a regular bench press - you keep the elbows close to the torso at all times in order to maximize triceps involvement.\",\"After a second pause, bring the bar back to the starting position as you breathe out and push the bar using your triceps muscles. Lock your arms in the contracted position, hold for a second and then start coming down slowly again. Tip: It should take at least twice as long to go down than to come up.\",\"Repeat the movement for the prescribed amount of repetitions.\",\"When you are done, place the bar back in the rack.\"],\"category\":\"strength\",\"images\":[\"Close-Grip_Barbell_Bench_Press\/0.jpg\",\"Close-Grip_Barbell_Bench_Press\/1.jpg\"]},{\"name\":\"Dips - Triceps Version\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"triceps\"],\"secondaryMuscles\":[\"chest\",\"shoulders\"],\"instructions\":[\"To get into the starting position, hold your body at arm's length with your arms nearly locked above the bars.\",\"Now, inhale and slowly lower yourself downward. Your torso should remain upright and your elbows should stay close to your body. This helps to better focus on tricep involvement. Lower yourself until there is a 90 degree angle formed between the upper arm and forearm.\",\"Then, exhale and push your torso back up using your triceps to bring your body back to the starting position.\",\"Repeat the movement for the prescribed amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dips_-_Triceps_Version\/0.jpg\",\"Dips_-_Triceps_Version\/1.jpg\"]},{\"name\":\"Barbell Squat\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\",\"lower back\"],\"instructions\":[\"This exercise is best performed inside a squat rack for safety purposes. To begin, first set the bar on a rack to just below shoulder level. Once the correct height is chosen and the bar is loaded, step under the bar and place the back of your shoulders (slightly below the neck) across it.\",\"Hold on to the bar using both arms at each side and lift it off the rack by first pushing with your legs and at the same time straightening your torso.\",\"Step away from the rack and position your legs using a shoulder width medium stance with the toes slightly pointed out. Keep your head up at all times and also maintain a straight back. This will be your starting position. (Note: For the purposes of this discussion we will use the medium stance described above which targets overall development; however you can choose any of the three stances discussed in the foot stances section).\",\"Begin to slowly lower the bar by bending the knees and hips as you maintain a straight posture with the head up. Continue down until the angle between the upper leg and the calves becomes slightly less than 90-degrees. Inhale as you perform this portion of the movement. Tip: If you performed the exercise correctly, the front of the knees should make an imaginary straight line with the toes that is perpendicular to the front. If your knees are past that imaginary line (if they are past your toes) then you are placing undue stress on the knee and the exercise has been performed incorrectly.\",\"Begin to raise the bar as you exhale by pushing the floor with the heel of your foot as you straighten the legs again and go back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Barbell_Squat\/0.jpg\",\"Barbell_Squat\/1.jpg\"]},{\"name\":\"Front Barbell Squat\",\"force\":\"push\",\"level\":\"expert\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\"],\"instructions\":[\"This exercise is best performed inside a squat rack for safety purposes. To begin, first set the bar on a rack that best matches your height. Once the correct height is chosen and the bar is loaded, bring your arms up under the bar while keeping the elbows high and the upper arm slightly above parallel to the floor. Rest the bar on top of the deltoids and cross your arms while grasping the bar for total control.\",\"Lift the bar off the rack by first pushing with your legs and at the same time straightening your torso.\",\"Step away from the rack and position your legs using a shoulder width medium stance with the toes slightly pointed out. Keep your head up at all times as looking down will get you off balance and also maintain a straight back. This will be your starting position. (Note: For the purposes of this discussion we will use the medium stance described above which targets overall development; however you can choose any of the three stances described in the foot positioning section).\",\"Begin to slowly lower the bar by bending the knees as you maintain a straight posture with the head up. Continue down until the angle between the upper leg and the calves becomes slightly less than 90-degrees (which is the point in which the upper legs are below parallel to the floor). Inhale as you perform this portion of the movement. Tip: If you performed the exercise correctly, the front of the knees should make an imaginary straight line with the toes that is perpendicular to the front. If your knees are past that imaginary line (if they are past your toes) then you are placing undue stress on the knee and the exercise has been performed incorrectly.\",\"Begin to raise the bar as you exhale by pushing the floor mainly with the middle of your foot as you straighten the legs again and go back to the starting position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Front_Barbell_Squat\/0.jpg\",\"Front_Barbell_Squat\/1.jpg\"]},{\"name\":\"Goblet Squat\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"kettlebells\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\",\"shoulders\"],\"instructions\":[\"Stand holding a light kettlebell by the horns close to your chest. This will be your starting position.\",\"Squat down between your legs until your hamstrings are on your calves. Keep your chest and head up and your back straight.\",\"At the bottom position, pause and use your elbows to push your knees out. Return to the starting position, and repeat for 10-20 repetitions.\"],\"category\":\"strength\",\"images\":[\"Goblet_Squat\/0.jpg\",\"Goblet_Squat\/1.jpg\"]},{\"name\":\"Barbell Lunge\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"hamstrings\"],\"instructions\":[\"This exercise is best performed inside a squat rack for safety purposes. To begin, first set the bar on a rack just below shoulder level. Once the correct height is chosen and the bar is loaded, step under the bar and place the back of your shoulders (slightly below the neck) across it.\",\"Hold on to the bar using both arms at each side and lift it off the rack by first pushing with your legs and at the same time straightening your torso.\",\"Step away from the rack and step forward with your right leg and squat down through your hips, while keeping the torso upright and maintaining balance. Inhale as you go down. Note: Do not allow your knee to go forward beyond your toes as you come down, as this will put undue stress on the knee joint. li>\",\"Using mainly the heel of your foot, push up and go back to the starting position as you exhale.\",\"Repeat the movement for the recommended amount of repetitions and then perform with the left leg.\"],\"category\":\"strength\",\"images\":[\"Barbell_Lunge\/0.jpg\",\"Barbell_Lunge\/1.jpg\"]},{\"name\":\"Split Squat with Dumbbells\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"glutes\",\"hamstrings\"],\"instructions\":[\"Position yourself into a staggered stance with the rear foot elevated and front foot forward.\",\"Hold a dumbbell in each hand, letting them hang at the sides. This will be your starting position.\",\"Begin by descending, flexing your knee and hip to lower your body down. Maintain good posture througout the movement. Keep the front knee in line with the foot as you perform the exercise.\",\"At the bottom of the movement, drive through the heel to extend the knee and hip to return to the starting position.\"],\"category\":\"strength\",\"images\":[\"Split_Squat_with_Dumbbells\/0.jpg\",\"Split_Squat_with_Dumbbells\/1.jpg\"]},{\"name\":\"Bodyweight Squat\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"body only\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"glutes\",\"hamstrings\"],\"instructions\":[\"Stand with your feet shoulder width apart. You can place your hands behind your head. This will be your starting position.\",\"Begin the movement by flexing your knees and hips, sitting back with your hips.\",\"Continue down to full depth if you are able,and quickly reverse the motion until you return to the starting position. As you squat, keep your head and chest up and push your knees out.\"],\"category\":\"strength\",\"images\":[\"Bodyweight_Squat\/0.jpg\",\"Bodyweight_Squat\/1.jpg\"]},{\"name\":\"Romanian Deadlift\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"lower back\"],\"instructions\":[\"Put a barbell in front of you on the ground and grab it using a pronated (palms facing down) grip that a little wider than shoulder width. Tip: Depending on the weight used, you may need wrist wraps to perform the exercise and also a raised platform in order to allow for better range of motion.\",\"Bend the knees slightly and keep the shins vertical, hips back and back straight. This will be your starting position.\",\"Keeping your back and arms completely straight at all times, use your hips to lift the bar as you exhale. Tip: The movement should not be fast but steady and under control.\",\"Once you are standing completely straight up, lower the bar by pushing the hips back, only slightly bending the knees, unlike when squatting. Tip: Take a deep breath at the start of the movement and keep your chest up. Hold your breath as you lower and exhale as you complete the movement.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Romanian_Deadlift\/0.jpg\",\"Romanian_Deadlift\/1.jpg\"]},{\"name\":\"Lying Leg Curls\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"machine\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[],\"instructions\":[\"Adjust the machine lever to fit your height and lie face down on the leg curl machine with the pad of the lever on the back of your legs (just a few inches under the calves). Tip: Preferably use a leg curl machine that is angled as opposed to flat since an angled position is more favorable for hamstrings recruitment.\",\"Keeping the torso flat on the bench, ensure your legs are fully stretched and grab the side handles of the machine. Position your toes straight (or you can also use any of the other two stances described on the foot positioning section). This will be your starting position.\",\"As you exhale, curl your legs up as far as possible without lifting the upper legs from the pad. Once you hit the fully contracted position, hold it for a second.\",\"As you inhale, bring the legs back to the initial position. Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Lying_Leg_Curls\/0.jpg\",\"Lying_Leg_Curls\/1.jpg\"]},{\"name\":\"Barbell Hip Thrust\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"glutes\"],\"secondaryMuscles\":[\"calves\",\"hamstrings\"],\"instructions\":[\"Begin seated on the ground with a bench directly behind you. Have a loaded barbell over your legs. Using a fat bar or having a pad on the bar can greatly reduce the discomfort caused by this exercise.\",\"Roll the bar so that it is directly above your hips, and lean back against the bench so that your shoulder blades are near the top of it.\",\"Begin the movement by driving through your feet, extending your hips vertically through the bar. Your weight should be supported by your shoulder blades and your feet. Extend as far as possible, then reverse the motion to return to the starting position.\"],\"category\":\"powerlifting\",\"images\":[\"Barbell_Hip_Thrust\/0.jpg\",\"Barbell_Hip_Thrust\/1.jpg\"]},{\"name\":\"Barbell Glute Bridge\",\"force\":\"push\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"glutes\"],\"secondaryMuscles\":[\"calves\",\"hamstrings\"],\"instructions\":[\"Begin seated on the ground with a loaded barbell over your legs. Using a fat bar or having a pad on the bar can greatly reduce the discomfort caused by this exercise. Roll the bar so that it is directly above your hips, and lay down flat on the floor.\",\"Begin the movement by driving through with your heels, extending your hips vertically through the bar. Your weight should be supported by your upper back and the heels of your feet.\",\"Extend as far as possible, then reverse the motion to return to the starting position.\"],\"category\":\"powerlifting\",\"images\":[\"Barbell_Glute_Bridge\/0.jpg\",\"Barbell_Glute_Bridge\/1.jpg\"]},{\"name\":\"Plank\",\"force\":\"static\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Get into a prone position on the floor, supporting your weight on your toes and your forearms. Your arms are bent and directly below the shoulder.\",\"Keep your body straight at all times, and hold this position as long as possible. To increase difficulty, an arm or leg can be raised.\"],\"category\":\"strength\",\"images\":[\"Plank\/0.jpg\",\"Plank\/1.jpg\"]},{\"name\":\"Hanging Leg Raise\",\"force\":\"pull\",\"level\":\"expert\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Hang from a chin-up bar with both arms extended at arms length in top of you using either a wide grip or a medium grip. The legs should be straight down with the pelvis rolled slightly backwards. This will be your starting position.\",\"Raise your legs until the torso makes a 90-degree angle with the legs. Exhale as you perform this movement and hold the contraction for a second or so.\",\"Go back slowly to the starting position as you breathe in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Hanging_Leg_Raise\/0.jpg\",\"Hanging_Leg_Raise\/1.jpg\"]},{\"name\":\"Cable Crunch\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"cable\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Kneel below a high pulley that contains a rope attachment.\",\"Grasp cable rope attachment and lower the rope until your hands are placed next to your face.\",\"Flex your hips slightly and allow the weight to hyperextend the lower back. This will be your starting position.\",\"With the hips stationary, flex the waist as you contract the abs so that the elbows travel towards the middle of the thighs. Exhale as you perform this portion of the movement and hold the contraction for a second.\",\"Slowly return to the starting position as you inhale. Tip: Make sure that you keep constant tension on the abs throughout the movement. Also, do not choose a weight so heavy that the lower back handles the brunt of the work.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Cable_Crunch\/0.jpg\",\"Cable_Crunch\/1.jpg\"]},{\"name\":\"Decline Crunch\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Secure your legs at the end of the decline bench and lie down.\",\"Now place your hands lightly on either side of your head keeping your elbows in. Tip: Don't lock your fingers behind your head.\",\"While pushing the small of your back down in the bench to better isolate your abdominal muscles, begin to roll your shoulders off it.\",\"Continue to push down as hard as you can with your lower back as you contract your abdominals and exhale. Your shoulders should come up off the bench only about four inches, and your lower back should remain on the bench. At the top of the movement, contract your abdominals hard and keep the contraction for a second. Tip: Focus on slow, controlled movement - don't cheat yourself by using momentum.\",\"After the one second contraction, begin to come down slowly again to the starting position as you inhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Decline_Crunch\/0.jpg\",\"Decline_Crunch\/1.jpg\"]},{\"name\":\"Crunches\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"body only\",\"primaryMuscles\":[\"abdominals\"],\"secondaryMuscles\":[],\"instructions\":[\"Lie flat on your back with your feet flat on the ground, or resting on a bench with your knees bent at a 90 degree angle. If you are resting your feet on a bench, place them three to four inches apart and point your toes inward so they touch.\",\"Now place your hands lightly on either side of your head keeping your elbows in. Tip: Don't lock your fingers behind your head.\",\"While pushing the small of your back down in the floor to better isolate your abdominal muscles, begin to roll your shoulders off the floor.\",\"Continue to push down as hard as you can with your lower back as you contract your abdominals and exhale. Your shoulders should come up off the floor only about four inches, and your lower back should remain on the floor. At the top of the movement, contract your abdominals hard and keep the contraction for a second. Tip: Focus on slow, controlled movement - don't cheat yourself by using momentum.\",\"After the one second contraction, begin to come down slowly again to the starting position as you inhale.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Crunches\/0.jpg\",\"Crunches\/1.jpg\"]},{\"name\":\"Standing Calf Raises\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"machine\",\"primaryMuscles\":[\"calves\"],\"secondaryMuscles\":[],\"instructions\":[\"Adjust the padded lever of the calf raise machine to fit your height.\",\"Place your shoulders under the pads provided and position your toes facing forward (or using any of the two other positions described at the beginning of the chapter). The balls of your feet should be secured on top of the calf block with the heels extending off it. Push the lever up by extending your hips and knees until your torso is standing erect. The knees should be kept with a slight bend; never locked. Toes should be facing forward, outwards or inwards as described at the beginning of the chapter. This will be your starting position.\",\"Raise your heels as you breathe out by extending your ankles as high as possible and flexing your calf. Ensure that the knee is kept stationary at all times. There should be no bending at any time. Hold the contracted position by a second before you start to go back down.\",\"Go back slowly to the starting position as you breathe in by lowering your heels as you bend the ankles until calves are stretched.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Standing_Calf_Raises\/0.jpg\",\"Standing_Calf_Raises\/1.jpg\"]},{\"name\":\"Barbell Shrug\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"traps\"],\"secondaryMuscles\":[],\"instructions\":[\"Stand up straight with your feet at shoulder width as you hold a barbell with both hands in front of you using a pronated grip (palms facing the thighs). Tip: Your hands should be a little wider than shoulder width apart. You can use wrist wraps for this exercise for a better grip. This will be your starting position.\",\"Raise your shoulders up as far as you can go as you breathe out and hold the contraction for a second. Tip: Refrain from trying to lift the barbell by using your biceps.\",\"Slowly return to the starting position as you breathe in.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Barbell_Shrug\/0.jpg\",\"Barbell_Shrug\/1.jpg\"]},{\"name\":\"Dumbbell Shrug\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"dumbbell\",\"primaryMuscles\":[\"traps\"],\"secondaryMuscles\":[],\"instructions\":[\"Stand erect with a dumbbell on each hand (palms facing your torso), arms extended on the sides.\",\"Lift the dumbbells by elevating the shoulders as high as possible while you exhale. Hold the contraction at the top for a second. Tip: The arms should remain extended at all times. Refrain from using the biceps to help lift the dumbbells. Only the shoulders should be moving up and down.\",\"Lower the dumbbells back to the original position.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Dumbbell_Shrug\/0.jpg\",\"Dumbbell_Shrug\/1.jpg\"]},{\"name\":\"Cable Wrist Curl\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"cable\",\"primaryMuscles\":[\"forearms\"],\"secondaryMuscles\":[],\"instructions\":[\"Start out by placing a flat bench in front of a low pulley cable that has a straight bar attachment.\",\"Use your arms to grab the cable bar with a narrow to shoulder width supinated grip (palms up) and bring them up so that your forearms are resting against the top of your thighs. Your wrists should be hanging just beyond your knees.\",\"Start out by curling your wrist upwards and exhaling. Keep the contraction for a second.\",\"Slowly lower your wrists back down to the starting position while inhaling.\",\"Your forearms should be stationary as your wrist is the only movement needed to perform this exercise.\",\"Repeat for the recommended amount of repetitions.\"],\"category\":\"strength\",\"images\":[\"Cable_Wrist_Curl\/0.jpg\",\"Cable_Wrist_Curl\/1.jpg\"]},{\"name\":\"Clean and Jerk\",\"force\":\"push\",\"level\":\"expert\",\"mechanic\":\"compound\",\"equipment\":\"barbell\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[\"abdominals\",\"glutes\",\"hamstrings\",\"lower back\",\"quadriceps\",\"traps\",\"triceps\"],\"instructions\":[\"With a barbell on the floor close to the shins, take an overhand or hook grip just outside the legs. Lower your hips with the weight focused on the heels, back straight, head facing forward, chest up, with your shoulders just in front of the bar. This will be your starting position.\",\"Begin the first pull by driving through the heels, extending your knees. Your back angle should stay the same, and your arms should remain straight. Move the weight with control as you continue to above the knees.\",\"Next comes the second pull, the main source of acceleration for the clean. As the bar approaches the mid-thigh position, begin extending through the hips. In a jumping motion, accelerate by extending the hips, knees, and ankles, using speed to move the bar upward. There should be no need to actively pull through the arms to accelerate the weight; at the end of the second pull, the body should be fully extended, leaning slightly back, with the arms still extended.\",\"As full extension is achieved, transition into the third pull by aggressively shrugging and flexing the arms with the elbows up and out. At peak extension, aggressively pull yourself down, rotating your elbows under the bar as you do so. Receive the bar in a front squat position, the depth of which is dependent upon the height of the bar at the end of the third pull. The bar should be racked onto the protracted shoulders, lightly touching the throat with the hands relaxed. Continue to descend to the bottom squat position, which will help in the recovery.\",\"Immediately recover by driving through the heels, keeping the torso upright and elbows up. Continue until you have risen to a standing position.\",\"The second phase is the jerk, which raises the weight overhead. Standing with the weight racked on the front of the shoulders, begin with the dip. With your feet directly under your hips, flex the knees without moving the hips backward. Go down only slightly, and reverse direction as powerfully as possible.\",\"Drive through the heels create as much speed and force as possible, and be sure to move your head out of the way as the bar leaves the shoulders.\",\"At this moment as the feet leave the floor, the feet must be placed into the receiving position as quickly as possible. In the brief moment the feet are not actively driving against the platform, the athletes effort to push the bar up will drive them down. The feet should be split, with one foot forward, and one foot back. Receive the bar with the arms locked out overhead. Return to a standing position.\"],\"category\":\"olympic weightlifting\",\"images\":[\"Clean_and_Jerk\/0.jpg\",\"Clean_and_Jerk\/1.jpg\"]},{\"name\":\"One-Arm Kettlebell Swings\",\"force\":\"pull\",\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"kettlebells\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"calves\",\"glutes\",\"lower back\",\"shoulders\"],\"instructions\":[],\"category\":\"strength\",\"images\":[\"One-Arm_Kettlebell_Swings\/0.jpg\",\"One-Arm_Kettlebell_Swings\/1.jpg\"]},{\"name\":\"Farmer's Walk\",\"force\":null,\"level\":\"intermediate\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"forearms\"],\"secondaryMuscles\":[\"abdominals\",\"glutes\",\"hamstrings\",\"lower back\",\"quadriceps\",\"traps\"],\"instructions\":[\"There are various implements that can be used for the farmers walk. These can also be performed with heavy dumbbells or short bars if these implements aren't available. Begin by standing between the implements.\",\"After gripping the handles, lift them up by driving through your heels, keeping your back straight and your head up.\",\"Walk taking short, quick steps, and don't forget to breathe. Move for a given distance, typically 50-100 feet, as fast as possible.\"],\"category\":\"strongman\",\"images\":[\"Farmers_Walk\/0.jpg\",\"Farmers_Walk\/1.jpg\"]},{\"name\":\"Box Jump (Multiple Response)\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"abductors\",\"adductors\",\"calves\",\"glutes\",\"quadriceps\"],\"instructions\":[\"Assume a relaxed stance facing the box or platform approximately an arm's length away. Arms should be down at the sides and legs slightly bent.\",\"Using the arms to aid in the initial burst, jump upward and forward, landing with feet simultaneously on top of the box or platform.\",\"Immediately drop or jump back down to the original starting place; then repeat the sequence.\"],\"category\":\"plyometrics\",\"images\":[\"Box_Jump_Multiple_Response\/0.jpg\",\"Box_Jump_Multiple_Response\/1.jpg\"]},{\"name\":\"Rope Jumping\",\"force\":null,\"level\":\"intermediate\",\"mechanic\":null,\"equipment\":\"other\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"calves\",\"hamstrings\"],\"instructions\":[\"Hold an end of the rope in each hand. Position the rope behind you on the ground. Raise your arms up and turn the rope over your head bringing it down in front of you. When it reaches the ground, jump over it. Find a good turning pace that can be maintained. Different speeds and techniques can be used to introduce variation.\",\"Rope jumping is exciting, challenges your coordination, and requires a lot of energy. A 150 lb person will burn about 350 calories jumping rope for 30 minutes, compared to over 450 calories running.\"],\"category\":\"cardio\",\"images\":[\"Rope_Jumping\/0.jpg\",\"Rope_Jumping\/1.jpg\"]},{\"name\":\"Prowler Sprint\",\"force\":\"push\",\"level\":\"beginner\",\"mechanic\":\"compound\",\"equipment\":\"other\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[\"calves\",\"chest\",\"glutes\",\"quadriceps\",\"shoulders\"],\"instructions\":[\"Place your sled on an appropriate surface, loaded to a suitable weight. The sled should provide enough resistance to require effort, but not so heavy that you are significantly slowed down.\",\"You may use the upright or the low handles for this exercise. Place your hands on the handles with your arms extended, leaning into the implement.\",\"With good posture, drive through the ground with alternating, short steps. Move as fast as you can for a short distance.\"],\"category\":\"cardio\",\"images\":[\"Prowler_Sprint\/0.jpg\",\"Prowler_Sprint\/1.jpg\"]},{\"name\":\"Hamstring Stretch\",\"force\":\"static\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"\",\"primaryMuscles\":[\"hamstrings\"],\"secondaryMuscles\":[],\"instructions\":[\"Lie on your back with one leg extended above you, with the hip at ninety degrees. Keep the other leg flat on the floor.\",\"Loop a belt, band, or rope over the ball of your foot. This will be your starting position.\",\"Pull on the belt to create tension in the calves and hamstrings. Hold this stretch for 10-30 seconds, and repeat with the other leg.\"],\"category\":\"stretching\",\"images\":[\"Hamstring_Stretch\/0.jpg\",\"Hamstring_Stretch\/1.jpg\"]},{\"name\":\"Kneeling Hip Flexor\",\"force\":\"static\",\"level\":\"beginner\",\"mechanic\":\"isolation\",\"equipment\":\"\",\"primaryMuscles\":[\"quadriceps\"],\"secondaryMuscles\":[\"quadriceps\"],\"instructions\":[\"Kneel on a mat and bring your right knee up so the bottom of your foot is on the floor and extend your left leg out behind you so the top of your foot is on the floor.\",\"Shift your weight forward until you feel a stretch in your hip. Hold for 15 seconds, then repeat for your other side.\"],\"category\":\"stretching\",\"images\":[\"Kneeling_Hip_Flexor\/0.jpg\",\"Kneeling_Hip_Flexor\/1.jpg\"]},{\"name\":\"Shoulder Stretch\",\"force\":\"pull\",\"level\":\"beginner\",\"mechanic\":null,\"equipment\":\"\",\"primaryMuscles\":[\"shoulders\"],\"secondaryMuscles\":[],\"instructions\":[\"Reach your left arm across your body and hold it straight.\"],\"category\":\"stretching\",\"images\":[\"Shoulder_Stretch\/0.jpg\",\"Shoulder_Stretch\/1.jpg\"]}];<\/p>\n<p>let EXERCISES = [];\nconst IMAGES = new Proxy({}, {\n  get(_, path) {\n    return typeof path === 'string' ? IMAGE_BASE + path : undefined;\n  }\n});<\/p>\n<p>const FILTERS = [\n  { key: 'primary',   label: 'Muscle' },\n  { key: 'equipment', label: 'Kit' },\n  { key: 'category',  label: 'Type' },\n  { key: 'level',     label: 'Level' }\n];<\/p>\n<p>const state = {\n  search: '',\n  active: { primary: null, equipment: null, category: null, level: null }\n};<\/p>\n<p>\/\/ -----------------------------------------------------------\n\/\/ Init\n\/\/ -----------------------------------------------------------\nconst grid = document.getElementById('exdir-grid');\nconst empty = document.getElementById('exdir-empty');\nconst searchInput = document.getElementById('exdir-search');\nconst filterGroups = document.getElementById('exdir-filter-groups');\nconst visibleCountEl = document.getElementById('exdir-visible-count');\nconst totalCountEl = document.getElementById('exdir-total-count');\nconst activeSummary = document.getElementById('exdir-active-summary');\nconst clearBtn = document.getElementById('exdir-clear-btn');\nconst emptyClear = document.getElementById('exdir-empty-clear');\nconst modal = document.getElementById('exdir-modal');\nconst modalTitle = document.getElementById('exdir-modal-title');\nconst modalBody = document.getElementById('exdir-modal-body');\nconst modalClose = document.getElementById('exdir-modal-close');<\/p>\n<p>\/\/ Compute options for each filter\nfunction optionsFor(key) {\n  const set = new Set();\n  for (const ex of EXERCISES) {\n    if (key === 'primary') {\n      (ex.primaryMuscles || []).forEach(m => set.add(m));\n    } else if (ex[key]) {\n      set.add(ex[key]);\n    }\n  }\n  return [...set].sort();\n}<\/p>\n<p>\/\/ Render filter chips\nfunction renderFilters() {\n  filterGroups.innerHTML = '';\n  for (const f of FILTERS) {\n    const opts = optionsFor(f.key);\n    if (!opts.length) continue;\n    const wrap = document.createElement('div');\n    wrap.className = 'filter-group';\n    wrap.dataset.key = f.key;\n    wrap.innerHTML = `<\/p>\n<h3>${f.label}<\/h3>\n<div class=\"chips\"><\/div>\n<p>`;\n    const chipsContainer = wrap.querySelector('.chips');\n    for (const opt of opts) {\n      const btn = document.createElement('button');\n      btn.className = 'chip';\n      btn.type = 'button';\n      btn.textContent = opt;\n      btn.dataset.key = f.key;\n      btn.dataset.value = opt;\n      btn.addEventListener('click', () => {\n        state.active[f.key] = state.active[f.key] === opt ? null : opt;\n        update();\n      });\n      chipsContainer.appendChild(btn);\n    }\n    filterGroups.appendChild(wrap);\n  }\n}<\/p>\n<p>\/\/ Filter logic\nfunction matches(ex) {\n  if (state.search) {\n    const q = state.search.toLowerCase();\n    const hay = (ex.name + ' ' + (ex.primaryMuscles || []).join(' ') + ' ' + (ex.equipment || '')).toLowerCase();\n    if (!hay.includes(q)) return false;\n  }\n  for (const key of Object.keys(state.active)) {\n    const val = state.active[key];\n    if (!val) continue;\n    if (key === 'primary') {\n      if (!(ex.primaryMuscles || []).includes(val)) return false;\n    } else {\n      if (ex[key] !== val) return false;\n    }\n  }\n  return true;\n}<\/p>\n<p>\/\/ Render grid\nfunction renderGrid() {\n  const filtered = EXERCISES.filter(matches);\n  visibleCountEl.textContent = filtered.length;<\/p>\n<p>  if (filtered.length === 0) {\n    grid.hidden = true;\n    empty.hidden = false;\n    return;\n  }\n  grid.hidden = false;\n  empty.hidden = true;<\/p>\n<p>  const frag = document.createDocumentFragment();\n  for (const ex of filtered) {\n    const card = document.createElement('button');\n    card.className = 'card';\n    card.type = 'button';\n    card.setAttribute('role', 'listitem');\n    card.addEventListener('click', () => openModal(ex));<\/p>\n<p>    const imgs = (ex.images || []).map(p => IMAGES[p]).filter(Boolean);\n    const [imgA, imgB] = imgs.length >= 2 ? imgs : [imgs[0], imgs[0]];<\/p>\n<p>    const primary = (ex.primaryMuscles || [])[0] || '';\n    const equip = ex.equipment && ex.equipment !== 'body only' ? ex.equipment : (ex.equipment === 'body only' ? 'bodyweight' : '');<\/p>\n<p>    card.innerHTML = `<\/p>\n<div class=\"card-img\">\n        ${imgA ? `<img decoding=\"async\" loading=\"lazy\" src=\"${imgA}\" alt=\"\">` : ''}\n        ${imgB ? `<img decoding=\"async\" loading=\"lazy\" class=\"frame-b\" src=\"${imgB}\" alt=\"\">` : ''}\n      <\/div>\n<div class=\"card-body\">\n<div class=\"card-name\">${escapeHtml(ex.name)}<\/div>\n<div class=\"card-tags\">\n          ${primary ? `<span class=\"tag muscle\">${escapeHtml(primary)}<\/span>` : ''}\n          ${equip ? `<span class=\"tag\">${escapeHtml(equip)}<\/span>` : ''}\n        <\/div>\n<\/p><\/div>\n<p>    `;\n    frag.appendChild(card);\n  }\n  grid.innerHTML = '';\n  grid.appendChild(frag);\n}<\/p>\n<p>function renderChipStates() {\n  document.querySelectorAll('.chip').forEach(chip => {\n    const key = chip.dataset.key;\n    const val = chip.dataset.value;\n    chip.classList.toggle('active', state.active[key] === val);\n  });\n}<\/p>\n<p>function renderSummary() {\n  const parts = [];\n  for (const f of FILTERS) {\n    if (state.active[f.key]) parts.push(state.active[f.key]);\n  }\n  if (state.search) parts.push('\"' + state.search + '\"');\n  const anyActive = parts.length > 0;\n  activeSummary.textContent = anyActive\n    ? 'Filtered: ' + parts.join(' \u00b7 ')\n    : 'Showing all exercises';\n  clearBtn.hidden = !anyActive;\n}<\/p>\n<p>function update() {\n  renderChipStates();\n  renderSummary();\n  renderGrid();\n}<\/p>\n<p>function clearAll() {\n  state.search = '';\n  searchInput.value = '';\n  for (const key of Object.keys(state.active)) state.active[key] = null;\n  update();\n}<\/p>\n<p>\/\/ Modal\nfunction openModal(ex) {\n  modalTitle.textContent = ex.name;\n  const imgs = (ex.images || []).map(p => IMAGES[p]).filter(Boolean);\n  const [imgA, imgB] = imgs.length >= 2 ? imgs : [imgs[0], imgs[0]];<\/p>\n<p>  const primaryMuscles = (ex.primaryMuscles || []).map(m => `<\/p>\n<li class=\"primary\">${escapeHtml(m)}<\/li>\n<p>`).join('');\n  const secondaryMuscles = (ex.secondaryMuscles || []).map(m => `<\/p>\n<li>${escapeHtml(m)}<\/li>\n<p>`).join('');\n  const allMuscles = primaryMuscles + secondaryMuscles;<\/p>\n<p>  const instructions = (ex.instructions || []).map(i => `<\/p>\n<li>${escapeHtml(i)}<\/li>\n<p>`).join('');<\/p>\n<p>  const meta = [\n    { l: 'Equipment', v: ex.equipment || '\u2014' },\n    { l: 'Category', v: ex.category || '\u2014' },\n    { l: 'Level', v: ex.level || '\u2014' },\n    { l: 'Force', v: ex.force || '\u2014' },\n    { l: 'Mechanic', v: ex.mechanic || '\u2014' }\n  ].map(m => `<\/p>\n<div>\n<dt>${m.l}<\/dt>\n<dd>${escapeHtml(String(m.v))}<\/dd>\n<\/div>\n<p>`).join('');<\/p>\n<p>  modalBody.innerHTML = `<\/p>\n<div class=\"modal-media\">\n      ${imgA ? `<img decoding=\"async\" src=\"${imgA}\" alt=\"\">` : ''}\n      ${imgB ? `<img decoding=\"async\" class=\"frame-b\" src=\"${imgB}\" alt=\"\">` : ''}\n    <\/div>\n<dl class=\"modal-meta\">${meta}<\/dl>\n<p>    ${allMuscles ? `<\/p>\n<h3>Muscles worked<\/h3>\n<ul class=\"muscle-list\">${allMuscles}<\/ul>\n<p>` : ''}\n    ${instructions ? `<\/p>\n<h3>Instructions<\/h3>\n<ol>${instructions}<\/ol>\n<p>` : ''}\n  `;<\/p>\n<p>  modal.hidden = false;\n  requestAnimationFrame(() => modal.classList.add('open'));\n  modal.setAttribute('aria-hidden', 'false');\n  modalClose.focus();\n  document.body.style.overflow = 'hidden';\n}<\/p>\n<p>function closeModal() {\n  modal.classList.remove('open');\n  modal.setAttribute('aria-hidden', 'true');\n  document.body.style.overflow = '';\n  setTimeout(() => { modal.hidden = true; }, 150);\n}<\/p>\n<p>\/\/ Utils\nfunction escapeHtml(s) {\n  return String(s).replace(\/[&<>\"']\/g, c => ({\n    '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\n  })[c]);\n}<\/p>\n<p>\/\/ Event handlers\nsearchInput.addEventListener('input', e => {\n  state.search = e.target.value.trim();\n  update();\n});\nclearBtn.addEventListener('click', clearAll);\nemptyClear.addEventListener('click', clearAll);\nmodalClose.addEventListener('click', closeModal);\nmodal.addEventListener('click', e => { if (e.target === modal) closeModal(); });\ndocument.addEventListener('keydown', e => {\n  if (e.key === 'Escape' && !modal.hidden) closeModal();\n});<\/p>\n<p>\/\/ Init: try live fetch first, fall back to inline dataset on any failure.\nasync function init() {\n  activeSummary.textContent = 'Loading exercises\u2026';\n  let source = 'fallback';\n  try {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 6000);\n    const res = await fetch(DATA_URL, { signal: controller.signal });\n    clearTimeout(timeoutId);\n    if (!res.ok) throw new Error('HTTP ' + res.status);\n    const data = await res.json();\n    if (Array.isArray(data) && data.length > 0) {\n      EXERCISES = data;\n      source = 'live';\n    } else {\n      throw new Error('Empty or invalid response');\n    }\n  } catch (err) {\n    console.warn('[Exercise Directory] Live fetch failed, using inline fallback:', err && err.message);\n    EXERCISES = FALLBACK_EXERCISES;\n  }\n  totalCountEl.textContent = EXERCISES.length;\n  renderFilters();\n  update();\n  \/\/ If we fell back, add a small note so the user (and admin) knows\n  if (source === 'fallback') {\n    const note = document.createElement('div');\n    note.style.cssText = 'font-size:12px;color:var(--meta);margin-top:8px;';\n    note.textContent = 'Showing curated set (live source unavailable \u2014 check browser console for details).';\n    activeSummary.parentNode.insertBefore(note, activeSummary.nextSibling);\n  }\n}\ninit();<\/p>\n<p>})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Filtra el directorio de ejercicios por grupo muscular, equipo o categor\u00eda. Toca una tarjeta para ver notas de entrenamiento e instrucciones completas. 0 de 0 ejercicios Mostrando todos los ejercicios Borrar filtros No hay ejercicios que coincidan con estos filtros. Borrar filtros Datos: Base de datos de ejercicios gratuita \u2014 dominio p\u00fablico (sin licencia), m\u00e1s de 800 ejercicios. Los fotogramas alternan entre el inicio y el punto m\u00e1ximo de cada repetici\u00f3n.<\/p>","protected":false},"author":41980142,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_wpcom_ai_launchpad_about_page":false,"_wpcom_ai_launchpad_gallery_page":false,"_wpcom_ai_launchpad_contact_page":false,"_wpcom_ai_launchpad_events_page":false,"_wpcom_ai_launchpad_video_page":false,"_wpcom_ai_launchpad_portfolio_piece":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"footnotes":""},"class_list":["post-18133","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gym Exercise Directory - Fitness &amp; MMA Blog - BlackBeltWhiteHat.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blackbeltwhitehat.com\/es\/directorio-de-ejercicios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gym Exercise Directory - Fitness &amp; MMA Blog - BlackBeltWhiteHat.com\" \/>\n<meta property=\"og:description\" content=\"Exercise Directory Filter by muscle group, equipment, or category. Tap a card for coaching notes and full instructions. 0 of 0 exercises Showing all exercises Clear filters No exercises match these filters. Clear filters Data: Free Exercise DB \u2014 public domain (Unlicense), 800+ exercises. Frames alternate between the start and peak of each rep.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blackbeltwhitehat.com\/es\/directorio-de-ejercicios\/\" \/>\n<meta property=\"og:site_name\" content=\"Fitness &amp; MMA Blog - BlackBeltWhiteHat.com\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/BlackBeltWhiteHat\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-19T16:22:05+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@MMATraining1980\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minuto\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Directorio de ejercicios de gimnasio - Blog de fitness y MMA - BlackBeltWhiteHat.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blackbeltwhitehat.com\/es\/directorio-de-ejercicios\/","og_locale":"es_ES","og_type":"article","og_title":"Gym Exercise Directory - Fitness &amp; MMA Blog - BlackBeltWhiteHat.com","og_description":"Exercise Directory Filter by muscle group, equipment, or category. Tap a card for coaching notes and full instructions. 0 of 0 exercises Showing all exercises Clear filters No exercises match these filters. Clear filters Data: Free Exercise DB \u2014 public domain (Unlicense), 800+ exercises. Frames alternate between the start and peak of each rep.","og_url":"https:\/\/blackbeltwhitehat.com\/es\/directorio-de-ejercicios\/","og_site_name":"Fitness &amp; MMA Blog - BlackBeltWhiteHat.com","article_publisher":"https:\/\/www.facebook.com\/BlackBeltWhiteHat\/","article_modified_time":"2026-09-19T16:22:05+00:00","twitter_card":"summary_large_image","twitter_site":"@MMATraining1980","twitter_misc":{"Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blackbeltwhitehat.com\/exercise-directory\/","url":"https:\/\/blackbeltwhitehat.com\/exercise-directory\/","name":"Directorio de ejercicios de gimnasio - Blog de fitness y MMA - BlackBeltWhiteHat.com","isPartOf":{"@id":"https:\/\/blackbeltwhitehat.com\/en\/#website"},"datePublished":"2026-09-16T13:03:35+00:00","dateModified":"2026-09-19T16:22:05+00:00","breadcrumb":{"@id":"https:\/\/blackbeltwhitehat.com\/exercise-directory\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blackbeltwhitehat.com\/exercise-directory\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blackbeltwhitehat.com\/exercise-directory\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blackbeltwhitehat.com\/"},{"@type":"ListItem","position":2,"name":"Gym Exercise Directory"}]},{"@type":"WebSite","@id":"https:\/\/blackbeltwhitehat.com\/en\/#website","url":"https:\/\/blackbeltwhitehat.com\/en\/","name":"Blog de fitness y MMA - BlackBeltWhiteHat.com","description":"Blog de fitness, MMA y nutrici\u00f3n del Reino Unido","publisher":{"@id":"https:\/\/blackbeltwhitehat.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blackbeltwhitehat.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blackbeltwhitehat.com\/en\/#organization","name":"Blog de fitness y MMA - BlackBeltWhiteHat.com","url":"https:\/\/blackbeltwhitehat.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blackbeltwhitehat.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/blackbeltwhitehat.com\/wp-content\/uploads\/2019\/06\/cropped-mmabloglogodis-copy.png","contentUrl":"https:\/\/blackbeltwhitehat.com\/wp-content\/uploads\/2019\/06\/cropped-mmabloglogodis-copy.png","width":352,"height":352,"caption":"Fitness & MMA Blog - BlackBeltWhiteHat.com"},"image":{"@id":"https:\/\/blackbeltwhitehat.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/BlackBeltWhiteHat\/","https:\/\/x.com\/MMATraining1980"]}]}},"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/P2Sx3t-4It","jetpack-related-posts":[{"id":18383,"url":"https:\/\/blackbeltwhitehat.com\/es\/gimnasio-con-estandares-de-fuerza\/","url_meta":{"origin":18133,"position":0},"title":"Est\u00e1ndares de fuerza en el gimnasio","author":"drewjohngriffiths","date":"octubre 22, 2026","format":false,"excerpt":"Strength Standards \u2014 BlackBeltWhiteHat BLACKBELTWHITEHAT Strength Standards Enter a lift and see where you rank \u2014 Beginner to Elite, scaled to your bodyweight. Your lift Sex Male Female Units Kilograms Pounds Exercise Bodyweight (kg) Age (optional) Weight lifted (kg) Reps Result \u2014 Est. 1-rep max\u2014 Bodyweight ratio\u2014 Percent of Elite\u2014\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4539,"url":"https:\/\/blackbeltwhitehat.com\/es\/directorio-de-tecnicas\/llamativo\/gancho\/","url_meta":{"origin":18133,"position":1},"title":"C\u00f3mo lanzar un anzuelo","author":"Dave","date":"mayo 13, 2016","format":false,"excerpt":"C\u00f3mo hacer un gancho en boxeo \ud83e\udd4a (tambi\u00e9n en ruso) https:\/\/youtu.be\/iBaIVVzJBMA El gancho suele ser uno de los golpes m\u00e1s potentes de un boxeador. En guardia ortodoxa (pie izquierdo adelante), el gancho de izquierda es el m\u00e1s utilizado en las combinaciones de boxeo. El gancho de derecha, al ser la mano trasera, suele ser\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"throwing a hook","src":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2018\/08\/discusgif.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":767,"url":"https:\/\/blackbeltwhitehat.com\/es\/articulos-de-mma\/otro\/la-mma-es-una-mala-influencia-en-la-sociedad\/","url_meta":{"origin":18133,"position":2},"title":"MMA: \u00bfuna mala influencia para la sociedad?","author":"Dave","date":"noviembre 16, 2013","format":false,"excerpt":"Si vieras a alguien que conoces vagamente caerse en la calle, golpearse la cabeza y quedar inconsciente, seguro que te preocupar\u00edas bastante... Cualquier persona normal con un m\u00ednimo de humanidad se preocupar\u00eda, \u00bfquiz\u00e1s se sentir\u00eda molesta? Sin embargo, imag\u00ednate tenerlo a tu lado en una jaula...","rel":"","context":"Con 7 comentarios","block_context":{"text":"Con 7 comentarios","link":"https:\/\/blackbeltwhitehat.com\/es\/articulos-de-mma\/otro\/la-mma-es-una-mala-influencia-en-la-sociedad\/#comments"},"img":{"alt_text":"man ko'd","src":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2013\/11\/ko.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1780,"url":"https:\/\/blackbeltwhitehat.com\/es\/articulos-de-mma\/tecnica\/jon-jones-como-vencer-al-campeon-de-la-ufc\/","url_meta":{"origin":18133,"position":3},"title":"Jon Jones \u2013 C\u00f3mo vencer al campe\u00f3n de la UFC","author":"Dave","date":"junio 12, 2014","format":false,"excerpt":"C\u00f3mo vencer a Jon Jones, el campe\u00f3n de la UFC. Esto es una ligera parodia, ya que no tengo ni idea y no estoy seguro de si estas ideas y t\u00e9cnicas funcionar\u00edan, pero aqu\u00ed est\u00e1 la visi\u00f3n de un Wrexham Tapout-Bellend 1. Derribos. Gustafsson, el \u00fanico que ha derribado a Jon Jones, no lo hizo...","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"Jones Jones UFC LHW Champ","src":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2014\/06\/jon-jones_ufc.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2014\/06\/jon-jones_ufc.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2014\/06\/jon-jones_ufc.jpg?resize=525%2C300 1.5x"},"classes":[]},{"id":4689,"url":"https:\/\/blackbeltwhitehat.com\/es\/psicologia\/nervios-previos-a-la-pelea-primera-pelea\/","url_meta":{"origin":18133,"position":4},"title":"Mentalidad del boxeo: \u00bfC\u00f3mo te preparas mentalmente para una pelea?","author":"Dave","date":"mayo 19, 2016","format":false,"excerpt":"Entrenamiento de Psicolog\u00eda del Boxeo - C\u00f3mo Controlar los Nervios Previos al Combate - \u00a1Semanas Antes de la Pelea! Todo boxeador, ya sea principiante o campe\u00f3n mundial, experimenta nervios antes de un combate. Estas sensaciones se deben a la adrenalina, que recorre el cuerpo con diferentes niveles de intensidad. Como\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"conor mcgregor","src":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2015\/12\/conor2.jpeg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":10255,"url":"https:\/\/blackbeltwhitehat.com\/es\/articulos-de-mma\/dieta-para-mma-nutricion-para-mma\/","url_meta":{"origin":18133,"position":5},"title":"MMA Diet &amp; Nutrition [2026] (Plan .pdf. included)","author":"Dave","date":"junio 10, 2019","format":false,"excerpt":"Dieta de Yoel Romero: su dieta sin duda contiene una gran cantidad de prote\u00ednas y grasas saludables. Vea a continuaci\u00f3n algunos ejemplos de planes de dieta. Escrito por Drew Griffiths, nutricionista, licenciado en Ciencias del Deporte y el Ejercicio (con honores de primera clase) y m\u00e1ster en Ejercicio y Nutrici\u00f3n. Drew tiene una licenciatura con honores de primera clase en deporte\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2018\/10\/conorlegs.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2018\/10\/conorlegs.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2018\/10\/conorlegs.jpg?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/blackbeltwhitehat.com\/wp-content\/uploads\/2018\/10\/conorlegs.jpg?resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/pages\/18133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/users\/41980142"}],"replies":[{"embeddable":true,"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/comments?post=18133"}],"version-history":[{"count":7,"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/pages\/18133\/revisions"}],"predecessor-version":[{"id":18146,"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/pages\/18133\/revisions\/18146"}],"wp:attachment":[{"href":"https:\/\/blackbeltwhitehat.com\/es\/wp-json\/wp\/v2\/media?parent=18133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}