107 lines
3.3 KiB
HTML
107 lines
3.3 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Fretboard Trainer</title>
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
|
||
<link rel="manifest" href="/site.webmanifest" />
|
||
<link rel="stylesheet" href="css/style.css" />
|
||
<script
|
||
defer
|
||
data-domain="fretboard.nauen-it.de"
|
||
src="https://plausible.nauen-it.de/js/script.js"
|
||
></script>
|
||
</head>
|
||
<body>
|
||
<h1>Fretboard Trainer</h1>
|
||
<p class="subtitle">Learn the notes on your guitar</p>
|
||
|
||
<div class="mode-tabs">
|
||
<button class="mode-tab active" id="tab1">Name the Note</button>
|
||
<button class="mode-tab" id="tab2">Find All Occurrences</button>
|
||
<button class="mode-tab" id="tabStats">Stats</button>
|
||
</div>
|
||
|
||
<div class="quiz-container" id="quizArea">
|
||
<div class="settings-row">
|
||
<label>
|
||
Strings:
|
||
<select id="stringCount">
|
||
<option value="6" selected>6-string</option>
|
||
<option value="7">7-string</option>
|
||
</select>
|
||
</label>
|
||
<label
|
||
><input type="checkbox" id="sharpsOnly" /> Sharps only (no
|
||
flats)</label
|
||
>
|
||
<label
|
||
><input type="checkbox" id="naturalOnly" /> Natural notes only</label
|
||
>
|
||
</div>
|
||
|
||
<div class="prompt-card">
|
||
<div class="prompt-label" id="promptLabel">String & Fret</div>
|
||
<div class="prompt-text" id="promptText">Loading…</div>
|
||
</div>
|
||
|
||
<div class="fretboard-wrap">
|
||
<div id="fretboardContainer"></div>
|
||
</div>
|
||
|
||
<!-- Mode 1: note answer buttons -->
|
||
<div class="note-buttons" id="noteButtons"></div>
|
||
|
||
<!-- Mode 2: submit / clear -->
|
||
<div
|
||
id="mode2Controls"
|
||
style="
|
||
display: none;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 12px;
|
||
"
|
||
>
|
||
<div style="color: var(--text-dim); font-size: 0.9rem">
|
||
Click all positions where the note appears, then submit
|
||
</div>
|
||
<div style="display: flex; gap: 12px">
|
||
<button class="submit-btn" id="submitBtn">Submit Answer</button>
|
||
<button class="clear-btn" id="clearBtn">Clear</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="feedback" id="feedback"></div>
|
||
<button class="next-btn" id="nextBtn" disabled>Next →</button>
|
||
<div class="kbd-hint">
|
||
<kbd>Space</kbd> / <kbd>Enter</kbd> next • <kbd>1</kbd>–<kbd
|
||
>9</kbd
|
||
>
|
||
answer • <kbd>Tab</kbd> cycle tabs
|
||
</div>
|
||
|
||
<div class="stats">
|
||
Correct: <span id="statCorrect">0</span> / Total:
|
||
<span id="statTotal">0</span> | Streak:
|
||
<span id="statStreak">0</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
id="statsScreen"
|
||
style="
|
||
display: none;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
width: 100%;
|
||
max-width: 900px;
|
||
"
|
||
></div>
|
||
|
||
<script type="module" src="js/app.js"></script>
|
||
</body>
|
||
</html>
|