<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>VIP 1–2–3 | Handbok för tränare</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serif;background:#f8f8f6;color:#1a1a1a;font-size:16px;line-height:1.7}
.site-header{background:#fff;border-bottom:1px solid #e0e0e0;padding:1rem 2rem;display:flex;align-items:center;gap:1rem;position:sticky;top:0;z-index:100}
.site-header h1{font-size:17px;font-weight:600;color:#1a1a1a}
.site-header span{font-size:13px;color:#888}
.main-nav{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap}
.main-nav button{padding:6px 14px;border:1px solid #ddd;border-radius:20px;background:transparent;color:#555;font-size:12px;cursor:pointer;transition:all 0.15s;white-space:nowrap}
.main-nav button:hover{background:#f0f0f0}
.main-nav button.on{background:#1a1a1a;color:#fff;border-color:#1a1a1a}
.container{max-width:900px;margin:0 auto;padding:2rem 1.5rem}
.page{display:none}.page.on{display:block}
/* Typography */
h1.pg-title{font-size:28px;font-weight:700;margin-bottom:6px}
h2.section{font-size:19px;font-weight:600;margin:2rem 0 0.6rem;padding-bottom:0.4rem;border-bottom:1px solid #e0e0e0}
h3.sub{font-size:15px;font-weight:600;margin:1.2rem 0 0.4rem}
p.lead{font-size:16px;color:#555;border-left:3px solid #ddd;padding-left:1rem;margin:1rem 0 1.5rem}
p.body{font-size:15px;color:#333;margin-bottom:0.75rem}
.muted{font-size:13px;color:#888;margin-bottom:1.5rem}
ul.list{padding-left:1.25rem;margin:0.5rem 0 1rem}
ul.list li{font-size:15px;color:#333;margin-bottom:4px}
/* Boxes */
.why-box{background:#e8f2fb;border-radius:8px;padding:1rem 1.25rem;margin:1rem 0}
.why-box .label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#185FA5;margin-bottom:4px}
.why-box p{font-size:14px;color:#0c447c;margin:0;line-height:1.65}
.warn-box{background:#fef3e2;border-radius:8px;padding:1rem 1.25rem;margin:1rem 0}
.warn-box .label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#854F0B;margin-bottom:4px}
.warn-box p{font-size:14px;color:#633806;margin:0;line-height:1.65}
.principle{border-left:4px solid #333;padding:0.65rem 1rem;margin:1rem 0;background:#f5f5f5;border-radius:0 6px 6px 0}
.principle p{font-size:14px;font-weight:600;margin:0}
/* VIP tags */
.vip-tag{display:inline-block;font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px;margin-right:6px;margin-bottom:6px}
.v1{background:#e8f2fb;color:#0c447c}
.v2{background:#fef3e2;color:#633806}
.v3{background:#e8f7f1;color:#085041}
/* Grid */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:1rem 0}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin:1rem 0}
.card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:1rem}
.card .clabel{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#888;margin-bottom:6px}
.card ul{padding-left:1rem;margin:0}
.card li{font-size:14px;color:#333}
.vip-card{padding:1.25rem}
.vip-card .num{font-size:22px;font-weight:700;margin-bottom:4px}
.vip-card .vtitle{font-size:14px;font-weight:600;margin-bottom:4px}
.vip-card .vdesc{font-size:13px;color:#666}
/* Sub-nav for chapters */
.sub-nav{display:flex;gap:6px;margin-bottom:2rem;flex-wrap:wrap;border-bottom:1px solid #e0e0e0;padding-bottom:0}
.sn{padding:8px 16px;border:none;background:transparent;color:#888;font-size:14px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .15s}
.sn.on{color:#1a1a1a;border-bottom:2px solid #1a1a1a;font-weight:600}
.chapter{display:none}.chapter.on{display:block}
/* Fel library */
.filter-row{display:flex;gap:6px;margin-bottom:1.25rem;flex-wrap:wrap}
.fb{padding:5px 14px;border:1px solid #ddd;border-radius:20px;background:#fff;color:#555;font-size:13px;cursor:pointer;transition:all .12s}
.fb:hover{background:#f0f0f0}
.fb.on{background:#1a1a1a;color:#fff;border-color:#1a1a1a}
.fel-list{display:flex;flex-direction:column;gap:8px}
.fel{background:#fff;border:1px solid #e0e0e0;border-radius:10px;overflow:hidden}
.fel-head{display:flex;align-items:center;gap:10px;padding:1rem 1.25rem;cursor:pointer;transition:background .1s}
.fel-head:hover{background:#f8f8f8}
.fel-num{font-size:12px;font-weight:600;color:#aaa;min-width:24px}
.fel-title{font-size:14px;font-weight:600;flex:1}
.fel-tags{display:flex;gap:4px;flex-shrink:0}
.lyft-tag{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px}
.lt-ryck{background:#e8f2fb;color:#0c447c}
.lt-vandning{background:#fef3e2;color:#633806}
.lt-overstot{background:#e8f7f1;color:#085041}
.chevron{font-size:11px;color:#aaa;transition:transform .2s;margin-left:4px}
.fel.open .chevron{transform:rotate(180deg)}
.fel-body{display:none;border-top:1px solid #f0f0f0}
.fel.open .fel-body{display:block}
.fel-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0}
.fel-col{padding:1rem 1.25rem;border-right:1px solid #f0f0f0}
.fel-col:last-child{border-right:none}
.col-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
.cl-obs{color:#185FA5}.cl-los{color:#1D9E75}.cl-int{color:#854F0B}
.fel-col p{font-size:14px;color:#333;line-height:1.6;margin:0}
/* APGUL */
.apgul-steps{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:1.5rem 0}
.apgul-step{background:#fff;border:1px solid #e0e0e0;border-radius:10px;padding:1rem;cursor:pointer;transition:all .15s;text-align:center}
.apgul-step:hover{border-color:#aaa}
.apgul-step.on{border-color:#1a1a1a;box-shadow:0 0 0 2px #1a1a1a}
.step-letter{font-size:28px;font-weight:700;margin-bottom:4px}
.step-name{font-size:12px;font-weight:600;margin-bottom:2px}
.step-sub{font-size:11px;color:#888}
.la{color:#185FA5}.lp{color:#1D9E75}.lg{color:#BA7517}.lu{color:#993C1D}.ll{color:#534AB7}
.step-panel{display:none;background:#fff;border:1px solid #e0e0e0;border-radius:10px;padding:1.5rem;margin-top:0}
.step-panel.on{display:block}
.mode-toggle{display:flex;gap:6px;margin-bottom:1rem}
.mt-btn{padding:5px 16px;border:1px solid #ddd;border-radius:20px;background:transparent;color:#555;font-size:13px;cursor:pointer;transition:all .12s}
.mt-btn.on{background:#1a1a1a;color:#fff;border-color:#1a1a1a}
.mode-panel{display:none}.mode-panel.on{display:block}
.checklist{list-style:none;padding:0;margin:0}
.checklist li{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:#333;padding:7px 0;border-bottom:1px solid #f0f0f0;line-height:1.5}
.checklist li:last-child{border-bottom:none}
.cb{width:16px;height:16px;border:1.5px solid #ccc;border-radius:4px;flex-shrink:0;margin-top:2px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:10px;color:transparent;transition:all .1s}
.cb.checked{background:#1a1a1a;color:#fff;border-color:#1a1a1a}
.log-note{font-size:13px;color:#888;margin:1rem 0 0.5rem;font-style:italic}
/* Protocol */
.proto-scale{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:1.5rem}
.scale-item{font-size:13px;color:#555}
.scale-item strong{color:#1a1a1a}
.proto-section{background:#fff;border:1px solid #e0e0e0;border-radius:10px;padding:1.25rem;margin-bottom:1rem}
.proto-section-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#888;margin-bottom:1rem}
.field{margin-bottom:12px}
.field label{font-size:13px;color:#555;display:block;margin-bottom:4px}
.field input,.field select,.field textarea{width:100%;font-size:14px;border:1px solid #ddd;border-radius:6px;padding:8px 12px;color:#1a1a1a;background:#fff;font-family:inherit}
.field textarea{resize:vertical;min-height:60px;line-height:1.5}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.rating-row{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.rating-row span{font-size:13px;color:#555;min-width:160px}
.stars{display:flex;gap:3px}
.star{width:30px;height:30px;border:1px solid #ddd;border-radius:5px;background:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#aaa;transition:all .1s}
.star.on{background:#fef3e2;border-color:#BA7517;color:#633806}
.btn-row{display:flex;gap:8px;margin-top:1rem;flex-wrap:wrap}
.btn{padding:9px 22px;border:1px solid #ddd;border-radius:8px;background:#fff;color:#333;font-size:14px;cursor:pointer;font-family:inherit;transition:all .12s}
.btn:hover{background:#f0f0f0}
.btn.primary{background:#1a1a1a;color:#fff;border-color:#1a1a1a}
.btn.primary:hover{background:#333}
.summary-box{background:#f5f5f5;border:1px solid #e0e0e0;border-radius:10px;padding:1.25rem;margin-top:1rem;display:none}
.summary-box.on{display:block}
.summary-box pre{font-family:monospace;font-size:12px;color:#555;white-space:pre-wrap;line-height:1.7}
.copy-btn{margin-top:0.75rem;padding:7px 16px;border:1px solid #ddd;border-radius:6px;background:#fff;color:#333;font-size:13px;cursor:pointer;font-family:inherit}
@media(max-width:640px){
.grid2,.grid3,.fel-grid,.apgul-steps{grid-template-columns:1fr}
.row2,.row3{grid-template-columns:1fr}
.fel-col{border-right:none;border-bottom:1px solid #f0f0f0}
.fel-col:last-child{border-bottom:none}
.apgul-steps{grid-template-columns:repeat(3,1fr)}
.main-nav{display:none}
.site-header h1{font-size:15px}
}
</style>
</head>
<body>
<header class="site-header">
<div>
<h1>VIP 1–2–3</h1>
<span>Handbok för tränare – olympisk tyngdlyftning</span>
</div>
<nav class="main-nav">
<button class="on" onclick="showPage('handbok',this)">Handbok</button>
<button onclick="showPage('fel',this)">Felbibliotek</button>
<button onclick="showPage('apgul',this)">APGUL</button>
<button onclick="showPage('protokoll',this)">Analysprotokoll</button>
</nav>
</header>
<!-- ══════════════════════════════════════════
HANDBOK
══════════════════════════════════════════ -->
<div class="page on" id="pg-handbok">
<div class="container">
<div class="sub-nav">
<button class="sn on" onclick="showChapter('intro',this)">Inledning</button>
<button class="sn" onclick="showChapter('ryck',this)">Ryck</button>
<button class="sn" onclick="showChapter('vandning',this)">Vändning</button>
<button class="sn" onclick="showChapter('overstot',this)">Överstöt</button>
</div>
<!-- INTRO -->
<div class="chapter on" id="ch-intro">
<h1 class="pg-title">VIP 1–2–3</h1>
<p class="muted">Handbok för tränare – olympisk tyngdlyftning</p>
<p class="lead">Olympisk tyngdlyftning är explosiv och komplex. Varje lyft sker på under två sekunder, och möjligheten att analysera och korrigera i realtid är starkt begränsad. VIP-systemet ger tränaren ett strukturerat sätt att se, förstå och agera.</p>
<div class="grid3">
<div class="card vip-card" style="background:#e8f2fb;border-color:#b5d4f4">
<div class="num" style="color:#185FA5">VIP 1</div>
<div class="vtitle">Start</div>
<div class="vdesc">Skapar förutsättningarna för hela lyftet.</div>
</div>
<div class="card vip-card" style="background:#fef3e2;border-color:#fac775">
<div class="num" style="color:#BA7517">VIP 2</div>
<div class="vtitle">Kraft & timing</div>
<div class="vdesc">Där kraften utvecklas och riktas.</div>
</div>
<div class="card vip-card" style="background:#e8f7f1;border-color:#9fe1cb">
<div class="num" style="color:#1D9E75">VIP 3</div>
<div class="vtitle">Fixering</div>
<div class="vdesc">Stabiliserar resultatet.</div>
</div>
</div>
<h2 class="section">Varför tre positioner?</h2>
<p class="body">Mellan VIP 1 och VIP 3 sker hundratals små rörelser. Vi kan inte observera och korrigera allt. Däremot vet vi att kvaliteten i dessa tre positioner är avgörande för om lyftet lyckas – och att de hänger ihop: ett fel i VIP 1 skapar ofta problem i VIP 2, som i sin tur skapar problem i VIP 3.</p>
<p class="body">Som tränare börjar du alltid analysen i VIP 1 och arbetar framåt. Problem i fixeringen spåras nästan alltid bakåt till en tidigare fas.</p>
<div class="principle"><p>Analysera alltid i ordning: VIP 1 → VIP 2 → VIP 3. Problem spåras bakåt – börja aldrig i fixeringen.</p></div>
<h2 class="section">Vad modellen är – och inte är</h2>
<p class="body">VIP beskriver positioner och principer – inte hela rörelsen. Snabbhet, rytm och timing är viktiga delar av lyftet men behandlas separat. Exakta vinklar och positioner varierar mellan lyftare beroende på kroppsbyggnad och rörlighet. Det som inte varierar är principerna.</p>
<h2 class="section">Tre syften</h2>
<h3 class="sub">Analysverktyg</h3>
<p class="body">VIP bryter ner lyftet i hanterbara delar. Du identifierar snabbt var problemet uppstår och vad som orsakar det.</p>
<h3 class="sub">Inlärningsverktyg</h3>
<p class="body">VIP ger tydliga mål för lyftaren och skapar en gemensam förståelse mellan tränare och aktiv.</p>
<h3 class="sub">Gemensamt språk</h3>
<p class="body">Alla tränare inom organisationen analyserar på samma sätt. Det gör kommunikation, handledning och utbildning enklare och mer precis.</p>
</div>
<!-- RYCK -->
<div class="chapter" id="ch-ryck">
<h1 class="pg-title">Ryck</h1>
<p class="muted"><span class="vip-tag v1">VIP 1 Start</span><span class="vip-tag v2">VIP 2 Kraft & timing</span><span class="vip-tag v3">VIP 3 Fixering</span></p>
<p class="lead">Ryck är en explosiv helrörelse där stången lyfts direkt från golv till en stabil position på raka armar över huvudet. Utfallet avgörs av samspelet mellan startposition, kraftutveckling och mottagning.</p>
<h2 class="section">VIP 1 – Start</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Startpositionen definierar kraftens riktning och lyftarens balans genom hela lyftet. En felaktig start kan inte korrigeras i efterhand – den följer med in i kraftfasen och fixeringen.</p></div>
<h3 class="sub">Konstanter – gäller alltid</h3>
<ul class="list"><li>Stången direkt över mittfot</li><li>Stången nära kroppen</li><li>Axeln över eller något framför stången</li><li>Stabil, spänd bål innan lyftet påbörjas</li><li>Raka, avslappnade armar</li><li>Samma grepp och fotställning vid varje lyft</li></ul>
<h3 class="sub">Variabler – accepterade individuella skillnader</h3>
<ul class="list"><li>Höft-, knä- och fotvinkel</li><li>Balanspunkt inom foten</li><li>Knäriktning</li></ul>
<div class="grid2">
<div class="card"><div class="clabel">Fast start</div><ul><li>Stång på golv eller block</li><li>Vanligast i träning och tävling</li></ul></div>
<div class="card"><div class="clabel">Hängande start</div><ul><li>Stång i armarna</li><li>Kräver god timing och kontroll</li></ul></div>
<div class="card"><div class="clabel">Statisk</div><ul><li>Position satt helt innan lyftet</li></ul></div>
<div class="card"><div class="clabel">Dynamisk / reaktiv</div><ul><li>Position skapas i rörelse</li><li>Utnyttjar kroppens fjädereffekt</li></ul></div>
</div>
<div class="principle"><p>Starten kan inte korrigeras i efterhand – den måste vara rätt från början.</p></div>
<h2 class="section">VIP 2 – Kraft & timing</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Det är i denna fas som kraften faktiskt skapas och riktas. En balanserad sträckning håller stången nära kroppen och ger en effektiv kraftlinje uppåt. En obalanserad sträckning leder till att stången rör sig bort från kroppen och att mottagningen blir svår att kontrollera.</p></div>
<div class="warn-box"><div class="label">Viktigt att förstå</div><p>VIP 2 är inte en statisk position – det är en rörelse. Det du bedömer är om rörelsen har rätt kvalitet: är sträckningen balanserad, håller stången rätt riktning, är kontakten i höften en naturlig del av rörelsen snarare än ett aktivt slag?</p></div>
<h3 class="sub">Det här ska du se</h3>
<ul class="list"><li>Kraftuppbyggnad börjar tidigt – inte vid höften</li><li>Axeln rör sig bakåt, höften framåt, knäna bakåt, foten stabil</li><li>Stången håller sig nära kroppen</li><li>Balansen bibehålls över foten</li><li>Kontakt i höften uppstår naturligt – lyftaren strävar inte aktivt mot den</li></ul>
<div class="grid2">
<div class="card"><div class="clabel">Balanserad sträckning</div><ul><li>Direkt nedgång under stången</li><li>Minimal korrigering i luften</li><li>Stabil fixering</li></ul></div>
<div class="card"><div class="clabel">Obalanserad sträckning</div><ul><li>Stången pendlar fram eller bak</li><li>Lyftaren måste korrigera i luften</li><li>Svår eller instabil fixering</li></ul></div>
</div>
<div class="principle"><p>Om fixeringen är problematisk – börja analysen i VIP 2, inte i fixeringen.</p></div>
<h2 class="section">VIP 3 – Fixering</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Fixeringen är det moment där lyftet avgörs. Men den är också det tydligaste kvittot på kvaliteten i VIP 1 och VIP 2. En lyftare som konsekvent har instabila fixeringar har nästan alltid ett problem tidigare i rörelsen.</p></div>
<h3 class="sub">Det här ska du se</h3>
<ul class="list"><li>Full sträckning i armbågarna – inga böjda armar</li><li>Aktiv skuldra – lyftaren pressar aktivt upp mot stången</li><li>Stabil bål</li><li>Stången direkt över mittfot</li><li>Balans i hela foten</li></ul>
<h3 class="sub">Djupvariationer</h3>
<ul class="list"><li>Power – hög mottagning, liten böjning i knä</li><li>Partiell – knä böjt till cirka parallell</li><li>Djup – full squat-position</li></ul>
<div class="warn-box"><div class="label">Kom ihåg</div><p>Fixeringen är dynamisk i de första ögonblicken – lyftaren bromsar stångens rörelse och hittar balansen. Det du bedömer är om positionen snabbt blir stabil, utan stora korrigeringar.</p></div>
<div class="principle"><p>Problem i fixeringen beror nästan alltid på VIP 2 – börja alltid analysen där.</p></div>
</div>
<!-- VÄNDNING -->
<div class="chapter" id="ch-vandning">
<h1 class="pg-title">Vändning</h1>
<p class="muted"><span class="vip-tag v1">VIP 1 Start</span><span class="vip-tag v2">VIP 2 Kraft & timing</span><span class="vip-tag v3">VIP 3 Front rack</span></p>
<p class="lead">Vändning kräver att kraft genereras från golvet, riktas korrekt uppåt och tas emot stabilt på axlarna i front rack. Principerna är desamma som i ryck – men fixeringen och greppet skiljer sig.</p>
<h2 class="section">VIP 1 – Start</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Precis som i ryck definierar startpositionen kraftens riktning. Det smalare greppet påverkar axelns position något – men principerna för bål, balans och stångläge är identiska.</p></div>
<h3 class="sub">Konstanter</h3>
<ul class="list"><li>Stången direkt över mittfot</li><li>Stången nära kroppen</li><li>Axeln över eller något framför stången</li><li>Stabil, spänd bål</li><li>Raka, avslappnade armar</li><li>Reproducerbart grepp och fotställning</li></ul>
<h3 class="sub">Vad som skiljer sig från ryck</h3>
<ul class="list"><li>Greppet är smalare – lyftgrepp istället för snatchgrepp</li><li>Det smalare greppet påverkar axelns startposition något</li></ul>
<div class="principle"><p>Starten definierar kraftens riktning och kan inte korrigeras i efterhand.</p></div>
<h2 class="section">VIP 2 – Kraft & timing</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Samma princip som i ryck. En obalanserad sträckning leder till att stången hamnar fel i front rack, vilket gör uppresningen avsevärt svårare.</p></div>
<h3 class="sub">Det här ska du se</h3>
<ul class="list"><li>Kraftuppbyggnad börjar tidigt</li><li>Axeln bakåt, höften framåt, knäna bakåt, foten stabil</li><li>Stången nära kroppen</li><li>Balans bibehållen</li><li>Kontakt i höften uppstår naturligt</li></ul>
<div class="grid2">
<div class="card"><div class="clabel">Balanserad sträckning</div><ul><li>Stången landar rätt på axlarna</li><li>Minimal korrigering i rack</li><li>Uppresning möjlig direkt</li></ul></div>
<div class="card"><div class="clabel">Obalanserad sträckning</div><ul><li>Stången fram eller bak på axlarna</li><li>Instabil front rack</li><li>Uppresning försvåras</li></ul></div>
</div>
<div class="principle"><p>Problem i front rack spåras nästan alltid till sträckningen i VIP 2.</p></div>
<h2 class="section">VIP 3 – Fixering (front rack)</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Front rack är startpositionen för uppresningen. En instabil rack tvingar lyftaren att korrigera under uppresningen, vilket kostar tid och kraft.</p></div>
<h3 class="sub">Det här ska du se</h3>
<ul class="list"><li>Stången vilar på axlarna – inte i händerna</li><li>Armbågarna framåt eller snett framåt</li><li>Upprätt överkropp</li><li>Stabil bål</li><li>Balans över hela foten</li></ul>
<div class="warn-box"><div class="label">Vanligt fel</div><p>Lyftaren tar emot stången i händerna snarare än på axlarna – ofta ett tecken på bristande rörlighet i handleder eller axlar.</p></div>
<div class="principle"><p>En stabil front rack direkt vid mottagning är tecknet på att VIP 1 och VIP 2 fungerade.</p></div>
</div>
<!-- ÖVERSTÖT -->
<div class="chapter" id="ch-overstot">
<h1 class="pg-title">Överstöt</h1>
<p class="muted"><span class="vip-tag v1">VIP 1 Rack</span><span class="vip-tag v2">VIP 2 Dip & drive</span><span class="vip-tag v3">VIP 3 Fixering i utfall</span></p>
<p class="lead">Överstöt skiljer sig från ryck och vändning – ingen dragfas från golv. Fokus ligger på att organisera kroppen i rack, skapa kraft genom dipp och drive, och stabilisera stången overhead i utfall.</p>
<h2 class="section">VIP 1 – Rack position</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Kraften kommer från dippen, inte från golvet. Stabiliteten i VIP 1 är direkt avgörande för kraftens riktning i VIP 2. En rörlig stång, framåtfallande överkropp eller felaktig balans kopieras rakt in i dippen.</p></div>
<h3 class="sub">Det här ska du se</h3>
<ul class="list"><li>Stången på axlarna, nära halsen</li><li>Stången helt stilla innan dippen påbörjas</li><li>Upprätt överkropp</li><li>Blicken rakt fram</li><li>Balans över mittfot</li></ul>
<div class="grid2">
<div class="card"><div class="clabel">Smalt grepp</div><ul><li>Stabilare rack-position</li><li>Längre väg till lockout</li></ul></div>
<div class="card"><div class="clabel">Brett grepp</div><ul><li>Kortare väg till lockout</li><li>Högre krav på axlar och handleder</li></ul></div>
</div>
<div class="principle"><p>En rörlig stång i starten förstör hela kraftkedjan. Stången måste vara stilla.</p></div>
<h2 class="section">VIP 2 – Dip & drive</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Dippen lagrar energi – driven frigör den. En dipp där överkroppen faller framåt eller stången rör sig ger en drive med fel kraftriktning, vilket gör lockout och utfall extremt svårt att kontrollera.</p></div>
<h3 class="sub">Dipp – det här ska du se</h3>
<ul class="list"><li>Rörelsen är vertikal – överkroppen får inte falla framåt</li><li>Stången stabil på axlarna under hela dippen</li><li>Knäna rör sig framåt i linje med foten</li><li>Balans över hela foten</li></ul>
<h3 class="sub">Drive – det här ska du se</h3>
<ul class="list"><li>Explosiv sträckning direkt ur dippen</li><li>Kraftriktningen är vertikal</li><li>Balansen bibehålls</li></ul>
<div class="warn-box"><div class="label">Vanliga fel</div><p>Överkroppen faller framåt i dippen. Stången rör sig från axlarna. Drivet sker snett istället för vertikalt. Alla tre leder till problem i fixeringen.</p></div>
<div class="principle"><p>Kvaliteten i drivet avgörs av kvaliteten i dippen. Börja analysen i dippen.</p></div>
<h2 class="section">VIP 3 – Fixering i utfall</h2>
<div class="why-box"><div class="label">Varför det spelar roll</div><p>Utfallspositionen är det tydligaste kvittot på dip och drive. En effektiv kraftfas ger minimal korrigering i luften och en stabil landning.</p></div>
<h3 class="sub">Överkropp</h3>
<ul class="list"><li>Raka armar – full lockout</li><li>Aktiv skuldra – lyftaren pressar upp mot stången</li><li>Stabil bål</li><li>Stången direkt över mittlinjen</li></ul>
<h3 class="sub">Underkropp</h3>
<ul class="list"><li>Framfot platt mot golvet</li><li>Bakfot på tå</li><li>Knäna böjda</li><li>Balansen fördelad jämnt mellan benen</li></ul>
<div class="principle"><p>Problem i utfall beror nästan alltid på dip och drive – börja alltid analysen i VIP 2.</p></div>
</div>
</div>
</div>
<!-- ══════════════════════════════════════════
FELBIBLIOTEK
══════════════════════════════════════════ -->
<div class="page" id="pg-fel">
<div class="container">
<h1 class="pg-title">Felbibliotek</h1>
<p class="muted">30 vanliga fel kopplade till VIP – med lösning och intention/fokus. Klicka på ett fel för att öppna det.</p>
<div class="filter-row">
<button class="fb on" onclick="filterFel('alla',this)">Alla lyft</button>
<button class="fb" onclick="filterFel('ryck',this)">Ryck</button>
<button class="fb" onclick="filterFel('vandning',this)">Vändning</button>
<button class="fb" onclick="filterFel('overstot',this)">Överstöt</button>
<button class="fb" onclick="filterVip('1',this)">VIP 1</button>
<button class="fb" onclick="filterVip('2',this)">VIP 2</button>
<button class="fb" onclick="filterVip('3',this)">VIP 3</button>
</div>
<div class="fel-list" id="felList"></div>
</div>
</div>
<!-- ══════════════════════════════════════════
APGUL
══════════════════════════════════════════ -->
<div class="page" id="pg-apgul">
<div class="container">
<h1 class="pg-title">APGUL-processen</h1>
<p class="muted">Tränare och lyftare arbetar tillsammans genom alla steg. Välj förprogrammerat (planeras i förväg) eller agilt (justeras i realtid).</p>
<div class="principle"><p>Förprogrammerad: A och P görs innan träning. Agil: alla steg kan ske och upprepas under pågående session.</p></div>
<div class="apgul-steps">
<div class="apgul-step" onclick="showStep(0,this)"><div class="step-letter la">A</div><div class="step-name">Analysera</div><div class="step-sub">Tränare + lyftare</div></div>
<div class="apgul-step" onclick="showStep(1,this)"><div class="step-letter lp">P</div><div class="step-name">Planera</div><div class="step-sub">Tränare + lyftare</div></div>
<div class="apgul-step" onclick="showStep(2,this)"><div class="step-letter lg">G</div><div class="step-name">Genomföra</div><div class="step-sub">Lyftaren genomför</div></div>
<div class="apgul-step" onclick="showStep(3,this)"><div class="step-letter lu">U</div><div class="step-name">Utvärdera</div><div class="step-sub">Tränare + lyftare</div></div>
<div class="apgul-step" onclick="showStep(4,this)"><div class="step-letter ll">L</div><div class="step-name">Logga</div><div class="step-sub">Tränare + lyftare</div></div>
</div>
<div id="stepPanels"></div>
</div>
</div>
<!-- ══════════════════════════════════════════
ANALYSPROTOKOLL
══════════════════════════════════════════ -->
<div class="page" id="pg-protokoll">
<div class="container">
<h1 class="pg-title">Analysprotokoll</h1>
<p class="muted">Fyll i en lyftare per session. Tränare och lyftare arbetar tillsammans.</p>
<div class="proto-scale">
<span class="scale-item"><strong>1</strong> Ej uppfyllt</span>
<span class="scale-item"><strong>2</strong> Stora brister</span>
<span class="scale-item"><strong>3</strong> Delvis uppfyllt</span>
<span class="scale-item"><strong>4</strong> Godkänt</span>
<span class="scale-item"><strong>5</strong> Bra</span>
<span class="scale-item"><strong>6</strong> Konsekvent</span>
</div>
<div class="proto-section">
<div class="proto-section-title">Grunduppgifter</div>
<div class="row2">
<div class="field"><label>Lyftare</label><input type="text" id="p-lyftare" placeholder="Namn"></div>
<div class="field"><label>Datum</label><input type="text" id="p-datum" placeholder="ÅÅÅÅ-MM-DD"></div>
</div>
<div class="row3">
<div class="field"><label>Lyft</label><select id="p-lyft"><option>Ryck</option><option>Vändning</option><option>Överstöt</option><option>Ryck + Vändning</option><option>Stöt (komplex)</option></select></div>
<div class="field"><label>Belastning</label><input type="text" id="p-belastning" placeholder="kg / %"></div>
<div class="field"><label>Antal lyft</label><input type="text" id="p-antal" placeholder="t.ex. 6"></div>
</div>
</div>
<div class="proto-section" style="border-top:3px solid #185FA5">
<div class="proto-section-title" style="color:#185FA5">VIP 1 – Start</div>
<div class="rating-row"><span>Stång över mittfot</span><div class="stars" id="r-s1a"></div></div>
<div class="rating-row"><span>Axel framför stång</span><div class="stars" id="r-s1b"></div></div>
<div class="rating-row"><span>Stabil bål</span><div class="stars" id="r-s1c"></div></div>
<div class="rating-row"><span>Reproducerbarhet</span><div class="stars" id="r-s1d"></div></div>
<div class="field"><label>Observationer</label><textarea id="p-obs1" placeholder="Vad ser du?"></textarea></div>
<div class="field"><label>Problem</label><textarea id="p-prob1" placeholder="Specifik avvikelse..."></textarea></div>
<div class="field"><label>Möjlig orsak</label><textarea id="p-ors1" placeholder="Rörlighet, styrka, förståelse..."></textarea></div>
</div>
<div class="proto-section" style="border-top:3px solid #BA7517">
<div class="proto-section-title" style="color:#BA7517">VIP 2 – Kraft & timing</div>
<div class="rating-row"><span>Kraftuppbyggnad börjar tidigt</span><div class="stars" id="r-s2a"></div></div>
<div class="rating-row"><span>Balanserad sträckning</span><div class="stars" id="r-s2b"></div></div>
<div class="rating-row"><span>Stång nära kroppen</span><div class="stars" id="r-s2c"></div></div>
<div class="rating-row"><span>Balans bibehållen</span><div class="stars" id="r-s2d"></div></div>
<div class="field"><label>Observationer</label><textarea id="p-obs2" placeholder="Vad ser du?"></textarea></div>
<div class="field"><label>Problem</label><textarea id="p-prob2" placeholder="T.ex. stång pendlar, lyftaren faller bakåt..."></textarea></div>
<div class="field"><label>Möjlig orsak</label><textarea id="p-ors2" placeholder="Timing, VIP 1-fel som följer med..."></textarea></div>
</div>
<div class="proto-section" style="border-top:3px solid #1D9E75">
<div class="proto-section-title" style="color:#1D9E75">VIP 3 – Fixering</div>
<div class="rating-row"><span>Stabil position direkt</span><div class="stars" id="r-s3a"></div></div>
<div class="rating-row"><span>Aktiv skuldra / rack</span><div class="stars" id="r-s3b"></div></div>
<div class="rating-row"><span>Balans över foten</span><div class="stars" id="r-s3c"></div></div>
<div class="rating-row"><span>Ingen korrigering behövs</span><div class="stars" id="r-s3d"></div></div>
<div class="field"><label>Observationer</label><textarea id="p-obs3" placeholder="Vad ser du?"></textarea></div>
<div class="field"><label>Problem</label><textarea id="p-prob3" placeholder="T.ex. instabil, stång fram/bak..."></textarea></div>
<div class="field"><label>Ursprung (VIP 1 eller 2?)</label><textarea id="p-ors3" placeholder="Problem i fixering spåras bakåt..."></textarea></div>
</div>
<div class="proto-section">
<div class="proto-section-title">Sammanfattning & åtgärd</div>
<div class="field"><label>Prioriterat fokus nästa träning</label><textarea id="p-fokus" placeholder="Vilket VIP, vilket problem, vilken övning..."></textarea></div>
<div class="field"><label>Övning / drill</label><textarea id="p-drill" placeholder="T.ex. ryck från block under knä, slow-pull..."></textarea></div>
<div class="field"><label>Cue till lyftaren</label><textarea id="p-cue" placeholder="Kort, konkret, handlingsstyrd..."></textarea></div>
</div>
<div class="btn-row">
<button class="btn primary" onclick="genProto()">Visa sammanfattning</button>
<button class="btn" onclick="clearProto()">Rensa</button>
</div>
<div class="summary-box" id="protoSummary">
<pre id="protoText"></pre>
<button class="copy-btn" onclick="copyProto()">Kopiera text</button>
</div>
</div>
</div>
<script>
// ── PAGE NAV ──
function showPage(id,btn){
document.querySelectorAll('.page').forEach(p=>p.classList.remove('on'));
document.querySelectorAll('.main-nav button').forEach(b=>b.classList.remove('on'));
document.getElementById('pg-'+id).classList.add('on');
btn.classList.add('on');
window.scrollTo(0,0);
}
function showChapter(id,btn){
document.querySelectorAll('.chapter').forEach(c=>c.classList.remove('on'));
document.querySelectorAll('.sn').forEach(b=>b.classList.remove('on'));
document.getElementById('ch-'+id).classList.add('on');
btn.classList.add('on');
window.scrollTo(0,0);
}
// ── FEL DATA ──
const fels=[
{lyft:'ryck',vip:'1',titel:'Stången för långt fram vid start',obs:'Axeln är bakom stången – tyngden hamnar på tårna direkt.',los:'Kontrollera stångposition över mittfot. Använd block för att öva rätt läge.',int:'Känn tyngden mitt i foten. Stången direkt under axeln.'},
{lyft:'ryck',vip:'1',titel:'Inkonsekvent startposition',obs:'Olika grepp eller fotbredd lyft för lyft – omöjligt att isolera felkälla.',los:'Definiera en reproducerbar startposition. Filma och jämför. Markera på golvet.',int:'Bygg samma position varje gång. Rutinen är en del av teknikträningen.'},
{lyft:'ryck',vip:'1',titel:'Bål aktiveras för sent',obs:'Lyftaren spänner bålen efter att lyftet startat – positionen kollapsar tidigt.',los:'Öva aktiv bålspänning innan lyftet. Andning och spänning är ett eget moment.',int:'Spänn innan du rör stången. Andas in, bygg trycket – sedan lyfter du.'},
{lyft:'ryck',vip:'2',titel:'Stången pendlar framåt vid höften',obs:'Stången rör sig bort från kroppen vid höftkontakt – kraftlinjen bryts.',los:'Ryck från block under knä. Fokus på att hålla stången nära låret hela vägen.',int:'Låt stången klia uppför låret. Håll den nära – hela vägen.'},
{lyft:'ryck',vip:'2',titel:'Lyftaren slår aktivt med höften',obs:'Aktivt slag mot stången störer kraftlinjen snarare än förstärker den.',los:'Slow-pull utan aktiv höftkontakt. Höftkontakten är en konsekvens, inte ett mål.',int:'Sträck upp – stången träffar höften på vägen. Du sträcker, inte slår.'},
{lyft:'ryck',vip:'2',titel:'Obalanserad sträckning – faller bakåt',obs:'Överkroppen kastar sig bakåt – stången flyger framåt.',los:'Hopp med fokus på vertikal sträckning. Ryck från knähöjd.',int:'Sträck upp – inte bakåt. Känn att du hoppar rakt.'},
{lyft:'ryck',vip:'2',titel:'Börjar sträcka för sent',obs:'Kraftuppbyggnad börjar vid höften istället för tidigt – för låg stångfart.',los:'Ryck från mittlår. Fokus på att kraftinitieringen börjar tidigt.',int:'Börja sträcka innan stången når höften – bygg fart på vägen upp.'},
{lyft:'ryck',vip:'3',titel:'Passiv skuldra vid mottagning',obs:'Lyftaren hänger i leden istället för att pressa upp – instabil fixering.',los:'Overhead squat med pauser. Fokus på aktiv skuldra.',int:'Pressa upp mot stången när du tar emot. Axeln är aktiv – inte passiv.'},
{lyft:'ryck',vip:'3',titel:'Fixering bakom mittlinjen',obs:'Stången hamnar bakom huvudet – lyftaren lutar framåt.',los:'Spåra till VIP 2. Overhead squat för rätt stångposition.',int:'Stången direkt över foten när du tar emot.'},
{lyft:'ryck',vip:'3',titel:'Hoppar ur positionen vid mottagning',obs:'Lyftaren tar flera steg – stången inte under kontroll vid landning.',los:'Power snatch med paus i mottagningen.',int:'Landa och stanna. Balansen ska vara klar innan du reser dig.'},
{lyft:'vandning',vip:'1',titel:'Stången för långt fram vid start',obs:'Axeln bakom stången – tyngden på tårna, kraftlinjen felaktig.',los:'Stång över mittfot, axel framför. Kontrollera med sidobild.',int:'Känn tyngden mitt i foten. Axeln är framför stången.'},
{lyft:'vandning',vip:'1',titel:'Armbågarna låsta nedåt vid start',obs:'Kan inte rotera armbågarna tillräckligt snabbt – front rack misslyckas.',los:'Öva armbågsrotation separat. Kontrollera handledsrörlighet.',int:'Armbågarna avslappnade vid start – de ska rotera snabbt upp.'},
{lyft:'vandning',vip:'1',titel:'Inkonsekvent fotbredd',obs:'Olika stance lyft för lyft – påverkar kraftlinjen och front rack.',los:'Definiera fotbredd, markera på golvet. Film och jämförelse.',int:'Samma fotposition varje lyft. Det är en del av tekniken.'},
{lyft:'vandning',vip:'2',titel:'Stången pendlar framåt vid höften',obs:'Stången rör sig bort från kroppen – kraftlinjen bryts.',los:'Vändning från block under knä med fokus på lårkontakt.',int:'Stången glider uppför låret – håll den nära hela vägen.'},
{lyft:'vandning',vip:'2',titel:'Överkroppen faller framåt i sträckningen',obs:'Lyftaren lutar framåt – stången hamnar för långt fram i front rack.',los:'Slow-pull vändning. Fokus på att axeln rör sig bakåt.',int:'Axeln bak, höften fram. Sträck upp och lite bakåt.'},
{lyft:'vandning',vip:'2',titel:'Börjar sträcka för sent',obs:'Kraften byggs för sent – stången når inte fart för djup mottagning.',los:'Vändning från mittlår. Kraftuppbyggnad börjar tidigt.',int:'Bygg fart tidigt. Kraftinitieringen startar vid knähöjd.'},
{lyft:'vandning',vip:'2',titel:'Stången slår mot kroppen',obs:'Hård okontrollerad höftkontakt stör kraftlinjen.',los:'Slow-pull med fokus på flytande rörelse, inte slag.',int:'Mjuk kontakt – stången glider, den slår inte.'},
{lyft:'vandning',vip:'3',titel:'Armbågarna för låga i front rack',obs:'Stången i händerna – instabilt och energikrävande för uppresning.',los:'Front squat med höga armbågar. Kontrollera handleds- och axelrörlighet.',int:'Armbågarna upp direkt när stången landar. Stången på axlarna.'},
{lyft:'vandning',vip:'3',titel:'Överkroppen faller framåt i front rack',obs:'Lyftaren kompenserar för stång för långt fram – svårt att resa sig.',los:'Spåra till VIP 2. Front squat med vertikal överkropp.',int:'Överkroppen upprätt i mottagningen. Armbågarna leder uppresningen.'},
{lyft:'vandning',vip:'3',titel:'Balansen bakåt vid landning',obs:'Lyftaren faller bakåt – stången för långt bak på axlarna.',los:'Spåra till VIP 2. Power clean med fokus på att stanna i mottagningen.',int:'Landa och stanna. Balansen klar i samma ögonblick som du tar emot.'},
{lyft:'overstot',vip:'1',titel:'Stången rör sig vid dipp-start',obs:'Lyftaren börjar dippa innan stången är stabil – kraftlinjen störs.',los:'Pausa i rack-position. Öva med lätt belastning och fokus på stillastående stång.',int:'Stången helt stilla innan du börjar dippa. Det är ett eget moment.'},
{lyft:'overstot',vip:'1',titel:'Överkroppen inte upprätt i rack',obs:'Lyftaren lutar framåt – dippen kan inte bli vertikal.',los:'Kontrollera armbågsposition och bål. Front squat för upprätt överkropp.',int:'Upprätt rygg, blick framåt. Dippen startar från vertikal position.'},
{lyft:'overstot',vip:'1',titel:'Balansen för långt fram i rack',obs:'Lyftaren på tårna – dippen kan inte bli vertikal.',los:'Kontrollera fotposition och armbågsläge.',int:'Känn tyngden i hela foten – häl, mitt och tå.'},
{lyft:'overstot',vip:'2',titel:'Överkroppen faller framåt i dippen',obs:'Det vanligaste felet – dippen inte vertikal, kraften riktas snett.',los:'Push press med vertikal dipp. Dippa mot vägg. Sänk vikten.',int:'Dippen går rakt ned. Knäna framåt, överkroppen stannar upprätt.'},
{lyft:'overstot',vip:'2',titel:'Stången rör sig vid dippen',obs:'Stången studsar eller glider – kraften förloras.',los:'Isolera dippen utan drive. Öva djup dipp med stabil stång.',int:'Stången stilla under hela dippen. Bara kroppen rör sig.'},
{lyft:'overstot',vip:'2',titel:'För långsam dipp – förlorar elasticitet',obs:'Kontrollerad men långsam dipp – svagt drive.',los:'Snabbare dipp med lättare vikt. Fokus på explosiv vändpunkt.',int:'Dippen är snabb. Vändpunkten skapar farten.'},
{lyft:'overstot',vip:'2',titel:'Drivet sker för tidigt',obs:'Lyftaren driver innan botten av dippen – förlorar lagrad energi.',los:'Dipp och drive med paus i botten.',int:'Botten av dippen är startskottet för drivet. Inte innan.'},
{lyft:'overstot',vip:'3',titel:'Passiv skuldra vid lockout',obs:'Lyftaren hänger i axelleden – stången instabil overhead.',los:'Overhead squat med pauser. Aktiv skuldra mot taket.',int:'Pressa upp mot stången vid lockout. Axeln är aktiv.'},
{lyft:'overstot',vip:'3',titel:'Stången hamnar framför mittlinjen',obs:'Lyftaren tar emot stången framför sig – instabilt.',los:'Spåra till VIP 2. Push press med vertikal kraftlinje.',int:'Stången direkt över foten i utfallet.'},
{lyft:'overstot',vip:'3',titel:'Framfoten lyfts vid utfall',obs:'Lyftaren landar på tårna – instabilt.',los:'Öva utfall separat. Fokus på platt framfot.',int:'Framfoten landar platt. Hälen träffar golvet direkt.'},
];
let fFilter={lyft:'alla',vip:'alla'};
function renderFel(){
const list=document.getElementById('felList');
list.innerHTML='';
const shown=fels.filter(f=>(fFilter.lyft==='alla'||f.lyft===fFilter.lyft)&&(fFilter.vip==='alla'||f.vip===fFilter.vip));
shown.forEach((f,i)=>{
const lc={ryck:'lt-ryck',vandning:'lt-vandning',overstot:'lt-overstot'}[f.lyft];
const ln={ryck:'Ryck',vandning:'Vändning',overstot:'Överstöt'}[f.lyft];
const el=document.createElement('div');
el.className='fel';
el.innerHTML=`<div class="fel-head" onclick="this.parentElement.classList.toggle('open')">
<span class="fel-num">${i+1}</span>
<span class="fel-title">${f.titel}</span>
<div class="fel-tags"><span class="vip-tag v${f.vip}">VIP ${f.vip}</span><span class="lyft-tag ${lc}">${ln}</span></div>
<span class="chevron">▼</span>
</div>
<div class="fel-body"><div class="fel-grid">
<div class="fel-col"><div class="col-label cl-obs">Vad du ser</div><p>${f.obs}</p></div>
<div class="fel-col"><div class="col-label cl-los">Lösning / drill</div><p>${f.los}</p></div>
<div class="fel-col"><div class="col-label cl-int">Intention / fokus</div><p>${f.int}</p></div>
</div></div>`;
list.appendChild(el);
});
}
function filterFel(v,btn){
fFilter.lyft=v;
document.querySelectorAll('.filter-row .fb').forEach(b=>b.classList.remove('on'));
btn.classList.add('on');
renderFel();
}
function filterVip(v,btn){
fFilter.vip=fFilter.vip===v?'alla':v;
document.querySelectorAll('.filter-row .fb').forEach(b=>{if(['1','2','3'].some(x=>b.onclick&&b.onclick.toString().includes(`'${x}'`)))b.classList.remove('on');});
if(fFilter.vip!=='alla')btn.classList.add('on');
renderFel();
}
// ── APGUL ──
const apgulData=[
{letter:'A',color:'#185FA5',name:'Analysera',
fp:['Gå igenom loggen från senaste sessionen tillsammans','Identifiera vilket VIP som hade lägst kvalitet','Koppla till ett specifikt fel i felbiblioteket','Diskutera: stämmer tränarens och lyftarens bild?','Formulera ett konkret fokusområde för passet'],
ag:['Observera VIP 1 → VIP 2 → VIP 3 i ordning','Fråga lyftaren: "Var kände du att det inte stämde?"','Identifiera om problemet är i VIP 1, 2 eller 3','Besluta om ni justerar nu eller observerar fler lyft']},
{letter:'P',color:'#1D9E75',name:'Planera',
fp:['Välj lyft och starttyp baserat på analysens fokus','Välj belastning – teknisk träning kräver ofta lägre vikt','Välj drill mot det identifierade felet','Formulera ett intention/fokus för lyftaren','Bestäm antal lyft innan nästa utvärdering'],
ag:['Bestäm om ni sänker vikten, byter drill eller fortsätter','Ge lyftaren ett tydligt fokus för nästa lyft','Sätt en enkel cue – ett ord eller en mening','Kom överens om vad ni tittar på i nästa lyft']},
{letter:'G',color:'#BA7517',name:'Genomföra',
fp:['Lyftaren har klart för sig sitt fokus innan varje lyft','Tränaren observerar det överenskomna VIP – inte allt','Minimal feedback under genomförandet','Tränaren noterar vad som syns'],
ag:['Lyftaren har ett tydligt fokus för just detta lyft','Tränaren observerar det överenskomna VIP','Kort check efter lyftet – lyckades fokuset?','Besluta om nästa lyft görs med samma fokus eller justeras']},
{letter:'U',color:'#993C1D',name:'Utvärdera',
fp:['Jämför det ni planerade med det ni genomförde','Lyftaren: Hur kändes fokuset? Uppnåddes det?','Tränaren: Vad såg du i VIP 1, 2 och 3?','Sätt betyg 1–6 på varje VIP-kriterium','Identifiera fokus för nästa session'],
ag:['Lyftaren: "Hur kändes det?" – en mening','Tränaren: "Jag såg..." – en specifik VIP-observation','Stämmer känslan och observationen överens?','Beslut: justera fokus, byt drill, eller fortsätt']},
{letter:'L',color:'#534AB7',name:'Logga',
fp:['Logga lyftare, datum, lyft och belastning','Logga VIP-betyg 1–6 för fokuserade kriterier','Skriv ned det viktigaste – en mening räcker','Skriv ned fokus och cue till nästa session'],
ag:['Notera vilket VIP som fokuserades och om det förbättrades','Notera vilken drill eller cue som fungerade bäst','Notera om ni justerade planen och varför']},
];
let openStep=-1;
function buildAPGUL(){
const container=document.getElementById('stepPanels');
apgulData.forEach((s,i)=>{
const div=document.createElement('div');
div.className='step-panel';
div.id='sp-'+i;
div.innerHTML=`<h3 class="sub" style="color:${s.color};margin-bottom:1rem">${s.letter} – ${s.name}</h3>
<div class="mode-toggle">
<button class="mt-btn on" onclick="setMode(${i},'fp',this)">Förprogrammerad</button>
<button class="mt-btn" onclick="setMode(${i},'ag',this)">Agil</button>
</div>
<div class="mode-panel on" id="mp-${i}-fp">
<ul class="checklist">${s.fp.map(t=>`<li><div class="cb" onclick="tog(this)"></div>${t}</li>`).join('')}</ul>
</div>
<div class="mode-panel" id="mp-${i}-ag">
<ul class="checklist">${s.ag.map(t=>`<li><div class="cb" onclick="tog(this)"></div>${t}</li>`).join('')}</ul>
</div>
${i===4?'<p class="log-note">Anteckna direkt i analysprotokoll-fliken för att spara sessionen.</p>':''}`;
container.appendChild(div);
});
}
function showStep(i,btn){
const steps=document.querySelectorAll('.apgul-step');
if(openStep===i){steps[i].classList.remove('on');document.getElementById('sp-'+i).classList.remove('on');openStep=-1;return;}
steps.forEach(s=>s.classList.remove('on'));
document.querySelectorAll('.step-panel').forEach(p=>p.classList.remove('on'));
btn.classList.add('on');
document.getElementById('sp-'+i).classList.add('on');
openStep=i;
}
function setMode(i,m,btn){
document.getElementById(`mp-${i}-fp`).classList.remove('on');
document.getElementById(`mp-${i}-ag`).classList.remove('on');
document.getElementById(`mp-${i}-${m}`).classList.add('on');
btn.parentElement.querySelectorAll('.mt-btn').forEach(b=>b.classList.remove('on'));
btn.classList.add('on');
}
function tog(el){el.classList.toggle('checked');el.textContent=el.classList.contains('checked')?'✓':'';}
// ── PROTOKOLL ──
const starGroups=['r-s1a','r-s1b','r-s1c','r-s1d','r-s2a','r-s2b','r-s2c','r-s2d','r-s3a','r-s3b','r-s3c','r-s3d'];
const ratings={};
function buildStars(){
starGroups.forEach(id=>{
ratings[id]=0;
const c=document.getElementById(id);
if(!c)return;
for(let i=1;i<=6;i++){
const s=document.createElement('div');
s.className='star';s.dataset.val=i;s.dataset.group=id;s.textContent=i;
s.onclick=function(){
const g=this.dataset.group,v=parseInt(this.dataset.val);
ratings[g]=v;
document.querySelectorAll(`.star[data-group="${g}"]`).forEach(el=>el.classList.toggle('on',parseInt(el.dataset.val)<=v));
};
c.appendChild(s);
}
});
}
const ratingLabels={
'r-s1a':'Stång över mittfot','r-s1b':'Axel framför stång','r-s1c':'Stabil bål','r-s1d':'Reproducerbarhet',
'r-s2a':'Kraftuppbyggnad börjar tidigt','r-s2b':'Balanserad sträckning','r-s2c':'Stång nära kroppen','r-s2d':'Balans bibehållen',
'r-s3a':'Stabil position direkt','r-s3b':'Aktiv skuldra / rack','r-s3c':'Balans över foten','r-s3d':'Ingen korrigering behövs'
};
const ratingScale=['–','1 – Ej uppfyllt','2 – Stora brister','3 – Delvis uppfyllt','4 – Godkänt','5 – Bra','6 – Konsekvent'];
function gv(id){return(document.getElementById(id)||{}).value||'';}
function genProto(){
const lines=[];
lines.push('VIP-ANALYSPROTOKOLL');
lines.push('===================');
lines.push('Lyftare: '+(gv('p-lyftare')||'–'));
lines.push('Datum: '+(gv('p-datum')||'–'));
lines.push('Lyft: '+((document.getElementById('p-lyft')||{}).value||'–'));
lines.push('Belastning: '+(gv('p-belastning')||'–'));
lines.push('Antal lyft: '+(gv('p-antal')||'–'));
lines.push('');
lines.push('VIP 1 – START');
['r-s1a','r-s1b','r-s1c','r-s1d'].forEach(id=>lines.push(' '+ratingLabels[id]+': '+ratingScale[ratings[id]||0]));
if(gv('p-obs1'))lines.push(' Observationer: '+gv('p-obs1'));
if(gv('p-prob1'))lines.push(' Problem: '+gv('p-prob1'));
if(gv('p-ors1'))lines.push(' Orsak: '+gv('p-ors1'));
lines.push('');
lines.push('VIP 2 – KRAFT & TIMING');
['r-s2a','r-s2b','r-s2c','r-s2d'].forEach(id=>lines.push(' '+ratingLabels[id]+': '+ratingScale[ratings[id]||0]));
if(gv('p-obs2'))lines.push(' Observationer: '+gv('p-obs2'));
if(gv('p-prob2'))lines.push(' Problem: '+gv('p-prob2'));
if(gv('p-ors2'))lines.push(' Orsak: '+gv('p-ors2'));
lines.push('');
lines.push('VIP 3 – FIXERING');
['r-s3a','r-s3b','r-s3c','r-s3d'].forEach(id=>lines.push(' '+ratingLabels[id]+': '+ratingScale[ratings[id]||0]));
if(gv('p-obs3'))lines.push(' Observationer: '+gv('p-obs3'));
if(gv('p-prob3'))lines.push(' Problem: '+gv('p-prob3'));
if(gv('p-ors3'))lines.push(' Ursprung: '+gv('p-ors3'));
lines.push('');
lines.push('ÅTGÄRD');
if(gv('p-fokus'))lines.push(' Fokus nästa träning: '+gv('p-fokus'));
if(gv('p-drill'))lines.push(' Övning / drill: '+gv('p-drill'));
if(gv('p-cue'))lines.push(' Cue till lyftaren: '+gv('p-cue'));
document.getElementById('protoText').textContent=lines.join('\n');
const box=document.getElementById('protoSummary');
box.classList.add('on');
box.scrollIntoView({behavior:'smooth'});
}
function clearProto(){
['p-lyftare','p-datum','p-belastning','p-antal','p-obs1','p-prob1','p-ors1','p-obs2','p-prob2','p-ors2','p-obs3','p-prob3','p-ors3','p-fokus','p-drill','p-cue'].forEach(id=>{const el=document.getElementById(id);if(el)el.value='';});
starGroups.forEach(id=>{ratings[id]=0;document.querySelectorAll(`.star[data-group="${id}"]`).forEach(el=>{el.classList.remove('on');el.textContent=el.dataset.val;});});
document.getElementById('protoSummary').classList.remove('on');
}
function copyProto(){
const t=document.getElementById('protoText').textContent;
navigator.clipboard.writeText(t).then(()=>{const b=event.target;b.textContent='Kopierat!';setTimeout(()=>b.textContent='Kopiera text',2000);});
}
// ── INIT ──
renderFel();
buildAPGUL();
buildStars();
</script>
</body>
</html>