Add muscle diagram SVG and updated card template with muscle group visualization

This commit is contained in:
Ash
2026-04-20 16:04:05 +00:00
parent 10046bdb21
commit fe9bfb3920
2 changed files with 487 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.w3.org/namespaces/inkscape"
width="406.99026mm"
height="354.43411mm"
viewBox="0 0 406.99026 354.43411"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="muscles_front_and_back.svg">
<!--
Source: https://commons.wikimedia.org/wiki/File:Muscles_front_and_back.svg
License: CC BY-SA 4.0
Author: Nefronus / Wikimedia Commons
Modified: Simplified for Ash Pages workout cards
-->
<title>Muscle Diagram - Front and Back View</title>
<defs id="defs2">
<style>
.muscle-base { fill: #c4957e; stroke: #8b6f5e; stroke-width: 0.5; }
.muscle-chest { fill: #e57373; }
.muscle-back { fill: #81c784; }
.muscle-shoulders { fill: #64b5f6; }
.muscle-arms { fill: #ffb74d; }
.muscle-core { fill: #a1887f; }
.muscle-legs { fill: #90a4ae; }
.highlight { filter: brightness(1.2); }
</style>
</defs>
<metadata id="metadata5">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:title>Muscle Diagram - Front and Back View</dc:title>
<dc:creator>Nefronus</dc:creator>
<cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/"/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="front-view" transform="translate(0,0)">
<text x="50" y="20" style="font-size:14px;font-weight:bold;fill:#888;">ANTERIOR (Front)</text>
<!-- Chest - Pectorals -->
<g id="muscles-chest" class="muscle-base muscle-chest">
<path d="M 120,80 Q 140,75 160,80 L 165,110 Q 140,120 120,110 Z" id="chest-left"/>
<path d="M 180,80 Q 200,75 220,80 L 215,110 Q 190,120 170,110 Z" id="chest-right"/>
</g>
<!-- Shoulders - Deltoids -->
<g id="muscles-shoulders" class="muscle-base muscle-shoulders">
<circle cx="110" cy="75" r="15" id="shoulder-left"/>
<circle cx="230" cy="75" r="15" id="shoulder-right"/>
</g>
<!-- Arms - Biceps/Triceps -->
<g id="muscles-arms" class="muscle-base muscle-arms">
<ellipse cx="105" cy="120" rx="12" ry="25" id="arm-left"/>
<ellipse cx="235" cy="120" rx="12" ry="25" id="arm-right"/>
</g>
<!-- Core - Abs/Obliques -->
<g id="muscles-core" class="muscle-base muscle-core">
<rect x="140" y="115" width="60" height="50" rx="10" id="abs"/>
</g>
<!-- Legs - Quads -->
<g id="muscles-legs-front" class="muscle-base muscle-legs">
<ellipse cx="150" cy="220" rx="20" ry="35" id="quad-left"/>
<ellipse cx="190" cy="220" rx="20" ry="35" id="quad-right"/>
</g>
</g>
<g id="back-view" transform="translate(220,0)">
<text x="50" y="20" style="font-size:14px;font-weight:bold;fill:#888;">POSTERIOR (Back)</text>
<!-- Back - Lats/Traps -->
<g id="muscles-back" class="muscle-base muscle-back">
<path d="M 130,70 L 170,70 L 180,130 L 120,130 Z" id="lats"/>
<ellipse cx="150" cy="65" rx="25" ry="15" id="traps"/>
</g>
<!-- Shoulders - Rear Delts -->
<g id="muscles-shoulders-back" class="muscle-base muscle-shoulders">
<circle cx="115" cy="75" r="12" id="rear-shoulder-left"/>
<circle cx="225" cy="75" r="12" id="rear-shoulder-right"/>
</g>
<!-- Arms - Triceps -->
<g id="muscles-arms-back" class="muscle-base muscle-arms">
<ellipse cx="108" cy="115" rx="10" ry="22" id="tricep-left"/>
<ellipse cx="232" cy="115" rx="10" ry="22" id="tricep-right"/>
</g>
<!-- Core - Lower Back -->
<g id="muscles-core-back" class="muscle-base muscle-core">
<rect x="145" y="130" width="50" height="30" rx="8" id="lower-back"/>
</g>
<!-- Legs - Hamstrings/Glutes -->
<g id="muscles-legs-back" class="muscle-base muscle-legs">
<ellipse cx="150" cy="210" rx="22" ry="30" id="hamstring-left"/>
<ellipse cx="190" cy="210" rx="22" ry="30" id="hamstring-right"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

+387
View File
@@ -0,0 +1,387 @@
<!DOCTYPE html>
<html lang="en">
<head>
<base href="/ash/">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Workout Card Template — Ash Pages</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #0f0f0f;
color: #e0e0e0;
min-height: 100vh;
display: flex;
justify-content: center;
padding: 40px 20px;
}
.container { max-width: 900px; width: 100%; }
h1 { font-size: 1.8rem; margin-bottom: 4px; color: #f97316; }
.breadcrumb { color: #666; margin-bottom: 24px; font-size: 0.85rem; }
.breadcrumb a { color: #888; text-decoration: none; }
.breadcrumb a:hover { color: #f97316; }
.date-header { color: #888; font-size: 0.9rem; margin-bottom: 16px; }
.day-badge { display: inline-block; background: rgba(249, 115, 22, 0.2); color: #f97316; padding: 4px 12px; border-radius: 16px; font-size: 0.85rem; font-weight: 500; margin-bottom: 24px; }
.section { margin-bottom: 32px; }
h2 { font-size: 1.2rem; color: #f97316; margin-bottom: 16px; }
.table {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
overflow: hidden;
margin-bottom: 16px;
}
.table table { width: 100%; border-collapse: collapse; }
.table th { background: rgba(255,255,255,0.08); padding: 12px 16px; text-align: left; font-weight: 500; font-size: 0.85rem; color: #888; }
.table td { padding: 12px 16px; border-top: 1px solid rgba(255,255,255,0.08); font-size: 0.95rem; }
.exercise-name { font-weight: 500; }
.reps { color: #666; font-size: 0.9rem; }
.weight { color: #666; font-size: 0.9rem; }
.video-link { color: #4a9eff; text-decoration: none; font-size: 0.85rem; }
.video-link:hover { color: #6bb3ff; }
.form-note { color: #666; font-size: 0.85rem; font-style: italic; }
.note { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 12px; padding: 16px; margin-top: 16px; color: #888; font-size: 0.85rem; }
.back-link { display: inline-block; color: #f97316; text-decoration: none; font-size: 0.85rem; margin-top: 32px; }
.back-link:hover { color: #ff8c42; }
/* Muscle Diagram Styles */
.muscle-diagram-container {
display: flex;
gap: 24px;
margin: 20px 0;
flex-wrap: wrap;
}
.muscle-diagram {
flex: 1;
min-width: 200px;
max-width: 300px;
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 16px;
}
.muscle-diagram h3 {
font-size: 0.9rem;
color: #888;
margin-bottom: 12px;
text-align: center;
}
.muscle-diagram svg {
width: 100%;
height: auto;
max-height: 280px;
}
.muscle-legend {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 16px;
padding: 12px;
background: rgba(255,255,255,0.04);
border-radius: 8px;
}
.legend-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 0.8rem;
color: #aaa;
}
.legend-color {
width: 16px;
height: 16px;
border-radius: 4px;
}
.legend-chest { background: #e57373; }
.legend-back { background: #81c784; }
.legend-shoulders { background: #64b5f6; }
.legend-arms { background: #ffb74d; }
.legend-core { background: #a1887f; }
.legend-legs { background: #90a4ae; }
/* Exercise muscle mapping */
.exercise-muscles {
display: flex;
gap: 6px;
flex-wrap: wrap;
margin-top: 6px;
}
.muscle-tag {
font-size: 0.7rem;
padding: 2px 8px;
border-radius: 10px;
font-weight: 500;
}
.muscle-tag.chest { background: rgba(229, 115, 115, 0.2); color: #e57373; }
.muscle-tag.back { background: rgba(129, 199, 132, 0.2); color: #81c784; }
.muscle-tag.shoulders { background: rgba(100, 181, 246, 0.2); color: #64b5f6; }
.muscle-tag.arms { background: rgba(255, 183, 77, 0.2); color: #ffb74d; }
.muscle-tag.core { background: rgba(161, 136, 127, 0.2); color: #a1887f; }
.muscle-tag.legs { background: rgba(144, 164, 174, 0.2); color: #90a4ae; }
@media (min-width: 1200px) {
body { padding: 60px 40px; }
.container { max-width: 1100px; }
h1 { font-size: 2.8rem; }
h2 { font-size: 1.8rem; }
.date-header { font-size: 1.2rem; margin-bottom: 20px; }
.day-badge { font-size: 1.1rem; padding: 6px 18px; margin-bottom: 32px; }
.table th { padding: 16px 24px; font-size: 1.1rem; }
.table td { padding: 16px 24px; font-size: 1.3rem; }
.exercise-name { font-size: 1.4rem; }
.reps { font-size: 1.2rem; }
.weight { font-size: 1.2rem; }
.video-link { font-size: 1.1rem; }
.form-note { font-size: 1.1rem; }
.note { padding: 20px 24px; font-size: 1.1rem; }
.section { margin-bottom: 48px; }
}
@keyframes pulse { 0% { opacity: 0.6; } 50% { opacity: 1; } 100% { opacity: 0.6; } }
.wake-locked { position: fixed; bottom: 20px; right: 20px; background: rgba(249, 115, 22, 0.9); color: white; padding: 8px 16px; border-radius: 20px; font-size: 0.85rem; animation: pulse 2s infinite; display: none; }
</style>
</head>
<body>
<div class="container">
<p class="breadcrumb"><a href="../">Ash Pages</a> / <a href="workout/">Workouts</a> /</p>
<h1>💪 Day A — Template</h1>
<div class="date-header">[Date]</div>
<div class="day-badge">Day A — Upper/Lower Focus</div>
<!-- Muscle Diagram Section -->
<div class="section">
<h2>Target Muscles</h2>
<div class="muscle-diagram-container">
<div class="muscle-diagram">
<h3>ANTERIOR (Front)</h3>
<svg viewBox="0 0 140 280" xmlns="http://www.w3.org/2000/svg">
<!-- Simplified front view body outline -->
<ellipse cx="70" cy="30" rx="20" ry="25" fill="#2a2a2a"/>
<rect x="45" y="55" width="50" height="70" rx="10" fill="#2a2a2a"/>
<rect x="50" y="125" width="40" height="60" rx="8" fill="#2a2a2a"/>
<ellipse cx="55" cy="220" rx="18" ry="40" fill="#2a2a2a"/>
<ellipse cx="85" cy="220" rx="18" ry="40" fill="#2a2a2a"/>
<ellipse cx="35" cy="80" rx="12" ry="30" fill="#2a2a2a"/>
<ellipse cx="105" cy="80" rx="12" ry="30" fill="#2a2a2a"/>
<!-- Chest -->
<g class="muscle-group" data-muscle="chest">
<path d="M 50,60 Q 70,55 90,60 L 92,85 Q 70,92 48,85 Z" fill="#e57373" opacity="0.9"/>
</g>
<!-- Shoulders -->
<g class="muscle-group" data-muscle="shoulders">
<circle cx="35" cy="55" r="12" fill="#64b5f6" opacity="0.9"/>
<circle cx="105" cy="55" r="12" fill="#64b5f6" opacity="0.9"/>
</g>
<!-- Arms -->
<g class="muscle-group" data-muscle="arms">
<ellipse cx="35" cy="95" rx="10" ry="25" fill="#ffb74d" opacity="0.9"/>
<ellipse cx="105" cy="95" rx="10" ry="25" fill="#ffb74d" opacity="0.9"/>
</g>
<!-- Core -->
<g class="muscle-group" data-muscle="core">
<rect x="55" y="125" width="30" height="45" rx="8" fill="#a1887f" opacity="0.9"/>
</g>
<!-- Legs (Quads) -->
<g class="muscle-group" data-muscle="legs">
<ellipse cx="55" cy="215" rx="16" ry="35" fill="#90a4ae" opacity="0.9"/>
<ellipse cx="85" cy="215" rx="16" ry="35" fill="#90a4ae" opacity="0.9"/>
</g>
</svg>
</div>
<div class="muscle-diagram">
<h3>POSTERIOR (Back)</h3>
<svg viewBox="0 0 140 280" xmlns="http://www.w3.org/2000/svg">
<!-- Simplified back view body outline -->
<ellipse cx="70" cy="30" rx="20" ry="25" fill="#2a2a2a"/>
<rect x="45" y="55" width="50" height="70" rx="10" fill="#2a2a2a"/>
<rect x="50" y="125" width="40" height="60" rx="8" fill="#2a2a2a"/>
<ellipse cx="55" cy="220" rx="18" ry="40" fill="#2a2a2a"/>
<ellipse cx="85" cy="220" rx="18" ry="40" fill="#2a2a2a"/>
<ellipse cx="35" cy="80" rx="12" ry="30" fill="#2a2a2a"/>
<ellipse cx="105" cy="80" rx="12" ry="30" fill="#2a2a2a"/>
<!-- Back (Lats/Traps) -->
<g class="muscle-group" data-muscle="back">
<path d="M 50,60 L 90,60 L 95,110 L 45,110 Z" fill="#81c784" opacity="0.9"/>
<ellipse cx="70" cy="50" rx="20" ry="12" fill="#81c784" opacity="0.8"/>
</g>
<!-- Shoulders (Rear Delts) -->
<g class="muscle-group" data-muscle="shoulders">
<circle cx="38" cy="58" r="10" fill="#64b5f6" opacity="0.9"/>
<circle cx="102" cy="58" r="10" fill="#64b5f6" opacity="0.9"/>
</g>
<!-- Arms (Triceps) -->
<g class="muscle-group" data-muscle="arms">
<ellipse cx="38" cy="92" rx="9" ry="22" fill="#ffb74d" opacity="0.9"/>
<ellipse cx="102" cy="92" rx="9" ry="22" fill="#ffb74d" opacity="0.9"/>
</g>
<!-- Core (Lower Back) -->
<g class="muscle-group" data-muscle="core">
<rect x="58" y="128" width="24" height="25" rx="6" fill="#a1887f" opacity="0.9"/>
</g>
<!-- Legs (Hamstrings) -->
<g class="muscle-group" data-muscle="legs">
<ellipse cx="55" cy="210" rx="15" ry="32" fill="#90a4ae" opacity="0.9"/>
<ellipse cx="85" cy="210" rx="15" ry="32" fill="#90a4ae" opacity="0.9"/>
</g>
</svg>
</div>
</div>
<div class="muscle-legend">
<div class="legend-item"><div class="legend-color legend-chest"></div>Chest</div>
<div class="legend-item"><div class="legend-color legend-back"></div>Back</div>
<div class="legend-item"><div class="legend-color legend-shoulders"></div>Shoulders</div>
<div class="legend-item"><div class="legend-color legend-arms"></div>Arms</div>
<div class="legend-item"><div class="legend-color legend-core"></div>Core</div>
<div class="legend-item"><div class="legend-color legend-legs"></div>Legs</div>
</div>
</div>
<div class="section">
<h2>Warmup</h2>
<div class="note">5 min treadmill walk + arm circles + hip circles</div>
</div>
<div class="section">
<h2>Main Workout</h2>
<div class="table">
<table>
<thead><tr><th>#</th><th>Exercise</th><th>Reps</th><th>Weight</th><th>Muscles</th><th>Form Video</th></tr></thead>
<tbody>
<tr>
<td>1</td>
<td class="exercise-name">KB Swings (two-arm)</td>
<td class="reps">10</td>
<td class="weight">20 lb KB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag legs">Legs</span>
<span class="muscle-tag core">Core</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=bDCeXbMJVNs" target="_blank">Video</a></td>
</tr>
<tr>
<td>2</td>
<td class="exercise-name">Bench DB Press</td>
<td class="reps">15</td>
<td class="weight">10 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag chest">Chest</span>
<span class="muscle-tag shoulders">Shoulders</span>
<span class="muscle-tag arms">Arms</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=FSYrZjBikqs" target="_blank">Video</a></td>
</tr>
<tr>
<td>3</td>
<td class="exercise-name">Goblet Squats</td>
<td class="reps">15</td>
<td class="weight">20 lb KB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag legs">Legs</span>
<span class="muscle-tag core">Core</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=aNDUbH_Uv4g" target="_blank">Video</a></td>
</tr>
<tr>
<td>4</td>
<td class="exercise-name">Overhead DB Press</td>
<td class="reps">10</td>
<td class="weight">10 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag shoulders">Shoulders</span>
<span class="muscle-tag arms">Arms</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=M2rwvNhTOu0" target="_blank">Video</a></td>
</tr>
<tr>
<td>5</td>
<td class="exercise-name">One-arm Rows</td>
<td class="reps">10/side</td>
<td class="weight">12 lb</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag back">Back</span>
<span class="muscle-tag arms">Arms</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=KRN38chlkds" target="_blank">Video</a></td>
</tr>
<tr>
<td>6</td>
<td class="exercise-name">DB Lunges</td>
<td class="reps">6/leg</td>
<td class="weight">10 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag legs">Legs</span>
</div>
</td>
<td class="form-note">bodyweight to start, add DBs week 2+</td>
</tr>
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 3 rounds, 60-90s rest between rounds</div>
</div>
<div class="section">
<h2>Core Finisher</h2>
<div class="table">
<table>
<thead><tr><th>#</th><th>Exercise</th><th>Reps/Time</th><th>Weight</th><th>Muscles</th><th>Form Video</th></tr></thead>
<tbody>
<tr>
<td>1</td>
<td class="exercise-name">Dead Bugs</td>
<td class="reps">10/side</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag core">Core</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=g_BYB0R-4Ws" target="_blank">Video</a></td>
</tr>
<tr>
<td>2</td>
<td class="exercise-name">Russian Twists</td>
<td class="reps">20 total</td>
<td class="weight">10 lb DB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag core">Core</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=8ZLc_7ckCqU" target="_blank">Video</a></td>
</tr>
<tr>
<td>3</td>
<td class="exercise-name">Plank</td>
<td class="reps">30-60s</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag core">Core</span>
</div>
</td>
<td><a class="video-link" href="https://www.youtube.com/watch?v=pSHjTRCQxIw" target="_blank">Video</a></td>
</tr>
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 2-3 rounds, minimal rest</div>
</div>
<a href="index.html" class="back-link">← Back to all workouts</a>
</div>
</body>
</html>