munchboka-edutools 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. munchboka_edutools/__init__.py +182 -0
  2. munchboka_edutools/_plotmath_shim.py +126 -0
  3. munchboka_edutools/_version.py +2 -0
  4. munchboka_edutools/directives/__init__.py +1 -0
  5. munchboka_edutools/directives/admonitions.py +356 -0
  6. munchboka_edutools/directives/cas_popup.py +272 -0
  7. munchboka_edutools/directives/dialogue.py +137 -0
  8. munchboka_edutools/directives/escape_room.py +296 -0
  9. munchboka_edutools/directives/factor_tree.py +549 -0
  10. munchboka_edutools/directives/ggb.py +209 -0
  11. munchboka_edutools/directives/ggb_icon.py +62 -0
  12. munchboka_edutools/directives/ggb_popup.py +165 -0
  13. munchboka_edutools/directives/horner.py +324 -0
  14. munchboka_edutools/directives/interactive_code.py +75 -0
  15. munchboka_edutools/directives/jeopardy.py +252 -0
  16. munchboka_edutools/directives/multi_plot.py +1126 -0
  17. munchboka_edutools/directives/pair_puzzle.py +191 -0
  18. munchboka_edutools/directives/parsons.py +109 -0
  19. munchboka_edutools/directives/plot.py +3012 -0
  20. munchboka_edutools/directives/poly_icon.py +91 -0
  21. munchboka_edutools/directives/polydiv.py +344 -0
  22. munchboka_edutools/directives/quiz.py +291 -0
  23. munchboka_edutools/directives/signchart.py +474 -0
  24. munchboka_edutools/directives/timed_quiz.py +436 -0
  25. munchboka_edutools/directives/turtle.py +157 -0
  26. munchboka_edutools/static/css/admonitions.css +2012 -0
  27. munchboka_edutools/static/css/cas_popup.css +242 -0
  28. munchboka_edutools/static/css/code_mirror_themes/github_dark_cm.css +112 -0
  29. munchboka_edutools/static/css/code_mirror_themes/github_dark_default_cm.css +40 -0
  30. munchboka_edutools/static/css/code_mirror_themes/github_dark_high_contrast_cm.css +141 -0
  31. munchboka_edutools/static/css/code_mirror_themes/github_light_cm.css +120 -0
  32. munchboka_edutools/static/css/code_mirror_themes/github_light_default_cm.css +108 -0
  33. munchboka_edutools/static/css/code_mirror_themes/one_dark_cm.css +121 -0
  34. munchboka_edutools/static/css/dialogue.css +92 -0
  35. munchboka_edutools/static/css/escapeRoom/escape-room.css +223 -0
  36. munchboka_edutools/static/css/figures.css +274 -0
  37. munchboka_edutools/static/css/general_style.css +74 -0
  38. munchboka_edutools/static/css/github-dark-high-contrast.css +141 -0
  39. munchboka_edutools/static/css/github-dark.css +112 -0
  40. munchboka_edutools/static/css/github-light.css +120 -0
  41. munchboka_edutools/static/css/interactive_code/style.css +575 -0
  42. munchboka_edutools/static/css/interactive_code.css +582 -0
  43. munchboka_edutools/static/css/jeopardy.css +476 -0
  44. munchboka_edutools/static/css/pairPuzzle/style.css +177 -0
  45. munchboka_edutools/static/css/parsons/parsonsPuzzle.css +331 -0
  46. munchboka_edutools/static/css/quiz.css +312 -0
  47. munchboka_edutools/static/css/timedQuiz.css +375 -0
  48. munchboka_edutools/static/icons/ggb/mode_evaluate.svg +1 -0
  49. munchboka_edutools/static/icons/ggb/mode_extremum.svg +1 -0
  50. munchboka_edutools/static/icons/ggb/mode_intersect.svg +1 -0
  51. munchboka_edutools/static/icons/ggb/mode_nsolve.svg +1 -0
  52. munchboka_edutools/static/icons/ggb/mode_numeric.svg +1 -0
  53. munchboka_edutools/static/icons/ggb/mode_point.svg +1 -0
  54. munchboka_edutools/static/icons/ggb/mode_solve.svg +1 -0
  55. munchboka_edutools/static/icons/misc/windows-logo.svg +1 -0
  56. munchboka_edutools/static/icons/outline/dark_mode/academic.svg +3 -0
  57. munchboka_edutools/static/icons/outline/dark_mode/backward.svg +3 -0
  58. munchboka_edutools/static/icons/outline/dark_mode/book.svg +3 -0
  59. munchboka_edutools/static/icons/outline/dark_mode/chat_bubble.svg +3 -0
  60. munchboka_edutools/static/icons/outline/dark_mode/check.svg +3 -0
  61. munchboka_edutools/static/icons/outline/dark_mode/cmd_line.svg +3 -0
  62. munchboka_edutools/static/icons/outline/dark_mode/file.svg +1 -0
  63. munchboka_edutools/static/icons/outline/dark_mode/fire.svg +4 -0
  64. munchboka_edutools/static/icons/outline/dark_mode/key.svg +3 -0
  65. munchboka_edutools/static/icons/outline/dark_mode/magnifying.svg +3 -0
  66. munchboka_edutools/static/icons/outline/dark_mode/pencil_square.svg +3 -0
  67. munchboka_edutools/static/icons/outline/dark_mode/play.svg +3 -0
  68. munchboka_edutools/static/icons/outline/dark_mode/question.svg +3 -0
  69. munchboka_edutools/static/icons/outline/dark_mode/square_check.svg +1 -0
  70. munchboka_edutools/static/icons/outline/dark_mode/stop.svg +3 -0
  71. munchboka_edutools/static/icons/outline/dark_mode/summary.svg +3 -0
  72. munchboka_edutools/static/icons/outline/dark_mode/undo.svg +3 -0
  73. munchboka_edutools/static/icons/outline/dark_mode/unlock.svg +3 -0
  74. munchboka_edutools/static/icons/outline/light_mode/academic.svg +3 -0
  75. munchboka_edutools/static/icons/outline/light_mode/backward.svg +3 -0
  76. munchboka_edutools/static/icons/outline/light_mode/book.svg +3 -0
  77. munchboka_edutools/static/icons/outline/light_mode/chat_bubble.svg +3 -0
  78. munchboka_edutools/static/icons/outline/light_mode/check.svg +3 -0
  79. munchboka_edutools/static/icons/outline/light_mode/cmd_line.svg +3 -0
  80. munchboka_edutools/static/icons/outline/light_mode/file.svg +1 -0
  81. munchboka_edutools/static/icons/outline/light_mode/fire.svg +4 -0
  82. munchboka_edutools/static/icons/outline/light_mode/key.svg +3 -0
  83. munchboka_edutools/static/icons/outline/light_mode/magnifying.svg +3 -0
  84. munchboka_edutools/static/icons/outline/light_mode/pencil_square.svg +3 -0
  85. munchboka_edutools/static/icons/outline/light_mode/play.svg +3 -0
  86. munchboka_edutools/static/icons/outline/light_mode/question.svg +3 -0
  87. munchboka_edutools/static/icons/outline/light_mode/square_check.svg +1 -0
  88. munchboka_edutools/static/icons/outline/light_mode/stop.svg +3 -0
  89. munchboka_edutools/static/icons/outline/light_mode/summary.svg +3 -0
  90. munchboka_edutools/static/icons/outline/light_mode/undo.svg +3 -0
  91. munchboka_edutools/static/icons/outline/light_mode/unlock.svg +3 -0
  92. munchboka_edutools/static/icons/polyicons/cubicdown.svg +3 -0
  93. munchboka_edutools/static/icons/polyicons/cubicup.svg +3 -0
  94. munchboka_edutools/static/icons/polyicons/frown.svg +3 -0
  95. munchboka_edutools/static/icons/polyicons/smile.svg +3 -0
  96. munchboka_edutools/static/icons/solid/dark_mode/academic.svg +5 -0
  97. munchboka_edutools/static/icons/solid/dark_mode/backward.svg +3 -0
  98. munchboka_edutools/static/icons/solid/dark_mode/book.svg +3 -0
  99. munchboka_edutools/static/icons/solid/dark_mode/brain.svg +1 -0
  100. munchboka_edutools/static/icons/solid/dark_mode/file.svg +1 -0
  101. munchboka_edutools/static/icons/solid/dark_mode/fire.svg +3 -0
  102. munchboka_edutools/static/icons/solid/dark_mode/key.svg +3 -0
  103. munchboka_edutools/static/icons/solid/dark_mode/pencil_square.svg +4 -0
  104. munchboka_edutools/static/icons/solid/dark_mode/play.svg +3 -0
  105. munchboka_edutools/static/icons/solid/dark_mode/python.svg +1 -0
  106. munchboka_edutools/static/icons/solid/dark_mode/scroll.svg +1 -0
  107. munchboka_edutools/static/icons/solid/dark_mode/stop.svg +3 -0
  108. munchboka_edutools/static/icons/solid/light_mode/academic.svg +5 -0
  109. munchboka_edutools/static/icons/solid/light_mode/backward.svg +3 -0
  110. munchboka_edutools/static/icons/solid/light_mode/book.svg +3 -0
  111. munchboka_edutools/static/icons/solid/light_mode/brain.svg +1 -0
  112. munchboka_edutools/static/icons/solid/light_mode/file.svg +1 -0
  113. munchboka_edutools/static/icons/solid/light_mode/fire.svg +3 -0
  114. munchboka_edutools/static/icons/solid/light_mode/key.svg +3 -0
  115. munchboka_edutools/static/icons/solid/light_mode/pencil_square.svg +4 -0
  116. munchboka_edutools/static/icons/solid/light_mode/play.svg +3 -0
  117. munchboka_edutools/static/icons/solid/light_mode/python.svg +1 -0
  118. munchboka_edutools/static/icons/solid/light_mode/scroll.svg +1 -0
  119. munchboka_edutools/static/icons/solid/light_mode/stop.svg +3 -0
  120. munchboka_edutools/static/icons/stickers/edit.svg +1 -0
  121. munchboka_edutools/static/icons/stickers/pencil_square.svg +3 -0
  122. munchboka_edutools/static/js/casThemeManager.js +99 -0
  123. munchboka_edutools/static/js/escapeRoom/escape-room.js +219 -0
  124. munchboka_edutools/static/js/geogebra-setup.js +6 -0
  125. munchboka_edutools/static/js/highlight-init.js +6 -0
  126. munchboka_edutools/static/js/interactiveCode/codeEditor.js +632 -0
  127. munchboka_edutools/static/js/interactiveCode/interactiveCodeSetup.js +348 -0
  128. munchboka_edutools/static/js/interactiveCode/pythonRunner.js +336 -0
  129. munchboka_edutools/static/js/interactiveCode/turtleCode.js +203 -0
  130. munchboka_edutools/static/js/interactiveCode/workerManager.js +353 -0
  131. munchboka_edutools/static/js/interactive_code/codeEditor.js +662 -0
  132. munchboka_edutools/static/js/interactive_code/interactiveCodeSetup.js +252 -0
  133. munchboka_edutools/static/js/interactive_code/pythonRunner.js +145 -0
  134. munchboka_edutools/static/js/interactive_code/turtleCode.js +56 -0
  135. munchboka_edutools/static/js/interactive_code/workerManager.js +204 -0
  136. munchboka_edutools/static/js/jeopardy.js +457 -0
  137. munchboka_edutools/static/js/pairPuzzle/draggableItem.js +64 -0
  138. munchboka_edutools/static/js/pairPuzzle/dropZone.js +119 -0
  139. munchboka_edutools/static/js/pairPuzzle/game.js +160 -0
  140. munchboka_edutools/static/js/parsons/parsonsPuzzle.js +641 -0
  141. munchboka_edutools/static/js/quiz.js +422 -0
  142. munchboka_edutools/static/js/skulpt/skulpt.js +35721 -0
  143. munchboka_edutools/static/js/timedQuiz/multipleChoiceQuestion.js +184 -0
  144. munchboka_edutools/static/js/timedQuiz/timedMultipleChoiceQuiz.js +244 -0
  145. munchboka_edutools/static/js/timedQuiz/utils.js +6 -0
  146. munchboka_edutools/static/js/utils.js +3 -0
  147. munchboka_edutools-0.1.0.dist-info/METADATA +107 -0
  148. munchboka_edutools-0.1.0.dist-info/RECORD +150 -0
  149. munchboka_edutools-0.1.0.dist-info/WHEEL +4 -0
  150. munchboka_edutools-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,575 @@
