fixed sidebar layout: diagrams always visible, exercise names link to videos, smaller text

This commit is contained in:
Ash
2026-04-22 16:08:19 +00:00
parent b7257c38a8
commit 91edd825db
2 changed files with 483 additions and 454 deletions
+303 -309
View File
@@ -7,65 +7,73 @@
<title>Workout: Day B — 2026-04-22</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
html, 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;
height: 100%;
overflow: hidden;
}
.container { max-width: 1200px; width: 100%; }
h1 { font-size: 1.8rem; margin-bottom: 4px; color: #f97316; }
.breadcrumb { color: #666; margin-bottom: 24px; font-size: 0.85rem; }
.page {
display: flex;
flex-direction: column;
height: 100vh;
max-width: 100%;
}
/* Header */
.header {
padding: 16px 24px 8px;
flex-shrink: 0;
}
.breadcrumb { color: #666; font-size: 0.8rem; margin-bottom: 8px; }
.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; }
h1 { font-size: 1.6rem; color: #f97316; margin-bottom: 2px; }
.date-header { color: #888; font-size: 0.85rem; margin-bottom: 6px; }
.day-badge { display: inline-block; background: rgba(249, 115, 22, 0.2); color: #f97316; padding: 3px 10px; border-radius: 12px; font-size: 0.8rem; font-weight: 500; }
/* Main content area */
.main {
display: flex;
flex: 1;
overflow: hidden;
gap: 24px;
padding: 0 24px 16px;
}
/* Workout column */
.workout-column {
flex: 1;
overflow-y: auto;
min-width: 0;
}
.section { margin-bottom: 20px; }
h2 { font-size: 1rem; color: #f97316; margin-bottom: 10px; font-weight: 600; }
.table {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
border-radius: 10px;
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; color: #e0e0e0; }
.table th { background: rgba(255,255,255,0.06); padding: 8px 12px; text-align: left; font-weight: 500; font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.5px; }
.table td { padding: 10px 12px; border-top: 1px solid rgba(255,255,255,0.06); font-size: 0.9rem; color: #e0e0e0; vertical-align: top; }
.exercise-name { font-weight: 500; }
.reps { font-size: 0.9rem; color: #e0e0e0; }
.weight { font-size: 0.9rem; color: #e0e0e0; }
.video-link { color: #4a9eff; text-decoration: none; font-size: 0.85rem; }
.video-link:hover { color: #6bb3ff; }
.form-note { color: #888; 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; }
.exercise-name a { color: #e0e0e0; text-decoration: none; }
.exercise-name a:hover { color: #4a9eff; }
.reps { color: #e0e0e0; font-size: 0.85rem; }
.weight { color: #e0e0e0; font-size: 0.85rem; }
.form-note { color: #888; font-size: 0.8rem; font-style: italic; }
.note { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; padding: 12px; margin-top: 12px; color: #888; font-size: 0.8rem; }
.back-link { display: inline-block; color: #f97316; text-decoration: none; font-size: 0.8rem; margin-top: 16px; margin-bottom: 24px; }
.back-link:hover { color: #ff8c42; }
/* Anatomy Section */
.anatomy-section {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 16px;
margin-bottom: 24px;
}
.anatomy-header { margin-bottom: 12px; }
.anatomy-title { font-size: 1rem; color: #f97316; font-weight: 600; }
.anatomy-diagrams { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: start; }
.diagram-container { background: #ffffff; border-radius: 8px; padding: 8px; text-align: center; border: 2px solid transparent; transition: all 0.3s ease; }
.diagram-container h3 { font-size: 0.75rem; color: #888; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px; }
.diagram-container img { width: auto; max-width: 100%; height: auto; max-height: 550px; object-fit: contain; display: block; margin: 0 auto; }
.diagram-container.highlighted { box-shadow: 0 0 25px rgba(249, 115, 22, 0.6); border-color: rgba(249, 115, 22, 0.8); transform: scale(1.02); }
/* Muscle tags */
.exercise-muscles { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.muscle-tag { font-size: 0.7rem; padding: 3px 10px; border-radius: 12px; font-weight: 500; cursor: pointer; transition: all 0.2s; border: 2px solid transparent; user-select: none; }
.exercise-muscles { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 4px; }
.muscle-tag { font-size: 0.65rem; padding: 2px 8px; border-radius: 10px; font-weight: 500; cursor: pointer; transition: all 0.2s; border: 2px solid transparent; user-select: none; }
.muscle-tag:hover { transform: scale(1.08); filter: brightness(1.2); }
.muscle-tag.active { border-color: currentColor; box-shadow: 0 0 12px currentColor; transform: scale(1.1); }
.muscle-tag.active { border-color: currentColor; box-shadow: 0 0 10px currentColor; transform: scale(1.1); }
.muscle-tag.deltoid { background: rgba(100, 181, 246, 0.25); color: #64b5f6; }
.muscle-tag.pectoralis { background: rgba(229, 115, 115, 0.25); color: #e57373; }
.muscle-tag.trapezius { background: rgba(129, 199, 132, 0.25); color: #81c784; }
@@ -85,290 +93,262 @@
.muscle-tag.shoulders { background: rgba(100, 181, 246, 0.25); color: #64b5f6; }
.muscle-tag.forearms { background: rgba(255, 183, 77, 0.25); color: #ffb74d; }
@media (max-width: 768px) {
.anatomy-diagrams { grid-template-columns: 1fr; }
/* Anatomy sidebar */
.anatomy-column {
width: 380px;
flex-shrink: 0;
display: flex;
flex-direction: column;
}
.anatomy-section {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 10px;
padding: 12px;
flex: 1;
display: flex;
flex-direction: column;
}
.anatomy-header { margin-bottom: 10px; flex-shrink: 0; }
.anatomy-title { font-size: 0.85rem; color: #f97316; font-weight: 600; }
.anatomy-diagrams {
flex: 1;
display: flex;
flex-direction: column;
gap: 10px;
overflow: hidden;
}
.diagram-container {
background: #ffffff;
border-radius: 8px;
padding: 8px;
text-align: center;
border: 2px solid transparent;
transition: all 0.3s ease;
flex: 1;
display: flex;
flex-direction: column;
min-height: 0;
}
.diagram-container h3 { font-size: 0.7rem; color: #888; margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.5px; flex-shrink: 0; }
.diagram-container img {
flex: 1;
width: auto;
max-width: 100%;
height: auto;
max-height: 100%;
object-fit: contain;
display: block;
margin: 0 auto;
}
.diagram-container.highlighted { box-shadow: 0 0 25px rgba(249, 115, 22, 0.6); border-color: rgba(249, 115, 22, 0.8); transform: scale(1.01); }
/* Mobile: hide sidebar, stack normally */
@media (max-width: 1100px) {
html, body { height: auto; overflow: auto; }
.page { height: auto; }
.main { flex-direction: column; padding: 0 16px 16px; }
.anatomy-column { display: none; }
.header { padding: 16px 16px 8px; }
}
/* === WIDESCREEN: side-by-side layout === */
@media (min-width: 1400px) {
.container {
max-width: 100%;
display: grid;
grid-template-columns: 1.5fr 1fr;
grid-template-rows: auto auto auto 1fr auto;
gap: 40px;
align-items: start;
}
.breadcrumb { grid-column: 1 / -1; }
h1 { grid-column: 1 / -1; }
.date-header { grid-column: 1 / -1; }
.day-badge { grid-column: 1 / -1; }
.workout-column {
grid-column: 1;
grid-row: 4;
overflow-y: auto;
max-height: calc(100vh - 200px);
}
.anatomy-column {
grid-column: 2;
grid-row: 4;
position: sticky;
top: 40px;
}
.back-link { grid-column: 1 / -1; }
.anatomy-diagrams { grid-template-columns: 1fr; gap: 16px; }
.diagram-container img { max-height: 38vh; }
}
/* === TABLET / SMALL DESKTOP === */
@media (min-width: 1200px) {
body { padding: 60px 40px; }
.container { max-width: 1400px; }
h1 { font-size: 2.4rem; }
h2 { font-size: 1.5rem; }
.date-header { font-size: 1.1rem; margin-bottom: 20px; }
.day-badge { font-size: 1rem; padding: 6px 16px; margin-bottom: 32px; }
.table th { padding: 14px 20px; font-size: 1rem; }
.table td { padding: 14px 20px; font-size: 1.15rem; }
.exercise-name { font-size: 1.25rem; }
.reps { font-size: 1.05rem; }
.weight { font-size: 1.05rem; }
.video-link { font-size: 1rem; }
.form-note { font-size: 1rem; }
.note { padding: 18px 20px; font-size: 1rem; }
.section { margin-bottom: 40px; }
}
/* === TV MODE === */
/* TV adjustments */
@media (min-width: 1600px) {
body { padding: 40px 50px; }
.container { gap: 50px; }
h1 { font-size: 2.8rem; margin-bottom: 8px; }
h2 { font-size: 1.6rem; margin-bottom: 16px; }
.date-header { font-size: 1.2rem; }
.day-badge { font-size: 1.1rem; padding: 6px 16px; border-radius: 16px; }
.table th { padding: 14px 20px; font-size: 1.1rem; }
.table td { padding: 14px 20px; font-size: 1.25rem; }
.exercise-name { font-size: 1.35rem; }
.reps, .weight { font-size: 1.1rem; }
.video-link { font-size: 1.05rem; }
.form-note { font-size: 1.05rem; }
.note { padding: 18px 20px; font-size: 1.05rem; margin-top: 16px; }
.section { margin-bottom: 32px; }
.breadcrumb { font-size: 0.9rem; margin-bottom: 24px; }
.back-link { font-size: 1rem; margin-top: 32px; }
.anatomy-title { font-size: 1.2rem; }
.anatomy-diagrams { gap: 16px; }
.diagram-container img { max-height: 42vh; }
.header { padding: 20px 32px 12px; }
.main { gap: 32px; padding: 0 32px 20px; }
h1 { font-size: 2rem; }
.day-badge { font-size: 0.9rem; padding: 4px 12px; }
.table td { padding: 12px 14px; font-size: 1rem; }
.exercise-name { font-size: 1.1rem; }
.reps, .weight { font-size: 0.95rem; }
.muscle-tag { font-size: 0.75rem; padding: 3px 10px; }
.anatomy-column { width: 420px; }
}
@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; }
.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; z-index: 1000; }
</style>
</head>
<body>
<div class="container">
<p class="breadcrumb"><a href="../">Ash Pages</a> / <a href="index.html">Workouts</a> /</p>
<h1>💪 Full-Body Circuit</h1>
<div class="date-header">Wednesday, April 22, 2026</div>
<div class="day-badge">Day B — Full-Body Circuit</div>
<div class="page">
<div class="header">
<p class="breadcrumb"><a href="../">Ash Pages</a> / <a href="index.html">Workouts</a> /</p>
<h1>💪 Full-Body Circuit</h1>
<div class="date-header">Wednesday, April 22, 2026</div>
<div class="day-badge">Day B — Full-Body Circuit</div>
</div>
<!-- WORKOUT COLUMN -->
<div class="workout-column">
<!-- Main workout table -->
<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>Target Muscles</th><th>Form Video</th></tr></thead>
<tbody>
<tr>
<td>1</td>
<td class="exercise-name">KB Around the World</td>
<td class="reps">20 (10/dir)</td>
<td class="weight">35 lb KB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag shoulders" data-muscle="shoulders">Shoulders</span>
<span class="muscle-tag core" data-muscle="core">Core</span>
<span class="muscle-tag forearms" data-muscle="forearms">Forearms</span>
</div>
</td>
<td><a href="https://www.youtube.com/watch?v=CNZcc7Nadwk" class="video-link">▶ Video</a></td>
</tr>
<tr>
<td>2</td>
<td class="exercise-name">DB Lateral Raises</td>
<td class="reps">15</td>
<td class="weight">10 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag deltoid" data-muscle="deltoid">Lateral Deltoid</span>
<span class="muscle-tag trapezius" data-muscle="trapezius">Upper Trapezius</span>
</div>
</td>
<td><a href="https://www.youtube.com/watch?v=Y29xKcze8Ik" class="video-link">▶ Video</a></td>
</tr>
<tr>
<td>3</td>
<td class="exercise-name">KB Sumo Deadlift</td>
<td class="reps">10</td>
<td class="weight">35 lb KB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag glutes" data-muscle="glutes">Glutes</span>
<span class="muscle-tag quadriceps" data-muscle="quadriceps">Quadriceps</span>
<span class="muscle-tag hamstrings" data-muscle="hamstrings">Hamstrings</span>
<span class="muscle-tag erector-spinae" data-muscle="erector-spinae">Erector Spinae</span>
</div>
</td>
<td class="form-note">adductors & hip rotators also active</td>
</tr>
<tr>
<td>4</td>
<td class="exercise-name">DB Biceps Curls</td>
<td class="reps">10</td>
<td class="weight">12 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag biceps" data-muscle="biceps">Biceps Brachii</span>
<span class="muscle-tag forearms" data-muscle="forearms">Forearms</span>
</div>
</td>
<td class="form-note">pain around elbows — drop weight if needed, check form with Christo</td>
</tr>
<tr>
<td>5</td>
<td class="exercise-name">Push-ups</td>
<td class="reps">15</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag pectoralis" data-muscle="pectoralis">Pectoralis Major</span>
<span class="muscle-tag deltoid" data-muscle="deltoid">Anterior Deltoid</span>
<span class="muscle-tag triceps" data-muscle="triceps">Triceps</span>
</div>
</td>
<td class="form-note">full form — take breaks between sets as needed</td>
</tr>
<tr>
<td>6</td>
<td class="exercise-name">DB Glute Bridge</td>
<td class="reps">12</td>
<td class="weight">20 lb on hips</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag glutes" data-muscle="glutes">Glutes</span>
<span class="muscle-tag hamstrings" data-muscle="hamstrings">Hamstrings</span>
<span class="muscle-tag core" data-muscle="core">Core</span>
</div>
</td>
<td class="form-note">lie on floor, feet flat, press hips up. Slow & controlled.</td>
</tr>
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 3 rounds, 60-90s rest between rounds</div>
</div>
<!-- Core Finisher -->
<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>Target 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 rectus-abdominis" data-muscle="rectus-abdominis">Rectus Abdominis</span>
<span class="muscle-tag obliques" data-muscle="obliques">Obliques</span>
</div>
</td>
<td><a href="https://www.youtube.com/watch?v=g_BYB0R-4Ws" class="video-link">▶ Video</a></td>
</tr>
<tr>
<td>2</td>
<td class="exercise-name">Russian Twists</td>
<td class="reps">20 total (10/side)</td>
<td class="weight">10 lb DB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag obliques" data-muscle="obliques">Obliques</span>
<span class="muscle-tag rectus-abdominis" data-muscle="rectus-abdominis">Rectus Abdominis</span>
</div>
</td>
<td><a href="https://www.youtube.com/watch?v=wkD8rjkodUI" class="video-link">▶ Video</a></td>
</tr>
<tr>
<td>3</td>
<td class="exercise-name">Plank Hold</td>
<td class="reps">30-45s</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag rectus-abdominis" data-muscle="rectus-abdominis">Rectus Abdominis</span>
<span class="muscle-tag obliques" data-muscle="obliques">Obliques</span>
<span class="muscle-tag erector-spinae" data-muscle="erector-spinae">Erector Spinae</span>
</div>
</td>
<td><a href="https://www.youtube.com/watch?v=ASdvN_XEl_c" class="video-link">▶ Video</a></td>
</tr>
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 2 rounds, minimal rest between exercises. No rest between exercises — just move through them.</div>
</div>
<a href="index.html" class="back-link">← Back to workout list</a>
</div> <!-- /workout-column -->
<!-- ANATOMY COLUMN (sticky on widescreen) -->
<div class="anatomy-column">
<div class="section anatomy-section">
<div class="anatomy-header">
<div class="anatomy-title">📚 Muscle Anatomy Reference (Gray's Anatomy)</div>
</div>
<div class="anatomy-diagrams">
<div class="diagram-container" id="diagram-anterior">
<h3>Anterior (Front)</h3>
<img src="workout/muscles-anterior-labeled.png" alt="Labeled anterior muscle diagram from Gray's Anatomy">
<div class="main">
<!-- WORKOUT COLUMN -->
<div class="workout-column">
<!-- Main workout table -->
<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></tr></thead>
<tbody>
<tr>
<td>1</td>
<td class="exercise-name"><a href="https://www.youtube.com/watch?v=CNZcc7Nadwk" target="_blank">KB Around the World</a></td>
<td class="reps">20 (10/dir)</td>
<td class="weight">35 lb KB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag shoulders" data-muscle="shoulders">Shoulders</span>
<span class="muscle-tag core" data-muscle="core">Core</span>
<span class="muscle-tag forearms" data-muscle="forearms">Forearms</span>
</div>
</td>
</tr>
<tr>
<td>2</td>
<td class="exercise-name"><a href="https://www.youtube.com/watch?v=Y29xKcze8Ik" target="_blank">DB Lateral Raises</a></td>
<td class="reps">15</td>
<td class="weight">10 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag deltoid" data-muscle="deltoid">Lateral Deltoid</span>
<span class="muscle-tag trapezius" data-muscle="trapezius">Upper Trapezius</span>
</div>
</td>
</tr>
<tr>
<td>3</td>
<td class="exercise-name"><a href="https://www.youtube.com/watch?v=CQ4Jkm-yKnw" target="_blank">KB Sumo Deadlift</a></td>
<td class="reps">10</td>
<td class="weight">35 lb KB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag glutes" data-muscle="glutes">Glutes</span>
<span class="muscle-tag quadriceps" data-muscle="quadriceps">Quadriceps</span>
<span class="muscle-tag hamstrings" data-muscle="hamstrings">Hamstrings</span>
<span class="muscle-tag erector-spinae" data-muscle="erector-spinae">Erector Spinae</span>
</div>
</td>
</tr>
<tr>
<td>4</td>
<td class="exercise-name">DB Biceps Curls</td>
<td class="reps">10</td>
<td class="weight">12 lb pair</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag biceps" data-muscle="biceps">Biceps Brachii</span>
<span class="muscle-tag forearms" data-muscle="forearms">Forearms</span>
</div>
</td>
</tr>
<tr>
<td>5</td>
<td class="exercise-name">Push-ups</td>
<td class="reps">15</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag pectoralis" data-muscle="pectoralis">Pectoralis Major</span>
<span class="muscle-tag deltoid" data-muscle="deltoid">Anterior Deltoid</span>
<span class="muscle-tag triceps" data-muscle="triceps">Triceps</span>
</div>
</td>
</tr>
<tr>
<td>6</td>
<td class="exercise-name">DB Glute Bridge</td>
<td class="reps">12</td>
<td class="weight">20 lb on hips</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag glutes" data-muscle="glutes">Glutes</span>
<span class="muscle-tag hamstrings" data-muscle="hamstrings">Hamstrings</span>
<span class="muscle-tag core" data-muscle="core">Core</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="diagram-container" id="diagram-posterior">
<h3>Posterior (Back)</h3>
<img src="workout/muscles-posterior-labeled.png" alt="Labeled posterior muscle diagram from Gray's Anatomy">
<div class="note"><strong>Structure:</strong> 3 rounds, 60-90s rest between rounds</div>
</div>
<!-- Core Finisher -->
<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></tr></thead>
<tbody>
<tr>
<td>1</td>
<td class="exercise-name"><a href="https://www.youtube.com/watch?v=g_BYB0R-4Ws" target="_blank">Dead Bugs</a></td>
<td class="reps">10/side</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag rectus-abdominis" data-muscle="rectus-abdominis">Rectus Abdominis</span>
<span class="muscle-tag obliques" data-muscle="obliques">Obliques</span>
</div>
</td>
</tr>
<tr>
<td>2</td>
<td class="exercise-name"><a href="https://www.youtube.com/watch?v=wkD8rjkodUI" target="_blank">Russian Twists</a></td>
<td class="reps">20 total (10/side)</td>
<td class="weight">10 lb DB</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag obliques" data-muscle="obliques">Obliques</span>
<span class="muscle-tag rectus-abdominis" data-muscle="rectus-abdominis">Rectus Abdominis</span>
</div>
</td>
</tr>
<tr>
<td>3</td>
<td class="exercise-name"><a href="https://www.youtube.com/watch?v=ASdvN_XEl_c" target="_blank">Plank Hold</a></td>
<td class="reps">30-45s</td>
<td class="weight">bodyweight</td>
<td>
<div class="exercise-muscles">
<span class="muscle-tag rectus-abdominis" data-muscle="rectus-abdominis">Rectus Abdominis</span>
<span class="muscle-tag obliques" data-muscle="obliques">Obliques</span>
<span class="muscle-tag erector-spinae" data-muscle="erector-spinae">Erector Spinae</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 2 rounds, minimal rest between exercises. No rest between exercises — just move through them.</div>
</div>
<a href="index.html" class="back-link">← Back to workout list</a>
</div> <!-- /workout-column -->
<!-- ANATOMY SIDEBAR -->
<div class="anatomy-column">
<div class="anatomy-section">
<div class="anatomy-header">
<div class="anatomy-title">📚 Muscle Reference</div>
</div>
<div class="anatomy-diagrams">
<div class="diagram-container" id="diagram-anterior">
<h3>Anterior (Front)</h3>
<img src="workout/muscles-anterior-labeled.png" alt="Anterior muscles">
</div>
<div class="diagram-container" id="diagram-posterior">
<h3>Posterior (Back)</h3>
<img src="workout/muscles-posterior-labeled.png" alt="Posterior muscles">
</div>
</div>
</div>
</div>
</div> <!-- /anatomy-column -->
</div>
</div> <!-- /anatomy-column -->
</div> <!-- /main -->
</div> <!-- /page -->
<div class="wake-locked" id="wakeLockStatus">Screen locked for workout</div>
<script>
// Muscle tag click handler
document.querySelectorAll('.muscle-tag').forEach(tag => {
tag.addEventListener('click', function(e) {
e.preventDefault();
document.querySelectorAll('.muscle-tag').forEach(t => t.classList.remove('active'));
this.classList.add('active');
document.querySelectorAll('.diagram-container').forEach(container => {
container.classList.add('highlighted');
});
document.querySelector('.anatomy-section').scrollIntoView({ behavior: 'smooth', block: 'center' });
setTimeout(() => {
document.querySelectorAll('.diagram-container').forEach(c => c.classList.remove('highlighted'));
this.classList.remove('active');
}, 3000);
});
});
// Wake Lock API
// Wake Lock
let wakeLock = null;
async function requestWakeLock() {
try {
@@ -404,6 +384,20 @@
document.addEventListener('visibilitychange', async () => {
if (wakeLock !== null && document.visibilityState === 'visible') await requestWakeLock();
});
// Muscle tag click handler
document.querySelectorAll('.muscle-tag').forEach(tag => {
tag.addEventListener('click', function(e) {
e.preventDefault();
document.querySelectorAll('.muscle-tag').forEach(t => t.classList.remove('active'));
this.classList.add('active');
document.querySelectorAll('.diagram-container').forEach(c => c.classList.add('highlighted'));
setTimeout(() => {
document.querySelectorAll('.diagram-container').forEach(c => c.classList.remove('highlighted'));
this.classList.remove('active');
}, 3000);
});
});
</script>
</body>
</html>
+180 -145
View File
@@ -1,4 +1,4 @@
<!-- WORKOUT CARD TEMPLATE — copy this structure for new workout cards -->
<!-- WORKOUT CARD TEMPLATE -->
<!DOCTYPE html>
<html lang="en">
<head>
@@ -8,64 +8,73 @@
<title>Workout: Day X — DATE</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
html, 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;
height: 100%;
overflow: hidden;
}
.container { max-width: 1200px; width: 100%; }
h1 { font-size: 1.8rem; margin-bottom: 4px; color: #f97316; }
.breadcrumb { color: #666; margin-bottom: 24px; font-size: 0.85rem; }
.page {
display: flex;
flex-direction: column;
height: 100vh;
max-width: 100%;
}
/* Header */
.header {
padding: 16px 24px 8px;
flex-shrink: 0;
}
.breadcrumb { color: #666; font-size: 0.8rem; margin-bottom: 8px; }
.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; }
h1 { font-size: 1.6rem; color: #f97316; margin-bottom: 2px; }
.date-header { color: #888; font-size: 0.85rem; margin-bottom: 6px; }
.day-badge { display: inline-block; background: rgba(249, 115, 22, 0.2); color: #f97316; padding: 3px 10px; border-radius: 12px; font-size: 0.8rem; font-weight: 500; }
/* Main content area */
.main {
display: flex;
flex: 1;
overflow: hidden;
gap: 24px;
padding: 0 24px 16px;
}
/* Workout column */
.workout-column {
flex: 1;
overflow-y: auto;
min-width: 0;
}
.section { margin-bottom: 20px; }
h2 { font-size: 1rem; color: #f97316; margin-bottom: 10px; font-weight: 600; }
.table {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
border-radius: 10px;
overflow: hidden;
}
.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; color: #e0e0e0; }
.table th { background: rgba(255,255,255,0.06); padding: 8px 12px; text-align: left; font-weight: 500; font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.5px; }
.table td { padding: 10px 12px; border-top: 1px solid rgba(255,255,255,0.06); font-size: 0.9rem; color: #e0e0e0; vertical-align: top; }
.exercise-name { font-weight: 500; }
.reps { font-size: 0.9rem; color: #e0e0e0; }
.weight { font-size: 0.9rem; color: #e0e0e0; }
.video-link { color: #4a9eff; text-decoration: none; font-size: 0.85rem; }
.video-link:hover { color: #6bb3ff; }
.form-note { color: #888; 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; }
.exercise-name a { color: #e0e0e0; text-decoration: none; }
.exercise-name a:hover { color: #4a9eff; }
.reps { color: #e0e0e0; font-size: 0.85rem; }
.weight { color: #e0e0e0; font-size: 0.85rem; }
.form-note { color: #888; font-size: 0.8rem; font-style: italic; }
.note { background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; padding: 12px; margin-top: 12px; color: #888; font-size: 0.8rem; }
.back-link { display: inline-block; color: #f97316; text-decoration: none; font-size: 0.8rem; margin-top: 16px; margin-bottom: 24px; }
.back-link:hover { color: #ff8c42; }
/* Anatomy Section */
.anatomy-section {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 16px;
margin-bottom: 24px;
}
.anatomy-header { margin-bottom: 12px; }
.anatomy-title { font-size: 1rem; color: #f97316; font-weight: 600; }
.anatomy-diagrams { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: start; }
.diagram-container { background: #ffffff; border-radius: 8px; padding: 8px; text-align: center; border: 2px solid transparent; transition: all 0.3s ease; }
.diagram-container h3 { font-size: 0.75rem; color: #888; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px; }
.diagram-container img { width: auto; max-width: 100%; height: auto; max-height: 550px; object-fit: contain; display: block; margin: 0 auto; }
.diagram-container.highlighted { box-shadow: 0 0 25px rgba(249, 115, 22, 0.6); border-color: rgba(249, 115, 22, 0.8); transform: scale(1.02); }
/* Muscle tags */
.exercise-muscles { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.muscle-tag { font-size: 0.7rem; padding: 3px 10px; border-radius: 12px; font-weight: 500; cursor: pointer; transition: all 0.2s; border: 2px solid transparent; user-select: none; }
.exercise-muscles { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 4px; }
.muscle-tag { font-size: 0.65rem; padding: 2px 8px; border-radius: 10px; font-weight: 500; cursor: pointer; transition: all 0.2s; border: 2px solid transparent; user-select: none; }
.muscle-tag:hover { transform: scale(1.08); filter: brightness(1.2); }
.muscle-tag.active { border-color: currentColor; box-shadow: 0 0 12px currentColor; transform: scale(1.1); }
.muscle-tag.active { border-color: currentColor; box-shadow: 0 0 10px currentColor; transform: scale(1.1); }
.muscle-tag.deltoid { background: rgba(100, 181, 246, 0.25); color: #64b5f6; }
.muscle-tag.pectoralis { background: rgba(229, 115, 115, 0.25); color: #e57373; }
.muscle-tag.trapezius { background: rgba(129, 199, 132, 0.25); color: #81c784; }
@@ -85,124 +94,136 @@
.muscle-tag.shoulders { background: rgba(100, 181, 246, 0.25); color: #64b5f6; }
.muscle-tag.forearms { background: rgba(255, 183, 77, 0.25); color: #ffb74d; }
@media (max-width: 768px) {
.anatomy-diagrams { grid-template-columns: 1fr; }
/* Anatomy sidebar */
.anatomy-column {
width: 380px;
flex-shrink: 0;
display: flex;
flex-direction: column;
}
.anatomy-section {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 10px;
padding: 12px;
flex: 1;
display: flex;
flex-direction: column;
}
.anatomy-header { margin-bottom: 10px; flex-shrink: 0; }
.anatomy-title { font-size: 0.85rem; color: #f97316; font-weight: 600; }
.anatomy-diagrams {
flex: 1;
display: flex;
flex-direction: column;
gap: 10px;
overflow: hidden;
}
.diagram-container {
background: #ffffff;
border-radius: 8px;
padding: 8px;
text-align: center;
border: 2px solid transparent;
transition: all 0.3s ease;
flex: 1;
display: flex;
flex-direction: column;
min-height: 0;
}
.diagram-container h3 { font-size: 0.7rem; color: #888; margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.5px; flex-shrink: 0; }
.diagram-container img {
flex: 1;
width: auto;
max-width: 100%;
height: auto;
max-height: 100%;
object-fit: contain;
display: block;
margin: 0 auto;
}
.diagram-container.highlighted { box-shadow: 0 0 25px rgba(249, 115, 22, 0.6); border-color: rgba(249, 115, 22, 0.8); transform: scale(1.01); }
/* Mobile: hide sidebar, stack normally */
@media (max-width: 1100px) {
html, body { height: auto; overflow: auto; }
.page { height: auto; }
.main { flex-direction: column; padding: 0 16px 16px; }
.anatomy-column { display: none; }
.header { padding: 16px 16px 8px; }
}
/* === WIDESCREEN: side-by-side layout === */
@media (min-width: 1400px) {
.container {
max-width: 100%;
display: grid;
grid-template-columns: 1.5fr 1fr;
grid-template-rows: auto auto auto 1fr auto;
gap: 40px;
align-items: start;
}
.breadcrumb { grid-column: 1 / -1; }
h1 { grid-column: 1 / -1; }
.date-header { grid-column: 1 / -1; }
.day-badge { grid-column: 1 / -1; }
.workout-column {
grid-column: 1;
grid-row: 4;
overflow-y: auto;
max-height: calc(100vh - 200px);
}
.anatomy-column {
grid-column: 2;
grid-row: 4;
position: sticky;
top: 40px;
}
.back-link { grid-column: 1 / -1; }
.anatomy-diagrams { grid-template-columns: 1fr; gap: 16px; }
.diagram-container img { max-height: 38vh; }
}
/* === TABLET / SMALL DESKTOP === */
@media (min-width: 1200px) {
body { padding: 60px 40px; }
.container { max-width: 1400px; }
h1 { font-size: 2.4rem; }
h2 { font-size: 1.5rem; }
.date-header { font-size: 1.1rem; margin-bottom: 20px; }
.day-badge { font-size: 1rem; padding: 6px 16px; margin-bottom: 32px; }
.table th { padding: 14px 20px; font-size: 1rem; }
.table td { padding: 14px 20px; font-size: 1.15rem; }
.exercise-name { font-size: 1.25rem; }
.reps { font-size: 1.05rem; }
.weight { font-size: 1.05rem; }
.video-link { font-size: 1rem; }
.form-note { font-size: 1rem; }
.note { padding: 18px 20px; font-size: 1rem; }
.section { margin-bottom: 40px; }
}
/* === TV MODE === */
/* TV adjustments */
@media (min-width: 1600px) {
body { padding: 40px 50px; }
.container { gap: 50px; }
h1 { font-size: 2.8rem; margin-bottom: 8px; }
h2 { font-size: 1.6rem; margin-bottom: 16px; }
.date-header { font-size: 1.2rem; }
.day-badge { font-size: 1.1rem; padding: 6px 16px; border-radius: 16px; }
.table th { padding: 14px 20px; font-size: 1.1rem; }
.table td { padding: 14px 20px; font-size: 1.25rem; }
.exercise-name { font-size: 1.35rem; }
.reps, .weight { font-size: 1.1rem; }
.video-link { font-size: 1.05rem; }
.form-note { font-size: 1.05rem; }
.note { padding: 18px 20px; font-size: 1.05rem; margin-top: 16px; }
.section { margin-bottom: 32px; }
.breadcrumb { font-size: 0.9rem; margin-bottom: 24px; }
.back-link { font-size: 1rem; margin-top: 32px; }
.anatomy-title { font-size: 1.2rem; }
.anatomy-diagrams { gap: 16px; }
.diagram-container img { max-height: 42vh; }
.header { padding: 20px 32px 12px; }
.main { gap: 32px; padding: 0 32px 20px; }
h1 { font-size: 2rem; }
.day-badge { font-size: 0.9rem; padding: 4px 12px; }
.table td { padding: 12px 14px; font-size: 1rem; }
.exercise-name { font-size: 1.1rem; }
.reps, .weight { font-size: 0.95rem; }
.muscle-tag { font-size: 0.75rem; padding: 3px 10px; }
.anatomy-column { width: 420px; }
}
@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; }
.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; z-index: 1000; }
</style>
</head>
<body>
<div class="container">
<p class="breadcrumb"><a href="../">Ash Pages</a> / <a href="index.html">Workouts</a> /</p>
<h1>💪 Workout Day</h1>
<div class="date-header">DATE_HERE</div>
<div class="day-badge">Day X — DESCRIPTION</div>
<!-- WORKOUT COLUMN -->
<div class="workout-column">
<!-- Main workout table -->
<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>Form Video</th></tr></thead>
<tbody>
<!-- Fill in exercises from workout-program.org -->
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 3 rounds, 60-90s rest</div>
</div>
<!-- Core finisher (if present in program) -->
</div> <!-- /workout-column -->
<!-- ANATOMY COLUMN (sticky on widescreen) -->
<div class="anatomy-column">
<!-- Anatomy diagrams go here on generated pages -->
<div class="page">
<div class="header">
<p class="breadcrumb"><a href="../">Ash Pages</a> / <a href="index.html">Workouts</a> /</p>
<h1>💪 Workout Day</h1>
<div class="date-header">DATE_HERE</div>
<div class="day-badge">Day X — DESCRIPTION</div>
</div>
<a href="index.html" class="back-link">← Back to workout list</a>
</div>
<div class="main">
<!-- WORKOUT COLUMN -->
<div class="workout-column">
<!-- Main workout table -->
<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></tr></thead>
<tbody>
<!-- Fill in exercises -->
</tbody>
</table>
</div>
<div class="note"><strong>Structure:</strong> 3 rounds, 60-90s rest</div>
</div>
<!-- Core finisher -->
</div> <!-- /workout-column -->
<!-- ANATOMY SIDEBAR -->
<div class="anatomy-column">
<div class="anatomy-section">
<div class="anatomy-header">
<div class="anatomy-title">📚 Muscle Reference</div>
</div>
<div class="anatomy-diagrams">
<div class="diagram-container" id="diagram-anterior">
<h3>Anterior (Front)</h3>
<img src="workout/muscles-anterior-labeled.png" alt="Anterior muscles">
</div>
<div class="diagram-container" id="diagram-posterior">
<h3>Posterior (Back)</h3>
<img src="workout/muscles-posterior-labeled.png" alt="Posterior muscles">
</div>
</div>
</div>
</div> <!-- /anatomy-column -->
</div> <!-- /main -->
</div> <!-- /page -->
<div class="wake-locked" id="wakeLockStatus">Screen locked for workout</div>
<script>
// Wake Lock
let wakeLock = null;
async function requestWakeLock() {
try {
@@ -238,6 +259,20 @@
document.addEventListener('visibilitychange', async () => {
if (wakeLock !== null && document.visibilityState === 'visible') await requestWakeLock();
});
// Muscle tag click handler
document.querySelectorAll('.muscle-tag').forEach(tag => {
tag.addEventListener('click', function(e) {
e.preventDefault();
document.querySelectorAll('.muscle-tag').forEach(t => t.classList.remove('active'));
this.classList.add('active');
document.querySelectorAll('.diagram-container').forEach(c => c.classList.add('highlighted'));
setTimeout(() => {
document.querySelectorAll('.diagram-container').forEach(c => c.classList.remove('highlighted'));
this.classList.remove('active');
}, 3000);
});
});
</script>
</body>
</html>