Lekcja matmy - dodawanie 1

This commit is contained in:
Sebastian Molenda
2026-05-26 21:19:14 +02:00
parent 204375dd39
commit d406f10206
12 changed files with 830 additions and 20 deletions
+6
View File
@@ -0,0 +1,6 @@
{
"name": "QuizzyTemplate",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}
View File
View File
+8
View File
@@ -56,6 +56,14 @@
<p class="card-desc">Sprawdź swoją wiedzę</p>
</div>
</a>
<a href="lekcje.html" class="category-card" style="--grad-start: #6EE7B7; --grad-end: #34D399;">
<div class="card-icon">📚</div>
<div class="card-content">
<h2 class="card-title">Lekcje</h2>
<p class="card-desc">Zobacz nasze lekcje matematyki</p>
</div>
</a>
</main>
</div>
+105
View File
@@ -0,0 +1,105 @@
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lekcja 1: Dodawanie to dokładanie</title>
<link rel="stylesheet" href="styles.css?v=20260526">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;800&display=swap" rel="stylesheet">
</head>
<body data-topic="dodawanie" data-lesson-id="1">
<div class="app-container">
<header class="lesson-header">
<a href="lekcje.html" class="back-button" id="back-to-hub"></a>
<div class="header-content">
<h1 class="lesson-title">Dodawanie</h1>
<div class="progress-bar-container">
<div class="progress-bar">
<div class="progress" style="width: 0%;"></div>
</div>
<span class="progress-label">Postęp: 0/4</span>
</div>
</div>
<div class="lesson-dropdown">
<button class="dropdown-button"></button>
<div class="dropdown-content">
<!-- Lista lekcji zostanie wstawiona tutaj przez JS -->
</div>
</div>
</header>
<main class="lesson-container">
<div class="lesson-content-main">
<h2>Lekcja 1: Dodawanie to dokładanie</h2>
<div class="parent-guide">
<h3>Dla Rodzica: Jak zacząć?</h3>
<p>Nie zaczynaj od cyfr i znaku plus. Zacznij od prostego pomysłu: <strong>"dokładania"</strong>. Połóż przed dzieckiem 2 klocki, a potem dołóż jeszcze 3. Powiedz głośno: <em>"Dodawanie to dokładanie czegoś do tego, co już mamy."</em></p>
</div>
<div class="interactive-exercise" id="exercise1">
<p>Popatrz, mamy 2 dziewczynki. Teraz dołączają do nich 3 chłopców.</p>
<div class="icon-group">
<span>👧</span><span>👧</span> <span class="plus-sign">+</span> <span>👦</span><span>👦</span><span>👦</span>
</div>
<p>Ile dzieci jest teraz razem? Policz i wpisz liczbę.</p>
<div class="interactive-example">
<span>2 + 3 = </span>
<input type="number" class="interactive-input" data-answer="5">
<span class="feedback"></span>
</div>
</div>
<div class="parent-guide">
<h3>Kluczowa metoda: "Start i doskocz"</h3>
<p>Unikaj liczenia od początku (1, 2, 3, 4, 5). To wolne i męczące. Naucz dziecko metody "start i doskocz": startujemy od większej liczby i "doskakujemy" o resztę.</p>
<p>Przykład <strong>5 + 3</strong>: Nie liczymy od 1. Mówimy: <em>"Mam 5, dokładam 3"</em> i skaczemy: 6, 7, 8. Koniec!</p>
<p><strong>Palce jako "licznik skoków":</strong> Palce nie służą do pokazywania 5 i 3. Pokazują tylko "skoki". Przy 5+3, startujemy od 5, a potem podnosimy jeden palec mówiąc "6", drugi mówiąc "7" i trzeci mówiąc "8".</p>
</div>
<div class="interactive-exercise" id="exercise2">
<h4>Ćwiczenie "Start i doskocz"</h4>
<p>Mamy <strong>5</strong> klocków. Chcemy dołożyć <strong>3</strong>.</p>
<div class="start-and-jump">
<div class="start-number">5</div>
<div class="jumps">
<button class="jump-btn" data-value="6">+1</button>
<button class="jump-btn" data-value="7">+1</button>
<button class="jump-btn" data-value="8">+1</button>
</div>
</div>
<p>Klikaj przyciski "+1", żeby "doskoczyć" do wyniku. Jaki będzie wynik?</p>
<div class="interactive-example">
<span>5 + 3 = </span>
<input type="number" class="interactive-input" data-answer="8">
<span class="feedback"></span>
</div>
<div class="jump-feedback">
Start: 5...
</div>
</div>
<div class="parent-guide">
<h3>Teraz spróbuj sam!</h3>
<p>Pora na samodzielne ćwiczenie. Użyj metody "start i doskocz", żeby rozwiązać poniższy przykład. Powodzenia!</p>
</div>
<div id="random-exercise-container">
<!-- Losowe ćwiczenie zostanie wygenerowane tutaj -->
</div>
<button id="retry-random-exercise" class="retry-button">Jeszcze raz</button>
</div>
</main>
<footer class="lesson-footer">
<a href="lekcja-dodawanie-2.html" class="button-next">Dalej →</a>
</footer>
</div>
<script src="lekcja.js" defer></script>
<script src="nav.js" defer></script>
</body>
</html>
+48
View File
@@ -0,0 +1,48 @@
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lekcja: Dodawanie w zakresie 20</title>
<link rel="stylesheet" href="styles.css?v=20260526">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;800&display=swap" rel="stylesheet">
</head>
<body data-topic="dodawanie" data-lesson-id="2">
<div class="app-container">
<header class="lesson-header">
<a href="lekcje.html" class="back-button" id="back-to-hub"></a>
<div class="header-content">
<h1 class="lesson-title">Dodawanie</h1>
<div class="progress-bar-container">
<div class="progress-bar">
<div class="progress" style="width: 0%;"></div>
</div>
<span class="progress-label">Postęp: 0/4</span>
</div>
</div>
<div class="lesson-dropdown">
<button class="dropdown-button"></button>
<div class="dropdown-content">
<!-- Lista lekcji zostanie wstawiona tutaj przez JS -->
</div>
</div>
</header>
<main class="lesson-container">
<div class="lesson-content-main">
<h2>Lekcja 2: Dodawanie w zakresie 20</h2>
<p>Teraz spróbujmy z większymi liczbami. Pamiętaj, że zawsze możesz użyć palców lub liczydełka!</p>
<div class="interactive-example">
<span>8 + 7 = </span>
<input type="number" class="interactive-input" data-answer="15">
<span class="feedback"></span>
</div>
</div>
</main>
</div>
<script src="lekcja.js" defer></script>
<script src="nav.js" defer></script>
</body>
</html>
+49
View File
@@ -0,0 +1,49 @@
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lekcja: Dodawanie z przenoszeniem</title>
<link rel="stylesheet" href="styles.css?v=20260526">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;800&display=swap" rel="stylesheet">
</head>
<body data-topic="dodawanie" data-lesson-id="3">
<div class="app-container">
<header class="lesson-header">
<a href="lekcje.html" class="back-button" id="back-to-hub"></a>
<div class="header-content">
<h1 class="lesson-title">Dodawanie</h1>
<div class="progress-bar-container">
<div class="progress-bar">
<div class="progress" style="width: 0%;"></div>
</div>
<span class="progress-label">Postęp: 0/4</span>
</div>
</div>
<div class="lesson-dropdown">
<button class="dropdown-button"></button>
<div class="dropdown-content">
<!-- Lista lekcji zostanie wstawiona tutaj przez JS -->
</div>
</div>
</header>
<main class="lesson-container">
<div class="lesson-content-main">
<h2>Lekcja 3: Dodawanie z przenoszeniem</h2>
<p>Czasami, dodając liczby, suma cyfr w kolumnie jest większa niż 9. Nazywamy to "przenoszeniem".</p>
<p>Na przykład w działaniu 15 + 7, najpierw dodajesz 5+7=12. Zapisujesz 2, a 1 "przenosisz" do następnej kolumny.</p>
<div class="interactive-example">
<span>15 + 7 = </span>
<input type="number" class="interactive-input" data-answer="22">
<span class="feedback"></span>
</div>
</div>
</main>
</div>
<script src="lekcja.js" defer></script>
<script src="nav.js" defer></script>
</body>
</html>
+48
View File
@@ -0,0 +1,48 @@
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lekcja: Zadania tekstowe z dodawania</title>
<link rel="stylesheet" href="styles.css?v=20260526">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;800&display=swap" rel="stylesheet">
</head>
<body data-topic="dodawanie" data-lesson-id="4">
<div class="app-container">
<header class="lesson-header">
<a href="lekcje.html" class="back-button" id="back-to-hub"></a>
<div class="header-content">
<h1 class="lesson-title">Dodawanie</h1>
<div class="progress-bar-container">
<div class="progress-bar">
<div class="progress" style="width: 0%;"></div>
</div>
<span class="progress-label">Postęp: 0/4</span>
</div>
</div>
<div class="lesson-dropdown">
<button class="dropdown-button"></button>
<div class="dropdown-content">
<!-- Lista lekcji zostanie wstawiona tutaj przez JS -->
</div>
</div>
</header>
<main class="lesson-container">
<div class="lesson-content-main">
<h2>Lekcja 4: Zadania tekstowe</h2>
<p>Ania ma 5 cukierków, a Jaś dał jej jeszcze 4. Ile cukierków ma teraz Ania?</p>
<div class="interactive-example">
<span>5 + 4 = </span>
<input type="number" class="interactive-input" data-answer="9">
<span class="feedback"></span>
</div>
</div>
</main>
</div>
<script src="lekcja.js" defer></script>
<script src="nav.js" defer></script>
</body>
</html>
+234
View File
@@ -0,0 +1,234 @@
document.addEventListener('DOMContentLoaded', async () => {
const body = document.body;
const topic = body.dataset.topic;
const currentLessonId = parseInt(body.dataset.lessonId, 10);
if (!topic) return;
// --- Pobieranie danych o lekcjach ---
const response = await fetch('lekcje.json');
const allTopics = await response.json();
const topicData = allTopics[topic];
const lessons = topicData.lessons;
const totalLessons = lessons.length;
// --- Inicjalizacja Dropdown Menu ---
const dropdownContent = document.querySelector('.dropdown-content');
const dropdownButton = document.querySelector('.dropdown-button');
lessons.forEach(lesson => {
const a = document.createElement('a');
a.href = lesson.url;
a.textContent = `Lekcja ${lesson.id}: ${lesson.title}`;
if (lesson.id === currentLessonId) {
a.classList.add('active');
}
dropdownContent.appendChild(a);
});
dropdownButton.addEventListener('click', (e) => {
e.stopPropagation();
dropdownContent.classList.toggle('show');
});
document.addEventListener('click', (e) => {
if (!e.target.matches('.dropdown-button')) {
if (dropdownContent.classList.contains('show')) {
dropdownContent.classList.remove('show');
}
}
});
// --- Zarządzanie postępem ---
const progressKey = `progress_${topic}`;
let progress = JSON.parse(localStorage.getItem(progressKey)) || [];
const progressBar = document.querySelector('.progress');
const progressLabel = document.querySelector('.progress-label');
function updateProgress() {
const completedCount = progress.length;
const progressPercentage = (completedCount / totalLessons) * 100;
if (progressBar) progressBar.style.width = `${progressPercentage}%`;
if (progressLabel) progressLabel.textContent = `Postęp: ${completedCount}/${totalLessons}`;
}
// --- Interaktywne zadania ---
const interactiveInputs = document.querySelectorAll('.interactive-input');
interactiveInputs.forEach(input => {
input.addEventListener('change', () => {
const correctAnswer = input.dataset.answer;
const feedbackSpan = input.nextElementSibling;
if (input.value === correctAnswer) {
feedbackSpan.textContent = '✅ Dobrze!';
feedbackSpan.style.color = 'green';
input.style.borderColor = 'green';
// Sprawdź, czy wszystkie zadania na stronie są rozwiązane
const allCorrect = Array.from(document.querySelectorAll('.interactive-input')).every(i => i.style.borderColor === 'green');
// Zapisz postęp, jeśli wszystkie zadania są poprawne
if (allCorrect && !progress.includes(currentLessonId)) {
progress.push(currentLessonId);
localStorage.setItem(progressKey, JSON.stringify(progress));
updateProgress();
}
} else {
feedbackSpan.textContent = '❌ Spróbuj jeszcze raz.';
feedbackSpan.style.color = 'red';
input.style.borderColor = 'red';
}
});
});
// --- Ćwiczenie "Start i doskocz" ---
const jumpExercise = document.querySelector('#exercise2');
if (jumpExercise) {
const jumpButtons = jumpExercise.querySelectorAll('.jump-btn');
const jumpFeedback = jumpExercise.querySelector('.jump-feedback');
let jumpCounter = 5;
let jumpsMade = 0;
jumpButtons.forEach(button => {
button.addEventListener('click', () => {
if (button.classList.contains('activated')) return;
jumpsMade++;
jumpCounter++;
button.classList.add('activated');
button.textContent = jumpCounter;
let feedbackText = "Start: 5";
for (let i = 1; i <= jumpsMade; i++) {
feedbackText += `${5 + i}`;
}
jumpFeedback.textContent = feedbackText;
// Po ostatnim skoku, wypełnij pole odpowiedzi
if (jumpsMade === jumpButtons.length) {
const targetInput = jumpExercise.querySelector('.interactive-input');
targetInput.value = jumpCounter;
// Wywołaj zdarzenie 'change', aby sprawdzić odpowiedź i zapisać postęp
targetInput.dispatchEvent(new Event('change'));
}
});
});
}
// --- Losowe ćwiczenie "Start i doskocz" ---
const randomExerciseContainer = document.getElementById('random-exercise-container');
const retryButton = document.getElementById('retry-random-exercise');
function generateRandomExercise() {
const num1 = Math.floor(Math.random() * 8) + 2; // 2-9
const num2 = Math.floor(Math.random() * 8) + 2; // 2-9
const startNum = Math.max(num1, num2);
const jumpCount = Math.min(num1, num2);
const answer = startNum + jumpCount;
let jumpsHTML = '';
for (let i = 0; i < jumpCount; i++) {
jumpsHTML += `<button class="jump-btn" data-value="${startNum + i + 1}">+1</button>`;
}
randomExerciseContainer.innerHTML = `
<div class="interactive-exercise" id="random-exercise">
<h4>Ćwiczenie losowe</h4>
<p>Mamy <strong>${startNum}</strong>. Chcemy dołożyć <strong>${jumpCount}</strong>.</p>
<div class="start-and-jump">
<div class="start-number">${startNum}</div>
<div class="jumps">${jumpsHTML}</div>
</div>
<p>Klikaj przyciski "+1", żeby "doskoczyć" do wyniku. Jaki będzie wynik?</p>
<div class="interactive-example">
<span>${startNum} + ${jumpCount} = </span>
<input type="number" class="interactive-input" data-answer="${answer}">
<span class="feedback"></span>
</div>
<div class="jump-feedback">
Start: ${startNum}...
</div>
</div>
`;
setupRandomExerciseListeners();
setupInteractiveInputs(); // Ponownie podłączamy listenery do nowo dodanych inputów
}
function setupRandomExerciseListeners() {
const exercise = document.getElementById('random-exercise');
if (!exercise) return;
const jumpButtons = exercise.querySelectorAll('.jump-btn');
const jumpFeedback = exercise.querySelector('.jump-feedback');
const startNum = parseInt(exercise.querySelector('.start-number').textContent, 10);
let jumpCounter = startNum;
let jumpsMade = 0;
jumpButtons.forEach(button => {
button.addEventListener('click', () => {
if (button.classList.contains('activated')) return;
jumpsMade++;
jumpCounter++;
button.classList.add('activated');
button.textContent = jumpCounter;
let feedbackText = `Start: ${startNum}`;
for (let i = 1; i <= jumpsMade; i++) {
feedbackText += `${startNum + i}`;
}
jumpFeedback.textContent = feedbackText;
if (jumpsMade === jumpButtons.length) {
const targetInput = exercise.querySelector('.interactive-input');
targetInput.value = jumpCounter;
targetInput.dispatchEvent(new Event('change'));
}
});
});
}
function setupInteractiveInputs() {
const allInputs = document.querySelectorAll('.interactive-input');
allInputs.forEach(input => {
// Usuń stare listenery, aby uniknąć duplikacji
const newInput = input.cloneNode(true);
input.parentNode.replaceChild(newInput, input);
newInput.addEventListener('change', () => {
const correctAnswer = newInput.dataset.answer;
const feedbackSpan = newInput.nextElementSibling;
if (newInput.value === correctAnswer) {
feedbackSpan.textContent = '✅ Dobrze!';
feedbackSpan.style.color = 'green';
newInput.style.borderColor = 'green';
const allCorrect = Array.from(document.querySelectorAll('.interactive-input')).every(i => i.style.borderColor === 'green');
if (allCorrect && !progress.includes(currentLessonId)) {
progress.push(currentLessonId);
localStorage.setItem(progressKey, JSON.stringify(progress));
updateProgress();
}
} else {
feedbackSpan.textContent = '❌ Spróbuj jeszcze raz.';
feedbackSpan.style.color = 'red';
newInput.style.borderColor = 'red';
}
});
});
}
if (randomExerciseContainer) {
generateRandomExercise();
retryButton.addEventListener('click', generateRandomExercise);
} else {
setupInteractiveInputs();
}
// Inicjalizacja paska postępu przy ładowaniu strony
updateProgress();
});
+36
View File
@@ -0,0 +1,36 @@
<!doctype html>
<html lang="pl">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover" />
<title>Edu — Lekcje z matematyki</title>
<link rel="stylesheet" href="styles.css?v=20260524" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;800&display=swap" rel="stylesheet">
</head>
<body>
<div class="app-container">
<header class="app-header">
<a href="index.html" class="back-button" id="back-to-hub"></a>
<h1 class="app-title">Lekcje z matematyki</h1>
<p class="app-subtitle">Wybierz temat, aby rozpocząć</p>
</header>
<main class="category-grid">
<a href="lekcja-dodawanie-1.html" class="category-card" style="--grad-start: #3B82F6; --grad-end: #1D4ED8;">
<div class="card-icon"></div>
<div class="card-content">
<h2 class="card-title">Dodawanie</h2>
<p class="card-desc">Naucz się dodawać</p>
</div>
</a>
<!-- Tutaj pojawią się kolejne tematy -->
</main>
</div>
<footer class="app-footer">Version: <span id="commit-sha">(loading)</span></footer>
<script src="version.js?v=20260521" defer></script>
<script src="nav.js" defer></script>
</body>
</html>
+31
View File
@@ -0,0 +1,31 @@
{
"dodawanie": {
"title": "Dodawanie",
"lessons": [
{
"id": 1,
"title": "Co to jest dodawanie?",
"subtitle": "Podstawy i proste przykłady.",
"url": "lekcja-dodawanie-1.html"
},
{
"id": 2,
"title": "Dodawanie w zakresie 20",
"subtitle": "Ćwiczenia z większymi liczbami.",
"url": "lekcja-dodawanie-2.html"
},
{
"id": 3,
"title": "Dodawanie z przenoszeniem",
"subtitle": "Gdy suma cyfr przekracza 9.",
"url": "lekcja-dodawanie-3.html"
},
{
"id": 4,
"title": "Zadania tekstowe",
"subtitle": "Praktyczne zastosowanie dodawania.",
"url": "lekcja-dodawanie-4.html"
}
]
}
}
+256 -11
View File
@@ -1101,24 +1101,269 @@ body {
margin-bottom: 24px;
}
@media (max-width: 640px) {
body {
padding: 16px;
/* Nowe style dla strony z lekcjami */
.lesson-header {
display: flex;
align-items: center;
padding: 1rem;
background-color: #f8f9fa;
border-bottom: 1px solid #dee2e6;
}
.app-title {
font-size: 28px;
.lesson-header .back-button {
margin-right: 1rem;
font-size: 1.5rem;
text-decoration: none;
color: #333;
align-self: center;
}
.app-subtitle {
font-size: 16px;
.header-content {
flex-grow: 1;
}
.category-grid {
grid-template-columns: 1fr;
.lesson-title {
margin: 0;
font-size: 1.5rem;
}
.test-config-grid {
grid-template-columns: 1fr;
.progress-bar-container {
display: flex;
align-items: center;
margin-top: 0.5rem;
}
.progress-bar {
width: 100%;
height: 10px;
background-color: #e9ecef;
border-radius: 5px;
overflow: hidden;
margin-right: 0.5rem;
}
.progress {
height: 100%;
background-color: #28a745;
transition: width 0.3s ease-in-out;
}
.progress-label {
font-size: 0.8rem;
white-space: nowrap;
}
/* Dropdown Menu */
.lesson-dropdown {
position: relative;
display: inline-block;
margin-left: auto;
align-self: center;
}
.dropdown-button {
background: none;
border: 1px solid #ccc;
border-radius: 4px;
padding: 0.5rem 0.75rem;
font-size: 1rem;
cursor: pointer;
}
.dropdown-content {
display: none;
position: absolute;
right: 0;
background-color: #f1f1f1;
min-width: 250px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
border-radius: 4px;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content a:hover {
background-color: #ddd;
}
.dropdown-content a.active {
background-color: #28a745;
color: white;
}
.show {
display: block;
}
.lesson-container {
padding: 1rem;
}
.lesson-selector details {
margin-bottom: 1rem;
border: 1px solid #ddd;
border-radius: 8px;
}
.lesson-selector summary {
padding: 1rem;
cursor: pointer;
list-style: none;
display: flex;
flex-direction: column;
}
.lesson-selector summary::-webkit-details-marker {
display: none;
}
.lesson-selector summary h2 {
margin: 0;
font-size: 1.2rem;
}
.lesson-selector summary p {
margin: 0.25rem 0 0;
font-size: 0.9rem;
color: #666;
}
.lesson-content {
padding: 0 1rem 1rem;
border-top: 1px solid #ddd;
}
.lesson-content-main {
padding: 1rem;
}
.parent-guide {
background-color: #fdfdea;
border: 1px solid #fce58a;
border-radius: 8px;
padding: 0.5rem 1rem;
margin: 1.5rem 0;
}
.parent-guide h3 {
color: #c39100;
font-size: 1.1rem;
}
.interactive-exercise {
margin-bottom: 2rem;
}
.icon-group {
font-size: 2rem;
margin: 0.5rem 0;
}
.icon-group .plus-sign {
margin: 0 0.5rem;
color: #888;
}
.start-and-jump {
display: flex;
align-items: center;
gap: 1rem;
margin: 1rem 0;
}
.start-number {
font-size: 2.5rem;
font-weight: bold;
padding: 1rem;
background-color: #e9ecef;
border-radius: 8px;
}
.jumps {
display: flex;
gap: 0.5rem;
}
.jump-btn {
font-size: 1.5rem;
width: 50px;
height: 50px;
border: 2px solid #007bff;
background-color: white;
color: #007bff;
border-radius: 50%;
cursor: pointer;
transition: background-color 0.2s;
}
.jump-btn:hover {
background-color: #e7f3ff;
}
.jump-btn.activated {
background-color: #007bff;
color: white;
border-color: #0056b3;
}
.jump-feedback {
margin-top: 0.5rem;
font-size: 1.1rem;
font-weight: 500;
color: #555;
min-height: 2rem;
}
.retry-button {
display: block;
margin: 1rem auto;
padding: 0.75rem 1.5rem;
font-size: 1rem;
font-weight: 500;
color: #fff;
background-color: #6c757d;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.2s;
}
.retry-button:hover {
background-color: #5a6268;
}
.lesson-footer {
text-align: center;
padding: 2rem 1rem;
border-top: 1px solid #eee;
}
.button-next {
display: inline-block;
padding: 1rem 2.5rem;
font-size: 1.2rem;
font-weight: bold;
text-decoration: none;
color: #fff;
background-color: #28a745;
border-radius: 8px;
transition: background-color 0.2s;
}
.button-next:hover {
background-color: #218838;
}
.interactive-example {
margin-top: 1rem;
padding: 1rem;
background-color: #f9f9f9;
border-radius: 4px;
}