muboboev commited on
Commit
80f35e8
·
verified ·
1 Parent(s): 3c7fdc7

💬 ЭТАП 4. Speak Brave 10 (психо-мотивационный модуль)

Browse files

Подэтап 4.1 — Структура блока

Добавить поле hasSpeakBrave = true в Lesson.

Создать компонент “Speak Brave Player”.

Создать шаблон: видео мотивации + голосовое задание + рефлексия.

components/speak-brave-player.js ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class SpeakBravePlayer extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ margin: 2rem 0;
9
+ }
10
+ .container {
11
+ background: rgba(15, 23, 42, 0.7);
12
+ backdrop-filter: blur(10px);
13
+ border: 1px solid rgba(255, 255, 255, 0.1);
14
+ border-radius: 1rem;
15
+ padding: 2rem;
16
+ }
17
+ .header {
18
+ display: flex;
19
+ align-items: center;
20
+ margin-bottom: 1.5rem;
21
+ }
22
+ .icon {
23
+ width: 3rem;
24
+ height: 3rem;
25
+ background: rgba(124, 58, 237, 0.2);
26
+ border-radius: 50%;
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ margin-right: 1rem;
31
+ }
32
+ h2 {
33
+ font-size: 1.5rem;
34
+ font-weight: 600;
35
+ margin: 0;
36
+ background: linear-gradient(90deg, #7c3aed 0%, #2563eb 100%);
37
+ -webkit-background-clip: text;
38
+ background-clip: text;
39
+ color: transparent;
40
+ }
41
+ .video-container {
42
+ margin-bottom: 2rem;
43
+ border-radius: 0.5rem;
44
+ overflow: hidden;
45
+ }
46
+ .task-card, .reflection-card {
47
+ background: rgba(30, 41, 59, 0.5);
48
+ border-radius: 0.5rem;
49
+ padding: 1.5rem;
50
+ margin-bottom: 1.5rem;
51
+ }
52
+ h3 {
53
+ font-size: 1.25rem;
54
+ font-weight: 500;
55
+ margin-top: 0;
56
+ margin-bottom: 1rem;
57
+ }
58
+ .task-instructions {
59
+ margin-bottom: 1.5rem;
60
+ line-height: 1.6;
61
+ }
62
+ .timer {
63
+ font-size: 1.5rem;
64
+ font-weight: 600;
65
+ color: #7c3aed;
66
+ margin-bottom: 1rem;
67
+ }
68
+ .record-btn {
69
+ background: #7c3aed;
70
+ color: white;
71
+ border: none;
72
+ padding: 0.75rem 1.5rem;
73
+ border-radius: 0.5rem;
74
+ font-weight: 500;
75
+ cursor: pointer;
76
+ transition: background 0.2s;
77
+ display: flex;
78
+ align-items: center;
79
+ }
80
+ .record-btn:hover {
81
+ background: #6d28d9;
82
+ }
83
+ .record-btn i {
84
+ margin-right: 0.5rem;
85
+ }
86
+ .reflection-textarea {
87
+ width: 100%;
88
+ min-height: 120px;
89
+ background: rgba(15, 23, 42, 0.5);
90
+ border: 1px solid rgba(255, 255, 255, 0.1);
91
+ border-radius: 0.5rem;
92
+ padding: 1rem;
93
+ color: white;
94
+ font-family: inherit;
95
+ margin-bottom: 1rem;
96
+ }
97
+ .submit-btn {
98
+ background: #2563eb;
99
+ color: white;
100
+ border: none;
101
+ padding: 0.75rem 1.5rem;
102
+ border-radius: 0.5rem;
103
+ font-weight: 500;
104
+ cursor: pointer;
105
+ transition: background 0.2s;
106
+ }
107
+ .submit-btn:hover {
108
+ background: #1d4ed8;
109
+ }
110
+ </style>
111
+ <div class="container">
112
+ <div class="header">
113
+ <div class="icon">
114
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
115
+ <path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path>
116
+ </svg>
117
+ </div>
118
+ <h2>Speak Brave Challenge</h2>
119
+ </div>
120
+
121
+ <div class="video-container">
122
+ <iframe width="100%" height="400" src="https://www.youtube.com/embed/example" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
123
+ </div>
124
+
125
+ <div class="task-card">
126
+ <h3>Voice Challenge</h3>
127
+ <div class="task-instructions">
128
+ <p>Speak your truth boldly for 1 minute. Express yourself freely without hesitation or self-censorship.</p>
129
+ <p>Focus on: Confidence, Clarity, and Courage</p>
130
+ </div>
131
+ <div class="timer">01:00</div>
132
+ <button class="record-btn">
133
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
134
+ <circle cx="12" cy="12" r="10"></circle>
135
+ <circle cx="12" cy="12" r="3"></circle>
136
+ </svg>
137
+ Start Recording
138
+ </button>
139
+ </div>
140
+
141
+ <div class="reflection-card">
142
+ <h3>Reflection</h3>
143
+ <p>How did this challenge make you feel? What did you learn about yourself?</p>
144
+ <textarea class="reflection-textarea" placeholder="Write your reflection here..."></textarea>
145
+ <button class="submit-btn">Submit Reflection</button>
146
+ </div>
147
+ </div>
148
+ `;
149
+ }
150
+ }
151
+
152
+ customElements.define('speak-brave-player', SpeakBravePlayer);
index.html CHANGED
@@ -224,5 +224,6 @@ el: "#vanta-bg",
224
  <script>
225
  feather.replace();
226
  </script>
 
227
  </body>
228
  </html>
 
224
  <script>
225
  feather.replace();
226
  </script>
227
+ <script src="https://deepsite.hf.co/deepsite-badge.js"></script>
228
  </body>
229
  </html>
learning-engine.html CHANGED
@@ -97,8 +97,8 @@
97
  "exercises": [
98
  {
99
  "id": "string",
100
- "type": "speaking|listening|vocabulary|grammar"
101
- }
102
  ]
103
  }
104
  ]
@@ -190,8 +190,14 @@
190
  "timeSpent": 150,
191
  "attempts": 4
192
  },
 
 
 
 
 
 
193
  "confidence": 85,
194
- "completionStatus": "completed",
195
  "masteryPercentage": 78.75
196
  }
197
 
 
97
  "exercises": [
98
  {
99
  "id": "string",
100
+ "type": "speaking|listening|vocabulary|grammar|speak-brave"
101
+ }
102
  ]
103
  }
104
  ]
 
190
  "timeSpent": 150,
191
  "attempts": 4
192
  },
193
+ "speakBraveScore": {
194
+ "confidence": 85,
195
+ "clarity": 80,
196
+ "fluency": 75,
197
+ "emotionalImpact": 90
198
+ },
199
  "confidence": 85,
200
+ "completionStatus": "completed",
201
  "masteryPercentage": 78.75
202
  }
203
 
progress-report.html CHANGED
@@ -202,11 +202,11 @@
202
  new Chart(ctx, {
203
  type: 'radar',
204
  data: {
205
- labels: ['Vocabulary', 'Grammar', 'Listening', 'Speaking', 'Reading', 'Writing'],
206
- datasets: [{
207
  label: 'Your Skills',
208
- data: [90, 65, 85, 72, 80, 75],
209
- backgroundColor: 'rgba(99, 102, 241, 0.2)',
210
  borderColor: 'rgba(99, 102, 241, 1)',
211
  borderWidth: 2,
212
  pointBackgroundColor: 'rgba(99, 102, 241, 1)'
 
202
  new Chart(ctx, {
203
  type: 'radar',
204
  data: {
205
+ labels: ['Vocabulary', 'Grammar', 'Listening', 'Speaking', 'Reading', 'Writing', 'Courage'],
206
+ datasets: [{
207
  label: 'Your Skills',
208
+ data: [90, 65, 85, 72, 80, 75, 88],
209
+ backgroundColor: 'rgba(99, 102, 241, 0.2)',
210
  borderColor: 'rgba(99, 102, 241, 1)',
211
  borderWidth: 2,
212
  pointBackgroundColor: 'rgba(99, 102, 241, 1)'