diff --git a/experiment/simulation/LettersPage/SmaR/curved arrow.gif b/experiment/simulation/LettersPage/SmaR/curved arrow.gif
new file mode 100644
index 0000000..1e1a94c
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/curved arrow.gif differ
diff --git a/experiment/simulation/LettersPage/SmaR/index.html b/experiment/simulation/LettersPage/SmaR/index.html
new file mode 100644
index 0000000..3f22a4d
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaR/index.html
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+ Connect Dots
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaR/main.css b/experiment/simulation/LettersPage/SmaR/main.css
new file mode 100644
index 0000000..7f58f3f
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaR/main.css
@@ -0,0 +1,105 @@
+* {
+ margin: 0;
+ padding: 0;
+ font-family: Arial, Helvetica, sans-serif;
+ box-sizing: border-box; /* Ensures padding and border are included in width/height calculations */
+ z-index: -4;
+}
+
+.simulation-container {
+ background-color: rgba(220, 229, 236, 1);
+ width: 100%; /* Responsive width */
+ max-width: 1000px; /* Max width to maintain design integrity */
+ min-height: 800px; /* Minimum height */
+ margin: 20px auto; /* Auto margins for centering */
+ z-index: 0;
+ display: grid;
+ justify-items: center;
+
+}
+
+.title {
+ margin: 0;
+ padding: 5px;
+ letter-spacing: 0.1em;
+ background-color: rgb(0, 140, 255);
+ color: white;
+ display: flex;
+ justify-content: center;
+ width: 100%; /* Ensure it fills the container */
+ height: 60%;
+}
+
+.instruction-main {
+ position: relative;
+ display: grid;
+ justify-content: center;
+ z-index: 0;
+ font-family: Georgia, 'Times New Roman', Times, serif;
+ height: 10%;
+ bottom: 40%;
+ font-size: 50px;
+ margin-top: 20px;
+}
+
+.instruction-main1 {
+ position: relative;
+ display: grid;
+ justify-content: center;
+ z-index: 0;
+ bottom: 100%;
+ height: 10%;
+
+
+}
+
+.rules {
+ position: relative;
+ display: flex;
+ justify-content: start;
+ z-index: 0;
+
+ height: 10%;
+ bottom: 45px;
+ font-size: 150%;
+ left: -40%;
+}
+
+.rule {
+ position: relative;
+ display: flex;
+ justify-content: start;
+ z-index: 0;
+ font-family: Georgia, 'Times New Roman', Times, serif;
+
+
+ left: -100px;
+ bottom: 80px;
+
+}
+
+.congrats {
+ position: relative;
+ display: none;
+ justify-content: start;
+ z-index: 0;
+ height: 10%;
+ top: 80%;
+ font-size: 150%;
+
+}
+
+.next-exp {
+ position: absolute;
+ display: none;
+ left: 75%;
+ transform: translateX(-50%); /* Centering button horizontally */
+ padding: 10px 15px;
+ color: white;
+ background-color: rgb(20, 117, 228);
+ font-weight: 600;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ bottom: 30px;
+}
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaR/r-new.png b/experiment/simulation/LettersPage/SmaR/r-new.png
new file mode 100644
index 0000000..6439d3f
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/r-new.png differ
diff --git a/experiment/simulation/LettersPage/SmaR/r-strokee.png b/experiment/simulation/LettersPage/SmaR/r-strokee.png
new file mode 100644
index 0000000..e305d91
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/r-strokee.png differ
diff --git a/experiment/simulation/LettersPage/SmaR/r.css b/experiment/simulation/LettersPage/SmaR/r.css
new file mode 100644
index 0000000..3829a8a
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaR/r.css
@@ -0,0 +1,118 @@
+body {
+ display: flex;
+ justify-content: center; /* Center horizontally */
+ align-items: center; /* Center vertically */
+ height: 100vh; /* Full height of the viewport */
+ margin: 0; /* Remove default margin */
+}
+
+#canvas-container {
+ position: relative;
+ width: 400px;
+ height: 400px;
+ border: 1px solid black;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+#canvas {
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1px solid black;
+ z-index: 10;
+ cursor: url('data:image/x-icon;base64,AAACAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAhYWFAPqv6ADgm4sASkpKAJ/l7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAEiIAAAAAAAAAAAAAAAAAAxEiIAAAAAAAAAAAAAAAADMxEgAAAAAAAAAAAAAAAAMzMxAAAAAAAAAAAAAAAAAzMzMAAAAAAAAAAAAAAAADMzMwAAAAAAAAAAAAAAAAMzMzAAAAAAAAAAAAAAAAAzMzMAAAAAAAAAAAAAAAADMzMwAAAAAAAAAAAAAAAABTMzAAAAAAAAAAAAAAAAAFVTMAAAAAAAAAAAAAAAAABFVQAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////////////////////////////////////////P////h////wP///4H///8D///+B////A////gf///wP///4H///+D////B////w////8///////////////w=='), auto;
+}
+
+.dot {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ background-color: red;
+ border-radius: 50%;
+ transform: translate(-50%, -50%);
+}
+
+
+#stroke1 {
+ display: none;
+ position: absolute;
+ top: 90px;
+ left: 94px;
+ width: 11px;
+ height: 225px;
+ z-index: -1;
+
+
+}
+
+#stroke2 {
+ display: none;
+ position: absolute;
+ top: 90px;
+ left: 95px;
+ width: 140px;
+ height: 90px;
+ transform: rotate(10deg);
+
+}
+
+#stroke3 {
+
+ display: none;
+ position: absolute;
+ top: 187px;
+ left: 140px;
+ width: 170px;
+ height: 132px;
+
+}
+#sbox {
+ position: relative;
+ left: 115px;
+ width: 400px;
+ height: 400px;
+ z-index: -2;
+ display: none;
+}
+
+#trace {
+ position: relative;
+ bottom: 20px;
+ right: 90px;
+ width: 600px;
+ height: 550px;
+ z-index: -10;
+}
+
+.arrrow1 {
+
+ position: absolute;
+ top: 120px;
+ left: 40px;
+ width: 40px;
+ height: 130px;
+ transform: rotate(180deg);
+ z-index: -1;
+}
+.arrrow2 {
+ display: none;
+ position: absolute;
+ top: 110px;
+ left: 130px;
+ width: 50px;
+ height: 100px;
+ transform: rotate(250deg) scalex(1);
+ z-index: -1;
+}
+.arrrow3 {
+ display: none;
+ position: absolute;
+ top: 200px;
+ left: 310px;
+ width: 20px;
+ height: 110px;
+ transform: rotate(180deg);
+ z-index: 0;
+}
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaR/r.html b/experiment/simulation/LettersPage/SmaR/r.html
new file mode 100644
index 0000000..0926817
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaR/r.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Virtual Labs
+
+
+
+
+
+
+
+
Lettering
+
Letter r
+
+
Rules-
+
1] Draw the line in the direction of the arrow on the trace of the letter.
+
2] To draw, click on the starting point and drag the cursor to end point .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Congrats you have learnt to draw Letter r
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaR/r.js b/experiment/simulation/LettersPage/SmaR/r.js
new file mode 100644
index 0000000..e6bc218
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaR/r.js
@@ -0,0 +1,98 @@
+const canvas = document.getElementById('canvas');
+const ctx = canvas.getContext('2d');
+const dot3 = document.getElementById('dot3');
+const dot4 = document.getElementById('dot4');
+const dot1 = document.getElementById('dot1');
+const arrow1 = document.getElementById('arrow1');
+const arrow2 = document.getElementById('arrow2');
+
+let isDrawing = false;
+let startX = 0;
+let startY = 0;
+let tolerance = 30; // Tolerance radius for dot connection
+let nextConnection = 'dot3-dot4'; // Start with connecting dot3 to dot4
+
+function drawToleranceCircle(dot, ctx) {
+ ctx.beginPath();
+ ctx.arc(dot.offsetLeft + 5, dot.offsetTop + 5, tolerance, 0, 2 * Math.PI);
+ ctx.strokeStyle = 'rgba(255, 200, 0, 0.5)'; // Visual guide for connection
+ ctx.stroke();
+}
+
+function startDrawing(e) {
+ const rect = canvas.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+ let expectedDot;
+
+ if (nextConnection === 'dot3-dot4') {
+ expectedDot = dot3;
+ } else if (nextConnection === 'dot4-dot1') {
+ expectedDot = dot4;
+ } else {
+ return;
+ }
+
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ drawToleranceCircle(expectedDot, ctx);
+
+ if (Math.hypot(x - (expectedDot.offsetLeft + 5), y - (expectedDot.offsetTop + 5)) > tolerance) {
+ alert('Please follow rules and draw accordingly');
+ return;
+ }
+
+ isDrawing = true;
+ startX = expectedDot.offsetLeft + 5;
+ startY = expectedDot.offsetTop + 5;
+}
+
+function draw(e) {
+ if (!isDrawing) return;
+ const rect = canvas.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+ ctx.beginPath();
+ ctx.moveTo(startX, startY);
+ ctx.lineTo(x, y);
+ ctx.stroke();
+ startX = x;
+ startY = y;
+ ctx.strokeStyle = 'black'; // Change line color to black
+ ctx.lineWidth = 6;
+}
+
+function stopDrawing(e) {
+ if (!isDrawing) return;
+ const rect = canvas.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+
+ if (nextConnection === 'dot3-dot4' && Math.hypot(x - (dot4.offsetLeft + 5), y - (dot4.offsetTop + 5)) <= tolerance) {
+ document.getElementById('stroke1').style.display = 'block';
+ console.log('Stopped drawing near', dot4.id);
+ nextConnection = 'dot4-dot1';
+ arrow1.style.display = 'none'; // Hide the first arrow
+ arrow2.style.display = 'block'; // Show the second arrow
+ dot3.style.display = 'none'; // Hide the first dot
+
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ } else if (nextConnection === 'dot4-dot1' && Math.hypot(x - (dot1.offsetLeft + 5), y - (dot1.offsetTop + 5)) <= tolerance) {
+ document.getElementById('stroke2').style.display = 'block';
+ console.log('Stopped drawing near', dot1.id);
+ arrow2.style.display = 'none'; // Hide the arrow
+ dot4.style.display = 'none'; // Hide the second dot
+ dot1.style.display = 'none'; // Hide the third dot
+ button.style.display = 'block'; // Show the button
+ congrats.style.display = 'block'; // Show the congrats message
+ nextConnection = ''; // All connections done
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ } else {
+ alert('Complete the line. Try Again!');
+ ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
+ }
+ isDrawing = false;
+}
+
+canvas.addEventListener('mousedown', startDrawing);
+canvas.addEventListener('mousemove', draw);
+canvas.addEventListener('mouseup', stopDrawing);
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaR/sboxx.png b/experiment/simulation/LettersPage/SmaR/sboxx.png
new file mode 100644
index 0000000..bc30ae9
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/sboxx.png differ
diff --git a/experiment/simulation/LettersPage/SmaR/stroke1.png b/experiment/simulation/LettersPage/SmaR/stroke1.png
new file mode 100644
index 0000000..3f06a3c
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/stroke1.png differ
diff --git a/experiment/simulation/LettersPage/SmaR/without-bg.gif b/experiment/simulation/LettersPage/SmaR/without-bg.gif
new file mode 100644
index 0000000..455420f
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaR/without-bg.gif differ