Generate a animated video showing sites of compression of radial nerve and it's result
radial nerve compression sites anatomy arm wrist drop
mkdir -p /home/daytona/workspace/radial-nerve-animation && ls /home/daytona/workspace/radial-nerve-animation/
~/radial-nerve-animation/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Radial Nerve Compression Sites β Animated Guide</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap');
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #0a0e1a;
font-family: 'Inter', sans-serif;
color: #e8f0fe;
overflow-x: hidden;
}
/* ββ Title Screen ββ */
#title-screen {
position: fixed; inset: 0;
background: linear-gradient(135deg, #0a0e1a 0%, #0d1b35 60%, #0a2040 100%);
display: flex; flex-direction: column;
align-items: center; justify-content: center;
z-index: 100;
transition: opacity 0.8s ease;
}
#title-screen h1 {
font-size: clamp(1.8rem, 4vw, 3.2rem);
font-weight: 700;
text-align: center;
background: linear-gradient(90deg, #64b5f6, #42e5b5, #64b5f6);
background-size: 200%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
animation: shimmer 3s infinite;
padding: 0 1rem;
}
#title-screen p {
margin-top: 1rem;
color: #90caf9;
font-size: 1.1rem;
text-align: center;
}
#start-btn {
margin-top: 2.5rem;
padding: 0.9rem 2.5rem;
border: none; border-radius: 50px;
background: linear-gradient(135deg, #1565c0, #0097a7);
color: #fff;
font-size: 1.1rem; font-weight: 600;
cursor: pointer;
box-shadow: 0 0 30px rgba(100,181,246,0.4);
transition: transform 0.2s, box-shadow 0.2s;
}
#start-btn:hover { transform: scale(1.07); box-shadow: 0 0 45px rgba(100,181,246,0.6); }
@keyframes shimmer {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* ββ Main Layout ββ */
#app { display: none; min-height: 100vh; }
/* ββ Progress Bar ββ */
#progress-container {
position: sticky; top: 0; z-index: 50;
background: rgba(10,14,26,0.95);
border-bottom: 1px solid #1a2744;
padding: 0.6rem 2rem;
display: flex; align-items: center; gap: 1rem;
}
#progress-bar {
flex: 1; height: 6px;
background: #1a2744; border-radius: 3px;
overflow: hidden;
}
#progress-fill {
height: 100%;
background: linear-gradient(90deg, #1565c0, #42e5b5);
border-radius: 3px;
transition: width 0.6s ease;
width: 0%;
}
#progress-label { color: #64b5f6; font-size: 0.85rem; white-space: nowrap; }
/* ββ Scene Container ββ */
#scene-container { padding: 2rem 1rem 4rem; }
.scene {
display: none;
max-width: 1100px;
margin: 0 auto;
animation: fadeSlideIn 0.7s ease forwards;
}
.scene.active { display: block; }
@keyframes fadeSlideIn {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
/* ββ Scene Header ββ */
.scene-header {
text-align: center;
margin-bottom: 2rem;
}
.scene-number {
display: inline-block;
background: linear-gradient(135deg, #1565c0, #0097a7);
padding: 0.3rem 1rem;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 600;
letter-spacing: 1px;
text-transform: uppercase;
margin-bottom: 0.8rem;
}
.scene-title {
font-size: clamp(1.4rem, 3vw, 2.2rem);
font-weight: 700;
color: #e3f2fd;
}
.scene-title span { color: #42e5b5; }
/* ββ Cards Grid ββ */
.cards-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
/* ββ Info Card ββ */
.info-card {
background: linear-gradient(145deg, #0d1b35, #122040);
border: 1px solid #1e3a6e;
border-radius: 16px;
padding: 1.5rem;
position: relative;
overflow: hidden;
opacity: 0;
transform: translateY(20px);
transition: opacity 0.5s ease, transform 0.5s ease, box-shadow 0.3s;
}
.info-card.revealed {
opacity: 1; transform: translateY(0);
}
.info-card:hover {
box-shadow: 0 8px 30px rgba(100,181,246,0.15);
border-color: #42e5b5;
}
.info-card::before {
content: '';
position: absolute; top: 0; left: 0;
width: 100%; height: 3px;
background: var(--accent, linear-gradient(90deg,#1565c0,#42e5b5));
}
.card-icon {
font-size: 2.2rem;
margin-bottom: 0.7rem;
}
.card-label {
font-size: 0.72rem; font-weight: 600;
letter-spacing: 1.5px; text-transform: uppercase;
color: #90caf9; margin-bottom: 0.4rem;
}
.card-heading {
font-size: 1.15rem; font-weight: 700;
color: #e3f2fd; margin-bottom: 0.8rem;
}
.card-body {
font-size: 0.92rem; line-height: 1.7;
color: #b0c8e8;
}
.card-body strong { color: #42e5b5; }
.tag-list {
display: flex; flex-wrap: wrap; gap: 0.4rem;
margin-top: 0.8rem;
}
.tag {
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.78rem; font-weight: 600;
border: 1px solid;
}
.tag.red { color: #ef9a9a; border-color: #c62828; background: rgba(198,40,40,0.12); }
.tag.amber { color: #ffcc80; border-color: #e65100; background: rgba(230,81,0,0.12); }
.tag.teal { color: #80cbc4; border-color: #00695c; background: rgba(0,105,92,0.12); }
.tag.blue { color: #90caf9; border-color: #1565c0; background: rgba(21,101,192,0.12); }
/* ββ SVG Anatomy Diagram ββ */
.svg-container {
background: linear-gradient(145deg, #0d1b35, #0a1525);
border: 1px solid #1e3a6e;
border-radius: 16px;
padding: 1.5rem;
margin-bottom: 2rem;
text-align: center;
}
.svg-container h3 {
font-size: 1rem; font-weight: 600;
color: #90caf9; margin-bottom: 1rem;
text-transform: uppercase; letter-spacing: 1px;
}
/* ββ Nerve path SVG ββ */
.nerve-path {
stroke-dasharray: 2000;
stroke-dashoffset: 2000;
animation: drawNerve 3s ease forwards;
}
@keyframes drawNerve {
to { stroke-dashoffset: 0; }
}
.pulse-dot {
animation: pulseDot 1.5s ease-in-out infinite;
}
@keyframes pulseDot {
0%, 100% { r: 6; opacity: 1; }
50% { r: 10; opacity: 0.5; }
}
/* ββ Summary Table ββ */
.summary-table {
width: 100%;
border-collapse: collapse;
font-size: 0.9rem;
}
.summary-table th {
background: #122040;
color: #42e5b5;
padding: 0.75rem 1rem;
text-align: left;
border-bottom: 2px solid #1e3a6e;
}
.summary-table td {
padding: 0.7rem 1rem;
border-bottom: 1px solid #1a2744;
color: #b0c8e8;
vertical-align: top;
}
.summary-table tr:hover td { background: rgba(21,101,192,0.08); }
/* ββ Nav Buttons ββ */
.nav-row {
display: flex; justify-content: center; gap: 1rem;
margin-top: 2.5rem; padding-bottom: 1rem;
flex-wrap: wrap;
}
.btn {
padding: 0.75rem 2rem;
border-radius: 50px; border: none;
font-size: 1rem; font-weight: 600;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
}
.btn-primary {
background: linear-gradient(135deg, #1565c0, #0097a7);
color: #fff;
box-shadow: 0 4px 20px rgba(100,181,246,0.3);
}
.btn-secondary {
background: #122040; color: #90caf9;
border: 1px solid #1e3a6e;
}
.btn:hover { transform: scale(1.05); }
.btn:disabled { opacity: 0.3; cursor: default; transform: none; }
/* ββ Wrist Drop Illustration ββ */
.wrist-drop-demo {
display: flex; gap: 1.5rem; flex-wrap: wrap;
justify-content: center; margin: 1.5rem 0;
}
.hand-card {
background: linear-gradient(145deg, #0d1b35, #122040);
border: 1px solid #1e3a6e;
border-radius: 14px;
padding: 1.2rem 1.5rem;
text-align: center;
min-width: 200px;
}
.hand-card h4 { font-size: 0.85rem; color: #90caf9; margin-bottom: 0.5rem; }
.hand-svg-wrap { display: flex; justify-content: center; align-items: center; }
/* ββ Floating Nerve Particles ββ */
#particles { position: fixed; inset: 0; pointer-events: none; z-index: 1; overflow: hidden; }
.particle {
position: absolute;
border-radius: 50%;
background: radial-gradient(circle, rgba(100,181,246,0.6), transparent);
animation: floatParticle linear infinite;
}
@keyframes floatParticle {
0% { transform: translateY(100vh) scale(0); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 0.3; }
100% { transform: translateY(-10vh) scale(1); opacity: 0; }
}
/* ββ Scene 0: Overview ββ */
.overview-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 1rem;
margin-bottom: 2rem;
}
.overview-step {
background: linear-gradient(145deg, #0d1b35, #122040);
border: 1px solid #1e3a6e;
border-radius: 14px;
padding: 1.2rem;
display: flex; gap: 1rem; align-items: flex-start;
opacity: 0; transform: translateX(-20px);
transition: opacity 0.5s ease, transform 0.5s ease;
}
.overview-step.revealed { opacity: 1; transform: translateX(0); }
.overview-step .step-num {
font-size: 2rem; font-weight: 700;
color: #42e5b5; line-height: 1;
flex-shrink: 0;
}
.overview-step h4 { font-size: 1rem; color: #e3f2fd; margin-bottom: 0.3rem; }
.overview-step p { font-size: 0.85rem; color: #90caf9; line-height: 1.5; }
/* ββ Responsive ββ */
@media (max-width: 600px) {
#progress-container { padding: 0.6rem 1rem; }
.scene-header { margin-bottom: 1.2rem; }
}
</style>
</head>
<body>
<!-- Floating particles -->
<div id="particles"></div>
<!-- Title Screen -->
<div id="title-screen">
<div style="font-size:3.5rem;margin-bottom:1rem;">π§ </div>
<h1>Radial Nerve Compression</h1>
<p>Sites of Compression & Clinical Consequences</p>
<button id="start-btn" onclick="startAnimation()">βΆ Begin Animation</button>
<p style="margin-top:1.5rem;font-size:0.8rem;color:#546e7a;">Based on THIEME Atlas of Anatomy Β· Miller's Orthopaedics Β· Gray's Anatomy</p>
</div>
<!-- Main App -->
<div id="app">
<!-- Progress -->
<div id="progress-container">
<div id="progress-bar"><div id="progress-fill"></div></div>
<span id="progress-label">Scene 1 / 7</span>
</div>
<div id="scene-container">
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 0 β Course Overview
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene active" id="scene-0">
<div class="scene-header">
<div class="scene-number">Scene 1 of 7</div>
<div class="scene-title">Radial Nerve β <span>Course Overview</span></div>
</div>
<!-- Animated anatomy SVG -->
<div class="svg-container">
<h3>Radial Nerve Course & Key Landmark Sites</h3>
<svg viewBox="0 0 500 720" width="100%" style="max-width:420px;" xmlns="http://www.w3.org/2000/svg">
<!-- Arm silhouette -->
<defs>
<linearGradient id="armGrad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#1a2744"/>
<stop offset="100%" stop-color="#0d1b35"/>
</linearGradient>
<linearGradient id="nerveGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#f9a825"/>
<stop offset="50%" stop-color="#42e5b5"/>
<stop offset="100%" stop-color="#64b5f6"/>
</linearGradient>
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="blur"/>
<feComposite in="SourceGraphic" in2="blur" operator="over"/>
</filter>
</defs>
<!-- Shoulder + arm outline -->
<ellipse cx="250" cy="70" rx="90" ry="60" fill="url(#armGrad)" stroke="#1e3a6e" stroke-width="1.5"/>
<rect x="180" y="110" width="140" height="300" rx="70" fill="url(#armGrad)" stroke="#1e3a6e" stroke-width="1.5"/>
<!-- Forearm -->
<rect x="190" y="400" width="120" height="220" rx="55" fill="url(#armGrad)" stroke="#1e3a6e" stroke-width="1.5"/>
<!-- Hand -->
<ellipse cx="250" cy="640" rx="60" ry="35" fill="url(#armGrad)" stroke="#1e3a6e" stroke-width="1.5"/>
<!-- Fingers suggestion -->
<rect x="208" y="660" width="12" height="40" rx="6" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
<rect x="225" y="660" width="12" height="48" rx="6" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
<rect x="242" y="660" width="12" height="50" rx="6" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
<rect x="259" y="660" width="12" height="44" rx="6" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
<rect x="276" y="660" width="10" height="34" rx="5" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
<!-- Radial Nerve path (animated) -->
<path class="nerve-path" d="M250,60 C230,100 220,160 230,220 C240,280 260,300 255,340 C250,370 240,400 235,440 C230,475 235,510 240,540 C245,570 248,600 250,630"
stroke="url(#nerveGrad)" stroke-width="5" fill="none" stroke-linecap="round" filter="url(#glow)"
style="animation-delay:0.5s"/>
<!-- Superficial branch split at elbow -->
<path d="M240,440 C220,470 210,500 205,540" stroke="#64b5f6" stroke-width="3" fill="none"
stroke-dasharray="6,4" opacity="0.8" stroke-linecap="round"
style="stroke-dashoffset:400; animation: drawNerve 2s 2.5s ease forwards;"/>
<!-- Site 1 β Axilla -->
<circle class="pulse-dot" cx="250" cy="105" r="8" fill="#ef5350" opacity="0.9" style="animation-delay:1s"/>
<text x="268" y="109" fill="#ef9a9a" font-size="12" font-weight="600">β Axilla</text>
<!-- Site 2 β Radial Groove / Spiral Canal -->
<circle class="pulse-dot" cx="235" cy="220" r="8" fill="#ff7043" opacity="0.9" style="animation-delay:1.3s"/>
<text x="253" y="224" fill="#ffab91" font-size="12" font-weight="600">β‘ Radial Groove</text>
<!-- Site 3 β Lateral intermuscular septum -->
<circle class="pulse-dot" cx="242" cy="335" r="8" fill="#ffd54f" opacity="0.9" style="animation-delay:1.6s"/>
<text x="160" y="316" fill="#fff176" font-size="11" font-weight="600">β’ Lat. Intermuscular</text>
<text x="168" y="329" fill="#fff176" font-size="11" font-weight="600">Septum</text>
<!-- Site 4 β Arcade of Frohse -->
<circle class="pulse-dot" cx="247" cy="440" r="8" fill="#66bb6a" opacity="0.9" style="animation-delay:1.9s"/>
<text x="262" y="444" fill="#a5d6a7" font-size="12" font-weight="600">β£ Arcade of Frohse</text>
<!-- Site 5 β Distal edge supinator -->
<circle class="pulse-dot" cx="245" cy="510" r="8" fill="#29b6f6" opacity="0.9" style="animation-delay:2.2s"/>
<text x="258" y="514" fill="#81d4fa" font-size="12" font-weight="600">β€ Supinator (distal)</text>
<!-- Elbow marker -->
<line x1="175" y1="400" x2="195" y2="400" stroke="#546e7a" stroke-width="1" stroke-dasharray="3,3"/>
<text x="130" y="404" fill="#546e7a" font-size="10">Elbow</text>
<!-- Wrist marker -->
<line x1="175" y1="608" x2="195" y2="608" stroke="#546e7a" stroke-width="1" stroke-dasharray="3,3"/>
<text x="130" y="612" fill="#546e7a" font-size="10">Wrist</text>
</svg>
</div>
<!-- Overview steps -->
<div class="overview-grid" id="overview-steps">
<div class="overview-step">
<div class="step-num">C5</div>
<div>
<h4>Origin</h4>
<p>Posterior cord of brachial plexus (C5βT1). Largest branch of the posterior cord.</p>
</div>
</div>
<div class="overview-step">
<div class="step-num">π</div>
<div>
<h4>Radial Groove</h4>
<p>Winds posteriorly around the humerus in the spiral canal between lateral & medial heads of triceps.</p>
</div>
</div>
<div class="overview-step">
<div class="step-num">π¦Ύ</div>
<div>
<h4>Divides at Elbow</h4>
<p>Splits into superficial (sensory) & deep (PIN) branches anterior to lateral epicondyle.</p>
</div>
</div>
<div class="overview-step">
<div class="step-num">ποΈ</div>
<div>
<h4>Terminal</h4>
<p>Superficial branch supplies dorsum of hand (1st web space). PIN terminates at dorsal wrist capsule.</p>
</div>
</div>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()" id="btn-prev" disabled>β Previous</button>
<button class="btn btn-primary" onclick="nextScene()">Next Scene β</button>
</div>
</div>
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 1 β Axilla
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene" id="scene-1">
<div class="scene-header">
<div class="scene-number">Scene 2 of 7</div>
<div class="scene-title">Site β β <span>Axilla Compression</span></div>
</div>
<div class="cards-grid">
<div class="info-card" style="--accent:linear-gradient(90deg,#c62828,#ef5350)">
<div class="card-icon">πͺ</div>
<div class="card-label">Mechanism</div>
<div class="card-heading">Crutch / Axillary Pressure</div>
<div class="card-body">
Prolonged pressure in the axilla β classically from <strong>crutch use ("crutch palsy")</strong> or the arm resting over the back of a chair. The radial nerve is compressed against the humerus before it gives off branches to triceps.
</div>
<div class="tag-list">
<span class="tag red">Proximal Lesion</span>
<span class="tag amber">Above Triceps Branches</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#b71c1c,#e53935)">
<div class="card-icon">β‘</div>
<div class="card-label">Clinical Result</div>
<div class="card-heading">Complete Radial Palsy</div>
<div class="card-body">
<strong>Wrist drop</strong> (inability to extend wrist + MCP joints). <strong>Triceps weakness</strong> (elbow extension impaired) β because compression is above triceps branches.<br><br>
Sensory loss over posterior arm, posterior forearm, and dorsal-lateral hand (1st web space).
</div>
<div class="tag-list">
<span class="tag red">Wrist Drop</span>
<span class="tag red">Triceps Weak</span>
<span class="tag red">Full Sensory Loss</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#37474f,#546e7a)">
<div class="card-icon">π</div>
<div class="card-label">Key Point</div>
<div class="card-heading">Differentiating Factor</div>
<div class="card-body">
Axillary compression is the only level where <strong>triceps is also affected</strong>. Testing elbow extension (against gravity) is therefore the key test to locate the lesion proximal to the spiral groove.
</div>
</div>
</div>
<!-- Mini hand SVG demo -->
<div class="svg-container">
<h3>Functional Deficit β Wrist Drop with Triceps Weakness</h3>
<div class="wrist-drop-demo">
<div class="hand-card">
<h4>Normal Hand</h4>
<div class="hand-svg-wrap">
<svg viewBox="0 0 120 160" width="110">
<!-- Normal wrist extended -->
<rect x="40" y="100" width="40" height="50" rx="8" fill="#1e3a6e" stroke="#42e5b5" stroke-width="1.5"/>
<rect x="38" y="70" width="15" height="38" rx="7" fill="#1e3a6e" stroke="#42e5b5" stroke-width="1.5"/>
<rect x="57" y="62" width="15" height="44" rx="7" fill="#1e3a6e" stroke="#42e5b5" stroke-width="1.5"/>
<rect x="76" y="65" width="14" height="40" rx="7" fill="#1e3a6e" stroke="#42e5b5" stroke-width="1.5"/>
<rect x="94" y="72" width="12" height="34" rx="6" fill="#1e3a6e" stroke="#42e5b5" stroke-width="1.5"/>
<!-- thumb -->
<rect x="24" y="108" width="12" height="26" rx="6" transform="rotate(-30 30 108)" fill="#1e3a6e" stroke="#42e5b5" stroke-width="1.5"/>
<!-- forearm -->
<rect x="47" y="135" width="26" height="20" rx="4" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
<text x="60" y="158" text-anchor="middle" fill="#42e5b5" font-size="9">Normal</text>
</svg>
</div>
</div>
<div style="display:flex;align-items:center;color:#ef5350;font-size:2rem;">β</div>
<div class="hand-card" style="border-color:#c62828;">
<h4>Axilla Lesion β Wrist Drop</h4>
<div class="hand-svg-wrap">
<svg viewBox="0 0 120 200" width="110">
<!-- Drooped wrist/hand rotated down -->
<g transform="rotate(35 60 120)">
<rect x="40" y="85" width="40" height="50" rx="8" fill="#1e3a6e" stroke="#ef5350" stroke-width="1.5"/>
<rect x="38" y="55" width="15" height="38" rx="7" fill="#1a2744" stroke="#ef9a9a" stroke-width="1.5" opacity="0.7"/>
<rect x="57" y="47" width="15" height="44" rx="7" fill="#1a2744" stroke="#ef9a9a" stroke-width="1.5" opacity="0.7"/>
<rect x="76" y="50" width="14" height="40" rx="7" fill="#1a2744" stroke="#ef9a9a" stroke-width="1.5" opacity="0.7"/>
<rect x="94" y="57" width="12" height="34" rx="6" fill="#1a2744" stroke="#ef9a9a" stroke-width="1.5" opacity="0.7"/>
<rect x="24" y="93" width="12" height="26" rx="6" transform="rotate(-30 30 93)" fill="#1a2744" stroke="#ef9a9a" stroke-width="1" opacity="0.7"/>
<rect x="47" y="120" width="26" height="20" rx="4" fill="#122040" stroke="#1e3a6e" stroke-width="1"/>
</g>
<text x="60" y="192" text-anchor="middle" fill="#ef9a9a" font-size="9">Wrist Drop β</text>
</svg>
</div>
</div>
</div>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()">β Previous</button>
<button class="btn btn-primary" onclick="nextScene()">Next Scene β</button>
</div>
</div>
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 2 β Radial Groove / Spiral Canal
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene" id="scene-2">
<div class="scene-header">
<div class="scene-number">Scene 3 of 7</div>
<div class="scene-title">Site β‘ β <span>Radial Groove (Spiral Canal)</span></div>
</div>
<div class="cards-grid">
<div class="info-card" style="--accent:linear-gradient(90deg,#e65100,#ff7043)">
<div class="card-icon">πΊ</div>
<div class="card-label">Mechanism</div>
<div class="card-heading">Saturday Night Palsy & Fractures</div>
<div class="card-body">
Three classic causes compress the nerve against the <strong>bony floor of the radial groove</strong>:
<ol style="padding-left:1.2rem;margin-top:0.5rem;line-height:2;">
<li><strong>"Saturday night palsy"</strong> β arm draped over chair back while intoxicated</li>
<li><strong>"Park bench palsy"</strong> β arm over park bench edge during sleep</li>
<li><strong>Humeral shaft fracture</strong> β direct nerve injury at spiral groove</li>
</ol>
</div>
<div class="tag-list">
<span class="tag amber">Mid-Shaft Humerus</span>
<span class="tag amber">Common Level</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#e65100,#ff8f00)">
<div class="card-icon">πͺ</div>
<div class="card-label">Clinical Result</div>
<div class="card-heading">Wrist Drop β Triceps Spared</div>
<div class="card-body">
<strong>Wrist drop</strong> is present. However, <strong>triceps is spared</strong> because its motor branches leave the radial nerve just before it enters the spiral groove.<br><br>
Sensory loss over posterior forearm and dorsal-lateral hand. <strong>Brachioradialis reflex</strong> may be diminished.
</div>
<div class="tag-list">
<span class="tag red">Wrist Drop</span>
<span class="tag teal">Triceps Intact β</span>
<span class="tag amber">Sensory Loss</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#4a148c,#7b1fa2)">
<div class="card-icon">π§²</div>
<div class="card-label">Prognosis</div>
<div class="card-heading">Usually Favorable</div>
<div class="card-body">
Compression neuropraxias (Saturday night palsy) typically recover within <strong>days to weeks</strong>. Humeral fracture-associated injury may take longer. Explore surgically if no recovery by <strong>3β6 months</strong>.
</div>
</div>
</div>
<!-- Comparison diagram -->
<div class="svg-container">
<h3>Level Comparison: Axilla vs Radial Groove</h3>
<svg viewBox="0 0 480 260" width="100%" style="max-width:480px">
<!-- Left side: axilla -->
<rect x="10" y="10" width="215" height="240" rx="12" fill="#0d1b35" stroke="#c62828" stroke-width="1.5"/>
<text x="117" y="32" text-anchor="middle" fill="#ef9a9a" font-size="11" font-weight="700">AXILLA LEVEL</text>
<!-- Nerve high -->
<line x1="117" y1="50" x2="117" y2="230" stroke="#f9a825" stroke-width="3" stroke-linecap="round"/>
<!-- Compression dot -->
<circle cx="117" cy="65" r="9" fill="#c62828" opacity="0.9"/>
<text x="130" y="69" fill="#ef9a9a" font-size="10">Compression</text>
<!-- Triceps branch -->
<line x1="117" y1="80" x2="80" y2="105" stroke="#ef9a9a" stroke-width="2" stroke-dasharray="5,3"/>
<text x="30" y="112" fill="#ef9a9a" font-size="9">Triceps β WEAK</text>
<!-- ECRL/BR -->
<line x1="117" y1="120" x2="80" y2="140" stroke="#ef9a9a" stroke-width="2" stroke-dasharray="5,3"/>
<text x="30" y="147" fill="#ef9a9a" font-size="9">BR / ECRL β</text>
<!-- Wrist extensors -->
<line x1="117" y1="160" x2="80" y2="178" stroke="#ef9a9a" stroke-width="2" stroke-dasharray="5,3"/>
<text x="30" y="185" fill="#ef9a9a" font-size="9">Wrist ext β</text>
<!-- Right side: spiral groove -->
<rect x="255" y="10" width="215" height="240" rx="12" fill="#0d1b35" stroke="#e65100" stroke-width="1.5"/>
<text x="362" y="32" text-anchor="middle" fill="#ffab91" font-size="11" font-weight="700">SPIRAL GROOVE</text>
<!-- Nerve -->
<line x1="362" y1="50" x2="362" y2="230" stroke="#42e5b5" stroke-width="3" stroke-linecap="round"/>
<!-- Triceps branch (above compression) -->
<line x1="362" y1="70" x2="325" y2="90" stroke="#a5d6a7" stroke-width="2"/>
<text x="275" y="97" fill="#a5d6a7" font-size="9">Triceps β INTACT</text>
<!-- Compression dot -->
<circle cx="362" cy="115" r="9" fill="#e65100" opacity="0.9"/>
<text x="375" y="119" fill="#ffab91" font-size="10">Compression</text>
<!-- BR/ECRL below -->
<line x1="362" y1="140" x2="325" y2="158" stroke="#ef9a9a" stroke-width="2" stroke-dasharray="5,3"/>
<text x="275" y="165" fill="#ef9a9a" font-size="9">BR / ECRL β</text>
<!-- Wrist extensors -->
<line x1="362" y1="175" x2="325" y2="192" stroke="#ef9a9a" stroke-width="2" stroke-dasharray="5,3"/>
<text x="275" y="199" fill="#ef9a9a" font-size="9">Wrist ext β</text>
<text x="117" y="248" text-anchor="middle" fill="#ef5350" font-size="10">All muscles affected</text>
<text x="362" y="248" text-anchor="middle" fill="#66bb6a" font-size="10">Triceps spared</text>
</svg>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()">β Previous</button>
<button class="btn btn-primary" onclick="nextScene()">Next Scene β</button>
</div>
</div>
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 3 β Lateral Intermuscular Septum / Radial Tunnel
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene" id="scene-3">
<div class="scene-header">
<div class="scene-number">Scene 4 of 7</div>
<div class="scene-title">Site β’ β <span>Lateral Intermuscular Septum & Radial Tunnel</span></div>
</div>
<div class="cards-grid">
<div class="info-card" style="--accent:linear-gradient(90deg,#f9a825,#ffd54f)">
<div class="card-icon">π§</div>
<div class="card-label">Mechanism</div>
<div class="card-heading">Fibrous Bands & Bridging Vessels</div>
<div class="card-body">
Chronic compression as the radial nerve passes through the <strong>lateral intermuscular septum</strong> and into the <strong>radial tunnel</strong> (a 5 cm tunnel in the forearm).<br><br>
Bridging vessels, connective-tissue septa, and fascial bands can impinge the nerve here.
</div>
<div class="tag-list">
<span class="tag amber">Distal Arm / Elbow</span>
<span class="tag amber">Radial Tunnel</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#ff6f00,#ffa726)">
<div class="card-icon">π£</div>
<div class="card-label">Clinical Result</div>
<div class="card-heading">Radial Tunnel Syndrome</div>
<div class="card-body">
<strong>Lateral elbow / radial forearm pain</strong> β often mistaken for lateral epicondylitis ("tennis elbow"). Point of maximum tenderness is <strong>several centimeters distal</strong> to the lateral epicondyle.<br><br>
<strong>No motor deficit, no sensory loss</strong> β purely pain-based (PIN fibers not yet separate). Provocative: resisted <strong>long-finger extension</strong> or <strong>supination</strong>.
</div>
<div class="tag-list">
<span class="tag amber">Lateral Elbow Pain</span>
<span class="tag teal">No Wrist Drop</span>
<span class="tag teal">No Sensory Loss</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#1b5e20,#43a047)">
<div class="card-icon">πΎ</div>
<div class="card-label">Differential</div>
<div class="card-heading">vs. Lateral Epicondylitis</div>
<div class="card-body">
Lateral epicondylitis: pain <strong>at</strong> lateral epicondyle.<br>
Radial tunnel syndrome: pain <strong>distal</strong> to it (over supinator/radial head area).<br><br>
Electrodiagnostic tests are <strong>typically inconclusive</strong> in radial tunnel syndrome.
</div>
</div>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()">β Previous</button>
<button class="btn btn-primary" onclick="nextScene()">Next Scene β</button>
</div>
</div>
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 4 β Arcade of Frohse / PIN
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene" id="scene-4">
<div class="scene-header">
<div class="scene-number">Scene 5 of 7</div>
<div class="scene-title">Site β£ β <span>Arcade of Frohse (PIN Syndrome)</span></div>
</div>
<div class="cards-grid">
<div class="info-card" style="--accent:linear-gradient(90deg,#1b5e20,#43a047)">
<div class="card-icon">πΉ</div>
<div class="card-label">Mechanism</div>
<div class="card-heading">Most Common PIN Compression</div>
<div class="card-body">
The <strong>Arcade of Frohse</strong> is the most common site of posterior interosseous nerve (PIN) compression β a fibrous arch at the <strong>proximal edge of the superficial head of supinator</strong>.<br><br>
The PIN mnemonic <strong>LEAFS</strong> covers all 5 anatomic sites:
<ul style="padding-left:1.2rem;margin-top:0.5rem;line-height:2;">
<li><strong>L</strong> β Leash of Henry (recurrent radial vessels)</li>
<li><strong>E</strong> β Edge of ECRB</li>
<li><strong>A</strong> β Arcade of Frohse β most common</li>
<li><strong>F</strong> β Fascial band at radial head</li>
<li><strong>S</strong> β Supinator (distal edge)</li>
</ul>
</div>
<div class="tag-list">
<span class="tag teal">Most Common PIN Site</span>
<span class="tag blue">Proximal Supinator Edge</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#004d40,#00897b)">
<div class="card-icon">π€</div>
<div class="card-label">Clinical Result</div>
<div class="card-heading">PIN Palsy β No Wrist Drop</div>
<div class="card-body">
Before entering the supinator canal, PIN gives off branches to <strong>ECRB, brachioradialis, ECRL, and supinator</strong> β so wrist extension is <strong>preserved</strong>.<br><br>
<strong>Muscles affected (no extension):</strong><br>
ECU, EDC, EIP, EPL, EPB, APL (extensor digiti minimi)<br><br>
On active wrist extension: <strong>radial deviation</strong> occurs (ECRL intact, ECU weak).<br>
<strong>No sensory loss</strong> β PIN is purely motor after the split.
</div>
<div class="tag-list">
<span class="tag teal">No Wrist Drop</span>
<span class="tag teal">No Sensory Loss</span>
<span class="tag red">Finger Ext Weak</span>
<span class="tag amber">Radial Deviation</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#006064,#0097a7)">
<div class="card-icon">π¬</div>
<div class="card-label">Diagnosis & Treatment</div>
<div class="card-heading">EMG + Surgical Decompression</div>
<div class="card-body">
EMG confirms diagnosis and localizes the lesion.<br><br>
<strong>Non-operative:</strong> activity modification, splinting, NSAIDs.<br>
<strong>Surgical:</strong> if no recovery by 3 months β decompression of all LEAFS sites β good/excellent results in <strong>85%</strong> of patients.
</div>
</div>
</div>
<!-- PIN muscles diagram -->
<div class="svg-container">
<h3>PIN Innervation β Muscles Affected at Arcade of Frohse</h3>
<svg viewBox="0 0 500 200" width="100%" style="max-width:500px">
<!-- Nerve trunk -->
<line x1="50" y1="100" x2="160" y2="100" stroke="#42e5b5" stroke-width="4" stroke-linecap="round"/>
<text x="50" y="92" fill="#42e5b5" font-size="11" font-weight="700">Radial Nerve</text>
<!-- Split -->
<circle cx="160" cy="100" r="6" fill="#f9a825"/>
<text x="165" y="87" fill="#ffd54f" font-size="10">Split at Lateral</text>
<text x="165" y="99" fill="#ffd54f" font-size="10">Epicondyle</text>
<!-- Superficial branch -->
<line x1="160" y1="100" x2="260" y2="60" stroke="#64b5f6" stroke-width="3" stroke-linecap="round"/>
<text x="265" y="64" fill="#64b5f6" font-size="10">Superficial Br.</text>
<text x="265" y="76" fill="#90caf9" font-size="9">(Sensory β 1st web)</text>
<!-- PIN deep branch -->
<line x1="160" y1="100" x2="220" y2="130" stroke="#66bb6a" stroke-width="3" stroke-linecap="round"/>
<!-- Arcade of Frohse compression -->
<circle cx="220" cy="130" r="8" fill="#c62828" opacity="0.9"/>
<text x="232" y="128" fill="#ef9a9a" font-size="10" font-weight="700">Arcade of Frohse</text>
<text x="232" y="140" fill="#ef9a9a" font-size="9">β Compression here</text>
<!-- Muscles after compression -->
<line x1="220" y1="138" x2="280" y2="160" stroke="#ef5350" stroke-width="2" stroke-dasharray="5,3"/>
<text x="284" y="152" fill="#ef9a9a" font-size="9">EDC, EIP, ECU</text>
<text x="284" y="163" fill="#ef9a9a" font-size="9">EPL, EPB, APL</text>
<!-- Muscles before compression (spared) -->
<line x1="185" y1="100" x2="220" y2="75" stroke="#a5d6a7" stroke-width="2"/>
<text x="225" y="72" fill="#a5d6a7" font-size="9">ECRB, BR, ECRL β</text>
<text x="225" y="83" fill="#a5d6a7" font-size="9">Supinator β</text>
<text x="250" y="195" text-anchor="middle" fill="#546e7a" font-size="9">Wrist extension preserved; finger extension lost</text>
</svg>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()">β Previous</button>
<button class="btn btn-primary" onclick="nextScene()">Next Scene β</button>
</div>
</div>
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 5 β Supinator Syndrome (Distal)
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene" id="scene-5">
<div class="scene-header">
<div class="scene-number">Scene 6 of 7</div>
<div class="scene-title">Site β€ β <span>Supinator Syndrome (Distal PIN)</span></div>
</div>
<div class="cards-grid">
<div class="info-card" style="--accent:linear-gradient(90deg,#0d47a1,#1976d2)">
<div class="card-icon">π</div>
<div class="card-label">Mechanism</div>
<div class="card-heading">Distal Supinator Compression</div>
<div class="card-body">
Compression of the deep branch (PIN) at its exit from the <strong>distal edge of the supinator muscle</strong>, or by a <strong>sharp-edged tendon</strong> of its superficial part.<br><br>
Also caused by fractures/dislocations of the proximal radius, lipomas, rheumatoid synovitis of the radiohumeral joint.
</div>
<div class="tag-list">
<span class="tag blue">Distal Supinator</span>
<span class="tag blue">Space-Occupying Lesions</span>
</div>
</div>
<div class="info-card" style="--accent:linear-gradient(90deg,#01579b,#0288d1)">
<div class="card-icon">π€</div>
<div class="card-label">Clinical Result</div>
<div class="card-heading">Selective Extensor Paresis</div>
<div class="card-body">
By the time PIN exits the supinator, it has <strong>already given off branches to</strong> ECRB, brachioradialis, ECRL, and supinator β these are <strong>all preserved</strong>.<br><br>
<strong>Paretic muscles:</strong> EPB, EPL, APL, EDC, EIP, ECU.<br><br>
<strong>No wrist drop, no sensory disturbance</strong> (superficial sensory branch separated earlier).
</div>
<div class="tag-list">
<span class="tag teal">No Wrist Drop</span>
<span class="tag teal">No Sensory Loss</span>
<span class="tag red">Thumb / Finger Ext Weak</span>
</div>
</div>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()">β Previous</button>
<button class="btn btn-primary" onclick="nextScene()">Next Scene β</button>
</div>
</div>
<!-- ββββββββββββββββββββββββββββββββββββββ
SCENE 6 β Summary Table
ββββββββββββββββββββββββββββββββββββββ -->
<div class="scene" id="scene-6">
<div class="scene-header">
<div class="scene-number">Scene 7 of 7</div>
<div class="scene-title">π <span>Complete Summary</span></div>
</div>
<div style="background:linear-gradient(145deg,#0d1b35,#122040);border:1px solid #1e3a6e;border-radius:16px;overflow:hidden;margin-bottom:2rem;">
<table class="summary-table">
<thead>
<tr>
<th>#</th>
<th>Site</th>
<th>Cause</th>
<th>Wrist Drop?</th>
<th>Triceps?</th>
<th>Sensory Loss?</th>
<th>Unique Feature</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="tag red">β </span></td>
<td><strong>Axilla</strong></td>
<td>Crutch palsy</td>
<td style="color:#ef9a9a">β Yes</td>
<td style="color:#ef9a9a">β Weak</td>
<td style="color:#ef9a9a">Yes</td>
<td>Only site with triceps weakness</td>
</tr>
<tr>
<td><span class="tag amber">β‘</span></td>
<td><strong>Radial Groove</strong></td>
<td>Saturday night palsy, humeral #</td>
<td style="color:#ef9a9a">β Yes</td>
<td style="color:#80cbc4">β Intact</td>
<td style="color:#ef9a9a">Yes</td>
<td>Triceps spared; most common trauma level</td>
</tr>
<tr>
<td><span class="tag amber">β’</span></td>
<td><strong>Radial Tunnel</strong></td>
<td>Fascial bands, bridging vessels</td>
<td style="color:#80cbc4">β None</td>
<td style="color:#80cbc4">β Intact</td>
<td style="color:#80cbc4">None</td>
<td>Pain only β no deficit. Mimics tennis elbow</td>
</tr>
<tr>
<td><span class="tag teal">β£</span></td>
<td><strong>Arcade of Frohse</strong></td>
<td>PIN syndrome (LEAFS)</td>
<td style="color:#80cbc4">β None</td>
<td style="color:#80cbc4">β Intact</td>
<td style="color:#80cbc4">None</td>
<td>Radial deviation on wrist ext; most common PIN site</td>
</tr>
<tr>
<td><span class="tag blue">β€</span></td>
<td><strong>Supinator (Distal)</strong></td>
<td>Supinator syndrome, lipoma, RA</td>
<td style="color:#80cbc4">β None</td>
<td style="color:#80cbc4">β Intact</td>
<td style="color:#80cbc4">None</td>
<td>Selective finger/thumb extensor paresis</td>
</tr>
</tbody>
</table>
</div>
<!-- Key mnemonic -->
<div class="info-card revealed" style="--accent:linear-gradient(90deg,#4a148c,#7b1fa2);margin-bottom:1.5rem;">
<div class="card-icon">π§ </div>
<div class="card-label">Memory Aid</div>
<div class="card-heading">PIN Compression Sites β LEAFS Mnemonic</div>
<div class="card-body">
<strong style="color:#ce93d8">L</strong> β Leash of Henry (recurrent radial vessels)<br>
<strong style="color:#ce93d8">E</strong> β Edge of ECRB<br>
<strong style="color:#ce93d8">A</strong> β <strong>Arcade of Frohse</strong> (most common)<br>
<strong style="color:#ce93d8">F</strong> β Fascial band at radial head<br>
<strong style="color:#ce93d8">S</strong> β Supinator distal edge
</div>
</div>
<div class="info-card revealed" style="--accent:linear-gradient(90deg,#1a237e,#283593);">
<div class="card-icon">π</div>
<div class="card-label">Sources</div>
<div class="card-heading">References</div>
<div class="card-body" style="font-size:0.82rem;">
β’ THIEME Atlas of Anatomy β General Anatomy & Musculoskeletal System<br>
β’ Miller's Review of Orthopaedics, 9th Edition (pp. 693β695)<br>
β’ Sabiston Textbook of Surgery, Radial Nerve Compression section<br>
β’ Localization in Clinical Neurology, 8th Edition
</div>
</div>
<div class="nav-row">
<button class="btn btn-secondary" onclick="prevScene()">β Previous</button>
<button class="btn btn-primary" onclick="restartAnimation()">βΊ Restart</button>
</div>
</div>
</div><!-- /scene-container -->
</div><!-- /app -->
<script>
let currentScene = 0;
const totalScenes = 7;
// Particles
(function createParticles() {
const container = document.getElementById('particles');
for (let i = 0; i < 20; i++) {
const p = document.createElement('div');
p.className = 'particle';
const size = Math.random() * 8 + 3;
p.style.cssText = `
width:${size}px; height:${size}px;
left:${Math.random()*100}%;
animation-duration:${Math.random()*15+10}s;
animation-delay:${Math.random()*10}s;
opacity:0;
`;
container.appendChild(p);
}
})();
function startAnimation() {
const title = document.getElementById('title-screen');
title.style.opacity = '0';
setTimeout(() => {
title.style.display = 'none';
document.getElementById('app').style.display = 'block';
revealCards(0);
updateProgress();
}, 800);
}
function revealCards(sceneIndex) {
const scene = document.getElementById('scene-' + sceneIndex);
if (!scene) return;
// Reveal info-cards with stagger
const cards = scene.querySelectorAll('.info-card:not(.revealed)');
cards.forEach((card, i) => {
setTimeout(() => card.classList.add('revealed'), 150 + i * 180);
});
// Reveal overview steps
const steps = scene.querySelectorAll('.overview-step:not(.revealed)');
steps.forEach((step, i) => {
setTimeout(() => step.classList.add('revealed'), 200 + i * 200);
});
}
function updateProgress() {
const pct = ((currentScene) / (totalScenes - 1)) * 100;
document.getElementById('progress-fill').style.width = pct + '%';
document.getElementById('progress-label').innerHTML =
`Scene ${currentScene + 1} / ${totalScenes}`;
document.getElementById('btn-prev').disabled = currentScene === 0;
}
function showScene(index) {
document.querySelectorAll('.scene').forEach(s => s.classList.remove('active'));
const target = document.getElementById('scene-' + index);
if (target) {
target.classList.add('active');
window.scrollTo({ top: 0, behavior: 'smooth' });
revealCards(index);
updateProgress();
}
}
function nextScene() {
if (currentScene < totalScenes - 1) {
currentScene++;
showScene(currentScene);
}
}
function prevScene() {
if (currentScene > 0) {
currentScene--;
showScene(currentScene);
}
}
function restartAnimation() {
currentScene = 0;
// Reset all revealed states
document.querySelectorAll('.info-card, .overview-step').forEach(el => el.classList.remove('revealed'));
showScene(0);
}
</script>
</body>
</html>
ls -lh /home/daytona/workspace/radial-nerve-animation/index.html
index
HTML File Β· HTML
| Scene | Content |
|---|---|
| 1 β Course Overview | Animated SVG of the full radial nerve path from axilla β wrist with all 5 compression sites pulsing in sequence |
| 2 β Axilla Compression | Crutch/axillary pressure β complete radial palsy + triceps weakness (only site where triceps is affected). Animated wrist drop illustration. |
| 3 β Radial Groove (Spiral Canal) | Saturday night palsy / park bench palsy / humeral shaft fracture β wrist drop with triceps spared. Side-by-side level comparison diagram. |
| 4 β Radial Tunnel (Lat. Intermuscular Septum) | Fascial band compression β pain only, no motor/sensory deficit. Mimics lateral epicondylitis. |
| 5 β Arcade of Frohse (PIN) | Most common PIN compression site β LEAFS mnemonic fully illustrated. No wrist drop, no sensory loss, radial deviation on wrist extension. |
| 6 β Supinator Syndrome (Distal PIN) | Distal supinator exit compression β selective thumb/finger extensor paresis, no wrist drop, no sensory loss. |
| 7 β Full Summary Table + Mnemonics | Comparative table across all 5 sites + LEAFS mnemonic + references. |