diff --git a/experiment/simulation/LettersPage/SmaV/V.png b/experiment/simulation/LettersPage/SmaV/V.png
new file mode 100644
index 0000000..dcfe67a
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/V.png differ
diff --git a/experiment/simulation/LettersPage/SmaV/W.png b/experiment/simulation/LettersPage/SmaV/W.png
new file mode 100644
index 0000000..9d0ce0a
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/W.png differ
diff --git a/experiment/simulation/LettersPage/SmaV/index.html b/experiment/simulation/LettersPage/SmaV/index.html
new file mode 100644
index 0000000..5f52f7d
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaV/index.html
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+ Connect Dots
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaV/main.css b/experiment/simulation/LettersPage/SmaV/main.css
new file mode 100644
index 0000000..7f58f3f
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaV/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/SmaV/sboxx.png b/experiment/simulation/LettersPage/SmaV/sboxx.png
new file mode 100644
index 0000000..bc30ae9
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/sboxx.png differ
diff --git a/experiment/simulation/LettersPage/SmaV/stroke1.png b/experiment/simulation/LettersPage/SmaV/stroke1.png
new file mode 100644
index 0000000..3f06a3c
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/stroke1.png differ
diff --git a/experiment/simulation/LettersPage/SmaV/v-new.png b/experiment/simulation/LettersPage/SmaV/v-new.png
new file mode 100644
index 0000000..ec678c6
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/v-new.png differ
diff --git a/experiment/simulation/LettersPage/SmaV/v.css b/experiment/simulation/LettersPage/SmaV/v.css
new file mode 100644
index 0000000..a0e1b22
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaV/v.css
@@ -0,0 +1,152 @@
+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: 75px;
+ left: 132px;
+ width: 15px;
+ height: 250px;
+ transform: rotate(157deg);
+
+
+}
+
+#stroke2 {
+ display: none;
+ position: absolute;
+ top: 75px;
+ left: 220px;
+ width: 15px;
+ height: 250px;
+ transform: rotate(203deg);
+ z-index: -1;
+
+}
+
+#stroke3 {
+
+ display: none;
+ position: absolute;
+ top: 75px;
+ left: 235px;
+ width: 15px;
+ height: 250px;
+ transform: rotate(162deg);
+
+}
+
+#stroke4 {
+
+ display: none;
+ position: absolute;
+ top: 73px;
+ left: 307px;
+ width: 15px;
+ height: 250px;
+ transform: rotate(197deg);
+
+}
+
+#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: 80px;
+ left: 90px;
+ width: 40px;
+ height: 240px;
+ transform: rotate(162deg);
+ z-index: 0;
+}
+
+.arrrow2 {
+
+ top: 80px;
+ left: 270px;
+ position: absolute;
+ transform: rotate(20deg);
+ z-index: 0;
+ width: 40px;
+ height: 240px;
+ z-index: -2;
+}
+
+.arrrow3 {
+
+ position: absolute;
+ transform: rotate(162deg);
+ z-index: 0;
+ top: 70px;
+ left: 240px;
+ width: 30px;
+ height: 170px;
+}
+
+.arrrow4 {
+
+ position: absolute;
+ top: 80px;
+ left: 330px;
+ width: 30px;
+ height: 200px;
+ transform: rotate(18deg);
+ z-index: 0;
+}
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaV/v.html b/experiment/simulation/LettersPage/SmaV/v.html
new file mode 100644
index 0000000..e491cac
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaV/v.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Virtual Labs
+
+
+
+
+
+
+
+
Lettering
+
Letter v
+
+
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 v
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/experiment/simulation/LettersPage/SmaV/v.js b/experiment/simulation/LettersPage/SmaV/v.js
new file mode 100644
index 0000000..5d09704
--- /dev/null
+++ b/experiment/simulation/LettersPage/SmaV/v.js
@@ -0,0 +1,128 @@
+const canvas = document.getElementById('canvas');
+const ctx = canvas.getContext('2d');
+const dot1 = document.getElementById('dot1');
+const dot2 = document.getElementById('dot2');
+const dot3 = document.getElementById('dot3');
+const dot5 = document.getElementById('dot5');
+const dot6 = document.getElementById('dot6');
+const arrow1 = document.getElementById('arrow1');
+const arrow2 = document.getElementById('arrow2');
+
+
+let isDrawing = false;
+let startX = 0;
+let startY = 0;
+let tolerance = 30;
+let nextConnection = 'dot3-dot1'; // Start with connecting dot3 to dot1
+
+arrow1.style.display = 'block'; // Initially, arrow1 is visible
+arrow2.style.display = 'none';
+
+
+function checkDotTolerance(dot, x, y) {
+ return Math.hypot(x - (dot.offsetLeft + 5), y - (dot.offsetTop + 5)) <= tolerance;
+}
+
+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)';
+ ctx.stroke();
+}
+
+function startDrawing(e) {
+ const rect = canvas.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+ let targetDot;
+
+ switch (nextConnection) {
+ case 'dot3-dot1':
+ targetDot = dot3;
+ break;
+ case 'dot1-dot5':
+ targetDot = dot1;
+ break;
+ }
+
+ if (!checkDotTolerance(targetDot, x, y)) {
+ alert('Please follow rules and draw accordingly. Try again!');
+ return;
+ }
+
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ drawToleranceCircle(targetDot, ctx);
+ drawToleranceCircle(nextConnection.includes('dot3') ? dot3 : dot1, ctx);
+
+ isDrawing = true;
+ startX = targetDot.offsetLeft + 5;
+ startY = targetDot.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';
+ 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;
+ let targetDot;
+
+ switch (nextConnection) {
+ case 'dot3-dot1':
+ targetDot = dot1;
+ break;
+ case 'dot1-dot5':
+ targetDot = dot5;
+ break;
+ }
+
+ if (checkDotTolerance(targetDot, x, y)) {
+ console.log('Stopped drawing near', targetDot.id);
+ let strokeId;
+ switch (nextConnection) {
+ case 'dot3-dot1':
+ strokeId = '1';
+ nextConnection = 'dot1-dot5';
+ arrow1.style.display = 'none';
+ arrow2.style.display = 'block';
+ dot3.style.display = 'none';
+ break;
+ case 'dot1-dot5':
+ strokeId = '2';
+ arrow2.style.display = 'none';
+ dot5.style.display = 'none';
+ button.style.display = 'block';
+ congrats.style.display = 'block';
+ // Optionally loop back or end the sequence
+ // In this case, you may want to reset the connections, e.g., nextConnection = 'dot3-dot1';
+ break;
+ }
+
+ if (strokeId) {
+ document.getElementById('stroke' + strokeId).style.display = 'block';
+ }
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ } else {
+ alert('Complete the line near the correct dot. Try Again!');
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ }
+ 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/SmaV/without-bg.gif b/experiment/simulation/LettersPage/SmaV/without-bg.gif
new file mode 100644
index 0000000..455420f
Binary files /dev/null and b/experiment/simulation/LettersPage/SmaV/without-bg.gif differ