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,108 @@
1
+ /* github-light-default.css */
2
+
3
+ .cm-s-github-light-default.CodeMirror {
4
+ background-color: #ffffff;
5
+ color: #24292e;
6
+ }
7
+
8
+ /* Set the default font and line height */
9
+ .cm-s-github-light-default .CodeMirror-lines {
10
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
11
+ line-height: 1.5;
12
+ }
13
+
14
+ /* Caret color */
15
+ .cm-s-github-light-default .CodeMirror-cursor {
16
+ border-left: 1px solid #24292e;
17
+ }
18
+
19
+ /* Selection */
20
+ .cm-s-github-light-default .CodeMirror-selected {
21
+ background-color: #0366d6;
22
+ color: #ffffff;
23
+ }
24
+
25
+ /* Line numbers */
26
+ .cm-s-github-light-default .CodeMirror-gutters {
27
+ background-color: #f6f8fa;
28
+ border-right: 1px solid #e1e4e8;
29
+ color: #959da5;
30
+ }
31
+
32
+ .cm-s-github-light-default .CodeMirror-linenumber {
33
+ color: #959da5;
34
+ }
35
+
36
+ /* Matching brackets */
37
+ .cm-s-github-light-default .CodeMirror-matchingbracket {
38
+ text-decoration: underline;
39
+ color: #22863a;
40
+ }
41
+
42
+ /* Comments */
43
+ .cm-s-github-light-default .cm-comment {
44
+ color: #6a737d;
45
+ font-style: italic;
46
+ }
47
+
48
+ /* Keywords */
49
+ .cm-s-github-light-default .cm-keyword {
50
+ color: #d73a49;
51
+ }
52
+
53
+ /* Strings */
54
+ .cm-s-github-light-default .cm-string {
55
+ color: #032f62;
56
+ }
57
+
58
+ /* Numbers */
59
+ .cm-s-github-light-default .cm-number {
60
+ color: #005cc5;
61
+ }
62
+
63
+ /* Functions */
64
+ .cm-s-github-light-default .cm-def {
65
+ color: #6f42c1;
66
+ }
67
+
68
+ /* Variables */
69
+ .cm-s-github-light-default .cm-variable {
70
+ color: #000000;
71
+ }
72
+
73
+ /* Tags */
74
+ .cm-s-github-light-default .cm-tag {
75
+ color: #22863a;
76
+ }
77
+
78
+ /* Attributes */
79
+ .cm-s-github-light-default .cm-attribute {
80
+ color: #6f42c1;
81
+ }
82
+
83
+ /* Property names */
84
+ .cm-s-github-light-default .cm-property {
85
+ color: #005cc5;
86
+ }
87
+
88
+ /* Error text */
89
+ .cm-s-github-light-default .cm-error {
90
+ color: #b31d28;
91
+ background-color: #fef2f2;
92
+ }
93
+
94
+
95
+ /* Built-in functions */
96
+ .cm-s-github-light-default .cm-builtin {
97
+ color: #6f42c1; /* This is the purple color used in GitHub Light for built-ins */
98
+ }
99
+
100
+ /* f-string specifier 'f' */
101
+ .cm-s-github-light-default .cm-string.cm-format {
102
+ color: #d73a49; /* Red color for the 'f' in f-strings */
103
+ }
104
+
105
+ /* Curly brackets in f-strings */
106
+ .cm-s-github-light-default .cm-bracket {
107
+ color: #e36209; /* Orange color for curly brackets */
108
+ }
@@ -0,0 +1,121 @@
1
+ /* one-dark theme for CodeMirror */
2
+ .cm-s-one-dark.CodeMirror {
3
+ background-color: #282C34;
4
+ color: #ABB2BF;
5
+ }
6
+
7
+ .cm-s-one-dark .CodeMirror-gutters {
8
+ background-color: #282C34;
9
+ border-right: 1px solid #3E4451;
10
+ }
11
+
12
+ .cm-s-one-dark .CodeMirror-linenumber {
13
+ color: #6e7681;
14
+ }
15
+
16
+ .cm-s-one-dark .CodeMirror-cursor {
17
+ border-left: 1px solid #ABB2BF;
18
+ }
19
+
20
+ .cm-s-one-dark .CodeMirror-selected {
21
+ background: #3E4451;
22
+ }
23
+
24
+ /* Token Colors */
25
+ .cm-s-one-dark .cm-comment {
26
+ color: #7F848E;
27
+ font-style: italic;
28
+ }
29
+
30
+ .cm-s-one-dark .cm-error {
31
+ color: #e06c75;
32
+ background-color: #1e0010;
33
+ }
34
+
35
+ .cm-s-one-dark .cm-keyword {
36
+ color: #C678DD;
37
+ }
38
+
39
+ .cm-s-one-dark .cm-operator {
40
+ color: #56B6C2;
41
+ font-weight: bold;
42
+ }
43
+
44
+ .cm-s-one-dark .cm-literal {
45
+ color: #d19a66;
46
+ }
47
+
48
+ .cm-s-one-dark .cm-variable {
49
+ color: #e06c75;
50
+ }
51
+
52
+ .cm-s-one-dark .cm-punctuation {
53
+ color: #ABB2BF;
54
+ }
55
+
56
+ .cm-s-one-dark .cm-number {
57
+ color: #D19A66;
58
+ }
59
+
60
+ .cm-s-one-dark .cm-string {
61
+ color: #98C379;
62
+ }
63
+
64
+ .cm-s-one-dark .cm-attribute {
65
+ color: #E06C75;
66
+ }
67
+
68
+ .cm-s-one-dark .cm-builtin {
69
+ color: #E5C07B;
70
+ }
71
+
72
+ .cm-s-one-dark .cm-variable-2 {
73
+ color: #E06C75;
74
+ }
75
+
76
+ .cm-s-one-dark .cm-variable-3 {
77
+ color: #E5C07B;
78
+ font-weight: bold;
79
+ }
80
+
81
+ .cm-s-one-dark .cm-atom {
82
+ color: #56B6C2;
83
+ font-weight: bold;
84
+ }
85
+
86
+ .cm-s-one-dark .cm-def {
87
+ color: #61AFEF;
88
+ font-weight: bold;
89
+ }
90
+
91
+ .cm-s-one-dark .cm-tag {
92
+ color: #E06C75;
93
+ }
94
+
95
+ .cm-s-one-dark .cm-string-2 {
96
+ color: #98C379;
97
+ }
98
+
99
+ /* Generic Styling */
100
+ .cm-s-one-dark .cm-em {
101
+ font-style: italic;
102
+ }
103
+
104
+ .cm-s-one-dark .cm-strong {
105
+ font-weight: bold;
106
+ }
107
+
108
+ .cm-s-one-dark .cm-header {
109
+ color: #61AFEF;
110
+ font-weight: bold;
111
+ }
112
+
113
+ .cm-s-one-dark .cm-quote {
114
+ color: #7F848E;
115
+ font-style: italic;
116
+ }
117
+
118
+ .cm-s-one-dark .cm-link {
119
+ color: #61AFEF;
120
+ text-decoration: underline;
121
+ }
@@ -0,0 +1,92 @@
1
+ /* Base container layout */
2
+ .dialogue {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 1em;
6
+ max-width: 800px;
7
+ margin: 0 auto;
8
+ }
9
+
10
+ .dialogue-entry {
11
+ padding: 0.5em 1em;
12
+ border-radius: 10px;
13
+ max-width: 60%;
14
+ position: relative;
15
+ display: flex;
16
+ flex-direction: column;
17
+ }
18
+
19
+ /* Speaker alignment */
20
+ .speaker1 {
21
+ align-self: flex-start;
22
+ text-align: left;
23
+ }
24
+
25
+ .speaker2 {
26
+ align-self: flex-end;
27
+ text-align: left;
28
+ }
29
+
30
+ /* Name formatting */
31
+ .speaker-name {
32
+ font-weight: bold;
33
+ margin-bottom: 0.3em;
34
+ }
35
+
36
+ .speaker-text {
37
+ white-space: pre-wrap;
38
+ }
39
+
40
+ /* Default (light mode) bubble colors */
41
+ [data-mode="light"] .speaker1 {
42
+ background-color: #e0f7fa;
43
+ }
44
+
45
+ [data-mode="light"] .speaker2 {
46
+ background-color: #ffe0b2;
47
+ }
48
+
49
+ /* Dark mode bubble colors */
50
+ [data-mode="dark"] .speaker1 {
51
+ background-color: #00334d;
52
+ color: #e0f7fa;
53
+ }
54
+
55
+ [data-mode="dark"] .speaker2 {
56
+ background-color: #d802026d;
57
+ color: #ffe0b2;
58
+ }
59
+
60
+ /* Auto mode inherits from system preferences */
61
+ @media (prefers-color-scheme: dark) {
62
+ [data-mode="auto"] .speaker1 {
63
+ background-color: #00334d;
64
+ color: #e0f7fa;
65
+ }
66
+
67
+ [data-mode="auto"] .speaker2 {
68
+ background-color: #d802026d;
69
+ color: #ffe0b2;
70
+ }
71
+ }
72
+
73
+ @media (prefers-color-scheme: light) {
74
+ [data-mode="auto"] .speaker1 {
75
+ background-color: #e0f7fa;
76
+ color: black;
77
+ }
78
+
79
+ [data-mode="auto"] .speaker2 {
80
+ background-color: #ffe0b2;
81
+ color: black;
82
+ }
83
+ }
84
+
85
+
86
+ .speaker2 {
87
+ border-top-right-radius: 0;
88
+ }
89
+
90
+ .speaker1 {
91
+ border-top-left-radius: 0;
92
+ }
@@ -0,0 +1,223 @@
1
+ /* Escape Room directive styles with light/dark mode (aligned with Jeopardy) */
2
+ :root {
3
+ color-scheme: light dark;
4
+ /* Light mode tokens */
5
+ --er-bg: #FAFAFA; /* page background */
6
+ --er-surface: #FFFFFF; /* card surface */
7
+ --er-text: #1F1F1F; /* primary text */
8
+ --er-outline: #E0E3EB; /* borders */
9
+ --er-primary: #1A73E8; /* accent */
10
+ --er-danger: #D93025; /* errors */
11
+ --er-success: #188038; /* green for progress */
12
+ --er-accent: #7C3AED; /* inviting accent for secondary action */
13
+ --er-accent-border: #6D28D9;
14
+ }
15
+ @media (prefers-color-scheme: dark) {
16
+ :root {
17
+ /* Dark mode tokens */
18
+ --er-bg: #121212;
19
+ --er-surface: #1E1E1E;
20
+ --er-text: #E8EAED;
21
+ --er-outline: #2A2E34;
22
+ --er-primary: #1B66C9;
23
+ --er-danger: #EA4335;
24
+ --er-success: #1E8E3E; /* green for progress in dark */
25
+ --er-accent: #8B5CF6; /* lighter violet for dark */
26
+ --er-accent-border: #7C3AED;
27
+ }
28
+ }
29
+
30
+ /* Explicit dark tokens when user selects dark mode (override system light) */
31
+ html.dark-mode,
32
+ body.dark-mode,
33
+ html[data-theme='dark'],
34
+ body[data-theme='dark'],
35
+ html[data-mode='dark'] {
36
+ --er-bg: #121212;
37
+ --er-surface: #1E1E1E;
38
+ --er-text: #E8EAED;
39
+ --er-outline: #2A2E34;
40
+ --er-primary: #1B66C9;
41
+ --er-danger: #EA4335;
42
+ --er-success: #1E8E3E;
43
+ --er-accent: #8B5CF6;
44
+ --er-accent-border: #7C3AED;
45
+ }
46
+
47
+ .escape-room-container {
48
+ box-sizing: border-box;
49
+ width: 100%;
50
+ margin: 1rem auto;
51
+ color: var(--er-text);
52
+ /* In light mode, let the page background show through */
53
+ background: transparent !important;
54
+ }
55
+ /* In dark mode, keep container on the dark surface token */
56
+ @media (prefers-color-scheme: dark) {
57
+ .escape-room-container { background: var(--er-bg); }
58
+ }
59
+
60
+ .er-root { background: transparent; }
61
+ .er-header { margin-bottom: 0.5rem; font-weight: 600; }
62
+ .er-progress { opacity: 0.8; }
63
+ .er-title { margin: 0.25rem 0 0.5rem 0; }
64
+ .er-body { background: var(--er-surface); border: 1px solid var(--er-outline); border-radius: 8px; padding: 1rem; color: var(--er-text); }
65
+ .er-q { font-size: 1.05rem; background: inherit; }
66
+
67
+ /* Visual progress bar */
68
+ .er-progressbar {
69
+ width: 100%;
70
+ height: 8px;
71
+ background: var(--er-outline);
72
+ border-radius: 999px;
73
+ overflow: hidden;
74
+ margin-top: 0.25rem;
75
+ }
76
+ .er-progressbar-fill {
77
+ width: 0%;
78
+ height: 100%;
79
+ background: var(--er-success);
80
+ transition: width 0.3s ease;
81
+ }
82
+
83
+ /* Resume prompt */
84
+ .er-resume-prompt {
85
+ background: var(--er-surface);
86
+ color: var(--er-text);
87
+ border: 1px solid var(--er-outline);
88
+ border-radius: 8px;
89
+ padding: 0.75rem 1rem;
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: space-between;
93
+ gap: 0.75rem;
94
+ margin-bottom: 0.5rem;
95
+ }
96
+ .er-resume-text { font-weight: 600; }
97
+ .er-resume-actions { display: flex; gap: 0.5rem; }
98
+
99
+ .escape-room-image-container { text-align: center; margin: 0.5rem 0; }
100
+ .escape-room-image-container img { max-width: 100%; height: auto; border-radius: 6px; }
101
+
102
+ .er-controls { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.75rem; }
103
+ .er-controls input[type="text"] { flex: 1; padding: 0.5rem 0.6rem; border: 1px solid var(--er-outline); border-radius: 6px; background: transparent; color: var(--er-text); }
104
+ .er-controls input[type="text"]::placeholder { color: #5F6368; opacity: 0.9; }
105
+ .er-btn { padding: 0.5rem 0.75rem; border: none; border-radius: 6px; cursor: pointer; }
106
+ .er-btn.primary { background: var(--er-primary); color: #fff; }
107
+ .er-btn.primary:hover { filter: brightness(1.05); }
108
+ .er-btn.accent {
109
+ background: var(--er-accent);
110
+ color: #FFFFFF;
111
+ border: 2px solid var(--er-accent-border);
112
+ }
113
+ .er-btn.accent:hover { filter: brightness(1.05); }
114
+
115
+ .er-feedback { min-height: 1.25rem; margin-top: 0.25rem; color: var(--er-danger); }
116
+ .er-complete { background: var(--er-surface); border: 1px solid var(--er-outline); border-radius: 8px; padding: 1rem; text-align: center; font-weight: 700; }
117
+
118
+ /* Auto theme (OS/browser preference) */
119
+ @media (prefers-color-scheme: light) {
120
+ .er-body { background: #E8F0FE; color: #000000; }
121
+ .er-progress { color: #000000; opacity: 1; }
122
+ .er-progressbar { background: #E0E3EB; }
123
+ .er-controls input[type="text"] { background: #FFFFFF; color: #000000; border-color: var(--er-outline); }
124
+ .er-controls input[type="text"]::placeholder { color: #5F6368; }
125
+ /* Completion tile uses same light blue card as questions */
126
+ .er-complete { background: #E8F0FE; color: #000000; }
127
+ /* Resume prompt uses same light blue card */
128
+ .er-resume-prompt { background: #E8F0FE; color: #000000; }
129
+ }
130
+ @media (prefers-color-scheme: dark) {
131
+ .er-body { background: var(--er-surface); color: var(--er-text); }
132
+ .er-controls input[type="text"] { background: #2A2E34; color: var(--er-text); border-color: var(--er-outline); }
133
+ .er-controls input[type="text"]::placeholder { color: #9AA0A6; }
134
+ }
135
+
136
+ /* Explicit theme overrides if site provides toggles (align with Jeopardy approach) */
137
+ html.light-mode .er-body,
138
+ body.light-mode .er-body,
139
+ html[data-theme='light'] .er-body,
140
+ body[data-theme='light'] .er-body,
141
+ [data-mode='light'] .er-body { background: #E8F0FE !important; color: #000000 !important; }
142
+ [data-mode='light'] .er-controls input[type="text"],
143
+ html.light-mode .er-controls input[type="text"],
144
+ body.light-mode .er-controls input[type="text"],
145
+ html[data-theme='light'] .er-controls input[type="text"],
146
+ body[data-theme='light'] .er-controls input[type="text"] { background: #FFFFFF !important; color: #000000 !important; border-color: var(--er-outline) !important; }
147
+
148
+ html.dark-mode .er-body,
149
+ body.dark-mode .er-body,
150
+ html[data-theme='dark'] .er-body,
151
+ body[data-theme='dark'] .er-body,
152
+ [data-mode='dark'] .er-body { background: var(--er-surface) !important; color: var(--er-text) !important; }
153
+ [data-mode='dark'] .er-controls input[type="text"],
154
+ html.dark-mode .er-controls input[type="text"],
155
+ body.dark-mode .er-controls input[type="text"],
156
+ html[data-theme='dark'] .er-controls input[type="text"],
157
+ body[data-theme='dark'] .er-controls input[type="text"] { background: #2A2E34 !important; color: var(--er-text) !important; border-color: var(--er-outline) !important; }
158
+
159
+ /* Explicit light-mode overrides for progress text */
160
+ html.light-mode .er-progress,
161
+ body.light-mode .er-progress,
162
+ html[data-theme='light'] .er-progress,
163
+ body[data-theme='light'] .er-progress,
164
+ [data-mode='light'] .er-progress { color: #000000 !important; opacity: 1 !important; }
165
+
166
+ /* Explicit dark-mode overrides for progress text */
167
+ html.dark-mode .er-progress,
168
+ body.dark-mode .er-progress,
169
+ html[data-theme='dark'] .er-progress,
170
+ body[data-theme='dark'] .er-progress,
171
+ [data-mode='dark'] .er-progress { color: var(--er-text) !important; opacity: 0.9 !important; }
172
+
173
+ /* Explicit light mode progress bar background */
174
+ html.light-mode .er-progressbar,
175
+ body.light-mode .er-progressbar,
176
+ html[data-theme='light'] .er-progressbar,
177
+ body[data-theme='light'] .er-progressbar,
178
+ [data-mode='light'] .er-progressbar { background: #E0E3EB !important; }
179
+
180
+ /* Explicit dark-mode progress bar background */
181
+ html.dark-mode .er-progressbar,
182
+ body.dark-mode .er-progressbar,
183
+ html[data-theme='dark'] .er-progressbar,
184
+ body[data-theme='dark'] .er-progressbar,
185
+ [data-mode='dark'] .er-progressbar { background: var(--er-outline) !important; }
186
+
187
+ /* Explicit light mode completion tile */
188
+ html.light-mode .er-complete,
189
+ body.light-mode .er-complete,
190
+ html[data-theme='light'] .er-complete,
191
+ body[data-theme='light'] .er-complete,
192
+ [data-mode='light'] .er-complete { background: #E8F0FE !important; color: #000000 !important; }
193
+
194
+ /* Explicit dark-mode completion tile */
195
+ html.dark-mode .er-complete,
196
+ body.dark-mode .er-complete,
197
+ html[data-theme='dark'] .er-complete,
198
+ body[data-theme='dark'] .er-complete,
199
+ [data-mode='dark'] .er-complete { background: var(--er-surface) !important; color: var(--er-text) !important; }
200
+
201
+ /* Explicit light mode resume prompt */
202
+ html.light-mode .er-resume-prompt,
203
+ body.light-mode .er-resume-prompt,
204
+ html[data-theme='light'] .er-resume-prompt,
205
+ body[data-theme='light'] .er-resume-prompt,
206
+ [data-mode='light'] .er-resume-prompt { background: #E8F0FE !important; color: #000000 !important; }
207
+
208
+ /* Explicit dark-mode resume prompt */
209
+ html.dark-mode .er-resume-prompt,
210
+ body.dark-mode .er-resume-prompt,
211
+ html[data-theme='dark'] .er-resume-prompt,
212
+ body[data-theme='dark'] .er-resume-prompt,
213
+ [data-mode='dark'] .er-resume-prompt { background: var(--er-surface) !important; color: var(--er-text) !important; border-color: var(--er-outline) !important; }
214
+
215
+ /* Container in explicit dark should use dark page tokens even if system prefers light */
216
+ html.dark-mode .escape-room-container,
217
+ body.dark-mode .escape-room-container,
218
+ html[data-theme='dark'] .escape-room-container,
219
+ body[data-theme='dark'] .escape-room-container,
220
+ [data-mode='dark'] .escape-room-container { background: var(--er-bg) !important; color: var(--er-text) !important; }
221
+
222
+ /* When embedded inside admonitions, add extra right padding to avoid clipping */
223
+ .admonition .escape-room-container { padding-right: 3rem; }