1
+ /* Verbatim copy from source matematikk_r1/_static/interactiveCode/style.css */
2
+ /* CSS rules for CodeMirror */
3
+
4
+ /* Setter font og fontsize for koden */
5
+ .CodeMirror * {
6
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
7
+ font-size: 14px;
8
+ }
9
+
10
+ .CodeMirror {
11
+ height: auto !important;
12
+ }
13
+
14
+ /* Spesiell highlighting på utvalgte fraser i kommentarer */
15
+ .cm-todo {
16
+ color: red !important;
17
+ font-weight: bold !important;
18
+ }
19
+
20
+ .cm-fiksmeg {
21
+ color: rgb(255, 0, 0) !important;
22
+ font-weight: bold !important;
23
+ }
24
+
25
+ .cm-note {
26
+ color: red !important;
27
+ font-weight: bold !important;
28
+ }
29
+
30
+ .cm-fyllinn {
31
+ color: red !important;
32
+ font-weight: bold !important;
33
+ }
34
+
35
+ .cm-ignorer {
36
+ color: red !important;
37
+ font-weight: bold !important;
38
+ }
39
+
40
+ .cm-ikkerør {
41
+ color: red !important;
42
+ font-weight: bold !important;
43
+ }
44
+
45
+ .cm-fokus {
46
+ color: rgb(0, 102, 128) !important;
47
+ font-weight: bold !important;
48
+ }
49
+
50
+ .cm-forklaring {
51
+ color: rgb(0, 102, 128) !important;
52
+ font-weight: bold !important;
53
+ }
54
+
55
+ .cm-merk {
56
+ color: red !important;
57
+ font-weight: bold !important;
58
+ }
59
+
60
+ .cm-question {
61
+ color: red !important;
62
+ font-weight: bold !important;
63
+ }
64
+
65
+ /* Lager en border rundt kodeboksen for å utheve den */
66
+
67
+ [data-mode="light"] .CodeMirror {
68
+ border: 1px solid black; /* Add a black border */
69
+ border-radius: 4px; /* Optional: Add rounded corners */
70
+ }
71
+
72
+ @media (prefers-color-scheme: light) {
73
+ .CodeMirror {
74
+ border: 1px solid black; /* Add a black border */
75
+ border-radius: 4px; /* Optional: Add rounded corners */
76
+ }
77
+ }
78
+
79
+ [data-mode="dark"] .CodeMirror {
80
+ border: 1px solid white; /* Add a black border */
81
+ border-radius: 4px; /* Optional: Add rounded corners */
82
+ }
83
+
84
+ @media (prefers-color-scheme: dark) {
85
+ .CodeMirror {
86
+ border: 1px solid white; /* Add a black border */
87
+ border-radius: 4px; /* Optional: Add rounded corners */
88
+ }
89
+ }
90
+
91
+ .CodeMirror-linenumbers {
92
+ padding-right: 10px; /* Adjust this value to change the space between line numbers and code */
93
+ }
94
+
95
+ /* Highlighting for error messages */
96
+ .error-message {
97
+ white-space: pre-wrap;
98
+ }
99
+
100
+ .error-type {
101
+ color: red;
102
+ font-weight: bold !important;
103
+ }
104
+
105
+ .error-line {
106
+ color: red;
107
+ background-color: rgba(0, 161, 248, 0.305);
108
+ font-weight: bold !important;
109
+ }
110
+
111
+ /* General button styles */
112
+ .button {
113
+ color: teal; /* Button text color */
114
+ border: none; /* Remove border */
115
+ padding: 4px 20px !important; /* Padding around text */
116
+ text-align: center; /* Center text */
117
+ text-decoration: none; /* Remove underline */
118
+ display: inline-block; /* Allow setting height and width */
119
+ font-size: 16px; /* Font size */
120
+ margin: 4px 2px; /* Margin around button */
121
+ cursor: pointer; /* Cursor on hover */
122
+ border-radius: 8px; /* Rounded corners */
123
+ transition-duration: 0.4s; /* Transition effect on hover */
124
+ }
125
+
126
+ /* Run button */
127
+ .button-run {
128
+ background-color: #28a745; /* Green background */
129
+ color: black; /* Black text */
130
+ }
131
+
132
+ .button-run:hover {
133
+ background-color: #218838; /* Darker green on hover */
134
+ }
135
+
136
+ .button-run:active {
137
+ background-color: #1e7e34; /* Even darker green on click */
138
+ box-shadow: 0 5px #666; /* Shadow effect */
139
+ transform: translateY(4px); /* Move button down */
140
+ }
141
+
142
+ /* Reset button */
143
+ .button-reset {
144
+ background-color: #ffc107; /* Orange background */
145
+ color: black; /* Black text */
146
+ }
147
+
148
+ .button-reset:hover {
149
+ background-color: #e0a800; /* Darker orange on hover */
150
+ }
151
+
152
+ .button-reset:active {
153
+ background-color: #c69500; /* Even darker orange on click */
154
+ box-shadow: 0 5px #666; /* Shadow effect */
155
+ transform: translateY(4px); /* Move button down */
156
+ }
157
+
158
+ /* Cancel button */
159
+ .button-cancel {
160
+ background-color: #dc3545; /* Red background */
161
+ color: black; /* Black text */
162
+ }
163
+
164
+ .button-cancel:hover {
165
+ background-color: #c82333; /* Darker red on hover */
166
+ }
167
+
168
+ .button-cancel:active {
169
+ background-color: #bd2130; /* Even darker red on click */
170
+ box-shadow: 0 5px #666; /* Shadow effect */
171
+ transform: translateY(4px); /* Move button down */
172
+ }
173
+
174
+ .button:focus {
175
+ outline: none; /* Remove outline on focus */
176
+ }
177
+
178
+ .button svg {
179
+ /* margin-left: 8px; */
180
+ vertical-align: middle; /* Align icon vertically with text */
181
+ width: 20px; /* Icon width */
182
+ height: 20px; /* Icon height */
183
+ }
184
+
185
+ .pythonoutput {
186
+ max-height: 600px;
187
+ overflow-y: auto;
188
+ }
189
+
190
+ /* Dynamically highlight error lines in editor */
191
+ .cm-highlight {
192
+ background-color: rgba(255, 0, 0, 0.2); /* Light red background */
193
+ }
194
+
195
+ /* Change the background and text color of the highlighted selection */
196
+ .CodeMirror-selected {
197
+ background-color: #0196bc41 !important;
198
+ }
199
+
200
+ /* Prediction containers */
201
+
202
+ /* Style for the prediction input container */
203
+ .prediction-container {
204
+ margin-top: 20px;
205
+ margin-bottom: 20px;
206
+ }
207
+
208
+ .prediction-container label {
209
+ display: block;
210
+ font-weight: bold;
211
+ margin-bottom: 5px;
212
+ }
213
+
214
+ .prediction-container textarea {
215
+ width: 100%;
216
+ box-sizing: border-box;
217
+ padding: 10px;
218
+ border: 1px solid #ccc;
219
+ border-radius: 4px;
220
+ resize: vertical;
221
+ font-family: Arial, sans-serif;
222
+ font-size: 14px;
223
+ }
224
+
225
+ .button-lock-prediction {
226
+ margin-top: 10px;
227
+ background-color: #007bff; /* Blue background */
228
+ color: #fff; /* White text */
229
+ }
230
+
231
+ .button-lock-prediction:hover {
232
+ background-color: #0056b3; /* Darker blue on hover */
233
+ }
234
+
235
+ .button-lock-prediction:active {
236
+ background-color: #004080; /* Even darker blue on click */
237
+ box-shadow: 0 5px #666; /* Shadow effect */
238
+ transform: translateY(4px); /* Move button down */
239
+ }
240
+
241
+ /* Style for the prediction and output display container */
242
+ /* Base styles for the prediction and output display container */
243
+ .prediction-output-container {
244
+ display: flex;
245
+ flex-direction: row;
246
+ gap: 20px;
247
+ margin-top: 20px;
248
+ }
249
+
250
+ .prediction-display,
251
+ .output-display {
252
+ flex: 1;
253
+ }
254
+
255
+ .prediction-display h3,
256
+ .output-display h3 {
257
+ font-size: 18px;
258
+ border-bottom: 2px solid;
259
+ padding-bottom: 5px;
260
+ margin-bottom: 10px;
261
+ }
262
+
263
+ .prediction-display pre,
264
+ .output-display pre {
265
+ padding: 10px;
266
+ border-radius: 4px;
267
+ overflow: auto;
268
+ max-height: 300px;
269
+ border: 1px solid;
270
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
271
+ font-size: 14px;
272
+ }
273
+
274
+ /* Light mode styles */
275
+ [data-mode="light"] .prediction-display h3,
276
+ [data-mode="light"] .output-display h3 {
277
+ color: #333333;
278
+ border-color: #cccccc;
279
+ }
280
+
281
+ [data-mode="light"] .prediction-display pre,
282
+ [data-mode="light"] .output-display pre {
283
+ background-color: #f8f9fa;
284
+ color: #212529;
285
+ border-color: #cccccc;
286
+ }
287
+
288
+ /* Dark mode styles */
289
+ [data-mode="dark"] .prediction-display h3,
290
+ [data-mode="dark"] .output-display h3 {
291
+ color: #f1f1f1;
292
+ border-color: #444444;
293
+ }
294
+
295
+ [data-mode="dark"] .prediction-display pre,
296
+ [data-mode="dark"] .output-display pre {
297
+ background-color: #2b2b2b;
298
+ color: #e1e1e1;
299
+ border-color: #444444;
300
+ }
301
+
302
+ /* Auto mode styles based on system preference */
303
+ @media (prefers-color-scheme: dark) {
304
+ [data-mode="auto"] .prediction-display h3,
305
+ [data-mode="auto"] .output-display h3 {
306
+ color: #f1f1f1;
307
+ border-color: #444444;
308
+ }
309
+ [data-mode="auto"] .prediction-display pre,
310
+ [data-mode="auto"] .output-display pre {
311
+ background-color: #2b2b2b;
312
+ color: #e1e1e1;
313
+ border-color: #444444;
314
+ }
315
+ }
316
+
317
+ @media (prefers-color-scheme: light) {
318
+ [data-mode="auto"] .prediction-display h3,
319
+ [data-mode="auto"] .output-display h3 {
320
+ color: #333333;
321
+ border-color: #cccccc;
322
+ }
323
+ [data-mode="auto"] .prediction-display pre,
324
+ [data-mode="auto"] .output-display pre {
325
+ background-color: #f8f9fa;
326
+ color: #212529;
327
+ border-color: #cccccc;
328
+ }
329
+ }
330
+
331
+ /* General styles for the prediction container */
332
+ .prediction-container {
333
+ margin-top: 20px;
334
+ margin-bottom: 20px;
335
+ }
336
+
337
+ .prediction-container textarea {
338
+ width: 100%;
339
+ box-sizing: border-box;
340
+ padding: 10px;
341
+ border-radius: 4px;
342
+ resize: vertical;
343
+ font-family: Arial, sans-serif;
344
+ font-size: 16px;
345
+ border: 1px solid;
346
+ background-color: inherit; /* Inherit background for consistency */
347
+ color: inherit; /* Inherit text color */
348
+ }
349
+
350
+ /* Light mode styles for the prediction textarea */
351
+ [data-mode="light"] .prediction-container textarea {
352
+ background-color: #ffffff;
353
+ color: #212529;
354
+ border-color: #cccccc;
355
+ }
356
+
357
+ /* Dark mode styles for the prediction textarea */
358
+ [data-mode="dark"] .prediction-container textarea {
359
+ background-color: #2b2b2b;
360
+ color: #e1e1e1;
361
+ border-color: #444444;
362
+ }
363
+
364
+ /* Auto mode styles for the prediction textarea */
365
+ @media (prefers-color-scheme: dark) {
366
+ [data-mode="auto"] .prediction-container textarea {
367
+ background-color: #2b2b2b;
368
+ color: #e1e1e1;
369
+ border-color: #444444;
370
+ }
371
+ }
372
+
373
+ @media (prefers-color-scheme: light) {
374
+ [data-mode="auto"] .prediction-container textarea {
375
+ background-color: #ffffff;
376
+ color: #212529;
377
+ border-color: #cccccc;
378
+ }
379
+ }
380
+
381
+ /* Style for the placeholder text */
382
+ .prediction-container textarea::placeholder {
383
+ font-size: 16px;
384
+ color: #6c757d;
385
+ }
386
+
387
+ /* Placeholder styles for light mode */
388
+ [data-mode="light"] .prediction-container textarea::placeholder {
389
+ color: #6c757d;
390
+ }
391
+
392
+ /* Placeholder styles for dark mode */
393
+ [data-mode="dark"] .prediction-container textarea::placeholder {
394
+ color: #bbbbbb;
395
+ }
396
+
397
+ /* Placeholder styles for auto mode */
398
+ @media (prefers-color-scheme: dark) {
399
+ [data-mode="auto"] .prediction-container textarea::placeholder {
400
+ color: #bbbbbb;
401
+ }
402
+ }
403
+
404
+ @media (prefers-color-scheme: light) {
405
+ [data-mode="auto"] .prediction-container textarea::placeholder {
406
+ color: #6c757d;
407
+ }
408
+ }
409
+
410
+ /* Style for the lock prediction button */
411
+ .button-lock-prediction {
412
+ margin-top: 10px;
413
+ background-color: #007bff; /* Blue background */
414
+ color: #fff; /* White text */
415
+ border: none;
416
+ padding: 8px 16px;
417
+ font-size: 16px;
418
+ border-radius: 4px;
419
+ cursor: pointer;
420
+ }
421
+
422
+ /* Button hover and active states */
423
+ .button-lock-prediction:hover {
424
+ background-color: #0056b3;
425
+ }
426
+
427
+ .button-lock-prediction:active {
428
+ background-color: #004080;
429
+ }
430
+
431
+ /* Adjust button styles for dark mode */
432
+ [data-mode="dark"] .button-lock-prediction {
433
+ background-color: #1a73e8;
434
+ color: #fff;
435
+ }
436
+
437
+ [data-mode="dark"] .button-lock-prediction:hover {
438
+ background-color: #135aba;
439
+ }
440
+
441
+ [data-mode="dark"] .button-lock-prediction:active {
442
+ background-color: #0d3d80;
443
+ }
444
+
445
+ /* Adjust button styles for auto mode */
446
+ @media (prefers-color-scheme: dark) {
447
+ [data-mode="auto"] .button-lock-prediction {
448
+ background-color: #1a73e8;
449
+ color: #fff;
450
+ }
451
+ [data-mode="auto"] .button-lock-prediction:hover {
452
+ background-color: #135aba;
453
+ }
454
+ [data-mode="auto"] .button-lock-prediction:active {
455
+ background-color: #0d3d80;
456
+ }
457
+ }
458
+
459
+ @media (prefers-color-scheme: light) {
460
+ [data-mode="auto"] .button-lock-prediction {
461
+ background-color: #007bff;
462
+ color: #fff;
463
+ }
464
+ [data-mode="auto"] .button-lock-prediction:hover {
465
+ background-color: #0056b3;
466
+ }
467
+ [data-mode="auto"] .button-lock-prediction:active {
468
+ background-color: #004080;
469
+ }
470
+ }
471
+
472
+ /* Step by step styles */
473
+
474
+ /* Style for the step controls */
475
+ .step-controls {
476
+ margin-top: 10px;
477
+ }
478
+
479
+ .step-controls .button {
480
+ margin-right: 5px;
481
+ }
482
+
483
+ /* Style for the visualization panel */
484
+ .visualization-panel {
485
+ margin-top: 20px;
486
+ border-top: 1px solid #ccc;
487
+ padding-top: 10px;
488
+ }
489
+
490
+ .visualization-panel pre {
491
+ background-color: #f8f9fa;
492
+ padding: 10px;
493
+ border-radius: 4px;
494
+ overflow: auto;
495
+ max-height: 300px;
496
+
497
+ border: 1px solid #ccc;
498
+ }
499
+
500
+ /* Highlight current line in editor */
501
+ .CodeMirror .current-line {
502
+ background-color: #ffffcc !important;
503
+ }
504
+
505
+
506
+
507
+
508
+ /* Turtle */
509
+
510
+ /* A top-level container for the entire turtle environment */
511
+ .turtle-env {
512
+ display: flex;
513
+ flex-wrap: wrap; /* Allows wrapping on narrow screens */
514
+ width: 100%;
515
+ gap: 0; /* Adjust gap if you want space between columns */
516
+ }
517
+
518
+ /* Left column: the code editor, run button, output */
519
+ .turtle-env .turtle-left {
520
+ flex: 1;
521
+ min-width: 400px;
522
+ display: flex;
523
+ flex-direction: column;
524
+ /* Optional: Add a background or border if desired
525
+ background: #fafafa;
526
+ border: 1px solid #ccc;
527
+ */
528
+ }
529
+
530
+ /* The hidden <textarea> that CodeMirror replaces */
531
+ .turtle-env .turtle-editor-textarea {
532
+ display: none; /* CodeMirror will take over */
533
+ }
534
+
535
+
536
+ /* The output <pre> area */
537
+ .turtle-env .turtle-output {
538
+ border: 1px solid #ccc;
539
+ padding: 8px;
540
+ min-height: 2em;
541
+ white-space: pre-wrap;
542
+ /* Optional: background color or font */
543
+ font-family: monospace;
544
+ background: #f8f8f8;
545
+ }
546
+
547
+ /* Right column: container for the turtle 'canvas' <div> */
548
+ .turtle-env .turtle-right {
549
+ flex: 1;
550
+ min-width: 100px;
551
+ display: flex;
552
+ flex-direction: column;
553
+ align-items: center;
554
+ }
555
+
556
+ /* The turtle <div> itself */
557
+ .turtle-env .turtle-canvas {
558
+ border: 1px solid #ccc;
559
+ width: 90%; /* or any other fixed or relative width */
560
+ height: 400px; /* you can override or make dynamic */
561
+ margin-top: 0;
562
+ /* Optional: background color if desired */
563
+ /* background: #fff; */
564
+ background: #007bff;
565
+ }
566
+
567
+
568
+
569
+
570
+
571
+ .CodeMirror-hint-active,
572
+ .CodeMirror-hint:hover {
573
+ background: #d68b00 !important;
574
+ color: #fff;
575
+ }