` ഉള്ളിൽ ഉള്ള `
`-ന്റെ നിറം എന്താകും?
+```css
+div { color: blue; }
+.special { color: green; }
+h1 { color: red; }
+```
+*ഉത്തരം: ചുവപ്പ് (എലമെന്റ് സെലക്ടർ നേരിട്ട് h1 നെ ലക്ഷ്യമിടുന്നു)*
+
+## CSS സെലക്ടറുകൾ നിമിഷപൂർവ്വം കൈകാര്യം ചെയ്യുക
+
+CSS സെലക്ടറുകൾ സവിശേഷ എലമെന്റുകൾക്ക് സ്റ്റൈൽ നൽകാനുള്ള നിനക്ക് വഴിയാണ്. "വീട്" എന്നു പറയുന്നതിനുപകരം, "മെപ്ല് സ്ട്രീറ്റിൽ റെഡ് വാതിൽ ഉള്ള നീല വീട്" എന്നതുപോലെ കൃത്യമായ മാർഗ്ഗനിർദ്ദേശമാണ്.
+
+CSS വിവിധ തരത്തിലുള്ള സെലക്ടറുകൾ നൽകുന്നു, ശരിയായ സെലക്ടർ തിരഞ്ഞെടുക്കുന്നത് ആവശ്യത്തിനുള്ള മികച്ച ഉപകരണം തിരഞ്ഞെടുക്കുന്നതിനോട് തുല്യമാണ്. ഇടയ്ക്കിടെ എല്ലാ കെട്ടിടത്തിലെ വാതിലുകൾക്കും സ്റ്റൈൽ നല്കണം, ചിലപ്പോഴപ്പോൾ മാത്രം ഒരു പ്രത്യേക വാതിലിനു മാത്രമേ.
+
+### എലമെന്റ് സെലക്ടറുകൾ (ടാഗുകൾ)
+
+എലമെന്റ് സെലക്ടറുകൾ ടാഗ് നാമം അടിസ്ഥാനമാക്കി HTML എലമെന്റുകൾ ലക്ഷ്യമിടുന്നു. ഈ സെലക്ടർ പേജ് മുഴുവൻ വ്യാപകമായ അടിസ്ഥാന സ്റ്റൈൽ നല്കാൻ അനുയോജ്യമാണ്:
+
+```css
+body {
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ margin: 0;
+ padding: 0;
+}
+
+h1 {
+ color: #3a241d;
+ text-align: center;
+ font-size: 2.5rem;
+ margin-bottom: 1rem;
+}
+```
+
+**ഈ സ്റ്റൈലുകൾ അത്രയ്ക്കായി:**
+- പേജ് മുഴുവൻ ഏകീകൃത ടൈപ്പോഗ്രഫി കാണിക്കാൻ `body` സെലക്ടർ ഉപയോഗിക്കുന്നു
+- മികച്ച നിയന്ത്രണത്തിനായി ബ്രൗസറിന്റെ ഡീഫോൾട്ട് മാർജിനുകളും പാഡിംഗുകളും നീക്കം ചെയ്യുന്നു
+- എല്ലാ ഹെഡിംഗ് എലമെന്റുകളെയും നിറം, സന്ധി, അലൈന്മെന്റ് നൽകുന്നു
+- സ്കെയിലബിൾ, ആക്സസിബിൾ ഫോണ്ട് വലുപ്പത്തിന് `rem` യൂണിറ്റ് ഉപയോഗിക്കുന്നു
+
+എങ്കിലും, എലമെന്റ് സെലക്ടറുകൾ സാധാരണ സ്റ്റൈലിംഗിന് നല്ലതായിരിക്കുമ്പോൾ, ഓരോ ടെററിയം ചെടികൾ പോലുള്ള പ്രത്യേക ഘടകങ്ങൾക്ക് കൂടുതൽ പ്രത്യേക സെലക്ടറുകൾ ആവശ്യമായിരിക്കും.
+
+### ഏകാന്ത എലമെന്റുകൾക്കായി ID സെലക്ടറുകൾ
+
+ID സെലക്ടറുകൾ `#` ചിഹ്നം ഉപയോഗിച്ച് പ്രത്യേക `id` ഉള്ള എലമെന്റുകളെ ലക്ഷ്യമിടുന്നു. പേജിൽ ഓരോ ID ഒറ്റത്തവണ മാത്രം ഉപയോഗിക്കണം, അതിനാൽ പ്രത്യേകം പ്രത്യേക ഘടകങ്ങൾക്ക് (ഉദാ: ടെററിയത്തിന്റെ ഇടത്തും വലത്തും ഉള്ള ചെടി കണ്ടെയ്നറുകൾ) ഇവ നല്ലതാണ്.
+
+ടെററിയത്തിലെ സൈഡ് കണ്ടെയ്നറുകൾ എവിടെ ചെടികൾ താമസിക്കും, അവയ്ക്ക് വേണ്ടി സ്റ്റൈലിംഗ് തീർക്കാം:
+
+```css
+#left-container {
+ background-color: #f5f5f5;
+ width: 15%;
+ left: 0;
+ top: 0;
+ position: absolute;
+ height: 100vh;
+ padding: 1rem;
+ box-sizing: border-box;
+}
+
+#right-container {
+ background-color: #f5f5f5;
+ width: 15%;
+ right: 0;
+ top: 0;
+ position: absolute;
+ height: 100vh;
+ padding: 1rem;
+ box-sizing: border-box;
+}
+```
+
+**ഇവിടെ സംഭവിക്കുന്നത്:**
+- `absolute` പൊസിഷനിംഗുമായി കണ്ടെയ്നറുകൾ ഇടത്തും വലത്തും നീക്കുന്നു
+- സ്ക്രീൻ വലിപ്പത്തിന് അനുസരിച്ച് `vh` (viewport height) യൂണിറ്റിൽ ഉയരം നൽകുന്നു
+- പാഡിംഗിൽ ഉൾപ്പെടുത്തിയവയ്ക്ക് `box-sizing: border-box` ഉപയോഗിക്കുന്നു
+- സോഴ്യമായ ജൂലിയൻ മൂല്യങ്ങളിൽ നിന്നുള്ള `px` യൂണിറ്റുകൾ നീക്കി ലക്ഷ്യമിടുന്നു
+- കഠിനമായ കറുപ്പുപകരം കണ്ണിന് ഇതിന് സൗകര്യമുള്ള സബ്റ്റിൽ പശ്ചാത്തല നിറം നൽകുന്നു
+
+✅ **കോഡ് ഗുണമേന്മ പരിശോധന**: ഈ CSS DRY (Don't Repeat Yourself) നിയമം ലംഘിക്കുന്നതാണ് കാണുന്നത്. ഒരു ID ഒപ്പം ക്ലാസ് ഉപയോഗിച്ച് ഇത് പുനഃസംഘടിപ്പിക്കാമോ?
+
+**മികച്ച സമരയോഗം:**
+```html
+
+
+```
+
+```css
+.container {
+ background-color: #f5f5f5;
+ width: 15%;
+ top: 0;
+ position: absolute;
+ height: 100vh;
+ padding: 1rem;
+ box-sizing: border-box;
+}
+
+#left-container {
+ left: 0;
+}
+
+#right-container {
+ right: 0;
+}
+```
+
+### പുനരുപയോഗപ്പെടുത്താവുന്ന ഘടകങ്ങൾക്ക് ക്ലാസ് സെലക്ടറുകൾ
+
+ക്ലാസ് സെലക്ടറുകൾ `.` ചിഹ്നം ഉപയോഗിച്ച് ഒടുക്കം ഒരു മുതിർന്ന ഇലമെന്റിന് പലത്തവണ സ്റ്റൈലുകൾ പ്രയോഗിക്കാം. ID-കളുടെ വ്യത്യാസം, ക്ലാസുകൾ പേജിലുടനീളം വീണ്ടും ഉപയോഗിച്ചേക്കാം, അതുകൊണ്ട് സ്ഥിരമായ സ്റ്റൈലിംഗ് മാതൃകകൾക്കായി ഇവ ഏറ്റവും അനുയോജ്യമാണ്.
+
+നമ്മുടെ ടെററിയത്തിൽ ഓരോ ചെടിക്കും സമാനമായ സ്റ്റൈലിംഗ് ആവശ്യമായിരിക്കുന്നു എങ്കിലും വ്യക്തിഗത പൊസിഷനിംഗ് വേണം. നാം പുനരുപയോഗ ക്ലാസ്സുകളും ID-യും സംയോജിപ്പിച്ച് ഉപയോഗിക്കാം.
+
+**ഓരോ ചെടിക്കും വേണ്ട HTML ഘടന:**
+```html
+
+
+
+```
+
+**പ്രധാന ഘടകങ്ങൾ:**
+- എല്ലാ ചെടികൾക്കുമുള്ള പൊസിഷൻ കൺട്രോൾ ചെയ്യാൻ `class="plant-holder"` ഉപയോഗിക്കുന്നു
+- ചിത്രത്തിനും പെരുമാറ്റത്തിനും `class="plant"` നൽകുന്നു
+- ഓരോ ചെടിക്കും വ്യത്യസ്ത പൊസിഷനിംഗിനും ജാവാസ്ക്രിപ്റ്റ് ഉൾപെടുത്തലിനും വ്യത്യസ്ത ID `id="plant1"` ഉപയോഗിക്കുന്നു
+- സ്ക്രീൻ റീഡർ സൗഹൃദം ഉറപ്പാക്കാൻ വിവരണപരമായ alt ടെക്സ്റ്റ് നൽകുന്നു
+
+ഇപ്പൊഴിത് നിന്റെ `style.css` ഫയലിൽ വേറെ സ്റ്റൈലുകൾ ചേർക്കൂ:
+
+```css
+.plant-holder {
+ position: relative;
+ height: 13%;
+ left: -0.6rem;
+}
+
+.plant {
+ position: absolute;
+ max-width: 150%;
+ max-height: 150%;
+ z-index: 2;
+ transition: transform 0.3s ease;
+}
+
+.plant:hover {
+ transform: scale(1.05);
+}
+```
+
+**ഈ സ്റ്റൈലുകൾ വിശദീകരിക്കുക:**
+- `plant-holder`-ന് `relative` പൊസിഷനിംഗ് വഴി പൊസിഷനിംഗ് കോൺടെക്സ്റ്റ് ഒരുക്കുന്നു
+- ഓരോ `plant-holder`-നും 13% ഉയരം നൽകുന്നു, ചെടികൾ സ്ക്രോൾ ഇല്ലാതെ വീതിയിൽ പൊരുത്തപ്പെടും
+- `plant-holder` ലെHolder-നെ കുറെ ഇടത്തേക്ക് മാറ്റി ചെടികളെ കൂടുതൽ കൃത്യമായി മദ്ധ്യസ്ഥമാക്കുന്നു
+- `max-width` `max-height` ഉപയോഗിച്ച് ചെടികൾ പ്രതികരണശീലമായി സ്കെയിൽ ചെയ്യാനാവും
+- `z-index` ഉപയോഗിച്ച് ടെററിയത്തിലെ മറ്റു ഘടകങ്ങളെ മുകളിൽ വയ്ക്കുന്നു
+- CSS ട്രാനുംഷനുകൾ വഴി സാവധാനമായ ഹോവർ ഇഫക്റ്റ് ചേർക്കുന്നു
+
+✅ **ആവശ്യക്കാഴ്ച**: `.plant-holder` ഉം `.plant` ഉം വേറിട്ടതിനുള്ള ആവശ്യകം എന്താണ്? വെറും ഒന്ന് മാത്രം ഉപയോഗിച്ചാൽ എന്താകും?
+
+> 💡 **ഡിസൈൻ മാതൃക**: കോൺടെയ്നർ (.plant-holder) ലേയൗട്ടും പൊസിഷൻ നിയന്ത്രിക്കുന്നു, ഉള്ളടക്കം (.plant) ദൃശ്യഭാവവും സ്കേലും കൈകാര്യം ചെയ്യുന്നു. ഇത് കോഡ് കൂടുതൽ പുനഃസംഘടന ഉചിതമാക്കുന്നു.
+
+## CSS പൊസിഷനിംഗ് മനസ്സിലാക്കുക
+
+CSS പൊസിഷനിംഗ് ഒരു നാടകത്തിലെ സ്റ്റേജ് ഡയറക്ടറുടെ പോലെ - എല്ലാ അഭിനയക്കാരും എവിടെ നിൽക്കും, എങ്ങനെയാവരും എന്ന് നിർദ്ദേശിക്കുന്നു. ചില അഭിനേതാക്കൾ സാധാരണ നിലയിൽ നിന്നു പ്രവർത്തിക്കും, മറ്റുചിലർ പ്രത്യേക പൊസിഷനിംഗ് ആവശ്യമാണ്.
+
+പോസിഷനിംഗ് മനസ്സിലാക്കിയാൽ പല ലേയൗട്ട് പ്രശ്നങ്ങളും പരിഹരിക്കാം. സ്ക്രോൾ ചെയ്യുമ്പോഴും നാവിഗേഷൻ ബാർ മുകളിൽ തന്നെ നിലനിർത്തണം? അതിന് പൊസിഷനിംഗ് ഉപയോഗിക്കുക. നിശ്ചിത ഇടത്ത് ടൂള്ടിപ്പ് കാണിക്കണം? അതും പൊസിഷനിംഗ്.
+
+### അഞ്ച് പൊസിഷൻ മൂല്യങ്ങൾ
+
+```mermaid
+quadrantChart
+ title CSS പോസിഷനിംഗ് തന്ത്രം
+ x-axis ഡോക്യുമെന്റ് ഫ്ലോ --> ഫ്ലോയിൽ നിന്ന് നീക്കംചെയ്തത്
+ y-axis സ്റ്റാറ്റിക് പൊസിഷൻ --> കൃത്യമായ നിയന്ത്രണം
+ quadrant-1 അബ്സൊല്യൂട്ട്
+ quadrant-2 ഫിക്സഡ്
+ quadrant-3 സ്റ്റാറ്റിക്
+ quadrant-4 സ്റ്റിക്കി
+
+ Static: [0.2, 0.2]
+ Relative: [0.3, 0.6]
+ Absolute: [0.8, 0.8]
+ Fixed: [0.9, 0.7]
+ Sticky: [0.5, 0.9]
+```
+| പൊസിഷൻ മൂല്യം | പെരുമാറ്റം | ഉപയോഗം |
+|----------------|----------|----------|
+| `static` | സ്വാഭാവിക പ്രവാഹം, top/left/right/bottom അനുഗമിക്കില്ല | സാധാരണ ഡോക്യുമെന്റ് ലേയൗട്ട് |
+| `relative` | സ്വാഭാവിക സ്ഥിതിക്ക് അനുഭവപരമായ പൊസിഷൻ | ചെറിയ ക്രമീകരണങ്ങൾ, പൊസിഷനിംഗ് കോൺടെക്സ്റ്റ് സൃഷ്ടിക്കൽ |
+| `absolute` | അടുത്ത പൊസിഷൻ ചെയ്ത അവകാശിയായ മുൻപുള്ള എലമെന്റിനെ അടിസ്ഥാനമാക്കി | കൃത്യമായ സ്ഥാനം, ഓവർലെകൾ |
+| `fixed` | viewport അടിസ്ഥാനമാക്കിയുള്ള പൊസിഷൻ | നാവിഗേഷൻ ബാറുകൾ, നിറഞ്ഞ എലമെന്റുകൾ |
+| `sticky` | സ്ക്രോൾ അനുസരിച്ച് `relative`നും `fixed`ക്കും ഇടയിൽ മാറുന്നു | സ്ക്രോൾ ചെയ്യുമ്പോൾ പിടിച്ചുനിർത്തുന്ന ഹെഡറുകൾ |
+
+### നമുക്ക് കിട്ടിയ ടെററിയത്തിൽ പൊസിഷനിംഗ്
+
+നമ്മുടെ ടെററിയം ഉദ്ദേശിച്ച ലേയൗട്ട് സൃഷ്ടിക്കാൻ പൊസിഷനിംഗ് മൂല്യങ്ങളുടെ സമന്വയം ഉപയോഗിക്കുന്നു:
+
+```css
+/* Container positioning */
+.container {
+ position: absolute; /* Removes from normal flow */
+ /* ... other styles ... */
+}
+
+/* Plant holder positioning */
+.plant-holder {
+ position: relative; /* Creates positioning context */
+ /* ... other styles ... */
+}
+
+/* Plant positioning */
+.plant {
+ position: absolute; /* Allows precise placement within holder */
+ /* ... other styles ... */
+}
+```
+
+**പോസിഷനിംഗ് തന്ത്രം:**
+- **Absolute കൺടെയ്നറുകൾ** സ്വാഭാവിക ഫ്ലോയിൽ നിന്നും നീക്കം ചെയ്ത് സ്ക്രീൻ അരികുകളിൽ പിണ്ഡ് ചെയ്യുന്നു
+- **Relative ചെടി holder-കൾ** പൊസിഷനിംഗ് കോൺടെക്സ്റ്റ് സൃഷ്ടിക്കുന്നു, ഡോക്യുമെന്റ് ഫ്ലോയിൽ തുടരുന്നു
+- **Absolute ചെടികൾ** അവരുടെ relative holder-ലുള്ള കൃത്യമായ പൊസിഷനം നേടുന്നു
+- **ഈ സംയോജനം** ചെടികൾ കൂമ്പാരമായി മുകളിലേക്ക് ശ്രേണീകരിച്ച് വ്യക്തിഗത പൊസിഷനിംഗ് സാധ്യമാക്കുന്നു
+
+> 🎯 **അത് എന്തിന് ആവശ്യമാണ്**: അടുത്ത പാഠത്തിൽ ചെടികൾ ഡ്രാഗ് ആൻഡ് ഡ്രോപ്പ് ചെയ്യാവുന്നവയാക്കാൻ absolute പൊസിഷനിംഗ് വേണം. ഇത് അവരെ സാധാരണ ലേയൗട്ട് ഫ്ലോയിൽ നിന്നും നീക്കം ചെയ്യുന്നു.
+
+✅ **പരീക്ഷണം**: പൊസിഷൻ മൂല്യങ്ങൾ മാറ്റി ഫലങ്ങൾ കാണൂ:
+- `.container`-ന് `absolute` ന്റെ പകരം `relative` നു മാറ്റിയാൽ സംഭവിക്കുന്നത് എന്താകും?
+- `.plant-holder` `relative` പകരം `absolute` ഉപയോഗിച്ചാൽ ലേയൗട്ട് എങ്ങനെയാണ് മാറുക?
+- `.plant`-നെ `relative` പോസിഷൻ ചെയ്യുമ്പോൾ എന്ത് സംഭവിക്കും?
+
+### 🔄 **പെടഗോഗിക്കൽ ചെക്ക്- ഇൻ**
+**CSS പോസിഷനിംഗ് മാസ്ററീ**: നിങ്ങളുടെ മനസിലാക്കലുകൾ പരിശോധിക്കുക:
+- ✅ പ്ലാന്റുകൾക്ക് ഡ്രാഗ്-അൻഡ്-ഡ്രോപ്പ് സജ്ജമാക്കാൻ ആബ്സല്യൂട്ട് പോസിഷനിംഗ് എങ്ങനെ സഹായിക്കുന്നു എന്ന് വിശദീകരിക്കാമോ?
+- ✅ റീലേറ്റീവ് കോൺടൈനറുകൾ പോസിഷനിംഗ് കോൺടെക്സ്റ്റ് എങ്ങനെ സൃഷ്ടിക്കുന്നു എന്ന് മനസിലായോ?
+- ✅ സൈഡ് കോൺടൈനറുകൾ ആബ്സല്യൂട്ട് പോസിഷനിംഗ് ഉപയോഗിക്കുന്നത് എന്തുകൊണ്ട്?
+- ✅ പ്ലേസ്മന്റും പൊസിഷൻ ഡിക്ലറേഷനുകളും മാറിക്കളയുമ്പോൾ എന്ത് സംഭവിക്കും?
+
+**യഥാർത്ഥ ലോക ബന്ധം**: CSS-ലെ പോസിഷനിംഗ് യാഥാർത്ഥ്യത്തിലെ ലേയൗട്ടുമായി എങ്ങനെ പാരമ്പര്യമുള്ളതാണെന്ന് കാണുക:
+- **സ്റ്റാറ്റിക്**: മുറ്റത്തുള്ള പുസ്തകങ്ങൾ (സ്വാഭാവിക ക്രമം)
+- **രീലേറ്റീവ്**: ഒരു പുസ്തകം അല്പം നസുക്കിയെങ്കിലും അതിന്റെ സ്ഥാനം സൂക്ഷിക്കുക
+- **ആബ്സല്യൂട്ട്**: ഒരു മാർക്കർ കൃത്യമായ പേജിൽ സ്ഥാപിക്കൽ
+- **ഫിക്സ്**: വായിക്കുമ്പോൾ ചുരുളുന്ന സ്റ്റിക്കി നോട്ട്
+
+## CSS ഉപയോഗിച്ച് ടെറിയം നിർമ്മാണം
+
+ഇപ്പോൾ CSS മാത്രം ഉപയോഗിച്ച് ഗ്ലാസ് ജാർ നിർമ്മിക്കാം - ചിത്രങ്ങൾ അല്ലെങ്കിൽ ഗ്രാഫിക്സ് സോഫ്റ്റ്വേർ ആവശ്യമില്ല.
+
+പോസിഷനിംഗ്, ട്രാൻസ്പറൻസി എന്നിവ ഉപയോഗിച്ച് യാഥാർത്ഥ്യസമമായ ഗ്ലാസ്, ഷാഡോസ്, ആഴം സൃഷ്ടിക്കുന്നത് CSS–ന്റെ ദൃശ്യശേഷിയെ കാണിക്കുന്നു. ബൗഹൗസ് പ്രസ്ഥാനത്തിലെ ആർക്കിടെക്റ്റുകൾ എങ്ങനെ ലളിതമായ ജ്യാമിതീയ രൂപങ്ങൾ ഉപയോഗിച്ച് സങ്കീർണ്ണവും മനോഹരവുമായ ഘടനകൾ സൃഷ്ടിച്ചു എന്ന പോലെ, ഈ സിദ്ധാന്തങ്ങൾ മനസിലാക്കിയാൽ നീ רבות വെബ് ഡിസൈനുകളിലെ CSS സാങ്കേതിക വിദ്യ തിരിച്ചറിയാം.
+
+```mermaid
+flowchart LR
+ A[ജാർ മുകളിൽ] --> E[പൂർണ്ണ ടെരറിയം]
+ B[ജാർ മതിലുകൾ] --> E
+ C[മണ്ണ് പാളി] --> E
+ D[ജാർ അടിയുടെ] --> E
+ F[ഗ്ലാസ് ഫലങ്ങള്] --> E
+
+ A1["50% വീതി 5% ഉയരം മുകളിൽ സ്ഥാനം"] --> A
+ B1["60% വീതി 80% ഉയരം വെട്ടിപ്പടർന്നCorners 0.5 അപാരദർശിനി"] --> B
+ C1["60% വീതി 5% ഉയരം കറുത്ത തവിട്ട് അടിമുള്ള പാളി"] --> C
+ D1["50% വീതി 1% ഉയരം താഴെ സ്ഥാനം"] --> D
+ F1["സൂക്ഷ്മ നിഴലുകൾ പരദർശിത്വം സ് iziൻഡ് ലെയറിംഗ്"] --> F
+
+ style E fill:#d1e1df,stroke:#3a241d
+ style A fill:#e8f5e8
+ style B fill:#e8f5e8
+ style C fill:#8B4513
+ style D fill:#e8f5e8
+```
+### ഗ്ലാസ്സ് ജാർ ഘടകങ്ങൾ ഉണ്ടാക്കൽ
+
+ടെറിയം ജാറിന്റെ ഘടകങ്ങൾ ഓരോന്നായി ഉണ്ടാക്കാം. ഓരോ ഭാഗവും ആബ്സല്യൂട്ട് പോസിഷനിംഗ് ഉപയോഗിക്കുകയും ശതമാനത്തിലുള്ള അളവുകൾ ഉപയോഗിച്ച് റെസ്പോമ്സീവ് ഡിസൈൻ ഉറപ്പുവരുത്തുകയും ചെയ്യുന്നു:
+
+```css
+.jar-walls {
+ height: 80%;
+ width: 60%;
+ background: #d1e1df;
+ border-radius: 1rem;
+ position: absolute;
+ bottom: 0.5%;
+ left: 20%;
+ opacity: 0.5;
+ z-index: 1;
+ box-shadow: inset 0 0 2rem rgba(0, 0, 0, 0.1);
+}
+
+.jar-top {
+ width: 50%;
+ height: 5%;
+ background: #d1e1df;
+ position: absolute;
+ bottom: 80.5%;
+ left: 25%;
+ opacity: 0.7;
+ z-index: 1;
+ border-radius: 0.5rem 0.5rem 0 0;
+}
+
+.jar-bottom {
+ width: 50%;
+ height: 1%;
+ background: #d1e1df;
+ position: absolute;
+ bottom: 0;
+ left: 25%;
+ opacity: 0.7;
+ border-radius: 0 0 0.5rem 0.5rem;
+}
+
+.dirt {
+ width: 60%;
+ height: 5%;
+ background: #3a241d;
+ position: absolute;
+ border-radius: 0 0 1rem 1rem;
+ bottom: 1%;
+ left: 20%;
+ opacity: 0.7;
+ z-index: -1;
+}
+```
+
+**ടെറിയം നിർമ്മിതിയുടെ അറിവ്:**
+- സ്ക്രീൻ വലുപ്പങ്ങളിൽ രേഖാത്മകമായ സ്കെയ്ലിംഗിന് ശതമാന അടിസ്ഥാനത്തിലുള്ള അളവുകൾ ഉപയോഗിക്കുന്നു
+- ഘടകങ്ങളെ കൃത്യമായി ചേർക്കാനും ക്രമീകരിക്കാനും ആബ്സല്യൂട്ട് പോസിഷനിംഗ് ഉപയോഗിക്കുന്നു
+- ഗ്ലാസ് ട്രാൻസ്പറൻസി ഫലത്തിനായി വ്യത്യസ്ത ഒപ്പസിറ്റി മൂല്യങ്ങൾ നോക്കുന്നു
+- വനaspാപങ്ങൾ ജാറിന് ഉള്ളിൽ കാണാനും `z-index` ലെയർ ചെയ്യുന്നു
+- യഥാർത്ഥത കൂടിയ എഫക്ടിനായി നേർത്ത ബോക്സ് ഷാഡോയും ബോർഡർ-റേഡിയസും കൂട്ടിക്കുന്നു
+
+### ശതമാന അടിസ്ഥാനത്തിലുള്ള റെസ്പോൺസീവ് ഡിസൈൻ
+
+എല്ലാ അളവുകളും പിക്സൽ സ്ഥിരമല്ല, ശതമാനമാണ് ഉപയോഗിക്കുന്നത്:
+
+**കാര്യതമ്യം:**
+- എന്ത് വലുപ്പമുള്ള സ്ക്രീനിലും ടെറിയം ശരിയായി സ്കെയിൽ ചെയ്യാൻ സഹായിക്കുന്നു
+- ജാർ ഘടകങ്ങൾ തമ്മിലുള്ള ദൃശ്യ ബന്ധം നിലനിർത്തുന്നു
+- മൊബൈൽ ഫോണിൽ നിന്നും വലിയ ഡെസ്ക്ക്ടോപ്പ് മോണിറ്ററുകൾ വരെ സമാന അനുഭവം നൽകുന്നു
+- ശൈലി തുടർന്നും തകർക്കാതെ അനുയോജ്യമായി ഒത്തുചേരാൻ സാധിക്കുന്നു
+
+### CSS ഘടകങ്ങളുടെ പ്രവർത്തനം
+
+`rem` യൂണിറ്റുകൾ ബോർഡർ-റേഡിയസിനായി ഉപയോഗിക്കുന്നതാണ്, ഇത് റൂട്ട് ഫോണ്ട് സൈസിനെ അടിസ്ഥാനമാക്കി സ്കെയിൽ ചെയ്യുന്നു. ഇത് ഉപയോക്താക്കളുടെ ഫോണ്ട് ഇഷ്ടാനുസരണം രോഗിപോകുന്നതിന് അനുയോജ്യമാണ്. കൂടുതൽ പഠിക്കാൻ [CSS.Relative Units](https://www.w3.org/TR/css-values-3/#font-relative-lengths) സന്ദർശിക്കുക.
+
+✅ **ദൃശ്യപര പരീക്ഷണം**: താഴെ പറയുന്ന മൂല്യങ്ങൾ മാറ്റി കാണൂ:
+- ജാറിന്റെ ഒപ്പസിറ്റി 0.5-ൽനിന്ന് 0.8-ലേക്ക് മാറ്റുക – ഗ്ലാസ് എങ്ങനെ മാറുന്നു?
+- മണ്ണിന്റെ നിറം `#3a241d`-നിന്ന് `#8B4513`-ലേക്ക് മാറ്റുക – ദൃശ്യപരമായി എന്ത് വ്യത്യാസം കാണുന്നു?
+- മണ്ണിന്റെ `z-index` 2 ആക്കി മാറ്റുക – ലെയറിംഗ് എങ്ങനെയാണ് മാറുന്നത്?
+
+### 🔄 **പെഡഗോഗിക്കൽ ചെക്കിൻ**
+**CSS ദൃശ്യ ഡിസൈൻ മനസ്സിലാക്കൽ**: നിങ്ങളുടെ അറിവ് സ്ഥിരീകരിക്കുക:
+- ശതമാന അടിസ്ഥാനത്തിലുള്ള അളവുകൾ റെസ്പോൺസീവ് ഡിസൈൻ എങ്ങനെ സൃഷ്ടിക്കുന്നു?
+- ഒപ്പസിറ്റി ഗ്ലാസ് ട്രാൻസ്പറൻസി എങ്ങനെ ഉണ്ടാക്കുന്നു?
+- ലെയറിങ്ങിൽ `z-index` എന്ത് പങ്കുവഹിക്കുന്നു?
+- ബോർഡർ-റേഡിയസ് മൂല്യങ്ങൾ ജാർ ആകൃതി എങ്ങനെ സൃഷ്ടിക്കുന്നു?
+
+**ഡിസൈൻ സിദ്ധാന്തം**: ലളിതമായ രൂപങ്ങളിൽ നിന്ന് സങ്കീർണ്ണ ദൃശ്യങ്ങളുണ്ടാകുന്നത് ശ്രദ്ധിക്കുക:
+1. **റെക്റ്റേംഗിളുകൾ** → **റൗണ്ടഡ് റെക്റ്റേംഗിളുകൾ** → **ജാർ ഘടകങ്ങൾ**
+2. **സാധാരണ നിറങ്ങൾ** → **ഒപ്പസിറ്റി** → **ഗ്ലാസ് ഇഫക്ട്**
+3. **വ്യക്തിഗത ഘടകങ്ങൾ** → **ലെയേർ ചെയ്ത ഘടന** → **3D ദൃശ്യപ്രഭാവം**
+
+---
+
+## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🚀
+
+ഏജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെയുള്ള ചാലഞ്ച് പൂർത്തിയാക്കുക:
+
+**വിവരണം:** ടെറിയത്തിലെ സസ്യങ്ങൾ സ്വാഭാവിക ഗాలിയുടെ സുവിശേഷം പോലെ ഹൃദയസ്പർശിയായപ്പോൾ മുമ്പ്-പിന്നിലേക്ക് അലഞ്ഞു നടക്കാൻ CSS ആനിമേഷൻ സൃഷ്ടിക്കുക. CSS ആനിമേഷനുകൾ, ട്രാൻസ്ഫോംസ്, കീഫ്രെയിംസ് അഭ്യാസം ചെയ്യാൻ ഇത് സഹായിക്കും കൂടാതെ ടെറിയം ദൃശ്യശോഭ വർധിപ്പിക്കും.
+
+**പ്രോംപ്റ്റ്:** ടെറിയത്തിലെ സസ്യങ്ങൾ ഇളംമറയുന്ന തരത്തിൽ മുന്നേയ്ക്കും പിൻവാങ്ങിയും അലഞ്ഞു നടക്കാൻ CSS കീഫ്രെയിം ആനിമേഷൻ ചേർക്കുക. ഓരോ സസ്യവും (2-3 ഡിഗ്രി) നേരെ ഇടത്തും വലത്തും തിരിയുന്ന 3-4 സെക്കൻഡ് ദൈർഘ്യമുള്ള സ്വേയിങ് ആനിമേഷൻ സൃഷ്ടിച്ച് `.plant` ക്ലാസ്സിന് നൽകുക. ആനിമേഷൻ നിർവഹിച്ചു ഇൻഫിനിറ്റ് ലൂപ്പ് ചെയ്യുകയും പ്രകൃതിദൃശ്യ ചലനത്തിനായി ഈസിങ്ങ് ഫങ്ഷൻ ഉപയോഗിക്കുകയും ചെയ്യണം.
+
+**കൂടുതൽ വിവരങ്ങൾക്ക്** [ഏജന്റ് മോഡ്](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) സന്ദർശിക്കുക.
+
+## 🚀 ചാലഞ്ച്: ഗ്ലാസ് പരിഭ്രംശങ്ങൾ കൂട്ടുക
+
+റിയലിസ്റ്റിക് ഗ്ലാസ് പരിഭ്രംശങ്ങൾ जोड़ാൻ തയ്യാറാവൂ? ഇത് ഡിസൈൻക്ക് ഗാഢതയും യാഥാർത്ഥ്യവും നൽകും.
+
+കുറച്ച് വെളുത്ത അല്ലെങ്കിൽ ഏകദേശം വെളിച്ചമുള്ള ഒവൽ ആകൃതികൾ സൃഷ്ടിക്കുക, ജാറിന്റെ ഇടത് ഭാഗത്ത് നിർദ്ദേശിത സ്ഥാനങ്ങളിൽ വைக்கുക. യഥാർത്ഥതയുള്ള വെളിച്ചം പ്രതിഫലിപ്പിക്കുന്നതിനായി അനുയോജ്യമായ ഒപ്പസിറ്റി, ബ്ലർ എഫക്ടുകൾ പ്രയോഗിക്കുക. ഓർഗാനിക് ബബിള് ആകൃതികൾക്കായി `border-radius` ഉപയോഗിക്കുക. മികച്ച യഥാർത്ഥതക്കായി ഗ്രേഡിയന്റ് അല്ലെങ്കിൽ ബോക്സ്-ഷാഡോസ് പരീക്ഷിക്കുക.
+
+## പൂർവ്വ ലക്ചർ ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/18)
+
+## നിങ്ങളുടെ CSS അറിവ് വികസിപ്പിക്കുക
+
+ആദ്യമായി CSS ചിലപ്പോൾ സങ്കീർണ്ണമായിരിക്കാം, എന്നാൽ ഈ അടിസ്ഥാന സിദ്ധാന്തങ്ങൾ മനസിലാക്കുന്നത് ഉയർന്ന തലത്തിലുള്ള സാങ്കേതിക വിദ്യകൾക്ക് നല്ല അടിസ്ഥാനം നൽകുന്നു.
+
+**നിങ്ങളുടെ അടുത്ത CSS പഠന മേഖലകൾ:**
+- **ഫ്ലെക്സ്ബോക്സ്** - ഘടകങ്ങളുടെ അലൈന്മെന്റും വിതരണവും ലളിതമാക്കുന്നു
+- **CSS ഗ്രിഡ്** - സങ്കീർണ്ണ ലേയൗട്ടുകൾ സൃഷ്ടിക്കാൻ ശക്തമായ ഉപകരണങ്ങൾ നൽകുന്നു
+- **CSS വേരിയബിള്സ്** - പുനരാവർത്തനത്തിനെ കുറയ്ക്കുകയും നിലനിർത്തലും മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നു
+- **റെസ്പോൺസീവ് ഡിസൈൻ** - വ്യത്യസ്ത സ്ക്രീൻ വലുപ്പങ്ങളിൽ സൈറ്റുകൾ പ്രവർത്തിക്കുന്നതായി ഉറപ്പാക്കുന്നു
+
+### ഇന്ററാക്ടീവ് ലേണിംഗ് സ്രോതസുകൾ
+
+ഈ ആശയങ്ങൾ പ്രായോഗികമായി അഭ്യാസിക്കാം ഈ രസകരമായ ഗെയിമുകൾ വഴി:
+- 🐸 [Flexbox Froggy](https://flexboxfroggy.com/) - രസകരമായ ചാലഞ്ചുകൾ വഴി ഫ്ലെക്സ്ബോക്സ് പഠിക്കുക
+- 🌱 [Grid Garden](https://codepip.com/games/grid-garden/) - CSS ഗ്രിഡ് പരിശീലനം വെച്ച കർഷിണി വളർത്തുക
+- 🎯 [CSS Battle](https://cssbattle.dev/) - CSS കഴിവുകൾ കോഡിംഗ് ചാലഞ്ചുകളിൽ പരീക്ഷിക്കുക
+
+### അധിക പഠനം
+
+CSS അടിസ്ഥാനപരമായും വിശദമായും പഠിക്കാനുള്ള ഈMicrosoft Learn മോഡ്യൂൾ പൂർത്തിയാക്കുക: [Style your HTML app with CSS](https://docs.microsoft.com/learn/modules/build-simple-website/4-css-basics/?WT.mc_id=academic-77807-sagibbon)
+
+### ⚡ **നിമിഷം 5-ൽ ചെയ്യാനുള്ളത്**
+- [ ] ഡെവ്ടൂൾസ് തുറന്ന് Elements പാനലിൽ വെബ്സൈറ്റിലെ CSS സ്റ്റൈലുകൾ പരിശോധിക്കുക
+- [ ] ലളിതമായ CSS ഫയൽ ഉണ്ടാക്കി HTML പേജുമായി ലിങ്ക് ചെയ്യുക
+- [ ] നിറം മാറ്റാൻ തെളിയിക്കാം: ഹെക്സ്, RGB, പേരിട്ട നിറങ്ങൾ എന്നിവ ഉപയോഗിക്കുക
+- [ ] പാഡിംഗും മാർജിനും ചേർത്ത് ബോക്സ് മോഡൽ അഭ്യാസിക്കുക
+
+### 🎯 **ഈ മണിക്കൂർ ചെയ്യാൻ സാധിക്കുന്ന കാര്യങ്ങൾ**
+- [ ] പോസ്റ്റ്-ലെഷൻ ക്വിസ് പൂർത്തിയാക്കി CSS അടിസ്ഥാനങ്ങൾ അവലോകനം ചെയ്യുക
+- [ ] HTML പേജ് ഫോണ്റ്, നിറം, ശൂന്യത എന്നിവ കൊണ്ട് സ്റ്റൈൽ ചെയ്യുക
+- [ ] ഫ്ലെക്സ്ബോക്സോ ഗ്രിഡ് ഉപയോഗിച്ച് ലളിതമായ ലേയൗട്ട് സൃഷ്ടിക്കുക
+- [ ] CSS ട്രാൻസിഷനുകൾ പരീക്ഷിച്ച് സ്മൂത്ത് എഫക്ടുകള് ആസ്വദിക്കുക
+- [ ] മീഡിയ ക്വയറികളിലൂടെ റെസ്പോൺസീവ് ഡിസൈനിൽ അഭ്യാസം നടത്തുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ച നീണ്ട CSS സാഹസം**
+- [ ] സൃഷ്ടിപരമായ രീതിയിൽ ടെറിയം സ്റ്റൈലിംഗ് അസൈൻമെന്റ് പൂർത്തിയാക്കുക
+- [ ] ഫോട്ടോ ഗാലറി ലേയൗട്ട് നിർമാണത്തിന് CSS ഗ്രിഡ് മ-striped
+- [ ] CSS ആനിമേഷനുകൾ പഠിച്ച് ഡിസൈൻകൾക്ക് ജീവൻ നൽകുക
+- [ ] SASS, LESS പോലുള്ള CSS പ്രീപ്രോസസ്സറുകൾ അന്വേഷിക്കുക
+- [ ] ഡിസൈൻ തത്ത്വങ്ങൾ പഠിച്ച് CSS- ൽ പ്രയോഗിക്കുക
+- [ ] ആസ്വദനീയമായ ഡിസൈനുകൾ അനാലൈസ് ചെയ്ത് പുനഃസംസ്കരണം ചെയ്യുക
+
+### 🌟 **നിങ്ങളുടെ മാസം നീണ്ട ഡിസൈൻ മാസ്റ്ററി**
+- [ ] സമ്പൂർണ റെസ്പോൺസീവ് വെബ്സൈറ്റ് ഡിസൈൻ സിസ്റ്റം നിർമ്മിക്കുക
+- [ ] CSS-IN-JS അല്ലെങ്കിൽ utility-first ഫ്രെയിംവർക്കുകൾ (Tailwind) പഠിക്കുക
+- [ ] CSS മെച്ചപ്പെടുത്തലുകൾ കൊണ്ട് ഓപ്പൺ സോഴ്സ് പ്രോജക്റ്റുകളിൽ പങ്കുചേരുക
+- [ ] CSS കസ്റ്റം പ്രോപ്പർട്ടീസും containment പോലുള്ള ആധുനിക ആശയങ്ങളില് മ-striped
+- [ ] മോഡുലാർ CSS ഉപയോഗിച്ച് പുനരുപയോഗയോഗ്യമായ 컴്പോണെന്റ് ലൈബ്രറികൾ സൃഷ്ടിക്കുക
+- [ ] പുതുതായി CSS പഠിക്കുന്നവരെ മോർഗനൈസുചെയ്യുകയും ഡിസൈൻ അറിവ് പങ്കിടുകയുമാണ്
+
+## 🎯 നിങ്ങളുടെ CSS മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title CSS പഠന പുരോഗതി
+
+ section അടിസ്ഥാനപരമായത് (10 മിനിട്ടുകൾ)
+ ഫയൽ കണക്ഷൻ: CSS നെ HTML-ലേക്ക് ലിങ്ക് ചെയ്യുക
+ : കാസ്കേഡ് നിയമങ്ങൾ മനസിലാക്കുക
+ : പാരമ്പര്യത്തിന്റെ അടിസ്ഥാനങ്ങൾ പഠിക്കുക
+
+ section സെലക്ടറുകൾ (15 മിനിട്ടുകൾ)
+ ഘടകങ്ങൾ ലക്ഷ്യമിടൽ: ഘടക സെലക്ടറുകൾ
+ : ക്ലാസ് പാറ്റേണുകൾ
+ : ഐഡി സ്പെസിഫിസിറ്റി
+ : കോംബിനേറ്ററുകൾ
+
+ section ബോക്സ് മോഡൽ (20 മിനിട്ടുകൾ)
+ ലേയൗട്ട് അടിസ്ഥാനങ്ങൾ: മാർജിൻ, പാഡിംഗ്
+ : ബോർഡർ ഗുണങ്ങൾ
+ : ഉള്ളടക്കത്തിന്റെ വലിപ്പം
+ : ബോക്സ്-സൈസിംഗ് പെരുമാറ്റം
+
+ section സ്ഥാനനിർണ്ണയം (25 മിനിട്ടുകൾ)
+ ഘടകസ്ഥാനം: സ്റ്റാറ്റിക് vs റിലേറ്റീവ്
+ : ആബ്സല്യൂട്ട് സ്ഥാനനിർണ്ണയം
+ : Z-ഇൻഡക്സ് ലെയറിംഗ്
+ : റെസ്പോൺസീവ് യൂണിറ്റുകൾ
+
+ section ദൃശ്യ ഡിസൈൻ (30 മിനിട്ടുകൾ)
+ സ്റ്റൈലിംഗ് മാട്സറി: നിറങ്ങളും തീവ്രതയും
+ : ഷാഡോസ് మరియు എഫക്ടുകൾ
+ : ട്രാൻസിഷനുകൾ
+ : ട്രാൻസ്ഫോം ഗുണങ്ങൾ
+
+ section റെസ്പോൺസീവ് ഡിസൈൻ (45 മിനിട്ടുകൾ)
+ മൾട്ടി-ഡിവൈസ് പിന്തുണ: മീഡിയ ക്വയറികൾ
+ : സാന്ധ്യ ലേയൗട്ടുകൾ
+ : മൊബൈൽ-ഫസ്റ്റ് സമീപനം
+ : വ്യൂപോർട്ട് ഒപ്റ്റിമൈസേഷൻ
+
+ section ഉയർന്ന സാങ്കേതിക തന്ത്രങ്ങൾ (1 ആഴ്ച)
+ ആധുനിക CSS: Flexbox ലേയൗട്ടുകൾ
+ : CSS ഗ്രിഡ് സിസ്റ്റങ്ങൾ
+ : കസ്റ്റം ഗുണങ്ങൾ
+ : ആനിമേഷൻ കീഫ്രെയിംസ്
+
+ section പ്രൊഫഷണൽ കഴിവുകൾ (1 മാസം)
+ CSS ആർക്കിടെക്ചർ: ഘടക പാറ്റേണുകൾ
+ : പരിപാലനക്ഷമമായ കോഡ്
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+ : ക്രോസ്-ബ്രൗസർ അനുയോജ്യത
+```
+### 🛠️ നിങ്ങളുടെ CSS ഉപകരണപ്പെട്ടി സംഗ്രഹം
+
+ഈ പാഠം പൂർത്തിയാക്കിയതിനു ശേഷം, നിങ്ങക്കുണ്ട്:
+- **കാസ്കേഡ് മനസ്സിലാക്കൽ**: സ്റ്റൈലുകൾ എങ്ങനെ ഒരുമിച്ച് വമ്പിച്ചു അതിരുകളെ മറികടക്കുന്നു
+- **സെലക്ടർ മാസ്റ്ററി**: ഏലമെന്റുകൾ, ക്ലാസ്സുകൾ, ഐഡിയーズ വഴി കൃത്യമായ ലക്ഷ്യമിടൽ
+- **പോസിഷനിംഗ് നൈപുണ്യം**: ഘടകങ്ങളുടെ സമർത്ഥമായ സ്ഥാനമാറ്റവും ലെയറിങ്ങും
+- **ദൃശ്യമാന ഡിസൈൻ**: ഗ്ലാസ് ഇഫക്ട്, ഷാഡോസ്, ട്രാൻസ്പറൻസി സൃഷ്ടിക്കൽ
+- **റെസ്പോൺസീവ് സാങ്കേതിക വിദ്യകൾ**: ഏതൊരു സ്ക്രീനിലും പൊരുത്തപ്പെടുന്ന ശതമാന അടിസ്ഥാന ലേയൗട്ട്
+- **കോഡ് സംഘടന**: ശുചിത്വം പാലിച്ച, നിലതിരുന്നതുമായ CSS ഘടന
+- **ആധുനിക പ്രയോഗങ്ങൾ**: റിലേറ്റീവ് യൂണിറ്റുകളും ആക്സസിബിൾ ഡിസൈൻ പാറ്റേണുകളും ഉപയോഗിക്കൽ
+
+**അടുത്തു ചെയ്യേണ്ടത്**: ടെറിയത്തിന് ഇപ്പോൾ ഘടന (HTML) കൂടാതെ സ്റ്റൈൽ (CSS) ഉണ്ട്. അവസാന പാഠത്തിൽ ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ഇന്ററാക്ടിവിറ്റിഫ് കൂട്ടും!
+
+## അസൈൻമെന്റ്
+
+[CSS Refactoring](assignment.md)
+
+---
+
+
+**വിമര്ശനം**:
+ഈ ദസ്താവേജ് AI പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തതാണ്. നാം പരിഭാഷയുടെ കൃത്യതയ്ക്ക് ശ്രമിക്കുമ്പോഴും, സ്വയംമാറ്റത്തിലുള്ള പരിഭാഷകളിൽ പിശകുകളും അകൃത്യതകളും ഉണ്ടാകാമെന്നത് ശ്രദ്ധിക്കുക. ജന്മഭാഷയിലുള്ള originele ദസ്താവേ俺也去 അധികാരמקൂലം കണക്കാക്കണം. പ്രധാനപ്പെട്ട വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ ശിപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷയുടെ ഉപയോഗത്തിലുണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണക്കോ തെറ്റായ വ്യാഖ്യാനത്തൊഴിച്ചുകൂടി ഞങ്ങൾ ഉത്തരവാദിത്വം വരുത്തുകയില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/3-terrarium/2-intro-to-css/assignment.md b/translations/ml/3-terrarium/2-intro-to-css/assignment.md
new file mode 100644
index 000000000..78462e86a
--- /dev/null
+++ b/translations/ml/3-terrarium/2-intro-to-css/assignment.md
@@ -0,0 +1,136 @@
+
+# CSS പുനഃസംഘടന അസൈൻമെന്റ്
+
+## ലക്ഷ്യം
+
+നിങ്ങളുടെ ടെറിയറിയം പ്രോജക്ട് ആധുനിക CSS ലെയ്ഔട്ട് സാങ്കേതിക വിദ്യകൾ ഉപയോഗിക്കുന്നതുണ്ടാക്കുക! നിലവിലുള്ള അപ്സല്യൂട്ട് പോസിഷനിങ്ങ് സമീപനം പുനഃസംഘടിപ്പിച്ച് **Flexbox** അല്ലെങ്കിൽ **CSS Grid** ഉപയോഗിച്ച് കൂടുതൽ സംരക്ഷണയോഗ്യവും പ്രതികരണക്ഷമമായ ഡിസൈനും നടപ്പിലാക്കുക. ഈ അസൈൻമെന്റ് നിങ്ങളുടെ ടെറിയറിയംയുടെ ദൃശ്യ ആകര്ഷണം നിലനിർത്തിക്കൊണ്ട് ആധുനിക CSS സ്റ്റാൻഡേർഡുകൾ പ്രയോഗിക്കാൻ നിങളെ പ്രേരിപ്പിക്കുന്നു.
+
+വിവിധ ലെയ്ഔട്ട് രീതികൾ എപ്പോൾ എങ്ങനെ ഉപയോഗിക്കണമെന്ന് മനസ്സിലാക്കുക ആധുനിക വെബ് ഡെവലപ്പ്മെന്റിന് അത്യന്താപേക്ഷിതമായ കഴിവാണ്. ഈ പ്രക്രിയ പരമ്പരാഗത പോസിഷനിങ്ങ് സാങ്കേതിക വിദ്യകളും സമകാലിക CSS ലെയ്ഔട്ട് സിസ്റ്റങ്ങളും തമ്മിലുള്ള പാലമാവുന്നു.
+
+## അസൈൻമെന്റ് നിർദ്ദേശങ്ങൾ
+
+### ഘട്ടം 1: വിശകലനവും പദ്ധതി തയ്യാറെടുപ്പും
+1. **നിങ്ങളുടെ നിലവിലെ ടെറിയറിയം കോഡ് അവലോകനം ചെയ്യുക** - എവിടെ എവിടെ ആൽസല്യൂട്ട് പോസിഷനിങ്ങ് ഉപയോഗിച്ചിരിക്കുന്നുണ്ട് എന്ന് തിരിച്ചറിയുക
+2. **നിങ്ങളുടെ ലെയ്ഔട്ട് രീതിയ തിരഞ്ഞെടുക്കുക** - Flexbox അല്ലെങ്കിൽ CSS Grid നിങ്ങളുടെ ഡിസൈൻ ലക്ഷ്യങ്ങൾക്ക് എവിടെ യോജിക്കുന്നുവെന്ന് തീരുമാനിക്കുക
+3. **പുതിയ ലെയ്ഔട്ട് ഘടന സ്കെച്ചുചെയ്യുക** - കണ്ടെയ്നറുകളും പ്ലാന്റ് ഘടകങ്ങളും എങ്ങിനെയാണ് ക്രമീകരിക്കപ്പെടുന്നത് എന്ന് പദ്ധതി തയ്യാറാക്കുക
+
+### ഘട്ടം 2: നടപ്പിലാക്കൽ
+1. **നിങ്ങളുടെ ടെറിയറിയം പ്രോജക്ടിന്റെ പുതിയ ഒരു പതിപ്പ്** വേര്പെടുത്തിയ ഫോൾഡറിൽ സൃഷ്ടിക്കുക
+2. ** എച്ച്ടിഎംഎൽ ഘടന** താങ്കളുടെ തെരഞ്ഞെടുക്കപ്പെട്ട ലെയ്ഔട്ട് രീതിക്ക് അനുസരിച്ച് അപ്ഡേറ്റ് ചെയ്യുക
+3. **CSS പുനഃസംഘടിപ്പിക്കുക** - അപ്സല്യൂട്ട് പോസിഷനിങ്ങ് ഒഴിവാക്കി Flexbox അല്ലെങ്കിൽ CSS Grid ഉപയോഗിക്കുക
+4. **ദൃശ്യ ഏകീകൃതത നിലനിർത്തുക** - പ്ലാന്റുകളും ടെറിയറിയം ജാറും ഏകദേശം അതേ സ്ഥാനങ്ങളിൽ കാണിക്കുന്നതായി ഉറപ്പാക്കുക
+5. **പ്രതികരണശേഷി നടപ്പിലാക്കുക** - വിവിധ സ്ക്രീൻ വലുപ്പങ്ങളിൽ നിങ്ങളുടെ ലെയ്ഔട്ട് സ്മൂതായി അനുയോജ്യമായി മാറണം
+
+### ഘട്ടം 3: പരീക്ഷണം ಮತ್ತು ഡോക്യുമെന്റേഷൻ
+1. **ക്രോസ്-ബ്രൗസർ പരിശോധന** - Chrome, Firefox, Edge, Safari എന്നിവയിൽ ഡിസൈൻ ശരിയായി പ്രവർത്തിക്കുന്നതായി ഉറപ്പാക്കുക
+2. **പ്രതികരണപരിശോധന** - മൊബൈൽ, ടാബ്ലെറ്റ്, ഡെസ്ക്ടോപ്പ് സ്ക്രീൻ വലുപ്പങ്ങളിൽ ലെയ്ഔട്ട് പരിശോധിക്കുക
+3. **ഡോക്യുമെന്റേഷൻ** - CSS-ൽ നിങ്ങളുടെ ലെയ്ഔട്ട് തിരഞ്ഞെടുപ്പിന്റെ കാരണങ്ങൾ വിശദീകരിക്കുന്ന കമന്റുകൾ ചേർക്കുക
+4. **സ്ക്രീൻഷോട്ടുകൾ** - വിവിധ ബ്രൗസറുകളിലും സ്ക്രീൻ വലുപ്പങ്ങളിലും ടെറിയറിയം സ്ക്രീൻഷോട്ടുകൾ എടുക്കുക
+
+## സാങ്കേതിക ആവശ്യകതകൾ
+
+### ലെയ്ഔട്ട് നടപ്പിലാക്കൽ
+- **ഒന്ന് തിരഞ്ഞെടുക്കുക**: Flexbox അല്ലെങ്കിൽ CSS Grid (ഒരു ഘടകത്തിനുള്ളിൽ ഇരട്ട ഉപയോഗം ഒഴിവാക്കുക)
+- **പ്രതികരണ ഡീസൈൻ**: സ്ഥിരമായ പിക്സലുകൾക്കു പകരമായി എസ്-അനുപാതക യൂണിറ്റുകൾ (`rem`, `em`, `%`, `vw`, `vh`) ഉപയോഗിക്കുക
+- **പ്രവേശനക്ഷമത**: ശരിയായ സെമാന്റിക് HTML ഘടനയും alt ടെക്സ്റ്റും നിലനിർത്തുക
+- **കോഡ് ഗുണനിലവാരം**: ഏകീകൃത നാമകരണം പാലിച്ച് CSS ലജിക് പ്രകാരം ക്രമീകരിക്കുക
+
+### ഉൾപ്പെടുത്തേണ്ട ആധുനിക CSS സവിശേഷതകൾ
+```css
+/* Example Flexbox approach */
+.terrarium-container {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ align-items: center;
+ justify-content: center;
+}
+
+.plant-containers {
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ max-width: 1200px;
+}
+
+/* Example Grid approach */
+.terrarium-layout {
+ display: grid;
+ grid-template-columns: 1fr 3fr 1fr;
+ grid-template-rows: auto 1fr;
+ min-height: 100vh;
+ gap: 1rem;
+}
+```
+
+### ബ്രൗസർ പിന്തുണ ആവശ്യകതകൾ
+- **Chrome/Edge**: ഏറ്റവും പുതിയ 2 പതിപ്പുകൾ
+- **Firefox**: ഏറ്റവും പുതിയ 2 പതിപ്പുകൾ
+- **Safari**: ഏറ്റവും പുതിയ 2 പതിപ്പുകൾ
+- **മൊബൈൽ ബ്രൗസറുകൾ**: iOS Safari, Chrome Mobile
+
+## ഡെലിവറബിൾസ്
+
+1. **അപ്ഡേറ്റു ചെയ്ത എച്ച്ടിഎംഎൽ ഫയൽ** മെച്ചപ്പെടുത്തിയ സെമാന്റിക് ഘടനയോടുകൂടി
+2. **പുനഃസംഘടിപ്പിച്ച CSS ഫയൽ** ആധുനിക ലെയ്ഔട്ട് സാങ്കേതിക വിദ്യകൾ ഉപയോഗിച്ച്
+3. **ക്രോസ്-ബ്രൗസർ പൊരുത്തം കാണിക്കുന്ന സ്ക്രീൻഷോട്ടുകളുടെ ശേഖരം**:
+ - ഡെസ്ക്ടോപ്പ് ദൃശ്യങ്ങൾ (1920x1080)
+ - ടാബ്ലെറ്റ് ദൃശ്യങ്ങൾ (768x1024)
+ - മൊബൈൽ ദൃശ്യങ്ങൾ (375x667)
+ - കുറഞ്ഞത് 2 വ്യത്യസ്ത ബ്രൗസറുകളിൽ നിന്നും
+4. **README.md ഫയൽ** രേഖപ്പെടുത്തുന്നത്:
+ - നിങ്ങളുടെ ലെയ്ഔട്ട് തിരഞ്ഞെടുപ്പ് (Flexbox vs Grid) ആയും കാരണങ്ങളും
+ - പുനഃസംഘടനയിടുമ്പോൾ നേരിട്ട വെല്ലുവിളികൾ
+ - ബ്രൗസർ പൊരുത്തം കുറിപ്പുകൾ
+ - കോഡ് പണിയേണ്ട വിധികൾ
+
+## വിലയിരുത്തൽ റൂബ്രിക്ക്
+
+| മാനദണ്ഡം | ഉത്തമം (4) | പ്രോഫിഷ്യന്റ് (3) | വികസനം (2) | തൊട്ടു തുടങ്ങിയവ (1) |
+|----------|--------------|----------------|--------------|--------------|
+| **ലെയ്ഔട്ട് നടപ്പിലാക്കൾ** | Flexbox/Grid എഡ്വാൻസഡ് ഫീച്ചറുകളോടെ സമ്പൂർണമായി പ്രതികരണക്ഷമമായി ഉപയോഗിച്ചത് | ശരിയായ നടപ്പിലാക്കലും നല്ല പ്രതികരണക്ഷമതയുമുള്ളത് | അടിസ്ഥാന നടപ്പിലാക്കൽ, ചെറിയ പ്രതികരണാശ്വാസ പ്രശ്നങ്ങൾ | അപൂർണ്ണമായോ തെറ്റായ ലെയ്ഔട്ട് നടപ്പിലാക്കൽ |
+| **കോഡ് ഗുണമേൻമ** | പരിപൂര്ണവും വിലയേറിയ കമന്റുകളും ഏകീകൃത നാമകരണവും ഉള്ള ശുഭ്രമായ CSS | നല്ല ക്രമീകരണവും ചില കമന്റുകളും ഉള്ളത് | പര്യാപ്തമായ ക്രമീകരണം, കുറവ് കമന്റുകൾ | കുഴപ്പമുള്ള ക്രമീകരണവും ബുദ്ധിമുട്ടുള്ള് വിവരണം |
+| **ക്രോസ്-ബ്രൗസർ പൊരുത്തം** | ആവശ്യമായ എല്ലാ ബ്രൗസറുകളിലും പൂർണ പൊരുത്തവും സ്ക്രീൻഷോട്ടുകളുമായി | നല്ല പൊരുത്തവും കുറച്ച് വ്യത്യാസങ്ങൾ രേഖപ്പെടുത്തി | ചില പൊരുത്ത പ്രശ്നങ്ങൾ, ജോലിയെ ബാധിക്കാത്തവ | പ്രധാന പൊരുത്ത പ്രശ്നങ്ങളും പരിശോധനയുടെ അഭാവം |
+| **പ്രതികരണ ഡിസൈൻ** | അകമഴിഞ്ഞ മൊബൈൽ-ഫസ്റ്റ് സമീപനവും സ്മൂത്ത് ബ്രേക്ക് പോയിന്റുകളും | നല്ല പ്രതികരണ ക്ഷമത, യോജിച്ച ബ്രേക്ക് പോയിന്റുകൾ | അടിസ്ഥാന പ്രതികരണ സ്വഭാവം, ചില ലെയ്ഔട്ട് പ്രശ്നങ്ങൾ | പരിമിതമോ തകരാറുള്ള പ്രതികരണം |
+| **ഡോക്യുമെന്റേഷൻ** | വിശദവും വിമർശനപരവുമായ README, വിശദീകരണങ്ങൾക്കും洞见കൾക്കും | ആവശ്യമായ എല്ലാ ഘടകങ്ങളും ഉൾക്കൊള്ളുന്ന നല്ല ഡോക്യുമെന്റേഷൻ | അടിസ്ഥാന രേഖപ്പെടുത്തലും കുറഞ്ഞ വിശദാംശങ്ങളും | അപൂർണ്ണമായോ ഇല്ലാത്ത ഡോക്യുമെന്റേഷൻ |
+
+## സഹായകരമായ സ്രോതസ്സുകൾ
+
+### ലെയ്ഔട്ട് മാർഗ്ഗനിർദേശങ്ങൾ
+- 📖 [Flexbox-ന് സമഗ്ര ഗൈഡ്](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)
+- 📖 [CSS Grid-ന് സമഗ്ര ഗൈഡ്](https://css-tricks.com/snippets/css/complete-guide-grid/)
+- 📖 [Flexbox vs Grid - ശരിയായ ഉപകരണം തിരഞ്ഞെടുക്കുക](https://blog.webdevsimplified.com/2022-11/flexbox-vs-grid/)
+
+### ബ്രൗസർ പരിശോധന ഉപകരണങ്ങൾ
+- 🛠️ [Browser DevTools പ്രതികരണ മുഖം](https://developer.chrome.com/docs/devtools/device-mode/)
+- 🛠️ [Can I Use - സവിശേഷത പിന്തുണ](https://caniuse.com/)
+- 🛠️ [BrowserStack - ക്രോസ്-ബ്രൗസർ പരിശോധന](https://www.browserstack.com/)
+
+### കോഡ് ഗുണമേൻമ ഉപകരണങ്ങൾ
+- ✅ [CSS വാലിഡേറ്റർ](https://jigsaw.w3.org/css-validator/)
+- ✅ [HTML വാലിഡേറ്റർ](https://validator.w3.org/)
+- ✅ [WebAIM കോൺട്രാസ്റ്റ് പരിശോധകൻ](https://webaim.org/resources/contrastchecker/)
+
+## ബോണസ് വെല്ലുവിളികൾ
+
+🌟 **അടുക്കളവായ ലെയ്ഔട്ടുകൾ**: നിങ്ങളുടെ ഡിസൈനിലെ വ്യത്യസ്ത ഭാഗങ്ങളിൽ Flexbox ഉം Grid ഉം കൂടി നടപ്പിലാക്കുക
+🌟 **അനിമേഷൻ ഏകീകരണം**: പുതിയ ലെയ്ഔട്ടിനോട് അനുയോജ്യമായ CSS ട്രാൻസിഷനുകൾ അല്ലെങ്കിൽ അനിമേഷനുകൾ ചേർക്കുക
+🌟 **ഡാർക്ക് മോഡ്**: CSS കസ്റ്റം പ്രോപ്പർട്ടികൾ ആധാരമാക്കി തീം സ്വിച്ച് ചെയ്യാനുള്ള സംവിധാനങ്ങൾ നടപ്പിലാക്കുക
+🌟 **കണ്ടെയ്നർ ക്വെരീസ്**: ഘടക-നിരത പ്രതികരണക്ഷമതക്കായി ആധുനിക കണ്ടെയ്നർ ക്വെരി സാങ്കേതിക പാടികൾ ഉപയോഗിക്കുക
+
+> 💡 **ഓർക്കുക**: പ്രവർത്തിപ്പിക്കാനുള്ള ലക്ഷ്യമല്ല, നിങ്ങളുടെ തെരഞ്ഞെടുത്ത ലെയ്ഔട്ട് രീതി ഈ പ്രത്യേക ഡിസൈൻ വെല്ലുവിളിക്ക് ഏറ്റവും മികച്ച പരിഹാരമാണെന്ന് മനസ്സിലാക്കുകയാണ് വാസ്തവത്തിൽ വേണ്ടത്!
+
+---
+
+
+**സ്പഷ്ടീകരണം**:
+ഈ രേഖ AI വിവർത്തനസേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിക്കുന്നതിനുപേറ്റും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകളും തെറ്റുകളും കാണപ്പെടാമെന്ന് ശ്രദ്ധയിൽ വയ്ക്കുക. മാതൃഭാഷയിലെ യഥാർഥ രേഖ മാത്രമാണ് കൂടുതൽ വിശ്വാസയോഗ്യമായ ഉറവിടം. നിർണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മാനവ വിവർത്തനം അനുയോജ്യമാണ്. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന തെറ്റിദ്ധാരണകൾക്കോ ദുരവബോധങ്ങൾക്ക് ഞങ്ങൾ ഉത്തരവാദികൾ അല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/3-terrarium/3-intro-to-DOM-and-closures/README.md b/translations/ml/3-terrarium/3-intro-to-DOM-and-closures/README.md
new file mode 100644
index 000000000..ab4f50460
--- /dev/null
+++ b/translations/ml/3-terrarium/3-intro-to-DOM-and-closures/README.md
@@ -0,0 +1,771 @@
+
+# ടെറാരിയം പ്രോജക്ട് ഭാഗം 3: DOM മാനിപ്പുലേഷൻയും ജാവാസ്ക്രിപ്റ്റ് ക്ലോസറുകളും
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് DOM യാത്ര
+ section അടിസ്ഥാനം
+ Understand DOM: 3: Student
+ Learn closures: 4: Student
+ Connect elements: 4: Student
+ section ഇടപെടൽ
+ Setup drag events: 4: Student
+ Track coordinates: 5: Student
+ Handle movement: 5: Student
+ section മെച്ചപ്പെടുത്തൽ
+ Add cleanup: 4: Student
+ Test functionality: 5: Student
+ Complete terrarium: 5: Student
+```
+
+> സ്കെച്ച് നോട്ടു [Tomomi Imura](https://twitter.com/girlie_mac) എഴുതിയത്
+
+വെബ് ഡെവലപ്പ്മെന്റിന്റെ ഏറ്റവും ആകർഷകമായ ഭാഗങ്ങളിൽ ഒന്നിലേക്ക് സ്വാഗതം - ഇന്ററാക്ടീവ് ചെയ്യുന്നത്! ഡോക്യുമെന്റ് ഒബ്ജക്ട് മോഡൽ (DOM) നിങ്ങളുടെ HTML നും ജാവാസ്ക്രിപ്റ്റിനും ഇടയിലുള്ള ഒരു പാലമുപോലെയാണ്, ഇങ്ങനെ ഇന്ന് നിങ്ങളുടേ ടെറാരിയം ജീവിപ്പിക്കാൻ നാം ഇത് ഉപയോഗിക്കാം. ടിം ബേണേഴ്സ്-ലി ആദ്യ വെബ് ബ്രൗസർ സൃഷ്ടിച്ചതിനു ശേഷം, ഡോക്യുമെന്റുകൾ ഡൈനാമിക് ആയും ഇന്ററാക്ടീവ് ആയും ഉണ്ടാകുമെന്ന് വിചാരിച്ചിരുന്നു - DOM ആ വിചാരത്തെ സാധ്യമാക്കുന്നു.
+
+നാം കൂടാതെ ജാവാസ്ക്രിപ്റ്റ് ക്ലോസറുകൾ പരിശോധിക്കും, തുടക്കത്തിൽ ഇതു ഭീഷണിപ്പെടുത്തുംപോലെയാണ് തോന്നുക. ക്ലോസറുകൾ "മെമ്മറി പോക്കറ്റുകൾ" സൃഷ്ടിക്കുന്നതാണ്, നിങ്ങളുടെ ഫംഗ്ഷനുകൾ പ്രധാന വിവരങ്ങൾ ഓർക്കാൻ കഴിയുന്ന ഒരു സങ്കൽപ്പം. ഇത് നിങ്ങളുടെ ടെറാരിയത്തിലുള്ള ഓരോ സസ്യത്തിനും സ്വതന്ത്രമായി അവയുടെ സ്ഥാനം ട്രാക്ക് ചെയ്യാൻ ഉള്ള ഡാറ്റ റെക്കോർഡുകൾ ഉണ്ടായിരിക്കുന്നതുപോലെ ആണെന്ന് കരുതാം. ഈ പാഠത്തിന്റെ സമാപനത്തിൽ, നിങ്ങൾ ഇവ എത്രത്തോളം സ്വാഭാവികവും പ്രയോജനകരവും ആണെന്ന് മനസിലാക്കും.
+
+നാം നിർമ്മിക്കുന്നത്: ഉപഭോക്താക്കൾ സസ്യങ്ങളെ എവിടെയും ഡ്രാഗ് ആന്റ് ഡ്രോപ്പ് ചെയ്യാനാകുന്ന ഒരു ടെറാരിയം. എല്ലാ ഡ്രാഗ് ആന്റ് ഡ്രോപ്പ് ഫയൽ അപ്ലോഡുകളും ഇന്ററാക്ടീവ് ഗെയിമുകളും പ്രവർത്തിപ്പിക്കുന്ന DOM മാനിപ്പുലേഷൻ സാങ്കേതികവിദ്യ നിങ്ങൾക്ക് പഠിക്കാം. നിങ്ങളുടെ ടെറാരിയത്തെ ജീവിപ്പിക്കാം.
+
+```mermaid
+mindmap
+ root((DOM & ജാവാസ്ക്രിപ്റ്റ്))
+ DOM Tree
+ ഘടകം തിരഞ്ഞെടുപ്പ്
+ ഗുണധർമം പ്രവേശനം
+ ഇവന്റ് കൈകാര്യം ചെയ്യൽ
+ ഡൈനമിക് അപ്ഡേറ്റുകൾ
+ Events
+ പോയിന്റർ ഇവന്റുകൾ
+ മൗസ് ഇവന്റുകൾ
+ ടച്ചുഇവന്റുകൾ
+ ഇവന്റ് listener കളി
+ Closures
+ സ്വകാര്യ വേരിയബിളുകൾ
+ ഫംഗ്ഷൻ സകോപ്പ്
+ മെമ്മറി സ്ഥിരത
+ സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+ Drag & Drop
+ സ്ഥാനം ട്രാക്കിങ്
+ കോഓർഡിനേറ്റ് ഗണിതം
+ ഇവന്റ് ലൈഫ്സൈക്കിൽ
+ ഉപയോക്തൃ ഇടപെടൽ
+ Modern Patterns
+ ഇവന്റ് ഡെലിഗേഷന്
+ പ്രകടനം
+ ക്രോസ്-ഡിവൈസ്
+ ആക്സസിബിലിറ്റി
+```
+## പ്രീലക്ചർ ക്വിസ്
+
+[പ്രീലക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/19)
+
+## DOM മനസ്സിലാക്കൽ: ഇന്ററാക്ടീവ് വെബ് പേജുകളിലേക്ക് നിങ്ങളുടെ കവാടം
+
+ഡോക്യുമെന്റ് ഒബ്ജക്ട് മോഡൽ (DOM) ജാവാസ്ക്രിപ്റ്റ് നിങ്ങളുടെ HTML ഘടകങ്ങളുമായി സംവദിക്കുന്ന രീതിയാണ്. നിങ്ങളുടെ ബ്രൗസർ ഒരു HTML പേജ് ലോഡ് ചെയ്യുന്നപ്പോൾ, അത് ആ പേജിന്റെ ഘടനയുള്ള പ്രതിനിധാനം മെമ്മറിയിൽ സൃഷ്ടിക്കുന്നു - അതാണ് DOM. ഇത് ഒരു കുടുംബ വൃക്ഷം പോലെയാണ് കരുതുക, ശാസ്ത്രീയമായി ഓരോ HTML ഘടകവും ഒരു കുടുംബ അംഗമായി കാണുക, ജാവാസ്ക്രിപ്റ്റ് ആ ഘടകത്തെ ആക്സസ് ചെയ്തു, മാറ്റം വരുത്തി, പുനഃക്രമീകരിക്കാമെന്ന്.
+
+DOM മാനിപ്പുലേഷൻ സ്റ്റാറ്റിക് പേജുകൾ ഇന്ററാക്ടീവ് വെബ്സൈറ്റുകളാക്കുന്നു. നിങ്ങൾ കാണുന്ന ഒരിക്കൽ ബട്ടൺ ഹോവറിൽ നിറം മാറുന്നത്, പേജിന്റെ റിഫ്രഷ് കൂടാതെ ഉള്ളടക്കം അപ്ഡേറ്റ് ചെയ്യുന്നത്, അല്ലെങ്കിൽ നിങ്ങൾക്ക് ഘടകങ്ങൾ ഡ്രാഗ് ചെയ്യാൻ കഴിയുന്നത് ഇതിന്റെ ഉദാഹരണങ്ങളാണ്.
+
+```mermaid
+flowchart TD
+ A["ഡോക്യുമെന്റ്"] --> B["എച്ച്ടിഎംഎൽ"]
+ B --> C["ഹെഡ്"]
+ B --> D["ബോഡി"]
+ C --> E["ശീർഷകം"]
+ C --> F["മെറ്റാ ടാഗുകൾ"]
+ D --> G["ഹെഡ്1: എന്റെ ടെറാറിയം"]
+ D --> H["ഡിവ്: പേജ് കണ്ടെയ്നർ"]
+ H --> I["ഡിവ്: ഇടതു കണ്ടെയ്നർ"]
+ H --> J["ഡിവ്: വലം കണ്ടെയ്നർ"]
+ H --> K["ഡിവ്: ടെറാറിയം"]
+ I --> L["സസ്യ ഘടകങ്ങൾ 1-7"]
+ J --> M["സസ്യ ഘടകങ്ങൾ 8-14"]
+
+ L --> N["img#plant1"]
+ L --> O["img#plant2"]
+ M --> P["img#plant8"]
+ M --> Q["img#plant9"]
+
+ style A fill:#e1f5fe
+ style B fill:#f3e5f5
+ style D fill:#e8f5e8
+ style H fill:#fff3e0
+ style N fill:#ffebee
+ style O fill:#ffebee
+ style P fill:#ffebee
+ style Q fill:#ffebee
+```
+
+
+> DOM ഉം അതിലെ HTML മാർക്കപ് നമ്മളിത് കാണിക്കുന്ന വിധം. [Olfa Nasraoui](https://www.researchgate.net/publication/221417012_Profile-Based_Focused_Crawler_for_Social_Media-Sharing_Websites) നൽകിയത്
+
+**DOM പ്രയോജനകരമാക്കുന്ന കാര്യങ്ങൾ:**
+- **ഒരുപാട്** ഘടകങ്ങളിൽ നിന്ന് ഉപാധികൾ എളുപ്പത്തിൽ ലഭ്യമാക്കുന്നു
+- **ഇടയ്ക്കുള്ള** പേജിന്റെ റിഫ്രഷ് ഇല്ലാതെ ഉള്ളടക്കം പുതുക്കലുകൾ സാധ്യമാക്കുന്നു
+- **ഉപഭോക്തൃ** സഹായ മതികൾക്ക് റിയൽ-ടൈം പ്രതികരണം അനുവദിക്കുന്നു
+- **ആധുനിക** ഇന്ററാക്ടീവ് വെബ് അപ്ലിക്കേഷനുകൾക്കുള്ള അടിസ്ഥാന നിർമ്മിക്കുന്നു
+
+## ജാവാസ്ക്രിപ്റ്റ് ക്ലോസറുകൾ: ക്രമീകരിച്ച, ശക്തമായ കോഡ് സൃഷ്ടിക്കൽ
+
+ഒരു [ജാവാസ്ക്രിപ്റ്റ് ക്ലോസർ](https://developer.mozilla.org/docs/Web/JavaScript/Closures) ഒരു ഫംഗ്ഷനിനുവേണ്ടി സ്വന്തം സ്വകാര്യ വർക്ക്സ്പേസ് persistent മെമ്മറിയോടെ നൽകുന്നതുപോലെയാണ്. ഗാലാപഗോസ് ദ്വീപുകളിലെ ഡാർവിന്റെ ഫിഞ്ചുകൾ ഓരോന്നും പ്രത്യേക പരിസ്ഥിതി അടിസ്ഥാനത്തിലാണ് പ്രത്യേക തത്വ സൃഷ്ടിച്ചിരിക്കുന്നത് എന്ന രീതിയിൽ ക്ലോസറുകൾ പ്രവർത്തിക്കുന്നു; അവ സ്വന്തമായ സങ്കേതം "ഓർമ്മ" വയ്ക്കുന്നു, മാതൃക ഫംഗ്ഷൻ പൂർത്തിയാക്കിയ ശേഷവും.
+
+നമ്മുടെ ടെറാരിയത്തിൽ, ക്ലോസറുകൾ ഓരോ സസ്യത്തിനും സ്വതന്ത്രമായി അവയുടെ സ്ഥാനം ഓർക്കാൻ സഹായിക്കുന്നു. ഇത് ജാവാസ്ക്രിപ്റ്റ് പ്രൊഫഷണൽ ഡെവലപ്പ്മെന്റിൽ ഇടക്ക് ഇടക്ക് കാണപ്പെടുന്ന വലിയ ആശയമാണ്, അതിനാൽ ഇത് മനസ്സിലാക്കാം.
+
+```mermaid
+flowchart LR
+ A["dragElement(plant1)"] --> B["ക്ലോശർ സൃഷ്ടിക്കുന്നു"]
+ A2["dragElement(plant2)"] --> B2["ക്ലോശർ സൃഷ്ടിക്കുന്നു"]
+
+ B --> C["സ്വകാര്യ വേരിയബിളുകൾ"]
+ B2 --> C2["സ്വകാര്യ വേരിയബിളുകൾ"]
+
+ C --> D["pos1, pos2, pos3, pos4"]
+ C --> E["pointerDrag ഫംഗ്ഷൻ"]
+ C --> F["elementDrag ഫംഗ്ഷൻ"]
+ C --> G["stopElementDrag ഫംഗ്ഷൻ"]
+
+ C2 --> D2["pos1, pos2, pos3, pos4"]
+ C2 --> E2["pointerDrag ഫംഗ്ഷൻ"]
+ C2 --> F2["elementDrag ഫംഗ്ഷൻ"]
+ C2 --> G2["stopElementDrag ഫംഗ്ഷൻ"]
+
+ H["തൈ 1 തന്റെ സ്ഥാനം ഓർക്കുന്നു"] --> B
+ H2["തൈ 2 തന്റെ സ്ഥാനം ഓർക്കുന്നു"] --> B2
+
+ style B fill:#e8f5e8
+ style B2 fill:#e8f5e8
+ style C fill:#fff3e0
+ style C2 fill:#fff3e0
+```
+> 💡 **ക്ലോസറുകൾ മനസ്സിലാക്കൽ**: ക്ലോസറുകൾ ജാവാസ്ക്രിപ്റ്റിൽ പ്രധാന വിഷയം ആണ്, പല ഡെവലപ്പർമാർ ഇത് തങ്ങളുടെ കരുത്തിലും കാലയളവിലും ഉപയോഗിക്കുമ്പോഴും അതിന്റെ സാക്ഷര理论 പൂർണ്ണമായി മനസ്സിലാക്കാറില്ല. ഇന്ന് നാം പ്രായോഗിക പ്രയോഗത്തിൽ ശ്രദ്ധിക്കുകയാണ - നിങ്ങൾ നമ്മുടെ ഇന്ററാക്ടീവ് ഫീച്ചറുകൾ നിർമ്മിക്കുന്നപ്പോൾ ക്ലോസറുകൾ സ്വാഭാവികമായി തെളിയുമ്പോൾ മനസ്സിലാക്കും.
+
+
+
+> DOM ഉം അതിലെ HTML മാർക്കപ് നമ്മളിത് കാണിക്കുന്നത്. [Olfa Nasraoui](https://www.researchgate.net/publication/221417012_Profile-Based_Focused_Crawler_for_Social_Media-Sharing_Websites) നൽകിയത്
+
+ഈ പാഠത്തിൽ, പേജിലെ സസ്യങ്ങളെ നിയന്ത്രിക്കാനുള്ള ജാവാസ്ക്രിപ്റ്റ് സൃഷ്ടിച്ച് നമ്മുടെ ഇന്ററാക്ടീവ് ടെറാരിയം പ്രോജക്ട് പൂർത്തിയാക്കും.
+
+## തുടങ്ങുന്നതിനു മുമ്പ്: വിജയത്തിനുള്ള സജ്ജീകരണം
+
+മുൻ ടെറാരിയം പാഠങ്ങളിൽ നിന്നുള്ള നിങ്ങൾക്കു ഉള്ള HTML, CSS ഫയലുകൾ നിങ്ങൾക്ക് വേണം - നമുക്ക് ആ സ്റ്റാറ്റിക് ഡിസൈൻ ഇന്ററാക്ടീവാക്കാനായി. ആദ്യത്തവണ ചേരുന്നവർക്ക് ആ പാഠങ്ങൾ ആദ്യം പൂർത്തിയാക്കണം, അത് പ്രധാന സന്ധർഭം നൽകും.
+
+നാം നിർമ്മിക്കുന്നത്:
+- **രചന സാധാരണമായ** ടെറാരിയത്തിലെ എല്ലാ സസ്യങ്ങൾക്കും ഡ്രാഗ് ആന്റ് ഡ്രോപ്പ്
+- **കോ-ഓർഡിനേറ്റ് ട്രാക്കിംഗ്** സസ്യങ്ങൾ അവയുടെ സ്ഥാനം ഓർക്കാൻ
+- **വാനില ജാവാസ്ക്രിപ്റ്റ്** ഉപയോഗിച്ച് പൂർണ ഇന്ററാക്ടീവ് ഇന്റർഫേസ്
+- **ക്ലീനും ക്രമവൃത്തിയുള്ള** കോഡ് ക്ലോസർ മാതൃകകൾ ഉപയോഗിച്ച്
+
+## നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ഫയൽ സജ്ജമാക്കൽ
+
+നിങ്ങളുടെ ടെറാരിയം ഇന്ററാക്ടീവ് ആക്കാൻ ജാവാസ്ക്രിപ്റ്റ് ഫയൽ സൃഷ്ടിക്കാം.
+
+**പടി 1: നിങ്ങളുടെ സ്ക്രിപ്റ്റ് ഫയൽ സൃഷ്ടിക്കുക**
+
+നിങ്ങളുടെ ടെറാരിയം ഫോൾഡറിൽ പുതിയ ഫയൽ എന്ന് പേരില്ലാതെ `script.js` എന്ന പേരിൽ സൃഷ്ടിക്കുക.
+
+**പടി 2: ജാവാസ്ക്രിപ്റ്റ് നിങ്ങളുടെ HTML-ലേക്ക് ലിങ്ക് ചെയ്യുക**
+
+താങ്കളുടെ `index.html` ഫയലിന്റെ `` സെക്ഷനിൽ താഴെ കൊടുത്തിരിക്കുന്ന സ്ക്രിപ്റ്റ് ടാഗ് ചേർക്കുക:
+
+```html
+
+```
+
+**`defer` ആട്രിബ്യൂട്ട് എന്തുകൊണ്ട് പ്രധാനമാണ്:**
+- **എല്ലാ HTML ലോഡ് ആയി തീർന്നതിനുശേഷം** ജാവാസ്ക്രിപ്റ്റ് പ്രവർത്തിക്കാൻ ഉറപ്പാക്കുന്നു
+- **ജാവാസ്ക്രിപ്റ്റ് സാധനങ്ങൾ വരുമ്പോൾ പിഴവ് വരാതിരിക്കാൻ** തടയുന്നു
+- **എല്ലാ സസ്യ ആകൃതി കണക്ട് ചെയ്യുന്നതിനായി തയ്യാറാക്കി** ഉറപ്പ് നൽകുന്നു
+- **സ്ക്രിപ്റ്റുകൾ പേജിന്റെ താഴെ ഇട്ടുകൊള്ളുന്നതിനെക്കാൾ മികച്ച പ്രകടനം നൽകുന്നു**
+
+> ⚠️ **പ്രധാന കുറിപ്പ്**: `defer` ആട്രിബ്യൂട്ട് സാധാരണ സമയ നിയന്ത്രണ പ്രശ്നങ്ങൾ തടയും. ഇതില്ലാതെ, ജാവാസ്ക്രിപ്റ്റ് HTML ഘടകങ്ങൾ ലോഡ് ആയതിനു മുമ്പ് ആക്സസ് ചെയ്യാൻ ശ്രമിച്ച് പിഴവുകൾ ഉണ്ടാകും.
+
+---
+
+## ജാവാസ്ക്രിപ്റ്റ് നമ്മുടെ HTML ഘടകങ്ങളുമായി ബന്ധിപ്പിക്കൽ
+
+ഘടകങ്ങളെ ഡ്രാഗ് ചെയ്യാവുന്നതാക്കും മുമ്പ്, ജാവാസ്ക്രിപ്റ്റ് അവ DOM-ൽ കണ്ടെത്തണം. ഇതിനെ ലൈബ്രറി കാറ്റലോഗ് സംവിധാനമായി കാണാം - നടത്തിവന്ന കാറ്റലോഗ് നമ്പറുടെ സഹായത്തോടെ നിങ്ങൾക്ക് ആ കൃത്യമായ പുസ്തകം കണ്ടെത്താനും അതിന്റെ ഉള്ളടക്കം ആക്സസ് ചെയ്യാനും കഴിയും.
+
+നാം ഇത് നടത്താൻ `document.getElementById()` എന്ന രീതിയാണ് ഉപയോഗിക്കുന്നത്. ഇത് കൃത്യമായ ഫയലിംഗ് സംവിധാനം പോലെയാണ് - നിങ്ങൾ ഒരു ID നൽകുമ്പോൾ അതിനെ DOM-യിൽ നിന്ന് കൃത്യമായി കണ്ടെത്തും.
+
+### എല്ലാ സസ്യങ്ങൾക്കും ഡ്രാഗ് ഫംഗ്ഷനാലിറ്റി സജ്ജമാക്കൽ
+
+താങ്കളുടെ `script.js` ഫയലിൽ താഴെത്തന്നെ കൊടുത്തിരിക്കുന്ന കോഡ് ചേർക്കുക:
+
+```javascript
+// എല്ലാ 14 സസ്യങ്ങൾക്കും ഡ്രാഗ് പ്രവർത്തനം സജ്ജമാക്കുക
+dragElement(document.getElementById('plant1'));
+dragElement(document.getElementById('plant2'));
+dragElement(document.getElementById('plant3'));
+dragElement(document.getElementById('plant4'));
+dragElement(document.getElementById('plant5'));
+dragElement(document.getElementById('plant6'));
+dragElement(document.getElementById('plant7'));
+dragElement(document.getElementById('plant8'));
+dragElement(document.getElementById('plant9'));
+dragElement(document.getElementById('plant10'));
+dragElement(document.getElementById('plant11'));
+dragElement(document.getElementById('plant12'));
+dragElement(document.getElementById('plant13'));
+dragElement(document.getElementById('plant14'));
+```
+
+**ഈ കോഡ് ചെയ്യുന്നത്:**
+- **ഓരോ സസ്യ ഘടകവും DOM-ൽ അതിന്റെ പ്രത്യേക ID ഉപയോഗിച്ച് കണ്ടെത്തുന്നു**
+- **ഓരോ HTML ഘടകത്തിന്റെയും ജാവാസ്ക്രിപ്റ്റ് റഫറൻസ് നേടുന്നു**
+- **ഓരോ ഘടകത്തെയും `dragElement` ഫംഗ്ഷനിലേക്ക് പാസ്സ് ചെയ്യുന്നു (ഇത് നമുക്ക് പിന്നീട് സൃഷ്ടിക്കാം)**
+- **എല്ലാ സസ്യങ്ങൾക്കും ഡ്രാഗ്-ആൻഡ്-ഡ്രോപ്പ് സജ്ജമാക്കുന്നു**
+- **HTML ഘടനയെ ജാവാസ്ക്രിപ്റ്റ് ഫംഗ്ഷനാലിറ്റിക്കുമായി ബന്ധിപ്പിക്കുന്നു**
+
+> 🎯 **അടയാളം ഉപയോഗിക്കാനുള്ള കാരണം:** IDs ഓരോ ഘടകത്തിനും അംഗീകൃതമായ പലവ്യക്തമാണ്, CSS ക്ലാസുകൾ സ്റ്റൈലിങ്ങിന്റെ കാര്യത്തിൽ കൂട്ടങ്ങളായുള്ള ഘടകങ്ങൾക്കായി രൂപകല്പ്പന ചെയ്തതാണ്. ജാവാസ്ക്രിപ്റ്റിന്റെ കാര്യത്തിൽ വ്യക്തിഗത ഘടകത്തെ മാനിപ്പുലേറ്റ് ചെയ്യേണ്ടപ്പോൾ, IDs വേണ്ടിതന്നെയാണ്.
+
+> 💡 **പ്രൊ ടിപ്പ്**: നിങ്ങൾ കാണുന്ന പോലെ, ഓരോ സസ്യത്തിനും `dragElement()` സ്വതന്ത്രമായി പ്രയോഗിക്കുന്നത്, ഓരോ സസ്യത്തിനും വേറിട്ട ഡ്രാഗിംഗ് പെരുമാറ്റം ഉറപ്പാക്കുന്നു, ഇത് ഉപയോഗിക്കുന്നവർക്ക് സുഗമമായ അനുഭവം നൽകാൻ അനിവാര്യമാണ്.
+
+### 🔄 **പാഠം പരിശോധിക്കൽ**
+**DOM ബന്ധം മനസ്സിലാക്കൽ**: ഡ്രാഗ് ഫംഗ്ഷനാലിറ്റിയിലേക്ക് താഴെ കടക്കുന്നതിന് മുൻപ് എളുപ്പത്തിൽ മനസ്സിലാക്കുക:
+- ✅ `document.getElementById()` എങ്ങനെ HTML ഘടകങ്ങൾ കണ്ടെത്തുന്നു വിശദീകരിക്കാം
+- ✅ ഓരോ സസ്യത്തിനും നാം എങ്ങനെയാണ് പ്രത്യേക IDs ഉപയോഗിക്കുന്നത് മനസ്സിലാക്കുക
+- ✅ സ്ക്രിപ്റ്റ് ടാഗുകളുടെ `defer` ആട്രിബ്യൂട്ടിന്റെ പ്രാധാന്യം അറിയുക
+- ✅ ജാവാസ്ക്രിപ്റ്റും HTML DOM വഴി എങ്ങിനെയാണ് ബന്ധപ്പെടുന്നത് മനസ്സിലാക്കുക
+
+**സ്വയം പരീക്ഷണം:** രണ്ട് ഘടകങ്ങൾക്ക് ഒരേ ID എങ്കിൽ എന്ത് സംഭവിക്കും? `getElementById()` എത്ര ഘടകം വീണ്ടെടുക്കും?
+*ഉത്തരം: IDs പ്രത്യേകമായിരിക്കണം; ആവർത്തിച്ചാൽ, ആദ്യം കണ്ട ഘടകം മാത്രം തിരിച്ചുകിട്ടും*
+
+---
+
+## ഡ്രാഗ് എലമെന്റ് ക്ലോസർ നിർമ്മിക്കൽ
+
+ഇപ്പൊഴാണ് നമ്മുടെ ഡ്രാഗിംഗ് ഫംഗ്ഷനാലിറ്റിക്ക് ഹൃദയം സൃഷ്ടിക്കുന്നത്: ഓരോ സസ്യത്തിനും വേണ്ടി ഡ്രാഗിംഗ് പെരുമാറ്റം നിയന്ത്രിക്കുന്ന ക്ലോസർ. ഈ ക്ലോസറിൽ മൾട്ടിപ്പിള് اندر ഫംഗ്ഷൻസ് ഉണ്ടാകും, അവ ചേർന്ന് മൗസ് ചലനങ്ങൾ അനുഗമിച്ച് ഘടകങ്ങളിലെ സ്ഥാനം പുതുക്കും.
+
+ക്ലോസറുകൾ ഈ ടാസ്കിന് അത്രയ്ക്ക് അനുയോജ്യമാണ്, കാരണം ഇവ "സ്വകാര്യ" വേരിയബിളുകൾ സൃഷ്ടിച്ച് ഫംഗ്ഷൻ കോളുകൾക്കിടയിൽ ജൈവികമായി അവ നിലനിൽക്കാൻ ഇടയാക്കുന്നു, അപ്പോഴേക്കും ഓരോ സസ്യത്തിനും സ്വതന്ത്രമായ കോ-ഓർഡിനേറ്റ് ട്രാക്കിംഗ് ഉണ്ട്.
+
+### ഒരു ലളിതമായ ഉദാഹരണത്തോടെ ക്ലോസറുകൾ മനസ്സിലാക്കൽ
+
+ക്ലോസറുകളുടെ ആശയം വ്യക്തമാക്കാൻ ഒരു ലളിതമായ ഉദാഹരണം:
+
+```javascript
+function createCounter() {
+ let count = 0; // ഇത് ഒരു സ്വകാര്യ വ്യത്യാസം പോലെയാണ്
+
+ function increment() {
+ count++; // ആന്തരിക ഫംഗ്ഷൻ പുറം വേരിയബിള് ഓർത്തിരിക്കുന്നു
+ return count;
+ }
+
+ return increment; // നാം ആന്തരിക ഫംഗ്ഷൻ തിരിച്ചുകൊടുക്കുന്നു
+}
+
+const myCounter = createCounter();
+console.log(myCounter()); // 1
+console.log(myCounter()); // 2
+```
+
+**ഈ ക്ലോസർ മാതൃകയിൽ നടക്കുന്നത്:**
+- **സ്വകാര്യമായ `count` വേരിയബിൾ സൃഷ്ടിക്കുന്നു, ഇത് ക്ലോസർ ഇനറിലെ മാത്രമേ ഉള്ളൂ**
+- **ഇനറിലെ ഫംഗ്ഷൻ ആ ഔട്ടർ വേരിയബിൾ ആക്സസ് ചെയ്തു മാറ്റാനും കഴിയും (ക്ലോസർ മെക്കാനിസം)**
+- **നാം ഇനറിലെ ഫംഗ്ഷൻ റിട്ടേൺ ചെയ്യുന്നപ്പോൾ, അതിന്റെ പ്രൈവറ്റ് ഡാറ്റയുമായി ബന്ധം നിലനിൽക്കുന്നു**
+- **`createCounter()` ഫംഗ്ഷൻ പൂർത്തിയായാലും `count` നിലനിൽക്കുകയും അതിന്റെ മൂല്യം ഓർക്കുകയും ചെയ്യുന്നു**
+
+### എന്തുകൊണ്ട് ക്ലോസറുകൾ ഡ്രാഗ് ഫംഗ്ഷനാലിറ്റിക്ക് അനുയോജ്യമാണ്
+
+നമ്മുടെ ടെറാരിയത്തിൽ, ഓരോ സസ്യവും പ്രത്യേകം ശരിയായ സ്ഥാനം കോ-ഓർഡിനേറ്റുകൾ ഓർക്കണം. ക്ലോസറുകൾ നിങ്ങൾക്കായി ഇതു പൂർണമായ പരിഹാരമാണ്:
+
+**പ്രോജക്ടിന് പ്രധാനം:**
+- **ഓരോ സസ്യത്തിനും സ്വകാര്യ സ്ഥാന വേരിയബിളുകൾ സൂക്ഷിക്കുന്നു സ്വതന്ത്രമായി**
+- **ഡ്രാഗ് ഇവന്റുകൾക്കിടയിൽ കോ-ഓർഡിനേറ്റ് ഡാറ്റ നിലനിർത്തുന്നു**
+- **വ്യത്യസ്ത ഡ്രാഗ്ഗബിൾ ഘടകങ്ങളുടെ ഇടയിൽ വേരിയബിൾ കലക്കലുകൾ തടയുന്നു**
+- **ക്ലീനും ക്രമവുമായ കോഡ് ഘടന സൃഷ്ടിക്കുന്നു**
+
+> 🎯 **പഠന ലക്ഷ്യം**: ഇപ്പോൾ ക്ലോസറുകളുടെ എല്ലാ ഭാഗങ്ങളും നിപുണത കൈവരിക്കേണ്ടതില്ല. അവ എങ്ങനെ നമുക്ക് കോഡ് ക്രമീകരിക്കുകയും ഡ്രാഗിംഗ് സ്റ്റേറ്റ് നിലനിർത്തുകയും ചെയ്യുന്നതെന്ന് ശ്രദ്ധിക്കുക.
+
+```mermaid
+stateDiagram-v2
+ [*] --> Ready: പേജ് ലോഡ് ചെയ്യുന്നു
+ Ready --> DragStart: ഉപഭോക്താവ് അമർത്തുന്നു (pointerdown)
+ DragStart --> Dragging: മൗസ്/വിരൽ നീങ്ങുന്നു (pointermove)
+ Dragging --> Dragging: നീങ്ങുക തുടരുക
+ Dragging --> DragEnd: ഉപഭോക്താവ് വിട്ടുമാറുന്നു (pointerup)
+ DragEnd --> Ready: അടുത്ത ഡ്രാഗിനായി പുനഃസജ്ജമാക്കുക
+
+ state DragStart {
+ [*] --> CapturePosition
+ CapturePosition --> SetupListeners
+ SetupListeners --> [*]
+ }
+
+ state Dragging {
+ [*] --> CalculateMovement
+ CalculateMovement --> UpdatePosition
+ UpdatePosition --> [*]
+ }
+
+ state DragEnd {
+ [*] --> RemoveListeners
+ RemoveListeners --> CleanupState
+ CleanupState --> [*]
+ }
+```
+### dragElement ഫംഗ്ഷൻ സൃഷ്ടിക്കൽ
+
+ഇപ്പോൾ എല്ലാ ഡ്രാഗിംഗ് ലാജിക് കൈകാര്യം ചെയ്യുന്ന പ്രധാന ഫംഗ്ഷൻ നിർമ്മിക്കാം. സസ്യങ്ങളുടെ ഘടകങ്ങളുടെ വൃത്താന്തങ്ങൾക്കു താഴെ ഈ ഫംഗ്ഷൻ ചേർക്കുക:
+
+```javascript
+function dragElement(terrariumElement) {
+ // സ്ഥാനത്തെ പ-tracking ഇനം തുടങ്ങിയെടുത്തു
+ let pos1 = 0, // മുമ്പത്തെ മൗസ് X സ്ഥലം
+ pos2 = 0, // മുമ്പത്തെ മൗസ് Y സ്ഥലം
+ pos3 = 0, // നിലവിലെ മൗസ് X സ്ഥലം
+ pos4 = 0; // നിലവിലെ മൗസ് Y സ്ഥലം
+
+ // പ്രാഥമിക ഡ്രാഗ് ഇവന്റ് ശ്രുതിസ്ഥാപനം നടത്തുക
+ terrariumElement.onpointerdown = pointerDrag;
+}
+```
+
+**സ്ഥിതി ട്രാക്കിംഗ് സിസ്റ്റം മനസ്സിലാക്കൽ:**
+- **`pos1` & `pos2`**: പഴയ മൗസ് സ്ഥിതിയും പുതിയ സ്ഥിതിയും തമ്മിലുള്ള വ്യത്യാസം സൂക്ഷിക്കുന്നു
+- **`pos3` & `pos4`**: നിലവിലെ മൗസ് കോ-ഓർഡിനേറ്റുകൾ ട്രാക്ക് ചെയ്യുന്നു
+- **`terrariumElement`**: നാം ഡ്രാഗ് ആക്കാൻ പോകുന്ന പ്രത്യേക സസ്യ ഘടകം
+- **`onpointerdown`**: ഉപയോക്താവ് ഡ്രാഗ് തുടങ്ങുമ്പോൾ സൃഷ്ടിക്കുന്ന ഇവന്റ്
+
+**ക്ലോസർ മാതൃക ഇങ്ങനെ പ്രവർത്തിക്കുന്നു:**
+- **ഓരോ സസ്യ ഘടകത്തിനും സ്വകാര്യ സ്ഥാനം വേരിയബിളുകൾ സൃഷ്ടിക്കുന്നു**
+- **ഡ്രാഗിംഗ് ലൈഫ് സൈക്കിൾ മുഴുവൻ ഈ വേരിയബിളുകൾ നിലനിർത്തുന്നു**
+- **ഓരോ സസ്യവും സ്വതന്ത്രമായി അവയുടെ കോ-ഓർഡിനേറ്റുകൾ ട്രാക്ക് ചെയ്യുന്നു**
+- **`dragElement` ഫംഗ്ഷന്റെ മുഖാന്തിരം ക്ലീനായും സുലഭമായും സൗകര്യം നൽകുന്നു**
+
+### pointerevents ഉപയോഗിക്കുന്നതിന്റെ കാരണം
+
+നിങ്ങൾക്ക് `onclick`-നെക്കാൾ `onpointerdown` ഉപയോഗിക്കുന്നതിന്റെ കാരണമറിയാമോ? കാരണം ഇതാ:
+
+| ഇവന്റ് തരം | അനുയോജ്യമായ ഉപയോഗം | അതിന്റെ കുറവ് |
+|------------|----------|-------------|
+| `onclick` | ലഘു ബട്ടൺ ക്ലിക്കുകൾ | ഡ്രാഗിംഗ് കൈകാര്യം ചെയ്യില്ല (ക്ലിക്ക് - റിലീസ് മാത്രം) |
+| `onpointerdown` | മൗസ്, ടച്ച് എന്നിങ്ങനെ രണ്ട് വിഭാഗത്തിലും | പുതിയ ഒപ്പം കൃത്യമായ പിന്തുണയുള്ളത് |
+| `onmousedown` | ഡെസ്ക്ടോപ്പ് മൗസ് മാത്രം | മൊബൈൽ ഉപയോക്താക്കളെ ഒഴിഞ്ക്കുന്നു |
+
+**pointerevents നമുക്ക് അനുയോജ്യമായത്:**
+- **മൗസ്, വിരൽ, സ്റ്റൈലസ് എല്ലാം ഇവിടെ കാര്യക്ഷമമായി പ്രവർത്തിക്കുന്നു**
+- **ലാപ്ടോപ്പ്, ടാബ്ലെറ്റ്, ഫോണിൽ ഒരുപോലെ അനുഭവം നൽകുന്നു**
+- **ക്ലിക്ക് അതേസമയം സഞ്ചാരമുണ്ടല്ലോ, അതിനെയാണ് ശരിയായി കൈകാര്യം ചെയ്യുന്നത്**
+- **ഉപഭോക്താക്കൾ പ്രതീക്ഷിക്കുന്ന മൃദുവായ അനുഭവം സൃഷ്ടിക്കുന്നു**
+
+> 💡 **ഭാവിയിൽ സുരക്ഷിതമാക്കിയെടുക്കൽ**: pointerevents ഏറ്റവും പുതിയ ഉപയോക്തൃ ഇടപെടല് കൈകാര്യം ചെയ്യൽ രീതിയാണ്. മൗസ്, ടച്ച് നമുക്ക് വേർതിരിക്കുക അവശ്യമായില്ല, രണ്ടിനും ഒരേസമയം പിന്തുണ ലഭിക്കുന്നു. അതേ സമയം കുറ്റമറ്റതാണ്.
+
+### 🔄 **പാഠം പരിശോധിക്കൽ**
+**ഇവന്റ് കൈക്കൊള്ളൽ മനസ്സിലാക്കൽ**: ഇവന്റുകൾക്കു പറ്റിയുള്ള അറിവ് പരിശോധിക്കുക:
+- ✅ pointerevents ഉപയോഗിക്കുന്നത് mouse events പകരം എന്തുകൊണ്ട്?
+- ✅ ക്ലോസറിലെ വേരിയബിളുകൾ ഫംഗ്ഷൻ കോളുകൾക്കിടയിൽ എങ്ങനെ നിലനിർത്തുന്നു?
+- ✅ smooth dragging-നുള്ള `preventDefault()` ന്റെ ജോലി എന്താണ്?
+- ✅ പ്രത്യേക ഘടകങ്ങൾക്കുപകരം ചരിത്രത്തിലെ പേജ് ഡോക്യുമെന്റിൽ listeners എന്തുകൊണ്ട് ചേർക്കുന്നു?
+
+**യഥാർഥ അനുഭവം:** നിങ്ങളുടെ ദിവസേന ഉപയോഗിക്കുന്ന ഡ്രാഗ് ആൻഡ് ഡ്രോപ്പ് ഇന്റർഫേസുകൾ വിശകലനം ചെയ്യുക:
+- **ഫയൽ അപ്ലോഡുകൾ:** ഫയലുകൾ ബ്രൗസർ പരിശോധകനിൽ വലിച്ച് വിടുക
+- **കന്ബാൻ ബോർഡ്:** ടാസ്കുകൾ കോളങ്ങളിലിടംമാറ്റൽ
+- **ഇമേജ് ഗാലറികൾ:** ഫോട്ടോ ക്രമത്തിൽ മാറ്റം വരുത്തൽ
+- **മൊബൈൽ ഇന്റർഫേസുകൾ:** ടച്ച് സ്ക്രീനുകളിൽ സ്വൈപ്പ്, ഡ്രാഗ് ചെയ്യൽ
+
+---
+
+## pointerDrag ഫംഗ്ഷൻ: ഡ്രാഗിന്റെ ആരംഭം ക്യാച്ച് ചെയ്യൽ
+
+ഒരു ഉപയോക്താവ് സസ്യത്തിലേക്ക് മൗസ് ക്ലിക്ക് അല്ലെങ്കിൽ വിരൽ ടച്ച് ചെയ്യുമ്പോൾ `pointerDrag` ഫംക്ഷൻ പ്രവർത്തനമാരംഭിക്കുന്നു. ഇത് ആദ്യം കോ-ഓർഡിനേറ്റുകൾ പിടിച്ചെടുത്ത് ഡ്രാഗിംഗ് സംവിധാനം സജ്ജമാക്കുന്നു.
+
+`terrariumElement.onpointerdown = pointerDrag;` എന്ന പത്തിനുശേഷം നിങ്ങളുടെ `dragElement` ക്ലോസറിനുള്ളിൽ ഈ ഫംഗ്ഷൻ ചേർക്കുക:
+
+```javascript
+function pointerDrag(e) {
+ // നിഗമനഡിഫോൾട്ട് ബ്രൗസർ പെരുമാറ്റം തടയുക (ഉദാഹരണം, ടെക്സ്റ്റ് തിരഞ്ഞെടുപ്പ്)
+ e.preventDefault();
+
+ // പ്രാരംഭ മൗസ്/ടച്ച് സ്ഥാനം പിടിക്കുക
+ pos3 = e.clientX; // ഡ്രാഗ് ആരംഭിച്ച X കോർഡിനേറ്റ്
+ pos4 = e.clientY; // ഡ്രാഗ് ആരംഭിച്ച Y കോർഡിനേറ്റ്
+
+ // ഡ്രാഗിംഗ് പ്രക്രിയയ്ക്കായി ഇവന്റ് ലിസനറുകൾ സജ്ജീകരിക്കുക
+ document.onpointermove = elementDrag;
+ document.onpointerup = stopElementDrag;
+}
+```
+
+**പടി പടിയായി സംഭവിക്കുന്നത്:**
+- **ഡ്രാഗിംഗ് തടസ്സപ്പെടുത്തുന്ന സാധാരണ ബ്രൗസർ പെരുമാറ്റങ്ങൾ തടയുന്നു**
+- **ഉപയോക്താവ് ഡ്രാഗ് തുടങ്ങിയ കൃത്യമായ സ്ഥിതികൾ റെക്കോർഡ് ചെയ്യുന്നു**
+- **ബോധപൂർവ്വ ഡ്രാഗ് ചലനത്തിനുള്ള ഇവന്റ് ലിസ്റ്റനറുകൾ സജ്ജീകരിക്കുന്നു**
+- **മൗസ്/ടച്ച് മാഫിയയിൽ മുഴുവൻ ഡോക്യുമെന്റിലും സഞ്ചാരം ട്രാക്കുചെയ്യാൻ സജ്ജമാക്കുന്നു**
+
+### ഇവന്റ് പ്രതിരോധം മനസ്സിലാക്കൽ
+
+`e.preventDefault()` വരി മൃദുവായി ഡ്രാഗ് നടത്തുന്നതിനായി അത്യാവശ്യമാണ്:
+
+**പ്രതിരോധം ഇല്ലാതെയെങ്കിലോ ബ്രൗസറുകൾ:**
+- **പേജിൽ ടെക്സ്റ്റ് സെലക്ട് ചെയ്യാൻ തുടങ്ങും**
+- **കൺടെക്സ്റ്റ് മെനു റൈറ്റ് ക്ലിക്കിൽ ട്രിഗർ ചെയ്യാം**
+- **നമ്മുടെ കസ്റ്റം ഡ്രാഗിംഗ് പെരുമാറ്റം തടസ്സപ്പെടും**
+- **ഡ്രാഗ് ചെയ്യുമ്പോൾ ദൃശ്യമാന പിശകുകൾ വരാം**
+
+> 🔍 ** പരീക്ഷണം**: ഈ പാഠം പൂർത്തിയായി കഴിഞ്ഞ് `e.preventDefault()` നീക്കം ചെയ്ത് ഡ്രാഗിംഗ് അനുഭവം പരിശോധിക്കുക. നിങ്ങൾക്ക് എത്ര അവശ്യമാണ് ഈ വരി ഉടനെ മനസ്സിലാകും!
+
+### കോ-ഓർഡിനേറ്റ് ട്രാക്കിംഗ് സിസ്റ്റം
+
+`e.clientX` ഉം `e.clientY` ഉം മൗസ്/ടച്ച് കൃത്യമായ കോ-ഓർഡിനേറ്റുകൾ നൽകുന്നു:
+
+| പ്രോപ്പർട്ടി | ഇത് അളക്കുന്ന സ്ഥിതി | ഉപയോഗം |
+|----------|------------------|----------|
+| `clientX` | വീക്ഷണപാളിയിലെ പ്രതിഫലമായ ആഡംബരം അക്ഷാംശം | ഇടതുവലകുള്ള ചലനം ട്രാക്ക് ചെയ്യൽ |
+| `clientY` | വീക്ഷണപാളിയിലെ പ്രതിഫലമായ നേർബന്ധം രേഖാംശം | മേൽ താഴെയുള്ള ചലനം ട്രാക്ക് ചെയ്യൽ |
+**ഈ കോഓർഡിനേറ്റുകളെ അഭിരുചിപ്പെടുത്തൽ:**
+- **നൽകുന്നു** പിക്സൽ-സൂക്ഷ്മമായ സ്ഥാനമിടിപ്പ് വിവരങ്ങൾ
+- **പ്രവർത്തിക്കുന്നു** യഥാർത്ഥ സമയം ഉപയോക്താവ് അവരുടെ പോയിന്റർ നയിക്കുമ്പോൾ
+- **നിലവാരം സൂക്ഷിക്കുന്നു** വ്യത്യസ്ത സ്ക്രീൻ വലിപ്പങ്ങളിലൂടെയും സൂം നിലവാരങ്ങളിലൂടെയും
+- **സкത്സ്യപ്പെടുത്തുന്നു** മൃദുവായി, പ്രതികരണശീലമുള്ള ഡ്രാഗ് ഇടപാടുകൾ
+
+### ഡോക്യുമെന്റ്-നിലവാര ഇവന്റ് ലിസണറുകൾ സജ്ജീകരിക്കൽ
+
+പ്രമാണത്തിന്റെ മുഴുവൻ `document`-ലും move, stop ഇവന്റ്-കளை ഞങ്ങൾ എങ്ങനെ ചേര്ക്കുന്നതാണെന്ന് ശ്രദ്ധിക്കുക, മാത്രമല്ല പ്ലാൻ്റ് എലമെന്റിൽ മാത്രം പാലിക്കാറില്ല:
+
+```javascript
+document.onpointermove = elementDrag;
+document.onpointerup = stopElementDrag;
+```
+
+**എന്തുകൊണ്ട് ഡോക്യുമെന്റിൽ ചേർക്കണം:**
+- **തുടരുന്നു** പ്ലാൻ്റ് എലമെന്റ് വിട്ടപോവുമ്പോഴും ട്രാക്കിംഗ്
+- **തേറ്റം തടയുന്നു** ഉപയോക്താവ് വേഗത്തിൽ നീങ്ങുമ്പോൾ ഡ്രാഗ് ഇടപാട് നിലക്കുന്നുവെന്നുണ്ടാകാതിരിക്കാൻ
+- **നൽകുന്നു** തൊട്ട് അവസരം മുഴുവൻ സ്ക്രീനിൽ മൃദുവായ ഡ്രാഗ്
+- **കൈകാര്യം ചെയ്യുന്നു** കേഴ്സർ ബ്രൗസർ വിൻഡോയ്ക്ക് പുറത്തേക്കു നീങ്ങുമ്പോൾ ഉണ്ടാകുന്ന വ്യത്യസ്ത സാഹചര്യങ്ങൾ
+
+> ⚡ **പ്രകടന കുറിപ്പ്**: ഡ്രാഗിംഗ് അനേഭവിച്ചതിനു ശേഷം, മെമ്മറി ലീക്കുകളും പ്രകടന പ്രശ്നങ്ങളും ഒഴിവാക്കാൻ ഈ ഡോക്യുമെന്റ്-നിലവാര ലിസണറുകൾ നീക്കം ചെയ്യുന്നതാണ്.
+
+## ഡ്രാഗ് സിസ്റ്റം പൂർണ്ണമാക്കൽ: മോഷണം, ക്ലീൻഅപ്പ്
+
+ഇപ്പോൾ നാം രണ്ട് ശേഷിക്കുള്ള ഫങ്ഷനുകൾ ചേർക്കും, അവ യഥാർത്ഥ ഡ്രാഗിംഗ് മോഷണം കൈകാര്യം ചെയ്യുകയും ഡ്രാഗിങ് നിർത്തുമ്പോൾ ക്ലീൻഅപ്പ് നടത്തുകയും ചെയ്യും. ഈ ഫങ്ഷനുകൾ ചേർന്ന് നിങ്ങളുടെ ടെറേരിയം മുഴുവനും മൃദുവായി, പ്രതികരണശീലമുള്ള പ്ലാൻ്റ് മോഷണം സൃഷ്ടിക്കുന്നു.
+
+### elementDrag ഫങ്ഷൻ: മോഷണ ട്രാക്കിംഗ്
+
+`pointerDrag`-ന്റെ ക്ലോസിംഗ് കർളി ബ്രാക്കറ്റിനു ശേഷം `elementDrag` ഫങ്ഷൻ ചേർക്കുക:
+
+```javascript
+function elementDrag(e) {
+ // കഴിഞ്ഞ സംഭവത്തിൽ നിന്നുള്ള മാറിയ ദൂരം കണക്കാക്കുക
+ pos1 = pos3 - e.clientX; // കൂനലറ്റമായ ദൂരം
+ pos2 = pos4 - e.clientY; // ലംബമായ ദൂരം
+
+ // നിലവിലെ സ്ഥിതിസൂചന അപ്ഡേറ്റ് செய்யുക
+ pos3 = e.clientX; // പുതിയ നിലവിലെ X സ്ഥാനം
+ pos4 = e.clientY; // പുതിയ നിലവിലെ Y സ്ഥാനം
+
+ // ഘടകത്തിന്റെ സ്ഥാനത്തേക്കുള്ള മാറൽ പ്രയോഗിക്കുക
+ terrariumElement.style.top = (terrariumElement.offsetTop - pos2) + 'px';
+ terrariumElement.style.left = (terrariumElement.offsetLeft - pos1) + 'px';
+}
+```
+
+**കോഓർഡിനേറ്റ് ഗണിതശാസ്ത്രം മനസ്സിലാക്കൽ:**
+- **`pos1` & `pos2`**: കഴിഞ്ഞ അപ്ഡേറ്റിനും താരതമ്യപ്പെടുത്തി ജനറേറ്റ് ചെയ്തത് എത്രമാത്രം മൈസ് നീങ്ങി എന്നത് കണക്കാക്കുന്നു
+- **`pos3` & `pos4`**: അടുത്ത ഗണിതത്തിലെ കണക്കെടുപ്പിനായി നിലവിലെ മൈസ് സ്ഥാനം സൂക്ഷിക്കുന്നു
+- **`offsetTop` & `offsetLeft`**: പേജിൽ എലമെന്റിന്റെ നിലവിലെ സ്ഥാനം നേടുന്നു
+- **കുറയ്ക്കൽ ലാജിക്**: മൗസ് നീക്കിയ അളവിന് തുല്യമായി എലമെന്റ് നീക്കുന്നു
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Mouse
+ participant JavaScript
+ participant Plant
+
+ User->>Mouse: (100, 50) ൽ ഡ്രാഗ് ആരംഭിക്കുക
+ Mouse->>JavaScript: pointerdown ഇവന്റ്
+ JavaScript->>JavaScript: ആരംഭികാവസ്ഥ സൂക്ഷിക്കുക (pos3=100, pos4=50)
+ JavaScript->>JavaScript: move/up ലിസണറുകൾ ക്രമീകരിക്കുക
+
+ User->>Mouse: (110, 60) ലേക്ക് നീക്കുക
+ Mouse->>JavaScript: pointermove ഇവന്റ്
+ JavaScript->>JavaScript: കണക്കാക്കുക: pos1=10, pos2=10
+ JavaScript->>Plant: അപ്ഡേറ്റ് ചെയ്യുക: ഇടതു += 10px, മുകളിലേക്ക് += 10px
+ Plant->>Plant: പുതുച്ഥിതിയിൽ റൻഡർ ചെയ്യുക
+
+ User->>Mouse: (120, 65) ൽ വിട്ടുകിട്ടുക
+ Mouse->>JavaScript: pointerup ഇവന്റ്
+ JavaScript->>JavaScript: ലിസണറുകൾ നീക്കം ചെയ്യുക
+ JavaScript->>JavaScript: അടുത്ത ഡ്രാഗിനായി പുനഃസജ്ജീകരിക്കുക
+```
+**ഇത് മോഷണ കണക്കെടുപ്പ് ആവിഷ്കാരം:**
+1. **കൊടുക്കുന്നു** പഴയയും പുതിയ മൗസ് സ്ഥാനങ്ങൾക്കുള്ള വ്യത്യാസം
+2. **കണക്കാക്കുന്നു** എലമെന്റ് എത്രത്തോളം നീക്കണം എന്നത് മൗസ് നീക്കത്തിന്റെ അടിസ്ഥാനത്തിൽ
+3. **അപ്ഡേറ്റ് ചെയ്യുന്നു** എലമെന്റിന്റെ CSS സ്ഥാന സന്നദ്ധതകൾ യഥാർത്ഥ സമയത്ത്
+4. **സൂക്ഷിക്കുന്നു** പുതിയ സ്ഥാനം അടുത്ത മോഷണ കണക്കെടുപ്പിന്റെ അടിസ്ഥാനമായി
+
+### ഗണിതത്തിന്റെ ദൃശ്യപരമായി പ്രതിനിധാനം
+
+```mermaid
+sequenceDiagram
+ participant Mouse
+ participant JavaScript
+ participant Plant
+
+ Mouse->>JavaScript: (100,50) ൽ നിന്നും (110,60) ലേക്ക് നീക്കം ചെയ്യുക
+ JavaScript->>JavaScript: കണക്കാക്കുക: 10px വലത്തേക്ക്, 10px താഴേക്ക് നീക്കിയിരിക്കുന്നു
+ JavaScript->>Plant: സ്ഥാനം +10px വലത്തേക്ക്, +10px താഴേക്ക് പുതുക്കുക
+ Plant->>Plant: പുതിയ സ്ഥാനത്ത് ചിത്രീകരിക്കുക
+```
+### stopElementDrag ഫങ്ഷൻ: ക്ലീൻഅപ്പ്
+
+`elementDrag`-ന്റെ ക്ലോസിംഗ് കർളി ബ്രാക്കറ്റിനു ശേഷം ക്ലീൻഅപ്പ് ഫങ്ഷൻ ചേർക്കുക:
+
+```javascript
+function stopElementDrag() {
+ // ഡോക്യുമെന്റ്-നിരത്തി ഇവന്റ് ലിസ്ണറുകൾ നീക്കം ചെയ്യുക
+ document.onpointerup = null;
+ document.onpointermove = null;
+}
+```
+
+**ക്ലീൻഅപ്പ് എന്തുകൊണ്ട് അനിവാര്യമാണ്:**
+- **തടയുന്നു** ലിസണറുകൾилет്ഞ് അനാവശ്യമായി പ്രവർത്തിക്കാതിരിക്കാൻ മെമ്മറി ചോർച്ചകൾ
+- **മുടക്കുന്നു** ഉപയോക്താവ് പ്ലാന്റ് വിട്ടപ്പോൾ ഡ്രാഗിങ് ബിഹേവിയർ
+- **അനുവദിക്കുന്നു** മറ്റു എലമെന്റുകൾ സ്വതന്ത്രമായി ഡ്രാഗ് ചെയ്യാൻ
+- **പുതുക്കുന്നു** അടുത്ത ഡ്രാഗ് ഓപ്പറേഷനിനായി സിസ്റ്റം പുനഃസജ്ജമാക്കുന്നു
+
+**ക്ലീൻഅപ്പ് ഇല്ലാതെ സംഭവിക്കുക:**
+- ഡ്രാഗ് നിർത്തുമ്പോഴും ഇവന്റ് ലിസണറുകൾ പ്രവർത്തനം തുടരുന്നു
+- ഉപയോഗിക്കാതിരിക്കുന്ന ലിസണറുകൾ കൂട്ടത്തിൽ പ്രകടനം കുറയും
+- മറ്റു എലമെന്റുകളുമായി ഇടപഴകുമ്പോൾ അനുപേക്ഷിത പ്രവർത്തനം
+- അനാവശ്യ ഇവന്റ് ഹാൻഡ്ലിങ്ങിനായി ബ്രൗസർ സ്രോതസ്സുകൾ വിനിയോഗം
+
+### CSS സ്ഥാന സannen്ധതകളുടെ అవബോധം
+
+നമ്മുടെ ഡ്രാഗ് സിസ്റ്റം രണ്ടു പ്രധാന CSS സannen്ധതകൾ മാനിപ്പുലേറ്റ് ചെയ്യുന്നു:
+
+| സannen്ധത | എന്ത് നിയന്ത്രിക്കുന്നു | നാം എങ്ങനെ ഉപയോഗിക്കുന്നു |
+|----------|------------------|---------------|
+| `top` | മുകളിൽ ക്രമരേഖയിൽ നിന്ന് ദൂരം | ഡ്രാഗിയ്ക്കുമ്പോൾ ഉയരിന്റെ സ്ഥാനമിടുപ്പ് |
+| `left` | ഇടത് ക്രമരേഖയിൽ നിന്ന് ദൂരം | ഡ്രാഗിയ്ക്കുമ്പോൾ കവിഞ്ഞ സ്ഥാനമിടുപ്പ് |
+
+**offset സannen്ധതകളെ കുറിച്ചുള്ള പ്രധാന അറിവുകൾ:**
+- **`offsetTop`**: സ്ഥിതിചെയ്യുന്ന മാതൃകയുടെ മുകളിൽ നിന്നും നിലവിലെ ദൂരം
+- **`offsetLeft`**: സ്ഥിതിചെയ്യുന്ന മാതൃകയുടെ ഇടത്തരം നിന്നും നിലവിലെ ദൂരം
+- **സ്ഥാനമിടൽ സാന്ദർഭ്യം**: ഈ മൂല്യങ്ങൾ അടുത്തുവന്ന സ്ഥാനമിട്ട മാതാവിന് അനുസൃതമാണ്
+- **യഥാർത്ഥ സമയ അപ്ഡേറ്റ്**: CSS സannen്ധതകൾ മാറ്റുമ്പോൾ തന്നെ മാറ്റങ്ങൾ സംഭവിക്കുന്നു
+
+> 🎯 **ഡിസൈൻ തത്ത്വം**: ഈ ഡ്രാഗ് സിസ്റ്റം ഉദ്ദേശപ്രകാരം ലവിച്ചിട്ടുണ്ട് – "ഡ്രോപ്പ് മേഖലകൾ" അല്ലെങ്കിൽ നിയന്ത്രണങ്ങളില്ല. ഉപയോക്താക്കൾക്ക് പ്ലുന്നത് എവിടെ വേണമെങ്കിലും വെക്കാവുന്നതാണ്, അവരുടെ ടെറേരിയം ഡിസൈനിനോട് പൂർണ നിർമ്മാണാത്മക നിയന്ത്രണം നൽകുന്നു.
+
+## എല്ലാം ഒരുമിച്ചുകൊണ്ട്: നിങ്ങളുടെ പൂർണ്ണ ഡ്രാഗ് സിസ്റ്റം
+
+അഭിനന്ദനം! നിങ്ങളുടെ വാനില്ല ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് സങ്കീർണ്ണമായ ഡ്രാഗ്-അൻഡ്-ഡ്രോപ് സിസ്റ്റം നിർമിച്ചു കഴിഞ്ഞു. നിങ്ങളുടെ പൂർണ്ണ `dragElement` ഫങ്ഷൻ ഇപ്പോൾ ശക്തമായ ക്ലോഷർ ഉൾക്കൊള്ളുന്നു, അത് കൈകാര്യം ചെയ്യുന്നു:
+
+**നിങ്ങളുടെ ക്ലോഷർ ചെയ്യുന്നത്:**
+- **സ്വന്തമായ സ്ഥിരമായ നിലകൾ** ഓരോ പ്ലാന്റിനും പ്രൈവറ്റ് ആയി നിലനിർത്തുന്നു
+- **ഡ്രാഗ് ലൈഫ്സൈക്കിൾ** സംരംഭം മുതൽ അവസാനമുവരെ കൈകാര്യം ചെയ്യുന്നു
+- **മൃദുവായ, പ്രതികരണശീലമുള്ള** മോഷണം മുഴുവൻ സ്ക്രീനിൽ നൽകുന്നു
+- **സാധനങ്ങൾ ക്ലീൻ ചെയ്യുന്നു** മെമ്മറി ചോർച്ചകൾ തടയാൻ നല്ല രീതിയിൽ
+- **ആവശ്യഹമായ, സൃഷ്ടിപ്പൂർണമായ** ടെറേരിയം ഡിസൈൻ ഇന്റർഫേസ് സൃഷ്ടിക്കുന്നു
+
+### നിങ്ങളുടെ ഇന്ററാക്ടീവ് ടെറീരിയം ടെസ്റ്റിംഗ്
+
+ഇപ്പോൾ നിങ്ങളുടെ ഇന്ററാക്ടീവ് ടെറീരിയം പരീക്ഷിക്കുക! നിങ്ങളുടെ `index.html` ഫയൽ വെബ് ബ്രൗസറിൽ തുറന്ന് ഫംഗ്ഷനാലിറ്റി പരീക്ഷിക്കുക:
+
+1. **ഏതെങ്കിലും പ്ലാൻ്റ് ക്ലിക്ക് ചെയ്ത് പിടിക്കുക** ഡ്രാഗിംഗ് ആരംഭിക്കാൻ
+2. **മൗസ് അല്ലെങ്കിൽ വിരലിൾ നീക്കുക** പ്ലാൻറെ മൃദുവായി പിന്തുടരുന്നത് കാണുക
+3. **വിട്ടു വിടുക** പുതിയ സ്ഥാനത്ത് പ്ലാൻ്റ് വിടാൻ
+4. **വ്യത്യസ്ത ക്രമീകരണങ്ങൾ പരീക്ഷിച്ച്** ഇന്റർഫേസ് പരിചയപ്പെടുത്തുക
+
+🥇 **സാഫലം**: നിങ്ങൾ കോർ ആശയങ്ങൾ ഉപയോഗിച്ച് ഒരു പൂർണ്ണമായ ഇന്ററാക്ടീവ് വെബ് ആപ്ലിക്കേഷൻ സൃഷ്ടിച്ചു. ഡ്രാഗ്-അൻഡ്-ഡ്രോപ് ഫംഗ്ഷനാലിറ്റി ഫയൽ അപ്ലോഡുകൾ, കാൻബാൻ ബോർഡുകൾ, മറ്റു നിരവധി ഇന്ററാക്ടീവ് ഇന്റർഫേസുകൾ ബഹുവിധ ആശയങ്ങൾക്ക് അടിസ്ഥാനമാണ്.
+
+### 🔄 **പഠന പരിശോധന**
+**പൂർണ്ണ സിസ്റ്റം മനസ്സിലാക്കൽ**: നിങ്ങളുടെ ഡ്രാഗ് സിസ്റ്റം നിപുണത പരിശോധിക്കുക:
+- ✅ എങ്ങനെ ക്ലോഷറുകൾ ഓരോ പ്ലാന്റിനും സ്വതന്ത്ര നില നിലനിർത്തുന്നു?
+- ✅ മൃദുവായ മോഷണത്തിനു കോഓർഡിനേറ്റ് ഗണിതം എങ്ങനെ അനിവാര്യമാണ്?
+- ✅ ഇവന്റ് ലിസണറുകൾ ക്ലീൻ ചെയ്യാൻ മറന്നാൽ എന്താകും?
+- ✅ ഈ പാറ്റേൺ കൂടുതൽ സങ്കീർണ്ണ ഇടപാടുകളിൽ എങ്ങനെ സ്കെയിൽ ചെയ്യാം?
+
+**കോഡ് ഗുണനിലവാരം പ്രതിഫലം**: നിങ്ങളുടെ പൂർണ്ണ പരിഹാരം അവലോകനം ചെയ്യുക:
+- **മോഡുലാർ ഡിസൈൻ**: ഓരോ പ്ലാൻ്റിനും തങ്ങളുടെ ക്ലോഷർ ഇൻസ്റ്റൻസ്
+- **ഇവന്റ് കാര്യക്ഷമത**: ലിസണറുകളുടെ ശരിയായ സജ്ജീകരണവും ക്ലീൻഅപ്പും
+- **ക്രാസ്-ഡിവൈസ് പിന്തുണ**: ഡെസ്ക്ടോപ്പിലും മൊബൈലിലും പ്രവർത്തിക്കുന്നു
+- **പ്രകടന കാര്യക്ഷമത**: മെമ്മറി ചോർച്ചകളോ ആവർത്തിക്കുന്ന കണക്കെടുപ്പുകളോ ഇല്ല
+
+
+
+---
+
+## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀
+
+ഏജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെ പറയുന്ന ചലഞ്ച് പൂർത്തിയാക്കുക:
+
+**വിവരണം:** എല്ലാ പ്ലാന്റുകളും അവരുടെ മിഴിവായ സൈഡ്ബാർ സ്ഥാനങ്ങളിലേക്ക് നയിക്കുന്ന സ്മൂത്ത് ആനിമേഷനുകൾ ഉപയോഗിച്ച് സജ്ജമാക്കുന്ന റീസറ്റ് ഫംഗ്ഷണാലിറ്റി ടെറീരിയം പ്രോജക്ടിൽ ചേർക്കുക.
+
+**പ്രോംപ്റ്റ്:** ക്ലിക്കുചെയ്താൽ സൈഡ്ബാറിലെ ആദ്യസ്ഥിതികളിലേക്ക് എല്ലാ പ്ലാന്റുകളും 1 സെക്കന്റ് ദൈർഘ്യമുള്ള CSS ട്രാൻസിഷൻ ഉപയോഗിച്ച് മിടുക ആനിമേറ്റ് ചെയ്യുന്ന റീസറ്റ് ബട്ടൺ സൃഷ്ടിക്കുക. പേജ് ലോഡ് ചെയ്തത് സമയത്ത് ആദ്യസ്ഥിതികൾ സൂക്ഷിക്കുകയും റീസറ്റ് ബട്ടൺ അമർത്തുമ്പോൾ മൃദുവായി ആനിമേറ്റ് ചെയ്യുകയും ചെയ്യണം.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) പറ്റി കൂടുതൽ അറിയുക.
+
+## 🚀 അധിക ചലഞ്ച്: നിങ്ങളുടെ കഴിവുകൾ വിപുലീകരിക്കുക
+
+താങ്കളുടെ ടെറേരിയം അടുത്ത പദത്തിലേക്ക് കൊണ്ടുപോകാൻ തയ്യാറാണോ? താഴെ കൊടുത്തിരിക്കുന്ന വിപുലീകരണങ്ങൾ നടപ്പാക്കുക:
+
+**സൃഷ്ടിപരമായ വിപുലീകരണങ്ങൾ:**
+- **ഡബിൾ ക്ലിക്ക്** ഒരു പ്ലാൻ്റ് മുൻനിരയിലേക്ക് കൊണ്ടുപോകുക (z-index മാനിപ്പുലേഷൻ)
+- **വിഷ്വൽ ഫീഡ്ബാക്ക് ചേർക്കുക** പ്ലാന്റിന്മീതെ ഹോവർ ചെയ്യുമ്പോൾ സുറളമായി തെളിയുന്ന ആസ്വാദനങ്ങൾ
+- **പരിധികൾ നടപ്പിലാക്കുക** പ്ലാന്റുകൾ ടെറേരിയം പുറത്തേക്ക് കടക്കുന്നത് തടയാൻ
+- **സേവ് ഫങ്ഷൻ സൃഷ്ടിക്കുക** പ്ലാന്റുകളുടെസ്ഥാനം localStorage ഉപയോഗിച്ച് ഓർമ്മിക്കാനുള്ള
+- **ശബ്ദഫലങ്ങൾ ചേർക്കുക** പ്ലാൻ്റ് എടുക്കുകയും വയ്ക്കുകയും ചെയ്യുമ്പോൾ
+
+> 💡 **പഠന അവസരം**: ഈ ഓരോ ചലഞ്ചുകളും DOM മാനിപ്പുലേഷൻ, ഇവന്റ് ഹാൻഡ്ലിങ്, ഉപയോക്തൃ അനുഭവം ഡിസൈനിന്റെ പുതിയ അംശങ്ങൾ പഠിപ്പിക്കും.
+
+## പോസ്റ്റ്-ലെക്ചർ ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/20)
+
+## അവലോകനവും സ്വയം പഠനവും: നിങ്ങളുടെ അറിവ് ആഴപ്പെടുത്തൽ
+
+നീങ്ങൾ DOM മാനിപ്പുലേഷന്റെ അടിസ്ഥാനങ്ങൾ നിപുണമായി, പക്ഷേ പഠിക്കാൻ ഉപയോഗപ്പെടുത്താനുതകുന്നവ കൂടുതലുണ്ട്! അറിവും കഴിവുകളും വിപുലീകരിക്കാൻ ചില മാർഗ്ഗങ്ങൾ:
+
+### പര്യായമായ ഡ്രാഗ്-അൻഡ്-ഡ്രോപ്പ് സമീപനങ്ങൾ
+
+Pointer events പരമാവധി ലവ്ചെയ്യുന്നതിനാണ് ഞങ്ങൾ ഉപയോഗിച്ചിട്ടുള്ളത്, പക്ഷേ വെബ് ഡെവലപ്പ്മെന്റിൽ സമാനമായി എത്രപ്പേരിലാണ്:
+
+| സമീപനം | മികച്ചത് | പഠന മൂല്യം |
+|----------|----------|------------|
+| [HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) | ഫയൽ അപ്ലോഡുകൾ, ഔദ്യോഗിക ഡ്രാഗ് മേഖലകൾ | നെടുനാളിലൂടെ ബ്രൗസറിൻറെ സ്വാഭാവിക ശേഷികൾ മനസ്സിലാക്കൽ |
+| [Touch Events](https://developer.mozilla.org/docs/Web/API/Touch_events) | മൊബൈൽ-പ്രത്യേക ഇടപാടുകൾ | മൊബൈൽ-ഫസ്റ്റ് ഡെവലപ്പ്മെന്റ് പാറ്റേണുകൾ |
+| CSS `transform` സannen്ധതകൾ | മൃദുവായ ആനിമേഷനുകൾ | പ്രകടന മെച്ചപ്പെടുത്തൽ സാങ്കേതികവിദ്യകൾ |
+
+### പുരോഗമന DOM മാനിപ്പുലേഷൻ വിഷയങ്ങൾ
+
+**അടുത്ത പഠനപടവുകൾ:**
+- **ഇവന്റ് ഡെലിഗേഷൻ**: പല എലമെന്റുകൾക്കായി ഇവന്റ് നിർവഹണ കാര്യക്ഷമതയോടെ
+- **Intersection Observer**: എലമെന്റുകൾ viewport-ൽ പ്രവേശിക്കുകയോ വിടുകയോ ചെയ്യുന്നുവോ കണ്ടെത്തൽ
+- **Mutation Observer**: DOM ഘടനയിൽ മാറ്റങ്ങൾ കാണൽ
+- **Web Components**: ആവർത്തനയോഗ്യമായ, സംയോജിത UI എലമെന്റുകൾ സൃഷ്ടിക്കൽ
+- **Virtual DOM ആശയങ്ങൾ**: ഫ്രെയിംവർക്കുകൾ DOM അപ്ഡേറ്റുകൾ എങ്ങനെ മെച്ചപ്പെടുത്തുന്നു മനസ്സിലാക്കൽ
+
+### തുടർന്നുള്ള പഠനത്തിനുള്ള പ്രധാന സ്രോതസ്സുകൾ
+
+**ടെക്നിക്കൽ ഡോക्यുമെന്റേഷൻ:**
+- [MDN Pointer Events Guide](https://developer.mozilla.org/docs/Web/API/Pointer_events) - സമഗ്ര pointer event റഫറൻസ്
+- [W3C Pointer Events Specification](https://www.w3.org/TR/pointerevents1/) - ഔദ്യോഗിക സ്റ്റാൻഡേർഡ് ഡോക്യുമെന്റ്
+- [JavaScript Closures Deep Dive](https://developer.mozilla.org/docs/Web/JavaScript/Closures) - ഉയർന്ന തലത്തിലുള്ള ക്ലോഷർ പാറ്റേണുകൾ
+
+**ബ്രൗസർ സാമർത്ഥ്യം:**
+- [CanIUse.com](https://caniuse.com/) - ബ്രൗസറുകളിൽ ഫീച്ചർ പിന്തുണ പരിശോധിക്കുക
+- [MDN Browser Compatibility Data](https://github.com/mdn/browser-compat-data) - വിശദമായ സാമർത്ഥ്യ വിവരങ്ങൾ
+
+**പ്രായോഗിക അവസരങ്ങൾ:**
+- സമാന ഡ്രാഗ് മെക്കാനിക് ഉപയോഗിച്ച് പസിൽ ഗെയിം നിർമ്മിക്കുക
+- ഡ്രാഗ്-അൻഡ്-ഡ്രോപ്പ് ടാസ്ക് മാനേജ്മെന്റുള്ള കാൻബാൻ ബോർഡ് സൃഷ്ടിക്കുക
+- ഡ്രാഗ് ചെയ്യാവുന്ന ഫോട്ടോ ക്രമീകരണങ്ങളുള്ള ഇമേജ് ഗ്യാലറി രൂപപ്പെടുത്തുക
+- മൊബൈൽ ഇന്റർഫേസുകൾക്കായുള്ള ടച്ച് ജെസ്ചർ പരീക്ഷിക്കുക
+
+> 🎯 **പഠന തന്ത്രം**: ഈ ആശയങ്ങൾ ഉറപ്പാക്കാനാകുന്നത് പരിശീലനത്തിലൂടെ മാത്രമാണ്. ഡ്രാഗബിള് ഇന്റർഫേസുകളുടെ വ്യത്യസ്ത പദവർഗ് നിർമ്മിച്ച് പ്രയോഗിക്കുക – ഓരോ പ്രോജക്ടും ഉപയോക്തൃ ഇടപെടലിന്റെയും DOM മാനിപ്പുലേഷന്റെയും പറ്റി പുതിയ പാഠങ്ങൾ നൽകും.
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ ചെയ്യാൻ കഴിയുന്നത്**
+- [ ] ബ്രൗസർ ഡെവ് ടൂൾസ് തുറന്ന് കൺസോളിൽ `document.querySelector('body')` ടൈപ്പ് ചെയ്യുക
+- [ ] വെബ്പേജിന്റെ ടെക്സ്റ്റ് `innerHTML` അല്ലെങ്കിൽ `textContent` ഉപയോഗിച്ച് മാറ്റാൻ ശ്രമിക്കുക
+- [ ] വെബ്പേജിലെ ഏതെങ്കിലും ബട്ടൺ അല്ലെങ്കിൽ ലിങ്കില് ക്ലിക്ക് ഇവന്റ് ലിസണർ ചേർക്കുക
+- [ ] എലമെന്റുകൾ പടിവാതിൽ ഉപയോഗിച്ച് DOM ട്രീ ഘടന പരിശോധിക്കുക
+
+### 🎯 **ഈ മണിക്കൂർ പൂർണ്ണമാക്കിയാൽ നേടാൻ കഴിയുന്നത്**
+- [ ] പോസ്റ്റ്-ലെഷൻ ക്വിസ് പൂർത്തിയായിട്ട് DOM മാനിപ്പുലേഷൻ ആശയങ്ങൾ അവലോകനം ചെയ്യുക
+- [ ] ഉപയോക്തൃ ക്ലിക്കുകൾക്ക് പ്രതികരിക്കുന്ന ഒരു ഇന്ററാക്ടീവ് വെബ്പേജ് രൂപപ്പെടുത്തുക
+- [ ] വ്യത്യസ്ത ഇവന്റ് തരം (click, mouseover, keypress) ഉപയോഗിച്ച് ഇവന്റ് ഹാൻഡ്ലിങ് പരിശീലിക്കുക
+- [ ] ഒരു ലളിതമായ ടു-ഡു ലിസ്റ്റ് അല്ലെങ്കിൽ കൗണ്ടർ DOM മാനിപ്പുലേഷൻ ഉപയോഗിച്ച് നിർമ്മിക്കുക
+- [ ] HTML എലമെന്റുകളും ജാവാസ്ക്രിപ്റ്റ് ഒബ്ജക്ടുകളും തമ്മിലുള്ള ബന്ധം കണ്ടെത്തുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ച നീളമുള്ള ജാവാസ്ക്രിപ്റ്റ് യാത്ര**
+- [ ] ഡ്രാഗ്-അൻഡ്-ഡ്രോപ്പ് ഫങ്ഷനാലിറ്റിയടങ്ങിയ ഇന്ററാക്ടീവ് ടെറീരിയം പ്രോജക്ട് പൂർണ്ണമാക്കുക
+- [ ] കാര്യക്ഷമ ഇവന്റ് ഹാൻഡ്ലിങ്ങിന് ഇവന്റ് ഡെലിഗേഷൻ അഭ്യസിക്കുക
+- [ ] ഇവന്റ് ലൂപ്പും അസിങ്ക്രോണസ് ജാവാസ്ക്രിപ്റ്റും പഠിക്കുക
+- [ ] പ്രൈവറ്റ് സ്റ്റേറ്റ് ഉള്ള മൊഡ്യൂളുകൾ ഉണ്ടാക്കി ക്ലോഷറുകൾ അഭ്യസിക്കുക
+- [ ] Intersection Observer പോലുള്ള ആധുനിക DOM APIs വിനിയോഗിക്കുക
+- [ ] ഫ്രെയിംവർക്ക് ഉപയോഗിക്കാതെ ഇന്ററാക്ടീവ് കോംപൊനന്റ് നിർമ്മിക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസം നീളമുള്ള ജാവാസ്ക്രിപ്റ്റ് മാസ്റ്ററി**
+- [ ] വാനിഷ്യൽ ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് സങ്കീർണ്ണമായ സിംഗിൾ-പേജ് ആപ്ലിക്കേഷൻ സൃഷ്ടിക്കുക
+- [ ] ആധുനിക ഫ്രെയിംവർക്ക് (React, Vue, Angular) പഠിച്ച് വാനിഷ്യൽ DOM-നോട് താരതമ്യം ചെയ്യുക
+- [ ] ഓപ്പൺ സോഴ്സ് ജാവാസ്ക്രിപ്റ്റ് പ്രോജക്ടുകളിൽ പങ്ക് വഹിക്കുക
+- [ ] വെബ് കോംപൊനന്റ്സ്, കസ്റ്റം എലമെന്റുകൾ പോലുള്ള പുരോഗമന ആശയങ്ങളിൽ നിപുണത നേടുക
+- [ ] നല്ല പ്രകടനമുള്ള വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുക, ഒപ്റ്റിമൽ DOM പാറ്റേണുകൾ ഉപയോഗിച്ച്
+- [ ] DOM മാനിപ്പുലേഷനും ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങളും മറ്റുള്ളവരിലേക്ക് പഠിപ്പിക്കുക
+
+## 🎯 നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് DOM മാസ്റ്ററി സമയംരേഖ
+
+```mermaid
+timeline
+ title DOM & ജാവാസ്ക്രിപ്റ്റ് പഠന പുരോഗതി
+
+ section അടിസ്ഥാനഭരണം (15 മിനിറ്റ്)
+ DOM മനസ്സിലാക്കല്: ഘടക തിരഞ്ഞെടുപ്പ് രീതി
+ : ട്രീ ഘടന വഴിയാഴ്ച
+ : പ്രോസ്ടേർട്ടി ആക്സസ് പാറ്റേണുകൾ
+
+ section ഇവന്റ് കൈകാര്യം (20 മിനിറ്റ്)
+ ഉപയോക്തൃ ഇടപെടല്: പോയിന്റർ ഇവന്റ് അടിസ്ഥാനങ്ങള്
+ : ഇവന്റ് ലിസണർ ക്രമീകരണം
+ : ക്രോസ്-ഡിവൈസ് അനുയോജ്യത
+ : ഇവന്റ് തടയൽ സാങ്കേതികവിദ്യകൾ
+
+ section ക്ലോഷറുകൾ (25 മിനിറ്റ്)
+ സ്കോപ്പ് മാനേജ്മെന്റ്: സ്വകാര്യ വ്യത്യാസം സൃഷ്ടി
+ : ഫങ്ഷൻ സ്ഥിരത
+ : സ്റ്റേറ്റ്മാനേജ്മെന്റ് പാറ്റേണുകൾ
+ : മെമ്മറി കാര്യക്ഷമത
+
+ section ഡ്രാഗ് സിസ്റ്റം (30 മിനിറ്റ്)
+ ഇന്ററാക്ടീവ് ഫീച്ചറുകൾ: കോഓർഡിനേറ്റ് ട്രാക്കിംഗ്
+ : സ്ഥാനം കണക്കാക്കൽ
+ : ചലനം ഗണിതം
+ : ക്ലീൻഅപ്പ് നടപടികൾ
+
+ section മെച്ചപ്പെട്ട പാറ്റേണുകൾ (45 മിനിറ്റ്)
+ പ്രൊഫഷണൽ നൈപുണ്യങ്ങൾ: ഇവന്റ് ഡെലിഗേഷൻ
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+ : പിഴവ് കൈകാര്യം
+ : ആക്സസിബിലിറ്റി പരിഗണനകൾ
+
+ section ഫ്രെയിംവർക്ക് മനസ്സിലാക്കല് (1 ആഴ്ച)
+ ആധുനിക ഡെവലപ്പ്മെന്റ്: വെർച്വൽ DOM ആശയങ്ങൾ
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ് ലൈബ്രറികൾ
+ : കമ്പോണന്റ് ആർക്കിടെക്ചറുകൾ
+ : ബിൽഡ് ടൂൾ ഇന്റഗ്രേഷൻ
+
+ section വിദഗ്ധ ലെവൽ (1 മാസം)
+ പുരോഗമിക്കുന്ന DOM APIകൾ: ഇന്റര്സെക്ഷൻ ഒബ്ജർവർ
+ : മ്യൂട്ടേഷൻ ഒബ്ജർവർ
+ : കസ്റ്റം എലമെന്റുകൾ
+ : വെബ് കമ്പോണന്റുകൾ
+```
+### 🛠️ നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ടൂള്കിറ്റ് സംഗ്രഹം
+
+ഈ പാഠം പൂര്ത്തിയാക്കിയതിനുശേഷം, നിങ്ങള്ക്ക് ഉള്ളത്:
+- **DOM മാസ്റ്ററി**: എലമെന്റ് തിരഞ്ഞെടുപ്പ്, സannen്ധത മാനിപ്പുലേഷൻ, ട്രീ നാവിഗേഷന്
+- **ഇവന്റ് നിപുണത**: Pointer events ഉപയോഗിച്ച് ക്രോസ്-ഡിവൈസ് ഇന്ററാക്ഷൻ കൈകാര്യം ചെയ്യല്
+- **ക്ലോഷർ മനസ്സിലാക്കല്**: സ്വകാര്യ സ്റ്റേറ്റ് മാനേജ്മെന്റ്, ഫങ്ഷൻ സ്ഥിരത
+- **ഇന്ററാക്ടീവ് സിസ്റ്റങ്ങൾ**: ഡ്രാഗ്-അൻഡ്-ഡ്രോപ്പ് പൂർണ്ണ നടപ്പിലാക്കൽ
+- **പ്രകടന ബോധ്യം**: ശരിയായ ഇവന്റ് ക്ലീൻഅപ്പ്, മെമ്മറി മാനേജ്മെന്റ്
+- **ആധുനിക പാറ്റേണുകൾ**: പ്രഫഷണൽ ഡെവലപ്പ്മെന്റിലെ കോഡ് സംഘടി
+- **ഉപയോക്തൃ അനുഭവം**: മനസിലാക്കാവുന്ന, പ്രതികരണശീലമുള്ള ഇന്റർഫേസുകൾ
+
+**പ്രഫഷണൽ കഴിവുകൾ നേടിയതിലൊടു:**
+- **ട്രെല്ലോ/കാൻബാൻ ബോർഡുകൾ**: കാർഡ് ഡ്രാഗ് കോളങ്ങൾക്കിടയിൽ
+- **ഫയൽ അപ്ലോഡ് സിസ്റ്റങ്ങൾ**: ഡ്രാഗ്-അൻഡ്-ഡ്രോപ്പ് ഫയൽ കൈകാര്യം ചെയ്യൽ
+- **ഇമേജ് ഗ്യാലറികൾ**: ഫോട്ടോ ക്രമീകരണ ഇന്റർഫേസുകൾ
+- **മൊബൈൽ ആപ്ലിക്കേഷനുകൾ**: ടച്ച് അടിസ്ഥാന ഇന്ററാക്ഷൻ പാറ്റേണുകൾ
+
+**അടുത്ത പടി**: ഈ അടിസ്ഥാന DOM മാനിപ്പുലേഷൻ ആശയങ്ങളുടെ മുകളിൽ നിർമ്മിച്ച ആധുനിക ഫ്രെയിംവർക്കുകൾ (React, Vue, Angular) പഠിക്കാൻ തയാറാണ്!
+
+## അസൈൻമെന്റ്
+
+[DOM-ഇൽ കുറച്ച് കൂടുതൽ പ്രവർത്തിക്കുക](assignment.md)
+
+---
+
+
+**വാർത്താക്കുറിപ്പ്**:
+ഈ രേഖ AI പരിഭാഷ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. തോറ്റകൾ ഒഴിവാക്കാൻ ശ്രമിക്കുന്നതിനുശേഷമാണ് എങ്കിലും, ഓട്ടോമാറ്റഡ് പരിഭാഷകളിൽ പിഴവുകൾ ഉണ്ടാകാമെന്നത് ദയവായി ഉൾക്കൊള്ളുക. അതിന്റെ മാതൃഭാഷയിലുള്ള ഒറിജിനൽ രേഖയാണ് അധികാരമുള്ള സ്രോതസ്സെന്ന നിലയിൽ പരിഗണിക്കപ്പെടേണ്ടത്. നിർണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷയുടെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകാവുന്ന തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/3-terrarium/3-intro-to-DOM-and-closures/assignment.md b/translations/ml/3-terrarium/3-intro-to-DOM-and-closures/assignment.md
new file mode 100644
index 000000000..77a87f3dd
--- /dev/null
+++ b/translations/ml/3-terrarium/3-intro-to-DOM-and-closures/assignment.md
@@ -0,0 +1,139 @@
+
+# DOM ഘടക അന്വേഷണ അസൈൻമെന്റ്
+
+## അവലോകനം
+
+DOM മാനിപ്പുലേഷന്റെ ശക്തിയെ നേരിട്ട് അനുഭവിച്ചശേഷം, DOM ഇന്റർഫേസുകളുടെ വ്യാപക ലോകം പരിശോധിക്കുന്ന സമയമായിരിക്കുന്നു. ഈ അസൈൻമെന്റ് നിങ്ങളുടെ അറിവ് DOM ഉപയോഗിച്ചുള്ള വ്യത്യസ്ത വെബ് സാങ്കേതികവിദ്യകൾ എങ്ങനെ സംവദിക്കുന്നുവെന്നതിൽ കൂടുതൽ ഗൗരവമാർന്നിരിക്കാൻ സഹായിക്കും, സ്രഷ്ടികൾഗന്ഥങ്ങൾ മാത്രം വലിപ്പിക്കുന്നതിനു മുകളിലാണ്.
+
+## പഠന ലക്ഷ്യങ്ങൾ
+
+ഈ അസൈൻമെന്റ് പൂർത്തിയാക്കിയാൽ നിങ്ങൾ:
+- ഒരു പ്രത്യേക DOM ഇന്റർഫേസ് ആഴത്തില് **പരിശോധിക്കുകയും** മനസിലാക്കുകയും ചെയ്യും
+- DOM മാനിപ്പുലേഷനിലെ യാഥാർത്ഥ്യപ്രകാരം **വിശ്ളേഷണം** ചെയ്യും
+- സിദ്ധാന്തപരമായ ആശയങ്ങളെ ഉപയോഗപരമായ പ്രയോഗങ്ങളുമായി **ബന്ധപ്പെടുത്തും**
+- സാങ്കേതിക പ്രമാണീകരണത്തിലും വിശ്ളേഷണത്തിലും **അഭ്യാസം** വളർത്തും
+
+## നിർദ്ദേശങ്ങൾ
+
+### പടി 1: നിങ്ങളുടെ DOM ഇന്റർഫേസ് തിരഞ്ഞെടുക്കുക
+
+MDN ന്റെ സമഗ്രമായ [DOM ഇന്റർഫേസുകളുടെ പട്ടിക](https://developer.mozilla.org/docs/Web/API/Document_Object_Model) സന്ദർശിച്ച് നിങ്ങൾക്ക് താല്പര്യമുള്ള ഒരു ഇന്റർഫേസ് തിരഞ്ഞെടുക്കുക. വൈവിധ്യമാർന്നതിനു താഴെകാഴ്ചവച്ച വിഭാഗങ്ങളിൽ നിന്ന് തിരഞ്ഞെടുക്കാം:
+
+**ആരംഭക സൗഹൃദ ഓപ്ഷനുകൾ:**
+- `Element.classList` - ഡൈനാമിക് CSS ക്ലാസുകൾ മാനേജുചെയ്യൽ
+- `Document.querySelector()` - പരിചയക്കാരനായ ഓબ્જക്ട് തിരയൽ
+- `Element.addEventListener()` - പൊയിന്റർ ഇവന്റുകൾ മുകളില് ഇവന്റ് കൈകാര്യം ചെയ്യൽ
+- `Window.localStorage` - ക്ലയന്റ്-സൈഡ് ഡേറ്റാ സൂക്ഷിക്കൽ
+
+**ഇടവഴിയുള്ള സവാലുകൾ:**
+- `Intersection Observer API` - ഘടക ദൃശ്യത തിരിച്ചറിയൽ
+- `MutationObserver` - DOM മാറ്റങ്ങൾ നിരീക്ഷിക്കൽ
+- `Drag and Drop API` - നമുടെ പൊയിന്റർ അടിസ്ഥാനത്തിലുള്ള സമീപനത്തിന് ബദലായി
+- `Geolocation API` - ഉപയോക്തൃ സ്ഥലം പ്രാപ്തമാക്കൽ
+
+**മുന്നോട്ട പരിശോധന:**
+- `Web Components` - കസ്റ്റം ഘടകങ്ങളും ഷാഡോ DOM ഉം
+- `Canvas API` - പ്രോഗ്രാമാറ്റിക് ഗ്രാഫിക്സ്
+- `Web Workers` - പിറകിലെ പ്രോസസ്സിംഗ്
+- `Service Workers` - ഓഫ്ലൈൻ സവിശേഷതകൾ
+
+### പടി 2: ഗവേഷണവും ഡോക്യുമെന്റേഷനും
+
+300-500 വാക്കുകളിൽ സമഗ്രമായ വിശ്ളേഷണം സൃഷ്ടിക്കുക, ഇതിൽ ഉൾപ്പെടുത്തുക:
+
+#### സാങ്കേതിക അവലോകനം
+- നിങ്ങളുടെ തിരഞ്ഞെടുക്കുന്ന ഇന്റർഫേസ് എന്താണ് ചെയ്യുന്നത്, ആരംഭക്കാർക്ക് എളുപ്പമുള്ള ഭാഷയിൽ **വर्णിക്കുക**
+- അത് നൽകുന്ന പ്രധാന മെത്തഡുകൾ, പ്രോപ്പർട്ടികൾ, ഇവന്റ്സ് **വിവർത്തനം ചെയ്യുക**
+- ഇതിന്റെ ഉപയോഗം ലക്ഷ്യമാക്കുന്ന പ്രശ്നങ്ങളൊക്കെ **വിവരണം ചെയ്യുക**
+
+#### യാഥാർത്ഥ്യപ്രഞ്ജലം നടപ്പിലാക്കൽ
+- നിങ്ങളുടെ ഇന്റർഫേസ് ഉപയോഗിക്കുന്ന ഒരു വെബ്സൈറ്റ് **കണ്ടുപിടിക്കുക** (കോഡ് പരിശോധിക്കോ ഉദാഹരണങ്ങൾ അന്വേഷിക്കോ ചെയ്യുക)
+- **കോഡ് ഉദാഹരണങ്ങളോടെ** പ്രത്യേക നടപ്പിലാക്കൽ രേഖപ്പെടുത്തുക
+- ഡെവലപ്പർമാർ ഈ സമീപനം തിരഞ്ഞെടുത്തത് എന്തുകൊണ്ടെന്ന് **വിശ്ളേഷിക്കുക**
+- ഇത് ഉപയോക്തൃ പരിചയത്തെ എങ്ങനെ മെച്ചപ്പെടുത്തുന്നു എന്ന് **വിവരണം ചെയ്യുക**
+
+#### പ്രായോഗിക പ്രയോഗം
+- നമ്മുടെയോളുള്ള ടെരാറിയം പ്രോജക്റ്റിൽ ഉപയോഗിച്ച സാങ്കേതിക വിദ്യകളുമായി നിങ്ങളുടെ ഇന്റർഫേസിനെ **തുലന ചെയ്യുക**
+- നിങ്ങളുടെ ഇന്റർഫേസ് ടെരാറിയം പ്രവർത്തനങ്ങൾ എങ്ങനെ മെച്ചപ്പെടുത്താം എന്നും **സൂചന നൽകുക**
+- ഈ ഇന്റർഫേസ് മറ്റ് ഏത് പ്രോജക്റ്റുകൾക്ക് ഗുണപ്രദമാകുമെന്ന് **അങ്ങനെ തിരിച്ചറിയുക**
+
+### പടി 3: കോഡ് ഉദാഹരണം
+
+നിങ്ങളുടെ ഇന്റർഫേസ് പ്രവർത്തനത്തിൽ കാണിക്കുന്ന ലളിതവും പ്രവർത്തനക്ഷമവുമായ കോഡ് ഉദാഹരണം ഉൾപ്പെടുത്തുക. ഇത്:
+- **പ്രവർത്തനക്ഷമമായിരിക്കണം** - ടെസ്റ്റ് ചെയ്തപ്പോൾ ശരിയായി പ്രവർത്തിക്കണം
+- **വിവരസംയുക്തമായിരിക്കണം** - ഓരോ ഭാഗവും എന്താണെന്നും വിശദീകരിച്ചിരിക്കണം
+- **പ്രസക്തമായിരിക്കണം** - യാഥാർത്ഥ്യസന്നദ്ധമായ ഉപയോഗത്തിനൊപ്പം ബന്ധിപ്പിച്ചിരിക്കണം
+- **ആരംഭക സൗഹൃദമായിരിക്കണം** - വെബ് ഡെവലപ്മെന്റ് പഠിക്കുന്നവർക്കായി മനസ്സിലാക്കാവുന്നതായിരിക്കണം
+
+## സമർപ്പണ ഫോർമാറ്റ്
+
+നിങ്ങളുടെ സമർപ്പണം വ്യക്തമായ തലക്കെട്ടുകളിൽ ഘടിപ്പിക്കുക:
+
+```markdown
+# [Interface Name] DOM Investigation
+
+## What It Does
+[Technical overview]
+
+## Real-World Example
+[Website analysis and implementation details]
+
+## Code Demonstration
+[Your working example with comments]
+
+## Reflection
+[How this connects to our terrarium project and future applications]
+```
+
+## വിലയിരുത്തൽ ക്രമരഹിതം
+
+| മാനദണ്ഡം | പ്രതിഭാസപരമായ (A) | പ്രാവিণ്യം (B) | വികസനഘട്ടം (C) | മെച്ചപ്പെടുത്തൽ ആവശ്യം (D) |
+|----------|------------------|--------------|---------------|--------------------------|
+| **സാങ്കേതിക ബോധനം** | ശരിയായ വ്യാഖ്യാനങ്ങൾ കൂടിയ ആഴത്തിലുള്ള മനസ്സിലാക്കൽ | ശരിയായ വിശദീകരണങ്ങളോടെ നല്ല ബോധനം | അടിസ്ഥാനബോധം ചില തെറ്റുകളും ഉൾക്കൊള്ളുന്നു | പെരുമാറ്റത്തിലെ വലിയ പിഴവുകൾ സഹിതം പരിമിതമായ ബോധനം |
+| **യാഥാർത്ഥ്യപരിശോധന** | സാങ്കേതിക നടപ്പിലാക്കൽ വ്യക്തമായ ഉദാഹരണങ്ങളോടെ വിശദമായി വിശ്ളേഷണം | യഥാർത്ഥ ഉദാഹരണമുണ്ടെങ്കിലും വിശ്ളേഷണം മിതമായത് | ഉദാഹരണം കാണിച്ചെങ്കിലും വിശ്ളേഷണത്തിൽ അപര്യാപ്തി | യാതൊരു വ്യക്തമായ ബന്ധവുമില്ല അകമന്ത്രി എന്തെങ്കിലും തെറ്റായ വിവരങ്ങൾ |
+| **കോഡ് ഉദാഹരണം** | പ്രവർത്തിക്കുന്ന, വിശദീകരണങ്ങൾ ചേർന്ന കോഡ് | പ്രവർത്തനക്ഷമമായി രേഖപ്പെടുത്തിയ കോഡ് | കോഡ് പ്രവർത്തിക്കുന്നു പക്ഷേ പരമാണ**)(&സമയം കുറവാണ് | കോഡിൽ പിശകുകൾ അല്ലെങ്കിൽ പോരായ്മകൾ |
+| **എഴുത്തിന്റെ ഗുണനിലവാരം** | വ്യക്തമായ, ആകർഷകമായ രചന, സാങ്കേതിക രേഖപത്രണം ശരിയായി | നന്നായി ക്രമീകരിച്ച സാങ്കേതിക എഴുത്ത് | ശരാശരി ക്രമീകരണം, വ്യക്തത മിതമാണ് | ക്രമീകരണം ദുർബലമാണ്, ആശയവിനിമയം अस्पष्टമാണ് |
+| **തർക്കാസ്പദ ചിന്തന** | ആശയങ്ങൾക്കിടയിൽ താക്ത്വപരമായ ബന്ധങ്ങളും സൃഷ്ടിപരമായ പ്രയോഗ നിർദ്ദേശങ്ങളും | നല്ല വിശ്ളേഷണചിന്തനവും ബന്ധപ്പെട്ട കാരണങ്ങൾ | കുറച്ചുകൂടി വിശകലനം ഉണ്ടായെങ്കിലും കൂടുതൽ ആഴമാകും | പരിമിതമായ സമഗ്രചിന്തന തെളിവ് |
+
+## വിജയത്തിനുള്ള നിർദേശങ്ങൾ
+
+**ഗവേഷണ തന്ത്രങ്ങൾ:**
+- പ്രാമാണികതയ്ക്കായി MDN പ്രമാണങ്ങൾ **ആരംഭിക്കുക**
+- GitHub അല്ലെങ്കിൽ CodePen-ൽ കോഡ് ഉദാഹരണങ്ങൾ **വേട്ടയാടി കണ്ടെത്തുക**
+- പ്രചാരമുള്ള വെബ്സൈറ്റുകൾ ബ്രൗസർ ഡെവലപ്പർ ടൂളുകൾ ഉപയോഗിച്ച് പരിശോധിക്കുക
+- ദൃശ്യ വിശദീകരണങ്ങൾക്ക് ട്യൂട്ടോറിയൽ വീഡിയോകൾ **നോട്ടം വെക്കുക**
+
+**എഴുത്തുദ്ദേശങ്ങൾ:**
+- ഡോക്യുമെന്റേഷൻ പകര്ത്താതെ നിങ്ങളുടെ സ്വന്തം വാക്കുകൾ **ഉപയോഗിക്കുക**
+- വ്യക്തമായ ഉദാഹരണങ്ങളും കോഡ് സെപ്പറ്റുകളും ഉൾക്കൊള്ളിക്കുക
+- സാങ്കേതിക ആശയങ്ങൾ സുഹൃത്തിനൊപ്പം പങ്കുവെക്കുന്നത് പോലെ **വിവരണം ചെയ്യുക**
+- നിങ്ങളുടെ ഇന്റർഫേസിനെ വിപുലമായ വെബ് ഡെവലപ്പ്മെന്റ് ആശയങ്ങളുമായി **ബന്ധിപ്പിക്കുക**
+
+**കോഡ് ഉദാഹരണ ആശയങ്ങൾ:**
+- ഇന്റർഫേസിന്റെ പ്രധാന സവിശേഷതകൾ പ്രദർശിപ്പിക്കുന്ന ലളിതമായ ഡെമോ **സൃഷ്ടിക്കുക**
+- രണ്ടു ചിന്തകൾ മുതൽ നമ്മുടെ ടെരാറിയം പ്രോജക്റ്റിൽ നിന്നുള്ള ആശയങ്ങളെ കണ്ടെത്തുക
+- ദൃശ്യ രൂപകൽപ്പനയേക്കാൾ പ്രവർത്തനക്ഷമതയിൽ **കേന്ദ്രപ്പെടുത്തുക**
+- കോഡ് ശരിയായി പ്രവർത്തിക്കുന്നതായി ഉറപ്പാക്കാൻ **പരീക്ഷണങ്ങൾ നടത്തുക**
+
+## സമർപ്പണ അവസാനം
+
+[ഇവിടെ അവസാന തീയതി ചേർക്കുക]
+
+## ചോദ്യങ്ങൾ?
+
+ഈ അസൈൻമെന്റിന്റെ ഏതെങ്കിലും വശത്തെക്കുറിച്ച് കൂടുതൽ വ്യക്തത ആവശ്യമുണ്ടെങ്കിൽ, അഹംകാരം ഇല്ലാതെ ചോദിക്കുക! DOM എങ്ങനെ നമ്മുടെ ദിവസേന ഉപയോഗിക്കുന്ന സംവേദനാത്മക വെബ് അനുഭവങ്ങളെ സാധ്യമാക്കുന്നുവെന്ന് ഈ അന്വേഷണം നിങ്ങളുടെ അറിവ് കൂടുതൽ ഗൗരവമുള്ളതാക്കും.
+
+---
+
+
+**നിര്ദ്ദേശം**:
+ഈ ഡോക്യുമെന്റ് എഐ പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവര്ത്തനം ചെയ്തതാണ്. നാം കൃത്യതയിലേക്ക് ശ്രമിക്കുന്നുവെങ്കിലും, ഓട്ടോമേറ്റഡ് വിവര്ത്തനങ്ങളില് പിഴവുകള് അല്ലെങ്കില് അകമ്മതകള് ഉണ്ടാകാന് സാധ്യതയുള്ളതായി ദയവായി ശ്രദ്ധിക്കൂ. എഴുത്തിന്റെ മാതൃഭാഷയില് ഉള്ള ഉടനീളം ദസ്താവേജാണ് അധികാരം ലഭിക്കുന്ന ഉറവിടമെന്നുവെക്കേണ്ടത്. അത്യാവശ്യമായ വിവരങ്ങള്ക്കായി പ്രൊഫഷണല് മനുഷ്യ വിവര്ത്തനം നിര്ദേശിക്കുന്നു. ഈ വിവര്ത്തനത്തിന്റെ ഉപയോഗത്തില് നിന്നു ഉണ്ടാകാവുന്ന തെറ്റിദ്ധാരണകള്ക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങള്ക്കോ ഞങ്ങള് ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/3-terrarium/README.md b/translations/ml/3-terrarium/README.md
new file mode 100644
index 000000000..6f9c7f7ca
--- /dev/null
+++ b/translations/ml/3-terrarium/README.md
@@ -0,0 +1,30 @@
+
+## നിങ്ങളുടെ ടെറിയാറ്യം വിന്യസിക്കുക
+
+നിങ്ങൾക്ക് **Azure Static Web Apps** ഉപയോഗിച്ച് നിങ്ങളുടെ ടെറിയാറ്യം വെബിലെ വെബ്സൈറ്റായി വിന്യസിക്കാനും പ്രസിദ്ധീകരിക്കാനും കഴിയും.
+
+1. ഈ റപോ ഫോർക്കുചെയ്യുക
+
+2. ഈ ബട്ടൺ അമർത്തുക 👇
+
+[](https://portal.azure.com/#create/Microsoft.StaticApp)
+
+3. നിങ്ങളുടെ ആപ്പ് സൃഷ്ടിക്കാൻ സജ്ജീകരണ വിസാർഡിനെ അനുഗമിക്കുക.
+ - **App root** ആയി `/solution` അല്ലെങ്കിൽ നിങ്ങളുടെ കോഡ്بേസ്ന്റെ റൂട്ട് സെറ്റ് ചെയ്യുക.
+ - ഈ ആപ്പിൽ API ഇല്ല, അതിനാൽ API കോൺഫിഗറേഷൻ ചെയ്യേണ്ടതില്ല.
+ - Azure Static Web Apps നിങ്ങളുടെ ആപ്പ് നിർമ്മിക്കാൻ, പ്രസിദ്ധീകരിക്കാൻ സഹായിക്കുന്ന `.github` ഫോൾഡർ സ്വയം സൃഷ്ടിക്കും.
+
+---
+
+
+**പരാമർശം**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന AI ഭാഷാന്തം സേവനം ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്ക് ശ്രമിക്കുന്നെങ്കിലും, യന്ത്ര വിവർത്തനങ്ങളിൽ പിഴവുകളും അർത്ഥവ്യത്യാസങ്ങളും ഉണ്ടായേക്കാമെന്നതു ശ്രദ്ധിക്കുക. യഥാർത്ഥ സ്ഥിതിചെയ്യുന്ന ഭാഷയിലെ ദസ്താവേജ് കൃത്യമായ ഉറവിടമായി കണക്കാക്കപ്പെടേണ്ടതാണ്. നിരൂപണ വിവരങ്ങൾക്ക് വിദഗ്ധ മനുഷ്യ വിവർത്തനം നിർദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽനിന്ന് ഉണ്ടാക്കുന്ന തെറ്റിദ്ധാരണകൾക്കും അർത്ഥവ്യത്യാസങ്ങൾക്കും біз პასუხદારല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/3-terrarium/solution/README.md b/translations/ml/3-terrarium/solution/README.md
new file mode 100644
index 000000000..e432a87e3
--- /dev/null
+++ b/translations/ml/3-terrarium/solution/README.md
@@ -0,0 +1,41 @@
+
+# എന്റെ ടെറാറിയം: ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് HTML, CSS, DOM മാനിപുലേഷൻ പഠിക്കാനുള്ള ഒരു പ്രോജക്ട് 🌵🌱
+
+ഒരു ചെറിയ ഡ്രാഗ് ആൻഡ് ഡ്രോപ്പ് കോഡ്-ധ്യാനം. ചെറിയ HTML, JS, CSS ഉപയോഗിച്ച്, നിങ്ങൾക്ക് ഒരു വെബ് ഇന്റർഫേസ് നിർമ്മിക്കാൻ, അതിനെ സ്റ്റൈൽ ചെയ്യാൻ, ഒരു ഇന്ററാക്ഷൻ ചേർക്കാൻ കഴിയും.
+
+
+
+## ക്രെഡിറ്റുകൾ
+
+♥️ കൊണ്ട് എഴുതിയത് [Jen Looper](https://www.twitter.com/jenlooper)
+
+CSS വഴി സൃഷ്ടിച്ച ടെറാറിയം Jakub Mandraയുടെ ഗ്ലാസ് ജാർ [codepen](https://codepen.io/Rotarepmi/pen/rjpNZY) ൽ നിന്നുള്ള പ്രചോദനമാണ്.
+
+കലാസൃഷ്ടി Procreate ഉപയോഗിച്ച് [Jen Looper](http://jenlooper.com) കൈവയറ്റു വരച്ചതാണ്.
+
+## നിങ്ങളുടെ ടെറാറിയം ഡിപ്ലോയ് ചെയ്യുക
+
+Azure Static Web Apps ഉപയോഗിച്ച് നിങ്ങളുടെ ടെറാറിയം വെബിൽ ഡിപ്ലോയ് ചെയ്യാം അല്ലെങ്കിൽ പ്രസിദ്ധീകരിക്കാം.
+
+1. ഈ റെപ്പോ ഫോർക്കുചെയ്യുക
+
+2. ഈ ബട്ടൺ ഞെക്കുക
+
+[](https://portal.azure.com/?feature.customportal=false&WT.mc_id=academic-77807-sagibbon#create/Microsoft.StaticApp)
+
+3. നിങ്ങളുടെ ആപ്പ് സൃഷ്ടിക്കുന്ന വിചാരണ പാതികയിലൂടെ നീങ്ങുക. ആപ്പ് റൂട്ട് `/solution` ആകുകയോ അല്ലെങ്കിൽ നിങ്ങളുടെ കോഡ്بേസ് റൂട്ട് ആകുകയോ എന്നതിൽ ഉറപ്പാക്കുക. ഈ ആപ്പിൽ API ഇല്ല, അതു ചേർക്കുന്നതിൽ ആശങ്കപ്പെടേണ്ടതില്ല. നിങ്ങളുടെ ഫോർക്കുചെയ്ത റെപ്പോയിൽ .github ഫോൾഡർ സൃഷ്ടിക്കും, ഇത് Azure Static Web Appsയുടെ ബിൽഡ് സർവീസ് നിങ്ങളുടെ ആപ്പ് പുതിയ URLലിലേക്ക് ബിൽഡ് ചെയ്ത് പ്രസിദ്ധീകരിക്കാൻ സഹായിക്കും.
+
+---
+
+
+**അസ്വീകരണം**:
+ഈ പ്രമാണം AI വിവർത്തന സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്യപ്പെട്ടതാണ്. ഞങ്ങൾ ശരിവെപ്പിന് ശ്രമിക്കുന്നതെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി അറിയുക. മൗലിക പ്രമാണം അതിന്റെ സ്വദേശംഭാഷയിൽ ഔദ്യോഗികമായ സ്രോതസ്സായി കരുതപ്പെടണം. നിർണായക വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ ഉണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റായ ധാരണകൾക്കും അർത്ഥാഘാതങ്ങൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/4-typing-game/README.md b/translations/ml/4-typing-game/README.md
new file mode 100644
index 000000000..fafa7db98
--- /dev/null
+++ b/translations/ml/4-typing-game/README.md
@@ -0,0 +1,290 @@
+
+# ഇവന്റ്-ഡ്രിറെൻ പ്രോഗ്രാമിംഗ് - ടൈപ്പിംഗ് ഗെയിം നിർമ്മിക്കുക
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ടൈപ്പിംഗ് ഗെയിം ഡവലപ്പ്മെന്റ് ജർണൽ
+ section അടിസ്ഥാന ഘടകം
+ ഗെയിം ഘടന ആസൂത്രണം ചെയ്യുക: 3: Student
+ ഉപയോക്തൃ ഇന്റർഫേസ് ഡിസൈൻ ചെയ്യുക: 4: Student
+ HTML ഘടകങ്ങൾ സജ്ജപ്പെടുത്തുക: 4: Student
+ section സവിശേഷതകൾ
+ ഉപയോക്തൃ ഇൻപുട്ട് കൈകാര്യം ചെയ്യുക: 4: Student
+ സമയം മനസിലാക്കുക: 5: Student
+ കൃത്യത കണക്കുകൂട്ടുക: 5: Student
+ section ഫീച്ചറുകൾ
+ കാഴ്ച വശ പ്രതികരണം ചേർക്കുക: 5: Student
+ ഗെയിം ലോഗിക്ക് നടപ്പിലാക്കുക: 5: Student
+ അനുഭവം മിനുക്കുക: 5: Student
+```
+## പരിചയം
+
+എല്ലാ ഡെവലപ്പറും അറിയുന്ന, പക്ഷെ വിരളമായി സംസാരിക്കുന്ന ഒരു കാര്യം ഇതാണ്: വേഗത്തിൽ ടൈപ്പ് ചെയ്യുക ഒരു സൂപ്പർപവർ ആണ്! 🚀 ആശ്രയിക്കു - നിങ്ങളുടെ മസ്തിഷ്കത്തില് നിന്നുള്ള ആശയങ്ങൾ എത്ര വേഗം നിങ്ങളുടെ കോഡ് എഡിറ്ററിൽ എത്തിക്കുന്നത്, അത്രമേൽ നിങ്ങളുടെ സൃഷ്ടിപരമായ ചൈതന്യം ഒഴുകാൻ കഴിയും. ഇത്, നിങ്ങളുടെ ചിന്തകളും സ്ക്രീനുമിടയിലെ നേരിട്ടുള്ള പൈപ്ലൈനായി കണക്കാക്കാം.
+
+```mermaid
+pie title ഗെയിം സവിശേഷതകൾ
+ "അസ്തിത്വത്തിലുള്ള അഭിപ്രായം" : 25
+ "പ്രവർത്തന ട്രാക്കിംഗ്" : 20
+ "ഇന്ററാക്റ്റീവ് UI" : 20
+ "ടൈമർ സിസ്റ്റം" : 15
+ "ഉദ്ധരണി മാനേജുമെന്റ്" : 10
+ "ഫലങ്ങൾ പ്രദർശനം" : 10
+```
+ഈ കഴിവ് മെച്ചപ്പെടുത്താനുള്ള ഏറ്റവും മികച്ച ഒരു മാർഗം അറിയാമോ? നിങ്ങൾ കണക്കാക്കിയത് പോലെ - നാം ഒരു ഗെയിം നിർമ്മിക്കാൻ പോകുന്നു!
+
+```mermaid
+flowchart LR
+ A[പ്ലേയര് ഗെയിം ആരംഭിക്കുന്നു] --> B[യാദൃച്ഛിക ഉദ്ധരണി പ്രദര്ശിപ്പിച്ചു]
+ B --> C[പ്ലേയര് അക്ഷരങ്ങള് ടൈപ്പ് ചെയ്യുന്നു]
+ C --> D{അക്ഷരം ശരിയാണോ?}
+ D -->|Yes| E[പച്ച ഹൈലൈറ്റ്]
+ D -->|No| F[ചുവപ്പ് ഹൈലൈറ്റ്]
+ E --> G[ശുദ്ധിതി അപ്ഡേറ്റ് ചെയ്യുക]
+ F --> G
+ G --> H{ഉദ്ധരണി പൂര്ത്തിയായി താലോ?}
+ H -->|No| C
+ H -->|Yes| I[വേട്ട വേഗം കണക്കാക്കുക]
+ I --> J[ഫലങ്ങള് പ്രദര്ശിപ്പിക്കുക]
+ J --> K[പിന്തുടരണമോ?]
+ K -->|Yes| B
+ K -->|No| L[ഗെയിം അവസാനിച്ചു]
+
+ style A fill:#e1f5fe
+ style D fill:#fff3e0
+ style E fill:#e8f5e8
+ style F fill:#ffebee
+ style I fill:#f3e5f5
+```
+> നല്ലൊരു ടൈപ്പിംഗ് ഗെയിം ഒത്തുചേർക്കാം!
+
+നിങ്ങൾ പഠിച്ച ജാവാസ്ക്രിപ്റ്റ്, HTML, CSS കഴിവുകൾ പ്രയോഗിക്കാൻ തയ്യാറായി? നാം ഒരു ടൈപ്പിംഗ് ഗെയിം നിർമ്മിക്കും, ഇതിൽ പ്രശസ്തമായ അന്വേഷണകാരൻ [ശെർലോക് ഹോംസ്](https://en.wikipedia.org/wiki/Sherlock_Holmes) ന്റെ യാദൃച്ചികമായ ഉദ്ധരണികളാൽ നിങ്ങൾക്ക് വെല്ലുവിളി നൽകും. ഗെയിം നിങ്ങൾ എത്ര വേഗം, എത്ര കൃത്യമായി ടൈപ്പ് ചെയ്യുമ്പോൾ ട്രാക്ക് ചെയ്യും - വിശ്വാസിക്കൂ, ഇത് നിങ്ങൾ കരുതുന്നതിലേക്കാളും കൂടുതലായി ആകര്ഷകമാണ്!
+
+```mermaid
+mindmap
+ root((ടൈപ്പിംഗ് ഗെയിം വികസനം))
+ User Interface
+ Input Elements
+ Visual Feedback
+ Responsive Design
+ Accessibility
+ Game Logic
+ Quote Selection
+ Timer Management
+ Accuracy Tracking
+ Score Calculation
+ Event Handling
+ Keyboard Input
+ Button Clicks
+ Real-time Updates
+ Game State Changes
+ Performance Metrics
+ Words Per Minute
+ Character Accuracy
+ Error Tracking
+ Progress Display
+ User Experience
+ Immediate Feedback
+ Clear Instructions
+ Engaging Content
+ Achievement System
+```
+
+
+## നിങ്ങൾ അറിയേണ്ടതെന്താണ്
+
+```mermaid
+flowchart TD
+ A[ഉപയോക്തൃ നടപടി] --> B{സംഭവ തരം?}
+ B -->|കീയോഡ് അമർത്തൽ| C[കീബോർഡ് സംഭവനം]
+ B -->|ബട്ടൺ ക്ലിക്ക്| D[മൗസ് സമ്പ്രദായം]
+ B -->|ടൈമർ| E[സമയം സംഭവനം]
+
+ C --> F[അക്ഷരം പരിശോധിക്കുക]
+ D --> G[ഗെയിം ആരംഭിക്കുക/പുനഃക്രമീകരിക്കുക]
+ E --> H[ടൈമർ അപ്ഡേറ്റ് ചെയ്യുക]
+
+ F --> I{ശരി ആണോ?}
+ I -->|അതെ| J[ഹരിത നിറത്തിൽ ഹൈലൈറ്റ് ചെയ്യുക]
+ I -->|വേറെ| K[ചുവപ്പ് നിറത്തിൽ ഹൈലൈറ്റ് ചെയ്യുക]
+
+ J --> L[സ്കോർ അപ്ഡേറ്റ് ചെയ്യുക]
+ K --> L
+ L --> M[ഗെയിം സ്ഥിതി പരിശോധിക്കുക]
+
+ G --> N[പുതിയ ഉദ്ധരണി സൃഷ്ടിക്കുക]
+ H --> O[സമയം പ്രദർശിപ്പിക്കുക]
+
+ M --> P{ഗെയിം പൂർത്തിയായോ?}
+ P -->|അതെ| Q[പരിണാമങ്ങൾ കാണിക്കുക]
+ P -->|വേറെ| R[ഗെയിം തുടരുക]
+
+ style A fill:#e1f5fe
+ style F fill:#e8f5e8
+ style I fill:#fff3e0
+ style Q fill:#f3e5f5
+```
+ആരാശ്സ് തുടങ്ങുന്നതിന് മുൻപായി, ഈ ആശയങ്ങളെ പറ്റി ഉറപ്പാക്കൂ (കോർത്തു പായാൻ സമയമുണ്ടെങ്കിൽ വിഷമിക്കേണ്ട, നമ്മല്ല എല്ലാവരും അതിലൂടെയാണ് കടന്നുപോയത്):
+
+- ടെക്സ്റ്റ് ഇൻപുട്ടും ബട്ടൺ നിയന്ത്രണങ്ങളും സൃഷ്ടിക്കൽ
+- CSS ക്ലാസ്സുകളും സ്റ്റെൈലുകൾ ക്രമീകരിക്കൽ
+- ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങൾ
+ - ഒരു ആറെ സൃഷ്ടിക്കൽ
+ - യാദൃച്ചിക സംഖ്യ നിർമ്മിക്കൽ
+ - നിലവിലുള്ള സമയം ലഭ്യമാക്കൽ
+
+ഈ എല്ലാം കുഴപ്പമേയെങ്കിൽ, അവർക്ക് നന്നായി! ചിലപ്പോൾ നിങ്ങളുടെ അറിവ് ഉറപ്പപെടാൻ ഏറ്റവും മികച്ച മാർഗം ഒരു പ്രോജക്ടിൽ ചാടിയും അതിലൂടെ പഠിക്കുന്നതുമാണ്.
+
+### 🔄 **പാഠശാലാ പരിശോധന**
+**അടിസ്ഥാന വിലയിരുത്തൽ**: വികസനം തുടങ്ങുന്നതിന് മുമ്പ്, ഉറപ്പാക്കുക:
+- ✅ HTML ഫോമുകളും ഇൻപുട്ടും എങ്ങനെ പ്രവർത്തിക്കുന്നു
+- ✅ CSS ക്ലാസ്സുകളും സജീവ ശൈലിയും
+- ✅ ജാവാസ്ക്രിപ്റ്റ് ഇവന്റ് ലിസണറുകളും ഹാൻഡ്ലറുകളും
+- ✅ ആറെ മാനിപ്പുലേഷനും യാദൃച്ചിക തിരഞ്ഞെടുപ്പും
+- ✅ സമയം അളക്കും വിധവും കണക്കുകൂട്ടലുകളും
+
+**വേഗം സ്വയംപരിജ്ഞാനം**: ഈ ആശയങ്ങൾ ഒരു ബഹിരാകാശ ഗെയിമിൽ എങ്ങനെ സംയോജിപ്പിച്ചിരിക്കുന്നുവെന്ന് നിങ്ങൾ വിശദീകരിക്കാമോ?
+- **ഇവന്റ്സ്** ഉപയോക്താക്കൾ കൺട്രോളുകളുമായി ഇടപഴകുമ്പോൾ ആകുമാണ്
+- **ഹാൻഡ്ലറുകൾ** ഇവന്റ് പ്രോസസ്സ് ചെയ്ത് ഗെയിം സ്റ്റേറ്റ് അപ്ഡേറ്റ് ചെയ്യും
+- **CSS** ഉപയോക്തൃ പ്രവർത്തനങ്ങൾക്ക് ദൃശ്യ പ്രതികരണം നൽകുന്നു
+- **സമയം** പ്രകടന അളവും ഗെയിം പുരോഗതിക്കും സാധ്യമാക്കുന്നു
+
+```mermaid
+quadrantChart
+ title ടൈപ്പിംഗ് ഗെയിം കഴിവുകൾ വികസനം
+ x-axis തുടക്കക്കാരൻ --> വിദഗ്ധൻ
+ y-axis സ്റ്റാറ്റിക് --> ഇന്ററാക്ടീവ്
+ quadrant-1 പുരോഗമിച്ച ഗെയിമുകൾ
+ quadrant-2 റിയൽ ടൈം ആപ്പുകൾ
+ quadrant-3 അടിസ്ഥാന പേജ്
+ quadrant-4 ഇന്ററാക്ടീവ് സൈറ്റുകൾ
+
+ HTML Forms: [0.3, 0.2]
+ CSS Styling: [0.4, 0.3]
+ Event Handling: [0.7, 0.8]
+ Game Logic: [0.8, 0.9]
+ Performance Tracking: [0.9, 0.7]
+```
+## ഈ കാര്യം നാം നിർമ്മിക്കാം!
+
+[ഇവന്റ് ഡ്രിറെൻ പ്രോഗ്രാമിംഗ് ഉപയോഗിച്ച് ടൈപ്പിംഗ് ഗെയിം സൃഷ്ടിക്കൽ](./typing-game/README.md)
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ ചെയ്യാൻ കഴിയും**
+- [ ] ബ്രൗസറിന്റെ കോൺസോൾ തുറന്ന് `addEventListener` ഉപയോഗിച്ച് കീബോർഡ് ഇവന്റ്സ് കേൾക്കാൻ ശ്രമിക്കുക
+- [ ] ലളിതമായ HTML പേജ് സൃഷ്ടിച്ച് ഇൻപുട്ട് ഫീൽഡ് ഉപയോഗിച്ച് ടൈപ്പിംഗ് തിരിച്ചറിയണം പരീക്ഷിക്കുക
+- [ ] ടൈറ്റായ ടെക്സ്റ്റും ലക്ഷ്യ ടെക്സ്റ്റും താരതമ്യം ചെയ്യുക കൊണ്ട് സ്ട്രിംഗ് മാനിപ്പുലേഷൻ അഭ്യാസം ചെയ്യുക
+- [ ] സമയ ഫങ്ക്ഷനുകൾ മനസ്സിലാക്കാൻ `setTimeout` പരീക്ഷിക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നേടാനാകുന്നത്**
+- [ ] പാഠശേഷി ക്വിസ് പൂർത്തിയാക്കി ഇവന്റ്-ഡ്രിറെൻ പ്രോഗ്രാമിംഗ് മനസ്സിലാക്കുക
+- [ ] വാക്കുകളുടെ സാധുത അടങ്ങിയ ടൈപ്പിംഗ് ഗെയിമിന്റെ അടിസ്ഥാന പതിപ്പ് നിർമ്മിക്കുക
+- [ ] ശരിയായതു തെറ്റായതു ടൈപ്പിങിന് ദൃശ്യ പ്രതികരണം ചേർക്കുക
+- [ ] വേഗതയും കൃത്യതയും അടിസ്ഥാനമാക്കിയുള്ള എളുപ്പമായ സ്കോറിംഗ് സിസ്റ്റം നടപ്പാക്കുക
+- [ ] CSS ഉപയോഗിച്ച് ഗെയിംക്ക് അതൃപ്തികരമായ ശൈലി നൽകുക
+
+### 📅 **നിങ്ങളുടെ വാരാന്ത്യ ഗെയിം ഡെവലപ്പ്മെന്റ്**
+- [ ] മുഴുവൻ ടൈപ്പിംഗ് ഗെയിം എല്ലാ സവിശേഷതകളും ഒരുമച്ച് പൂർത്തിയാക്കുക
+- [ ] വാക്കുകൾക്കുള്ള പവിട്ട കഠിനത ലെവലുകൾ ചേർക്കുക
+- [ ] ഉപയോക്തൃ സ്ഥിതിവിവരങ്ങൾ ട്രാക്കിംഗ് നടപ്പിലാക്കുക (WPM, സമയം ഉണ്ടാകുന്ന കൃത്യത)
+- [ ] മികച്ച ഉപയോക്തൃ അനുഭവത്തിന് ശബ്ദഫലങ്ങളും അനിമേഷനുകളും സൃഷ്ടിക്കുക
+- [ ] മൊബൈൽ സൗഹൃദമായ ഗെയിം നിർമ്മിക്കുക
+- [ ] ഗെയിം ഓൺലൈനിൽ ഷെയർ ചെയ്ത് ഉപയോക്താക്കളുടെ അഭിപ്രായം ശേഖരിക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസാന്ത ഇന്ററാക്ടീവ് ഡെവലപ്പ്മെന്റ്**
+- [ ] വ്യത്യസ്ഥ ഇടപെടൽ മാതൃകകൾ പരീക്ഷിച്ച് ഒട്ടനവധി ഗെയിമുകൾ നിർമ്മിക്കുക
+- [ ] ഗെയിം ലൂപ്പുകളെയും സ്റ്റേറ്റ് മാനേജ്മെന്റും പ്രകടന മെച്ചപ്പെടുത്തലും പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഗെയിം ഡെവലപ്പ്മെൻറ് പ്രോജക്ടുകൾക്കു സംഭാവന ചെയ്യുക
+- [ ] ഉയർന്നനിലയിലെ സമയ ബന്ധിത ആശയങ്ങളും മിതമായ അനിമേഷനുകളും ആസ്പദമാക്കുക
+- [ ] വിവിധ ഇന്ററാക്ടീവ് അപ്ലിക്കേഷനുകൾ പ്രദർശിപ്പിക്കുന്ന പോർട്ട്ഫോളിയോ സൃഷ്ടിക്കുക
+- [ ] ഗെയിം ഡെവലപ്പ്മെന്റിലും ഉപയോക്തൃ ഇടപെടലിലും താൽപ്പര്യമുള്ളവരെ മാർഗ്ഗനിർദേശപ്പെടുത്തി
+
+## 🎯 നിങ്ങളുടെ ടൈപ്പിംഗ് ഗെയിം മാസ്റ്ററി ടൈമ്ലൈൻ
+
+```mermaid
+timeline
+ title ഗെയിം ഡെവലപ്പ്മെന്റ് പഠന മുന്നേറ്റം
+
+ section സജ്ജീകരണം (10 മിനിറ്റുകൾ)
+ Project Structure: HTML അടിസ്ഥാനഘടന
+ : CSS സ്റ്റൈലിംഗ് സജ്ജീകരണം
+ : JavaScript ഫയൽ സൃഷ്ടി
+
+ section ഉപയോക്തൃ ഇന്റർഫേസ് (20 മിനിറ്റുകൾ)
+ Interactive Elements: ഇൻപുട്ട് ഫീൽഡുകൾ
+ : ബട്ടൺ നിയന്ത്രണങ്ങൾ
+ : പ്രദർശന പ്രദേശങ്ങൾ
+ : പ്രതികരണക്ഷമമായ ലേഔട്ട്
+
+ section ഇവന്റ് ഹാൻഡലിംഗ് (25 മിനിറ്റുകൾ)
+ User Interaction: കീബോർഡ് ഇവന്റുകൾ
+ : മൗസ് ഇവന്റുകൾ
+ : യഥാർത്ഥകാല പ്രത്യക്ഷപടി
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+
+ section ഗെയിം ലജിക് (30 മിനിറ്റുകൾ)
+ Core Functionality: ഉദ്ധരണി നിർമ്മാണം
+ : അക്ഷര താരതമ്യം
+ : കൃത്യത കണക്കുകൂട്ടൽ
+ : ടൈമർ നടപ്പാക്കൽ
+
+ section പ്രവർത്തന ട്രാക്കിങ് (35 മിനിറ്റുകൾ)
+ Metrics & Analytics: WPM കണക്കുകൂട്ടൽ
+ : പിഴവ് ട്രാക്കിങ്
+ : പുരോഗതി ദൃശ്യവത്കരണം
+ : ഫലങ്ങൾ പ്രദർശനം
+
+ section പാളിഷ് & വർധിപ്പിക്കൽ (45 മിനിറ്റുകൾ)
+ User Experience: ദൃശ്യപ്രത്യക്ഷപടി
+ : ശബ്ദപരമായ ഫലം
+ : അനിമേഷനുകൾ
+ : ആക്സസിബിലിറ്റി സവിശേഷതകൾ
+
+ section ഉദാത്ത സവിശേഷതകൾ (1 ആഴ്ച)
+ Extended Functionality: ബുദ്ധിമുട്ട് നിലകൾ
+ : ലീഡർബോർഡുകൾ
+ : ഇഷ്ടാനുസൃത ഉദ്ധരണികൾ
+ : മൾട്ടിപ്ലെയർ ഓപ്ഷനുകൾ
+
+ section പ്രൊഫഷണൽ നൈപുണ്യങ്ങൾ (1 മാസം)
+ Game Development: പ്രവർത്തന പാരിപാട്യം മെച്ചപ്പെടുത്തൽ
+ : കോഡ് ആർക്കിടെക്ചർ
+ : പരിശോധന തന്ത്രങ്ങൾ
+ : ഡിപ്ലോയ്മെന്റ് പാറ്റേണുകൾ
+```
+### 🛠️ നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് ടൂൾകിറ്റ് സംക്ഷിപ്തം
+
+ഈ പ്രോജക്ട് പൂർത്തിയായപ്പോൾ, നിങ്ങൾ കൈവരിക്കുന്നതാണ്:
+- **ഇവന്റ്-ഡ്രിറെൻ പ്രോഗ്രാമിംഗ്**: ഇൻപുട്ടിൽ പ്രതികരിക്കുന്ന പ്രതികരണക്ഷമമായ ഉപയോക്തൃ ഇന്റർഫേസുകൾ
+- **റിയൽ-ടൈം ഫീഡ്ബാക്ക്**: തത്സമയ ദൃശ്യവും പ്രകടന അപ്ഡേറ്റുകളും
+- **പ്രകടന അളവ്**: കൃത്യമായ ടൈമിംഗ്, സ്കോറിംഗ് സിസ്റ്റങ്ങൾ
+- **ഗെയിം സ്റ്റേറ്റ് മാനേജ്മെന്റ്**: അപ്പ്ലിക്കേഷൻ ഫ്ലോയും ഉപയോക്തൃ അനുഭവവും നിയന്ത്രിക്കൽ
+- **ഇന്ററാക്ടീവ് ഡിസൈൻ**: ആകർഷകവും ലഹരിമയാണ് ഉപയോക്തൃ അനുഭവങ്ങൾ സൃഷ്ടിക്കൽ
+- **ആധുനിക വെബ് APIകൾ**: സമ്പന്ന ഇടപെടലിനായി ബ്രൗസർ ശേഷികൾ ഉപയോഗിക്കുക
+- **ആക്സസിബിലിറ്റി മാതൃകകൾ**: എല്ലാ ഉപയോക്താക്കൾക്കും ഉൾപ്പെടുത്തുന്ന ഡിസൈൻ
+
+**യഥാർത്ഥ ലോക പ്രയോഗങ്ങൾ**: ഈ കഴിവുകൾ നേരിട്ട് ബാധിക്കുന്നവ:
+- **വെബ് ആപ്ലിക്കേഷനുകൾ**: ഏതൊരു ഇന്ററാക്ടീവ് ഇന്റർഫേസ് അല്ലെങ്കിൽ ഡാഷ്ബോർഡ്
+- **അധ്യാപന സോഫ്റ്റ്വെയർ**: പഠന പ്ലാറ്റ്ഫോമുകളും കഴിവ് വിലയിരുത്തൽ ഉപകരണങ്ങളും
+- **പ്രോഡക്ടിവിറ്റി ഉപകരണങ്ങൾ**: ടെക്സ്റ്റ് എഡിറ്ററുകൾ, ഐ.ഡി.ഇകൾ, സഹകരണമുള്ള സോഫ്ട്വെയർ
+- **ഗെയിം വ്യവസായം**: ബ്രൗസർ ഗെയിമുകളും ഇന്ററാക്ടീവ് വിനോദങ്ങളും
+- **മൊബൈൽ ഡെവലപ്പ്മെന്റ്**: ടച്ച് അടിസ്ഥാനമാക്കിയ ഇന്റർഫേസുകളും ജസ്റ്റർ ഹാൻഡ്ലിംഗും
+
+**അടുത്ത പടി**: ഉയർന്ന ഗെയിം ഫ്രെയിംവർക്കുകൾ, റിയൽ-ടൈം മൾട്ടിപ്ലേയറുകൾ അല്ലെങ്കിൽ സങ്കീർണ്ണ ഇന്ററാക്ടീവ് ആപ്ലിക്കേഷനുകൾ അന്വേഷിക്കാൻ തയ്യാറാണ്!
+
+## ക്രെഡിറ്റ്സ്
+
+♥️ കൂടെ എഴുതിയത് [ക്രിസ്റ്റോഫർ ഹാരിസൺ](http://www.twitter.com/geektrainer)
+
+---
+
+
+**അസ്വീകരണം**:
+ഈ രേഖ AI ഭാഷാന്തര സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം ശരിയായ വിവർത്തനത്തിനായി ശ്രമിക്കുന്നുവെങ്കിലും, യന്ത്ര വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ ദോഷങ്ങൾ ഉണ്ടായിരിക്കാമെന്ന് ദയവായി മനസിലാക്കുക. പ്രാഥമിക ഭാഷയിൽ ഉള്ള യഥാർത്ഥ രേഖയെ അധികാരം ഉള്ള ഉറവിടമായി പരിഗണിക്കേണ്ടതാണ്. അത്യാവശ്യ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മാനവ വിവർത്തനം ശുപാർശ ചെയ്യുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതെന്തെങ്കിലും തെറ്റിദ്ധാരണകൾക്കും തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/4-typing-game/solution/README.md b/translations/ml/4-typing-game/solution/README.md
new file mode 100644
index 000000000..888b661b2
--- /dev/null
+++ b/translations/ml/4-typing-game/solution/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡറാണ്, അഭിരുചികരമായി ഒഴിവാക്കിയിട്ടുണ്ട്
+
+---
+
+
+**തള്ളിപ്പറയൽ**:
+ഈ ഡോക്യുമെന്റ് AI വിവർത്തന സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നമുക്ക് കൃത്യത ലക്ഷ്യമിടলেও, സ്വയം നടത്തപ്പെടുന്ന വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ അക്രമണകത മാത്രതാല്ലാത്ത അപാകതകൾ ഉണ്ടാകാമെന്ന് മനസ്സിലാക്കുക. പ്രഥമ ഭാഷയിലുള്ള മൗലിക ഡോക്യുമെന്റിനെ അധികാരമുള്ള ഉറവിടമായി പരിഗണിക്കേണ്ടതാണ്. അത്യന്താപേക്ഷിതമായ വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മാനവ വിവർത്തനം നിർദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിന്റെ ഫലമായി ഉണ്ടാവുന്ന എതെങ്കിലും തെറ്റിദ്ധാരണകളോ തെറ്റായ വ്യാഖ്യാനങ്ങളോക്കായി ഞങ്ങൾ നിർവാഹകത്വം ഏറ്റെടുക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/4-typing-game/typing-game/README.md b/translations/ml/4-typing-game/typing-game/README.md
new file mode 100644
index 000000000..3dd16f995
--- /dev/null
+++ b/translations/ml/4-typing-game/typing-game/README.md
@@ -0,0 +1,612 @@
+
+# ഇവന്റുകൾ ഉപയോഗിച്ച് ഒരു ഗെയിം സൃഷ്ടിക്കൽ
+
+നിങ്ങൾ ബട്ടൺ ക്ലിക്ക് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ ടെക്സ്റ്റ് ബോക്സിൽ ടൈപ്പ് ചെയ്യുമ്പോൾ വെബ്സൈറ്റുകൾ എങ്ങനെ അറിയുന്നു എന്ന് ഒരിക്കൽ നിങ്ങൾക്ക് വിചാരിച്ചിട്ടുണ്ടോ? അതാണ് ഇവന്റ് ഡ്രിവൻ പ്രോഗ്രാമിങ്ങിന്റെ മായാജാലം! നിങ്ങൾ ചെയ്യുന്ന ഓരോ കീസ്റ്റ്രോക്കും പ്രതികരിക്കുന്ന ഒരു ടൈപ്പിംഗ് വേഗം ഗെയിം നിർമ്മിച്ച് ഈ അടിസ്ഥാന കഴിവ് നേടുന്നതിന് ഇതു വർഗ്ഗം മികച്ച രീതിയാണ്.
+
+വെബ് ബ്രൗസറുകൾ നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് കോഡുമായി എങ്ങനെ "സംസരിക്കുന്നു" എന്ന് നിങ്ങൾ നേരിട്ട് കാണുകയും ചെയ്യും. നിങ്ങൾ ക്ലിക്ക് ചെയ്യുമ്പോഴും, ടൈപ്പ് ചെയ്യുമ്പോഴും, മൗസ് നീക്കുമ്പോഴും, ബ്രൗസർ ചെറു സന്ദേശങ്ങൾ (ഇവരെ ഇവന്റുകൾ എന്ന് വിളിക്കുന്നു) നിങ്ങളുടെ കോഡിലേക്ക് അയയ്ക്കുന്നു, നിങ്ങൾ മറുപടി എങ്ങനെ നൽകണമെന്ന് തീരുമാനിക്കാം!
+
+നാം ഇവിടെ വായിക്കുന്നത് കൊണ്ട് നിങ്ങൾ ഒരു യാഥാർത്ഥ്യ ടൈപ്പിംഗ് ഗെയിം നിർമ്മിച്ചിരിക്കും, അത് നിങ്ങളുടെ വേഗതയും കൃത്യതയും ട്രാക്ക് ചെയ്യുന്നു. അതിലും പ്രധാനമായി, നിങ്ങൾ ഇവന്റ് ഡ്രിവൻ വെബ്സൈറ്റുകളുടെ അടിസ്ഥാന ആശയങ്ങൾ മനസ്സിലാക്കും. തുടങ്ങാം!
+
+## ഉപദേശം മുൻകൂട്ടി ചോദ്യോത്തരങ്ങൾ
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/21)
+
+## ഇവന്റ് ഡ്രിവൻ പ്രോഗ്രാമിങ്ങ്
+
+നിങ്ങളുടെ പ്രിയപ്പെട്ട ആപ്പ് അല്ലെങ്കിൽ വെബ്സൈറ്റ് - അത് എങ്ങനെ ജീവിക്കുന്നതും പ്രതികരണ ശേഷിയുള്ളതും ആണ് എന്നു നിങ്ങൾക്ക് തോന്നിക്കേണ്ടത് എന്താണെന്ന് ചിന്തിക്കൂ? നിങ്ങൾ ചെയ്യുന്നതിന് എങ്ങനെ അതു പ്രതികരിക്കുന്നു എന്നതാണ് കാര്യം! ഓരോ ട്യാപ്, ക്ലിക്ക്, സ്വൈപ്പ്, അല്ലെങ്കിൽ കീസ്റ്റ്രോക്കും നമ്മൾ "ഇവന്റ്" എന്ന് വിളിക്കുന്നതും സൃഷ്ടിക്കുന്നു, അതാണ് വെബ് ഡെവലപ്പ്മെന്റിന്റെ യഥാർത്ഥ മായാജാലം.
+
+വെബിനുള്ള പ്രോഗ്രാമിങ്ങ് ഭേദമാക്കുന്നത് ഇതാണ്: ആരോ ആ ബട്ടൺ ക്ലിക്ക് ചെയ്യുമോ അല്ലെങ്കിൽ ടെക്സ്റ്റ് ബോക്സിൽ ടൈപ്പ് തുടങ്ങുമോ എന്ന് നമുക്ക് ഒരിക്കലും അറിയില്ല. അവർ ഉടനെ ക്ലിക്ക് ആകാം, അഞ്ചു മിനിറ്റ് കാത്തിരിക്കാം, ആദ്യങ്ങൾ എക്കാലവും ക്ലിക്ക് എവിടെയുമാകുമെന്നും! ഈ അനിശ്ചിതത്വം കൊണ്ട് നമ്മൾ നമ്മുടെ കോഡ് എഴുതുന്നത് വ്യത്യസ്ഥമായി ആലോചിക്കേണ്ടിവരും.
+
+മുകളിൽ നിന്ന് താഴേക്ക് ഒരു രെസിപ്പി പോലെ ഓടുന്ന കോഡ് എഴുതുന്നത് പകരം, എന്തെങ്കിലും സംഭവിക്കാന് കാത്തിരിക്കുoതുകൊണ്ട് നിശ്ചലമായി നില്ക്കുന്ന കോഡ് എഴുതുന്നു. 1800 കളിൽ ടെലഗ്രാഫ് ഓപ്പറേറ്റർമാർ അവരുടെ മെഷീനുകളുടെ സമീപം ഇരുന്ന് സന്ദേശം കേബിളിലൂടെ വന്നവട്ടം പ്രതികരിക്കാൻ തയ്യാറായി നിന്നതുപോലെ.
+
+അതിനാൽ "ഇവന്റ്" എന്ന് കൃത്യമായി എന്താണ്? അതത് സംഭവിക്കുന്ന ഒന്നാണ്! നിങ്ങൾ ഒരു ബട്ടൺ ക്ലിക്ക് ചെയ്താൽ - അത് ഒരു ഇവന്റ് ആണ്. നിങ്ങൾ ഒരു അക്ഷരം ടൈപ്പ് ചെയ്താൽ - അത് ഒരു ഇവന്റ് ആണ്. നിങ്ങൾ മൗസ് നീക്കുമ്പോൾ - അത് മറ്റൊരു ഇവന്റ് ആണ്.
+
+ഇവന്റ് ഡ്രിവൻ പ്രോഗ്രാമിങ്ങ് നമ്മുടെ കോഡ് ലൈസൻ ചെയ്യാനും പ്രതികരിക്കാനും ഒരുക്കി വെക്കാൻ സഹായിക്കുന്നു. നാം **ഇവന്റ് ലിസ്സണറുകൾ** എന്ന പ്രത്യേക ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കുന്നു, ഇവ നിശ്ചിത കാര്യങ്ങൾ സംഭവിക്കാൻ കാത്തിരിക്കുന്നു, സംഭവിക്കുമ്പോൾ പ്രവർത്തനക്ഷമമാകുന്നു.
+
+ഇവന്റ് ലിസ്സണറുകളെ നിങ്ങൾ നിങ്ങളുടെ കോഡിന് വേണ്ടി ദ്വാരക്കണിഞ്ഞു കാത്തിരിക്കുന്ന ഡോർബെൽപോലെ കരുതാം. നിങ്ങൾ ഡോർബെൽ (`addEventListener()`) സെറ്റ് ചെയ്യുന്നു, ഏത് ശബ്ദം കേൾക്കണമെന്ന് (ഉദാ: 'click' അല്ലെങ്കിൽ 'keypress') പറയുന്നു, പിന്നെ ആരെങ്കിലും അത് തട്ടി വിളിച്ചതോടെ എന്ത് സംഭവിക്കുമെന്ന് (നിങ്ങളുടെ ഇഷ്ടാനുസൃത ഫങ്ഷൻ) വ്യക്തമാക്കുന്നു.
+
+**ഇവന്റ് ലിസ്സണറുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു:**
+- **നിശ്ചിത ഉപയോക്തൃ പ്രവർത്തനങ്ങൾ** വഴി കേൾക്കുന്നത്, ഉദാ: ക്ലിക്കുകൾ, കീസ്റ്റ്രോക്കുകൾ, മൗസ് ചലനങ്ങൾ
+- **നിശ്ചിത ഇവന്റ് സംഭവിക്കുമ്പോൾ** നിങ്ങളുടെ ഇഷ്ടാനുസൃത കോഡ് പ്രവർത്തിപ്പിക്കുന്നു
+- **ഉപയോക്തൃ ഇടപെടലുകൾക്ക്** ഉടൻ പ്രതികരിച്ച് സുഗമ അനുഭവം സൃഷ്ടിക്കുന്നു
+- **അതിരായ listener ഉപയോഗിച്ച്** ഒരേ എലമെന്റിൽ നിരവധി ഇവന്റുകൾ കൈകാര്യം ചെയ്യുന്നു
+
+> **കുറിപ്പ്:** ഇവന്റ് ലിസ്സണറുകൾ സൃഷ്ടിക്കാൻ അനേകം മാർഗ്ഗങ്ങൾ ഉണ്ട്. നിങ്ങൾ നാമരഹിത ഫംഗ്ഷനുകളോ, പേരുള്ളവയോ ഉപയോഗിക്കാം. `click` പ്രോപ്പർട്ടി സജ്ജീകരിക്കൽ പോലുള്ള ഷോർട്ട്കട്ടുകൾ ഉപയോഗിക്കാം, അല്ലെങ്കിൽ `addEventListener()` ഉപയോഗിക്കാം. ഈ പരിശീലനത്തിൽ നാം `addEventListener()`യും നാമരഹിത ഫംഗ്ഷനുകളും ഉപയോഗിക്കുകയാണ്, അതാണ് വെബ് ഡെവലപ്പർമാർ സാധാരണയായി ഉപയോഗിക്കുന്ന ഏറ്റവും സാധാരണമായ രീതിയെന്നും ഇത് ഏറ്റവും ലളിതവുമാണ്. `addEventListener()` എല്ലാ ഇവന്റുകൾക്കും പ്രവർത്തിക്കുന്നു, ഇവന്റ് നാമം പാരാമീറ്ററായി നൽകാം.
+
+### സാധാരണ ഇവന്റുകൾ
+
+വെബ് ബ്രൗസറുകൾ അനേകം വ്യത്യസ്ത ഇവന്റുകൾ കേൾക്കുവാൻ നിങ്ങൾക്ക് അനുവദിക്കുന്നു, എന്നാൽ ഭൂരിഭാഗം ഇന്ററാക്ടീവ് ആപ്പ്ലിക്കേഷനുകൾ ആവശ്യമായ ചില പ്രധാന ഇവന്റുകളിൽ അടിച്ചമർത്തുന്നു. ഈ അടിസ്ഥാന ഇവന്റുകൾ മനസ്സിലാക്കുന്നത് പ്രഗത്ഭ ഉപയോക്തൃ ഇടപെടലുകൾ നിർമ്മിക്കാൻ സഹായിക്കും.
+
+ഒരു ആപ്ലിക്കേഷൻ സൃഷ്ടിക്കുമ്പോൾ കേൾക്കാൻ ലഭ്യമായ [മിക്ക ഇവന്റുകളും](https://developer.mozilla.org/docs/Web/Events) ഉണ്ട്. അടിസ്ഥാനത്തിൽ ഒരു പേജിൽ ഉപയോക്താവ് ചെയ്യുന്ന ഏതൊരു പ്രവർത്തനവും ഒരു ഇവന്റ് ഉയർത്തും, ഇതു നിങ്ങളെ ഉപയോഗിച്ച് വളരെയധികം ശക്തി നൽകുന്നു ഉപയോക്തൃ അനുഭവം നിയന്ത്രിക്കാൻ. ഭാഗ്യം വശാൽ, സാധാരണയായി നിങ്ങൾക്ക് ചെറിയ ചില ഇവന്റുകൾ മാത്രം വേണ്ടതാണ്. ചില സാധാരണ ഇവന്റുകൾ (നമുക്ക് ഗെയിം സൃഷ്ടിക്കുമ്പോൾ ഉപയോഗിക്കാനുള്ള രണ്ട് ഇവന്റുകൾ ഉൾപ്പെടെ):
+
+| ഇവന്റ് | വിവരണം | സാധാരണ ഉപയോഗങ്ങൾ |
+|--------|----------|--------------------|
+| `click` | ഉപയോക്താവ് ഒന്നിനെ ക്ലിക്ക് ചെയ്തു | ബട്ടണുകൾ, ലിങ്കുകൾ, ഇന്ററാക്ടീവ് ഘടകങ്ങൾ |
+| `contextmenu` | ഉപയോക്താവ് മൗസിന്റെ വലത് ബട്ടൺ ക്ലിക്ക് ചെയ്തു | റൈറ്റ് ക്ലിക്ക് മെനുകളും കസ്റ്റം മെനുകളും |
+| `select` | ഉപയോക്താവ് ചില ടെക്സ്റ്റ് ഹൈലൈറ്റ് ചെയ്തു | ടെക്സ്റ്റ് എഡിറ്റിംഗ്, കോപി പ്രവർത്തനങ്ങൾ |
+| `input` | ഉപയോക്താവ് ടെക്സ്റ്റ് ഇൻപുട്ട് ചെയ്തു | ഫോറം പരിശോധന, റിയൽ-ടൈം സേച്ച് |
+
+**ഈ ഇവന്റ് തരം മനസ്സിലാക്കുക:**
+- **ട്രിഗർ ചെയ്യുന്നു** ഉപയോക്താക്കൾ നിങ്ങളുടെ പേജിലെ നിശ്ചിത ഘടകങ്ങളുമായി ഇടപെടുമ്പോൾ
+- **നൽകുന്നു** ഇവന്റ് ഒബ്ജക്ടുകൾ വഴി ഉപയോക്താവിന്റെ പ്രവർത്തനങ്ങളുടെ വിശദാംശങ്ങൾ
+- **സാധ്യമാക്കുന്നു** പ്രതികരണശീലമുള്ള, ഇന്ററാക്ടീവ് വെബ് ആപ്ലിക്കേഷനുകൾ സൃഷ്ടിക്കുന്നത്
+- **പ്രവർത്തിക്കുന്നു** വ്യത്യസ്ത ബ്രൗസറുകളിൽ, ഉപകരണങ്ങളിൽ സ്ഥിരമായി
+
+## ഗെയിം സൃഷ്ടിക്കൽ
+
+ഇവന്റുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് നിങ്ങൾ മനസ്സിലാക്കിയതിനുശേഷം, പ്രായോഗികമായി എന്തെങ്കിലും ഉപകാരപ്രദം നിർമ്മിക്കാം. നാം ഒരു ടൈപ്പിംഗ് വേഗം ഗെയിം സൃഷ്ടിക്കാം, ഇത് ഇവന്റ് ഹാൻഡ്ലിംഗിനെ പ്രദർശിപ്പിക്കുമ്പോൾ പ്രധാന ഡെവലപ്പർ കഴിവ് വികസിപ്പിക്കാനും സഹായിക്കും.
+
+നാം ജാവാസ്ക്രിപ്റ്റിൽ ഇവന്റുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നതെന്ന് വിശദീകരിക്കാൻ ഒരു ഗെയിം സൃഷ്ടിക്കാം. നമ്മുടെ ഗെയിം ഒരു പ്ലെയറുടെ ടൈപ്പിംഗ് കഴിവ് പരിശോധിക്കും, എല്ലാ ഡെവലപ്പർമാർക്കും വേണമെന്ന് പരിഗണിക്കപ്പെടാത്ത ഒരു പ്രധാന കഴിവ്. രസകരമായ വസ്തുത: നാം ഇന്ന് ഉപയോഗിക്കുന്ന QWERTY കീബോർഡ് ലേഔട്ട് പിറവിപെടുത്തിയത് 1870 കളിൽ ടൈപ്പไรട്ടറുകൾക്കായി ആയിരുന്നു - ഇപ്പോഴും നല്ല ടൈപ്പിംഗ് കഴിവുകൾ പ്രോഗ്രാമർമാർക്ക് അതേ രീതിയിൽ പ്രയോജനപ്പെടുന്നു! ഗെയിമിന്റെ പൊതുവായ പ്രവാഹം ഇങ്ങനെ കാണാം:
+
+```mermaid
+flowchart TD
+ A[ക്ലിക്ക് ചെയ്യുക സ്റ്റാർട്ട്] --> B[അനിയന്ത്രിത ഉദ്ധരണം പ്രദർശിപ്പിക്കുന്നു]
+ B --> C[പ്ലയർ ടെക്സ്റ്റ് ബോക്സിൽ ടൈപ്പ് ചെയ്യുന്നു]
+ C --> D{പദം പൂർത്തിയാക്കിയോ?}
+ D -->|അതെ| E[അടുത്ത പദം ഹൈലൈറ്റ് ചെയ്യുക]
+ D -->|ഇല്ല| F{ഇപ്പോഴത്തെ വരെ ശരിയാണോ?}
+ F -->|അതെ| G[സാധാരണ സ്റ്റൈലിംഗ് നിലനിർത്തുക]
+ F -->|ഇല്ല| H[തെറ്റ് സ്റ്റൈലിംഗ് കാണിക്കുക]
+ E --> I{ഉദ്ധരണം പൂർത്തിയായോ?}
+ I -->|ഇല്ല| C
+ I -->|അതെ| J[ലഭ്യമായ സമയത്തോടെ വിജയം സന്ദേശം കാണിക്കുക]
+ G --> C
+ H --> C
+```
+**ഞങ്ങളുടെ ഗെയിം എങ്ങനെ പ്രവർത്തിക്കും:**
+- **ആരംഭിക്കും** പ്ലേയർ സ്റ്റാർട്ട് ബട്ടൺ ക്ലിക് ചെയ്യുമ്പോൾ ഒരു യാദൃച്ഛിക ഉദ്ധരണം പ്രദർശിപ്പിച്ചു
+- **ട്രാക്ക് ചെയ്യും** പ്ലേയറിന്റെ ടൈപ്പിംഗ് പുരോഗതി വാക്കു വാക്കായി റിയൽ ടൈമിൽ
+- **മികച്ചവാക്കുകൾക്ക് ഹൈലൈറ്റ് നൽകും** പ്ലേയറുടെ ശ്രദ്ധ നിർദ്ദേശിക്കാൻ
+- **തീർച്ചയായ തെറ്റുകൾക്ക്** ഉടൻ ദൃശ്യഫീഡ്ബാക്ക് നൽകും
+- ** calculates** ഉദ്ധരണി പൂർത്തിയായപ്പോൾ മൊത്തം സമയം കണക്കാക്കി പ്രദർശിപ്പിക്കും
+
+നമുക്ക് ഗെയിം നിർമ്മിക്കാം, ഇവന്റുകൾ കുറിച്ച് പഠിക്കാം!
+
+### ഫയൽ ഘടന
+
+കോഡിംഗ് തുടങ്ങുന്നതിന് മുമ്പ്, ക്രമത്ത് വരൂ! ആരംഭത്തിൽ ഒറ്റനോട്ടത്തിൽ മനസ്സിലാകുന്ന ഫയൽ ഘടന ഉണ്ടെങ്കിൽ പിന്നീട് ഇത്തരം പ്രശ്നങ്ങളിൽ കുറവ് ഉണ്ടായിരിക്കും, പ്രൊഫഷണൽ പ്രോജക്ടായി മാറുന്നതിന് ഇത് സഹായിക്കുന്നു. 😊
+
+നാം മൂന്ന് ഫയലുകൾ മാത്രമാണ് സാദ്ധ്യമാക്കുന്നത്: `index.html` പേജ് ഘടനക്ക്, `script.js` ഗെയിം ലജിക്ക് കൈകാര്യം ചെയ്യാൻ, `style.css` എല്ലാം മനോഹരമായി കാണിക്കുന്നതിനായി. ഇതാണ് വെബ് പ്രവർത്തനത്തിന്റെ ക്ലാസിക് കൂട്ടുകെട്ട്!
+
+** പുതിയ ഫോൾഡർ സൃഷ്ടിക്കാൻ കൺസോൾ അല്ലെങ്കിൽ ടെർമിനൽ തുറന്ന് താഴെ കാണിക്കുന്ന കമാൻഡ് നൽകുക:**
+
+```bash
+# ലിനക്സ് അല്ലെങ്കിൽ മാക്ഓഎസ്
+mkdir typing-game && cd typing-game
+
+# വിൻഡോസ്
+md typing-game && cd typing-game
+```
+
+**ഈ കമാൻഡുകൾ എന്താണ് ചെയ്യുന്നത്:**
+- നിങ്ങളുടെ പ്രോജക്ട് ഫയലുകള്ക്ക് പുതിയ ഒരു ഡയറക്ടറി `typing-game` സൃഷ്ടിക്കുന്നു
+- പുതിയ ഡയറക്ടറിയിലേക്ക് സ്വയം ഓടുന്നു
+- ഗെയിം ഡെവലപ്പ്മെന്റിനായി ഒരു വൃത്തിയുള്ള വർക്ക്സ്പേസ് ഒരുക്കുന്നു
+
+**വിഷ്വൽ സ്റ്റുഡിയോ കോഡ് തുറക്കൂ:**
+
+```bash
+code .
+```
+
+**ഈ കമാൻഡ്:**
+- നിലവിലെ ഡയറക്ടറിയിൽ വിഷ്വൽ സ്റ്റുഡിയോ കോഡ് ഓപ്പൺ ചെയ്യുന്നു
+- നിങ്ങളുടെ പ്രോജക്ട് ഫോൾഡർ എഡിറ്ററിൽ തുറക്കുന്നു
+- നിങ്ങൾക്ക് ആവശ്യമുള്ള എല്ലാ ഡെവലപ്പ്മെന്റ് ടൂൾസിലേക്ക് പ്രവേശനമനുവദിക്കുന്നു
+
+**വിഷ്വൽ സ്റ്റുഡിയോ കോഡിൽ താഴെ പറയുന്ന പേരുകൾ ഉപയോഗിച്ച് ഫോൾഡറിൽ മൂന്ന് ഫയലുകൾ ചേർക്കുക:**
+- `index.html` - നിങ്ങളുടെ ഗെയിംയുടെ ഘടനയും ഉള്ളടക്കവും ഉൾക്കൊള്ളുന്നു
+- `script.js` - എല്ലാ ഗെയിം ലജിക്കും ഇവന്റ് ലിസ്സണറുകൾക്കും കൈകാര്യം ചെയ്യുന്നു
+- `style.css` - ദൃശ്യരൂപവും സ്റ്റൈലിംഗും നിർവചിക്കുന്നു
+
+## ഉപയോക്തൃ ഇന്റർഫേസ് സൃഷ്ടിക്കുക
+
+ഇപ്പോൾ നമുക്ക് ഗെയിമിലെ എല്ലാ പ്രവർത്തനങ്ങളും നടക്കാൻ പോകുന്ന സ്റ്റേജ് നിർമ്മിക്കാം! ഒരു സ്പേസ്ഷിപ്പിന്റെ കൺട്രോൾ പാനൽ ഡിസൈൻ ചെയ്യുന്നതുപോലെ ചിന്തിക്കൂ - പ്ലേയർമാർക്ക് വേണ്ടത് എല്ലാം അവരുടെ പ്രതീക്ഷിച്ചിടത്തേതായി ഉറപ്പാക്കണം.
+
+ഗെയിംക്ക് വേണ്ടത് എന്താണെന്ന് നമുക്ക് ഉറപ്പാക്കാം. നിങ്ങൾ ഒരു ടൈപ്പിംഗ് ഗെയിം കളിക്കുകയാണെങ്കിൽ, സ്ക്രീൻ എന്തെല്ലാം കാണിക്കണമെന്നു നിങ്ങൾ ആഗ്രഹിക്കും? ഇതാ നമ്മുക്ക് വേണ്ടതെന്നുള്ളത്:
+
+| UI ഘടകം | ലക്ഷ്യം | HTML ഘടകം |
+|----------|---------|-------------|
+| ഉദ്ധരണി പ്രദർശനം | ടൈപ്പ് ചെയ്യാനുള്ള ടെക്സ്റ്റ് കാണിക്കുന്നു | `` `id="quote"` ഉപയോഗിച്ച് |
+| സന്ദേശ പ്രദേശം | നിലയും വിജയ സന്ദേശങ്ങളും കാണിക്കുന്നു | `
` `id="message"` ഉപയോഗിച്ച് |
+| ടെക്സ്റ്റ് ഇൻപുട്ട് | പ്ലേയർമാർ ഉദ്ധരണി ടൈപ്പ് ചെയ്യുന്നത് ഇവിടെ | ` ` `id="typed-value"` ഉപയോഗിച്ച് |
+| സ്റ്റാർട്ട് ബട്ടൺ | ഗെയിം ആരംഭിക്കുന്നു | `` `id="start"` ഉപയോഗിച്ച് |
+
+**UI ഘടന മനസ്സിലാക്കുക:**
+- **ഉളളടക്കം** ലജിക് അനുസരിച്ച് മേൽനിന്ന് താഴേക്ക് ക്രമീകരിക്കുന്നു
+- **വ്യത്യസ്ത ഘടകങ്ങൾക്ക്** ജാവാസ്ക്രിപ്റ്റ് ലക്ഷ്യമിട്ട് μοναദ IDs നൽകുന്നു
+- **മുകളിലുള്ളവിധത്തിലുള്ള ദൃശ്യക്രമീകരണം** ഉപയോഗിക്ക്തുന്നു ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്താൻ
+- **സെമാന്റിക് HTML ഘടകങ്ങൾ ഉൾക്കൊള്ളുന്നത്** ആക്സസിബിലിറ്റിക്കായി
+
+ജാവാസ്ക്രിപ്റ്റിൽ അവ ഉപയോഗിക്കാൻ ഓരോ ഘടകത്തിനും IDs വേണം. നാം സൃഷ്ടിക്കാൻ പോകുന്ന CSS, ജാവാസ്ക്രിപ്റ്റ് ഫയലുകൾക്കും റഫറൻസുകൾ നമുക്ക് ചേർക്കണം.
+
+`index.html` എന്ന പുതിയ ഫയൽ സൃഷ്ടിക്കുക. താഴെ കാണുന്ന HTML ചേർക്കുക:
+
+```html
+
+
+
+ Typing game
+
+
+
+ Typing game!
+ Practice your typing skills with a quote from Sherlock Holmes. Click **start** to begin!
+
+
+
+
+ Start
+
+
+
+
+```
+
+**ഈ HTML ഘടന എന്ത് സാദ്ധ്യമാക്കുന്നു:**
+- സ്റ്റൈലിംഗിനായി ``-ൽ CSS സ്റ്റൈൽഷീറ്റ് ബന്ധിപ്പിക്കുന്നു
+- ഉപയോക്താക്കൾക്ക് വ്യക്തമായ തലക്കെട്ടും നിർദേശങ്ങളും സൃഷ്ടിക്കുന്നു
+- ഡൈനാമിക് ഉള്ളടക്കത്തിനായി പ്രത്യേക IDs ഉള്ള പ്ലേസ്ഹോൾഡർ പാരഗ്രാഫുകൾ സജ്ജമാക്കുന്നു
+- ആക്സസിബിലിറ്റിക്കായി ഇൻപുട്ട് ഫീൽഡ് ഉൾക്കൊള്ളിക്കുന്നു
+- ഗെയിം ആരംഭിക്കാൻ സ്റ്റാർട്ട് ബട്ടൺ നൽകുന്നു
+- പരമാവധി പ്രകടനത്തിനായി അവസാനം ജാവാസ്ക്രിപ്റ്റ് ഫയൽ ലോഡ് ചെയ്യുന്നു
+
+### ആപ്ലിക്കേഷൻ ആരംഭിക്കുക
+
+ഡെവലപ്പ്മെന്റ് സമയത്ത് ആപ്ലിക്കേഷൻ രൂപം പരിശോധിക്കുന്നത് പിഴവുകൾ അർദ്ധമായി കണ്ടെത്താനും, പുരോഗതി യഥാർത്ഥ സമയത്ത് കാണാനും സഹായിക്കുന്നു. Live Server എന്ന വളരെ വിലപ്പെട്ട ഉപകരണം നിങ്ങൾ മാറ്റങ്ങൾ സേവ് ചെയ്യുമ്പോഴെല്ലാം ബ്രൗസർ ഓട്ടോമാറ്റിക്കായി പുതുക്കുന്നു, ഇതിലൂടെ വികസനം വളരെ കാര്യക്ഷമമാകും.
+
+ഇത് ഏറ്റവും നല്ലത് ഇടനില ക്രമത്തിൽ വികസിപ്പിക്കുന്നത് ആണ്. നമുക്ക് ആപ്ലിക്കേഷൻ ആരംഭിക്കാം. വിഷ്വൽ സ്റ്റുഡിയോ കോഡിനായി ഒരു അതുല്യമായ എക്സ്റ്റൻഷൻ ഉണ്ട് അതാണ് [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon), ഇത് നിങ്ങളുടെ ആപ്ലിക്കേഷൻ സാദ്ധ്യമായ പ്രാദേശികമായി ഹോസ്റ്റ് ചെയ്ത് നിങ്ങൾ സേവ് ചെയ്യുന്നപ്പോള് ബ്രൗസർ പുതുക്കും.
+
+**[Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) സ്ഥാപിക്കാൻ ലിങ്ക് ഓപ്പൺ ചെയ്ത് Install ക്ലിക്ക് ചെയ്യുക:**
+
+**സ്ഥാപന സമയത്ത് നടക്കുന്നത്:**
+- നിങ്ങളുടെ ബ്രൗസർ വിസ്വൽ സ്റ്റുഡിയോ കോഡ് ഓപ്പൺ ചെയ്യാൻ പ്രോമ്പ്റ്റ് ചെയ്യുന്നു
+- എക്സ്റ്റൻഷൻ ഇൻസ്റ്റലേഷൻ പ്രക്രിയ വഴി നിങ്ങൾക്ക് മാർഗനിർദ്ദേശം നല്കുന്നു
+- ഇൻസ്റ്റലേഷൻ പൂർത്തിയാക്കാൻ വിസ്വൽ സ്റ്റുഡിയോ കോഡ് റീസ്റ്റാർട്ട് ആവശ്യമാകും
+
+**ഇൻസ്റ്റാൾ ചെയ്തശേഷം, വിസ്വൽ സ്റ്റുഡിയോ കോഡിൽ Ctrl-Shift-P (അഥവാ Cmd-Shift-P) അമർത്തി കമാൻഡ് പാലറ്റ് തുറക്കുക:**
+
+**കമാൻഡ് പാലറ്റ് മനസ്സിലാക്കുക:**
+- എല്ലാ VS കോഡ് കമാൻഡുകൾക്കും വേഗം ആക്സസ് നൽകുന്നു
+- നിങ്ങൾ ടൈപ്പ് ചെയ്യുമ്പോൾ കമാൻഡുകൾ തിരയുന്നു
+- വേഗത്തിലുള്ള ഡെവലപ്പ്മെന്റിന് കീബോർഡ് ഷോർട്കട്ടുകൾ നൽകുന്നു
+
+** "Live Server: Open with Live Server" ടൈപ്പ് ചെയ്യുക:**
+
+**Live Server ചെയ്യുന്നത്:**
+- നിങ്ങളുടെ പ്രോജക്ട് ഫയലുകൾക്കായി പ്രാദേശിക ഡെവലപ്മെന്റ് സര്വദേശം ആരംഭിക്കുന്നു
+- നിങ്ങൾ സേവ് ചെയ്യുന്ന files നെ വെച്ചു ബ്രൗസർ ഓട്ടോമാറ്റിക് പുനരാരംഭിക്കുന്നു
+- സാധാരണ `localhost:5500` എന്ന പ്രാദേശിക URL വഴി ഫയലുകൾ സേവിക്കുന്നു
+
+**ഒരു ബ്രൗസർ തുറക്കുക, `https://localhost:5500` സന്ദർശിക്കുക:**
+
+ഇപ്പോൾ നിങ്ങൾ സൃഷ്ടിച്ച പേജ് കാണണം! കുറച്ച് പ്രവർത്തനക്ഷമത ചേർക്കാം.
+
+## CSS ചേർക്കുക
+
+ഇപ്പോൾ കാര്യങ്ങൾ മനോഹരമായി കാണിക്കണം! ദൃശ്യ ഫീഡ്ബാക്ക് ഉപയോക്തൃ ഇന്റർഫേസുകൾക്ക് പ്രാരംഭ കാലം മുതൽ അനിവാര്യമാണ്. 1980-കളിൽ ഗവേഷകർ കണ്ടെത്തിയത് ഒറ്റത്തവണ ദൃശ്യ ഫീഡ്ബാക്ക് ഉപയോക്തൃ പ്രകടനവും പിഴവുകളും ചെറുക്കുന്നതിൽ ഗണ്യമായ സഹായം ചെയ്യുന്നു. നാം ഇത് തന്നെ സൃഷ്ടിക്കാനാണ് പോകുന്നത്.
+
+നമ്മുടെ ഗെയം എന്ത് സംഭവിക്കുകയാണ് എന്ന് പൂർണ്ണമായും വ്യക്തമാക്കണം. പ്ലേയർമാർ കൃത്യമായി ഏത് വാക്ക് ടൈപ്പ് ചെയ്യണമെന്നറിയണം, തെറ്റ് ഉണ്ടെങ്കിൽ ഉടൻ അത് കാണണം. ഇതാ ചില ലളിതമെങ്കിലും ഫലപ്രദമായ സ്റ്റൈലിംഗ്:
+
+`style.css` എന്ന പുതിയ ഫയൽ സൃഷ്ടിച്ച് താഴെ കാണിക്കുന്ന സിന്താക്സ് ചേർക്കുക.
+
+```css
+/* inside style.css */
+.highlight {
+ background-color: yellow;
+}
+
+.error {
+ background-color: lightcoral;
+ border: red;
+}
+```
+
+**ഈ CSS ക്ലാസുകൾ എന്താണെന്ന് മനസ്സിലാക്കുക:**
+- നല്ല ದೃശ്യനിർദ്ദേശത്തിനായി നിലവിലുള്ള വാക്ക് മഞ്ഞ ബാക്ക്ഗ്രൗണ്ടോടെ ഹൈലൈറ്റ് ചെയ്യുന്നു
+- ടൈപ്പിംഗ് പിഴവുകൾക്ക് ലളിതമായ കൊറൽ നിറമുള്ള ബാക്ക്ഗ്രൗണ്ട് സിഗ്നൽ നൽകുന്നു
+- ഉപയോക്താവിന്റെ ടൈപ്പിംഗ് പ്രവാഹം തടസ്സപ്പെടുത്താതെ ഉടൻ പ്രതികരണവും നൽകുന്നു
+- ആക്സസിബിലിറ്റിക്കായി വൈവിധ്യമാർന്ന നിറങ്ങൾ ഉപയോഗിക്കുന്നു, വ്യക്തമായ ദൃശ്യ പരസ്പരം
+
+✅ CSS-ന് വരുമ്പോൾ നിങ്ങളുടെ പേജ് എങ്ങിനെയാണ് ഇഷ്ടപ്പെടുന്നതെന്ന് ലേഔട്ട് ചെയ്യാം. കുറച്ച് സമയം എടുക്കുക പേജ് കൂടുതൽ ആകർഷകമാക്കാൻ:
+
+- വ്യത്യസ്ത ഫോണ്ട് തിരഞ്ഞെടുക്കുക
+- തലക്കെട്ടുകൾ നിറം കൊടുക്കുക
+- ഇനങ്ങളുടെ വലിപ്പം ക്രമീകരിക്കുക
+
+## ജാവാസ്ക്രിപ്റ്റ്
+
+ഇവിടെ കാര്യങ്ങൾ രസകരമാണ്! 🎉 ഞങ്ങൾക്കും HTML ഘടനയും CSS സ്റ്റൈലിംഗും ഉണ്ടാക്കി, പക്ഷെ ഇപ്പോള് നമ്മുടെ ഗെയിം ഒരു യന്ത്രമില്ലാത്ത മനോഹര കാറുപോലെ ആണ്. ജാവാസ്ക്രിപ്റ്റ് ആ എഞ്ചിൻ ആണ് - പ്ലേയർമാർ ചെയ്യുന്ന കാര്യങ്ങൾക്ക് പ്രതികരിക്കുന്നതും എല്ലാം പ്രവർത്തനക്ഷമമാക്കുന്നതുമായത്.
+
+ഇവിടെ നിങ്ങളുടെ സൃഷ്ടി ജീവിക്കുന്നു. നാം അതെളുപ്പമാക്കാൻ ഘട്ടം ഘട്ടമായി നോക്കാം:
+
+| ഘട്ടം | ഉദ്ദേശ്യം | നിങ്ങൾ പഠിക്കേണ്ടത് |
+|-------|----------|-----------------|
+| [സ്ഥിരങ്ങൾ സൃഷ്ടിക്കുക](../../../../4-typing-game/typing-game) | ഉദ്ധരണികളും DOM റഫറൻസുകളും സജ്ജമാക്കുക | വെരറിയബിൾ മാനേജ്മെന്റ്, DOM തിരഞ്ഞെടുപ്പ് |
+| [ഗെയിം ആരംഭിക്കാൻ ഇവന്റ് ലിസ്സണർ](../../../../4-typing-game/typing-game) | ഗെയിം ആരംഭിക്കൽ കൈകാര്യം ചെയ്യുക | ഇവന്റ് ഹാൻഡ്ലിംഗ്, UI അപ്ഡേറ്റുകൾ |
+| [ടൈപ്പിംഗിനുള്ള ഇവന്റ് ലിസ്സണർ](../../../../4-typing-game/typing-game) | ഉപയോക്തൃ ഇൻപുട്ട് റിയൽ-ടൈമിൽ ഹാൻഡിൽ ചെയ്യുക | ഇൻപുട്ട് പരിശോധനയും ഡൈനാമിക് ഫീഡ്ബാക്കും |
+
+**ഈ ഘടനയുള്ള സമീപനം നിങ്ങൾക്ക്:**
+- കോഡ് ലജിക്കൽ, കൈകാര്യം ചെയ്യാക്കാവുന്ന ഭാഗങ്ങളായി ക്രമീകരിക്കാൻ സഹായിക്കുന്നു
+- ഫംഗ്ഷണാലിറ്റി ഘട്ടം ഘട്ടമായി നിർമ്മിക്കുമ്പോൾ എളുപ്പത്തിൽ ഡീബഗ് ചെയ്യാം
+- നിങ്ങളുടെ ആപ്ലിക്കേഷന്റെ വിവിധ ഭാഗങ്ങൾ എങ്ങനെ ചേർന്ന് പ്രവർത്തിക്കുന്നതായി മനസ്സിലാക്കാം
+- ഭാവിയിലെ പ്രോജക്ടുകൾക്കായി പുനരുപയോഗയോഗ്യമായ മാതൃകകൾ സൃഷ്ടിക്കാൻ
+
+പക്ഷെ ആദ്യം, `script.js` എന്ന ഒരു പുതിയ ഫയൽ സൃഷ്ടിക്കുക.
+
+### സ്ഥിരങ്ങൾ ചേർക്കുക
+
+പ്രവർത്തനത്തിലേയ്ക്ക് നമുക്ക് കുതിക്കുമുമ്പ് എല്ലാ വിഭവങ്ങളും ഒരുക്കാം! നാസ മിഷൻ കൺട്രോൾ എല്ലാ നിരീക്ഷണ സംവിധാനങ്ങളും തുടങ്ങും മുൻപ് ഒരുക്കുന്നതുപോലെ തന്നെ, ഒന്നും വൈകാതെ എല്ലാം തയ്യാറാക്കുമ്പോൾ കാര്യങ്ങൾ എളുപ്പമാകും. കളയേണ്ട വസ്തുക്കളെ വേറെയും തിരയുന്നതു ഒഴിവാക്കും, ടൈപോകളും കുറയും.
+
+അടിസ്ഥാനപരമായി നമുക്ക് ആദ്യം സജ്ജമാക്കേണ്ടത്:
+
+| ഡാറ്റ ടൈപ്പ് | ഉദ്ദേശ്യം | ഉദാഹരണം |
+| ഉദ്ധരണികളുടെ അരേ | ഗെയിമിനുവേണ്ടി എല്ലാ શક્ય ഉദ്ധരണികളും സൂക്ഷിക്കുക | `['Quote 1', 'Quote 2', ...]` |
+| വാക്കുകളുടെ അറേ | നിലവിലെ ഉദ്ധരണം വ്യക്തമായ വാക്കുകളായി വിഭജിക്കുക | `['When', 'you', 'have', ...]` |
+| വാക്കുകളുടെ ഇൻഡക്സ് | കളിക്കെട്ടാവുന്ന വാക്ക് ഏതാണ് എന്ന് ട്രാക്ക് ചെയ്യുക | `0, 1, 2, 3...` |
+| ആരംഭ സമയo | സ്കോറിംഗ് കണക്കാക്കാൻ elapsed സമയം കണക്കാക്കുക | `Date.now()` |
+
+**നമ്മുടെ UI ഘടകങ്ങൾക്ക് റഫറൻസുകളും ആവശ്യമാണ്:**
+| ഘടകം | ഐഡി | ഉദ്ദ്ദേശ്യം |
+|---------|----|---------|
+| ടെക്സ്റ്റ് ഇൻപുട്ട് | `typed-value` | പ്ലെയറുകൾ ടൈപ്പുചെയ്യുന്നത് ഇവിടെ |
+| ഉദ്ധരണം പ്രദർശനം | `quote` | ടൈപ്പിക്കേണ്ട ഉദ്ധരണം കാണിക്കുന്നു |
+| സന്ദേശ മേഖല | `message` | നിലഅവകാശങ്ങൾ പ്രദർശിപ്പിക്കുന്നു |
+
+```javascript
+// script.js-ന്റെ ഉൾപരം
+// നമ്മുടെ എല്ലാം ഉദ്ധരണികൾ
+const quotes = [
+ 'When you have eliminated the impossible, whatever remains, however improbable, must be the truth.',
+ 'There is nothing more deceptive than an obvious fact.',
+ 'I ought to know by this time that when a fact appears to be opposed to a long train of deductions it invariably proves to be capable of bearing some other interpretation.',
+ 'I never make exceptions. An exception disproves the rule.',
+ 'What one man can invent another can discover.',
+ 'Nothing clears up a case so much as stating it to another person.',
+ 'Education never ends, Watson. It is a series of lessons, with the greatest for the last.',
+];
+// കളിക്കാരൻ ഇപ്പോൾ ടൈപ്പ് ചെയ്യുകയാണ് എന്ന വാക്കിന്റെ പട്ടികയും സൂചികയും സൂക്ഷിക്കുക
+let words = [];
+let wordIndex = 0;
+// തുടക്ക സമയം
+let startTime = Date.now();
+// പേജിന്റെ ഘടകങ്ങൾ
+const quoteElement = document.getElementById('quote');
+const messageElement = document.getElementById('message');
+const typedValueElement = document.getElementById('typed-value');
+```
+
+**ഈ സെറ്റ് അപ്പ് കോഡ് എന്ത് കൈപിടിക്കുന്നു എന്നു വിശദീകരിക്കുന്നു:**
+- **ശേഖരിക്കുന്നു** ഷെർലോക് ഹോംസിന്റെ ഉദ്ധരണികൾ `const` ഉപയോഗിച്ച്, കാരണം ഇനം മാറ്റമില്ല
+- **ക്രമീകരിക്കുന്നു** ട്രാക്കിങ് വേറിയബിൾസ് `let` ഉപയോഗിച്ച്, കാരണം ഗെയിം സമയത്ത് മാറാം
+- **ക്യാപ്പ്ചർ ചെയ്യുന്നു** DOM ഘടകങ്ങളുടെ റഫറൻസുകൾ `document.getElementById()` ഉപയോഗിച്ചു കാര്യക്ഷമമായ ആക്സസിന്
+- **സജ്ജമാക്കുന്നു** ഗെയിം ഫംഗ്ഷണാലിറ്റിക്ക് അടിസ്ഥാന ഘടകങ്ങൾ സുതാര്യമായ കണ്ണിയോട്
+- **സംഘടിപ്പിക്കുന്നു** ബന്ധപ്പെട്ട ഡാറ്റയും ഘടകങ്ങളും കോഡ് പരിപാലനത്തിന് എളുപ്പമുള്ള രീതിയിൽ
+
+✅ നിങ്ങളുടെ ഗെയിമിന് കൂടുതൽ ഉദ്ധരണികൾ ചേർക്കുക
+
+> 💡 **പ്രോ ടിപ്പ്**: ആവശ്യമുള്ളപ്പോൾ `document.getElementById()` ഉപയോഗിച്ച് എപ്പോഴും ഘടകങ്ങൾ ലഭ്യമാക്കാം. ഈ ഘടകങ്ങളെ സ്ഥിരമായി പരാമർശിക്കുമ്പോൾ typo ഒഴിവാക്കാൻ constants ഉപയോഗിക്കുക ഉത്തമം. [Vue.js](https://vuejs.org/) അല്ലെങ്കിൽ [React](https://reactjs.org/) പോലുള്ള ഫ്രെയിംവർക്ക്കൾ കേന്ദ്രീകരിച്ച കോഡ് മാനേജ്മെന്റിന് സഹായിക്കും.
+>
+**ഈ സമീപനം എങ്ങനെ മികച്ചതാണ്:**
+- **തെറ്റായ അക്ഷരങ്ങൾ ഒഴിവാക്കുന്നു** പല തവണ ഘടകങ്ങൾ പരാമർശിക്കുമ്പോൾ
+- **വരവായി വായനയ്ക്ക് സഹായിക്കുന്നു** വിശദമായ നിർദേശം നൽകുന്ന constant നാമങ്ങൾ കൊണ്ട്
+- **IDE പിന്തുണ മെച്ചപ്പെടുത്തുന്നു** ഓട്ടോകംപ്ലീറ്റ്, പിശക് പരിശോധിക്കുന്നതിൽ
+- **Refactoring എളുപ്പമാണ്** തുടർന്ന് ID മാറുമ്പോൾ
+
+`const`, `let` & `var` ഉപയോഗിച്ച് ഒരു വീഡിയോകൾ നോക്കാൻ സമയം ചിലവിടുക
+
+[](https://youtube.com/watch?v=JNIXfGiDWM8 "Types of variables")
+
+> 🎥 മുകളിൽ ചിത്രം 클릭 ചെയ്ത് വേരിയബിൾസിനെക്കുറിച്ചുള്ള വീഡിയോ കാണുക.
+
+### സ്റ്റാർട്ട് ലൊജിക്ക് ചേർക്കുക
+
+ഇവിടെ എല്ലാം പൊരുത്തപ്പെടുന്നു! 🚀 നിങ്ങൾ ആദ്യ യഥാർത്ഥ ഇവന്റ് ലിസ്റ്റണർ എഴുതാൻ പോകുന്നുണ്ട്, ബട്ടൺ ക്ലിക്കിന് കോഡ് പ്രതികരിക്കുന്നതിൽ സന്തോഷം ഉണ്ടാകും.
+
+ആലോചിക്കൂ: ആരോ ഒരിടത്ത് "Start" ബട്ടൺ ക്ലിക്ക് ചെയ്യാനിരിക്കുകയാണ്, നിങ്ങളുടെ കോഡ് തയ്യാറാകണം. എപ്പോൾ ക്ലിക്ക് ചെയ്യും എന്ന് അറിയില്ല - ഉടൻ അല്ലെങ്കിൽ കോഫി എടുത്ത് തിരിച്ചു വന്നതിന് ശേഷം - എന്നാൽ ക്ലിക്ക് ചെയ്ത് കയ്യിൽ ഗെയിം തുടങ്ങും.
+
+ഉപയോക്താവ് `start` ക്ലിക്ക് ചെയ്യുമ്പോൾ, ഉദ്ധരണി തിരഞ്ഞെടുത്തു, UI സജ്ജമാക്കും, ഇപ്പോഴുള്ള വാക്കും സമയം ട്രാക്ക് ചെയ്യാനും പരിശീലനം തുടങ്ങും. താഴെ നൽകിയിരിക്കുന്ന ജാവാസ്ക്രിപ്റ്റ് ചേർക്കുക; സ്ക്രിപ്റ്റ് ബ്ലോക്കിനു ശേഷം വിശദീകരിക്കുന്നു.
+
+```javascript
+// script.js ന്റെ അവസാനം
+document.getElementById('start').addEventListener('click', () => {
+ // ഒരു ക്വോട്ട് നേടുക
+ const quoteIndex = Math.floor(Math.random() * quotes.length);
+ const quote = quotes[quoteIndex];
+ // ക്വോട്ട് ഒരു വാക്കുകളുടെ അരേരിയിലെ ഇടുക
+ words = quote.split(' ');
+ // ട്രാക്ക് ചെയ്യുന്നതിനായി വാക്കുകളുടെ സൂചിക പുനരാരംഭിക്കുക
+ wordIndex = 0;
+
+ // UI അപ്ഡേറ്റുകൾ
+ // ഒരു ക്ലാസ് സജ്ജീകരിക്കാൻ സ്പാൻ ഘടകങ്ങളുടെ ഒരു അരേ സൃഷ്ടിക്കുക
+ const spanWords = words.map(function(word) { return `${word} `});
+ // സ്ട്രിങ്ങിലാക്കുക, ക്വോട്ട് പ്രദർശനത്തിൽ innerHTML ആയി സജ്ജീകരിക്കുക
+ quoteElement.innerHTML = spanWords.join('');
+ // ആദ്യ വാക്ക് ഹൈലൈറ്റ് ചെയ്യുക
+ quoteElement.childNodes[0].className = 'highlight';
+ // മുൻ സന്ദേശങ്ങൾ മായ്ക്കുക
+ messageElement.innerText = '';
+
+ // ടെക്സ്റ്റ്ബോക്സ് സജ്ജമാക്കുക
+ // ടെക്സ്റ്റ്ബോക്സ് മായ്ക്കുക
+ typedValueElement.value = '';
+ // ഫോക്കസ് സജ്ജമാക്കുക
+ typedValueElement.focus();
+ // ഇവന്റ് ഹാൻഡ്ലർ സജ്ജമാക്കുക
+
+ // ടൈമർ തുടങ്ങുക
+ startTime = new Date().getTime();
+});
+```
+
+**കോഡ് ലൊജിക്ക് വിഭാഗങ്ങൾ ആയി വിഭജിക്കുക:**
+
+**📊 വാക്ക് ട്രാക്കിങ് സജ്ജീകരണം:**
+- **തിരഞ്ഞെടുക്കുന്നു** വ്യത്യസ്തമായി ഒരോ സൃഷ്ടിക്കാൻ `Math.floor()` & `Math.random()` ഉപയോഗിച്ച് റാൻഡം ഉദ്ധരണം
+- **മാറ്റുന്നു** ഉദ്ധരണി വാക്കുകളുടെ അറേ ആയി `split(' ')` വഴി
+- **പുനഃക്രമീകരിക്കുന്നു** `wordIndex` നെ 0ൽ, കാരണം കളിക്കാർ ആദ്യ വാക്കിലൂടെ തുടങ്ങും
+- **ഉറപ്പാക്കുന്നു** പുതിയ റൗണ്ട് ഗെയിം നില
+
+**🎨 UI സജ്ജീകരണം & പ്രദർശനം:**
+- **സൃഷ്ടിക്കുന്നു** `` ഘടകങ്ങളുടെ അറേ, ഓരോ വാക്കും സ്വതന്ത്ര സ്റ്റൈലിംഗിനായി വട്ടിപ്പഴുക്ക് ചെയ്യും
+- **ചേർക്കുന്നു** ആ സ്പാൻ ഘടകങ്ങൾ ഒരൊറ്റ സ്ട്രിങായി DOM അപ്ഡേറ്റിന്
+- **പ്രധാനമാണ്** ആദ്യ വാക്ക് `highlight` CSS ക്ലാസ് ചേർത്ത്
+- **മാറ്റുന്നു** മുൻഗാമി സന്ദേശങ്ങൾ നീക്കി ക്ലീൻ സ്റ്റേറ്റ് നൽകുന്നു
+
+**⌨️ ടെക്സ്റ്റ് ബോക്സ് ഒരുക്കൽ:**
+- **നീക്കം ചെയ്യുന്നു** നിലവിലെ ടെക്സ്റ്റ് ഇൻപുട്ടിൽ നിന്നും
+- **പ്രധാന ശ്രദ്ധ** ഇൻപുട്ട് ബോക്സിലേക്ക് നല്കി ഉടനടി ടൈപ്പ് ആരംഭിക്കാനായി
+- **തയാറാക്കുന്നു** പുതിയ ഗെയിം സെഷനായി
+
+**⏱️ ടൈമർ ആരംഭിക്കൽ:**
+- **പിടിക്കുന്നു** നിലവിലെ സമയമുദ്ര `new Date().getTime()` ഉപയോഗിച്ച്
+- **സജ്ജമാക്കുന്നു** ടൈപ്പിംഗ് സ്പീഡ് കണക്കാക്കാനും സമയബന്ധിത പ്രവർത്തനം തുടങ്ങാനും
+- **തുടക്കുന്നു** പെർഫോർമൻസ് ട്രാക്കിംഗ്
+
+### ടൈപ്പിംഗ് ലോജിക്ക് ചേർക്കുക
+
+ഇപ്പോൾ ഗെയിമിന്റെ ഹൃദയം കൈകാര്യം ചെയ്യാം! ആദ്യമായി സങ്കീർണ്ണമെന്നുചിത്രം വരാമെങ്കിലും ഓരോ ഭാഗവും കിടിലനായിരുന്നു. ഒടുവിൽ മുഴുവനായും ലൊജികായി തോന്നും.
+
+നാം നിർമിക്കുന്നത് ഏറെ ജടിലമാണ്: ഓരോ അക്ഷരം ടൈപ് ചെയ്യുമ്പോഴും, കോഡ് ചെക്ക് ചെയ്ത് ഫീഡ്ബാക് നൽകുകയും അടുത്ത് ചെയ്യേണ്ടത് നിരീക്ഷിക്കുകയും ചെയ്യും. 1970-കളിൽ WordStar പോലുള്ള വേഗത്തിലുള്ള പലര്ക്ക്实时 ഫീഡ്ബാക് നൽകിവന്ന മാതൃക കൂടിയാണ്.
+
+```javascript
+// script.js ന് അവസാനം
+typedValueElement.addEventListener('input', () => {
+ // ഇപ്പോഴത്തെ വാക്ക് നേടുക
+ const currentWord = words[wordIndex];
+ // നിലവിലെ മൂല്യം നേടുക
+ const typedValue = typedValueElement.value;
+
+ if (typedValue === currentWord && wordIndex === words.length - 1) {
+ // വാക്യത്തിന്റെ അവസാനം
+ // വിജയത്തെ പ്രദർശിപ്പിക്കുക
+ const elapsedTime = new Date().getTime() - startTime;
+ const message = `CONGRATULATIONS! You finished in ${elapsedTime / 1000} seconds.`;
+ messageElement.innerText = message;
+ } else if (typedValue.endsWith(' ') && typedValue.trim() === currentWord) {
+ // വാക്കിന്റെ അവസാനം
+ // പുതിയ വാക്കിനായി typedValueElement ക്ലിയർ ചെയ്യുക
+ typedValueElement.value = '';
+ // അടുത്ത വാക്കിലേക്ക് നീങ്ങുക
+ wordIndex++;
+ // quote ൽ ഉള്ള എല്ലാ എലമെന്റുകൾക്കും ക്ലാസ് നാമം റീസെറ്റ് ചെയ്യുക
+ for (const wordElement of quoteElement.childNodes) {
+ wordElement.className = '';
+ }
+ // പുതിയ വാക്കിനെ ഹൈലൈറ്റ് ചെയ്യുക
+ quoteElement.childNodes[wordIndex].className = 'highlight';
+ } else if (currentWord.startsWith(typedValue)) {
+ // നിലവിൽ ശരിയാണ്
+ // അടുത്ത വാക്കിനെ ഹൈലൈറ്റ് ചെയ്യുക
+ typedValueElement.className = '';
+ } else {
+ // പിശക് സ്ഥിതി
+ typedValueElement.className = 'error';
+ }
+});
+```
+
+**ടൈപ്പിംഗ് ലോജിക്ക് ഫ്ലോ മനസ്സിലാക്കുക:**
+
+ഫങ്ഷൻ വാട്ടർഫോൾ രീതിയിൽ, ഏറ്റവും പ്രത്യേകതയുള്ള സ്ഥിതികളിൽ നിന്ന് പൊതുവെകിലേക്ക് പരിശോധിക്കുന്നു. ഓരോ കാഴ്ച്ചയും വിശകലനം ചെയ്യാം:
+
+```mermaid
+flowchart TD
+ A[പ്ലെയർ അക്ഷരം ടൈപ്പ് ചെയ്യുന്നു] --> B[നിലവിലെ വാക്കും ടൈപ്പുചെയ്ത മൂല്യവും നേടുക]
+ B --> C{ഉദ്ധരണി പൂർത്തിയായോ?}
+ C -->|അതെ| D[സമയം കൂടി പൂർത്തിയാക്കിയ സന്ദേശം പ്രദർശിപ്പിക്കുക]
+ C -->|ഇല്ല| E{വാക്ക് സ്പെയ്സോടെ പൂർത്തിയായോ?}
+ E -->|അതെ| F[ഇൻപുട്ട് ക്ലിയർ ചെയ്യുക, അടുത്ത വാക്കിലേക്ക് മുoന്നു, ഹൈലൈറ്റ് അപ്ഡേറ്റ് ചെയ്യുക]
+ E -->|ഇല്ല| G{ഇത്രവരെ ശരിയായി ടൈപ്പ് ചെയ്തിട്ടുണ്ടോ?}
+ G -->|അതെ| H[പിശക് സ്റ്റൈലിംഗ് നീക്കം ചെയ്യുക]
+ G -->|ഇല്ല| I[പിശക് സ്റ്റൈലിംഗ് കാണിക്കുക]
+```
+**🏁 ഉദ്ധരണം പൂര്ത്തിയായി (സിനിമ 1):**
+- **പരിശോദിക്കുന്നു** ടൈപ്പ് ചെയ്ത വാചകം നിലവിലെ വാക്ക് ഒപ്പം അവസാന വാക്കിലാണ് എന്ന്
+- **കണക്കാക്കുന്നു** സ്റ്റാർട്ട് സമയം മുതൽ ഇപ്പോൾ വരെ_elapsed_ സമയം ആയി
+- **മില്ലിസെക്കൻഡ് സെക്കന്റ് ആയി** 1,000ൽ 部ിഷിക്കു
+- **പ്രകടിപ്പിക്കുന്നു** വിജയ സന്ദേശം സമയത്തോടുകൂടി
+
+**✅ വാക്ക് പൂര്ത്തിയായി (സിനിമ 2):**
+- **ഗ്രഹിക്കുന്നു** വാക്ക് പൂർത്തിയായപ്പോൾ ഇൻപുട്ട് സ്പേസ് കൊണ്ട് അവസാനിക്കുന്നതു
+- **സ്ഥാപിക്കുന്നു** നീക്കിയ ഇൻപുട്ട് മുഴുവനായും നിലവിലെ വാക്കുമായി ഒത്തിരിക്കുന്നു എന്ന്
+- **സോഷ കൾ വാക്ക് വേണ്ടി** ഇൻപുട്ട് ബോക്സ് ക്ലിയർ ചെയ്യുന്നു
+- **മുന്നോട്ട് നീങ്ങുന്നു** `wordIndex` വർദ്ധിപ്പിച്ച്
+- **പ്രകടിപ്പിക്കുന്നു** ഹൈലൈറ്റ് മാറ്റം എല്ലാ ക്ലാസ്സുകളും നീക്കി പുതുതായി
+
+**📝 ടൈപ്പിംഗ് തുടരുന്നു (സിനിമ 3):**
+- **പരിശോധിക്കുന്നു** ഇപ്പോഴത്തെ വാക്ക് ടൈപ് ചെയ്തതിലൂടെ തുടങ്ങുന്നതായി
+- **നീക്കം ചെയ്യുന്നു** പിശക് ക്ലാസ്സ് നീക്കി സങ്കേതം ശരിയാണ് എന്ന് തെളിയിക്കാൻ
+- **അനുവദിക്കുന്നു** തുടരെ ടൈപ്പിങ്ങ് തടസ്സമില്ലാതെ
+
+**❌ പിശക് സ്ഥിതി (സിനിമ 4):**
+- **പ്രവർത്തിക്കുന്നു** ടൈപ്പ് ചെയ്ത വാചകം പ്രതീക്ഷിക്കുന്ന വാക്കിന്റെ തുടക്കത്തിനൊപ്പം ഒത്തില്ലെങ്കിൽ
+- **ചേർക്കുന്നു** പിശക് CSS ക്ലാസ് ഉടൻ ദൃശ്യ പ്രതിഫലനത്തിന്
+- **സഹായിക്കുന്നു** കളിക്കാർ പിശകുകൾ അടിയന്തിരമായി കണ്ടെത്താനും പുനർത്തപ്പിക്കാനും
+
+## നിങ്ങളുടെ അപ്ലിക്കേഷൻ പരിശോധിക്കുക
+
+നിങ്ങൾ പൂർത്തിയാക്കി! 🎉 നിങ്ങൾ ഒരു യഥാർത്ഥ പ്രവർത്തനക്ഷമമായ ടൈപ്പിംഗ് ഗെയിം സംഭവാടകര ഫംഗ്ഷനിലൂടെയായി നിർമ്മിച്ചു. ഈ നേട്ടം വിലമതിക്കാൻ ചില നിമിഷം ചിരിച്ച് സ്വീകാര്യമാണ്.
+
+ഇപ്പോൾ പരിശോധന യാഥാർത്ഥ്യത്തിൽ. ഇത് സാധാരണപ്രകാരം പ്രവർത്തിക്കുന്നുണ്ടോ? നമ്മൾ ഒന്നും മിണ്ടിയിട്ടില്ലേ? പൊതുവിൽ, ഉടൻ മിസ്സ് ആയാൽ സാധാരണംം, പരിചയസമ്പന്നരും അപാകതകൾ കണ്ടെത്താറുണ്ട് ഇത് വികസനമാണ്!
+
+`start` ക്ലിക്ക് ചെയ്ത് ടൈപ്പിംഗ് ആരംഭിക്കൂ! ഇത് മുൻ കാണിച്ച ആനിമേഷനോട് ചുരുങ്ങിയ ലഹരിയിൽ കാണും.
+
+
+
+**പരിശോധിക്കേണ്ട ഘടകങ്ങൾ:**
+- **നിർണയിക്കുന്നു** Start ക്ലിക്കു റാൻഡം ഉദ്ധരണി പ്രദർശിപ്പിക്കുന്നുണ്ടോ എന്ന്
+- **സഹായിക്കുന്നു** ടൈപ്പുചെയ്യുമ്പോൾ ഇപ്പോഴത്തെ വാക്ക് ശരിയായി ഹൈലൈറ്റ് ആകുന്നതെന്ന്
+- **പരിശോധിക്കുന്നു** തെറ്റായി ടൈപ്പിങ്ങിന് പിശക് സ്റ്റൈലുകൾ കാണിക്കപ്പെടുന്നുവോ
+- **ഉറപ്പാക്കുന്നു** വാക്ക് പൂർത്തിയായാൽ ഹൈലൈറ്റ് പ്രവേശിപ്പിക്കുന്നു
+- **പ്രവർത്തിക്കുന്നു** ഉദ്ധരണം പൂർത്തിയായി മെസേജ് സമയത്തോടെ പ്രദർശിപ്പിക്കുന്നു
+
+**സാധാരണ ഡീബഗിംഗ് ടിപ്പുകൾ:**
+- **പരിശോധിക്കുക** ബ്രൗസറിന്റെ കോൺസോൾ (F12) ജാവാസ്ക്രിപ്റ്റ് പിശകുകൾക്കായി
+- **ഉറപ്പാക്കുക** ഫയൽ നാമങ്ങൾ കെയ്സ്-സെൻസിറ്റീവ് ആയി ശരിയായിട്ടാണെന്ന്
+- **പരിശോധിക്കുക** ലൈവ് സർവർ പ്രവർത്തിക്കുന്നുവോ, പുതുക്കുന്നു എന്ന്
+- **വിവിധ ഉദ്ധരണികൾ ശ്രമിക്കുക** റാൻഡം തിരഞ്ഞെടുപ്പ് ശരിയാണെന്ന്
+
+---
+
+## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🎮
+
+ഈ ചാലഞ്ച് പൂർത്തിയാക്കാൻ ഏജന്റ് മോഡ് ഉപയോഗിക്കുക:
+
+**വിവരണം:** കളിക്കാരന്റെ പ്രകടനത്തെ അടിസ്ഥാനമാക്കി ഗെയിമിന്റെ ബുദ്ധിമുട്ട് ക്രമീകരിക്കുന്ന difficulty system ഔട്ട്പുട്ട് ചെയ്യുക. ഈ ചാലഞ്ചിൽ പുരോഗമന ഇവന്റ് കൈകാര്യം, ഡാറ്റ വിശകലനം, ഡൈനാമിക് UI അപ്ഡേറ്റ് പരിശീലനങ്ങൾ ഉൾപ്പെടും.
+
+**പ്രോംപ്റ്റ്:** ടൈപ്പിംഗ് ഗെയിമിനായി difficulty adjustment system ഇത് നിർമിക്കുക:
+1. കളിക്കാരന്റെ ടൈപ്പിംഗ് സ്പീഡ് (മിനിറ്റിൽ വാക്കുകൾ) & ആക്യുറസി ശതമാനം ട്രാക്ക് ചെയ്യുക
+2. സജ്ജമാക്കുക മൂന്ന് difficulty നിലകൾ: Easy (സരള ഉദ്ധരണികൾ), Medium (നിലവിലുള്ള ഉദ്ധരണികൾ), Hard (പങ്കങ്ങൾ ഉൾപ്പെടുന്ന കഠിന ഉദ്ധരണികൾ)
+3. നിലവിലെ difficulty ലെവലും കളിക്കാരന്റെ സ്റ്റാറ്റിസ്റ്റിക്കുകളും UIയിൽ കാണിക്കുക
+4. 3 തുടർച്ചയായ നല്ല പ്രകടനങ്ങൾക്കു ശേഷം difficulty വർദ്ധിപ്പിക്കുന്ന streak കാപ്പി നടപ്പിലാക്കുക
+5. difficulty മാറ്റങ്ങൾ കാണിക്കാൻ ദൃശ്യ ഫീഡ്ബാക്ക് (നിറങ്ങൾ, ആനിമേഷനുകൾ) ചേർക്കുക
+
+ഈ സവിശേഷത നടപ്പിലാക്കാൻ ആവശ്യമായ HTML ഘടകങ്ങൾ, CSS ഷൈലുകൾ, ജാവാസ്ക്രിപ്റ്റ് ഫംഗ്ഷനുകൾ ചേർക്കുക. ശരിയായ പിശക് കൈകാര്യം ഉൾപ്പെടുത്തുക; ARIA ലേബലുകൾ ഉപയോഗിച്ച് ഗെയിം ആക്സസിബിൾ ആക്കുക.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) ഇവിടെ കൂടുതൽ പഠിക്കൂ.
+
+## 🚀 ചാലഞ്ച്
+
+നിങ്ങളുടെ ടൈപ്പിംഗ് ഗെയിം അടുത്ത നിലയിലേക്കു കൂട്ടാൻ തയ്യാറാണോ? ഇവന്റ് ഹാൻഡ്ലിംഗ് & DOM മാനിപुलेഷൻ കൂടുതൽ ആഴത്തിലുള്ള അറിവിനായി ഈ വർദ്ധിപ്പിച്ച സവിശേഷതകൾ പരീക്ഷിക്കൂ:
+
+**കൂടുതൽ പ്രവർത്തനങ്ങൾ ചേർക്കുക:**
+
+| സവിശേഷത | വിവരണം | പരിശീലനം കിട്ടുന്നത് |
+|---------|-------------|------------------------|
+| **ഇൻപുട്ട് നിയന്ത്രണം** | പൂർത്തിയായപ്പോൾ `input` ഇവന്റ് ലിസ്റ്റണർ ഡിസ്എബിള് ചെയ്ത്, ബട്ടൺ ക്ലിക്കിൽ അത് വീണ്ടും എനേബിൾ ചെയ്യുക | ഇവന്റ് മാനേജ്മെന്റ് & സ്റ്റേറ്റ് നിയന്ത്രണം |
+| **UI സ്റ്റേറ്റ് മാനേജ്മെന്റ്** | കളിക്കാരൻ ഉദ്ധരണം പൂർത്തിയാക്കിയാൽ ടൈപ് ബോക്സ് ഡിസ്എബിള് ചെയ്യുക | DOM പ്രോപ്പർട്ടി മാനിപുലേഷൻ |
+| **മോഡൽ ഡയലോഗ്** | വിജയം മെസേജ് അടങ്ങിയ മോഡൽ ഡയലോഗ് പ്രദർശിപ്പിക്കുക | മുൻനിര UI പാറ്റേണുകൾ & ആക്സസിബിലിറ്റി |
+| **ഹൈ സ്കോർ സിസ്റ്റം** | `localStorage` ഉപയോഗിച്ച് ഹൈ സ്കോർ സൂക്ഷിക്കുക | ബ്രൗസർ സ്റ്റോറേജ് APIകൾ & ഡാറ്റ സ്ഥിരത |
+
+**നിർവ്വഹണ ടിപ്പുകൾ:**
+- സ്ഥിരതയ്ക്കായി `localStorage.setItem()`, `localStorage.getItem()` പഠിക്കുക
+- ഇവന്റ് ലിസ്റ്റണർ ഡൈനാമിക്കും ആയി ചേർക്കുന്നതിനും നീക്കം ചെയ്യുന്നതിലും പരിശീലിക്കുക
+- HTML dialog ഘടകങ്ങൾ അല്ലെങ്കിൽ CSS മോഡൽ പാറ്റേണുകൾ പരിശോദിക്കുക
+- ഫോം നിയന്ത്രണങ്ങൾ ഡിസ്എബിള് ചെയ്ത്, എനേബിള് ചെയ്യുമ്പോൾ ആക്സസിബിലിറ്റി പരിഗണിക്കുക
+
+## പോസ്റ്റ്-ലെക്ചർ ക്വിസ്
+
+[പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/22)
+
+---
+
+## 🚀 നിങ്ങളുടെ ടൈപ്പിംഗ് ഗെയിം മാസ്റ്ററി ടൈംലൈൻ
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ നിങ്ങള് ചെയ്യേണ്ടത്**
+- [ ] വിവിധ ഉദ്ധരണികളോടെ നിങ്ങളുടെ ടൈപ്പിംഗ് ഗെയിം ടെസ്റ്റ് ചെയ്യുക, സുതാര്യമായി പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന്
+- [ ] CSS സ്റ്റൈലിംഗ് പരിശ്രമിക്കുക - ഹൈലൈറ്റ് & പിശക് നിറങ്ങൾ മാറ്റി നോക്കുക
+- [ ] ബ്രൗസറിന്റെ DevTools (F12) തുറന്നു Console കാണുക കളിക്കുമ്പോൾ
+- [ ] ഒരു ഉദ്ധരണം അവസാനം വേഗത്തിൽ തീർക്കാൻ ശ്രമിക്കുക
+
+### ⏰ **ഈ മണിക്കൂറിൽ നിങ്ങൾ സാധിക്കാവുന്നത്**
+- [ ] അറേയിൽ കൂടുതൽ ഉദ്ധരണികൾ ചേർക്കുക (തീർച്ചയായും ഇഷ്ടപുസ്തകങ്ങളിൽ നിന്നോ കൂടുതൽ സിനിമകളിൽ നിന്നോ)
+- [ ] ചാലഞ്ച് സെക്ഷനിൽ നിന്ന് localStorage ഹൈ സ്കോർ സിസ്റ്റം നടപ്പിലാക്കുക
+- [ ] ഓരോ ഗെയിമിനുശേഷം വാക്കുകൾ പ്രತಿ മിനിറ്റിൽ കാണിക്കുന്ന കല്കുലേറ്റർ നടപ്പാക്കുക
+- [ ] ശരിയായ ടൈപ്പ്, പിശക്, പൂർത്തീകരണം തുടങ്ങിയവയ്ക്ക് ഓഡിയോ ഫീൽഡ് ചേർക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ച്ച മുഴുവനായുള്ള യാത്ര**
+- [ ] ഒരേ സമയം ഒരുപ_accessor ഏറ്റവുമുള്ള മൾട്ടിപ്പ്ലെയർ പതിപ്പ് അധിഷ്ഠിതമാക്കുക
+- [ ] വ്യത്യസ്ത ബുദ്ധിമുട്ട് തലങ്ങൾ വേണ്ടി വ്യത്യസ്ത ഉദ്ധരണികൾ ഉപയോഗിക്കുക
+- [ ] ഉദ്ധരണിയുടെ പുരോഗതിയുടെ progress ബാർ ചേർക്കുക
+- [ ] വ്യക്തിഗത സ്ഥിതിവിവരങ്ങൾ ട്രാക്ക് ചെയ്യുന്ന യുസർ അക്കൗണ്ടുകൾ നടപ്പിലാക്കുക
+- [ ] ഉപയോക്താക്കളെ ഇഷ്ടാനുസൃതമായി സ്റ്റൈലിൻഗിന്റെ തീമുകൾ തെരഞ്ഞെടുക്കാം
+
+### 🗓️ **നിങ്ങളുടെ മാസം മുഴുവൻ രൂപांतരം**
+- [ ] യഥാർത്ഥ മാനസിക സ്ഥിതി പരിശീലനത്തിനായി ഒരു ടൈപ്പിംഗ് കോഴ്സ് സൃഷ്ടിക്കുക
+- [ ] ഏത് അക്ഷരങ്ങൾ/വാക്കുകൾ കൂടുതലായ പിശക് സൃഷ്ടിക്കുന്നു എന്നത് വിശകലനം ചെയ്യുന്ന അനലിറ്റിക്സ് നിർമ്മിക്കുക
+- [ ] വിവിധ ഭാഷകൾക്കും കീബോർഡ് ലേ ഔട്ടുകൾക്കും പിന്തുണ ചേർക്കുക
+- [ ] സാഹിത്യമേഖലകളിൽ നിന്നുള്ള ഉദ്ധരണികൾ കോഴ്സിന്റേയും API മുഖേന ഇറക്കുമതി ചെയ്യുക
+- [ ] നിങ്ങളുടെ മെച്ചപ്പെട്ട ടൈപ്പിംഗ് ഗെയിം മറ്റുള്ളവർക്ക് ഉപയോഗിക്കാൻ പൊതുവായി പ്രസിദ്ധീകരിക്കുക
+
+### 🎯 **അവസാന ഇടപാട് പരിശോധന**
+
+**മുന്നോട്ട് പോകുന്നതിന് മുമ്പ്, ഒരു നിമിഷം ആഘോഷിക്കൂ:**
+- ഈ ഗെയിം നിർമ്മിക്കുമ്പോൾ ഏറ്റവും സന്തോഷകരമായ നിമിഷം ഏത്?
+- ഇവന്റ്-ഡ്രിവൻ പ്രോഗ്രാമിംഗ് എങ്ങനെ അനുഭവപ്പെടുന്നു തുടങ്ങി ഇപ്പോൾ എങ്ങനെ?
+- ഈ ഗെയിംക്ക് വ്യക്തമായ ഒരു സവിശേഷത ചേർക്കാൻ നിങ്ങൾ ഏറ്റവും ആഗ്രഹിക്കുന്നത് എന്ത്?
+- ഇവന്റ് കൈകാര്യം ആശയങ്ങൾ മറ്റു പ്രോജക്ടുകളിൽ എങ്ങനെ പ്രയോഗിക്കാമെന്ന് നിങ്ങൾക്കു തോന്നുന്നു?
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ഇവന്റ് പ്രോഗ്രാമിംഗ് ആത്മവിശ്വാസ യാത്ര
+ section ഇന്ന്
+ ഇവന്റുകൾ മനസ്സിലാക്കൽ: 3: You
+ UI നിർമ്മിക്കൽ: 4: You
+ ഇവന്റ് ലിസണറുകൾ എഴുതൽ: 5: You
+ section ഈ ആഴ്ച
+ ഫീച്ചറുകൾ ചേർക്കൽ: 4: You
+ പ്രശ്നം തിരുത്തൽ: 5: You
+ UX മെച്ചപ്പെടുത്തൽ: 4: You
+ section അടുത്ത മാസം
+ സങ്കീർണ്ണ ആപ്പുകൾ നിർമ്മിക്കൽ: 5: You
+ മറ്റുള്ളവരെ പഠിപ്പിക്കൽ: 5: You
+ ഫ്രെയിംവർക്ക് സൃഷ്ടിക്കൽ: 5: You
+```
+> 🌟 **ഓർമ്മിക്കുക**: ഇന്ററാക്ടീവ് വെബ്സൈറ്റുകളും ആപ്ലിക്കേഷനുകളുടെയും പവർ അടങ്ങിയ പ്രധാന ആശയങ്ങൾ നിങ്ങൾ ഈ സമയത്ത് കൈവരിച്ചു. ഇവന്റ്-ഡ്രിവൻ പ്രോഗ്രാമിംഗ് വെബ് ജീവിച്ചിരിക്കുന്നതും പ്രതികരണശേഷിയുള്ളതും ആക്കുന്നു. ഓരോ തവണ നിങ്ങൾ ഒരു ഡ്രോപ്ഡൗൺ മെനു, ടൈപ്പിക്കൽ ഫോർം, ക്ലിക്ക് പ്രതികരിക്കുന്ന ഗെയിം കാണുമ്പോഴും നിങ്ങൾ അതിൻ്റെ മായാജാലം മനസ്സിലാക്കുന്നു. നിങ്ങൾ വെറും കോഡ് പഠിക്കുന്നില്ല - സൂക്ഷ്മവും ആകർഷകവുമായി അനുഭവങ്ങൾ സൃഷ്ടിക്കുന്നു! 🎉
+
+---
+
+## അവലോകനവും സ്വയം അധ്യയനവും
+
+വെബ്ബ് ബ്രൗസറിലൂടെ ഡെവലപ്പറിന് ലഭ്യമായ [സകല ഇവന്റുകളും](https://developer.mozilla.org/docs/Web/Events) വായിച്ച് അവ ഉപയോഗിക്കേണ്ട സാഹചര്യങ്ങൾ ആലോചിക്കുക.
+
+## അസൈന്മെന്റ്
+
+[പുതിയ കീബോർഡ് ഗെയിം സൃഷ്ടിക്കുക](assignment.md)
+
+---
+
+
+**അസാധുതാ പ്രസ്താവന**:
+ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ കൃത്യത ലക്ഷ്യമിടുന്നുവെങ്കിലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റായ വിവരം ഉൾപ്പെടാം എന്ന് മനസിലാക്കണം. അസൽ രേഖയിലെ എഴുത്ത് ഭാഷയിൽ ഉള്ള പ്രമാണം മാത്രമേ അതിന്റേതായ പ്രാമാണികമായ ഉറവിടം ആയി കരുതപ്പെടൂ. പ്രധാനപ്പെട്ട വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർബന്ധമായി നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകുന്ന ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങളുടെ ഉത്തരവാദിത്വം ഇല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/4-typing-game/typing-game/assignment.md b/translations/ml/4-typing-game/typing-game/assignment.md
new file mode 100644
index 000000000..7fd242eaf
--- /dev/null
+++ b/translations/ml/4-typing-game/typing-game/assignment.md
@@ -0,0 +1,57 @@
+
+# പുതിയ കീബോർഡ് ഗെയിം സൃഷ്ടിക്കുക
+
+## നിർദ്ദേശങ്ങൾ
+
+ടൈപ്പിംഗ് ഗെയിമുമായി ഇവന്റ്-ഡ്രിവൻ പ്രോഗ്രാമിങ്ങിന്റെ അടിസ്ഥാനങ്ങൾ നിങ്ങൾ കൈക്കൊണ്ടതോടെ, നിങ്ങളുടെ സൃഷ്ടിപരംവശം പുറത്തുവരുമ്പോൾ! ഇവന്റ് ഹാൻഡ്ലിംഗ്, DOM മാനിപ്പുലേഷൻ, ഉപയോക്തൃ ഇടപെടൽ മേൽനോട്ട പാറ്റേണുകൾ എന്നിവയിലെ നിങ്ങളുടെ മനസിലാക്കലുകൾ പ്രദർശിപ്പിക്കുന്ന കീബോർഡ് അടിസ്ഥാനത്തിലുള്ള നിങ്ങളുടെ സ്വന്തം ഒരു ഗെയിം ഡിസൈൻ ചെയ്യുകയും നിർമ്മിക്കുകയുമാണ് ഇത്.
+
+കീബോർഡ് ഇവന്റുകൾ ഉപയോഗിച്ച് പ്രത്യേക പ്രവൃത്തികൾ പൂർത്തിയാക്കുന്ന ഒരു ചെറിയ ഗെയിം സൃഷ്ടിക്കുക. ഇത് വ്യത്യസ്ത തരം ടൈപ്പിംഗ് ഗെയിം ആകാം, കീയിടലുകളിൽ സ്ക്രീനിൽ പിക്സലുകൾ ചിത്രീകരിക്കുന്ന ആർട്ട് ആപ്ലിക്കേഷൻ ആകാം, അറോറുകൾ നിയന്ത്രിക്കുന്ന ഒരു ലളിതമായ ആർകേഡ് ശൈലിയുടെ ഗെയിം ആകാം, അല്ലെങ്കിൽ നിങ്ങൾക്ക് സങ്കല്പിക്കാവുന്ന മറ്റ് സൃഷ്ടിപരമായ ആശയങ്ങളായിരിക്കും. സൃഷ്ടിപരമാകുകയായി വിചാരിക്കുകയും വ്യത്യസ്ത കീകൾ വ്യത്യസ്ത പ്രവൃത്തികൾ ട്രിഗർ ചെയ്യുമ്പോൾ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് ധാരണയാക്കുക!
+
+**നിങ്ങളുടെ ഗെയിം ഉൾപ്പെടുത്തേണ്ടത്:**
+
+| ലാഭം | വിവരണം | ഉദ്ദേശ്യം |
+|-------------|-------------|---------|
+| **ഇവന്റ് ലിസണറുകൾ** | കുറഞ്ഞത് 3 വ്യത്യസ്ത കീബോർഡ് ഇവന്റുകൾക്ക് പ്രതികരിക്കുക | ഇവന്റ് ഹാൻഡ്ലിംഗിന്റെ മനസിലാക്കൽ പ്രദർശിപ്പിക്കുക |
+| **ദൃശ്യ പ്രതികരണം** | ഉപയോക്തൃ ഇൻപുട്ടിന് ഉടനെ ദൃശ്യ പ്രതികരണം നൽകുക | DOM മാനിപ്പുലേഷനിലെ നൂതനത കാണിക്കുക |
+| **ഗെയിം ലζίക്** | സ്കോർ ചെയ്യൽ, ലെവലുകൾ, അല്ലെങ്കിൽ പുരോഗതി മെക്കാനിസങ്ങൾ ഉൾപ്പെടുത്തുക | അപ്ലിക്കേഷൻ അവസ്ഥ നടപ്പാക്കൽ അഭ്യാസിക്കുക |
+| **ഉപയോക്തൃ ഇന്റർഫേസ്** | വ്യക്തമായ നിർദ്ദേശങ്ങളും സൗഹൃദ നിയമനിർമ്മിതികളും | ഉപയോക്തൃ അനുഭവ രൂപകല്പനാ നൈപുണ്യങ്ങൾ വികസിപ്പിക്കുക |
+
+**പ്രവർത്തനപാരമായ സൃഷ്ടിപരമായ ആശയങ്ങൾ:**
+- **റിദം ഗെയിം**: കളിക്കാർ സംഗീതത്തിലോ ദൃശ്യ സൂചനകളിലോ വിരുദ്ധമായി കീകൾ അമർത്തുക
+- **പിക്സൽ ആർട്ട് ക്രിയേറ്റർ**: വ്യത്യസ്ത കീകൾ വ്യത്യസ്ത നിറങ്ങളും മാതൃകകളും പെയിന്റ് ചെയ്യുന്നു
+- **വേഡ് ബിൽഡർ**: കളിക്കാർ പ്രത്യേക ക്രമത്തിൽ അക്ഷരങ്ങൾ ടൈപ്പ് ചെയ്ത് വാക്കുകൾ സൃഷ്ടിക്കുന്നു
+- **സ്നേക്ക് ഗെയിം**: അറോഷർ കീകൾ ഉപയോഗിച്ച് ഒരു സ്നേക്ക് നിയന്ത്രിച്ച് ഇനങ്ങൾ ശേഖരിക്കുക
+- **മ്യൂസിക് സിന്തസൈസർ**: വ്യത്യസ്ത കീകൾ വ്യത്യസ്ത സംഗീത നോട്ടുകൾ അല്ലെങ്കിൽ ശബ്ദങ്ങൾ വായിക്കുക
+- **സ്പീഡ് ടൈപ്പിംഗ് വകഭേദങ്ങൾ**: വിഭാഗം-നിർദ്ദിഷ്ട ടൈപ്പിംഗ് (പ്രോഗ്രാമിംഗ് പദങ്ങൾ, വിദേശ ഭാഷകൾ)
+- **കീബോർഡ് ഡ്രമ്മർ**: വ്യത്യസ്ത കീകൾ drum ശബ്ദങ്ങൾക്ക് മാപ്പ് ചെയ്ത് ബീറ്റ് സൃഷ്ടിക്കുക
+
+**അടിസ്ഥാന നിർദ്ദേശങ്ങൾ:**
+- **സാഹചര്യം** ലളിതമായി തുടങ്ങുകയും ഘടന ക്രമാനുസൃതമാക്കുകയും ചെയ്യുക
+- **മനോഹരവും പ്രതികരണമേറിയും ആയ നിയന്ത്രണങ്ങൾ** ലക്ഷ്യമാക്കുക
+- **ഗെയിം അവസ്ഥയും കളിക്കാരുടെ പുരോഗതിയും വ്യക്തമാക്കുന്ന ദൃശ്യ സൂചനകൾ ഉൾപ്പെടുത്തുക**
+- **വ്യത്യസ്ത ഉപയോക്താക്കളുമായി ഗെയിം പരീക്ഷിച്ച് അനുഭവസുലഭമാക്കുക**
+- **ഇവന്റ് ഹാൻഡ്ലിംഗ് തന്ത്രം വിശദീകരിക്കുന്ന মন্তব্যങ്ങൾ ഉപയോഗിച്ച് കോഡ് രേഖപ്പെടുത്തുക**
+
+## മൂല്യനിർണയം
+
+| മാനദണ്ഡം | മാതൃകാത്മകം | മതിയായ | മെച്ചപ്പെടുത്തൽ ആവശ്യമാണ് |
+| -------- | --------- | -------- | ----------------- |
+| **പ്രവർത്തനം** | ബഹുമുഖ സവിശേഷതകളുള്ള പൂര്ണമായ, അയച്ചുയരുന്ന ഗെയിം | കീബോർഡ് ഇവന്റ് ഹാൻഡ്ലിംഗ് പ്രകടിപ്പിക്കുന്ന അടിസ്ഥാന സവിശേഷതകളുള്ള പ്രവർത്തനക്ഷമമായ ഗെയിം | പരിമിത സൗകര്യങ്ങളുള്ള അല്ലെങ്കിൽ ഗൗരവമായ പിഴവുകൾ ഉള്ള ഏറ്റവും ലളിതമായ നടപ്പാക്കലുകൾ |
+| **കോഡ് ഗുണമേന്മ** | മികച്ച രീതിയിൽ ഒർഗനൈസ്ഡ്, വിശദീകരണങ്ങളുള്ള, മികച്ച പ്രായോഗികതകളും മറ്റും ഉള്ള കാര്യക്ഷമമായ ഇവന്റ് ഹാൻഡ്ലിംഗ് ഉപയോഗിക്കുന്ന കോഡ് | ഇവന്റ് ലിസണറുകൾക്കും DOM മാനിപ്പുലേഷനും ശരിയായ ഉപയോഗം ഉറപ്പു വരുത്തുന്ന ശുദ്ധവും വായിക്കാൻ എളുപ്പവുമായ കോഡ് | ചില സംවිധാന പ്രശ്നങ്ങൾ അല്ലെങ്കിൽ കാര്യക്ഷമമല്ലാത്ത നടപ്പാക്കലുകൾ ഉൾപ്പെടുന്ന അടിസ്ഥാന കോഡ് ഘടന |
+| **ഉപയോക്തൃ അനുഭവം** | intuitiv കൺട്രോളുകൾ, വ്യക്തമായ പ്രതികരണം, പ്രൊഫഷണൽ തോന്നിക്കുന്ന ആകർഷകമായ ഗെയിംപ്ലേ | ഫംഗ്ഷണൽ ഇന്റർഫേസ്, മതിയായ ഉപയോക്തൃ മാർഗനിർദ്ദേശവും പ്രതികരണക്ഷമവും കൺട്രോളുകളും | അടിസ്ഥാന ഇന്റർഫേസ്, വ്യക്തമല്ലാത്ത നിർദ്ദേശങ്ങൾ, അല്ലെങ്കിൽ മെച്ചമില്ലാത്ത പ്രതികരണക്ഷമത |
+| **സൃഷ്ടിപരത്വം** | കീബോർഡ് ഇവന്റുകളുടെ നവീകരണ ഉപയോഗം കൊണ്ട് യഥാർത്ഥ ആശയം, സൃഷ്ടിപരമായ പ്രശ്ന പരിഹാരങ്ങളോടെ | പൊതു ഗെയിം സാമ്പ്രീതികൾക്കുള്ള രസകരമായ വ്യത്യാസം, നല്ല ഇവന്റ് ഹാൻഡ്ലിംഗ് ഉപയോഗം | അടിസ്ഥാന ആശയത്തിന്റെ ലളിതമായ നടപ്പാക്കലിൽ വിശാലമായ സൃഷ്ടിപരമാകൽ കുറവോടെ |
+
+---
+
+
+**പരിചിതീകരണം**:
+ഈ പ്രമാണം AI അർത്ഥം പരിഭാഷാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തു. നമുക്കു കൃത്യതയിലുള്ള ശ്രമമുണ്ടെങ്കിലും, യന്ത്രം ചെയ്ത പരിഭാഷയിൽ തവളപ്പിഴവുകൾ അല്ലെങ്കിൽ കൃത്യതക്കുറവ് ഉണ്ടാകാമെന്നുള്ളത് മനസ്സിലാക്കുക. പ്രമാണത്തിന്റെ മാതൃഭാഷയിലെ ഓറിയിജിനൽ പതിപ്പ് പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കണം. നിർണ്ണായകമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മാനുഷിക പരിഭാഷ ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകുന്ന തെറ്റായ ബോധങ്ങൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/1-about-browsers/README.md b/translations/ml/5-browser-extension/1-about-browsers/README.md
new file mode 100644
index 000000000..94f84804d
--- /dev/null
+++ b/translations/ml/5-browser-extension/1-about-browsers/README.md
@@ -0,0 +1,555 @@
+
+# ബ്രൗസർ എക്സ്റ്റെൻഷൻ പ്രോജക്ട് ഭാഗം 1: ബ്രൗസറുകളെക്കുറിച്ചു മുഴുവന്
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ബ്രൗസർ എക്സ്റ്റെൻഷൻ വികസന യാത്ര
+ section അടിസ്ഥാനം
+ ബ്രൗസറുകൾ മനസിലാക്കുക: 3: Student
+ എക്സ്റ്റെൻഷൻ തരങ്ങൾ പഠിക്കുക: 4: Student
+ ഡെവലപ്പ്മെന്റ് സജ്ജീകരിക്കുക: 4: Student
+ section വികസനം
+ ഇന്റർഫേസ് നിർമ്മിക്കുക: 4: Student
+ ഫംഗ്ഷണാലിറ്റി ചേർക്കുക: 5: Student
+ ഡാറ്റ കൈകാര്യം ചെയ്യുക: 5: Student
+ section സംയോജനം
+ ബ്രൗസറിൽ പരീക്ഷിക്കുക: 5: Student
+ പ്രശ്നങ്ങൾ ഡീബഗ് ചെയ്യുക: 4: Student
+ അനുഭവം മെച്ചപ്പെടുത്തുക: 5: Student
+```
+
+> സ്കെച്ച്നോട്ട് [Wassim Chegham](https://dev.to/wassimchegham/ever-wondered-what-happens-when-you-type-in-a-url-in-an-address-bar-in-a-browser-3dob)ലെ
+
+## പ്രീ-ലക്ചർ ക്വിസ്
+
+[പ്രീ-ലക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/23)
+
+### പരിചയം
+
+ബ്രൗസർ എക്സ്റ്റെൻഷനുകൾ നിങ്ങളുടെ വെബ് ബ്രൗസിംഗ് അനുഭവം മെച്ചപ്പെടുത്തുന്ന മിനി ആപ്ലിക്കേഷനുകളാണ്. ടിം ബേർണേഴ്സ്-ലിയുടെ സംവേദനാത്മക വെബിന്റെ ആദിത്യ കാഴ്ചപ്പാടുപോലെ, എക്സ്റ്റെൻഷനുകൾ ലളിതമായ ഡോക്യുമെന്റ് കാണുന്നതിനെക്കാൾ വരെ ബ്രൗസറിന്റെ ശേഷികളെ വ്യാപിപ്പിക്കുന്നു. നിങ്ങളുടെ അക്കൗണ്ടുകൾ സുരക്ഷിതമാക്കുന്ന പാസ്വേഡ് മാനേജരുകളിൽ നിന്ന് ഡിസൈനർമാർക്ക് തണുത്ത നിറങ്ങൾ ലഭ്യമാക്കുന്ന കളർ പിക്കർമാരിലേക്ക്, എക്സ്റ്റെൻഷനുകൾ പ്രതിദിനം നേരിടുന്ന ബ്രൗസിംഗ് വെല്ലുവിളികൾ പരിഹരിക്കുന്നു.
+
+നിങ്ങളുടെ ആദ്യ എക്സ്റ്റെൻഷൻ നിർമ്മിക്കാനുള്ള മുന്പ്, ബ്രൗസറുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് മനസ്സിലാക്കാം. അലക്സാണ്ടർ ഗ്രഹാം ബെല്ലിനു ടെലിഫോൺ കണ്ടുപിടിക്കുന്നതിന് മുമ്പ് ശബ്ദ സംപ്രേഷണം മനസിലാകേണ്ടതുപോലെ, ബ്രൗസറിന്റെ അടിസ്ഥാനങ്ങൾ അറിവുള്ളത് നിലവിലുള്ള ബ്രൗസർ സംവിധാനങ്ങളോട് സുഗമമായി സംയോജിപ്പിക്കുന്ന എക്സ്റ്റെൻഷനുകൾ സൃഷ്ടിക്കാൻ സഹായിക്കും.
+
+ഈ പാഠത്തിന്റെ അവസാനം, നിങ്ങൾ ബ്രൗസർ ആർക്കിടെക്ചർ മനസ്സിലാക്കി നിങ്ങളുടെ ആദ്യ എക്സ്റ്റെൻഷൻ നിർമ്മിക്കാൻ തുടങ്ങിയിരിക്കുമെന്ന് ഉറപ്പാക്കാം.
+
+```mermaid
+mindmap
+ root((Browser Architecture))
+ Core Components
+ Rendering Engine
+ JavaScript Engine
+ Network Stack
+ Storage APIs
+ User Interface
+ Address Bar
+ Tab Management
+ Bookmarks
+ Extension Icons
+ Extension System
+ Manifest Files
+ Content Scripts
+ Background Pages
+ Popup Windows
+ Security Model
+ Same-Origin Policy
+ Permissions API
+ Content Security
+ Isolated Worlds
+ Development Tools
+ DevTools Integration
+ Debug Console
+ Performance Monitor
+ Extension Inspector
+```
+## വെബ് ബ്രൗസറുകൾ മനസ്സിലാക്കുക
+
+ഒരു വെബ് ബ്രൗസർ അടിസ്ഥാനപരമായി ഒരു സങ്കീർണ്ണമായ ഡോക്യുമെന്റ് വ്യാഖ്യാതാവാണ്. നിങ്ങൾ അഡ്രസ് ബാറിൽ "google.com" type ചെയ്യുന്നപ്പോൾ, ബ്രൗസർ നിരവധി പ്രവർത്തനങ്ങൾ നടത്തുന്നു - ലോകമെമ്പാടുമുള്ള സെർവറുകളിൽ നിന്നുള്ള ഉള്ളടക്കം അഭ്യർത്ഥിച്ച്, പിന്നീട് ആ കോഡ് വിശകലനം ചെയ്ത് നിങ്ങൾ കാണുന്ന സംവേദനാത്മക വെബ് പേജുകളായി മാറ്റുന്നു.
+
+ഈ പ്രക്രിയ 1990-ൽ ടിം ബേർണേഴ്സ്-ലിയുടെ രൂപകല്പന ചെയ്ത ആദ്യ വെബ് ബ്രൗസർ, WorldWideWeb, എല്ലാവർക്കും ഹൈപ്പർലിങ്കുചെയ്ത ഡോക്യുമെന്റുകൾ ലഭ്യമാക്കുന്നതിന്റെ സമാനത ആണ്.
+
+✅ **ചെറിയ ചരിത്രം**: ആദ്യ ബ്രൗസർ 'WorldWideWeb' എന്നായിരുന്നു, 1990-ൽ സാർ ടിമോത്തി ബേർണേഴ്സ്-ലിയുടെ സൃഷ്ടി.
+
+
+> ചില പ്രാരംഭ ബ്രൗസറുകൾ, [Karen McGrane](https://www.slideshare.net/KMcGrane/week-4-ixd-history-personal-computing) വഴി
+
+### ബ്രൗസറുകൾ വെബ് ഉള്ളടക്കം എങ്ങനെ പ്രോസസ്സുചെയ്യുന്നു
+
+ഒരു URL type ചെയ്ത ശേഷം ഒരു വെബ് പേജ് കാണുന്നതുവരെ നിരവധി സമന്വയപ്പെടുത്തിയ ഘട്ടങ്ങൾ സെക്കന്റുകളിൽ സംഭവിക്കുന്നു:
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant Extension
+ participant DNS
+ participant Server
+
+ User->>Browser: URL ടൈപ്പ് ചെയ്ത് Enter അമർത്തുന്നു
+ Browser->>Extension: beforeRequestเหต്ุയതി ട്രിഗർ ചെയ്യുക
+ Extension->>Extension: URL മാറ്റം ആവശ്യമാണോ എന്ന് പരിശോധിക്കുക
+ Browser->>DNS: സെർവർ ഐപി വിലാസം തിരയുന്നു
+ DNS->>Browser: ഐപി വിലാസം നൽകുന്നു
+ Browser->>Server: വെബ് പേജ് ഉള്ളടക്കം അഭ്യർത്ഥിക്കുന്നു
+ Server->>Browser: HTML, CSS, JavaScript അയയ്ക്കുന്നു
+ Browser->>Extension: beforeResponseเหต്ุയതി ട്രിഗർ ചെയ്യുക
+ Extension->>Extension: ഉള്ളടക്കം ആവശ്യമായെങ്കിൽ മാറ്റുക
+ Browser->>User: പൂർണമായ വെബ് പേജ് റેન્ડർ ചെയ്യുന്നു
+ Extension->>User: എക്സ്റ്റൻഷൻ UI അപ്ഡേറ്റുകൾ കാണിക്കുക
+```
+**ഈ പ്രക്രിയ എന്ത് ചെയ്യും:**
+- **URL** മനുഷ്യർക്ക് വായിക്കാൻ കഴിയുന്നതിനേ DNS ലുക്കപ്പ് വഴി സെർവർ IP വിലാസമായി മാറ്റുന്നു
+- **സുരക്ഷിത ബന്ധം സ്ഥാപിക്കുന്നു** HTTP അഥവാ HTTPS പ്രോട്ടോകോളുകൾ ഉപയോഗിച്ച് വെബ് സെർവറുമായി
+- **വിശിഷ്ട വെബ് പേജ് ഉള്ളടക്കം** സെർവറിൽ നിന്ന് അഭ്യർത്ഥിക്കുന്നു
+- **HTML മാർക്കപ്പ്, CSS സ്റ്റൈലിംഗ്, ജാവാസ്ക്രിപ്റ്റ് കോഡ്** സെർവറിൽ നിന്ന് സ്വീകരിക്കുന്നു
+- **എല്ലാ ഉള്ളടക്കവും സംവേദനാത്മകമായ വെബ് പേജായി** മാറ്റുന്നു
+
+### ബ്രൗസർ കോർ ഫീച്ചറുകൾ
+
+അവധി ബ്രൗസറുകൾ പ്രക്രിയയിൽ എക്സ്റ്റെൻഷൻ ഡെവലപ്പർമാർക്ക് ഉപയോഗപ്പെടുത്താവുന്ന ധാരാളം ഫീച്ചറുകൾ ഉണ്ട്:
+
+| ഫീച്ചർ | ലക്ഷ്യം | എക്സ്റ്റെൻഷൻ അവസരങ്ങൾ |
+|---------|---------|------------------------|
+| **Rendering Engine** | HTML, CSS, ജാവാസ്ക്രിപ്റ്റ് പ്രദർശിപ്പിക്കൽ | ഉള്ളടക്ക പരിഷ്ക്കരണം, സ്റ്റൈലിംഗ് സംയോജനം |
+| **JavaScript Engine** | ജാവാസ്ക്രിപ്റ്റ് കോഡ് നിർവഹണം | കസ്റ്റം സ്ക്രിപ്റ്റുകൾ, API ഇടപെടലുകൾ |
+| **Local Storage** | ഡാറ്റ ലൊക്കൽ ആയി സംരക്ഷിക്കൽ | ഉപയോക്തൃ പ്രാധാന്യങ്ങൾ, ക്യാഷ് ചെയ്ത ഡാറ്റ |
+| **Network Stack** | വെബ് അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യുന്നു | അഭ്യർത്ഥന നിരീക്ഷണം, ഡാറ്റ വിശകലനം |
+| **Security Model** | ഉപയോക്താക്കളെ ദുഷ്ട ഉള്ളടക്കം നിന്ന് സംരക്ഷിക്കുന്നു | ഉള്ളടക്ക ഫിൽറ്ററിങ്, സുരക്ഷാ മെച്ചപ്പെടുത്തലുകൾ |
+
+**ഈ ഫീച്ചറുകൾ മനസ്സിലാക്കുന്നത് നിങ്ങളെ സഹായിക്കുന്നു:**
+- **എവിടെ ഏറ്റവും വിലക്കേടുള്ളതാണ് എന്ന് കണ്ടെത്തുക** എക്സ്റ്റെൻഷൻ ചേർക്കാനുള്ളിടം
+- **തികച്ചും അനുയോജ്യമായ ബ്രൗസർ API-കൾ തിരഞ്ഞെടുക്കുക** നിങ്ങളുടെ എക്സ്റ്റെൻഷന്റെ പ്രവർത്തനത്തിനായി
+- **ബ്രൗസർ സംവിധാനങ്ങളോടും സംയോജിച്ചുള്ള കാര്യക്ഷമമായ എക്സ്റ്റെൻഷനുകൾ ഡിസൈൻ ചെയ്യുക**
+- **എക്സ്റ്റെൻഷൻ ബ്രൗസർ സുരക്ഷാ മികച്ച രീതികൾ പാലിക്കുന്നതായി ഉറപ്പാക്കുക**
+
+### ക്രോസ്-ബ്രൗസർ ഡെവലപ്മെന്റ് പരിഗണനകൾ
+
+വിവിധ ബ്രൗസറുകൾ നിശ്ചിത സാങ്കേതികവിദ്യകൾ അല്പം വ്യത്യസ്തമായി നടപ്പിലാക്കുന്നു, പ്രോഗ്രാമിങ് ഭാഷകൾ ഒരേ ആൾഗോരിഥം വ്യത്യസ്തമായി കൈകാര്യം ചെയ്യുന്നതുപോലെ. ക്രോം, ഫയർഫോക്സ്, സഫാരി എന്നിവയിൽ ഓരോന്നിലും പ്രത്യേകതകൾ ഉണ്ട്, ഇത് എക്സ്റ്റെൻഷൻ വികസനത്തിൽ ഡെവലപ്പർ ശ്രദ്ധിക്കേണ്ടതാണ്.
+
+> 💡 **പ്രൊ טיפ്**: [caniuse.com](https://www.caniuse.com) ഉപയോഗിച്ച് ഏത് വെബ് സാങ്കേതിക വിദ്യ ബ്രൗസറുകളിൽ പിന്തുണയ്ക്കപ്പെടുന്നുവെന്ന് പരിശോധിക്കുക. ഇത് നിങ്ങളുടെ എക്സ്റ്റെൻഷന്റെ ഫീച്ചറുകൾ പ്ലാൻ ചെയ്യുമ്പോൾ അനമോല്യം.
+
+**എക്സ്റ്റെൻഷൻ ഡെവലപ്മെന്റിനുള്ള പ്രധാന പരിഗണനകൾ:**
+- **ക്രോം, ഫയർഫോക്സ്, എഡ്ജ്** ബ്രൗസറുകളിൽ നിങ്ങളുടെ എക്സ്റ്റെൻഷൻ പരീക്ഷിക്കുക
+- വ്യത്യസ്ത ബ്രൗസർ എക്സ്റ്റെൻഷൻ API-കളും മാനിഫെസ്റ്റ് ഫോർമാറ്റുകളും **അനുസരിക്കുക**
+- വ്യത്യസ്ത പ്രകടന സ്വഭാവങ്ങളും പരിധികളും **കാര്യംകൊണ്ട് കൈകാര്യംചെയ്യുക**
+- ലഭ്യമല്ലാത്ത ബ്രൗസർ-നിഷ്കർഷിത ഫീച്ചറുകൾക്കായി **വ്യാപാര മാർഗ്ഗങ്ങൾ നൽകുക**
+
+✅ **ആനലിറ്റിക്സ്洞察നം**: നിങ്ങളുടെ വെബ് ഡെവലപ്മെന്റ് പ്രോജക്ടുകളിൽ ആനലിറ്റിക്സ് പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്ത് നിങ്ങളുടെ ഉപയോക്താക്കൾ ഏതു ബ്രൗസർ ഉപയോഗിക്കുന്നത് അറിയാം. ഇത് ആദ്യം പിന്തുണയ്ക്കേണ്ട ബ്രൗസറുകളുടെ മുൻഗണന നൽകാൻ സഹായിക്കും.
+
+## ബ്രൗസർ എക്സ്റ്റെൻഷനുകൾ മനസ്സിലാക്കുക
+
+ബ്രൗസർ എക്സ്റ്റെൻഷനുകൾ സാധാരണ വെബ് ബ്രൗസിംഗ് വെല്ലുവിളികൾ പരിഹരിച്ചുകൊണ്ട് ബ്രൗസർ ഇന്റർഫെയ്സിൽ പ്രവർത്തക്ഷമത കൂട്ടുന്നു. ഏറെ സങ്കീർണ്ണമായ മറ്റ് ആപ്ലിക്കേഷനുകൾ അല്ലെങ്കിൽ പ്രവർത്തനപ്രവാഹങ്ങൾ ആവശ്യമില്ലാതെ എക്സ്റ്റെൻഷനുകൾ ഉപകരണങ്ങൾക്കും ഫീച്ചറുകൾക്ക് തൽക്ഷണ പ്രവേശനം നൽകുന്നു.
+
+ഈ ആശയം ആദ്യകാല കമ്പ്യൂട്ടർ പയൻസ് ഡഗ്ലസ് എംഗൽബാർട്ടിന്റെ മനുഷ്യ ശേഷികൾ സാങ്കേതികവിദ്യ ഉപയോഗിച്ച് വർദ്ധിപ്പിക്കാനുള്ള കാഴ്ചപ്പാടിനെ അനുസരിക്കുന്നു - എക്സ്റ്റെൻഷനുകൾ നിങ്ങളുടെ ബ്രൗസറിന്റെ അടിസ്ഥാന പ്രവർത്തക്ഷമത വർദ്ധിപ്പിക്കുന്നു.
+
+```mermaid
+quadrantChart
+ title ബ്രൗസർ എക്സ്റ്റൻഷൻ വിഭാഗങ്ങൾ
+ x-axis ലളിതം --> സങ്കീർത്തം
+ y-axis വ്യക്തിഗത ഉപയോഗം --> പ്രൊഫഷണൽ ടൂളുകൾ
+ quadrant-1 ഡെവലപ്പർ ടൂളുകൾ
+ quadrant-2 എന്റർപ്രൈസ് പരിഹാരങ്ങൾ
+ quadrant-3 വ്യക്തിഗത ഉപകരണങ്ങൾ
+ quadrant-4 ഉൽപ്പാദനക്ഷമത ആപ്ലിക്കേഷനുകൾ
+
+ Ad Blockers: [0.3, 0.2]
+ Password Managers: [0.7, 0.3]
+ Color Pickers: [0.4, 0.8]
+ Code Formatters: [0.8, 0.9]
+ Note Taking: [0.6, 0.5]
+ Video Downloaders: [0.5, 0.2]
+ Time Trackers: [0.7, 0.6]
+ Screenshot Tools: [0.4, 0.4]
+```
+**പ്രസിദ്ധമായ എക്സ്റ്റെൻഷൻ വർഗ്ഗങ്ങളും അവയുടെ പ്രയോജനങ്ങളും:**
+- **പ്രോഡക്ടിവിറ്റി ടൂളുകൾ**: ടാസ്ക് മാനേജർമാർ, നോട്ടെടുക്കൽ ആപ്പുകൾ, സമയം റnowrapട്രാക്കർമാർ നിങ്ങളുടെ സംഘടനയിൽ സഹായിക്കുന്നു
+- **സുരക്ഷാ മെച്ചപ്പെടുത്തലുകൾ**: പാസ്വേര്ഡ് മാനേജർമാർ, അഡ്ബ്ലോക്കറുകൾ, ഗോപനീയതാ ഉപകരണങ്ങൾ നിങ്ങളുടെ ഡാറ്റ സംരക്ഷിക്കുന്നു
+- **ഡെവലപ്പർ ടൂളുകൾ**: കോഡ് ഫോർമാറ്ററുകൾ, കളർ പിക്കറുകൾ, ഡീബഗ്ഗിംഗ് ഉപകരണങ്ങൾ ഡെവലപ്മെന്റ് ലളിതമാക്കുന്നു
+- **ഉള്ളടക്കം മെച്ചപ്പെടുത്തൽ**: വായന മോഡുകൾ, വീഡിയോ ഡൌൺലോഡറുകൾ, സ്ക്രീൻഷോട്ട് ടൂളുകൾ നിങ്ങളുടെ വെബ് അനുഭവം മെച്ചപ്പെടുത്തുന്നു
+
+✅ **പ്രതിഫലന ചോദ്യo**: നിങ്ങളുടെ പ്രിയപ്പെട്ട ബ്രൗസർ എക്സ്റ്റെൻഷനുകൾ ഏതൊക്കെയാണ്? അവ എന്ത് പ്രത്യേക ജോലികൾ ചെയ്യുന്നു, എങ്ങനെ നിങ്ങളുടെ ബ്രൗസിംഗ് അനുഭവം മെച്ചപ്പെടുത്തുന്നു?
+
+### 🔄 **ശൈക്ഷിക പരിശോധന**
+**ബ്രൗസർ ആർക്കിടെക്ചർ മനസ്സിലാക്കൽ**: എക്സ്റ്റെൻഷൻ വികസനത്തിലേക്ക് പോകുന്നതിന് മുമ്പ്, നിങ്ങൾക്ക് കഴിയേണ്ടത്:
+- ✅ ബ്രൗസർ വെബ് അഭ്യർത്ഥനകൾ പ്രോസസ്സുചെയ്യുന്നതിനും ഉള്ളടക്കം എങ്ങനെ പ്രദർശിപ്പിക്കുന്നതും വിശദീകരിക്കുക
+- ✅ ബ്രൗസർ ആർക്കിടെക് ചറിന്റെ പ്രധാന ഘടകങ്ങൾ തിരിച്ചറിയുക
+- ✅ എക്സ്റ്റെൻഷനുകൾ ബ്രൗസർ പ്രവർത്തനക്ഷമതയുമായി എങ്ങനെ സംയോജിപ്പിക്കപ്പെടുന്നു എന്ന് മനസ്സിലാക്കുക
+- ✅ ഉപയോക്താക്കളെ സംരക്ഷിക്കുന്ന സുരക്ഷാ മോഡൽ തിരിച്ചറിയുക
+
+**വേഗമുള്ള സ്വയംപരിശോധന**: URL ടൈപ്പ് ചെയ്ത് ഒരു വെബ് പേജ് കാണുന്നതുവരെ പാത നിങ്ങൾക്ക് പിന്തുടരാം?
+1. **DNS ലുക്കപ്പ്** URL IP വിലാസമായി മാറ്റുന്നു
+2. **HTTP അഭ്യർത്ഥന** സെർവറിൽ നിന്നുള്ള ഉള്ളടക്കം നേടുന്നു
+3. **പാഴ്സിംഗ്** HTML, CSS, ജാവാസ്ക്രിപ്റ്റ് പ്രോസസ്സിംഗ്
+4. **റെൻഡറിംഗ്** അവസാന വെബ് പേജ് പ്രദർശിപ്പിക്കൽ
+5. **എക്സ്റ്റെൻഷനുകൾ** ബഹുമുഖ ഘട്ടങ്ങളിൽ ഉള്ളടക്കം മാറ്റാം
+
+## എക്സ്റ്റെൻഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യൽ, നിയന്ത്രണം
+
+എക്സ്റ്റെൻഷൻ ഇൻസ്റ്റാളേഷൻ പ്രക്രിയ മനസ്സിലാക്കുന്നത് ഉപയോക്തൃ അനുഭവം പ്രതീക്ഷിക്കാനും സഹായിക്കുന്നു. ഇന്നത്തെ ആധുനിക ബ്രൗസറുകളിൽ ഈ പ്രക്രിയ മാനദണ്ഡം പോലെ സാന്ദ്രമായി ഈന്റർഫെയ്സ് രൂപകല്പ്പനയിൽ ചെറിയ വ്യത്യാസങ്ങളോടെ ഉണ്ട്.
+
+
+
+> **പ്രധാനത്തിന്**: നിങ്ങളുടെ സ്വന്തം എക്സ്റ്റെൻഷനുകൾ പരീക്ഷിക്കുമ്പോൾ ഡെവലപ്പർ മോഡ് സ്വിച്ച് ഓണാക്കി മറ്റു സ്റ്റോറുകളിൽ നിന്ന് എക്സ്റ്റെൻഷനുകൾ അനുവദിക്കുക.
+
+### ഡെവലപ്പ്മെന്റ് എക്സ്റ്റൻഷൻ ഇൻസ്റ്റാളേഷൻ പ്രക്രിയ
+
+സ്വന്തം എക്സ്റ്റെൻഷനുകൾ വികസിപ്പിക്കുകയും പരീക്ഷിക്കുകയും ചെയ്യുമ്പോൾ ഈ പ്രവൃത്തി പ്രവാഹം പിന്തുടരുക:
+
+```mermaid
+flowchart TD
+ A[കോഡ് എഴുതുക] --> B[വിസ്താരമാറ്റം നിർമ്മിക്കുക]
+ B --> C{ആദ്യമായി ഇൻസ്റ്റാൾ ചെയ്യാമോ?}
+ C -->|അതെ| D[അൺപാക്ക്ഡ് ലോഡ് ചെയ്യുക]
+ C -->|ഇല്ല| E[വിസ്താരമാറ്റം പുനഃലോഡ് ചെയ്യുക]
+ D --> F[ഫังก്ഷന്ലിറ്റി പരീക്ഷിക്കുക]
+ E --> F
+ F --> G{ശരിയായി പ്രവർത്തിക്കുന്നുവോ?}
+ G -->|ഇല്ല| H[പിശകുകൾ ഡീബഗ് ചെയ്യുക]
+ G -->|അതെ| I[ഉപയോഗങ്ങൾക്ക് തയ്യാറാണ്]
+ H --> A
+ I --> J[സ്റ്റോറിലേക്ക് പ്രസിദ്ധീകരിക്കുക]
+
+ style A fill:#e1f5fe
+ style F fill:#e8f5e8
+ style I fill:#f3e5f5
+ style J fill:#fff3e0
+```
+```bash
+# ഘട്ടം 1: നിങ്ങളുടെ എക്സ്റ്റൻഷൻ നിർമ്മിക്കുക
+npm run build
+```
+
+**ഈ കമാൻഡ് എന്ത് ചെയ്യും:**
+- **ബ്രൗസർ പരിശീലിക്കാവുന്ന ഫയലുകളായി** നിങ്ങളുടെ സോഴ്സ് കോഡ് കമ്പൈൽ ചെയ്യുന്നു
+- **ജാവാസ്ക്രിപ്റ്റ് മാഡ്യൂളുകൾ** മികച്ച പാക്കേജുകളായി കൂട്ടിച്ചേർക്കുന്നു
+- **അവസാന എക്സ്റ്റെൻഷൻ ഫയലുകൾ** `/dist` ഫോൾഡറിൽ സൃഷ്ടിക്കുന്നു
+- **ഇൻസ്റ്റാളേഷൻ, ടെസ്റ്റിംഗ് വേണ്ടി** എക്സ്റ്റെൻഷൻ തയ്യാറാക്കുന്നു
+
+**പടി 2: ബ്രൗസർ എക്സ്റ്റെൻഷൻ പരിപാലന പേജ് തുറക്കുക**
+1. നിങ്ങളുടെ ബ്രൗസറിന്റെ എക്സ്റ്റെൻഷൻ മാനേജ്മെന്റ് പേജ് **തുറക്കുക**
+2. മുകളിൽ വലതുവശം "Settings and more" ബട്ടൺ (`...` ഐക്കൺ) **ക്ലിക്ക് ചെയ്യുക**
+3. ഡ്രോപ്പ്ഡൗൺ മെനുവിൽ നിന്ന് "Extensions" **തിരഞ്ഞെടുക്കുക**
+
+**പടി 3: നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്യുക**
+- **പുതിയ ഇൻസ്റ്റാളേഷനുകൾക്കായി**: `load unpacked` തിരഞ്ഞെടുക്കുകയും `/dist` ഫോൾഡർ തിരഞ്ഞെടുക്കുകയും ചെയ്യുക
+- **അപ്ഡേറ്റുകൾക്കായി**: ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്ത എക്സ്റ്റെൻഷന്റെ അടുത്തുള്ള `reload` ക്ലിക്ക് ചെയ്യുക
+- **പരിശോധനയ്ക്കായി**: കൂടുതൽ ഡീബഗ്ഗിംഗ് ഫീച്ചറുകൾക്ക് "Developer mode" എനേബിൾ ചെയ്യുക
+
+### പ്രൊഡക്ഷൻ എക്സ്റ്റെൻഷൻ ഇൻസ്റ്റാളേഷൻ
+
+> ✅ **കുറിപ്പ്**: ഈ ഡെവലപ്പ്മെന്റ് നിർദ്ദേശങ്ങൾ നിങ്ങളുടെ സ്വന്തം നിർമ്മിച്ച എക്സ്റ്റെൻഷനുകൾക്കായേയുള്ളതാണ്. പ്രസിദ്ധീകരിച്ച എക്സ്റ്റെൻഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ ഔദ്യോഗിക ബ്രൗസർ എക്സ്റ്റെൻഷൻ സ്റ്റോറുകൾ സന്ദർശിക്കുക, എ.ഗ., [Microsoft Edge Add-ons store](https://microsoftedge.microsoft.com/addons/Microsoft-Edge-Extensions-Home).
+
+**വ്യത്യാസം മനസ്സിലാക്കുക:**
+- **ഡെവലപ്പ്മെന്റ് ഇൻസ്റ്റാളേഷനുകൾ** വികസനത്തിനിടെ പ്രസിദ്ധീകരിക്കാത്ത എക്സ്റ്റെൻഷനുകൾ പരിശോധന നടത്താൻ അനുവദിക്കുന്നു
+- **സ്റ്റോർ ഇൻസ്റ്റാളേഷനുകൾ** പരിശാലനം കഴിഞ്ഞ പ്രസിദ്ധീകരിച്ച എക്സ്റ്റെൻഷനുകൾ സ്വയം അപ്ഡേറ്റ് ചെയ്യുന്നതോടൊപ്പം നൽകുന്നു
+- **സൈഡ്ലോഡിങ്** ഔദ്യോഗിക സ്റ്റോറിന് പുറത്തുനിന്നും എക്സ്റ്റെൻഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ അനുവദിക്കുന്നു (ഡെവലപ്പർ മോദ് ആവശ്യമാണ്)
+
+## നിങ്ങളുടെ കാർബൺ പാദച്ചിഹ്നം എക്സ്റ്റെൻഷൻ നിർമ്മിക്കൽ
+
+നിങ്ങളുടെ പ്രദേശത്തിന്റെ ഊർജ്ജ ഉപയോഗത്തിന്റെ കാർബൺ പാദം പ്രദർശിപ്പിക്കുന്ന ഒരു ബ്രൗസർ എക്സ്റ്റെൻഷൻ സൃഷ്ടിക്കും. ഈ പ്രോജക്റ്റ് എക്സ്റ്റെൻഷൻ വികസനത്തിന്റെ അടിസ്ഥാന സിദ്ധാന്തങ്ങൾ പ്രദർശിപ്പിക്കുന്നതായും പരിസ്ഥിതി ബോധവൽക്കരണത്തിന് പ്രായോഗികമായ ഉപകരണം ഒരുക്കുന്നതായും സേവിക്കും.
+
+ജോൺ ഡ്യൂയിയുടെ വിദ്യാഭ്യാസ സിദ്ധാന്തങ്ങൾ പോലെ "നടന്ന് പഠിക്കുക" എന്ന തത്വം പിന്തുടരുന്ന സമീപനമാണ് ഇത് - സാങ്കേതിക കഴിവുകളും പ്രവർത്തിപ്പിക്കുന്ന യഥാർത്ഥ ലോക പ്രയോഗങ്ങളിലും സംയോജിപ്പിക്കുന്നു.
+
+### പ്രോജക്റ്റ് ആവശ്യകതകൾ
+
+വർക്ക് ആരംഭിക്കുമ്ബോൾ ആവശ്യമായ വിഭവങ്ങളും ആശ്രിതങ്ങളും ശേഖരിക്കാം:
+
+**ആവശ്യമായ API ആക്സസ്:**
+- **[CO2 Signal API കി](https://www.co2signal.com/)**: നിങ്ങളുടെ ഇമെയിൽ വിലാസം നൽകുക, നിങ്ങളുടെ സൗജന്യ API കീ ലഭിക്കും
+- **[പ്രദേശിക കോഡ്](http://api.electricitymap.org/v3/zones)**: [Electricity Map](https://www.electricitymap.org/map) ഉപയോഗിച്ച് നിങ്ങളുടെ പ്രദേശ കോഡ് കണ്ടെത്തുക (ഉദാ. Boston-ന് 'US-NEISO')
+
+**ഡെവലപ്പ്മെന്റ് ഉപകരണങ്ങൾ:**
+- **[Node.js and NPM](https://www.npmjs.com)**: പ്രോജക്റ്റ് ആശ്രിതങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനുള്ള പാക്കേജ് മാനേജർ
+- **[സ്റ്റാർട്ടർ കോഡ്](../../../../5-browser-extension/start)**: വികസനം ആരംഭിക്കാൻ `start` ഫോൾഡർ ഡൗൺലോഡ് ചെയ്യുക
+
+✅ **കൂടുതൽ പഠിക്കൂ**: നിങ്ങളുടെ പാക്കേജ് മാനേജ്മെന്റ് കഴിവുകൾ മെച്ചപ്പെടുത്താൻ ഈ [സമ്പൂർണമായ Learn മൊഡ്യൂൾ](https://docs.microsoft.com/learn/modules/create-nodejs-project-dependencies/?WT.mc_id=academic-77807-sagibbon) ഉപയോഗിക്കുക
+
+### പ്രോജക്റ്റ് ഘടന മനസ്സിലാക്കൽ
+
+പ്രോജക്റ്റ് ഘടന മനസ്സിലാക്കുന്നത് വികസന ജോലി കാര്യക്ഷമമാക്കുന്നതിന് സഹായിക്കുന്നു. അലക്സാൻഡ്രിയ ലൈബ്രറിയെല്ലാം അറിവ് എളുപ്പത്തിൽ തിരയാൻ ക്രമീകരിക്കപ്പെട്ടതുപോലെ, നല്ല ക്രമീകരിച്ച കോഡ് ബേസ് വികസനം കാര്യക്ഷമമാക്കും:
+
+```
+project-root/
+├── dist/ # Built extension files
+│ ├── manifest.json # Extension configuration
+│ ├── index.html # User interface markup
+│ ├── background.js # Background script functionality
+│ └── main.js # Compiled JavaScript bundle
+├── src/ # Source development files
+│ └── index.js # Your main JavaScript code
+├── package.json # Project dependencies and scripts
+└── webpack.config.js # Build configuration
+```
+
+**പ്രതിയോഗികളുടെ ബോധ്യത്തിൽ ഫയലുകൾ അധികം ചെയ്യുന്നത്:**
+- **`manifest.json`**: എക്സ്റ്റെൻഷന്റെ മmetadata, അനുമതികൾ, എൻട്രി പോയിന്റുകൾ നിർവ്വചിക്കുന്നു
+- **`index.html`**: എക്സ്റ്റെൻഷന് ക്ലിക്ക് ചെയ്തപ്പോൾ കാണുന്ന ഉപയോക്തൃ ഇന്റർഫേസ് സൃഷ്ടിക്കുന്നു
+- **`background.js`**: പശ്ചാത്തല ടാസ്കുകളും ബ്രൗസർ ഇവന്റ് ലിസ്സനറുകളും കൈകാര്യം ചെയ്യുന്നു
+- **`main.js`**: ബിൽഡ് പ്രക്രിയക്ക് ശേഷം അവസാനബന്ധിപ്പിച്ച ജാവാസ്ക്രിപ്റ്റ് ഫയൽ
+- **`src/index.js`**: പ്രധാന വികസന കോഡ്, ഇത് `main.js` ആയി കമ്പൈൽ ചെയ്യപ്പെടുന്നു
+
+> 💡 **സംഘടന ടിപ്**: API കിയും പ്രദേശിക കോഡും സുരക്ഷിതമായ കുറിപ്പിൽ സൂക്ഷിക്കുക. വികസന സമയത്ത് ഈ മൂല്യങ്ങൾ എളുപ്പത്തിൽ കണ്ടെത്താം.
+
+✅ **സുരക്ഷാ കുറിപ്പ്**: നിങ്ങളുടെ API കീകളും സენსിറ്റീവ് ക്രെഡൻഷ്യലുകളും കോഡ് റപ്പോസിറ്ററിയിൽ കമിറ്റ് ചെയ്യരുത്. അടുത്ത ഘട്ടങ്ങളിൽ ഈ സുരക്ഷിത കൈകാര്യം എങ്ങനെ നടത്താമെന്ന് കാണിക്കും.
+
+## എക്സ്റ്റെൻഷൻ ഇന്റർഫേസ് സൃഷ്ടിക്കൽ
+
+ഇപ്പോള് ഉപയോക്തൃ ഇന്റർഫേസ് ഘടകങ്ങൾ നിർമ്മിക്കും. എക്സ്റ്റെൻഷൻ രണ്ട് സ്ക്രീൻ രീതിയിൽ പ്രവര്ത്തിക്കുന്നു: പ്രാരംഭ ക്രമീകരണത്തിനുള്ള കോൺഫിഗറേഷൻ സ്ക്രീൻ, ഡാറ്റ പ്രദർശനത്തിനുള്ള റിസൾട്സ് സ്ക്രീൻ.
+
+ഈ സമീപനം ഇൻറർഫേസ് ഡിസൈനിലെ പ്രോഗ്രസീവ് ഡിസ്ക്ലോഷർ തത്വം പിന്തുടരുന്നു - ലളിതമായ ഓർഡറിൽ വിവരങ്ങളും ഓപ്ഷനുകളും വെളിപ്പെടുത്തി ഉപഭോക്താക്കളെ അമിതമായുള്ള ബാധ്യതയിൽ നിന്ന് രക്ഷിക്കുന്നു.
+
+### എക്സ്റ്റെൻഷൻ കാഴ്ചകൾ അവലോകനം
+
+**സെറ്റപ്പ് കാഴ്ച** - ആദ്യകാല ഉപയോക്തൃ ക്രമീകരണം:
+
+
+**ഫല കാഴ്ച** - കാർബൺ പാദച്ചിഹ്ന ഡാറ്റാ പ്രദർശനം:
+
+
+### ക്രമീകരണ ഫോം നിർമ്മിക്കല്
+
+സെറ്റപ്പ് ഫോം ആദ്യ ഉപയോക്തൃ ഉപയോഗത്തിനിടെ ക്രമീകരണ ഡാറ്റ ശേഖരിക്കുന്നു. ക്രമീകരിച്ചതിനു ശേഷം, ഈ വിവരം ബ്രൗസർ സ്റ്റോറേജിൽ സംരക്ഷിക്കപ്പെടുന്നു ഭാവി സെഷനുകൾക്ക്.
+
+`/dist/index.html` ഫയലിൽ, ഈ ഫോം ഘടന ചേർക്കുക:
+
+```html
+
+```
+
+**ഈ ഫോം എന്ത് ചെയ്യുന്നു:**
+- **സെമാന്റിക് ഫോം ഘടന** ശരിയായ ലേബലുകളും ഇൻപുട്ട് അസോസിയേഷനുകളും ചേർത്ത് സൃഷ്ടിക്കുന്നു
+- മെച്ചപ്പെട്ട ഉപയോക്തൃ അനുഭവത്തിന് ബ്രൗസർ ഓട്ടോ-കമ്പ്ലീറ്റ് ഫംഗ്ഷണാലിറ്റി കഴിയും
+- ജനനത്തിനുമുമ്പ് രണ്ട് ഫീൽഡുകളും പൂരിപ്പിക്കേണ്ടത് ആവശ്യമാണ് (`required` അറ്റ്രിബ്യൂട്ട് ഉപയോഗിച്ച്)
+- ലളിതമായ സ്റ്റൈലിംഗിനും ജാവാസ്ക്രിപ്റ്റ് ലക്ഷ്യമിടുന്നതിനും വിവരിക്കുന്ന ക്ളാസ് നെയിമുകൾ ഉപയോഗിക്കുന്നു
+- എക്സ്റ്റെൻഷൻ ആദ്യം ക്രമീകരിക്കുന്ന ഉപയോക്താക്കള്ക്ക് വ്യക്തമായ നിർദ്ദേശങ്ങൾ നൽകുന്നു
+
+### ഫല പ്രദർശനം നിർമ്മിക്കൽ
+
+അടുത്തത്, കാർബൺ പാദച്ചിഹ്ന ഡാറ്റ പ്രദർശിപ്പിക്കുന്ന ഫലം ഏരിയ സൃഷ്ടിക്കുക. ഫോം താഴെ ഈ HTML ചേർക്കുക:
+
+```html
+
+
loading...
+
+
+
+
Region:
+
Carbon Usage:
+
Fossil Fuel Percentage:
+
+
Change region
+
+```
+
+**ഈ ഘടന നൽകുന്നത്:**
+- **`loading`**: API ഡാറ്റ ലഭിക്കുന്നതിനിടെ ലോഡിംഗ് സന്ദേശം കാണിക്കുന്നു
+- **`errors`**: API വിളികൾ പരാജയപ്പെട്ടാൽ അല്ലെങ്കിൽ ഡാറ്റ അസാധുവായാൽ പിശകുകൾ പ്രദർശിപ്പിക്കുന്നു
+- **`data`**: ഡീബഗ്ഗിംഗിന് കോഴിക്കുള്ള വാസ്തവ ഡാറ്റ സൂക്ഷിക്കുന്നു
+- **`result-container`**: ഉപയോഗപ്രദമായ കാർബൺ പാദച്ചിഹ്ന വിവരങ്ങൾ ഫോർമാറ്റ് ചെയ്ത് കാണിക്കുന്നു
+- **`clear-btn`**: ഉപഭോക്താക്കൾക്ക് പ്രദേശം മാറ്റാനും എക്സ്റ്റെൻഷൻ വീണ്ടും ക്രമീകരിക്കാനും അനുവദിക്കുന്നു
+
+### ബിൽഡ് പ്രക്രിയ സജ്ജമാക്കൽ
+
+ഇപ്പോൾ പ്രോജക്റ്റ് ആശ്രിതങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്ത് ബിൽഡ് പ്രക്രിയ പരീക്ഷിക്കാം:
+
+```bash
+npm install
+```
+
+**ഈ ഇൻസ്റ്റാളേഷൻ പ്രക്രിയ ചെയ്യുന്നത്:**
+- `package.json`ൽ സൂചിപ്പിച്ച വെബ്പാക്കും മറ്റ് ഡെവലപ്പ്മെന്റ് ആശ്രിതങ്ങളും അത下载് ചെയ്യുന്നു
+- ആധുനിക ജാവാസ്ക്രിപ്റ്റ് കമ്പൈലിംഗിനായി ബിൽഡ് ടൂൾചെയ്ന് ക്രമീകരിക്കുന്നു
+- എക്സ്റ്റെൻഷൻ നിർമ്മാണത്തിനും പരീക്ഷണത്തിനും ഡെവലപ്പ്മെന്റ് പരിസരം തയ്യാറാക്കുന്നു
+- കോഡ് ബണ്ട്ലിംഗ്, മെച്ചപ്പെടുത്തൽ, ക്രോസ്-ബ്രൗസർ അനുയോജ്യകത ലഭ്യമാക്കുന്നു
+
+> 💡 **ബിൽഡ് പ്രക്രിയ വിവരം**: വെബ്പാക്ക് `/src/index.js` നിന്നുള്ള നിങ്ങളുടെ സോഴ്സ് കോഡ് `/dist/main.js` ആയി ബണ്ടിൾ ചെയ്യുന്നു. ഈ പ്രക്രിയ പ്രൊഡക്ഷൻ ന്റെ കാണിനും ബ്രൗസർ അനുയോജ്യതയ്ക്ക് ഏറ്റവും അനുയോജ്യമായി കോഡ് മെച്ചപ്പെടുത്തുന്നു.
+
+### നിങ്ങളുടെ പുരോഗതി പരീക്ഷിക്കുക
+
+ഇപ്പോൾ നിങ്ങൾക്ക് നിങ്ങളുടെ എക്സ്റ്റെൻഷൻ പരീക്ഷിക്കാം:
+1. **നടത്തുക** നിങ്ങളുടെ കോഡ് కంపൈൽ ചെയ്യാൻ build കമാൻഡ്
+2. **ലോഡ് ചെയ്യുക** വികസക മോഡ് ഉപയോഗിച്ച് ബ്രൗസറിൽ എക്സ്റ്റൻഷൻ
+3. **സ്ഥിരീകരിക്കുക** ഫॉर्म ശരിയായി പ്രദർശിപ്പിക്കുന്നതും പ്രൊഫഷണലായി കാണപ്പെടുന്നതും
+4. **പരിശോധിക്കുക** എല്ലാ ഫോർം ഘടകങ്ങളും ശരിയായി നിലനിൽക്കുന്നുവെന്ന്, പ്രവർത്തനക്ഷമമാണെന്ന്
+
+**നിങ്ങൾ നേടിയതായി:**
+- **തയാറാക്കി** നിങ്ങളുടെ എക്സ്റ്റൻഷനിന്റെ അടിസ്ഥാന HTML ഘടന
+- **സൃഷ്ടിച്ചു** കോൺഫിഗറേഷൻ, ഫലം ഇന്റർഫേസുകൾ ശ്രേഷ്ടമായ സെമാന്റിക്ക് മാർക്കപ്പുമായി
+- **അട്ടിച്ചെറിഞ്ഞു** ആധുനിക ഡവലപ്പ്മെന്റ് വർക്ക്ഫ്ലോ സ്ഥാപനത്തിൽ നിലവാരപരമായ ടൂളുകൾ ഉപയോഗിച്ച്
+- **തയാറാക്കി** ഇൻററാക്ടീവ് ജാവാസ്ക്രിപ്റ്റ് ഫംഗ്ഷണാലിറ്റി ചേർക്കാനുള്ള ആധാരം
+
+### 🔄 **പഠനപരപരിശോധന**
+**എക്സ്റ്റൻഷൻ വികസന പുരോഗതി**: തുടരെ പോകുന്നതിന് മുമ്പ് നിങ്ങളുടെ അറിവ് പരിശോധിക്കുക:
+- ✅ പ്രോജക്ട് ഘടനയിലെ ഓരോ ഫയലിന്റെയും ഉദ്ദേശ്യം വിശദീകരിക്കാൻ നിങ്ങൾക്ക് സാധിക്കുമോ?
+- ✅ build പ്രക്രിയ നിങ്ങളുടെ സോഴ്സ് കോഡ് എങ്ങനെ പരിവർത്തനം ചെയ്യുന്നതെന്ന് നിങ്ങൾക്ക് മനസ്സിലാണോ?
+- ✅ കോൺഫിഗറേഷനും ഫലങ്ങളും വ്യത്യസ്ത UI വിഭാഗങ്ങളിലേക്ക് തിരിച്ചറിയുന്നതിനുള്ള കാരണം എന്താണ്?
+- ✅ ഫോർം ഘടന അതിന്റെ ഉപയോഗപ്രദതക്കും ലഭ്യതക്കും എങ്ങനെ സഹായമാകുന്നു?
+
+**ഡവലപ്പ്മെന്റ് വർക്ക്ഫ്ലോ ബോധം**: ഇനി നിങ്ങളൊക്കെ അനുസരിച്ചു കഴിയും:
+1. **സാധുവാക്കുക** നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ഇന്റർഫേസിനായി HTML, CSS മാറ്റങ്ങൾ
+2. **നടത്തുക** build കമാൻഡ് നിങ്ങളുടെ മാറ്റങ്ങൾ സംസ്കരിക്കാൻ
+3. **രീലോഡ് ചെയ്യുക** എക്സ്റ്റൻഷൻ ബ്രൗസറിൽ പുതുക്കലുകൾ പരീക്ഷിക്കാൻ
+4. **ഡീബഗ് ചെയ്യുക** ബ്രൗസർ ഡവലപ്പർ ടൂളുകൾ ഉപയോഗിച്ച് പ്രശ്നങ്ങൾ
+
+നിങ്ങൾ ബ്രൗസർ എക്സ്റ്റൻഷൻ വികസനത്തിന് ആദ്യഘട്ടം പൂർത്തിയാക്കി. Wright സഹോദരങ്ങൾ പറക്കുന്നതിന് മുമ്പ് എയറോഡൈനാമിക്സ് മനസ്സിലാക്കേണ്ടതുപോലെ, ഈ അടിസ്ഥാന ആശയങ്ങൾ മനസ്സിലാക്കുന്നത് ഇനി കൂടുതൽ സങ്കീർണമായ ഇടപെടൽ ഫീച്ചറുകൾ നിർമ്മിക്കാൻ സഹായിക്കും.
+
+## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀
+
+ഏജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെ പറയുന്ന അനുബന്ധം പൂർത്തിയാക്കുക:
+
+**വിവരണം:** API കീകൾ, മേഖലാ കോഡുകൾ നൽകുമ്പോൾ ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്താൻ ഫോം സാധുത പരിശോധനയും ഫീഡ്ബാക്കും ചേർക്കുക.
+
+**പ്രോമ്പ്റ്റ്:** API കീ ഫീൽഡ് കുറഞ്ഞത് 20 അക്ഷരങ്ങൾ ഉള്ളതായി പരിശോധിക്കുന്ന, മേഖലാ കോഡ് ശരിയായ ഫോർമാറ്റ് (ഉദാ: 'US-NEISO') പാലിക്കുന്നുവെന്ന് പരിശോധിക്കുന്ന ജാവാസ്ക്രിപ്റ്റ് സാധുത ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കുക. ശരിയായ ഇൻപുട്ടുകൾക്ക് പഴുത്തു പോയ, തെറ്റായവയ്ക്ക് ചുവപ്പ് ബോർഡർ നിറം വിസ്വൽ ഫീഡ്ബാക്കായി നൽകുക. സുരക്ഷാലක්ෂണങ്ങളായി API കീ കാണിച്ചോ മറച്ചോ ചെയ്യാനുള്ള ടോഗിൾ ഫീച്ചറും ചേർക്കുക.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) സംബന്ധിച്ച് കൂടുതൽ അറിയുക.
+
+## 🚀 ചലഞ്ച്
+
+ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ സ്റ്റോർ പരിശോധിച്ച് നിങ്ങളുടെ ബ്രൗസറിൽ ഒന്നാമമായി ഇൻസ്റ്റാൾ ചെയ്യുക. അതിന്റെ ഫയലുകൾ താൽപര്യമുള്ള രീതികളിൽ പരിശോധിക്കുക. നിങ്ങൾ എന്താണ് കണ്ടെത്തുന്നത്?
+
+## പോസ്റ്റ്-ലെക്ചർ ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/24)
+
+## അവലോകനം & സ്വയം പഠനം
+
+ഈ പാഠത്തിൽ നിങ്ങൾ വെബ് ബ്രൗസറിന്റെ ചരിത്രത്തെ കുറിച്ച് കുറച്ച് പഠിച്ചു; ലോകവ്യാപക വെബിന്റെ വെബ് കണ്ടുപിടുത്തക്കാരൻമാർ അതിന്റെ ഉപയോഗത്തെ എങ്ങനെ കണക്കാക്കി എന്നതിൽ കൂടുതൽ അറിയാൻ ഈ അവസരം ഉപയോഗിക്കുക. ചില ഉപകാരപ്രദമായ സൈറ്റുകൾ:
+
+[The History of Web Browsers](https://www.mozilla.org/firefox/browsers/browser-history/)
+
+[History of the Web](https://webfoundation.org/about/vision/history-of-the-web/)
+
+[An interview with Tim Berners-Lee](https://www.theguardian.com/technology/2019/mar/12/tim-berners-lee-on-30-years-of-the-web-if-we-dream-a-little-we-can-get-the-web-we-want)
+
+### ⚡ **അടുത്ത 5 മിനിറ്റുകൾക്കുള്ളിൽ നിങ്ങൾ ചെയ്യാവുന്ന കാര്യങ്ങൾ**
+- [ ] Chrome/Edge എക്സ്റ്റൻഷൻസ് പേജ് (chrome://extensions) തുറന്ന് ഇൻസ്റ്റാൾ ചെയ്ത എക്സ്റ്റൻഷനുകൾ പരിശോധിക്കുക
+- [ ] ഒരു വെബ് പേജ് ലോഡ് ചെയ്യുമ്പോൾ ബ്രൗസറിന്റെ DevTools നെറ്റ്വർക്ക് ടാബ് കാണുക
+- [ ] പേജ് സോഴ്സ് (Ctrl+U) കാണാൻ ശ്രമിക്കുക, HTML ഘടന അവലോകനം ചെയ്യുക
+- [ ] ഏതെങ്കിലും വെബ് പേജ് ഘടകം ഇൻസ്പെക്ട് ചെയ്ത് ദി CSS മാറ്റങ്ങൾ പരീക്ഷിക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നിങ്ങൾ നേടാവുന്ന കാര്യങ്ങൾ**
+- [ ] പോസ്റ്റ്-ലെക്ക്ചർ ക്വിസ് പൂർത്തിയാക്കി ബ്രൗസർ അടിസ്ഥാനങ്ങളിലായി മനസ്കരിക്കുക
+- [ ] ഒരു അടിസ്ഥാന manifest.json ഫയൽ ക്രിയേറ്റ് ചെയ്യുക ബ്രൗസർ എക്സ്റ്റൻഷന്വിനായി
+- [ ] ഒരു ലളിത "Hello World" എക്സ്റ്റൻഷൻ_popup പ്രദർശിപ്പിക്കുന്നതുമായുള്ള നിർമ്മിക്കുക
+- [ ] ഡവലപ്പർ മോഡിൽ നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്ത് പരീക്ഷിക്കുക
+- [ ] ലക്ഷ്യമിടുന്ന ബ്രൗസറിന്റെ എക്സ്റ്റൻഷൻ ഡോക്യുമെന്റേഷൻ പരിശോധിക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചപോലുള്ള എക്സ്റ്റൻഷൻ യാത്ര**
+- [ ] യഥാർത്ഥ ഉപയോഗപ്രദതയുള്ള പ്രവർത്തനക്ഷമമായ ബ്രൗസർ എക്സ്റ്റൻഷൻ പൂരിപ്പിക്കുക
+- [ ] കണ്ടന്റ് സ്രിപ്റ്റുകൾ, ബാക്ക്ഗ്രൗണ്ട് സ്രിപ്റ്റുകൾ, പൊപ്പപ്പ് ഇടപെടലുകൾ പഠിക്കുക
+- [ ] സ്റ്റോറേജ്, ടാബുകൾ, മെസ്സേജിങ് പോലുള്ള ബ്രൗസർ APIs നുദ്ധരണ മുന്പു നേടുക
+- [ ] എക്സ്റ്റൻഷന്റെ ഉപയോക്തൃ സൗഹൃദ ഇന്റർഫേസുകൾ രൂപകല്പന ചെയ്യുക
+- [ ] വ്യത്യസ്ത വെബ്സൈറ്റുകളിൽ, സാഹചര്യങ്ങളിൽ നിങ്ങളുടെ എക്സ്റ്റൻഷൻ പരിശോധിക്കുക
+- [ ] എക്സ്റ്റൻഷൻ ബ്രൗസർ സ്റ്റോറിലേക്ക് പ്രസിദ്ധീകരിക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസാന്തം ബ്രൗസർ വികസനം**
+- [ ] വ്യത്യസ്ത ഉപയോക്തൃ പ്രശ്നങ്ങൾ പരിഹരിക്കുന്ന നീണ്ടവർഗ്ഗ എക്സ്റ്റൻഷനുകൾ നിർമ്മിക്കുക
+- [ ] ഉന്നത ബ്രൗസർ API കളും സുരക്ഷാ മികച്ച രീതികളും പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് എക്സ്റ്റൻഷൻ പ്രോജക്ടുകളിൽ സംഭാവനകൾ നൽകുക
+- [ ] ക്രോസ്-ബ്രൗസർ കംപാറ്റിബിലിറ്റി, പ്രോഗ്രസീവ് എൻഹാൻസ്മെന്റ് കൈവരിക്കുക
+- [ ] മറ്റ് ഡവലപ്പർമാർക്കായി എക്സ്റ്റൻഷൻ വികസന ടൂളുകളും ടെംപ്ലേറ്റുകളും സൃഷ്ടിക്കുക
+- [ ] മറ്റു ഡവലപ്പർമാരെ സഹായിക്കുന്ന എക്സ്റ്റൻഷൻ വിദഗ്ധനായി വളരുക
+
+## 🎯 നിങ്ങളുടെ ബ്രൗസർ എക്സ്റ്റൻഷൻ പ്രാവീണ്യ സമയരേഖ
+
+```mermaid
+timeline
+ title ബ്രൗസർ എക്സ്റ്റൻഷൻ ഡവലപ്മെന്റ് പുരോഗതി
+
+ section അടിസ്ഥാനം (15 നിമിഷം)
+ Browser Understanding: കോർ ഘടന
+ : റെൻഡറിംഗ് പ്രക്രിയ
+ : എക്സ്റ്റൻഷൻ ഇന്റഗ്രേഷൻ പോയിന്റുകൾ
+
+ section സജ്ജീകരണം (20 നിമിഷം)
+ Development Environment: പ്രോജക്ട് ഘടന
+ : ബിൽഡ് ടൂളുകളുടെ കോൺഫിഗറേഷൻ
+ : ബ്രൗസർ ഡവലപ്പർ മിൽഡും
+ : എക്സ്റ്റൻഷൻ ലോഡിംഗ് പ്രക്രിയ
+
+ section ഇന്റർഫേസ് ഡിസൈൻ (25 നിമിഷം)
+ User Experience: HTML ഘടന
+ : CSS സ്റ്റൈലിംഗ്
+ : ഫോം സാധൂകരണം
+ : റെസ്പോൺസീവ് ഡിസൈൻ
+
+ section കോർ ഫംഗ്ഷണാലിറ്റി (35 നിമിഷം)
+ JavaScript Integration: ഇവന്റ് ഹാൻഡ്ലിംഗ്
+ : API ഇടപെടലുകൾ
+ : ഡാറ്റ സംഭരണം
+ : പിശക് കൈകാര്യം
+
+ section ബ്രൗസർ APIകൾ (45 നിമിഷം)
+ Platform Integration: അനുമതി സിസ്റ്റം
+ : സ്റ്റോറേജ് APIകൾ
+ : ടാബ് മാനേജ്മെന്റ്
+ : കോണ്ടക്സ്റ്റ് മെനുകൾ
+
+ section ആധുനിക ഫീച്ചറുകൾ (1 ആഴ്ച)
+ Professional Extensions: പശ്ചാത്തല സ്ക്രിപ്റ്റുകൾ
+ : കണ്ടന്റ് സ്ക്രിപ്റ്റുകൾ
+ : ക്രോസ്-ബ്രൗസർ അനുയോജ്യത
+ : പ്രവർത്തനക്ഷമത മെച്ചപ്പെടുത്തൽ
+
+ section പ്രസിദ്ധീകരണം (2 ആഴ്ച)
+ Distribution: സ്റ്റോർ സമർപ്പണം
+ : അവലോകന പ്രക്രിയ
+ : ഉപയോക്തൃ പ്രതികരണം
+ : അപ്ഡേറ്റ് മാനേജ്മെന്റ്
+
+ section വിദഗ്ധനിര (1 മാസം)
+ Extension Ecosystem: ആധുനിക APIകൾ
+ : സുരക്ഷ മികച്ച വേളകൾ
+ : എന്റർപ്രൈസ് ഫീച്ചറുകൾ
+ : ഫ്രെയിംവർക്ക് ഇന്റഗ്രേഷൻ
+```
+### 🛠️ നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ഡവലപ്പ്മെന്റ് ടൂള്കിറ്റ് സംക്ഷേപം
+
+ഈ പാഠം പൂർത്തിയാക്കിയ ശേഷം നിങ്ങൾക്കുണ്ട്:
+- **ബ്രൗസർ ആർക്കിടെക്ചർ നോളedge**: റൻഡറിംഗ് എൻജിനുകൾ, സുരക്ഷാ മോഡലുകൾ, എക്സ്റ്റൻഷൻ ഇന്റഗ്രേഷൻ മനസ്സിലാക്കൽ
+- **ഡവലപ്പ്മെന്റ് എൻവയൺമെന്റ്**: Webpack, NPM എന്ന ആധുനിക ടൂൾചെയിൻ, ഡീബഗ് കഴിവുകൾ
+- **UI/UX അടിസ്ഥാനങ്ങൾ**: പ്രോഗ്രസീവ് ഡിസ്ക്ലോഷർ പാറ്റേൺ ഉപയോഗിച്ചുള്ള സെമാന്റിക് HTML ഘടന
+- **സുരക്ഷാ ബോധവൽക്കരണം**: ബ്രൗസർ അനുമതികളും സുരക്ഷിത ഡവലപ്പ്മെന്റ് ആചരണങ്ങളും മനസ്സിലാക്കൽ
+- **ക്രോസ്-ബ്രൗസർ ആശയങ്ങൾ**: സായൂഹ്യക്കുറിപ്പുകളും ടെസ്റ്റിങ്ങ് സമീപനങ്ങളും
+- **API ഇന്റഗ്രേഷൻ**: ബാഹ്യ ഡാറ്റ സ്രോതസുകളുമായി പ്രവർത്തിക്കുന്നതിന് മൂലാധാരം
+- **പ്രൊഫഷണൽ വർക്ക്ഫ്ലോ**: വ്യവസായ നിലവാരത്തിലുള്ള വികസന, ടെസ്റ്റിംഗ് രീതികൾ
+
+**യഥാർത്ഥ ലോക അപേക്ഷകൾ**: ഈ നൈപുണ്യങ്ങൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **വെബ് ഡവലപ്പ്മെന്റ്**: സിംഗിൾ-പേജ് അപ്ലിക്കേഷനുകളും പ്രോഗ്രസീവ് വെബ് ആപ്പുകളും
+- **ഡെസ്ക്ക്ടോപ് അപ്ലിക്കേഷനുകൾ**: Electron, വെബ് അധിഷ്ഠിത ഡെസ്ക്ക്ടോപ് സോഫ്റ്റ്വെയർ
+- **മൊബൈൽ ഡവലപ്പ്മെന്റ്**: വിപ്രിത ആപ്പുകളും വെബ് ആധിഷ്ഠിത മൊബൈൽ പരിഹാരങ്ങളും
+- **എന്റർപ്രൈസ് ടൂളുകൾ**: ആന്തരിക ഉൽപാദകത്വം, വർക്ക്ഫ്ലോ ഓട്ടോമേഷൻ
+- **ഓപ്പൺ സോഴ്സ്**: ബ്രൗസർ എക്സ്റ്റൻഷൻ പ്രോജക്ടുകളിലും വെബ് സ്റ്റാൻഡേർഡുകളിലും സംഭാവനകൾ
+
+**അടുത്ത ഘട്ടം**: നിങ്ങൾക്ക് ഇപ്പോൾ ഇൻററാക്ടീവ് ഫംഗ്ഷണാലിറ്റി ചേർക്കാനും, ബ്രൗസർ APIs ഉപയോഗിച്ച് പ്രവർത്തിക്കാനും, ഉപയോക്തൃ പ്രശ്നങ്ങൾ പരിഹരിക്കുന്ന എക്സ്റ്റൻഷനുകൾ സൃഷ്ടിക്കാനും സാധിക്കും!
+
+## അസൈൻമെന്റ്
+
+[നിങ്ങളുടെ എക്സ്റ്റൻഷൻ പുനഃരൂപകൽപ്പന ചെയ്ത്](assignment.md)
+
+---
+
+
+**അസൂയക്കുറിപ്പ്**:
+ഈ പ്രമാണം AI മൊഴിമാറ്റ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. കൃത്യതയ്ക്ക് ഞങ്ങൾ ശ്രമിച്ചുവെങ്കിലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ അസത്യതകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അദ്യന്തഭാഷയിലുള്ള ആയസ്ഥമൽകാമ്പ്രമാണുള്ള പ്രമാണം അധികാരമുള്ള ഉറവിടമായി കരുതണം. പ്രധാനപ്പെട്ട വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മാനവ വിവർത്തനം നിർദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിൽ നിന്നുണ്ടാകുന്ന യാതൊരു തെറ്റിദ്ധാരണകൾക്കും അല്ലെങ്കിൽ വ്യാഖ്യാനക്കുറവുകൾക്കുമായി ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/1-about-browsers/assignment.md b/translations/ml/5-browser-extension/1-about-browsers/assignment.md
new file mode 100644
index 000000000..aab3acc13
--- /dev/null
+++ b/translations/ml/5-browser-extension/1-about-browsers/assignment.md
@@ -0,0 +1,146 @@
+
+# അസൈൻമെന്റ്: നിങ്ങളുടെ ബ്രൗസർ എക്സ്റ്റൻഷൻ റീസ്റ്റൈൽ ചെയ്യുക
+
+## അവലോകനം
+
+നിങ്ങൾ നിങ്ങളുടെ കാർബൺ ഫെറ്റ്പ്രിന്റ് ബ്രൗസർ എക്സ്റ്റൻഷനിന്റെ HTML തളിക നിർമ്മിച്ചിട്ടുള്ളതോടെ, അത് ദൃശ്യപരമായി ആകർഷകവും ഉപയോക്തൃ സുഹൃത്തുമായിടുന്നതിനായി മാറ്റാൻ സമയമായി. മികച്ച ഡിസൈൻ ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുകയും നിങ്ങളുടെ എക്സ്റ്റൻഷനെ കൂടുതൽ പ്രൊഫഷണലും ആകർഷകവുമാക്കുകയും ചെയ്യും.
+
+നിങ്ങളുടെ എക്സ്റ്റൻഷനിൽ അടിസ്ഥാന സിഎസ്എസ് സ്റ്റൈലിങ് നൽകിയിട്ടുണ്ട്, പക്ഷേ ഈ അസൈൻമെന്റ് നിങ്ങൾക്ക് വ്യക്തിഗത ശൈലിക്ക് അനുയോജ്യമായ പ്രത്യേക ദൃശ്യ ഐഡന്റിറ്റിയാണ് സൃഷ്ടിക്കാൻ പ്രേരിപ്പിക്കുന്നത്, അതേസമയം മികച്ച ഉപയോഗസൗകര്യം നിലനിർത്തുകയാണ് ലക്ഷ്യം.
+
+## നിർദ്ദേശങ്ങൾ
+
+### ഭാഗം 1: നിലവിലെ ഡിസൈൻ വിശകലനം ചെയ്യുക
+
+മാറ്റങ്ങൾ ചെയ്യുന്നതിന് മുൻപ്, നിലവിലുള്ള CSS ഘടന പരിശോധിക്കുക:
+
+1. നിങ്ങളുടെ എക്സ്റ്റൻഷൻ പ്രോജക്ടിലെ CSS ഫയലുകൾ **സ്ഥാനം കണ്ടെത്തുക**
+2. നിലവിലുള്ള സ്റ്റൈലിംഗ് സമീപനം, കളർ സ്കീം **സमीക്ഷിക്കുക**
+3. ലേയൗട്ട്, ടൈപ്പോഗ്രാഫി, ദൃശ്യ പരിധികളുടെ മെച്ചപ്പെടുത്തൽ സാധ്യതകൾ **അറിയുക**
+4. എങ്ങനെ ഡിസൈൻ ഉപയോക്തൃ ലക്ഷ്യങ്ങളെ (സർളമായ ഫോം പൂരിപ്പ്, വ്യക്തമായ ഡാറ്റാ പ്രദർശനം) പിന്തുണയ്ക്കുന്നു എന്നത് **പരിഗണിക്കുക**
+
+### ഭാഗം 2: നിങ്ങളുടെ സ്വന്തം സ്റ്റൈലിങ് ഡിസൈൻ ചെയ്യുക
+
+ഒരു ഏകീകൃത ദൃഷ്ടിപഥം സൃഷ്ടിക്കുക, ഇതിൽ ഉൾപ്പെടേണ്ടവ:
+
+**കളർ സ്കീം:**
+- പരിസ്ഥിതിയുമായി ബന്ധപ്പെട്ട പ്രാഥമിക കളർ പალറ്റ് തിരഞ്ഞെടുക്കുക
+- ആക്സസിബിലിറ്റിക്ക് മതിയായ വ്യത്യാസം ഉറപ്പാക്കുക (WebAIMന്റെ കോൺട്രാസ്റ്റ് ചെക്കർ പോലെയുള്ള ഉപകരണങ്ങൾ ഉപയോഗിക്കുക)
+- വിവിധ ബ്രൗസർ തീമുകളിൽ കളറുകൾ എങ്ങനെ കാണപ്പെടും എന്നത് പരിഗണിക്കുക
+
+**ടൈപ്പോഗ്രഫി:**
+- ചെറിയ എക്സ്റ്റൻഷൻ വലിപ്പത്തിൽ കൂടി വ്യവസ്ഥാപിതമായി ಓദ്യോഗ്യമായ ഫോണ്ടുകൾ തിരഞ്ഞെടുക്കുക
+- അനുയോജ്യമായ ഫോന്റ് വലിപ്പങ്ങളും ഭാരംകൊണ്ടും വ്യക്തമായ പരമ്പരസ്ഥാനം സ്ഥാപിക്കുക
+- ലൈറ്റ്, ഡാർക്ക് ബ്രൗസർ തീമുകളിൽ ടെക്സ്റ്റ് വായിക്കാൻ എളുപ്പമാക്കുക
+
+**ലേയൗട്ട്, സ്പേയ്സിങ്ങ്:**
+- ഫോം ഘടകങ്ങളും ഡാറ്റാ പ്രദർശനവും ദൃശ്യപരമായി മെച്ചപ്പെടുത്തുക
+- കൃത്യമായ പാഡിങ്ങും മാര്ജിനും ചേർക്കുക വായന സുഗമമാക്കാൻ
+- വിവിധ സ്ക്രീൻ വലിപ്പങ്ങൾക്ക് പ്രതികരിക്കുന്ന ഡിസൈൻ പ്രിൻസിപ്പിളുകൾ പരിഗണിക്കുക
+
+### ഭാഗം 3: നിങ്ങളുടെ ഡിസൈൻ പ്രയോഗിക്കുക
+
+നിങ്ങളുടെ ഡിസൈൻ നടപ്പാക്കാൻ CSS ഫയലുകൾ മാറ്റം വരുത്തുക:
+
+```css
+/* Example starting points for customization */
+
+.form-data {
+ /* Style the configuration form */
+ background: /* your choice */;
+ padding: /* your spacing */;
+ border-radius: /* your preference */;
+}
+
+.result-container {
+ /* Style the data display area */
+ background: /* complementary color */;
+ border: /* your border style */;
+ margin: /* your spacing */;
+}
+
+/* Add your custom styles here */
+```
+
+**സ്റ്റൈൽ ചെയ്യേണ്ട പ്രധാന മേഖലകൾ:**
+- **ഫോം ഘടകങ്ങൾ**: ഇൻപുട്ട് ഫീൽഡുകൾ, ലേബലുകൾ, സബ്മിറ്റ് ബട്ടൺ
+- **ഫലങ്ങൾ പ്രദർശനം**: ഡാറ്റാ കണ്ടെയ്നർ, ടെക്സ്റ്റ് സ്റ്റൈലിങ്, ലോഡിങ്ങ് സ്റ്റേറ്റുകൾ
+- **ഇന്ററാക്ടീവ് ഘടകങ്ങൾ**: ഹോവർ ഇഫക്ടുകൾ, ബട്ടൺ സ്റ്റേറ്റുകൾ, ട്രാൻസിഷനുകൾ
+- **ആകെ ലേയൗട്ട്**: കണ്ടെയ്നർ സ്പേസിംഗ്, പശ്ചാത്തല നിറങ്ങൾ, ദൃശ്യ പരിധി
+
+### ഭാഗം 4: പരിശോധനയും രൂപകൽപ്പനയും
+
+1. `npm run build` ഉപയോഗിച്ച് നിങ്ങളുടെ എക്സ്റ്റൻഷൻ കെട്ടിപ്പടുക്കുക
+2. പുതുക്കിയ എക്സ്റ്റൻഷൻ നിങ്ങളുടെ ബ്രൗസറിൽ ലോഡ് ചെയ്യുക
+3. എല്ലാ ദൃശ്യമുള്ള സ്റ്റേറ്റുകളും (ഫോം എൻട്രി, ലോഡിങ്, ഫലങ്ങൾ, പിശകുകൾ) **ടെസ്റ്റ് ചെയ്യുക**
+4. ബ്രൗസർ ഡെവലപ്പർ ടൂളുകൾ ഉപയോഗിച്ച് ആക്സസിബിലിറ്റി **സത്യാപിക്കുക**
+5. യഥാർത്ഥ ഉപയോഗം അടിസ്ഥാനമാക്കി സ്റ്റൈലുകൾ **മെച്ചപ്പെടുത്തുക**
+
+## സൃഷ്ടിമാതൃക ചവിട്ടുകുത്തലുകൾ
+
+### അടിസ്ഥാനതരം
+- കളറുകളും ഫോണ്ടുകളും അപ്ഡേറ്റ് ചെയ്ത് ഏകീകൃത തീം സൃഷ്ടിക്കുക
+- ഇൻറർഫേസ് മുഴുവൻ സ്പേസിംഗ്, അലൈന്മെന്റ് മെച്ചപ്പെടുത്തുക
+- ഇന്ററാക്ടീവ് ഘടകങ്ങൾക്ക് സൂക്ഷ്മമായ ഹോവർ ഇഫക്റ്റുകൾ ചേർക്കുക
+
+### മദ്ധ്യമതരം
+- നിങ്ങളുടെ എക്സ്റ്റൻഷനിനായി കസ്റ്റം ഐക്കണുകൾ അല്ലെങ്കിൽ ഗ്രാഫിക്സ് രൂപകൽപ്പന ചെയ്യുക
+- വിവിധ സ്റ്റേറ്റുകൾക്കിടയിൽ സ്മൂത്ത് ട്രാൻസിഷനുകൾ നടപ്പിലാക്കുക
+- API കോളുകൾക്കായി ഒരു പ്രത്യേക ലോഡിംഗ് ആനിമേഷൻ സൃഷ്ടിക്കുക
+
+### ഉയർന്നതരം
+- നിരവധി തീം ഓപ്ഷനുകൾ (ലൈറ്റ്/ഡാർക്ക്/ഹൈ-കോൺട്രാസ്റ്റ്) രൂപകൽപ്പന ചെയ്യുക
+- വിവിധ ബ്രൗസർ വിൻഡോ വലിപ്പങ്ങൾക്ക് അനുയോജ്യമായി പ്രതികരിക്കുന്ന ഡിസൈൻ നടപ്പിലാക്കുക
+- ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുന്ന മൈക്രോ-ഇന്ററാക്ഷനുകൾ ചേർക്കുക
+
+## സമർപ്പണ മാർഗ്ഗനിർദ്ദേശങ്ങൾ
+
+നിങ്ങളുടെ പൂർത്തിയായ അസൈൻമെന്റിൽ ഉൾപ്പെടേണ്ടത്:
+
+- നിങ്ങളുടെ കസ്റ്റം സ്റ്റൈലിങ് ഉൾപ്പെടെയുള്ള **മാറ്റം ചെയ്ത CSS ഫയലുകൾ**
+- വ്യത്യസ്ത സ്റ്റേറ്റുകളിൽ നിങ്ങളുടെ എക്സ്റ്റൻഷൻ കാഴ്ച നൽകുന്ന **സ്ക്രീൻഷോട്ടുകൾ** (ഫോം, ലോഡിങ്, ഫലങ്ങൾ)
+- നിങ്ങളുടെ ഡിസൈൻ തിരഞ്ഞെടുപ്പുകളും അവ ഉപയോക്തൃ അനുഭവം എങ്ങനെ മെച്ചപ്പെടുത്തുന്നുവെന്നും വിശദീകരിക്കുന്ന **ചുരുക്കം വിവരണം** (2-3 വാചകങ്ങൾ)
+
+## വിലയിരുത്തൽ ക്രമീകരണം
+
+| മാനദണ്ഡം | ആദർശ (4) | പ്രാവീണ്യം (3) | വികസനാധീന (2) | ആരംഭം (1) |
+|----------|---------------|----------------|----------------|----------------|
+| **ദൃശ്യ ഡിസൈൻ** | സൃഷ്ടിമാതൃക, ഏകീകൃത ഡിസൈൻ, ഉപയോഗസൗകര്യം വർദ്ധിപ്പിക്കുകയും ശക്തമായ ഡിസൈൻ സിദ്ധാന്തങ്ങളെ പ്രതിഫലിപ്പിക്കുകയും ചെയ്യുന്നു | നല്ല ഡിസൈൻ തിരഞ്ഞെടുപ്പുകളും പൊതു സ്ഥിരതയും വ്യക്തമായ ദൃശ്യമുള്ള പരമ്പരയും | അടിസ്ഥാന ഡിസൈൻ മെച്ചപ്പെടുത്തലുകൾ ചില സ്ഥിരതാ പ്രശ്നങ്ങളോടെ | ലഘുവായ അല്ലെങ്കിൽ അസമരം പരിഷ്കാരങ്ങൾ കൂടിയ ഡിസൈൻ |
+| **പ്രവർത്തനം** | എല്ലായ്പ്പോഴും വിവിധ സ്റ്റേറ്റുകളിലും ബ്രൗസർ പരിസരങ്ങളിലും സൈലുകൾ പൂർണ്ണമായും പ്രവർത്തിക്കുന്നു | ചെറിയ പ്രശ്നങ്ങളോടെ സൈലുകൾ സൈദ്ധാന്തികമായി പ്രവർത്തിക്കുന്നു | ചില പ്രദർശന പ്രശ്നങ്ങളോടെ ഭൂരിഭാഗം സൈലുകളും പ്രവർത്തിക്കുന്നു | ഉപയോഗപ്രവർത്തനത്തെ ബാധിക്കുന്ന ഗൗരവമായ പ്രശ്നങ്ങൾ |
+| **കോഡ് ഗുണമേൻമ** | ശുദ്ധവും നന്നായി ക്രമീകരിച്ച CSS, അർത്ഥവത്തായ ക്ലാസ് പേരുകൾ, കാര്യക്ഷമമായ സെലക്ടറുകൾ | ഉചിതമായ സെലക്ടറുകളും പ്രോപ്പർട്ടികളും ഉപയോഗിച്ചു നല്ല CSS ഘടന | ചില സംഘടനാ പ്രശ്നങ്ങളോടുകൂടിയ അംഗീകരനീയമായ CSS | ഭയർമായ CSS ഘടന അല്ലെങ്കിൽ Over-complex സ്റ്റൈലിങ് |
+| **ആക്സസിബിലിറ്റി** | മികച്ച കളർ കോൺട്രാസ്റ്റ്, വായിക്കാൻ എളുപ്പമുള്ള ഫോണ്ടുകൾ, ക്ഷാമികളായ ഉപയോക്താക്കളെ പരിഗണിക്കുന്നു | ചെറിയ മെച്ചപ്പെടുത്തൽ സാധ്യതകളുള്ള നല്ല ആക്സസിബിലിറ്റി | അടിസ്ഥാനമായ ആക്സസിബിലിറ്റി പരിഗണന, ചില പ്രശ്നങ്ങളോടെ | ആക്സസിബിലിറ്റി ആവശ്യകതകളിൽ പരിമിതമായ ശ്രദ്ധ |
+
+## വിജയക്കുറിപ്പുകൾ
+
+> 💡 **ഡിസൈൻ ടിപ്പ്**: സൂക്ഷ്മ മാറ്റങ്ങളോടെ ആരംഭിച്ച് കൂടുതൽ നാടകീയ സ്റ്റൈലിങ്ങിലേക്ക് മുന്നോട്ട് പോവുക. ടൈപ്പോഗ്രാഫി, സ്പേസിങ്ങിൽ ചെറിയ മെച്ചപ്പെടുത്തലുകൾ പൊതുവായി ഗുണമേൻമയിലുള്ള വലിയ വ്യത്യാസങ്ങൾ ഉണ്ടാക്കും.
+
+**അനുസരിക്കാനുള്ള മികച്ച ആചാരങ്ങൾ:**
+- നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ലൈറ്റ്, ഡാർക്ക് ബ്രൗസർ തീമുകളിൽ രണ്ടിലും **ടെസ്റ്റ് ചെയ്യുക**
+- വേണ്ട scalability സാധ്യമാക്കാൻ റീലേറ്റീവ് യൂണിറ്റുകൾ (em, rem) **ഉപയോഗിക്കുക**
+- CSS കസ്റ്റം പ്രോപ്പർട്ടികൾ ഉപയോഗിച്ച് സ്ഥിരതയുള്ള സ്പേസിങ് ** നിലനിർത്തുക**
+- വ്യത്യസ്ത ദൃശ്യമാന ആവശ്യങ്ങളുള്ള ഉപയോക്താക്കൾക്ക് എങ്ങനെയായിരിക്കും നിങ്ങളുടെ ഡിസൈൻ നോക്കിയിരിക്കും എന്ന് **പരിഗണിക്കുക**
+- ശരിയായ സിന്റാക്സ് പാലിക്കുന്നുവോ എന്ന് നിങ്ങളുടെ CSS **വാലിഡേറ്റ് ചെയ്യുക**
+
+> ⚠️ **സാധാരണ പിഴവ്**: ദൃഷ്യ ആകർഷണത്തിനായി ഉപയോഗസൗകര്യം ബലിപം ചെയ്യരുത്. നിങ്ങളുടെ എക്സ്റ്റൻഷൻ സുന്ദരവും ഫംഗ്ഷണലുമായിരിക്കണം.
+
+**ഓര്മ്മിക്കുക:**
+- പ്രധാന വിവരങ്ങൾ എളുപ്പം വായിക്കാൻ കഴിയുന്ന നിലയിൽ **നിർത്തുക**
+- ബട്ടണുകളും മറ്റു ഇന്ററാക്ടീവ് ഘടകങ്ങളും എളുപ്പത്തിൽ ക്ലിക്കുചെയ്യത്തക്കവണ്ണം **ഉണ്ട്**
+- ഉപയോക്താക്കളുടെ പ്രവർത്തനങ്ങൾക്ക് വ്യക്തമായ ദൃശ്യമുള്ള പ്രതികരണം **നൽകുക**
+- പ്ലേസ്ഹോൾഡർ ടെക്സ്റ്റ് മാത്രം അല്ല, യഥാർത്ഥ ഡേറ്റ ഉപയോഗിച്ച് നിങ്ങളുടെ ഡിസൈൻ **ടെസ്റ്റ് ചെയ്യുക**
+
+ഉപയോഗസൗകര്യം കൂടിയ ദൃശ്യപരമായും പ്രകാശിക്കുന്നതുമായ ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ സൃഷ്ടിക്കാൻ നിങ്ങൾക്ക് സൌഭാഗ്യം!
+
+---
+
+
+**വിമർശനം**:
+ഈ പ്രമാണം AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ശരിയായി വിവർത്തനം ചെയ്യാൻ ഞങ്ങൾ ശ്രമിക്കുന്നുവെങ്കിലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ തരിപ്പുകളോ നിർവ്വചന ദോഷങ്ങളോ ഉണ്ടാകാം എന്നും ദയവായി ശ്രദ്ധിക്കുക. പ്രാഥമിക പദം തന്നെ പ്രാമാണിക സ്രോതസ്സ് ആണെന്ന് കണക്കാക്കണം. നിർണായകമായ വിവരങ്ങൾക്കായി, പ്രൊഫഷണൽ മനുഷ്യ അവതർത്തനം നിർദ്ദേശിക്കപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിൽ നിന്നുണ്ടാകുന്ന യാതൊരു തെറ്റുകൾക്കും ഞങ്ങൾ ബാധ്യസ്ഥരാകുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/2-forms-browsers-local-storage/README.md b/translations/ml/5-browser-extension/2-forms-browsers-local-storage/README.md
new file mode 100644
index 000000000..638929ea9
--- /dev/null
+++ b/translations/ml/5-browser-extension/2-forms-browsers-local-storage/README.md
@@ -0,0 +1,663 @@
+
+# Browser Extension Project ഭാഗം 2: ഒരു API കോളുചെയ്യുക, Local Storage ഉപയോഗിക്കുക
+
+```mermaid
+journey
+ title നിങ്ങളുടെ API സംയോജനം & സംഭരണം യാത്ര
+ section അടിസ്ഥാനഘടകം
+ DOM റഫറൻസുകൾ സജ്ജമാക്കുക: 3: Student
+ ഇവന്റ് ലിസണറുകൾ ചേർക്കുക: 4: Student
+ ഫോം സമർപ്പിക്കൽ കൈകാര്യം ചെയ്യുക: 4: Student
+ section ഡേറ്റ മാനേജുമെന്റ്
+ ലോക്കൽ സ്റ്റോറേജ് നടപ്പിലാക്കുക: 4: Student
+ API കോൾസ് നിർമ്മിക്കുക: 5: Student
+ അസിങ്ക്രൺ പ്രവർത്തനങ്ങൾ കൈകാര്യം ചെയ്യുക: 5: Student
+ section ഉപയോക്തൃ അനുഭവം
+ പിഴവ് കൈകാര്യംചെയ്യൽ ചേർക്കുക: 5: Student
+ ലോഡിംഗ് സ്റ്റേറ്റുകൾ സൃഷ്ടിക്കുക: 4: Student
+ ഇടപെടലുകൾ മെച്ചപ്പെടുത്തുക: 5: Student
+```
+## പ്രീ-ലെക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/25)
+
+## പരിചയം
+
+നിങ്ങള് തുടങ്ങിയത് ആ ബ്രൗസർ എക്സ്റ്റൻഷൻ ഓർമയുണ്ടോ? ഇപ്പോൾ നിങ്ങൾക്കൊരു സുന്ദരമായ ഫോം ഉണ്ട്, പക്ഷേ അത് ആധാരമായിട്ടാണ് നിലകൊള്ളുന്നത്. ഇന്ന് നാം അതിനെ സജീവമായി മാറ്റാനാണ് പോകുന്നത്, യാഥാർത്ഥ്യ ഡാറ്റയുമായി ബന്ധിപ്പിച്ച്, അത് ഓർമ്മിക്കുന്നതും ചേർത്തു.
+
+അപ്പോളോ ദൗത്യ നിയന്ത്രണ കമ്പ്യൂട്ടറുകളെ ചിന്തിക്കുക - അവ ഓരേകമായ വിവരങ്ങൾ മാത്രം പ്രദർശിപ്പിക്കുന്നില്ല. അവ നിരന്തരം חלലാക്ഷയുമായി സംവദിച്ചു, ടെലിമെട്രി ഡാറ്റ പുതുക്കി, ദൗത്യത്തിന്റെ പ്രധാന പാരാമീറ്ററുകൾ ഓർക്കുകയും ചെയ്തു. ഇതാണ് നമ്മുടെ στόχος. നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ഇന്റർനെറ്റിൽ നിന്ന് യാഥാർത്ഥ്യ പരിസ്ഥിതി ഡാറ്റ പിടിക്കുകയും, അടുത്ത തവണയുള്ള ക്രമീകരണങ്ങൾ ഓർക്കുകയും ചെയ്യും.
+
+API സംയോജനം സങ്കീർണ്ണമായിരിക്കാമെന്ന് തോന്നാം, പക്ഷേ ഇതു വളരെ എളുപ്പമാണ് - നിങ്ങളുടെ കോഡ് മറ്റ് സേവനങ്ങളുമായി സംസാരിക്കാൻ പഠിപ്പിക്കുന്നു. നിങ്ങൾ കാലാവസ്ഥാ ഡാറ്റ, സോഷ്യൽ മീഡിയ ഫീഡുകൾ, അല്ലെങ്കിൽ നാം ഇന്ന് ചെയ്യുന്നതുപോലെ കാർബൺ ഫുട്ഷ്പ്രിന്റ് വിവരങ്ങൾ എടുക്കുകയാണെങ്കിൽ, ഡിജിറ്റൽ ബന്ധങ്ങൾ സ്ഥാപിക്കുന്നത് അതാണ്. ബ്രൗസറുകൾ വിവരങ്ങൾ നിലനിർത്തുന്ന രീതികൾ - പുസ്തകങ്ങൾ എവിടെയാണെന്ന് ഓർക്കാൻ ലൈബ്രറികൾ എങ്ങനെ കാർഡ് കാറ്റലോഗുകൾ ഉപയോഗിച്ചതുപോലെ - നാം അവയെയും പരിശോധിക്കും.
+
+ഈ പാഠത്തിന്റെ അവസാനം നിങ്ങൾക്ക് യഥാർത്ഥ ഡാറ്റ എടുക്കാവുന്ന, ഉപയോക്തൃ ഇഷ്ടങ്ങൾ സംരക്ഷിക്കുന്ന, മൃദുവായ അനുഭവം നൽകുന്ന ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ ഉണ്ടാകും. തുടങ്ങാം!
+
+```mermaid
+mindmap
+ root((ഡൈനാമിക് എക്സ്റ്റൻഷൻസ്))
+ DOM Manipulation
+ Element Selection
+ Event Handling
+ State Management
+ UI Updates
+ Local Storage
+ Data Persistence
+ Key-Value Pairs
+ Session Management
+ User Preferences
+ API Integration
+ HTTP Requests
+ Authentication
+ Data Parsing
+ Error Handling
+ Async Programming
+ Promises
+ Async/Await
+ Error Catching
+ Non-blocking Code
+ User Experience
+ Loading States
+ Error Messages
+ Smooth Transitions
+ Data Validation
+```
+✅ നിങ്ങളുടെ കോഡ് ഏത് ഫയലിൽ ഏത് നമ്പർപ്പെട്ട ഭാഗത്തേക്ക് ഇടണമെന്ന് അറിയാൻ അനുയോജ്യമായ ഫയലിൽ നമ്പർപ്പെട്ട സეგმ്മെന്റുകൾ പിന്തുടരുക
+
+## എക്സ്റ്റൻഷനിൽ കൈകാര്യം ചെയ്യേണ്ട ഘടകങ്ങൾ ക്രമീകരിക്കുക
+
+നിങ്ങളുടെ ജാവാസ്ക്രിപ്റ്റ് ഇൻറർഫേസ് കൈകാര്യം ചെയ്യാൻ തുടങ്ങുന്നതിനു മുൻപ്, അതിനായി പ്രത്യേകം HTML ഘടകങ്ങളിലേക്ക് റഫറൻസുകൾ വേണം. ഗാലിലിയോ ജുപിറ്ററിന്റെ ചന്ദ്രന്മാരെ അവലോകനം ചെയ്യുന്നതിനു മുമ്പ് ജുപിറ്ററിനെ കണ്ടെത്തി ശ്രദ്ധ കേന്ദ്രീകരിക്കേണ്ടതുപോലെ.
+
+നിങ്ങളുടെ `index.js` ഫയലിൽ, ഓരോ പ്രധാന ഫോമുഘടകത്തിനും റഫറൻസ് പിടിക്കാൻ `const` വ്യത്യാസങ്ങൾ സൃഷ്ടിക്കാം. ഇതെങ്ങനെ ശാസ്ത്രജ്ഞർ അവരുടെ ഉപകരണങ്ങൾ ലേബലാക്കുന്നു എന്നതുപോലെ - എല്ലാ ലാബോറട്ടറിയും തിരയാതെ ആവശ്യമായതേ നേരിട്ട് ആക്സസ് ചെയ്യാൻ.
+
+```mermaid
+flowchart LR
+ A[JavaScript കോഡ്] --> B[document.querySelector]
+ B --> C[CSS സെലക്ടറുകൾ]
+ C --> D[HTML ഘടകങ്ങൾ]
+
+ D --> E[".form-data"]
+ D --> F[".region-name"]
+ D --> G[".api-key"]
+ D --> H[".loading"]
+ D --> I[".errors"]
+ D --> J[".result-container"]
+
+ E --> K[ഫോം ഘടകം]
+ F --> L[ഇൻപുട്ട് ഫീൽഡ്]
+ G --> M[ഇൻപുട്ട് ഫീൽഡ്]
+ H --> N[ഉപയോക്തൃ ഇന്റർഫേസ് ഘടകം]
+ I --> O[ഉപയോക്തൃ ഇന്റർഫേസ് ഘടകം]
+ J --> P[ഉപയോക്തൃ ഇന്റർഫേസ് ഘടകം]
+
+ style A fill:#e1f5fe
+ style D fill:#e8f5e8
+ style K fill:#fff3e0
+ style L fill:#fff3e0
+ style M fill:#fff3e0
+```
+```javascript
+// ഫോം ഫീൽഡുകൾ
+const form = document.querySelector('.form-data');
+const region = document.querySelector('.region-name');
+const apiKey = document.querySelector('.api-key');
+
+// ഫലങ്ങൾ
+const errors = document.querySelector('.errors');
+const loading = document.querySelector('.loading');
+const results = document.querySelector('.result-container');
+const usage = document.querySelector('.carbon-usage');
+const fossilfuel = document.querySelector('.fossil-fuel');
+const myregion = document.querySelector('.my-region');
+const clearBtn = document.querySelector('.clear-btn');
+```
+
+**ഈ കോഡ് ചെയ്യുന്നത്:**
+- CSS ക്ലാസ് സെലെക്ടറുകൾ ഉപയോഗിച്ച് `document.querySelector()` വഴി ഫോമുഘടകങ്ങൾ പിടിക്കുന്നു
+- പ്രദേശത്തിന്റെ പേര് மற்றும் API കീയുടെ ഇൻപുട് ഫീൽഡുകൾക്ക് റഫറൻസുകൾ സൃഷ്ടിക്കുന്നു
+- കാർബൺ ഉപയോഗ ഡാറ്റ പ്രദർശിപ്പിക്കുന്ന ഘടകങ്ങളിലും ബന്ധം സ്ഥാപിക്കുന്നു
+- ലോഡിംഗ് സൂചകങ്ങൾ, പിഴവു സന്ദേശങ്ങൾ പോലുള്ള UI ഘടകങ്ങൾ ക്രമീകരിക്കുന്നു
+- ഓരോ ഘടക റഫറൻസും `const` വ്യത്യാസങ്ങളിൽ സൂക്ഷിക്കുന്നു, പുനഃഉപയോഗത്തിന് എളുപ്പമാക്കും
+
+## ഇവന്റ് ലിസ്റ്റനറുകൾ ചേർക്കുക
+
+ഇപ്പോൾ നാം നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ഉപയോക്തൃ പ്രവർത്തനങ്ങൾക്ക് പ്രതികരിക്കട്ടെ. ഇവന്റ് ലിസ്റ്റനറുകൾ നിങ്ങളുടെ കോഡിന് ഉപയോക്തൃ ഇടപെടലുകൾ നിരീക്ഷിക്കാനുള്ള മാർഗമാണ്. ഇത് പൂർവ്വകാല ടെലിഫോൺ എക്സ്ചേഞ്ച് ഓപ്പറേറ്റർമാരെപോലെ - അവർ ഇപ്പോഴുണ്ടായ കോൾ കേട്ടുചേർത്ത് ശരിയായ സർക്യുട്ട് കണക്ട് ചെയ്തു.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Form
+ participant JavaScript
+ participant API
+ participant Storage
+
+ User->>Form: പ്രദേശം/API കീ പൂരിപ്പിക്കുന്നു
+ User->>Form: സമര്പ്പിക്കുക ക്ലിക്ക് ചെയ്യുന്നു
+ Form->>JavaScript: submit ഇവന്റ് ട്രിഗര് ചെയ്യുന്നു
+ JavaScript->>JavaScript: handleSubmit(e)
+ JavaScript->>Storage: ഉപയോക്തൃ മുന്ഗാമികള് സൂക്ഷിക്കുക
+ JavaScript->>API: കാര്ബണ് ഡാറ്റെടുത്തു വരുന്നു
+ API->>JavaScript: ഡാറ്റ മടക്കുന്നു
+ JavaScript->>Form: ഫലങ്ങളുമായി UI പുതുക്കുന്നു
+
+ User->>Form: ക്ലിയര് ബട്ടണ് ക്ലിക്ക് ചെയ്യുന്നു
+ Form->>JavaScript: ക്ലിക്ക് ഇവന്റ് ട്രിഗര് ചെയ്യുന്നു
+ JavaScript->>Storage: സൂക്ഷിച്ച ഡാറ്റ നീക്കംചെയ്യുക
+ JavaScript->>Form: ആരംഭ ഘട്ടത്തിലേക്ക് റെസറ്റ് ചെയ്യുക
+```
+```javascript
+form.addEventListener('submit', (e) => handleSubmit(e));
+clearBtn.addEventListener('click', (e) => reset(e));
+init();
+```
+
+**ഈ ആശയങ്ങൾ മനസ്സിലാക്കുക:**
+- ഉപയോക്താക്കൾ എന്റർ അമർത്തുമ്പോൾ അല്ലെങ്കിൽ സമർപ്പിച്ചപ്പോൾ ട്രിഗർ ചെയ്യുന്നതിനായി ഫോമിന് സമിറ്റ് ലിസ്റ്റനർ അനുബന്ധിപ്പിക്കുന്നു
+- ക്ലിയർ ബട്ടണിൽ ക്ലിക്ക് ലിസ്റ്റനർ കണക്ട് ചെയ്യുന്നു, ഫോമും പുനഃക്രമീകരിക്കും
+- ഇവന്റ് ഒബ്ജെക്റ്റ് `(e)` കൈകാര്യം ചെയ്യുന്ന ഫംഗ്ഷനുകളിലേക്ക് നേരുന്നു
+- എക്സ്റ്റൻഷന്റെ ആരംഭാവസ്ഥ ക്രമീകരിക്കാൻ ഉടൻ `init()` ഫംഗ്ഷൻ വിളിക്കുന്നു
+
+✅ ഇവിടെ ഉപയോഗിച്ചിട്ടുള്ള ചുരുക്കമായ അറോ ഫംഗ്ഷൻ സിന്തക്സിനോടുകൂടിയ അസ്പഷ്ടത ശ്രദ്ധിക്കുക. ഇത് പരമ്പരാഗത ഫംഗ്ഷൻ എക്സ്പ്രെഷനുകളുടെ പകരം ശുദ്ധമായ രീതിയാണ്, എങ്കിലും ഇരുവരും ശരിയായി പ്രവർത്തിക്കുന്നു!
+
+### 🔄 **പഠന പരിശോധന**
+**ഇവന്റ് കൈകാര്യം ചെയ്യൽ മനസിലാക്കൽ**: ആരംഭത്തിലേകുന്നതിനു മുമ്പ്, നിങ്ങൾക്ക് ചെയ്തു നോക്കേണ്ടത്:
+- ✅ എങ്ങനെ `addEventListener` ഉപയോക്തൃ പ്രവർത്തനങ്ങളെ ജാവാസ്ക്രിപ്റ്റ് ഫംഗ്ഷനുകളുമായി ബന്ധിപ്പിക്കുന്നു എന്ന് വിശദീകരിക്കുക
+- ✅ എന്തുകൊണ്ട് ഇവന്റ് ഒബ്ജെക്റ്റ് `(e)` കൈകാര്യം ചെയ്യുന്ന ഫംഗ്ഷനുകളിൽ അയയ്ക്കുന്നു എന്ന് മനസ്സിലാക്കുക
+- ✅ `submit`യ്ക്കും `click`യ്ക്കും തമ്മിലുള്ള വ്യത്യാസം തിരിച്ചറിയുക
+- ✅ `init()` ഫംഗ്ഷൻ എപ്പോഴും പ്രവർത്തിച്ചും എന്തുകൊണ്ട് അതുപോലെയാണ് എന്ന് വിവരിക്കുക
+
+**ഏറ്റവും പെട്ടെന്ന് സ്വയം പരിശോധിക്കുക**: ഫോം സമർപ്പണത്തിൽ നിങ്ങൾ `e.preventDefault()` മറന്നാൽ എന്താകും?
+*ഉത്തരം: പേജ് പുനർ ലോഡ് ചെയ്യുകയും എല്ലാ ജാവാസ്ക്രിപ്റ്റ് സ്റ്റേറ്റ് നഷ്ടപ്പെട്ടു ഉപയോക്തൃ അനുഭവം തടസ്സപ്പെടും*
+
+## സംരംഭാവസ്ഥയും പുനഃക്രമീകരണ ഫംഗ്ഷനുകളും നിർമ്മിക്കുക
+
+നിങ്ങളുടെ എക്സ്റ്റൻഷന്റെ ആരംഭത്തിന്റെ യുക്തി നാം സൃഷ്ടിക്കാം. `init()` ഫംഗ്ഷൻ ഒരു കപ്പലിന്റെ നാവിഗേഷൻ സംവിധാനമായിരിക്കും - ഇതുവഴി നിലവിലെ നില പരിശോധിച്ച് ഇൻറർഫേസ് ക്രമീകരിക്കുന്നു. ആരെങ്കിലും നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ഉപയോഗിച്ചതാണോ എന്ന് നോക്കി അവരുടെ മുൻ ക്രമീകരണങ്ങൾ ലോഡ് ചെയ്യുന്നു.
+
+`reset()` ഫംഗ്ഷൻ ശാസ്ത്രജ്ഞർ പരീക്ഷണങ്ങൾ തമ്മിൽ ഉപകരണങ്ങൾ പുനഃക്രമീകരിക്കുന്നത് പോലെ ഉപയോക്താക്കളെ പുതിയ തുടക്കം നൽകുന്നു.
+
+```javascript
+function init() {
+ // ഉപയോക്താവ് മുമ്പ് API ക്രെഡൻഷ്യലുകൾ സംഭരിച്ചു കൊണ്ടുണ്ടോ എന്ന് പരിശോധിക്കുക
+ const storedApiKey = localStorage.getItem('apiKey');
+ const storedRegion = localStorage.getItem('regionName');
+
+ // എക്സ്റ്റൻഷൻ ഐക്കൺ പൊതുവായ പച്ചയാക്കി (ഭാവിയിലെ പാഠത്തിനുള്ള പ്ലേസ്ഹോൾഡർ) സജ്ജമാക്കുക
+ // TODO: അടുത്ത പാഠത്തിൽ ഐക്കൺ അപ്ഡേറ്റ് നടപ്പാക്കുക
+
+ if (storedApiKey === null || storedRegion === null) {
+ // ആദ്യം ഉപയോഗിച്ചുസംഭവിക്കുന്നവർ: സജ്ജീകരണ ഫോം കാണിക്കുക
+ form.style.display = 'block';
+ results.style.display = 'none';
+ loading.style.display = 'none';
+ clearBtn.style.display = 'none';
+ errors.textContent = '';
+ } else {
+ // മടങ്ങി വരുന്ന ഉപയോക്താവ്: അവരുടെ സംഭരിച്ച ഡാറ്റ സ്വയം ലോഡ് ചെയ്യുക
+ displayCarbonUsage(storedApiKey, storedRegion);
+ results.style.display = 'none';
+ form.style.display = 'none';
+ clearBtn.style.display = 'block';
+ }
+}
+
+function reset(e) {
+ e.preventDefault();
+ // ഉപയോക്താവിന് പുതിയ സ്ഥലം തിരഞ്ഞെടുക്കാൻ നിലവിലുള്ള പ്രദേശം മായ്ക്കുക
+ localStorage.removeItem('regionName');
+ // ആരംഭീകരണ പ്രക്രിയ പുനരാരംഭിക്കുക
+ init();
+}
+```
+
+**ഇവിടെ സംഭവിക്കുന്നത്:**
+- ബ്രൗസറിലെ ലോക്കൽ സ്റ്റോറേജിൽ സംഭരിച്ച API കീയും പ്രദേശവും കണ്ടെത്തുന്നു
+- പുതിയ ഉപയോക്താവാണോ അല്ലെങ്കിൽ മടങ്ങിച്ചെത്തുന്നയാളാണോ എന്ന് പരിശോധിക്കുന്നു
+- പുതിയ ഉപയോക്താക്കൾക്കായി സജ്ജീകരണ ഫോം കാണിക്കുകയും മറ്റു UI ഘടകങ്ങൾ മറയ്ക്കുകയും ചെയ്യുന്നു
+- മടങ്ങിച്ചെത്തുന്നവർക്കായി സൂക്ഷിച്ച ഡാറ്റ സ്വയം ലോഡ് ചെയ്യുകയും പുനഃക്രമീകരണ ഓപ്ഷൻ പ്രദർശിപ്പിക്കുകയും ചെയ്യുന്നു
+- ലഭ്യമായ ഡാറ്റയുടെ അടിസ്ഥാനത്തിൽ ഉപയോക്തൃ ഇന്റർഫേസ് നില കൈകാര്യം ചെയ്യുന്നു
+
+**Local Storage കാര്യങ്ങൾ:**
+- ബ്രൗസർ സെഷനുകൾക്കിടയിൽ ഡാറ്റ സംരക്ഷിക്കുന്നു (session storage പോലല്ലാത്തത്)
+- `getItem()`യും `setItem()`ഉം ഉപയോഗിച്ച് കീ-മൂല്യ ജോഡികളായി ഡാറ്റ സൂക്ഷിക്കുന്നു
+- ഒരു കിക്ക് നിലവിലില്ലായ്മയിൽ `null` തിരികെ നൽകുന്നു
+- ഉപയോക്തൃ ഇഷ്ടങ്ങളെയും ക്രമീകരണങ്ങളെയും ഓർക്കാൻ എളുപ്പമായ മാർഗ്ഗം നൽകുന്നു
+
+> 💡 **ബ്രൗസർ സ്റ്റോറേജിന്റെ മനസ്സിലാക്കൽ**: [LocalStorage](https://developer.mozilla.org/docs/Web/API/Window/localStorage) നിങ്ങളുടെ എക്സ്റ്റൻഷന് സ്ഥിരതയുള്ള ഓർമ നൽകുന്നു. പുരാതന അലക്സാന്ദ്രിയ ലൈബ്രറിയിലെ സ്ക്രോളുകൾ എങ്ങനെ സൂക്ഷിച്ചിരുന്നു എന്ന് ചിന്തിക്കുക - പാഠശാലക്കാർ പോയാലും തിരിച്ചുവന്നാലും വിവരങ്ങൾ ലഭ്യമായിരുന്നു.
+>
+> **പ്രധാന ശാസ്ത്രീയ സവിശേഷതകൾ:**
+> - ബ്രൗസർ അടച്ചതിനുശേഷവും ഡാറ്റ നിലനിൽക്കുന്നു
+> - കമ്പ്യൂട്ടർ പുനരാരംഭം, ബ്രൗസർ ക്രാഷ് എന്നിവയെല്ലാം സജീവമായി മറികടക്കുന്നു
+> - ഉപയോക്തൃ ഇഷ്ടങ്ങൾക്കായി വലിയ സംഭരണക്ഷമത നൽകുന്നു
+> - നെറ്റ്വർക്ക് വൈകിപ്പിക്കാതെ തൽക്ഷണ ആക്സസ് നല്കുന്നു
+
+> **പ്രധാന കുറിപ്പ്**: നിങ്ങളുടെ ബ്രൗസർ എക്സ്റ്റൻഷന് അതിന്റെ নিজത Local Storage ഉണ്ട്, സാധാരണ വെബ് പേജുകളിൽ നിന്നും വേർതിരിച്ചിരിക്കുന്നു. ഇത് സുരക്ഷ നൽകുകയും മറ്റ് വെബ്സൈറ്റുകളുമായി സംഘർഷം തടയുകയും ചെയ്യുന്നു.
+
+ഡേറ്റ സംരക്ഷിച്ചതായി കാണാൻ, ബ്രൗസർ ഡിവലപ്പർ ടൂളുകൾ (F12) തുറന്ന് **Application** ടാബിലേക്കു പോവുക, പിന്നെ **Local Storage** സെക്ഷൻ വിപുലീകരിക്കുക.
+
+```mermaid
+stateDiagram-v2
+ [*] --> CheckStorage: വിപുലീകരണം തുടങ്ങുന്നു
+ CheckStorage --> FirstTime: സംഭരിച്ച ഡാറ്റ ഇല്ല
+ CheckStorage --> Returning: ഡാറ്റ കണ്ടെത്തി
+
+ FirstTime --> ShowForm: ക്രമീകരണ ഫോം പ്രദർശിപ്പിക്കുക
+ ShowForm --> UserInput: ഉപയോഗकर्ता ഡാറ്റ നൽകുന്നു
+ UserInput --> SaveData: localStorage-ലേക്ക് സംഭരിക്കുക
+ SaveData --> FetchAPI: കാർബൺ ഡാറ്റ നേടുക
+
+ Returning --> LoadData: localStorage-ലൊ നിന്ന് വായിക്കുക
+ LoadData --> FetchAPI: കാർബൺ ഡാറ്റ നേടുക
+
+ FetchAPI --> ShowResults: ഡാറ്റ പ്രദർശിപ്പിക്കുക
+ ShowResults --> UserAction: ഉപയോഗകൻ ഇടപെടുന്നു
+
+ UserAction --> Reset: ക്ലിയർ ബട്ടൺ അമർത്തി
+ UserAction --> ShowResults: ഡാറ്റ കാണുക
+
+ Reset --> ClearStorage: സംഭരിച്ച ഡാറ്റ നീക്കം ചെയ്യുക
+ ClearStorage --> FirstTime: ക്രമീകരണത്തിലേക്ക് മടങ്ങുക
+```
+
+
+> ⚠️ **സുരക്ഷാ പരിഗണന**: ഉത്പാദന പ്രയോഗങ്ങളിൽ, API കീകൾ LocalStorage-ൽ സൂക്ഷിക്കുന്നത് സുരക്ഷാ അപകടങ്ങൾ ഉണ്ടാക്കാം, കാരണം ജാവാസ്ക്രിപ്റ്റ് ഈ ഡാറ്റ ആക്സസ് ചെയ്യാം. പഠനത്തിന് ഇത് ശരിയാണെങ്കിലും, യാഥാർത്ഥ്യ հավելു മാത്രം കുട്ടികളായ ക്രെഡൻഷ്യലുകൾ സർവർ-സൈഡ് സംഭരണം ഉപയോഗിക്കണം.
+
+## ഫോം സമർപ്പണം കൈകാര്യം ചെയ്യുക
+
+ഇപ്പോൾ, ഒരാൾ നിങ്ങളുടെ ഫോമു സമർപ്പിക്കുമ്പോൾ സംഭവിക്കുന്നതിനെ കൈകാര്യം ചെയ്യാം. സാധാരണയായി, ഫോം സമർപ്പിക്കുമ്പോൾ ബ്രൗസർ പേജ് പുനഃലോഡു ചെയ്യും, പക്ഷേ നാം ഈ പ്രവൃത്തി തടയികൊണ്ട് മൃദുവായ അനുഭവം സൃഷ്ടിയ്ക്കും.
+
+ഇത് ദൗത്യ നിയന്ത്രണം ബഹിരാകാശ കപ്പലുകളുമായി സംവദിക്കുന്ന രീതിയെ അനുസരിക്കുന്നു - ഓരോ സംവരണത്തിനും മുഴുവൻ സിസ്റ്റം പുനഃസജ്ജമാക്കാൻ പകരം, അവർ തുടർച്ചയായി പ്രവർത്തിച്ച് പുതിയ വിവരങ്ങൾ കൈകാര്യം ചെയ്യുന്നു.
+
+ഫോം സമർപ്പണ ഇവന്റ് പിടിച്ച് ഉപയോക്തൃ ഇൻപുട്ട് എടുക്കുന്ന ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:
+
+```javascript
+function handleSubmit(e) {
+ e.preventDefault();
+ setUpUser(apiKey.value, region.value);
+}
+```
+
+**മുകളിൽ നമ്മൾ ചെയ്തതു:**
+- പേജ് പുതുക്കപ്പെടുന്നത് തടയാൻ ഡീഫോൾട്ട് ഫോം സമർപ്പണം തടയുന്നു
+- API കീയും പ്രദേശം ഫീൽഡുകളിൽ നിന്നും ഉപയോക്തൃ മൂല്യങ്ങൾ എടുക്കുന്നു
+- ഫോമിന്റെ ഡാറ്റ `setUpUser()` ഫംഗ്ഷന് കൈമാറുന്നു പ്രോസസ് ചെയ്യാനായി
+- പേജ് പുനൽലോഡുകൾ ഒഴിവാക്കി സിംഗിൾ പേജ് അപ്ലിക്കേഷൻ ഉപയോഗാനുഭവം നിലനിർത്തുന്നു
+
+✅ ശ്രദ്ധിക്കുക, നിങ്ങളുടെ HTML ഫോമിൽ `required` ആട്രിബ്യൂട്ട് അടങ്ങിയതിനാൽ, ഫോം സമർപ്പിക്കുന്നതിനു മുമ്പ് ബ്രൗസർ API കീയും പ്രദേശവും നൽകുന്നുണ്ടോ എന്ന് താനേ പരിശോധന നടത്തും.
+
+## ഉപയോക്തൃ ഇഷ്ടങ്ങൾ ക്രമീകരിക്കുക
+
+`setUpUser` ഫംഗ്ഷൻ ഉപയോക്താവിന്റെ ക്രെഡൻഷ്യലുകൾ സംരക്ഷിച്ച് ആദ്യം API കോളും ആരംഭിക്കുന്നു. ഇത് ക്രമീകരണത്തിൽ നിന്നും ഫലങ്ങൾ പ്രദർശിപ്പിക്കുന്നതിനുള്ള മൃദുവായ മാറ്റത്തെ സൃഷ്ടിക്കുന്നു.
+
+```javascript
+function setUpUser(apiKey, regionName) {
+ // ഭാവി സെഷനുകൾക്കായി ഉപയോക്തൃ ക്രഡൻഷ്യലുകൾ സംരക്ഷിക്കുക
+ localStorage.setItem('apiKey', apiKey);
+ localStorage.setItem('regionName', regionName);
+
+ // ലോഡിങ് സ്റ്റേറ്റ് കാണിക്കാൻ UI അപ്ഡേറ്റ് ചെയ്യുക
+ loading.style.display = 'block';
+ errors.textContent = '';
+ clearBtn.style.display = 'block';
+
+ // ഉപയോക്തൃ ക്രഡൻഷ്യലുകൾ ഉപയോഗിച്ച് കാർബൺ ഉപയോഗം ഡാറ്റ നേടുക
+ displayCarbonUsage(apiKey, regionName);
+}
+```
+
+**കാൽപ്പനികമായി വാക്കുകൾ:**
+- API കീയും പ്രദേശവും ഭാവിയിലെ ഉപയോഗത്തിനു Local Storage-ൽ സൂക്ഷിക്കുന്നു
+- ഡാറ്റ എടുക്കുന്നതായി ഉപയോക്താക്കളെ അറിയിക്കാൻ ലോഡിംഗ് സൂചകം കാണിക്കുന്നു
+- മുൻ പിഴവ് സന്ദേശങ്ങൾ ഫ്ളാഷിൽ നിന്നും നീക്കം ചെയ്യുന്നു
+- ഉപയോക്താക്കൾക്ക് ക്രമീകരണങ്ങൾ പുനഃക്രമീകരിക്കാൻ ക്ലിയർ ബട്ടൺ പ്രദർശിപ്പിക്കുന്നു
+- യഥാർത്ഥ കാർബൺ ഉപയോഗ ഡാറ്റ എടുക്കാൻ API കോളു തുടങ്ങുന്നു
+
+ഈ ഫംഗ്ഷൻ ഡാറ്റ സംരക്ഷണം കൂടാതെ UI അപ്ഡേറ്റുകളും ഏകദേശമായി കൈകാര്യം ചെയ്ത് സുതാര്യമായ അനുഭവം സൃഷ്ടിക്കുന്നു.
+
+## കാർബൺ ഉപയോഗ ഡാറ്റ പ്രദർശിപ്പിക്കുക
+
+ഇപ്പോൾ നാം എക്സ്റ്റൻഷനെ API മുഖാന്തിരം ബാഹ്യ ഡാറ്റാ ഉറവിടങ്ങളുമായി ബന്ധിപ്പിക്കാം. ഇത് আপনার എക്സ്റ്റൻഷനെ സ്വതന്ത്ര ഉപകരണത്തിൽ നിന്ന് ഇന്റർനെറ്റിൽ നിന്നും യഥാർത്ഥ സമയ വിവരങ്ങൾ ആക്സസ് ചെയ്യുന്നതായി മാറ്റുന്നു.
+
+**API-കൾ മനസ്സിലാക്കൽ**
+
+[APIs](https://www.webopedia.com/TERM/A/API.html) എങ്ങനെ വ്യത്യസ്ത ആപ്ലിക്കേഷനുകൾ തമ്മിൽ ആശയവിനിമയം നടത്തുന്നു എന്നാണ്. ഇത് 19-അം നൂറ്റാണ്ടിലെ ടെലിഗ്രാഫ് സംവിധാനത്തെപോലെ - ഓപ്പറേറ്റർമാർ ദൂരെ സ്റ്റേഷനുകളിലേക്ക് അഭ്യർത്ഥനകൾ അയച്ചും ആവശ്യപ്പെട്ട വിവരം ലഭിച്ചും. നിങ്ങൾ സോഷ്യൽ മീഡിയ പരിശോധിക്കുമ്പോഴും, വോയിസ് അസിസ്റ്റന്റിനോട് ചോദിക്കുമ്പോഴും, ഡെലിവറി ആപ്പ് ഉപയോഗിക്കുമ്പോഴും, API-കൾ ഈ ഡാറ്റ ഇടപാടുകൾ സാന്ദ്രമാക്കുന്നു.
+
+```mermaid
+flowchart TD
+ A[നിങ്ങളുടെ എക്സ്റ്റൻഷൻ] --> B[HTTP അഭ്യർത്ഥന]
+ B --> C[CO2 സിഗ്നൽ API]
+ C --> D{സാധുവായ അഭ്യർത്ഥനയാണോ?}
+ D -->|അതെ| E[ഡാറ്റാബേസ് ചോദിക്കുക]
+ D -->|അല്ല| F[പിശക് മടങ്ങിവെക്കുക]
+ E --> G[കാർബൺ ഡാറ്റ]
+ G --> H[JSON പ്രതികരണം]
+ H --> I[നിങ്ങളുടെ എക്സ്റ്റൻഷൻ]
+ F --> I
+ I --> J[UI അപ്ഡേറ്റ് ചെയ്യുക]
+
+ subgraph "API Request"
+ K[ഹെഡേഴ്സ്: auth-token]
+ L[നിരക്കുകൾ: countryCode]
+ M[രീതി: GET]
+ end
+
+ subgraph "API Response"
+ N[കാർബൺ തീവ്രത]
+ O[ഫോസിൽ ഇന്ധന ശതമാനം]
+ P[ടൈംസ്റ്റാംപ്]
+ end
+
+ style C fill:#e8f5e8
+ style G fill:#fff3e0
+ style I fill:#e1f5fe
+```
+**REST API-കളെക്കുറിച്ചുള്ള പ്രധാന ആശയങ്ങൾ:**
+- REST എന്നത് 'Representational State Transfer' ആണ്
+- ഡാറ്റയുമായി ഇടപെടാൻ സ്റ്റാൻഡേർഡ് HTTP മേത്തഡുകൾ (GET, POST, PUT, DELETE) ഉപയോഗിക്കുന്നു
+- സാധാരണയായി JSON പോലുള്ള മുൻകൂട്ടി നിർവ്വചിച്ച ഫോർമാറ്റുകളിൽ ഡാറ്റ ലഭ്യമാക്കുന്നു
+- വിവിധ അഭ്യർത്ഥനകൾക്കുള്ള സ്ഥിരമായ URL അടിസ്ഥാനത്തിലുള്ള എൻഡ്പോയിന്റുകൾ നൽകുന്നു
+
+✅ നാം ഇന്ന് ഉപയോഗിക്കുന്ന [CO2 Signal API](https://www.co2signal.com/) חש provides വൈദ്യുതി ഗ്രിഡുകളുടെ യഥാർത്ഥ സമയ കാർബൺ തീവ്രത ഡാറ്റ. ഇത് ഉപയോക്താക്കൾക്ക് തങ്ങളുടെ വൈദ്യുതി ഉപഭോഗത്തിന്റെ പരിസ്ഥിതി സ്വാധീനം മനസ്സിലാക്കാൻ സഹായിക്കുന്നു!
+
+> 💡 **അസിങ്ക്രണസ് ജാവാസ്ക്രിപ്റ്റ് മനസ്സിലാക്കൽ**: [`async` കീബോർഡ്](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/async_function) നിങ്ങളുടെ കോഡിനു ഒരേ സമയം നിരവധി പ്രവർത്തനങ്ങൾ കൈകാര്യം ചെയ്യാൻ അനുവദിക്കുന്നു. ഒരു സെർവറിൽ നിന്നുള്ള ഡാറ്റ ആവശ്യപ്പെടുമ്പോൾ, പൂർണ്ണമായി എക്സ്റ്റൻഷൻ തളർന്ന് കിടക്കരുത് - അത് എയർ ട്രാഫിക് കൺട്രോൾ ഒരു വിമാനത്താവളം മുഴുവനായി നിർത്തുന്നത് പോലെയാണ്.
+>
+> **പ്രധാന ഗുണങ്ങൾ:**
+> - ഡാറ്റ ലോഡാകുമ്പോഴും എക്സ്റ്റൻഷൻ പ്രതികരണശീലം നിലനിർത്തുന്നു
+> - നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾക്കിടയിൽ മറ്റ് കോഡുകൾക്ക് പ്രവർത്തനം തുടരുമാകുന്നു
+> - പാരമ്പര്യ കോൾബാക്ക് രീതികളേക്കാൾ കോഡ് വായിക്കാൻ എളുപ്പമാണ്
+> - നെറ്റ്വർക്ക് പിഴവുകൾ മെച്ചമാർന്ന രീതിയിൽ കൈകാര്യം ചെയ്യുന്നു
+
+ഇവിടെ async-നെ കുറിച്ചുള്ള ഒരു ഷോർട്ട് വീഡിയോകും:
+
+[](https://youtube.com/watch?v=YwmlRkrxvkk "Async and Await for managing promises")
+
+> 🎥 async/await-നെപ്പറ്റി വീഡിയോ കാണാൻ മേൽ ചിത്രം ക്ലിക്ക് ചെയ്യുക.
+
+### 🔄 **പഠന പരിശോധന**
+**Async പ്രോഗ്രാമിംഗിന്റെ മനസിലാക്കൽ**: API ഫംഗ്ഷനിലേക്ക് പോകുന്നതിന് മുമ്പ് സ്ഥിരീകരിക്കുക:
+- ✅ എന്തുകൊണ്ട് എക്സ്റ്റൻഷൻ മുഴുവൻ തടഞ്ഞ് നിർത്താതെ `async/await` ഉപയോഗിക്കുന്നു
+- ✅ നെറ്റ്വർക്ക് പിശകുകൾ `try/catch` ബ്ലോക്കുകൾ എങ്ങനെ നന്നായി കൈകാര്യം ചെയ്യുന്നു
+- ✅ സിങ്ക്രോണസ് vs അസിങ്ക്രോണസ് പ്രവർത്തനങ്ങൾ തമ്മിലുള്ള വ്യത്യാസം
+- ✅ API കോളുകൾ പരാജയപ്പെടാനാകാനുള്ള കാരണങ്ങളും അതു കൈകാര്യം ചെയ്യാനുള്ള മാർഗ്ഗങ്ങളും
+
+**യഥാർത്ഥ ജീവിത ഉദാഹരണങ്ങൾ:**
+- **ഭക്ഷണം ഓർഡർ ചെയ്യൽ**: അടുക്കളയിൽ നിന്ന് കാത്തിരിക്കാതെ, പാസ്സായ രസീത് എടുത്ത് മറ്റൊക്കെ ചെയ്യുക
+- **ഇമെയിൽ അയക്കൽ**: അയയ്ക്കുമ്പോൾ അപ്ലിക്കേഷൻ തകരാതെ മറ്റൊരു ഇമെയിൽ തയ്യാറാക്കുക
+- **വെബ് പേജുകൾ ലോഡുചെയ്യൽ**: ചിത്രങ്ങൾ ഘട്ടം ഘട്ടമായി ലോഡ് ചെയ്തുകൊണ്ടിരിക്കുമ്പോൾ നിങ്ങൾ ഇതിനകം ടെക്സ്റ്റ് വായിക്കും
+
+**API प्रमाणीकरण പ്രവാഹം**:
+```mermaid
+sequenceDiagram
+ participant Ext as വിപുലീകരണം
+ participant API as CO2 സിഗ്നൽ API
+ participant DB as ഡാറ്റാബേസ്
+
+ Ext->>API: ഒത്തതിരിവിന്റെ ടോക്കൺ കൊണ്ട് അഭ്യർത്ഥന
+ API->>API: ടോക്കൺ സാധുതാക്കുക
+ API->>DB: കാർബൺ ഡാറ്റ അന്വേഷിക്കുക
+ DB->>API: ഡാറ്റ തിരികെ നൽകുക
+ API->>Ext: JSON പ്രതികരണം
+ Ext->>Ext: UI അപ്ഡേറ്റ് ചെയ്യുക
+```
+കാർബൺ ഉപയോഗ ഡാറ്റ എടുക്കാനും പ്രദർശിപ്പിക്കാനും ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:
+
+```javascript
+// ആധുനിക ഫെച്ച് API സമീപനം (പുറം ആശ്രിതങ്ങൾ ആവശ്യമില്ല)
+async function displayCarbonUsage(apiKey, region) {
+ try {
+ // CO2 Signal API-യിൽനിന്ന് കാർബൺ തീവ്രത ഡാറ്റ ഫെച്ച് ചെയ്യുക
+ const response = await fetch('https://api.co2signal.com/v1/latest', {
+ method: 'GET',
+ headers: {
+ 'auth-token': apiKey,
+ 'Content-Type': 'application/json'
+ },
+ // പ്രത്യേക മേഖലയ്ക്കായി ക്വറി പാരാമീറ്ററുകൾ ചേർക്കുക
+ ...new URLSearchParams({ countryCode: region }) && {
+ url: `https://api.co2signal.com/v1/latest?countryCode=${region}`
+ }
+ });
+
+ // API അഭ്യർത്ഥന വിജയകരമായിരുന്നോ എന്ന് പരിശോധിക്കുക
+ if (!response.ok) {
+ throw new Error(`API request failed: ${response.status}`);
+ }
+
+ const data = await response.json();
+ const carbonData = data.data;
+
+ // റൗണ്ടുചെയ്ത കാർബൺ തീവ്രത മൂല്യം കണക്കാക്കുക
+ const carbonIntensity = Math.round(carbonData.carbonIntensity);
+
+ // ഫെച്ച് ചെയ്ത ഡാറ്റ ഉപയോഗിച്ച് ഉപയോക്തൃ ഇന്റർഫേസ് അപ്ഡേറ്റ് ചെയ്യുക
+ loading.style.display = 'none';
+ form.style.display = 'none';
+ myregion.textContent = region.toUpperCase();
+ usage.textContent = `${carbonIntensity} grams (grams CO₂ emitted per kilowatt hour)`;
+ fossilfuel.textContent = `${carbonData.fossilFuelPercentage.toFixed(2)}% (percentage of fossil fuels used to generate electricity)`;
+ results.style.display = 'block';
+
+ // TODO: calculateColor(carbonIntensity) - അടുത്ത പാഠത്തിൽ നടപ്പിലാക്കുക
+
+ } catch (error) {
+ console.error('Error fetching carbon data:', error);
+
+ // ഉപയോക്തൃ സൗഹൃദമായ പിഴവ് സന്ദേശം പ്രദർശിപ്പിക്കുക
+ loading.style.display = 'none';
+ results.style.display = 'none';
+ errors.textContent = 'Sorry, we couldn\'t fetch data for that region. Please check your API key and region code.';
+ }
+}
+```
+
+**ഇവിടെ സംഭവിക്കുന്നത്:**
+- ലൈബ്രറികൾ പോലുള്ള Axios-നെ ഒഴിവാക്കി, മോഡേൺ `fetch()` API ഉപയോഗിക്കുന്നു, ആശയവിനിമയത്തിന് വ്യക്തവും സ്വതന്ത്രവുമായ കോഡ് നൽകാൻ
+- API പരാജയം വേഗത്തിൽ പിടിക്കാൻ `response.ok` ഉപയോഗിച്ച് പിഴവുകൾ പരിശോധിക്കുന്നു
+- `async/await` ഉപയോഗിച്ച് അസിങ്ക്രണസ് പ്രവർത്തനങ്ങൾ ഡോക്യുമെന്റബിൾ രൂപത്തിൽ കൈകാര്യം ചെയ്യുന്നു
+- CO2 Signal API-വുമായുള്ള ഓതന്റിക്കേഷൻ `auth-token` ഹെഡർ വഴി നടത്തുന്നു
+- JSON മറുപടി ഡാറ്റ പാര്സ് ചെയ്ത് കാർബൺ തീവ്രത വിവരങ്ങൾ എടുക്കുന്നു
+- പല UI ഘടകങ്ങളിലും ചിട്ടപ്പെടുത്തിയ പരിസ്ഥിതി ഡാറ്റ അപ്ഡേറ്റുചെയ്യുന്നു
+- API കോളുകൾ പരാജയപ്പെടുമ്പോൾ ഉപയോക്തൃ സൗഹൃദപിഴവ് സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്നു
+
+**പ്രധാന മോഡേൺ ജാവാസ്ക്രിപ്റ്റ് തത്വങ്ങൾ ഈ ഫംഗ്ഷനിൽ കാണാം:**
+- ക്ലീൻ സ്ട്രിംഗ് ഫോർമാറ്റിംഗിനായി `${}` സിന്തക്സിൽ ടെംപ്ലേറ്റ് ലിറ്ററലുകൾ
+- പിഴവുകൾ കരുതുന്നതിനായി `try/catch` ബ്ലോക്കുകൾ
+- നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ നിരീക്ഷിക്കാൻ `async/await` പാറ്റേൺ
+- API മറുപടിയിൽ നിന്നുള്ള പ്രത്യേക ഡാറ്റ എടുക്കാൻ ഒബ്ജക്ട് ഡിസ്ട്രക്ടറിംഗ്
+- ഒന്നിലധികം DOM മാനിപ്പുലേഷനുകൾക്കായി മെത്തഡ് ചെയിനിംഗ്
+
+✅ ഈ ഫംഗ്ഷൻ പല വെബ് ഡെവലപ്പ്മെന്റ് തത്വങ്ങളും പ്രദർശിപ്പിക്കുന്നു - ബാഹ്യ സെർവറുകളുമായി സംവദിക്കൽ, ഓതന്റിക്കേഷൻ, ഡാറ്റ പ്രോസസ്സിംഗ്, ഇൻറർഫേസുകൾ അപ്ഡേറ്റ് ചെയ്യൽ, പിഴവുകൾ കരുതൽ എന്നിവ. പ്രൊഫഷണൽ ഡെവലപ്പർമാരുടെ അടിസ്ഥാന കഴിവുകൾ.
+
+```mermaid
+flowchart TD
+ A[API കോൾ ആരംഭിക്കുക] --> B[അഭ്യർത്ഥന നേടുക]
+ B --> C{നെറ്റ്വർക്ക് വിജയകരമാണോ?}
+ C -->|ഇല്ല| D[നെറ്റ്വർക്ക് പിശക്]
+ C -->|അതെ| E{പ്രതികരണം ശരിയാണോ?}
+ E -->|ഇല്ല| F[API പിശക്]
+ E -->|അതെ| G[JSON പാഴ്സ് ചെയ്യുക]
+ G --> H{ഡാറ്റ സാധുവാണോ?}
+ H -->|ഇല്ല| I[ഡാറ്റ പിശക്]
+ H -->|അതെ| J[UI അപ്ഡേറ്റ് ചെയ്യുക]
+
+ D --> K[പിശക് സന്ദേശം കാണിക്കുക]
+ F --> K
+ I --> K
+ J --> L[ലോഡിംഗ് മറക്കുക]
+ K --> L
+
+ style A fill:#e1f5fe
+ style J fill:#e8f5e8
+ style K fill:#ffebee
+ style L fill:#f3e5f5
+```
+### 🔄 **പഠന പരിശോധന**
+**സമ്പൂർണ്ണ സിസ്റ്റം മനസിലാക്കൽ**: മുഴുവൻ പ്രവാഹവും മനസ്സിലായുണ്ടെന്ന് സ്ഥിരീകരിക്കുക:
+- ✅ DOM റഫറൻസുകൾ എങ്ങനെ ജാവാസ്ക്രിപ്റ്റിന് ഇൻറർഫേസ് നിയന്ത്രിക്കാനുമാകുന്നു
+- ✅ ബ്രൗസർ സെഷനുകളിടയിൽ സ്ഥിരതയ്ക്ക് local storage എന്തുകൊണ്ട് നിർണ്ണായകമാണ്
+- ✅ എങ്ങനെ async/await API കോളുകൾ എളുപ്പത്തിൽ, എക്സ്റ്റൻഷൻ തടസ്സപ്പെടാതെ നടത്തുന്നു
+- ✅ API കോൾ പരാജയപ്പെട്ടപ്പോൾ എന്താകും; പിശകുകൾ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു
+- ✅ ഉപയോക്തൃ അനുഭവത്തിൽ ലോഡിംഗ് സ്റ്റേറ്റുകൾ, പിഴവ് സന്ദേശങ്ങൾ ഉൾപ്പെടുന്നതിന്റെ പ്രധാന്യം
+
+🎉 **നിങ്ങൾ നേടിയെടുത്തത്:** ഇന്റർനെറ്റ് ബന്ധിപ്പിച്ചും യഥാർത്ഥ പരിസ്ഥിതി ഡാറ്റ സ്വീകരിക്കുന്ന,
+ഉപയോക്തൃ ക്രമീകരണങ്ങൾ സെഷനുകൾക്കിടയിൽ നിലനിർത്തുന്ന,
+പിഴവുകൾ gracefully കൈകാര്യം ചെയ്യുന്ന,
+നർത്തകമായ, പ്രൊഫഷണൽ യൂസർ അനുഭവം നൽകുന്ന ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ നിർമിച്ചു.
+
+നിങ്ങളുടെ പ്രവൃത്തി ചെക്ക് ചെയ്യാൻ `npm run build` ഓടിച്ച് ബ്രൗസറിൽ എക്സ്റ്റൻഷൻ റിഫ്രഷ് ചെയ്യുക. ഇനി നിങ്ങൾക്ക് പ്രായോഗികമായ ഒരു കാർബൺ ഫുട്പ്രിന്റ് ട്രാക്കർ ഉണ്ടായി. അടുത്ത പാഠം ഡൈനാമിക് ഐകൺ പ്രവർത്തനം ചേർക്കും.
+
+---
+
+## GitHub Copilot Agent Challenge 🚀
+
+Agent മോഡ് ഉപയോഗിച്ച് താഴെ പറയുന്ന വെല്ലുവിളി പൂർത്തിയാക്കുക:
+**വിവരണം:** എറർ ഹാൻഡ്ലിംഗ് മെച്ചപ്പെടുത്തലുകളും ഉപയോക്തൃ അനുഭവ സവിശേഷതകളും ചേർത്തു ബ്രൗസർ എക്സ്റ്റൻഷൻ മെച്ചപ്പെടുത്തുക. API-കൾ, ലോക്കൽ സ്റ്റോറേജ്, DOM മാനിപ്പുലേഷൻ എന്നിവ ഇപ്പോൾ ഉപയോഗിക്കുന്ന ആധുനിക ജാവാസ്ക്രിപ്റ്റ് പാറ്റേണുകൾ ഉപയോഗിച്ച് ചെയ്യാൻ ഈ ചാലഞ്ച് സഹായിക്കും.
+
+**പ്രോംപ്റ്റ്:** താഴെ പറയുന്ന സവിശേഷതകളുള്ള displayCarbonUsage ഫംഗ്ഷന്റെ മെച്ചപ്പെടുത്തിയ പതിപ്പ് ഉണ്ടാക്കുക: 1) ആഘാതകരമായ API കോൾഫെയില്യറുകൾക്കായി എക്സ്പോണൻഷ്യൽ ബാക്ക്ഓഫ് ഉപയോഗിച്ച് റീട്രൈ മെക്കാനിസം, 2) API കോൾ ചെയ്യുന്നതിനുമ മുൻപ്_REGION_ കോഡിന്റെ ഇൻപുട്ട് വെരിഫിക്കേഷൻ, 3) പ്രോഗ്രസ് സൂചിപ്പിക്കുന്ന ലോഡിംഗ് ആനിമേഷൻ, 4) API പ്രതികരവുകൾ localStorage-ലേക്ക് 30 മിനിറ്റുകൾക്കുള്ള കാലാവധി ടൈമ്സ്റ്റാമ്പിനൊപ്പം കാഷ് ചെയ്യൽ, 5) മുൻ API കോൾകളിൽ നിന്നുള്ള ചരിത്ര ഡാറ്റ പ്രദർശിപ്പിക്കുന്ന ഫീച്ചർ. ഫംഗ്ഷൻ പാരാമീറ്ററുകളും റിട്ടേൺ ടൈപ്പുകളും വിശദീകരിക്കുന്ന ടൈപ്പ്സ്ക്രിപ്റ്റ്-സ്റ്റൈൽ JSDoc കമന്റുകളും ചേർക്കുക.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) സംബന്ധിച്ച് കൂടുതൽ അറിയൂ.
+
+## 🚀 ചാലഞ്ച്
+
+ബ്രൗസർ അടിസ്ഥാനമാക്കിയുള്ള APIs-ന്റെ സമ്പത്ത് അന്വേഷിച്ച് നിങ്ങളുടെ API പഠന പരിധി വിപുലീകരിക്കുക. താഴെയുള്ള ബ്രൗസർ APIs-ലിലുള്ള ഒരു API തിരഞ്ഞെടുക്കി സാങ്കേതിക പ്രദർശനം നിർമ്മിക്കുക:
+
+- [Geolocation API](https://developer.mozilla.org/docs/Web/API/Geolocation_API) - ഉപയോക്താവിന്റെ നിലവിലെ സ്ഥലം ലഭിക്കുക
+- [Notification API](https://developer.mozilla.org/docs/Web/API/Notifications_API) - ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകൾ അയയ്ക്കുക
+- [HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) - ഇന്ററാക്ടീവ് ഡ്രാഗ് ഇന്റർഫേസുകൾ സൃഷ്ടിക്കുക
+- [Web Storage API](https://developer.mozilla.org/docs/Web/API/Web_Storage_API) - അവലംബമുള്ള ലോക്കൽ സ്റ്റോറേജ് സാങ്കേതികവിദ്യകൾ
+- [Fetch API](https://developer.mozilla.org/docs/Web/API/Fetch_API) - XMLHttpRequest-ന്റെ ആധുനിക പകരം
+
+**ആശയങ്ങൾ പരിശോധിക്കുക:**
+- ഈ API യഥാർത്ഥ ലോക പ്രശ്നങ്ങൾ എങ്ങനെ പരിഹരിക്കുന്നു?
+- API പിഴവുകളും അതിരുകളും എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു?
+- ഈ API ഉപയോഗിക്കുന്നപ്പോൾ ഏതു സുരക്ഷാ പരിഗണനകൾ ഉണ്ട്?
+- വ്യത്യസ്ത ബ്രൗസറുകളിൽ ഈ API എത്രത്തോളം പിന്തുണയ്ക്കുന്നുണ്ട്?
+
+നിങ്ങളുടെ ഗവേഷണത്തിന് ശേഷം, ഒരു API വികസകർക്കുള്ള സൗഹൃദവും വിശ്വസനീയവുമായ ലക്ഷണങ്ങൾ തിരിച്ചറിയുക.
+
+## ലൈവ് ക്ലാസ് ശേഷം ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/26)
+
+## റിവ്യൂ & സ്വയം പഠനം
+
+ഈ പാഠത്തിൽ LocalStorage, APIs എന്നിവയെ കുറിച്ച് നിങ്ങൾ പഠിച്ചു, പ്രൊഫഷണൽ വെബ് ഡെവലപ്പർക്കും വളരെ പ്രയോജനപ്പെടുന്ന വിഷയങ്ങളാണ്. ഈ രണ്ട് കാരികളും എങ്ങനെ ചേർന്ന് പ്രവർത്തിക്കുന്നു എന്ന് ചിന്തിക്കൂ. API ഉപയോഗിക്കുന്ന ഒരു വെബ് സൈറ്റ് ആർക്കിടെക്ചർ എങ്ങനെ രൂപകൽപ്പന ചെയ്യുമെന്നു വിചാരിക്കൂ.
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ ചെയ്യാൻ കഴിയുന്നതു**
+- [ ] DevTools Application ടാബ് തുറന്ന് ഏതെങ്കിലും വെബ്സൈറ്റിലെ localStorage പരിശോധിക്കുക
+- [ ] ഒരു ലളിതമായ HTML ഫോറം സൃഷ്ടിച്ച് ബ്രൗസറിലെ ഫോം വാലിഡേഷൻ പരീക്ഷിക്കുക
+- [ ] localStorage ഉപയോഗിച്ച് ഡാറ്റ സംഭരിച്ചു പുനരുദ്ധരിപ്പിക്കുക ബ്രൗസർ കൺസോളിൽ
+- [ ] നെറ്റ്വർക്കിനുള്ള ടാബ് വഴി സമർപ്പിക്കുന്ന ഫോം ഡാറ്റ പരിശോധിക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നേടാനാകുന്നതു**
+- [ ] പോസ്റ്റ്-ലക്ചർ ക്വിസ് പൂരിപ്പിച്ച് ഫോം ഹാൻഡ്ലിംഗ് ആശയങ്ങൾ മനസിലാക്കുക
+- [ ] ഉപയോക്തൃ മുൻഗണനകൾ സേവ് ചെയ്യുന്ന ബ്രൗസർ എക്സ്റ്റൻഷൻ ഫോർം നിർമ്മിക്കുക
+- [ ] ഉപകാരപ്രദമായ പിഴവു സന്ദേശങ്ങളോട് ക്ലയന്റ്-സൈഡ് ഫോം വാലിഡേഷൻ നടപ്പിലാക്കുക
+- [ ] ബ്രൗസർ എക്സ്റ്റൻഷൻ ഡാറ്റ സ്ഥിരപ്പെടുത്തുന്നതിനായി chrome.storage API ഉപയോഗിച്ച് പരിചയപ്പെടുക
+- [ ] സേവ് ചെയ്ത ഉപയോക്തൃ ക്രമീകരണങ്ങളെ പ്രതികരിക്കുന്ന ഉപയോക്തൃ ഇന്റർഫേയ്സ് സൃഷ്ടിക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചക്കാല എക്സ്റ്റൻഷൻ നിർമ്മാണം**
+- [ ] ഫുൾ-ഫീച്ചർ ചെയ്ത ബ്രൗസർ എക്സ്റ്റൻഷൻ ഫോർം ഫംഗ്ഷണാലിറ്റി സഹിതം പൂർത്തിയാക്കുക
+- [ ] വിവിധ സ്റ്റോറേജ് ഓപ്ഷനുകൾ അഭ്യസിക്കുക: local, sync, session storage
+- [ ] ഓട്ടോകംപ്ലീറ്റ്, വാലിഡേഷൻ പോലുള്ള ഉയർന്ന തലത്തിലുള്ള ഫോം ഫീച്ചറുകൾ നടപ്പിലാക്കുക
+- [ ] ഉപയോക്തൃ ഡാറ്റയ്ക്ക് ഇറക്കുമതി/റഫായി ചുമത്തൽ ഫീച്ചറുകൾ ചേർക്കുക
+- [ ] വിവിധ ബ്രൗസറുകളിൽ എക്സ്റ്റൻഷൻ നന്നായി പരീക്ഷിക്കുക
+- [ ] എക്സ്റ്റൻഷന്റെ ഉപയോക്തൃ അനുഭവവും പിഴവ് കൈകാര്യംവും മെച്ചപ്പെടുത്തുക
+
+### 🌟 **നിങ്ങളുടെ മാസം മുഴുവൻ വെബ് API മാസ്റ്ററി**
+- [ ] വിവിധ ബ്രൗസർ സ്റ്റോറേജ് APIs ഉപയോഗിച്ച് സമ്പീഠമായ അപ്ലിക്കേഷൻസ് നിർമ്മിക്കുക
+- [ ] ഓഫ്ലൈൻ-ഫസ്റ്റ് വികസന പാറ്റേണുകൾ പഠിക്കുക
+- [ ] ഡാറ്റ സ്ഥിരതയുള്ള ഓപ്പൺ സോഴ്സ് പ്രോജക്ടുകളിൽ സംഭാവന നൽകുക
+- [ ] പ്രൈവസി-കേന്ദ്രികമായ ഡവലപ്പ്മെന്റ്, GDPR അനുയോജ്യതയിൽ വിദഗ്ധത വികസിപ്പിക്കുക
+- [ ] ഫോം ഹാൻഡ്ലിംഗ്, ഡാറ്റ മാനേജ്മെന്റ് සඳහා പുനരുപയോഗിക്കാവുന്ന ലൈബ്രറികൾ സൃഷ്ടിക്കുക
+- [ ] വെബ് API-കൾക്കെന്തും എക്സ്റ്റൻഷൻ ഡവലപ്പ്മെന്റ് സംബന്ധിച്ച അറിവുകൾ പങ്കിടുക
+
+## 🎯 നിങ്ങളുടെ എക്സ്റ്റൻഷൻ ഡവലപ്പ്മെന്റ് മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title API ഇंटीഗ്രേഷൻ & സ്റ്റോറേജ് പഠന പുരോഗതി
+
+ section DOM അടിസ്ഥാനങ്ങൾ (15 മിനിട്ടുകൾ)
+ ഘടക റഫറൻസുകൾ: querySelector ക്വാളിറ്റി
+ : ഇവന്റ് ലിസ്നർ സെറ്റപ്പ്
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ് അടിസ്ഥാനങ്ങൾ
+
+ section ലോക്കൽ സ്റ്റോറേജ് (20 മിനിട്ടുകൾ)
+ ഡാറ്റ സ്ഥിരത: കീ-വാല്യൂ സ്റ്റോറേജ്
+ : സെഷൻ മാനേജ്മെന്റ്
+ : ഉപയോക്തൃ മുൻഗണന കൈകാര്യം
+ : സ്റ്റോറേജ് പരിശോധന ഉപകരണങ്ങൾ
+
+ section ഫോം കൈകാര്യം (25 മിനിട്ടുകൾ)
+ ഉപയോക്തൃ ഇൻപുട്ട്: ഫോം സ്ഥിരീകരണം
+ : ഇവന്റ് തടയല്
+ : ഡാറ്റ എക്സ്ട്രാക്ഷൻ
+ : UI സ്റ്റേറ്റ് മാറ്റങ്ങൾ
+
+ section API ഇंटीഗ്രേഷൻ (35 മിനിറ്റുകൾ)
+ പുറത്തുള്ള സംവരണം: HTTP അഭ്യർത്ഥനകൾ
+ : സ്ഥിരീകരണ മാതൃകകൾ
+ : JSON ഡാറ്റ പാഴ്സ് ചെയ്യല്
+ : പ്രതികരണ കൈകാര്യം
+
+ section അസിങ്ക്രൺ പ്രോഗ്രാമിംഗ് (40 മിനിട്ടുകൾ)
+ ആധുനിക ജാവാസ്ക്രിപ്റ്റ്: പ്രോമിസ് കൈകാര്യം
+ : അസിങ്ക്/അവെയിറ്റ് മാതൃകകൾ
+ : പിശക് മാനേജ്മെന്റ്
+ : തടസ്സമില്ലാത്ത പ്രവർത്തനങ്ങൾ
+
+ section പിശക് കൈകാര്യം (30 മിനിട്ടുകൾ)
+ ദൃഢമായ ആപ്ലിക്കേഷനുകൾ: ട്രൈ/കാച്ച് ബ്ലോക്കുകൾ
+ : ഉപയോക്തൃ സൗഹൃദ സന്ദേശങ്ങൾ
+ : മനോഹരമായ degragation
+ : ഡീബഗിംഗ് സാങ്കേതികതകൾ
+
+ section ഉയർന്ന മാതൃകകൾ (1 ആഴ്ച)
+ പ്രൊഫഷണൽ വികസനം: ക്യാഷിംഗ് തന്ത്രങ്ങൾ
+ : നിരക്ക് പരിമിതികരണം
+ : റിറ്റ്രൈ സംവിധാനം
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+
+ section പ്രൊഡക്ഷൻ നൈപുണ്യങ്ങൾ (1 മാസം)
+ എന്റർപ്രൈസ് സവിശേഷതകൾ: സുരക്ഷിതത്വം മികച്ച പ്രവൃത്തികൾ
+ : API പതിപ്പ് നിയന്ത്രണം
+ : നിരീക്ഷണം & ലോഗിങ്
+ : സ്കേബിള് ആർകിടെക്ചർ
+```
+### 🛠️ നിങ്ങളുടെ ഫുൾ-സ്റ്റാക്ക് ഡെവലപ്പ്മെന്റ് ടൂൾകിറ്റ് സംഗ്രഹം
+
+ഈ പാഠം കഴിഞ്ഞ് നിങ്ങൾക്ക് ഇപ്പോൾ:
+
+- **DOM മാടറിംഗ്**: സമ്യകമായ എലമെന്റ് ലക്ഷ്യമിടലും മാനിപ്പുലേഷനും
+- **സ്റ്റോറേജ് വിദഗ്ധത**: localStorage ഉപയോഗിച്ച് സ്ഥിരമായ ഡാറ്റ കൈകാര്യം ചെയ്യൽ
+- **API സംയോജനം**: റിയൽ ടൈം ഡാറ്റ ഫെട്ടിങ്, ഓതെൻറിക്കേഷൻ
+- **അസിങ്ക്രോണസ് പ്രോഗ്രാമിംഗ്**: ആധുനിക ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ബ്ലോക്ക് ചെയ്യാത്ത പ്രവർത്തികൾ
+- **എറർ ഹാൻഡ്ലിംഗ്**: പരാജയങ്ങളെ സൗമ്യമായി കൈകാര്യം ചെയ്യുന്ന ശക്തമായ അപ്ലിക്കേഷനുകൾ
+- **ഉപയോക്തൃ അനുഭവം**: ലോഡിംഗ് സ്റ്റേറ്റുകൾ, വാലിഡേഷൻ, സുന്ദരമായ ഇടപെടലുകൾ
+- **ആധുനിക പാറ്റേണുകൾ**: fetch API, async/await, ES6+ ഫീച്ചറുകൾ
+
+**പ്രൊഫഷണൽ കഴിവുകൾ**: നിങ്ങൾ നടപ്പിലാക്കിയ പാറ്റേണുകൾ ഉപയോഗിച്ചിരിക്കുന്നത്:
+- **വെബ് അപ്ലിക്കേഷനുകൾ**: ഒറ്റ-പേജ് ആപ്പുകൾ, ബാഹ്യ ഡാറ്റ ഉറവിടങ്ങൾ
+- **മൊബൈൽ ഡെവലപ്പ്മെന്റ്**: ഓഫ്ലൈൻ കഴിവുള്ള API-നിർമ്മിത ആപ്പുകൾ
+- **ഡെസ്ക്ടോപ്പ് സോഫ്റ്റ്വെയർ**: Electron ആപ്പുകൾ സ്ഥിരമായ സ്റ്റോറേജ് ഉപയോഗിച്ച്
+- **എൻറ്റർപ്രൈസ് സിസ്റ്റങ്ങൾ**: ഓതെൻറിക്കേഷൻ, കാഷിംഗ്, പിഴവ് കൈകാര്യം
+- **ആധുനിക ഫ്രെയിംവർക്കുകൾ**: React/Vue/Angular ഡാറ്റ മാനേജ്മെന്റ് പാറ്റേണുകൾ
+
+**മുകളില് നിന്ന് അടുത്തതും:** കാഷിംഗ് രണനിയമങ്ങൾ, റിയൽ-ടൈം വെബ്സോക്കറ്റ് കണക്ഷനുകൾ, സങ്കീർണ സ്റ്റേറ്റ് മാനേജ്മെന്റ് പോലുള്ള മുൻനിര വിഷയങ്ങൾ അന്വേഷിക്കാൻ നിങ്ങൾ തയ്യാറാണ്!
+
+## നിയോഗം
+
+[Adopt an API](assignment.md)
+
+---
+
+
+**തള്ളിപ്പറച്ചിൽ**:
+ഈ ദസ്താവೇಜ് AI തർജ്ജമ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തർജ്ജമ ചെയ്തതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്കായി ശ്രമിക്കുന്നിട്ടും, യാന്ത്രിക തർജ്ജമയിൽ പിശകുകളോ തികച്ചും ശരിയല്ലാത്തവരോ ഉണ്ടാകാവുന്നതാണ്. നേരിട്ടുള്ള ഭാഷയിലെ മൗലിക ദസ്താവേജിനെ അധികാരപരമായ ഉറവിടമായി കാണണം. പ്രധാന വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ തർജ്ജമ ശുപാർശ ചെയ്യുന്നു. ഈ തർജ്ജമ ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന തെറ്റിദ്ധാരണകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/2-forms-browsers-local-storage/assignment.md b/translations/ml/5-browser-extension/2-forms-browsers-local-storage/assignment.md
new file mode 100644
index 000000000..372d7d5b8
--- /dev/null
+++ b/translations/ml/5-browser-extension/2-forms-browsers-local-storage/assignment.md
@@ -0,0 +1,109 @@
+
+# API സ്വീകരിക്കുക
+
+## അവലോകനം
+
+APIകൾ സൃഷ്ടിപരമായ വെബ് വികസനത്തിന് അവസരങ്ങളുടെ അനന്ത ശൃംഖല തുറക്കുന്നു! ഈ അസൈൻമെന്റിൽ, നിങ്ങൾ ഒരു പുറംവിഭാഗ API തിരഞ്ഞെടുക്കുകയും ഒരു-browser-extension നിർമ്മിക്കുകയും ചെയ്യും, അത് യാഥാർത്ഥ്യ പ്രശ്നങ്ങൾ പരിഹരിക്കുകയോ ഉപയോക്താക്കൾക്ക് പ്രധാനമേയിട്ടുള്ള പ്രവർത്തനങ്ങൾ നൽകുകയോ ചെയ്യും.
+
+## നിർദ്ദേശങ്ങൾ
+
+### ഘടകം 1: നിങ്ങളുടെ API തിരഞ്ഞെടുക്കുക
+ഈ ക്യൂറേറ്റഡ് [സെലക്ഷൻ: സൗജന്യ പൊതു APIകളുടെ പട്ടിക](https://github.com/public-apis/public-apis) ലിസ്റ്റിൽ നിന്നു ഒരു API തിരഞ്ഞെടുക്കുക. ഈ വിഭാഗങ്ങൾ പരിഗണിക്കുക:
+
+**ആരംഭകർക്ക് പ്രിയപ്പെട്ട ഓപ്ഷനുകൾ:**
+- **വിനോദം**: [Dog CEO API](https://dog.ceo/dog-api/) - യാദൃച്ഛിക നായ ചിത്രങ്ങൾക്കായി
+- **വേളാമാനം**: [OpenWeatherMap](https://openweathermap.org/api) - ഇപ്പോഴത്തെ കാലാവസ്ഥാ ഡാറ്റക്കായി
+- **കോട്ട്സുകൾ**: [Quotable API](https://quotable.io/) - പ്രചോദനാത്മകമായി ഉള്ള ഉദ്ധരണികൾക്കായി
+- **വാർത്തകൾ**: [NewsAPI](https://newsapi.org/) - നിലവിലുള്ള ഹെഡ്ലൈനുകൾക്കായി
+- **വ്യാസങ്ങളുള്ള വസ്തുതകൾ**: [Numbers API](http://numbersapi.com/) - രസകരമായ സംഖ്യാശാസ്ത്ര വാസ്തവങ്ങൾക്കായി
+
+### ഘടകം 2: നിങ്ങളുടെ എക്സ്ടൻഷൻ പദ്ധതീകരിക്കുക
+കോഡ് എഴുതാൻ മുമ്പാകെ, ഈ പദ്ധതീകരണ ചോദ്യങ്ങൾ ഉത്തരം നൽകുക:
+- നിങ്ങളുടെ എക്സ്ടൻഷൻ എതൊരു പ്രശ്നം പരിഹരിക്കുന്നു?
+- നിങ്ങളുടെ ലക്ഷ്യ ഉപയോക്താവ് ആരെ ആണ്?
+- നിങ്ങള് ഏതെന്ത് ഡാറ്റ ലോക്കൽ സ്റ്റോറേജിൽ സൂക്ഷിക്കും?
+- API പരാജയങ്ങളും നിരക്ക് പരിധികളും എങ്ങനെ കൈകാര്യം ചെയ്യും?
+
+### ഘടകം 3: നിങ്ങളുടെ എക്സ്ടൻഷൻ നിർമ്മിക്കുക
+നിങ്ങളുടെ എക്സ്ടൻഷനിൽ ഉൾപ്പെടണം:
+
+**ആവശ്യമായ സവിശേഷതകൾ:**
+- ആവശ്യമായ API പാരാമീറ്ററുകൾക്ക് ഫോം ഇൻപുട്ടുകൾ
+- ശരിയായ പിശക് കൈകാര്യംചെയ്യലോടുകൂടിയ API സംയോജനം
+- ഉപയോക്തൃ സ്വാതന്ത്ര്യങ്ങൾക്കോ API കീസിനോ വേണ്ടി ലോക്കൽ സ്റ്റോറേജ്
+- വൃത്തിയുള്ള, പ്രതികരണശീലമുള്ള ഉപയോക്തൃ ഇന്റർഫേസ്
+- ലോഡിംഗ് സ്റ്റേറ്റുകളും ഉപയോക്തൃ പ്രതികരണവും
+
+**കോഡ് ആവശ്യങ്ങൾ:**
+- ആധുനിക ജാവാസ്ക്രിപ്റ്റ് (ES6+) ഫീച്ചറുകൾ ഉപയോഗിക്കുക
+- API വിളികളിൽ async/await നടപ്പിലാക്കുക
+- try/catch ബ്ലോക്കുകളോടെ ശരിയായ പിശക് കൈകാര്യംചെയ്യൽ ഉൾപ്പെടുത്തുക
+- നിങ്ങളുടെ കോഡ് വിശദീകരിക്കുന്ന പ്രസക്തമായ കമന്റുകൾ ചേർക്കുക
+- സ്ഥിരതയുള്ള കോഡ് ഫോർമാറ്റിംഗ് പാലിക്കുക
+
+### ഘടകം 4: ടെസ്റ്റ് ചെയ്ത് മെച്ചപ്പെടുത്തുക
+- വ്യത്യസ്ത ഇൻപുട്ടുകളുമായി നിങ്ങളുടെ എക്സ്ടൻഷൻ ടെസ്റ്റുചെയ്യുക
+- അതിരുകൾ കൈകാര്യംചെയ്യുക (ഇന്റർനെറ്റ് ഇല്ല, അസാധുവായ API പ്രതികരണങ്ങൾ)
+- ബ്രൗസർ പുനരാരംഭിച്ച ശേഷം എക്സ്ടൻഷൻ പ്രവർത്തിക്കുന്നതായി ഉറപ്പാക്കുക
+- ഉപയോക്തൃ സുഹൃത്തായ പിശക് സന്ദേശങ്ങൾ ചേർക്കുക
+
+## ബോണസ് വെല്ലുവിളികൾ
+
+നിങ്ങളുടെ എക്സ്ടൻഷൻ അടുത്ത നിരത്തിലേക്ക് കൊണ്ടുപോകുക:
+- സമൃദ്ധമായ പ്രവർത്തനത്തിന് മൾട്ടി API എൻഡ്പോയിന്റുകൾ ചേർക്കുക
+- API വിളികൾ കുറക്കാൻ ഡാറ്റ കാഷിംഗ് നടപ്പിലാക്കുക
+- സാധാരണ പ്രവർത്തനങ്ങൾക്ക് കീബോർഡ് ഷോർട്ട്കട്ടുകൾ സൃഷ്ടിക്കുക
+- ഡാറ്റ എക്സ്പോർട്ട്/ഇംപോർട്ട് ഫീച്ചറുകൾ ചേർക്കുക
+- ഉപയോക്തൃ ഇഷ്ടാനുസൃത ഓപ്ഷനുകൾ നടപ്പിലാക്കുക
+
+## സമർപ്പണ ആവശ്യകതകൾ
+
+1. **സെലക്ട് ചെയ്ത API-യുമായി വിജയകരമായി സംയോജിപ്പിച്ച പ്രവർത്തനക്ഷമമായ ബ്രൗസർ എക്സ്ടൻഷൻ**
+2. **README ഫയൽ**, ഇത് വിശദീകരിക്കുന്നു:
+ - ഏത് API തിരഞ്ഞെടുത്തുവെന്നും കാരണം
+ - എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യുക, എങ്ങനെ ഉപയോഗിക്കുക എന്ന്
+ - ഏതെങ്കിലും API കീകൾ അല്ലെങ്കിൽ ക്രമീകരണങ്ങൾ ആവശ്യമാണോ
+ - നിങ്ങളുടെ എക്സ്ടൻഷന്റെ പ്രവർത്തനത്തിൻറെ സ്ക്രീൻഷോട്ടുകൾ
+3. **വൃത്തിയുള്ള, കമന്റ് ചേർത്ത കോഡ്** ആധുനിക ജാവാസ്ക്രിപ്റ്റ് ആചാരങ്ങൾ പാലിച്ച്
+
+## റൂബ്രിക്
+
+| മാനദണ്ഡം | ഉത്തമം (90-100%) | പ്രാവീണ്യം (80-89%) | വികസിപ്പിക്കുകയാണ് (70-79%) | പ്രാരംഭം (60-69%) |
+|----------|---------------------|---------------------|---------------------|--------------------|
+| **API സംയോജനം** | പരിപൂർണ്ണ API സംയോജനം സമഗ്ര പിശക് കൈകാര്യംചെയ്യലിനും അതിരുകൾ നിയന്ത്രണത്തിനും | സഹജമായ പിശക് കൈകാര്യം ചേരുകകൂടിയുള്ള വിജയകരമായ API സംയോജനം | API പ്രവർത്തിക്കുന്നുണ്ടെങ്കിലും പിശക് കൈകാര്യംചെയ്യൽ കുറവാണ് | API സംയോജനം ഗൗരതമയമായ പ്രശ്നങ്ങളുണ്ട് |
+| **കോഡ് ഗുണമേന്മ** | വൃത്തിയുള്ള, നന്നായി കമന്റ് ചേർത്ത ആധുനിക ജാവാസ്ക്രിപ്റ്റ്, മികച്ച ആചാരങ്ങൾ പാലിച്ച് | ഉചിതമായ കമന്റുകളോടെയുള്ള നല്ല കോഡ് ഘടന | കോഡ് പ്രവർത്തിക്കുന്നുണ്ടെങ്കിലും മികച്ച ഘടന ആവശ്യം | പൊതുവെ പിഴച്ച കോഡ്, കുറഞ്ഞ കമന്റുകളോടെ |
+| **ഉപയോക്തൃ അനുഭവം** | ഉന്നത ഗുണമുള്ള ഇന്റർഫേസ്, മികച്ച ലോഡിംഗ് സ്റ്റേറ്റുകളും ഉപയോക്തൃ പ്രതികരണവും | അടിസ്ഥാന ഉപഭോക്തൃ പ്രതികരണമുള്ള നല്ല ഇന്റർഫേസ് | മിതമായ പ്രവർത്തനത്തോടെ അടിസ്ഥാന ഇന്റർഫേസ് | വൃഥാ അനുഭവം, ആശയക്കുഴപ്പം സൃഷ്ടിക്കുന്ന ഇന്റർഫേസ് |
+| **ലോക്കൽ സ്റ്റോറേജ്** | ഡാറ്റ സ്ഥിരീകരണവും മാനേജുമെന്റും ഉള്ള സങ്കീർണ്ണ ലോക്കൽ സ്റ്റോറേജ് ഉപയോഗം | പ്രധാന സവിശേഷതകൾക്കായി ശരിയായ ലോക്കൽ സ്റ്റോറേജ് നടപ്പാക്കൽ | അടിസ്ഥാന തലത്തിലുള്ള ലോക്കൽ സ്റ്റോറേജ് നടപ്പിലാക്കൽ | ലളിതം അല്ലെങ്കിൽ തെറ്റായ ലോക്കൽ സ്റ്റോറേജ് ഉപയോഗം |
+| **ഡോക്ക്യുമെന്റേഷൻ** | സെറ്റ് അപ്പ് നിർദ്ദേശങ്ങളും സ്ക്രീൻഷോട്ടുകളുമായുള്ള സമഗ്ര README | പ്രധാന ആവശ്യങ്ങൾ ഉൾക്കൊള്ളുന്ന നല്ല ഡോക്ക്യുമെന്റേഷൻ | ചില വിശദാംശങ്ങൾ ഇല്ലാത്ത അടിസ്ഥാന ഡോക്ക്യുമെന്റേഷൻ | വൃഥാ അല്ലെങ്കിൽ ഡോക്ക്യുമെന്റേഷൻ ഇല്ല |
+
+## തുടങ്ങാനുള്ള ടിപ്പുകൾ
+
+1. **സരളമായി തുടങ്ങുക**: സങ്കീർണ്ണമായ പ്രാമാണീകരണം വേണ്ടാത്ത API തിരഞ്ഞെടുക്കുക
+2. **ഡോക്യുമെന്റ് വായിക്കുക**: തിരഞ്ഞെടുക്കപ്പെട്ട APIയുടെ എൻഡ്പോയിന്റുകളും പ്രതികരണങ്ങളും വ്യക്തമായി മനസിലാക്കുക
+3. **UI പദ്ധതി നിർമ്മിക്കുക**: കോഡ് തുടങ്ങുന്നതിന് മുമ്പായി നിങ്ങളുടെ എക്സ്ടൻഷൻ ഇന്റർഫേസ് രൂപരേഖ ചെയ്യുക
+4. **നിരന്തരമായി ടെസ്റ്റ് ചെയ്യുക**: ഘടകങ്ങൾ ചേർക്കുമ്പോൾ സ്ഥിരമായി ടെസ്റ്റ് ചെയ്യുക
+5. **പിശകുകൾ കൈകാര്യംചെയ്യുക**: API വിളികൾ പരാജയപ്പെടാമെന്നു കരുതുകയും അനുയോജ്യമായി തയ്യാറാക്കുക
+
+## ഉപകരണം
+
+- [Browser Extension Documentation](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions)
+- [Fetch API Guide](https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch)
+- [Local Storage Tutorial](https://developer.mozilla.org/docs/Web/API/Window/localStorage)
+- [JSON Parsing and Handling](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/JSON)
+
+പ്രയോജനപ്രദവും സൃഷ്ടിപരവുമായ ഒരു വസ്തു നിർമ്മിച്ച് സന്തോഷിക്കുക! 🚀
+
+---
+
+
+**അസാധുത**:
+ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് ശ്രമിക്കുന്നതിനിടയിലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ ചില പിശകുകളോ അസാധുതകളോ ഉണ്ടായേക്കാമെന്ന് ദയവായി മനസിലാക്കുക. അതിന്റെ ഭാഷയിൽ ഉള്ള മൊഴിമൂല രേഖ തന്നെ അവകാശഭരണ രേഖയായി കണക്കാക്കപ്പെടണം. പ്രധാനമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മാനുഷിക വിവർത്തനം നിർദേശിച്ചിരിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിൽനിന്നുള്ള തെറ്റിദ്ധാരണകൾക്കും വ്യാഖ്യാനഭേദങ്ങൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/3-background-tasks-and-performance/README.md b/translations/ml/5-browser-extension/3-background-tasks-and-performance/README.md
new file mode 100644
index 000000000..fef92914c
--- /dev/null
+++ b/translations/ml/5-browser-extension/3-background-tasks-and-performance/README.md
@@ -0,0 +1,597 @@
+
+# ബ്രൗസർ എക്സ്ടൻഷൻ പ്രോജക്റ്റ് ഭാഗം 3: പശ്ചാത്തല ടാസ്കുകളും പ്രകടനവും അറിയുക
+
+```mermaid
+journey
+ title നിങ്ങളുടെ പ്രകടന മെച്ചപ്പെടുത്തല് യാത്ര
+ section അടിസ്ഥാനങ്ങള്
+ ബ്രൗസര് ഉപകരണങ്ങള് പഠിക്കുക: 3: Student
+ പ്രൊഫൈലിംഗ് മനസ്സിലാക്കുക: 4: Student
+ ബോട്ടില്നെകുകള് കണ്ടെത്തുക: 4: Student
+ section വിപുലീകരണ സവിശേഷതകള്
+ നിറം സിസ്റ്റം നിര്മ്മിക്കുക: 4: Student
+ പശ്ചാത്തല പ്രവര്ത്തനങ്ങള് സൃഷ്ടിക്കുക: 5: Student
+ ഐക്കോണുകള് ഡൈനാമിക്കായി അപ്ഡേറ്റ് ചെയ്യുക: 5: Student
+ section മെച്ചപ്പെടുത്തല്
+ പ്രകടനം നിരീക്ഷിക്കുക: 5: Student
+ പ്രശ്നങ്ങള് ഡീബഗ് ചെയ്യുക: 4: Student
+ അനുഭവം മിനുക്കുക: 5: Student
+```
+ചില ബ്രൗസർ എക്സ്ടൻഷനുകൾ എങ്ങനെ തിരക്കുള്ളതും പ്രതികരണശേഷിയുള്ളതും തോന്നിക്കുന്നു, മറ്റാൽ മൂർച്ച കുറഞ്ഞതായാണ് തോന്നുന്നത് എന്ന് നിങ്ങൾ ഒരിക്കലെങ്കിലും ആലോചിച്ചിട്ടുണ്ടോ? രഹസ്യം സീനിന്റെ പിന്ഭാഗത്താണ് നടക്കുന്നത്. ഉപയോക്താക്കൾ നിങ്ങളുടെ എക്സ്ടൻഷന്റെ ഇന്റർഫേസ് ക്ലിക്ക് ചെയ്യുമ്പോൾ, ഡാറ്റ ഫെട്ടിംഗ്, ഐക്കൺ അപ്ഡേറ്റുകൾ, സിസ്റ്റം റിസോഴ്സുകൾ തുടങ്ങിയവ ശാന്തമായി കൈകാര്യം ചെയ്യുന്ന പശ്ചാത്തല പ്രക്രിയകളുടെ ഒരു ലോകം ഉണ്ട്.
+
+ഇത് ബ്രൗസർ എക്സ്ടൻഷൻ സീരീസിലെ vårt അവസാന പാഠമാണ്, നാം നിങ്ങളുടെ കാർബൺ ഫുട്പ്രിന്റ് ട്രാക്കറെ സുഖമായും മടുപ്പോടെയും പ്രവർത്തിപ്പിക്കും. നിങ്ങൾ ജീവൻമാറ്റം പുലർത്തുന്ന ഡൈനാമിക് ഐക്കൺ അപ്ഡേറ്റുകൾ ചേർക്കുകയും പ്രവർത്തന പ്രശ്നങ്ങൾ പ്രശ്നങ്ങളായി മാറുന്നതിനുമുമ്പ് കണ്ടെത്താൻ പഠിക്കുകയുമാണ്. ഇത് ഒരു റേസ് കാറിനെ ട്യൂൺ ചെയ്യുന്നതുപോലെയാണ് - ചെറിയ മെച്ചപ്പെടുത്തലുകൾ എല്ലാം പ്രവർത്തിക്കുന്ന രീതിയിൽ വലിയ വ്യത്യാസങ്ങൾ സൃഷ്ടിക്കും.
+
+നാം പൂർത്തീകരിക്കുമ്പോൾ, നിങ്ങൾക്ക് ഒരു സുന്ദരമായി നിർമ്മിക്കപ്പെട്ട എക്സ്ടൻഷൻ ഉണ്ടായിരിക്കും, നല്ല വെബ് ആപ്പുകൾ മികച്ചവയിൽ നിന്നും വേർതിരിക്കുന്ന പ്രകടന സിദ്ധാന്തങ്ങളും മനസ്സിലാക്കാം. ബ്രൗസർ ഓപ്റ്റിമൈസേഷന്റെ ലോകത്തിലേക്ക് നമുക്ക് ചാടി നോക്കാം.
+
+## പ്രീ-ലക്ടർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/27)
+
+### പരിചയം
+
+മുന്പുള്ള പാഠങ്ങളിൽ, നിങ്ങൾ ഒരു ഫോമുണ്ടാക്കി, അത് ഒരു API-യുമായി ബന്ധിപ്പിച്ച് അസിങ്ക്രോണസ് ഡാറ്റ ഫെട്ടിംഗും അഭിമുഖീകരിച്ചു. നിങ്ങളുടെ എക്സ്ടൻഷൻ നല്ല രൂപത്തിൽ വളരുന്നു.
+
+ഇപ്പോൾ അവസാന സ്പർശനങ്ങൾ ചേർക്കേണ്ടതാണ് - ആ എക്സ്ടൻഷൻ ഐക്കൺ കാർബൺ ഡേറ്റ അടിസ്ഥാനമാക്കി നിറങ്ങൾ മാറ്റുന്നതുപോലെ. ആപോളോ സ്പേസ്ക്രാഫ്റ്റിലെ എല്ലാ സിസ്റ്റങ്ങളും ഒപ്റ്റിമൈസ് ചെയ്യേണ്ടി വന്നതുപോലെ ഇത് എനിക്ക് ഓർക്കുന്നു. ജീവൻസുരക്ഷ შესრულത്തിന്മേലെ ആശ്രയിച്ചിരുന്നുണ്ടെന്നതിനാൽ അവർക്കു ഒരു വൃത്താന്തം പോലും കളയാനാവാത്തത്. നമ്മുടേതു അത്ര നിർണായകമല്ലെങ്കിലും, అదే സിദ്ധാന്തങ്ങൾ ബാധകമാണ് - കാര്യക്ഷമമായ കോഡ് മികച്ച ഉപയോക്തൃ പരിചയങ്ങൾ സൃഷ്ടിക്കുന്നു.
+
+```mermaid
+mindmap
+ root((പ്രകടനം & പശ്ചാത്തല ചവറുകൾ))
+ Browser Performance
+ Rendering Pipeline
+ Asset Optimization
+ DOM Manipulation
+ JavaScript Execution
+ Profiling Tools
+ Developer Tools
+ Performance Tab
+ Timeline Analysis
+ Bottleneck Detection
+ Extension Architecture
+ Background Scripts
+ Content Scripts
+ Message Passing
+ Icon Management
+ Optimization Strategies
+ Code Splitting
+ Lazy Loading
+ Caching
+ Resource Compression
+ Visual Feedback
+ Dynamic Icons
+ Color Coding
+ Real-time Updates
+ User Experience
+```
+## വെബ് പ്രകടന അടിസ്ഥാനങ്ങൾ
+
+നിങ്ങളുടെ കോഡ് കാര്യക്ഷമമായി പ്രവർത്തിക്കുമ്പോൾ ആളുകൾ വ്യത്യാസം *അനുഭവിക്കുന്നു*. ഒരു പേജ് ഇൻസ്റ്റന്റ് ലോഡ് ആകുമ്പോൾ അല്ലെങ്കിൽ അനിമേഷൻ തണ്ടാതെ ഒഴുകുമ്പോൾ നിങ്ങൾ ആ സമയത്തെ അറിയില്ലേ? ആയാണ് നല്ല പ്രകടനം.
+
+പ്രകടനം വെറും വേഗത മാത്രമല്ല - ഇത് നൈസർഗികവും തടസ്സമില്ലാത്തതുമായ വെബ് അനുഭവങ്ങൾ സൃഷ്ടിക്കുന്നതായും ബാധിക്കുന്നു. കംപ്യൂട്ടിംഗിന്റെ പ്രാരംഭ കാലത്ത്, ഗ്രേസ് ഹോപ്പർ ഒരു നാനോസെക്കന്റ് (ഒരു അടിപൊടിക്ക് ഏകദേശം തുല്യമായ വയർ) തന്റെ മേശയിൽ വച്ചുപയോഗിച്ച് ഒരു ബില്ല്യൺആം ഭാഗം സെക്കൻഡിൽ പ്രകാശം എത്ര ദൂരം സഞ്ചരിക്കുന്നുവെന്ന് കാണിച്ചു. കംപ്യൂട്ടിംഗിൽ ഓരോ മൈക്രോസെക്കന്റും എത്ര പ്രധാനമാണെന്ന് വിശദീകരിക്കാൻ അതായിരുന്നു അവളുടെ വഴി. കാര്യങ്ങൾ മന്ദഗതിയാകുന്നതെന്താണെന്ന് കണ്ടെത്താൻ സഹായിക്കുന്ന അന്വേഷണ ഉപകരണങ്ങൾ നാം പരിശോധിക്കാം.
+
+> "വെബ്സൈറ്റ് പ്രകടനം രണ്ട് കാര്യങ്ങളിൽ ആണ്: പേജ് എത്ര വേഗം ലോഡാകും, അതിലെ കോഡ് എത്ര വേഗം പ്രവർത്തിക്കും." -- [Zack Grossbart](https://www.smashingmagazine.com/2012/06/javascript-profiling-chrome-developer-tools/)
+
+നിങ്ങളുടെ വെബ്സൈറ്റുകൾ എല്ലാ തരത്തിലുള്ള ഉപകരണങ്ങളിലും, എല്ലാ തരത്തിലുള്ള ഉപഭോക്താക്കളിലുമുള്ള എല്ലാ സാഹചര്യങ്ങളിലും വല്ലാതെ വേഗത്തിൽ പ്രവർത്തിക്കുന്നതെങ്ങനെ എന്ന വിഷയത്തിൽ അല്പം വ്യാപകം കൂടിയാണ്. യാതൊരു സ്റ്റാൻഡേർഡ് വെബ് പ്രോജക്റ്റ് അല്ലെങ്കിൽ ബ്രൗസർ എക്സ്ടൻഷൻ നിർമ്മിക്കുമ്പോൾ ശ്രദ്ധിക്കേണ്ട ചില കാര്യങ്ങൾ ഇവിടെ കാണാം.
+
+നിങ്ങളുടെ സൈറ്റ് ഒപ്റ്റിമൈസ് ചെയ്യാനുള്ള ആദ്യ പടിയെന്നും അടിച്ചുമാറ്റം എന്താണെന്ന് മനസ്സിലാക്കലും ആണ്. ഭാഗ്യവശാൽ, നിങ്ങളുടെ ബ്രൗസറിന് ശക്തമായ അന്വേഷണ ഉപകരണങ്ങൾ അതിൽ ഉൾക്കൊള്ളിച്ചിരിക്കുന്നു.
+
+```mermaid
+flowchart LR
+ A[HTML] --> B[പാഴ്സ് ചെയ്യുക]
+ B --> C[DOM വൃക്ഷം]
+ D[CSS] --> E[പാഴ്സ് ചെയ്യുക]
+ E --> F[CSSOM]
+ G[JavaScript] --> H[നടപ്പാക്കുക]
+
+ C --> I[റേഖാചിത്ര വൃക്ഷം]
+ F --> I
+ H --> I
+
+ I --> J[ലേഔട്ട്]
+ J --> K[പെയിന്റ്]
+ K --> L[കമ്പോസിറ്റ്]
+ L --> M[പ്രദർശിപ്പിക്കുക]
+
+ subgraph "ക്രമിക റൻഡറിംഗ് പാത"
+ N["1. HTML പാഴ്സ്ജ് ചെയ്യുക"]
+ O["2. CSS പാഴ്സ് ചെയ്യുക"]
+ P["3. JS നടപ്പാക്കുക"]
+ Q["4. റൻഡർ വൃക്ഷം നിർമ്മിക്കുക"]
+ R["5. ഘടകങ്ങൾ ലേഔട്ട് ചെയ്യുക"]
+ S["6. പിക്സലുകൾ പെയിന്റ് ചെയ്യുക"]
+ T["7. ലേയറുകൾ കമ്പോസിറ്റ് ചെയ്യുക"]
+ end
+
+ style M fill:#e8f5e8
+ style I fill:#fff3e0
+ style H fill:#ffebee
+```
+എഡ്ജിൽ ഡവലപ്പർ ടൂൾസ് തുറക്കാൻ, മുകളിൽ വലത് മൂലയിൽ ഉള്ള മൂന്ന് ഡോട്ടുകൾ ക്ലിക്ക് ചെയ്ത് More Tools > Developer Tools ൽ പോകുക. അല്ലെങ്കിൽ കീബോർഡ് ഷോർട്ട്കട്ട് ഉപയോഗിക്കുക: Windows-ൽ `Ctrl` + `Shift` + `I`, Mac-ൽ `Option` + `Command` + `I`. അവിടെ എത്തിയാൽ Performance ടാബിൽ ക്ലിക്ക് ചെയ്യുക - ഇവിടെ നിങ്ങൾ അന്വേഷണം നടത്തും.
+
+**ഇതാണ് നിങ്ങളുടെ പ്രകടന അന്വേഷണ ടൂൾകിറ്റ്:**
+- **Developer Tools തുറക്കുക** (നിങ്ങൾ ഡെവലപ്പറായി ഇതെപ്പോളും ഉപയോഗിക്കും!)
+- **Performance ടാബിലേക്കു പോകുക** - ഇത് നിങ്ങളുടെ വെബ് ആപ്പിന്റെ ഫിറ്റ്നസ് ട്രാക്കറാണ്
+- **റെക്കോർഡ് ബട്ടൺ അമർത്തുക** നിങ്ങളുടെ പേജ് പ്രവർത്തനം കാണാൻ
+- **ഫലങ്ങൾ പഠിച്ച്** വിനാശം സൃഷ്ടിക്കുന്നതെന്താണെന്ന് കണ്ടെത്തുക
+
+ഇത് പരീക്ഷിക്കാം. ഒരു വെബ്സൈറ്റ് തുറക്കൂ (Microsoft.com നല്ലതാണ്) 'Record' ബട്ടൺ അമർത്തൂ. പിന്നീട് പേജ് റിഫ്രഷ് ചെയ്ത് പ്രൊഫൈലർ എല്ലാം രേഖപ്പെടുത്തിയതിൽ ശ്രദ്ധിക്കൂ. റെക്കോർഡ് നിർത്തുമ്പോൾ ബ്രൗസർ സൈറ്റിനെ 'സ്ക്രിപ്റ്റ്', 'റെൻഡർ', 'പെയിന്റ്' ചെയ്യുന്ന രീതിയുടെ വിശദാംശം കാണിക്കും. ഇത് മിസൺ കൺട്രോൾ ഒരു റോക്കറ്റ് വിന്യാസ സമയത്ത് ഓരോ സിസ്റ്റത്തെയും നിരീക്ഷിക്കുന്നതുപോലെയാണ് - നിങ്ങൾക്ക് യഥാർത്ഥ സമയം സംഭവിക്കുന്നതും എപ്പോഴാണെന്നും ഡാറ്റ ലഭിക്കുന്നു.
+
+
+
+✅ കൂടുതൽ വിശദാംശങ്ങൾക്ക് [Microsoft Documentation](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) കാണുക
+
+> പ്രൊ ടിപ്: ഒരു പേജ് ആദ്യമായി സന്ദർശിക്കുന്നവരുടെ പ്രകടനം കാണാൻ ടെസ്റ്റു് ചെയ്യുന്നതിന് മുമ്പ് ബ്രൗസർ കാഷെ ക്ലിയർ ചെയ്യുക - തുടർച്ചയായ സന്ദർശനങ്ങളിൽ നിന്ന് വ്യത്യാസമുള്ളതായിരിക്കും!
+
+ദിവസം സമയത്ത് സംഭവിക്കുന്ന ഇവന്റുകള് നിജപ്പെടുത്തിയ профൈല് ടൈംലൈന് സെലക്ട് ചെയ്ത് സൂക്ഷ്മമായി നോക്കാം.
+
+പ്രൊഫൈല് ടൈംലൈന്റെ ഒരു ഭാഗം തിരഞ്ഞെടുക്കുക, സംഗ്രഹ പാനൽ കാണുക:
+
+
+
+ഇവന്റ് ലോഗ് പാനലിൽ 15 മില്ലിസെക്കൻഡിനും മുകളിൽ സമയം എടുത്ത ഇവന്റുകൾ പരിശോധിക്കുക:
+
+
+
+✅ നിങ്ങളുടെ പ്രൊഫൈലറിനെ പരിചയപ്പെടൂ! ഈ സൈറ്റിൽ ഡവലപ്പർ ടൂൾസ് തുറന്നിട്ട് ബോട്ടിൽനെക്കുകൾക്കുള്ള സാധ്യത നോക്കൂ. ഏറ്റവും സ്ലോ ആയി ലോഡ് ചെയ്യുന്ന ആസറ്റോ? ഏറ്റവും വേഗം?
+
+```mermaid
+flowchart TD
+ A[DevTools തുറക്കുക] --> B[പ്രകടന ടാബിലേക്ക് നാവിഗേറ്റ് ചെയ്യുക]
+ B --> C[റെക്കോർഡ് ബട്ടൺ ക്ലിക്ക് ചെയ്യുക]
+ C --> D[പ്രവർത്തനങ്ങൾ നടപ്പാക്കുക]
+ D --> E[റെക്കോർഡിംഗ് നിർത്തുക]
+ E --> F{ഫലം വിശകലനം ചെയ്യുക}
+
+ F --> G[ടൈംലൈൻ പരിശോധിക്കുക]
+ F --> H[നെറ്റ്വർക്ക് അവലോകനം ചെയ്യുക]
+ F --> I[സ്ക്രിപ്റ്റുകൾ പരിശോധിക്കുക]
+ F --> J[പെയിന്റ് ഇവന്റുകൾ തിരിച്ചറിയുക]
+
+ G --> K{നീണ്ട ടാസ്കുകൾ?}
+ H --> L{വലിയ ആസ്തികൾ?}
+ I --> M{റെൻഡർ ബ്ലോക്കിങ്?}
+ J --> N{പ്രത്യേകം ചെലവിൽ വരുന്ന പെയിന്റുകൾ?}
+
+ K -->|അതെ| O[ജാവാസ്ക്രിപ്റ്റ് ആശയവട്ടം നടത്തുക]
+ L -->|അതെ| P[ആസ്തികൾ കംപ്രസ് ചെയ്യുക]
+ M -->|അതെ| Q[Async/Defer ചേർക്കുക]
+ N -->|അതെ| R[സ്റ്റൈലുകൾ ലളിതമാക്കുക]
+
+ O --> S[മടക്കം പരിശോധന]
+ P --> S
+ Q --> S
+ R --> S
+
+ style A fill:#e1f5fe
+ style F fill:#fff3e0
+ style S fill:#e8f5e8
+```
+## പ്രൊഫൈലിംഗ് ചെയ്യുമ്പോൾ എന്തു നോക്കണം
+
+പ്രൊഫൈലർ പ്രവർത്തിപ്പിക്കുന്നത് തുടങ്ങലായിരിക്കും - എന്നാൽ വാസ്തവിക കഴിവ് ആ കോറുളള വർണ്ണാഭമായ ചാർട്ടുകളിൽ എന്താണെന്ന് മനസ്സിലാക്കലിലുണ്ട്. ആശങ്ക വേണ്ട, വായിക്കൽ ആലോചിക്കുക എങ്ങനെ എന്നതു കൾപ്പിക്കാം. പരിചയസമ്പന്നരായ ഡവലപ്പർമാർ വലിയ പ്രശ്നങ്ങളായി മാറുന്നതിനുമുമ്പ് മുന്നറിയിപ്പ് ലക്ഷണങ്ങൾ തിരിച്ചറിയാൻ പഠിച്ചു.
+
+വെബ്പ്രോജക്റ്റുകളിൽ എത്തുന്ന പ്രകടന പ്രശ്നങ്ങൾ സാധാരണയായി എന്തെല്ലാമാണെന്നു പരിചയപ്പെടാം - മേരി ക്യൂറിയുടെ ലബോറട്ടറിയിലെ റഡിയേഷൻ നിരക്കുകൾ സൂക്ഷ്മമായി നിരീക്ഷിച്ചതുപോലെ, നമ്മൾ ശ്രദ്ധിക്കേണ്ട ചില മാന്ദ്യങ്ങളും പിഴവുകളും കഴിഞ്ഞു മുന്നറിയിപ്പ് നൽകുന്ന പാറ്റേണുകളെ കണ്ടെത്തണം. ഈ മുൻകൂട്ടൽ നിങ്ങൾക്കും ваших ഉപയോക്താക്കൾക്കും വിഷമം കുറക്കും.
+
+**ആസറ്റ് വലുപ്പങ്ങൾ**: വർഷങ്ങളായി വെബ്സൈറ്റുകൾ "ഭാരം കൂടിയ"തായി - അതിന്റെ പലപ്പോഴും കാരണം ചിത്രങ്ങളുടെ വലുപ്പം ആണ്. ഇത് നമ്മുടെ ഡിജിറ്റൽ സ്യൂട്ട്കേസുകളില് കൂടിയിരിക്കുന്ന ഭാരത്തിന്റെ പോലെയാണ്.
+
+✅ പേജ് വലിപ്പം എങ്ങനെ വളർന്നുവെന്ന് കാണാൻ [Internet Archive](https://httparchive.org/reports/page-weight) സന്ദർശിക്കുക - ഇത് ഒരു വെളിച്ചം നൽകുന്നുണ്ട്.
+
+**ആസറ്റുകൾ എങ്ങനെ ഉചിതമായി ഒപ്റ്റിമൈസ് ചെയ്യാം:**
+- **ചിത്രങ്ങൾ കംപ്രസ് ചെയ്യുക!** WebP പോലുള്ള ആധുനിക ഫോർമാറ്റുകൾ ഫയൽ വലുപ്പം കുറയ്ക്കുന്നു
+- **ഓരോ ഉപകരണത്തിനും അനുയോജ്യമായ ചിത്രം മാത്രം നൽകുക** - ഫോണുകളിൽ വലുതായ മുകളിൽ പകർപ്പുകൾ അയക്കേണ്ട ആവശ്യം ഇല്ല
+- **CSS, JavaScript സൂക്ഷ്മമാക്കുക** - ഓരോ ബൈറ്റ് വിലവെക്കണം
+- **Lazy Loading ഉപയോഗിക്കുക** - ഉപയോക്താക്കൾ സ്ക്രോൾ ചെയ്യുമ്പോൾ മാത്രമേ ചിത്രങ്ങൾ ഡൗൺലോഡ് ചെയ്യൂ
+
+**DOM ട്രാവേഴ്സലുകൾ**: ബ്രൗസർ എഴുതുന്ന കോഡിന്റെ അടിസ്ഥാനത്തിൽ Documento Object Model നിർമ്മിക്കുന്നത് നിർണ്ണായകമാണ്, അതിനാൽ അടുക്കളയുടെ എളുപ്പം കൈകാര്യം ചെയ്യുന്നതിന് HTML ടാഗുകൾ നിർബന്ധമായും കുറവായിരിക്കണം, പേജ് ആവശ്യത്തിനുള്ളത് മാത്രം ഉപയോഗിക്കുക. അതേ രീതിയിൽ ആവശ്യമില്ലാത്ത CSS ഒഴിവാക്കുക; ഉദാഹരണത്തിന് ഒരു പേജിൽ മാത്രം ഉപയോഗിക്കാൻ വേണ്ട സ്റ്റെൽഷീറ്റുകൾ പ്രധാന സ്റ്റൈൽഷീറ്റിൽ ഉൾപ്പെടുത്തേണ്ടതില്ല.
+
+**DOM ഒപ്റ്റിമൈസേഷനുള്ള പ്രധാന തന്ത്രങ്ങൾ:**
+- **HTML ഘടകങ്ങളുടെ എണ്ണം, നെസ്റ്റിങ് സൗരഭ്യം കുറയ്ക്കുക**
+- **വേറെ ഉപയോഗിക്കാത്ത CSS നിയമങ്ങൾ ഒഴിവാക്കുകയും സ്റ്റൈൽഷീറ്റുകൾ ആഘടിപ്പെട്ട് സംയോജിപ്പിക്കുകയും ചെയ്യുക**
+- **ഓരോ പേജിനും ആവശ്യമായ CSS മാത്രമേ ലോഡ് ചെയ്യുക**
+- **HTML പുസ്തകം-ഇടപ്പെടുത്തൽ വർഗ്ഗീകരണം മെച്ചപ്പെടുത്തുക**
+
+**ജാവാസ്ക്രിപ്റ്റ്**: എല്ലാ ജാവാസ്ക്രിപ്റ്റ് ഡെവലപ്പർമാർക്കും 'render-blocking' സ്ക്രിപ്റ്റുകൾ ശ്രദ്ധിക്കണം - DOM പെയിന്റ് ചെയ്യുന്നതിന് മുമ്പ് ഇവ ലോഡ് ചെയ്യേണ്ടതാണ്. തന്നെറിയം മോഡ്യൂളിൽ ഉപയോഗിക്കുന്നതു പോലെ, ഇൻലൈൻ സ്ക്രിപ്റ്റുകളോട് defer ഉപയോഗിക്കുക പരിഗണിക്കുക.
+
+**ആധുനിക ജാവാസ്ക്രിപ്റ്റ് ഒപ്റ്റിമൈസേഷൻ സാങ്കേതികതകൾ:**
+- **defer** അറ്റ്രിബ്യൂട്ട് ഉപയോഗിച്ച് DOM പാഴ്സിംഗ് കഴിഞ്ഞു സ്ക്രിപ്റ്റുകൾ ലോഡ് ചെയ്യുക
+- **കോഡ് സ്പ്ലിറ്റിംഗ്** ഉപയോഗിച്ച് ആവശ്യമായ ജാവാസ്ക്രിപ്റ്റ് മാത്രം ലോഡ് ചെയ്യുക
+- ഏറ്റവും പ്രധാനപ്പെട്ട പ്രവർത്തനങ്ങൾക്ക് **lazy loading** നടപ്പിലാക്കുക
+- ഭാരം കൂടിയ ലൈബ്രറികളും ഫ്രെയിമ്വർക്കുകളും ഉപയോഗം കുറയ്ക്കുക
+
+✅ ചില സൈറ്റുകൾ [Site Speed Test website](https://www.webpagetest.org/) വഴി പരിശോധിച്ച് സൈറ്റ് പ്രകടനം വിലയിരുത്തുന്നതിലെ സാധാരണ പരിശോധനകൾ പഠിക്കാം.
+
+### 🔄 **പാഠ്യപരമായ പരിശോധന**
+**പ്രകടന മനസിലാക്കൽ**: എക്സ്ടൻഷനിലേക്ക് ഫീച്ചറുകൾ നിർമ്മിക്കുമ്പോളുളള മുൻകൂട്ടി സാങ്കേതിക തത്വങ്ങൾ അറിഞ്ഞിരിക്കണം:
+- ✅ HTML മുതൽ പിക്സലുകളിലേക്കുള്ള വിമർശന മാർഗ്ഗം വിശദീകരിക്കാൻ കഴിയും
+- ✅ വെബ് ആപ്ലിക്കേഷനുകളിലെ സാധാരണ പ്രകടന തടസ്സങ്ങൾ തിരിച്ചറിയാൻ
+- ✅ ബ്രൗസർ ഡെവലപ്പർ ടൂൾസ് ഉപയോഗിച്ച് പേജ് പ്രകടനം പ്രൊഫൈൽ ചെയ്യാമോ
+- ✅ ആസറ്റ് വലുപ്പവും DOM സങ്കീർണതയും വേഗതയെ എങ്ങനെ ബാധിക്കുന്നു എന്ന് മനസ്സിലാക്കുക
+
+**ദ്രുത സ്വയം പരീക്ഷണം**: render-blocking ജാവാസ്ക്രിപ്റ്റ് ഉണ്ടായാൽ എന്താകും?
+*ഉത്തരം: ബ്രൗസർ HTML പാഴ്സിംഗ് ആയും പേജ് റെൻഡറിംഗ് പുരോഗമിക്കാനുമപ്പുറം അവ മൊത്തം സ്ക്രിപ്റ്റ് ഡൗൺലോഡും പ്രവർത്തിപ്പിക്കേണ്ടത് നിർബന്ധമാണ്*
+
+**നിജജീവിതത്തിലെ പ്രകടനഫലങ്ങൾ**:
+- **100 മില്ലിസെക്കന്റ് താമസം**: ഉപയോക്താക്കൾ മന്ദഗതിയുടെ വ്യത്യാസം കാണുന്നു
+- **1 സെക്കന്റ് താമസം**: ഉപയോക്താക്കൾ ശ്രദ്ധ നഷ്ടപ്പെടുന്നു
+- **3+ സെക്കന്റ്**: 40% ഉപയോക്താക്കൾ പേജ് കൈവിടുന്നു
+- **മൊബൈൽ നെറ്റ്വർക്കുകൾ**: പ്രകടനം കൂടുതൽ നിർണ്ണായകം
+
+നിങ്ങൾ അയക്കുന്ന ആസറ്റുകളെ ബ്രൗസർ എങ്ങനെ റെൻഡർ ചെയ്യും എന്നുള്ള ഒരു ധാരണ സ്വന്തമാണെന്ന് ഇപ്പോൾ നമ്മുക്ക് ഞങ്ങൾ എക്സ്ടൻഷൻ പൂർത്തിയാക്കാൻ വേണ്ട അവസാന കാര്യങ്ങൾ നോക്കാം:
+
+### നിറം കണക്കാക്കാൻ ഒരു ഫംഗ്ഷൻ സൃഷ്ടിക്കുക
+
+ഇപ്പോൾ സംഖ്യാത്മക ഡാറ്റയെ അർത്ഥമുള്ള നിറങ്ങൾ ആയി മാറ്റുന്ന ഒരു ഫംഗ്ഷൻ സൃഷ്ടിക്കാം. ഇത് ട്രാഫിക് ലൈറ്റ് സംവിധാനം പോലെയാണ് - ക്ലീൻ എനർജിയ്ക്ക് പച്ച, ഉയർന്ന കാർബൺ ഇൻറൻസിറ്റിക്ക് ചുവപ്പ്.
+
+ഈ ഫംഗ്ഷൻ നമ്മുടെ API-യിൽ നിന്ന് CO2 ഡാറ്റ എടുത്ത് പരിസ്ഥിതി ബാധയെ ഏറ്റവും നല്ല പ്രതിനിധാനം ചെയ്യുന്ന നിറം കണ്ടെത്തും. ഇത് ശാസ്ത്രജ്ഞർ ഹീറ്റ് മാപ്പുകളിൽ കംപ്ലക്സായ ഡാറ്റ പാറ്റേണുകളെ കാണിക്കാൻ നിറം നൽകുന്ന രീതിയുടെ സാമ്യം കൊണ്ട് ഉണ്ട് - സമുദ്ര താപനിലകൾ മുതൽ നക്ഷത്ര രൂപീകരണത്തിന് വരെ. ഇതു /src/index.js-ൽ, മുമ്പ് സജ്ജീകരിച്ച const മാറ്റിയുള്ളവക്ക് 바로 പിന്നിൽ ചേർക്കാം:
+
+```mermaid
+flowchart LR
+ A[CO2 മൂല്യം] --> B[സമീപത്തെ സ്കെയിൽ പോയിന്റ് കണ്ടെത്തുക]
+ B --> C[സ്കെയിൽ സൂചകം നേടുക]
+ C --> D[రంగിലേക്ക് మ్యాప్ ചെയ്യുക]
+ D --> E[പിന്തുണയിൽ അയയ്ക്കുക]
+
+ subgraph "രംഗ സ്കെയിൽ"
+ F["0-150: പച്ച (ശുദ്ധം)"]
+ G["150-600: മഞ്ഞ (മിതമായ)"]
+ H["600-750: ഓറഞ്ച് (ഉയരം)"]
+ I["750+: തവിട്ട് (അത്യധികം ഉയരം)"]
+ end
+
+ subgraph "സന്ദേശം കൈമാറ്റം"
+ J[കണ്ടന്റ് സ്ക്രിപ്റ്റ്]
+ K[chrome.runtime.sendMessage]
+ L[ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റ്]
+ M[ഐക്കൺ അപ്ഡേറ്റ്]
+ end
+
+ style A fill:#e1f5fe
+ style D fill:#e8f5e8
+ style E fill:#fff3e0
+```
+```javascript
+function calculateColor(value) {
+ // CO2 ഗാഡന ശക്തി സ്കെയിൽ നിർവചിക്കുക (ഗ്രാംസ് പ്രതി kWh)
+ const co2Scale = [0, 150, 600, 750, 800];
+ // ഹരിതം (ശുദ്ധം) മുതൽ ഇരുണ്ട തവിട്ട് (ഉയർന്ന کار്ബൺ) വരെ അനുയോജ്യമായ നിറങ്ങൾ
+ const colors = ['#2AA364', '#F5EB4D', '#9E4229', '#381D02', '#381D02'];
+
+ // നമുക്ക് കൊടുത്ത ഇൻപുട്ടിനോട് ഏറ്റവും അടുത്ത സ്കെയിൽ മൂല്യം കണ്ടെത്തുക
+ const closestNum = co2Scale.sort((a, b) => {
+ return Math.abs(a - value) - Math.abs(b - value);
+ })[0];
+
+ console.log(`${value} is closest to ${closestNum}`);
+
+ // നിറം മാപ്പിങിനുള്ള ഇൻഡക്സ് കണ്ടെത്തുക
+ const num = (element) => element > closestNum;
+ const scaleIndex = co2Scale.findIndex(num);
+
+ const closestColor = colors[scaleIndex];
+ console.log(scaleIndex, closestColor);
+
+ // പൂഴികായിക സ്ക്രിപ്റ്റിലേക്കുള്ള നിറം അപ്ഡേറ്റ് സന്ദേശം അയയ്ക്കുക
+ chrome.runtime.sendMessage({ action: 'updateIcon', value: { color: closestColor } });
+}
+```
+
+**ഈ തുറക്കുന്നFunction ചുരുക്കത്തിൽ:**
+- **രണ്ട് അറേകൾ സജ്ജീകരിക്കുന്നു** - ഒന്ന് CO2 തലങ്ങൾക്കായി, മറ്റൊന്ന് നിറങ്ങൾക്കായി (പച്ച = ശുചിത്വം, കട്ടി = മാലിന്യം!)
+- **സമ്മിലിപ്പിക്കപ്പെട്ട CO2 മൂല്യത്തിന് ഏറ്റവും അടുത്ത സംഗതി കണ്ടെത്തുന്നു**, ഒരു രസകരമായ അരെയ് സോർട്ടിംഗ് ഉപയോഗിച്ച്
+- **findIndex() വഴി** പാടുള്ള നിറം പിടിക്കുന്നു
+- **ഈ തിരഞ്ഞെടുത്ത നിറം** ക്രോം ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റിലേക്ക് സന്ദേശമായി അയക്കുന്നു
+- **ടെംപ്ലേറ്റ് ലിറ്ററൽസ്** (അത്തരം ബാക്ക്ടിക്കുകൾ) ഉപയോഗിച്ച് സ്ട്രിംഗ് ശേഷിയം വൃത്തിയാക്കുന്നു
+- **എല്ലാം const പ്രഖ്യാപനങ്ങൾ ഉപയോഗിച്ച് സിസ്റ്റമാറ്റിക് ആക്കുന്നു**
+
+`chrome.runtime` [API](https://developer.chrome.com/extensions/runtime) നിങ്ങളുടെ എക്സ്ടൻഷന്റെ നാഡീവ്യവസ്ഥ പോലെ ആണ് - പശ്ചാത്തലത്തിലെ എല്ലാത്തരം ആശയവിനിമയം, ടാസ്കുകൾ കൈകാര്യം ചെയ്യുന്നു:
+
+> "chrome.runtime API ഉപയോഗിച്ച് ബാക്ക്ഗ്രൗണ്ട് പേജ് ലഭിക്കുക, മാനിഫസ്റ്റ് വിവരങ്ങൾ തിരികെ നൽകുക, ആപ്പ് അല്ലെങ്കിൽ എക്സറ്റൻഷൻ ജീവചക്രത്തിലെ ഇവന്റുകൾക്കായി കേൾക്കുകയും പ്രതികരിക്കുകയും ചെയ്യുക. ഈ API URLs ന്റെ സാന്ദർഭ പാതകൾ പൂർണ്ണ യോഗ്യ URLs ആയി മാറ്റുന്നതിനും ഉപയോഗിക്കാം."
+
+**Chrome Runtime API ഉപകാരങ്ങൾ:**
+- **എക്സ്ടൻഷന്റെ വേർതിരിച്ചിട്ടുള്ള ഭാഗങ്ങൾ തമ്മിൽ ആശയവിനിമയം സാധ്യമാക്കുന്നു**
+- **ഉപയോക്തൃ ഇന്റർഫേസിന് തടസ്സം ഇല്ലാതെ ബാക്ക്ഗ്രൗണ്ട് ജോലികൾ കൈകാര്യം ചെയ്യുന്നു**
+- **എക്സ്റംഷൻ ജീവചക്രം മാനേജ് ചെയ്യുന്നു**
+- **സ്ക്രിപ്റ്റുകൾ തമ്മിലുള്ള സന്ദേശ കൈമാറ്റം എളുപ്പമാക്കുന്നു**
+
+✅ ഈ ബ്രൗസർ എക്സ്ടൻഷൻ എഡ്ജിനാണ് വികസിപ്പിക്കുന്നത് എങ്കിൽ, ക്രോം API ഉപയോഗിക്കുന്നത് тандി അറിയാമാകും. പുതിയ എഡ്ജ് ബ്രൗസർ ക്രോംയിം ബർ ബ്രൗസർ എഞ്ചിൻ ഉപയോഗിക്കുന്നതിനാൽ ഈ ഉപകരണങ്ങൾ പ്രയോജനപ്പെടുത്താം.
+
+```mermaid
+architecture-beta
+ group browser(logos:chrome)[ബ്രൗസർ]
+
+ service popup(logos:html5)[പോപ്പ് അപ്പ് UI] in browser
+ service content(logos:javascript)[കണ്ടന്റ് സ്ക്രിപ്റ്റ്] in browser
+ service background(database)[ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റ്] in browser
+ service api(logos:api)[ബാഹ്യ API] in browser
+
+ popup:R -- L:content
+ content:R -- L:background
+ background:T -- B:api
+ content:T -- B:api
+
+ junction junctionCenter in browser
+ popup:R -- L:junctionCenter
+ junctionCenter:R -- L:background
+```
+> **പ്രൊ ടിപ്**: ഒരു ബ്രൗസർ എക്സ്ടൻഷൻ പ്രൊഫൈൽ ചെയ്യാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, എങ്കിൽ ഡെവ് ടൂൾസ് അതിന്റെ തന്നെ സ്വതന്ത്ര ബ്രൗസർ ഇൻസ്റ്റൻസ് ആകുന്നതിനാൽ എക്സ്ടൻഷനിലെ നിന്നും ആരംഭിക്കുക. ഇത് എക്സ്ടൻഷൻ-നിർദ്ദിഷ്ട പ്രകടന സൂചികകൾക്ക് ആക്സസ് നൽകുന്നു.
+
+### എൻറെ ആശയം ഡിഫോൾട്ട് ഐക്കൺ നിറം സജ്ജമാക്കുക
+
+ഇപ്പോൾ യഥാർത്ഥ ഡാറ്റ ഫെട്ടിംഗ് തുടങ്ങുന്നതിന് മുമ്പ് നമ്മുടെ എക്സ്റംഷന് ഒരു തുടക്കം നൽകാം. ആരും ശൂന്യമോ തകരാറുള്ളതുപോലുള്ള ഐക്കണെ നോക്കിത്തീരുമെന്നില്ല. അതിനാൽ ഇൻസ്റ്റാൾ ചെയ്ത ഉടൻ ഉപയോക്താക്കൾക്ക് എക്സ്റംഷൻ പ്രവർത്തനക്ഷമമായിട്ടുണ്ടെന്നുകാണിക്കാൻ മടുത്ത പച്ച നിറം നൽകാം.
+
+നിങ്ങളുടെ `init()` ഫംഗ്ഷനിൽ ഡിഫോൾട്ട് പച്ച ഐക്കൺ സജ്ജമാക്കാം:
+
+```javascript
+chrome.runtime.sendMessage({
+ action: 'updateIcon',
+ value: {
+ color: 'green',
+ },
+});
+```
+
+**ഈ തുടക്കഘട്ടം നേടുന്നത്:**
+- **നിഷ്പക്ഷമായ പച്ച നിറം ഡിഫോൾട്ട് ആയി സജ്ജമാക്കുന്നു**
+- **എക്സ്റംഷൻ ലോഡുചെയ്യുമ്പോൾ ഉടൻ കാഴ്ച മുന്നറിയിപ്പ് നൽകുന്നു**
+- **ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റുമായി ആശയവിനിമയ മാതൃക സ്ഥാപിക്കുന്നു**
+- **ഡാറ്റ ലോഡ് ആകരുത് ഉപയോക്താക്കൾക്ക് പ്രവർത്തനക്ഷമമായ എക്സ്റംഷൻ കാണിക്കുന്നു**
+
+### ഫംഗ്ഷന് വിളിക്കുക, ഫോൺ റഫ്രഷ് ചെയ്യുക
+
+ഇപ്പോൾ എല്ലാം ബന്ധിപ്പിച്ച്, പുതിയ CO2 ഡാറ്റ വന്നു കിട്ടുമ്പോൾ നിങ്ങളുടെ ഐക്കൺ തട്ടിയ കളർ കൊണ്ട് സ്വയം അപ്ഡേറ്റ് ആവട്ടെ. ഇലക്ട്രോണിക് ഉപകരണത്തിലെ അവസാന സർക്യൂട്ടുമായി ബന്ധിപ്പിക്കുന്നതുപോലെ - ഒരുമിച്ചുള്ള ഒറ്റ സംവിധാനം പോലെ ഘടകങ്ങൾ പ്രവർത്തിക്കുന്നു.
+
+API-യിൽ നിന്ന് CO2 ഡാറ്റ കിട്ടിയ ഉടൻ ഈ വരി ചേർക്കുക:
+
+```javascript
+// API-യിൽ നിന്നും CO2 ഡാറ്റ പിടിക്കുന്നതിന് ശേഷം
+// let CO2 = data.data[0].intensity.actual;
+calculateColor(CO2);
+```
+
+**ഈ സംയോജനം നേടുന്നത്:**
+- **API ഡാറ്റ ഫ്ലോയെ ദൃശ്യ സൂചികയുമായി ബന്ധിപ്പിക്കുന്നു**
+- **പുതിയ ഡാറ്റ വന്നു കൊണ്ട് ഐക്കൺ അപ്ഡേറ്റുകൾ പടിപടിയായി പരിമിതിക്കുന്നു**
+- **നിലവിലെ കാർബൺ ഇൻറൻസിറ്റി അടിസ്ഥാനമാക്കി യഥാർത്ഥ കാര്യക്ഷമ ദൃശ്യമാനം ഉറപ്പാക്കുന്നു**
+- **ഡാറ്റ ഫെട്ടിംഗും പ്രദർശന ലജിക് വേർതിരിച്ചുകൊള്ളുന്നു**
+
+അവസാനമായി, `/dist/background.js`-ലിൽ ഈ പശ്ചാത്തല കാൾസ് കേൾക്കുന്നListener ചേർക്കുക:
+
+```javascript
+// കോൺറെന്റ് സ്ക്രിപ്റ്റിൽ നിന്നുള്ള സന്ദേശങ്ങൾ கேட்டുക
+chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
+ if (msg.action === 'updateIcon') {
+ chrome.action.setIcon({ imageData: drawIcon(msg.value) });
+ }
+});
+
+// Canvas API ഉപയോഗിച്ച് ഡൈനാമിക് ഐക്കൺ വരയ്ക്കുക
+// energy lollipop എക്സ്റ്റൻഷൻ നിന്ന് വായിച്ചത് - നല്ല ഫീച്ചർ!
+function drawIcon(value) {
+ // മെച്ചപ്പെട്ട പ്രകടനത്തിനായി ഓഫ്സ്ക്രീൻ കാൻവാസ് നിർമ്മിക്കുക
+ const canvas = new OffscreenCanvas(200, 200);
+ const context = canvas.getContext('2d');
+
+ // കാർബൺ തീവ്രത പ്രദർശിപ്പിക്കുന്ന നിറമുള്ള വൃത്തം വരയ്ക്കുക
+ context.beginPath();
+ context.fillStyle = value.color;
+ context.arc(100, 100, 50, 0, 2 * Math.PI);
+ context.fill();
+
+ // ബ്രൗസർ ഐക്കണായി ഉപയോഗിക്കാനുള്ള ഇമേജ് ഡാറ്റ റിട്ടൺ ചെയ്യുക
+ return context.getImageData(50, 50, 100, 100);
+}
+```
+
+**ഈ ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റ് ചെയ്യുന്നത്:**
+- **പ്രധാന സ്ക്രിപ്റ്റ്കരിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കേൾക്കുന്നു** (ഒരു റിസപ്ഷനിസ്റ്റ് ഫോണുകൾ സ്വീകരിക്കുന്നതു പോലെ)
+- **'updateIcon' അഭ്യർത്ഥനകൾ പ്രോസസ് ചെയ്ത് ടൂൾബാർ ഐക്കൺ മാറ്റുന്നു**
+- **Canvas API ഉപയോഗിച്ച് പുതിയ ഐക്കണുകൾ സൃഷ്ടിക്കുന്നു**
+- **നേരത്തെ കാർബൺ ഇൻറൻസിറ്റി കാണിക്കുന്ന ഒരു ലളിതമായ നിറം വൃത്തം വരയ്ക്കുന്നു**
+- **തെളിവുതരുന്ന പുതിയ ഐക്കൺ ബ്രൗസർ ടൂൾബാറിൽ അപ്ഡേറ്റ് ചെയ്യുന്നു**
+- **OffscreenCanvas ഉപയോഗിച്ച് മികച്ച പ്രകടനം ഉറപ്പാക്കുന്നു (UI തടസ്സമില്ലാതെ)**
+
+✅ Canvas API-നെ കുറിച്ച് കൂടുതൽ [സ്പേസ് ഗെയിം പാഠങ്ങളിൽ](../../6-space-game/2-drawing-to-canvas/README.md) നിങ്ങളെ പഠിപ്പിക്കും.
+
+```mermaid
+sequenceDiagram
+ participant CS as ഉള്ളടക്ക സ്ക്രിപ്റ്റ്
+ participant BG as ബാക്ക്ഗ്രൗണ്ട് സ്ക്രിപ്റ്റ്
+ participant Canvas as ഓഫ്സ്ക്രീൻ കാൻവാസ്
+ participant Browser as ബ്രൗസർ ഐക്കൺ
+
+ CS->>BG: sendMessage({action: 'updateIcon', color})
+ BG->>Canvas: new OffscreenCanvas(200, 200)
+ Canvas->>Canvas: getContext('2d')
+ Canvas->>Canvas: beginPath() + fillStyle + arc()
+ Canvas->>Canvas: fill() + getImageData()
+ Canvas->>BG: Return image data
+ BG->>Browser: chrome.action.setIcon(imageData)
+ Browser->>Browser: ടൂൾബാർ ഐക്കൺ അപ്ഡേറ്റ് ചെയ്യുന്നു
+```
+### 🔄 **പാഠ്യപരമായ പരിശോധന**
+**പൂർണ്ണ എക്സ്ടൻഷൻ മനസ്സിലാക്കൽ**: ഉള്ള പാടുംബുകളിലെ ജീവചരിത്രം ഉറപ്പാക്കുക:
+- ✅ എക്സ്ടൻഷൻ സ്ക്രിപ്റ്റുകൾ തമ്മിലുള്ള സന്ദേശ കൈമാറ്റം എങ്ങനെ പ്രവർത്തിക്കുന്നു?
+- ✅ പ്രകടനത്തിന് സാധാരണ Canvas-ലേക്ക് പകരം OffscreenCanvas ആവശ്യമാകുന്നതെന്തുകൊണ്ട്?
+- ✅ ക്രോം റൺടൈം API എക്സ്റൻഷൻ ആർക്കിടെക്ചറിൽ എന്തു പങ്ക് വഹിക്കുന്നു?
+- ✅ വർണ്ണം കണക്കാക്കുന്ന ആൾഗോരിതം ഡാറ്റയെ ദൃശ്യപ്രതികരണത്തിലേക്ക് എങ്ങനെ മാപ്പ് ചെയ്യുന്നു?
+
+**പ്രകടന ശ്രദ്ധകൾ**: നിങ്ങളുടെ എക്സ്റൻഷൻ ഇപ്പോൾ കാണിക്കുന്നു:
+- **സമ്പ്രേഷണ കാര്യക്ഷമത**: സ്ക്രിപ്റ്റ് പശ്ചാത്തലങ്ങൾക്കിടയിൽ തിളക്കമുള്ള ആശയവിനിമയം
+- **ഒപ്റ്റിമൈസ്ഡ് റെൻഡറിംഗ്**: UI തടസ്സം കൂട്ടുന്ന OffscreenCanvas ഒഴിവാക്കുന്നു
+- **പ്രതീക്ഷയുടെ ആധികാരിക അപ്ഡേറ്റ്**: സജീവ ഡേറ്റയുടെ അടിസ്ഥാനത്തിൽ ചിഹ്നം ഡൈനാമിക് മാറ്റങ്ങൾ
+- **മെമ്മറി മാനേജ്മെന്റ്**: ശരിയായ ക്ലീനപ്പ് നിലവാരണവും ഉറവിടം കൈകാര്യം ചെയ്യലും
+
+**നിങ്ങളുടെ എക്സ്റ്റൻഷൻ പരിശോധിക്കാനുള്ള സമയം:**
+- **എല്ലാം നിർമ്മിക്കുക** `npm run build` ഉപയോഗിച്ച്
+- **മറുപരിശോധിക്കുക** നിങ്ങളുടെ എക്സ്റൻഷൻ ബ്രൗസറിൽ (ഈ പടി മറക്കരുത്)
+- **തുറക്കൂ** നിങ്ങളുടെ എക്സ്റൻഷനും ആ ചിഹ്നം നിറങ്ങൾ മാറുന്നത് കാണൂ
+- **പരിശോധിക്കൂ** ലോകമാകെയുള്ള യഥാർത്ഥ കാർബൺ ഡാറ്റയെ എങ്ങനെ പ്രതികരിക്കുന്നു എന്ന്
+
+ഇപ്പൊഴും അങ്ങയുടെ ലോഡർ ലൊൺഡറി എപ്പോൾ ഒരു നല്ല സമയം ആണെന്ന് ശരിയായ മനസ്സിലാക്കും അല്ലെങ്കിൽ വിശുദ്ധമായ ഊർജ്ജം കാത്തിരിക്കണം. നിനക്ക് സത്യമായും ഉപകാരപ്രദമായ ഒന്നുപണിചെയ്തു, ബ്രൗസർ പ്രകടനം പറ്റിയുള്ള ധാരാളം കാര്യങ്ങളും പഠിച്ചു.
+
+## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀
+
+ഈ ചലഞ്ച് പൂർത്തിയാക്കാൻ ഏജന്റ് മോഡ് ഉപയോഗിക്കുക:
+
+**വിവരണം:** എക്സ്റൻഷന്റെ പ്രകടന നിരീക്ഷണ ശേഷികൾ മെച്ചപ്പെടുത്തുക, വിവിധ ഘടകങ്ങളുടെ ലോഡ് സമയം ട്രാക്ക് ചെയ്ത് പ്രദർശിപ്പിക്കാൻ ഒരു ഫീച്ചർ ചേർക്കുക.
+
+**പ്രോംപ്റ്റ്:** ബ്രൗസർ എക്സ്റൻഷനിലെ പ്രകടനം നിരീക്ഷിക്കുന്ന ഒരു സിസ്റ്റം സൃഷ്ടിക്കുക, API യിൽ നിന്നുള്ള CO2 ഡാറ്റ എടുക്കാൻ, വർണ്ണം കണക്കാക്കാൻ, ചിഹ്നം അപ്ഡേറ്റ് ചെയ്യാൻ വേണ്ടി എടുക്കുന്ന സമയം അളക്കുകയും ലോഗ് ചെയ്യുകയും ചെയ്യുക. Performance API ഉപയോഗിച്ച് ഈ പ്രവർത്തനങ്ങൾ അളക്കുന്ന `performanceTracker` എന്ന ഒരു ഫംഗ്ഷൻ ചേർക്കുക. കാലസൂചികകളും ദൈർഘ്യ മെട്രिक्स ഉൾപ്പെടെ ബ്രൗസർ കോൺസോളിൽ ഫലങ്ങൾ പ്രദർശിപ്പിക്കണം.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) പറ്റി കൂടുതൽ അറിയൂ.
+
+## 🚀 ചലഞ്ച്
+
+ഇതാണ് ഒരു രസകരമായ അന്വേഷണ ദൗത്യവും: പുരാതനകാലം മുതല് പ്രവർത്തനക്ഷമമായ കമ്യൂണിറ്റി സൈറ്റുകൾ (വിക്കിപീഡിയ, GitHub, Stack Overflow പോലെ) തിരഞ്ഞെടുക്കുക, അവരുടെ കമ്മിറ്റ് ചരിത്രം പരിശോധിക്കുക. എവിടെ പ്രകടന മെച്ചപ്പെടുത്തലുകൾ നടന്നു എന്നു കണ്ടെത്താമോ? എവിടെ പ്രശ്നങ്ങൾ ആവർത്തിച്ച് പൊഞ്ഞിത്തുടർന്നുള്ളതായി നിങ്ങൾ കാണുന്നുണ്ടോ?
+
+**നിങ്ങളുടെ അന്വേഷണം:**
+- **സേർച്ച് ചെയ്യുക** "optimize", "performance", "faster" പോലുള്ള വാക്കുകൾക്ക് കമ്മിറ്റ് മെസേജുകളിൽ
+- **നോക്കൂ** പാറ്റേണുകൾ – ഒരേ തരം പ്രശ്നങ്ങൾ അവര് തുടർച്ചയായി പരിഹരിക്കുന്നുണ്ടോ?
+- **നോക്കുക** വെബ്സൈറ്റുകൾ പെട്ടെന്ന് മന്ദഗതിയിലേക്ക് എത്തുന്നതിന് കാരണമായ സാധാരണ പ്രശ്നങ്ങൾ
+- **പങ്കുവെക്കുക** കണ്ടെത്തലുകൾ – മറ്റുള്ള ഡെവലപ്പർമാർക്ക് യാഥാർഥ ഉദാഹരണങ്ങളിൽനിന്ന് പഠിക്കാൻ
+
+## ക്ലാസ് കഴിഞ്ഞ് ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/28)
+
+## അവലോകനം & സ്വയം പഠനം
+
+[performance newsletter](https://perf.email/) സബ്സ്ക്രൈബ് ചെയ്യാൻ പരിഗണിക്കൂ
+
+ബ്രൗസറുകളുടെ പെർഫോർമൻസ് ടാബുകൾ പരിശോധിച്ച് വേഗം അളക്കാൻ ഉപയോഗിക്കുന്ന മികവുകൾ പരിശോധിക്കുക. പ്രധാന വ്യത്യാസങ്ങളൊന്നും കണ്ടെത്തും?
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയും**
+- [ ] ബ്രൗസറിലെ ടാസ്ക് മാനേജർ തുറക്കൂ (Chrome ൽ Shift+Esc)
+- [ ] DevTools-ലെ Performance ടാബ് ഉപയോഗിച്ച് വെബ് പേജിന്റെ പ്രകടനം റെക്കോർഡ് ചെയ്യുക
+- [ ] എക്സ്റൻഷൻ പേജ് പരിശോധിക്കുക ചുരുങ്ങിയ-startup സമയമുള്ള എക്സ്റൻഷനുകൾ കണ്ടെത്താൻ
+- [ ] താൽക്കാലികമായി ചില നംമ്പുകളെ അപ്രാപ്യവാക്കി പ്രകടന വ്യത്യാസങ്ങൾ നോക്കൂ
+
+### 🎯 **ഈ മണിക്കൂറിൽ നിങ്ങൾ നേടാനാവുന്ന കാര്യങ്ങൾ**
+- [ ] ക്ലാസ് കഴിഞ്ഞ് ക്വിസ് പൂർത്തിയാക്കി പ്രകടന ആശയങ്ങൾ മനസ്സിലാക്കുക
+- [ ] നിങ്ങളുടെ ബ്രൗസർ എക്സ്റൻഷൻ-നായി പിന്ഭാഗ സ്ക്രിപ്റ്റ് ആസൂത്രണം ചെയ്യുക
+- [ ] browser.alarms ഉപയോഗിച്ച് ഫലപ്രദമായ പിന്ഭാഗ ടാസ്കുകൾ കൈകാര്യം ചെയ്യൽ
+- [ ] കണ്ടൻറ് സ്ക്രിപ്റ്റും പിന്ഭാഗ സ്ക്രിപ്റ്റും തമ്മിലുള്ള മെസേജ് പാസ്സിങ് പരിശീലനം
+- [ ] നിങ്ങളുടെ എക്സ്റൻഷന്റെ ഉറവിട ഉപയോഗം അളക്കുകയും പരിഷ്കരിക്കുകയും ചെയ്യുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചകളോളം പ്രകടന യാത്ര**
+- [ ] മികച്ച പ്രകടനമുള്ള ഒരു എക്സ്റൻഷൻ പിന്ഭാഗ പ്രവർത്തനവുമായി നിർമ്മിക്കുക
+- [ ] സർവീസ് വർക്കറുകളും ആധുനിക എക്സ്റൻഷൻ ആർക്കിടെക്ചറും ആൽക്കുക
+- [ ] ഫലപ്രദമായ ഡാറ്റയുടെ സിങ്ക്രണൈസേഷൻ, കാഷിംഗ് തന്ത്രങ്ങൾ നടപ്പിലാക്കുക
+- [ ] എക്സ്റൻഷൻ പ്രകടനത്തിനുള്ള മുൻനിര ഡീബഗിംഗ് സുഷ്ടമായ മാർഗങ്ങൾ പഠിക്കുക
+- [ ] പ്രവർത്തനവും ഉറവിട കാര്യക്ഷമതയും തമ്മിൽ സന്തുലിതപ്പെടുത്തുക
+- [ ] പ്രകടനത്തെ സംബന്ധിച്ച പരീക്ഷണങ്ങളും ഉപയോഗകേടുകളും നിർമ്മിക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസങ്ങളോളം മതിമറക്കൽ മികവ്**
+- [ ] എന്റർപ്രൈസ് ക്ലാസ്സിലുള്ള, മികച്ച പ്രകടനമുള്ള ബ്രൗസർ എക്സ്റൻഷൻ നിർമ്മിക്കുക
+- [ ] വെബ് വർക്കേഴ്സും സർവീസ് വർക്കേഴ്സും ഉടനടി വെബ് പ്രകടനം പഠിക്കുക
+- [ ] പ്രകടന മെച്ചപ്പെടുത്തൽ ലക്ഷ്യമാക്കിയ ഓപ്പൺ സോഴ്സ് പദ്ധതികൾക്ക് സംഭാവന നൽകുക
+- [ ] ബ്രൗസർ ആഭ്യന്തരങ്ങളും മുൻനിര ഡീബഗിംഗ് പരിജ്ഞാനവും നേടുക
+- [ ] പ്രകടന നിരീക്ഷണ ഉപകരണങ്ങളും മികച്ച പ്രവർത്തന മാർഗരേഖകളും രൂപകൽപ്പന ചെയ്യുക
+- [ ] വെബ് അപ്ലിക്കേഷനുകളുടെ പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിന് വിദഗ്ദ്ധനായി വളരുക
+
+## 🎯 നിങ്ങളുടെ ബ്രൗസർ എക്സ്റൻഷൻ മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title പൂർണ്ണമായ അഡിഷൻ വികസന പുരോഗതി
+
+ section പ്രകടന അടിസ്ഥാനങ്ങൾ (20 മിനിറ്റ്)
+ ബ്രൗസർ പ്രൊഫൈലിംഗ്: ഡെവ്ടൂൾസ് മാസ്റ്ററി
+ : ടൈംലൈൻ വിശകലനം
+ : ബോട്ടിൽനെക്കിംഗ് തിരിച്ചറിവ്
+ : ക്രിറ്റിക്കൽ റൻഡറിംഗ് പാത്ത്
+
+ section പശ്ചാത്തല ജോലികൾ (25 മിനിറ്റ്)
+ അഡിഷൻ ആർക്കിടെക്ചർ: സന്ദേശം കൈമാറ്റം
+ : പശ്ചാത്തല സ്ക്രിപ്റ്റുകൾ
+ : റൺടൈം API ഉപയോഗം
+ : ക്രോസ്-കോൺടെകസ്റ്റ് കമ്മ്യൂണിക്കേഷൻ
+
+ section ദൃശ്യ പ്രതികരണം (30 മിനിറ്റ്)
+ ഡൈനാമിക് UI: കളർ കാൽക്കുലേഷൻ ആൽഗോരിതങ്ങൾ
+ : ക്യാനവാസ് API സംയോജനം
+ : ഐകൺ സൃഷ്ടി
+ : റിയൽ-ടൈം അപ്ഡേറ്റുകൾ
+
+ section പ്രകടന മെച്ചപ്പെടുത്തൽ (35 മിനിട്ടു)
+ ഫലപ്രദമായ കോഡ്: അസിങ്ക് ഓപ്പറേഷനുകൾ
+ : മെമ്മറി മാനേജ്മെന്റ്
+ : റിസോഴ്സ് ക്ലീൻ അപ്
+ : പ്രകടന നിരീക്ഷണം
+
+ section പ്രൊഡക്ഷൻ റെഡിയായി (45 മിനിറ്റ്)
+ പൊളിഷ് & ടെസ്റ്റിങ്: ക്രോസ്-ബ്രൗസർ അനുയോജ്യത
+ : പിശക് കൈകാര്യം
+ : ഉപയോക്തൃ അനുഭവം
+ : പ്രകടന പരിശോദന
+
+ section ആഡ്വാൻസ്ഡ് ഫീച്ചറുകൾ (1 ആഴ്ച)
+ അഡിഷൻ ഇക്കോസിസ്റ്റം: ക്രോം വെബ് സ്റ്റോർ
+ : ഉപയോക്തൃ തിരുവായ്
+ : അനലിറ്റിക് സംയോജനം
+ : അപ്ഡേറ്റ് മാനേജ്മെന്റ്
+
+ section പ്രൊഫഷണൽ വികസനം (2 ആഴ്ച)
+ എന്റർപ്രൈസ് അഡിഷനുകൾ: ടീം സഹകരണം
+ : കോഡ് റിവ്യൂകൾ
+ : CI/CD പൈപ്പ്ലൈൻസ്
+ : സുരക്ഷാ ഓഡിറ്റ്
+
+ section എക്സ്പേർട്ട് മാസ്റ്ററി (1 മാസം)
+ പ്ലാറ്റ്ഫോം വിദഗ്ധത: ആഡ്വാൻസ്ഡ് ക്രോം APIs
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+ : ആർക്കിടെക്ചർ പാറ്റേണുകൾ
+ : ഓപ്പൺ സോഴ്സ് സംഭാവന
+```
+### 🛠️ നിങ്ങളുടെ സമ്പൂർണ്ണ എക്സ്റൻഷൻ ഡെവലപ്മെന്റ് ടൂൾകിറ്റ്
+
+ഈ ട്രിലജി പൂർത്തിയാക്കിയ ശേഷം നിങ്ങൾ മറികടന്നിരിക്കുന്നു:
+- **ബ്രൗസർ ആർക്കിടെക്ചർ**: എക്സ്റൻഷനുകൾ ബ്രൗസർ സിസ്റ്റങ്ങളുമായി എങ്ങനെ സംയോജിപ്പിക്കപ്പെടുന്നു എന്ന് ആഴത്തിലുള്ള ബോധ്യവും
+- **പ്രകടന പ്രൊഫൈലിംഗ്**: ഡെവലപ്പർ ടൂളുകൾ ഉപയോഗിച്ച് ബാധ്യതകൾ കണ്ടെത്താനും പരിഹരിക്കാനും കഴിവ്
+- **ആസിങ്ക് പ്രോഗ്രാമിംഗ്**: പ്രതികരണപരവും തടസ്സരहितവും പ്രവർത്തനങ്ങൾക്കുള്ള ആധുനിക ജാവാസ്ക്രിപ്റ്റ് മാതൃകകൾ
+- **API സംയോജനം**: അംഗപരിമിതിയും പിശകു കൈകാര്യം ചെയ്യലും ഉള്ള പുറമെ ഡാറ്റ എടുത്തുകൂടി പ്രവർത്തനങ്ങൾ
+- **ദൃശ്യ രൂപകൽപ്പന**: ഡൈനാമിക് UI അപ്ഡേറ്റുകളും കാൻവാസ് അടിസ്ഥാന ചിത്രരചനയും
+- **മെസേജ് പാസ്സിങ്**: എക്സ്റൻഷൻ ആർക്കിടെക്ചറുകളിൽ സ്ക്രിപ്റ്റുക്കൾ തമ്മിലുള്ള ആശയവിനിമയം
+- **ഉപയോക്തൃ അനുഭവം**: ലോഡിംഗ് സ്റ്റേറ്റുകളും പിശക് കൈകാര്യം ചെയ്യലും, മനോഹരമായ ഇടപെടലുകൾ
+- **സവിശേഷ കഴിവുകൾ**: യാഥാർത്ഥ്യമാണ് പരിശോധനയും, ഡീബഗിംഗും, പുതിയ വെബ്സ്റ്റാൻഡേർഡുകൾക്കും അനുയോജ്യം
+
+**യഥാർത്ഥ ലോകം അപ്ലിക്കേഷനുകൾ**: നിങ്ങളുടെ എക്സ്റൻഷൻ വികസന കഴിവുകൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **പ്രോഗ്രസീവ് വെബ് ആപ്പുകൾ**: സമാനമായ ആർക്കിടെക്ചറും പ്രകടന മാതൃകകളും
+- **ഇലക്ട്രോൺ ഡെസ്ക്ടോപ്പ് ആപ്പുകൾ**: വെബ് സാങ്കേതിക വിദ്യകൾ ഉപയോഗിച്ച് പോര്സംഗഭേദമില്ലാത്ത ആപ്പുകൾ
+- **മൊബൈൽ ഹൈബ്രിഡ് ആപ്പുകൾ**: Cordova/PhoneGap ഡെവലപ്പ്മെന്റ് വെബ് API വഴിയാണ്
+- **എന്റർപ്രൈസ് വെബ് ആപ്പുകൾ**: സമ്ബൃദ്ധമായ ഡാഷ്ബോർഡ്-പ്രോഡക്ഷൻ ഉപകരണങ്ങൾ
+- **ക്രോം ഡെവടൂൾസ് എക്സ്റൻഷനുകൾ**: മുൻനിര ഡെവലപ്പർ ടൂളുകളും ഡീബഗ്ഗും
+- **വെബ് API സംയോജനം**: പുറം ലോക സേവനങ്ങളുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന ഏതൊരു ആപ്പും
+
+**പ്രൊഫഷണൽ സ്വാധീനം**: ഇപ്പോൾ നിങ്ങൾക്ക് കഴിയുന്നത്:
+- **പ്രൊഡക്ഷൻ-സജ്ജമായ എക്സ്റൻഷനുകൾ നിർമ്മിക്കുക** ആശയപ്പിൽ നിന്നും ദിശാനിർദ്ദേശം വരെ
+- **വെബ് അപ്ലിക്കേഷൻ പ്രകടനം മെച്ചപ്പെടുത്തുക** വ്യവസായ നിലവാരമുള്ള പ്രൊഫൈലിംഗ് ഉപകരണങ്ങൾ ഉപയോഗിച്ച്
+- **ആർക്കിടെക്ചർ സൃഷ്ടിക്കുക** ശരിയായ പ്രധാന പ്രവൃത്തിപ്രവാഹ വ്യതിരിക്തകൃത്യങ്ങളും
+- **ഡീബഗ് ചെയ്യുക** സങ്കീർണ്ണമായ ആസിങ്ക് പ്രവർത്തനങ്ങളും കൺടെക്സ്റ്റുകൾ ഇടയിൽ ആശയവിനിമയം
+- **ഓപ്പൺ സോഴ്സിൽ സംഭാവന നൽകുക** എക്സ്റൻഷൻ പദ്ധതികളിലും ബ്രൗസർ സ്റ്റാൻഡേർഡുകളിലും
+
+**അടുത്ത പടിവാതിൽ അവസരങ്ങൾ**:
+- **ക്രോം വെബ് സ്റ്റോർ ഡെവലപ്പർ**: മില്ല്യണുകൾക്ക് എക്സ്റൻസ്പബ്ലിഷ് ചെയ്യുക
+- **വെബ് പ്രകടന എഞ്ചിനീയർ**: ഒപ്റ്റിമൈസേഷൻ specialization കൂടാതെ ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തൽ
+- **ബ്രൗസർ പ്ലാറ്റ്ഫോം ഡെവലപ്പർ**: ബ്രൗസർ എഞ്ചിൻ വികസനത്തിൽ സംഭാവന
+- **എക്സ്റ്റൻഷൻ ഫ്രെയിംവർക്ക് സൃഷ്ടികർത്താവ്**: മറ്റ് ഡെവലപ്പർമാർക്കായുള്ള ഉപകരണം നിർമ്മിക്കൽ
+- **ഡെവലപ്പർ റിലേഷൻസ്**: പഠനവും ഉള്ളടക്ക സൃഷ്ടിയും വഴി അറിവ് പങ്കുവെക്കൽ
+
+🌟 **കാഴ്ചപ്പാട് അനലോകനം**: നിങ്ങൾ ഒരു സമ്പൂർണ്ണ, പ്രവർത്തനക്ഷമ ബ്രൗസർ എക്സ്റൻഷൻ നിർമ്മിച്ചു, പ്രൊഫഷണൽ വികസന രീതികളും ആധുനിക വെബ് സ്റ്റാൻഡേർഡുകളും പ്രകടിപ്പിക്കുന്നു!
+
+## അസൈമെന്റ്
+
+[ഒരു സൈറ്റ് പ്രകടനത്തിനായി വിശകലനം ചെയ്യുക](assignment.md)
+
+---
+
+
+**പ്രത്യക്ഷാന്വേഷണം**:
+ഈ ഡോക്യുമെന്റ് AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് അനുഭവസ്ഥമായി വിവർത്തനം ചെയ്തു. നാം ശുദ്ധിത്വത്തിന് തയ്യാറെടുക്കുന്നുവെങ്കിലും, യാന്ത്രിക വിവർത്തനങ്ങളിൽ പിഴവുകൾ ഉണ്ടായേക്കാമെന്നും അന്യമായ അര്ഥക്കേടുകൾ സംഭവിക്കാമെന്നും ദയവായി ശ്രദ്ധിക്കുക. സ്വദേശ ഭാഷയിൽ ഉള്ള മൊഴിപ്രമാണം അധികാരപരമായ ഉറവിടമായി പരിഗണിക്കണം. നിർണ്ണായകമായ വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നു ഉണ്ടായ любуваат വ്യത്യാസങ്ങൾക്ക് ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/3-background-tasks-and-performance/assignment.md b/translations/ml/5-browser-extension/3-background-tasks-and-performance/assignment.md
new file mode 100644
index 000000000..bd8a0751d
--- /dev/null
+++ b/translations/ml/5-browser-extension/3-background-tasks-and-performance/assignment.md
@@ -0,0 +1,109 @@
+
+# പ്രകടനത്തിനായി ഒരു സൈറ്റ് വിശകലനം ചെയ്യുക
+
+## അസൈൻമെന്റ് അവലോകനം
+
+പ്രകടന വിശകലനം ആധുനിക വെബ് ഡെവലപ്പർമാർക്കുള്ള ഒരു നിർണ്ണായക കഴിവാണ്. ഈ അസൈൻമെന്റിൽ, നിങ്ങൾ ബ്രൗസർ അടിസ്ഥാനത്തിലുള്ള ഉപകരണങ്ങളും തൃശ്ചര സേവനങ്ങളും ഉപയോഗിച്ച് ബോട്ടിൽനെക്കുകൾ കണ്ടെത്തുകയും ഒപ്റ്റിമൈസേഷൻ തന്ത്രങ്ങൾ സമർപ്പിക്കുകയും ചെയ്യുന്ന ഒരു യഥാർത്ഥ വെബ്സൈറ്റിന്റെ സമഗ്ര പ്രകടന ഓഡിറ്റ് നടത്തും.
+
+വെബ്ബ് പ്രകടന സിദ്ധാന്തങ്ങളെ നിങ്ങൾ മനസ്സിലാക്കിയതും പ്രൊഫഷണൽ വിശകലന ഉപകരണങ്ങൾ ഫലപ്രദമായി ഉപയോഗിക്കുന്ന കഴിവും മുന്നോട്ട് വച്ച സവിശേഷ പ്രവർത്തന റിപ്പോർട്ടാണ് നിങ്ങൾ നൽകേണ്ടത്.
+
+## അസൈൻമെന്റ് നിർദ്ദേശങ്ങൾ
+
+**ഒരു വെബ്സൈറ്റ് തിരഞ്ഞെടുക്കുക** വിശകലനത്തിന് - താഴെയുള്ള ഓപ്ഷനുകളിൽ ഒരു തിരഞ്ഞെടുക്കുക:
+- നിങ്ങൾ സ്ഥിരമായി ഉപയോഗിക്കുന്ന ഒരു ജനപ്രിയ വെബ്സൈറ്റ് (ന്യൂസ് സൈറ്റ്, സോഷ്യൽ മീഡിയ, ഇ-കൊമേഴ്സ്)
+- ഒരു ഓപ്പൺ-സോഴ്സ് പ്രോജക്റ്റ് വെബ്സൈറ്റ് (GitHub പേജുകൾ, ഡോക്യുമെന്റേഷൻ സൈറ്റുകൾ)
+- ഒരു പ്രാദേശിക ബിസിനസ്സ് വെബ്സൈറ്റ് അല്ലെങ്കിൽ പോർട്ട്ഫോളിയോ സൈറ്റ്
+- നിങ്ങളുടെ സ്വന്തം പ്രോജക്റ്റ് അല്ലെങ്കിൽ മുൻപത്തെ കോഴ്സ് വർക്ക്
+
+**കൂടുതൽ ഉപകരണങ്ങൾ ഉപയോഗിച്ച് വിശകലനം നടത്തുക** കുറഞ്ഞത് മൂന്ന് വ്യത്യസ്ഥ കാഴ്ചപ്പാടുകൾ ഉപയോഗിച്ച്:
+- **ബ്രൗസർ ഡെവ്ടൂൾസ്** - Chrome/Edge Performance ടാബ് ഉപയോഗിച്ച് വിശദമായ പ്രൊഫൈലിംഗ് ചെയ്യുക
+- **ഓൺലൈൻ ഓഡിറ്റിംഗ് ഉപകരണങ്ങൾ** - Lighthouse, GTmetrix, അല്ലെങ്കിൽ WebPageTest ഉപയോഗിച്ച് ശ്രമിക്കുക
+- **നെറ്റ്വർക്ക് വിശകലനം** - റിസോഴ്സ് ലോഡിംഗ്, ഫയൽ വലുപ്പം, അഭ്യർത്ഥന പാറ്റേൺ പരിശോധിക്കുക
+
+**നിങ്ങളുടെ കണ്ടെത്തൽ ഒരു സമഗ്ര റിപ്പോർട്ടിൽ രേഖപ്പെടുത്തുക**, ഇതിൽ ഉൾപ്പെടുത്തേണ്ടത്:
+
+### പ്രകടന അളവുകൾ വിശകലനം
+- **ലോഡ് സമയ അളവുകൾ** പല ഉപകരണങ്ങളുടെയും കാഴ്ചപ്പാടുകളിൽ നിന്നുള്ളത്
+- **കോർ വെബ് വൈറ്റൽസ്** സ്കോറുകൾ (LCP, FID, CLS)യും അവയുടെ പാരാമീറ്ററും
+- **റിസോഴ്സ് വിഭജനം** ലോഡ് സമയത്തു ഏറ്റവും വളരെ സംഭാവന ചെയ്യുന്ന ആസ്തികൾ പ്രദർശിപ്പിക്കുന്നത്
+- **നെറ്റ്വർക്ക് വാട്ടർഫോൾ വിശകലനം** തടസ്സം സൃഷ്ടിക്കുന്ന റിസോഴ്സുകൾ തിരിച്ചറിയൽ
+
+### പ്രശ്നങ്ങൾ തിരിച്ചറിയൽ
+- **നിശ്ചിത പ്രകടന ബോട്ടിൽനെക്കുകൾ** പിന്തുണയുള്ള ഡാറ്റസഹിതം
+- **മൂല കാരണ വിശകലനം** പ്രശ്നങ്ങൾ എന്തുകൊണ്ടാണ് സംഭവിക്കുന്നത് എന്ന് വിശദീകരിക്കുന്നു
+- **ഉപയോക്തൃ ബാധ വിലയിരുത്തൽ** പ്രശ്നങ്ങൾ യാഥാർത്ഥ്യ ഉപയോക്താക്കളെ എങ്ങനെയാണ് ബാധിക്കുന്നത്
+- **പ്രാധാന്യക്രമം** തീവ്രതയും പരിഹാരത്തിനുള്ള ബുദ്ധിമുട്ടും അടിസ്ഥാനമാക്കിയുള്ള പ്രശ്നങ്ങളുടെ ക്രമീകരണം
+
+### ഒപ്റ്റിമൈസേഷൻ ശുപാർശകൾ
+- **നിശ്ചിതവും പ്രാബല്യവുമുള്ള മെച്ചപ്പെടുത്തലുകൾ** പ്രതീക്ഷിക്കുന്ന സ്വാധീനം
+- **പ്രതീഷ്ഠാപന തന്ത്രങ്ങൾ** നിർദേശിച്ച മാറ്റങ്ങൾക്ക്
+- **ആധുനിക മികച്ച പാരമ്പര്യങ്ങൾ** (lazy loading, compression എന്നിവ പോലുള്ളവ)
+- **തുടർന്നു പ്രവർത്തിക്കുന്ന പ്രകടന നിരീക്ഷണത്തിന് ഉപകരണങ്ങളും സാങ്കേതികവിദ്യകളും**
+
+## ഗവേഷണ ആവശ്യകതകൾ
+
+**ബ്രൗസർ ഉപകരണങ്ങളിൽ മാത്രം ആശ്രയിക്കരുത്** - നിങ്ങളുടെ വിശകലനം വികസിപ്പിക്കുക:
+
+**മൂന്നാംകക്ഷി ഓഡിറ്റിംഗ് സേവനങ്ങൾ:**
+- [Google Lighthouse](https://developers.google.com/web/tools/lighthouse) - സമഗ്ര ഓഡിറ്റുകൾ
+- [GTmetrix](https://gtmetrix.com/) - പ്രകടനവും ഒപ്റ്റിമൈസേഷനും സംബന്ധിച്ച洞察ങ്ങൾ
+- [WebPageTest](https://www.webpagetest.org/) - യഥാർഥ ലോക പരീക്ഷണ സാഹചര്യങ്ങൾ
+- [Pingdom](https://tools.pingdom.com/) - ആഗോള പ്രകടന നിരീക്ഷണം
+
+**പ്രത്യേകമായ വിശകലന ഉപകരണങ്ങൾ:**
+- [Bundle Analyzer](https://bundlephobia.com/) - JavaScript ബUNDLE വലുപ്പ വിശകലനം
+- [Image optimization tools](https://squoosh.app/) - ആസ്തി ഒപ്റ്റിമൈസേഷൻ അവസരങ്ങൾ
+- [Security headers analysis](https://securityheaders.com/) - സൈബർ സുരക്ഷ പ്രകടന സ്വാധീനം
+
+## ഡെലിവറബിളുകൾ ഫോർമാറ്റ്
+
+2-3 പേജുള്ള ഒരു പ്രൊഫഷണൽ റിപ്പോർട്ട് സൃഷ്ടിക്കുക, ഇതിൽ ഉൾപ്പെടുത്തേണ്ടത്:
+
+1. **എക്സിക്യൂട്ടീവ് സഖ്യാരി** - പ്രധാന കണ്ടെത്തലുകളും ശുപാർശകളും
+2. **രീതിശാസ്ത്രം** - ഉപയോഗിച്ച ഉപകരണങ്ങളും പരിശോധന മാർഗ്ഗങ്ങളും
+3. **നിലവിലെ പ്രകടന വിലയിരുത്തൽ** - അടിസ്ഥാന അളവുകളും മാപനങ്ങളും
+4. **കണ്ടെത്തിയ പ്രശ്നങ്ങൾ** - സമഗ്ര പ്രശ്ന വിശകലനവും പിന്തുണയുള്ള ഡാറ്റയും
+5. **ശുപാർശകൾ** - മുൻഗണനാ അടിസ്ഥാനമുള്ള മെച്ചപ്പെടുത്തൽ തന്ത്രങ്ങൾ
+6. **പ്രതിഷ്ഠാപന റോഡ്മാപ്പ്** - ഘട്ടം ഘട്ടമായ ഒപ്റ്റിമൈസേഷൻ മാർഗ്ഗരേഖ
+
+**ദൃശ്യ തെളിവ് ഉൾപ്പെടുത്തുക:**
+- പ്രകടന ഉപകരണങ്ങളും അളവുകളും കാണിക്കുന്ന സ്ക്രീൻഷോട്ടുകൾ
+- പ്രകടന ഡാറ്റ കാണിക്കുന്ന ചാർട്ടുകളും 그래ഫുകളും
+- സാധ്യമായിടത്തോളം മുൻപ്/ശേഷം താരതമ്യങ്ങൾ
+- നെറ്റ്വർക്ക് വാട്ടർഫോൾ ചാർട്ടുകളും റിസോഴ്സ് വിഭജനങ്ങളും
+
+## റൂബ്രിക്
+
+| മാനദണ്ഡം | ഉത്തമം (90-100%) | മതിയായത് (70-89%) | മെച്ചപ്പെടുത്തേണ്ടതുണ്ട് (50-69%) |
+| -------- | ------------------- | ----------------- | -------------------------- |
+| **വിശകലന ആഴം** | 4+ ഉപകരണങ്ങൾ ഉപയോഗിച്ച് സമഗ്രമായ വിശകലനം, മൂല കാരണ വിശകലനം, ഉപയോക്തൃ ബാധ വിലയിരുത്തൽ | 3 ഉപകരണങ്ങൾ ഉപയോഗിച്ച് നല്ല വിശകലനം, വ്യക്തമായ അളവുകൾ, അടിസ്ഥാന പ്രശ്ന തിരിച്ചറിയൽ | 2 ഉപകരണങ്ങൾ ഉപയോഗിച്ച് അടിസ്ഥാന വിശകലനം, മൂല്യമിടൽ കുറഞ്ഞ പ്രശ്ന തിരിച്ചറിയൽ |
+| **ഉപകരണ വൈവിധ്യം** | ബ്രൗസർ ടൂളുകൾ + 3+ മൂന്നാം കക്ഷി സേവനങ്ങൾ, തുലനാത്മക വിശകലനവും洞察ങ്ങളും | ബ്രൗസർ ടൂളുകളും 2 മൂന്നാം കക്ഷി സേവനങ്ങളും ചില തുലനാത്മക വിശകലനം | ബ്രൗസർ ടൂളുകൾ + 1 മൂന്നാം കക്ഷി സേവനം, പരിമിതമായ താരതമ്യം |
+| **പ്രശ്ന തിരിച്ചറിയൽ** | 5+ നിശ്ചിത പ്രകടന പ്രശ്നങ്ങൾ, വിശദമായ മൂല കാരണവും കണക്കാക്കിയ സ്വാധീനം | 3-4 പ്രകടന പ്രശ്നങ്ങൾ, നല്ല വിശകലനം, ചില സ്വാധീനം അളവ് | 1-2 പ്രകടന പ്രശ്നങ്ങൾ, അടിസ്ഥാന വിശകലനം |
+| **ശുപാർശകൾ** | നിശ്ചിതവും പ്രായോഗികവുമായ ശുപാർശകൾ, നടപ്പിലാക്കൽ വിശദാംശങ്ങളും പ്രതീക്ഷിച്ച സ്വാധീനം, ആധുനിക മികച്ച അന്തിമങ്ങള് | നല്ല ശുപാർശകൾ, ചില നടപ്പിലാക്കൽ മാർഗ്ഗനിർദ്ദേശങ്ങൾ, പ്രതീക്ഷിച്ച ഫലം | അടിസ്ഥാന ശുപാർശകൾ, പരിമിതമായ നടപ്പിലാക്കൽ വിശദാംശങ്ങൾ |
+| **പ്രൊഫഷണൽ അവതരണം** | വ്യക്തമായ ഘടന, ദൃശ്യ തെളിവുകൾ, എക്സിക്യൂട്ടീവ് സഖ്യാരി, പ്രൊഫഷണൽ ഫോർമാറ്റിംഗ് | നല്ല സംഘടന, ചില ദൃശ്യ തെളിവുകൾ, വ്യക്തമായ ഘടന | അടിസ്ഥാന സംഘടന, കുറഞ്ഞ ദൃശ്യ തെളിവുകൾ |
+
+## പഠന ഫലം
+
+ഈ അസൈൻമെന്റ് പൂർത്തിയാക്കുന്നതിലൂടെ നിങ്ങൾ പ്രകടിപ്പിക്കുമെന്ന് പ്രതീക്ഷിക്കുന്നത്:
+- **പ്രൊഫഷണൽ പ്രകടന വിശകലന ഉപകരണങ്ങളും രീതി ശാസ്ത്രങ്ങളും** പ്രയോഗിക്കുക
+- **ഡേറ്റാ അധിഷ്ഠിത വിശകലന ഉപയോഗിച്ച്** പ്രകടന ബോട്ടിൽനെക്കുകൾ തിരിച്ചറിയുക
+- **കോഡ് ഗുണനിലവാരവും ഉപയോക്തൃ പരിചയവും** തമ്മിലുള്ള ബന്ധം വിശകലനം ചെയ്യുക
+- **നിശ്ചിതവും പ്രാവർത്തികവുമായ ഒപ്റ്റിമൈസേഷൻ തന്ത്രങ്ങൾ ശുപാർശ ചെയ്യുക**
+- **സാങ്കേതിക കണ്ടെത്തലുകൾ പ്രൊഫഷണൽ ഫോർമാറ്റിൽ** സമർപ്പിക്കുക
+
+ഈ അസൈൻമെന്റ് പാഠത്തിൽ പഠിച്ച പ്രകടന ആശയങ്ങൾ ശക്തിപ്പെടുത്തുകയും പ്രായോഗിക കഴിവുകൾ വികസിപ്പിക്കുകയും ചെയ്യും, നിങ്ങൾ നിങ്ങളുടെ വെബ് ഡെവലപ്പ്മെന്റ് കരിയറിൽ തുടർച്ചയായി ഉപയോഗിക്കുന്നതാണ്.
+
+---
+
+
+**അസൂയാപത്രം**:
+ഈ പ്രമാണം AI ഭാഷാന്തര സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയിരിക്കുന്നതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്കായി പരിശ്രമിക്കുന്നുണ്ടെങ്കിലും സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനത്തിൽ ചില പിശക്കളും തെറ്റുകളും ഉണ്ടാകാൻ സാധ്യതയുണ്ട്. അതുകൊണ്ട്, അസൽ പ്രമാണം അതിന്റെ മാതൃഭാഷയിൽയാണ് ഔദ്യോഗിക ഉറവിടമെന്നും അംഗീകരിക്കേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന ഏതു തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദിത്വം വഹിക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/README.md b/translations/ml/5-browser-extension/README.md
new file mode 100644
index 000000000..66426e342
--- /dev/null
+++ b/translations/ml/5-browser-extension/README.md
@@ -0,0 +1,43 @@
+
+# ബ്രൗസർ എക്സ്റ്റൻഷൻ നിർമ്മിക്കൽ
+
+ബ്രൗസർ എക്സ്റ്റൻഷനുകൾ നിർമ്മിക്കുക എന്നത് നിങ്ങളുടെ ആപ്പുകളുടെ പ്രകടനം ചിന്തിക്കുന്നതിനുള്ള രസകരവും കൗതുകജനകവുമായ ഒരു മാർഗമാണ്, പാരമ്പര്യമുള്ള ഒരു വെബ് ആസ്തി രൂപീകരിക്കുമ്പോൾ. ഈ മാഡ്യൂളിൽ ബ്രൗസറുകൾ എങ്ങനെ പ്രവർത്തിക്കാറുണ്ട്, ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ എങ്ങനെ ഡിപ്ലോയ് ചെയ്യാം, ഫോമുകൾ എങ്ങനെ നിർമ്മിക്കാം, API കഴുകുക, പ്രാദേശിക സംഭരണിയിലേക്ക് എങ്ങനെ ഉപയോഗിക്കാം, നിങ്ങളുടെ വെബ്സൈറ്റ് പ്രകടനം എങ്ങനെ അളക്കാം, അതും മെച്ചപ്പെടുത്താം എന്നിവയെക്കുറിച്ചുള്ള പാഠങ്ങൾ ഉൾപ്പെടുന്നു.
+
+നിങ്ങൾ എഡ്ജ്, ക്രോം, ഫയർഫോക്സ് എന്നിവയിൽ പ്രവർത്തിക്കുന്ന ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ നിർമ്മിക്കും. മിനിമൽ വെബ്സൈറ്റ് പോലുള്ള ഈ എക്സ്റ്റൻഷൻ പ്രത്യേകം ഒരു പ്രവർത്തനത്തിനു അനുയോജ്യമായിട്ടുള്ളതാണ്, ഒരു നിശ്ചിത പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപയോഗവും കാർബൺ തീവ്രതയും കണ്ടെത്താൻ [C02 Signal API](https://www.co2signal.com) പരിശോധിക്കുകയും, അതിന്റെ കാർബൺ പാദചിഹ്നത്തിലെ റീഡിംഗ് അ Gelപ്പം നൽകുകയും ചെയ്യുന്നു.
+
+ഒരു API കീയും പ്രദേശ കോഡും ഒരു ഫോമിൽ ഇൻപുട്ട് ചെയ്തശേഷം, ഉപഭോക്താവ് ആവശ്യാനുസരണം ഈ എക്സ്റ്റൻഷനെ ഉപയോഗിക്കാമെന്നതാണ്. ഇത് പ്രാദേശിക വൈദ്യുതി ഉപയോഗം കണക്കാക്കി വ്യക്തിയുടെ വൈദ്യുതി ഉപയോഗ തീരുമാനങ്ങൾക്ക് സ്വാധീനം ചെലുത്തുന്ന ഡേറ്റ നൽകുന്നു. ഉദാഹരണത്തിന്, ഉയർന്ന വൈദ്യുതി ഉപയോഗമുള്ള ഒരു സമയത്ത് വസ്ത്രങ്ങൾ ഉണക്കുന്ന മെഷീൻ (കാർബൺ തീവ്ര പ്രവർത്തനം) പ്രവർത്തിപ്പിക്കുന്നത് വൈകിപ്പിക്കാം.
+
+### വിഷങ്ങൾ
+
+1. [ബ്രൗസറിനെക്കുറിച്ച്](1-about-browsers/README.md)
+2. [ഫോമുകളും പ്രാദേശിക സംഭരണിയും](2-forms-browsers-local-storage/README.md)
+3. [പശ്ചാത്തല ടാസ്കുകളും പ്രകടനവും](3-background-tasks-and-performance/README.md)
+
+### കൃതങ്ങൾ
+
+
+
+## കൃതങ്ങൾ
+
+ഈ വെബ് കാർബൺ ട്രിഗറിന്റെ ആശയം Microsoft ലെ Green Cloud Advocacy ടീമിന്റെ ലീഡ് ആസിം ഹുസൈൻ നിർദേശിച്ചവൻ ആണ്, കൂടാതെ [Green Principles](https://principles.green/) ലേഖകന്. ഇത് ആദ്യം ഒരു [വെബ്സൈറ്റ് പ്രോജക്ടായി](https://github.com/jlooper/green) ആരംഭിച്ചു.
+
+ബ്രൗസർ എക്സ്റ്റൻഷനിന്റെ ഘടന [Adebola Adeniran's COVID extension](https://github.com/onedebos/covtension) ൽ നിന്നാണ് ഗതി നേടിയത്.
+
+‘dot’ ഐക്കൺ സിസ്റ്റത്തിന്റെ പരിവർത്തനം [Energy Lollipop](https://energylollipop.com/) ബ്രൗസർ എക്സ്റ്റൻഷന്റെ കാൽിഫോർണിയ ഉപരിതലങ്ങളിലെ ഇമിഷനുകളുടെ ഐക്കൺ ഘടനയിൽ നിന്നാണ് വന്നത്.
+
+ഈ പാഠങ്ങൾ സ്നേഹത്തോടെ [Jen Looper](https://www.twitter.com/jenlooper) എഴുതിയത് ആണ് ♥️
+
+---
+
+
+**അസാധുവാക്കൽ**:
+ഈ രേഖ AI പരിഭാഷാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തതാണ്. നാം കൃത്യത ലക്ഷ്യമിട്ടിട്ടുണ്ടെങ്കിലും, സ്വയംകൃതമാക്കപ്പെട്ട പരിഭാഷയിൽ പിശകുകൾ അല്ലെങ്കിൽ അപൂർണ്ണതകളുണ്ടാകാം എന്ന് ദയവായി ശ്രദ്ധിക്കണം. ആọwọഭാഷയിൽ ഉള്ള യഥാർത്ഥ രേഖ അധികാരപൂർണ സ്രോതസ്സായി കണക്കാക്കപ്പെടണം. നിർണായക വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ നിർദ്ദേശിക്കപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ചതിനെ തുടർന്ന് ഉണ്ടാകാവുന്ന നിയമപരമായ തെറ്റിദ്ധാരണകൾക്ക് ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/README.md b/translations/ml/5-browser-extension/solution/README.md
new file mode 100644
index 000000000..aaf5b3208
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/README.md
@@ -0,0 +1,43 @@
+
+# കാർബൺ ട്രിഗർ ബ്രൗസർ എക്സ്റ്റൻഷൻ: പൂർത്തിയായ കോഡ്
+
+tmrowയുടെ C02 സിഗ്നൽ API ഉപയോഗിച്ച് വൈദ്യുതി ഉപഭോഗം ട്രാക്ക് ചെയ്ത്, നിങ്ങളുടെ ബ്രൗസറിൽ തന്നെ നിങ്ങളുടെ പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപഭോഗം എത്ര ഭാരം കൂടിയാണെന്ന് ഓർമപ്പെടുത്തുന്ന ഒരു ബ്രൗസർ എക്സ്റ്റൻഷൻ നിർമ്മിക്കുക. ഈ എക്സ്റ്റൻഷൻ ഇടയ്ക്കിടെ ഉപയോഗിക്കുന്നത് ഈ വിവരത്തിന്റെ അടിസ്ഥാനത്തിൽ നിങ്ങളുടെ പ്രവർത്തനങ്ങളെ സംബന്ധിച്ചുള്ള തീരുമാനം എടുക്കാൻ സഹായിക്കും.
+
+
+
+## ആരംഭിക്കൽ
+
+നിങ്ങൾക്കു് [npm](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്തിരിക്കണം. നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ഒരു ഫോൾഡറിൽ ഈ കോഡിന്റെ ഒരു പകർപ്പ് ഡൗൺലോഡ് ചെയ്യുക.
+
+ആവശ്യമായ എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+webpack ഉപയോഗിച്ച് എക്സ്റ്റൻഷൻ നിർമ്മിക്കുക
+
+```
+npm run build
+```
+
+Edge-ൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലത്തുഭാഗത്തുള്ള 'മൂന്ന് ഒമ്മ' മෙනുവിൽ നിന്ന് Extensions പാനൽ കണ്ടെത്തുക. അതിൽ നിന്നു് 'Load Unpacked' എന്നത് തിരഞ്ഞെടുക്കുക പുതിയ എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്യുന്നതിനായി. సూచനയിൽ 'dist' ഫോൾഡർ തുറക്കുക, എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്യും. ഇത് ഉപയോഗിക്കാൻ, CO2 Signal APIയ്ക്കുള്ള API കീ ആവശ്യമാണ് ([ഇവിടെ ഇമെയിൽ വഴി ഒന്നു നേടുക](https://www.co2signal.com/) - ഈ പേജിലെ ബോക്സിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകുക) കൂടാതെ [Electricity Map](https://www.electricitymap.org/map) യുമായി അനുസൃതമുള്ള നിങ്ങളുടെ മേഖലയുടെ [കോഡ്](http://api.electricitymap.org/v3/zones) (ബോസ്റ്റണിൽ, ഉദാഹരണത്തിന്, ഞാന് 'US-NEISO' ഉപയോഗിക്കുന്നു).
+
+
+
+API കീയും മേഖല രേഖപ്പെടുത്തുമ്പോൾ, ബ്രൗസർ എക്സ്റ്റൻഷൻ ബാറിലുള്ള വർണ്ണജഡ അംശം നിങ്ങളുടെ മേഖലയിലെ ഊർജ്ജ ഉപഭോഗം പ്രതിഫലിപ്പിക്കാൻ മാറുകയും, നിങ്ങൾക്ക് ഏതു ഊർജ്ജം അധികമുള്ള പ്രവർത്തനങ്ങൾ നടത്തുന്നതിന് അനുയോജ്യമാണ് എന്ന് സൂചിപ്പിക്കുകയും ചെയ്യും. ഈ 'അംശം' സംവിധാനം എന്നെ നൽകിയിരിക്കുന്നത് [Energy Lollipop എക്സ്റ്റൻഷൻ](https://energylollipop.com/) എന്നതാണ്, പ്രത്യേകിച്ച് കാലിഫോർണിയയിലെ ഉത്സർജ്ജങ്ങളുടെ കാര്യത്തിലാണ്.
+
+---
+
+
+**നിരോധനilinx/റിയായി**:
+ഈ രേഖ AI പരിഭാഷ സേവനം [കോ-ഓപ് ട്രാൻസ്ലേറ്റർ](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം തികച്ചും കൃത്യത ലക്ഷ്യമിടുന്നുവെങ്കിലും, സ്വയമർപ്പിതമായ വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ അപൂർവതകൾ ഉണ്ടായേക്കാമെന്ന 점 മനസ്സിലാക്കുക. മാതൃഭാഷയിൽ ഉള്ള അവിടുത്തെ മൗലിക രേഖയെ മാത്രമേ അധികാരപരമായ ഉറവിടമായി കണക്കാക്കാവൂ. നിർണായകമായ വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മാനവ പരിഭാഷ നിർദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ച് സംഭവിക്കുന്ന അവബോധക്കുറവുകൾക്കോ തെറ്റായ വ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദിത്വം ഏറ്റെടുക്കാറില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/translation/README.es.md b/translations/ml/5-browser-extension/solution/translation/README.es.md
new file mode 100644
index 000000000..ea694c8d5
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/translation/README.es.md
@@ -0,0 +1,43 @@
+
+# കാർബൺ ട്രിഗർ ബ്രൗസർ എക്സ്റ്റെൻഷൻ: പൂർണ്ണ കോഡ്
+
+TMROW-ന്റെ CO2 സിഗ്നൽ API ഉപയോഗിച്ച് വൈദ്യുതി ഉപയോഗം ട്രാക്ക് ചെയ്യുന്നതിനായി, നിങ്ങളുടെ പ്രദേശത്തെ വൈദ്യുതി ഉപഭോഗം നേരിട്ട് നിങ്ങളുടെ ബ്രൗസറിൽ ഓർമ്മപ്പെടുത്തുന്നതിനുള്ള ഒരു ബ്രൗസർ എക്സ്റ്റെൻഷൻ സൃഷ്ടിക്കുക. ഈ അഡ് ഹോക്ക് എക്സ്റ്റെൻഷൻ ഉപയോഗിക്കുന്നത് നിങ്ങളുടെ പ്രവർത്തനങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള തീരുമാനങ്ങൾ എടുക്കാൻ സഹായിക്കും.
+
+
+
+## ആരംഭിക്കാൻ
+
+[എന്.പി.എം](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്തിരിക്കണം. നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ഒരു ഫോൾഡറിലേക്ക് ഈ കോഡിന്റെ ഒരു കോപ്പി ഡൗൺലോഡ് ചെയ്യുക.
+
+അവശ്യമായ എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+webpack ഉപയോഗിച്ച് എക്സ്റ്റെൻഷൻ നിർമ്മിക്കുക:
+
+```
+npm run build
+```
+
+Edge-ലിൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലത് കോണിലുള്ള 'മൂന്ന് പോയിന്റുകൾ' മെനു ഉപയോഗിച്ച് എക്സറ്റൻഷൻസ് പാനൽ കണ്ടെത്തുക. അവിടെ നിന്ന് 'Unpackaged Load' തിരഞ്ഞെടുത്തു പുതിയ എക്സ്റ്റെൻഷൻ ലോഡ് ചെയ്യുക. ആവശ്യപ്പെട്ടപ്പോൾ 'dist' ഫോൾഡർ തുറക്കുക, അപ്പോൾ എക്സ്റ്റെൻഷൻ ലോഡ് ചെയ്യും. ഇത് ഉപയോഗിക്കാൻ, CO2 സിഗ്നൽ APIക്ക് ഒരു API കീ ആവശ്യമാണ് ([ഇവിടെ ഇമെയിൽ നൽകി എടുക്കുക](https://www.co2signal.com/) - ഇമെയിൽ പെട്ടിയിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകുക) കൂടാതെ [എലക്ട്രിസിറ്റിമാപ്](https://www.electricitymap.org/map)നുള്ള [നിങ്ങളുടെ മേഖലയ്ക്കുള്ള കോഡ്](http://api.electricitymap.org/v3/zones) (ഉദാഹരണത്തിന് ബോസ്റ്റണിൽ, 'US-NEISO' ആണ്).
+
+
+
+API കീയും പ്രദേശവും എക്സ്റ്റെൻഷൻ ഇന്റർഫേസിൽ നൽകുന്നതോടെ, ബ്രൗസറിന്റെ എക്സ്റ്റെൻഷൻ ബാറിൽ ഉള്ള നിറമുള്ള പോയിന്റ് നിങ്ങളുടെ പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപഭോഗം പ്രതിഫലിപ്പിക്കാൻ മാറുകയും, ഉയർന്ന വൈദ്യുതി ഉപയോഗമുള്ള പ്രവർത്തനങ്ങൾക്ക് അനുയോജ്യമായ സൂചന നൽകുകയും ചെയ്യും. ഈ "പോയിന്റുകൾ" അടിസ്ഥാനമാക്കിയുള്ള സങ്കൽപ്പം കാൽഫോറ്നിയയ്ക്കുള്ള [Energy Lollipop](https://energylollipop.com/) എക്സ്റ്റെൻഷനാണ് എന്നെ പ്രചോദിപ്പിച്ചത്.
+
+---
+
+
+**അസൂയിപ്പ്**:
+ഈ രേഖ AI മെടമായുള്ള തര്ജ്ജമാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തര്ജ്ജമ ചെയ്തത് ആണ്. നമുക്ക് കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുള്ളതെങ്കിലും, സ്വയംചാലിതമായ തര്ജ്ജമകളില് പിശകുകളും അപൂര്ണതകളും ഉണ്ടാകാവുന്നതാണ്. മാതൃഭാഷയിലുള്ള പ്രാരംബിക രേഖ എന്റെസാധാരണമായ സ്രോതസരായി പരിഗണിക്കപ്പെടണം. അപകടസാധ്യതയുള്ള വിവരങ്ങള്ക്കായി പ്രൊഫഷണല് മാനവ തര്ജ്ജമ ശുപാര്ശ ചെയ്യുന്നുണ്ട്. ഈ തര്ജ്ജമ ഉപയോഗിച്ചതിനുള്ള ചില തെറ്റായ സമജങ്ങള് അല്ലെങ്കില് തെറ്റിച്ചുറപ്പുകള്ക്കായി ഞങ്ങള് ഉത്തരവാദിയല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/translation/README.fr.md b/translations/ml/5-browser-extension/solution/translation/README.fr.md
new file mode 100644
index 000000000..41973b281
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/translation/README.fr.md
@@ -0,0 +1,43 @@
+
+# Carbon Trigger ബ്രൗസർ എക്സ്ടൻഷൻ: പൂർത്തിയായ കോഡ്
+
+tmrow ൽ നിന്നുള്ള C02 സിഗ്നൽ API ഉപയോഗിച്ച് വൈദ്യുതി ഉപയോഗം നിരീക്ഷിക്കാൻ, നിങ്ങളുടെ പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപയോഗത്തെപ്പറ്റി നേരിട്ടുള്ള ഓർമ്മപ്പെടുത്തലിനായി ഒരു ബ്രൗസർ എക്സ്ടൻഷൻ സൃഷ്ടിക്കുക. ഈ പഴയകാല എക്സ്ടൻഷൻ ഉപയോഗിക്കുന്നത് ഈ വിവരങ്ങളുടെ അടിസ്ഥാനത്തിൽ നിങ്ങളുടെ പ്രവർത്തനങ്ങളെക്കുറിച്ച് നീതിപാലനം നടത്താൻ സഹായിക്കും.
+
+
+
+## തുടക്കം
+
+നിങ്ങൾക്ക് [npm](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നത് ഉണ്ടായിരിക്കണം. നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ഒരു ഫോൾഡറിൽ ഈ കോഡിൻറെ കോപ്പി ഡൗൺലോഡ് ചെയ്യുക.
+
+ആവശ്യമുള്ള എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+Webpack ൽ നിന്നുള്ള എക്സ്ടൻഷൻ നിർമ്മിക്കുക
+
+```
+npm run build
+```
+
+Edge ൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലതുവശത്തുള്ള 'മൂന്നു പോയിന്റ്' മെനു ഉപയോഗിച്ച് ഇക്സ്റ്റൻഷൻസ് പാനൽ കണ്ടെത്തുക. അവിടെ നിന്നും 'Unpacked Extension Load' തിരഞ്ഞെടുക്കുക, പുതിയ എക്സ്ടൻഷൻ ലോഡ് ചെയ്യാൻ. പ്രോമ്പ്റ്റിൽ 'dist' ഫോൾഡർ തുറക്കുക, എക്സ്ടൻഷൻ ലോഡ് ചെയ്യും. ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്ന നിങ്ങളുടെ പ്രദേശത്തേക്ക് അനുയോജ്യമായ CO2 സിഗ്നൽ API കേ (അവിടെ [ഇമെയിൽ വഴി ഒരു കീ നേടുക](https://www.co2signal.com/) - ഈ പേജിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകി) കൂടാതെ [ഇലക്ട്രിസിറ്റി മാപ്പിൽ](https://www.electricitymap.org/map) ഉള്ള [പ്രദേശ കോഡ്](http://api.electricitymap.org/v3/zones) ഉണ്ടാകണം (ബോസ്റ്റണിൽ, ഉദാഹരണത്തിന്, ഞാൻ 'US- NEISO' ഉപയോഗിക്കുന്നു).
+
+
+
+API കിയും പ്രദേശവും എക്സ്ടൻഷൻ ഇന്റർഫേസിൽ നൽകുന്നതിനു ശേഷം, ബ്രൗസർ എക്സ്ടൻഷൻ ബാറിലുള്ള നിറമുള്ള പോയിന്റ് നിങ്ങളുടെ പ്രദേശം ഉപയോഗിക്കുന്ന വൈദ്യുതി തീവ്രതയെ പ്രതിബിംബിപ്പിക്കും, കൂടാതെ ഏത് ഊർജ്ജം കൂടുതൽ ഉപയോഗിക്കുന്ന പ്രവർത്തനങ്ങൾ ചെയ്യാൻ ശരിയായ സമയം എന്നതിന് നിങ്ങൾക്ക് സൂചകമാകും. ഈ 'പോയിന്റ്' സിസ്റ്റത്തിന്റെ ആശയം കാലിഫോർണിയൻ ഉமிழ്പൈനോടുള്ള [Energy Lollipop എക്സ്ടൻഷൻ](https://energylollipop.com/) ൽ നിന്നാണ് കിട്ടുന്നത്.
+
+---
+
+
+**വിമർശന കുറിപ്പ്**:
+ഈ പ്രമാണം AI തർജ്ജമ സർവീസ് [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തർജ്ജമചെയ്തതാണ്. ഞങ്ങൾ ശരിതോറും ശ്രമിച്ചുവെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന തർജ്ജമകളിൽ പിഴവുകൾ അല്ലെങ്കിൽ പകഴിപ്പുകൾ ഉണ്ടാകാൻ സാധ്യതയുണ്ട്. മൗലിക പ്രമാണം അതിന്റെ സ്വന്തം ഭാഷയിൽ അസിസ്റ്റന്റ് സ്രോതസ്സായി കണക്കാക്കപ്പെടുന്നതാണ്. പ്രധാനപ്പെട്ട വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ തർജ്ജമ നിർദേശിക്കും. ഈ തർജ്ജമയുടെ ഉപയോഗത്തിൽ നിന്നു ഉണ്ടാകുന്ന ഏതു തെറ്റിദ്ധാരണകൾക്കും അല്ലെങ്കിൽ മറുപറയലുകൾക്കുമോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/translation/README.hi.md b/translations/ml/5-browser-extension/solution/translation/README.hi.md
new file mode 100644
index 000000000..0567a0760
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/translation/README.hi.md
@@ -0,0 +1,43 @@
+
+# കാർബൺ ട്രിലർ ബ്രൗസർ എക്സ്ടൻഷൻ: പൂർണ്ണമായ കോഡ്
+
+വൈദ്യുതി ഉപയോഗം ട്രാക്ക് ചെയ്യുന്നതിനായി tmrow-യുടെ C02 സിഗ്നൽ API ഉപയോഗിച്ച് ഒരു ബ്രൗസർ എക്സ്ടൻഷൻ നിർമ്മിച്ച് നിങ്ങളുടെ ബ്രൗസറിൽ നിങ്ങളുടെ പ്രദേശത്തെ വൈദ്യുതി ഉപയോഗം എത്ര ഭാരമുള്ളതാണെന്നതിന് ഒരു റിമൈൻഡർ നൽകുക. ഈ താത്കാലിക എക്സ്ടൻഷൻ ഉപയോഗിക്കുന്നത് ഈ വിവരങ്ങൾ അടിസ്ഥാനമാക്കി നിങ്ങളുടെ പ്രവർത്തനങ്ങളെക്കുറിച്ച് തീരുമാനങ്ങൾ എടുക്കുന്നതിന് സഹായിക്കും.
+
+
+
+## തുടങ്ങൽ
+
+നിങ്ങൾക്ക് [npm](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ഒരു ഫോൾഡറിലേക്കു ഇത് കോഡിന്റെ ഒരു പകർപ്പ് ഡൗൺലോഡ് ചെയ്യുക.
+
+ആവശ്യമായ എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+വെബ്പാക്ക് ഉപയോഗിച്ച് എക്സ്ടൻഷൻ നിർമ്മിക്കുക
+
+```
+npm run build
+```
+
+Edge ൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലതുവശത്തുള്ള 'മൂന്ന് ഡോട്ട്' മেনൂ ഉപയോഗിച്ച് എക്സ്ടൻഷൻ പാനൽ കണ്ടെത്തുക. അവിടെ നിന്ന് പുതിയ ഒരു എക്സ്ടൻഷൻ ലോഡ് ചെയ്യാൻ 'लोड अनपैक्ड' തിരഞ്ഞെടുക്കുക. പ്രോമ്പ്റ്റിൽ 'dist' ഫോൾഡർ തുറക്കുക, എക്സ്ടൻഷൻ ലോഡ് ചെയ്യും. ഇത് ഉപയോഗിക്കാൻ, CO2 സിഗ്നലിന്റെ API ([ഈമെയിൽ വഴി ഇവിടെ ലഭ്യമാണ്](https://www.co2snal.com/) API കീ ലഭിക്കേണ്ടതാണ് - ഈ പേജിൽ ബോക്സിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകുക) ഒപ്പം [നിങ്ങളുടെ പ്രദേശത്തിനുള്ള കോഡ്](http://api.electricitymap.org/v3/zones) [എലക്ട്രിസിറ്റി മാപ്പ്](https://www.electricitymap.org/map) (ഉദാഹരണത്തിന്, ബോസ്റ്റണിൽ ഞാൻ 'US-NEISO' ഉപയോഗിക്കുന്നു).
+
+
+
+ഒരു API കീയും പ്രദേശ ഡാറ്റയും എക്സ്ടൻഷൻ ഇന്റർഫേസിൽ നൽകുന്നതോടെ, ബ്രൗസർ എക്സ്ടൻഷൻ ബാറിലുള്ള നിറമുള്ള ഡോട്ട് നിങ്ങളുടെ പ്രദേശത്തിന്റെ എനർജി ഉപയോഗം പ്രതിഫലിപ്പിക്കാൻ മാറും, കൂടാതെ ഇനകൾ അനുസരിച്ച് എനർജി-ഭാരമുള്ള പ്രവർത്തനങ്ങൾ നടത്തുന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് സിഗ്നൽ നൽകും. ഈ 'ഡോട്ട്' സിസ്റ്റത്തിന്റെ ആശയം കലിഫോർണിയ മൂലക വികിരണങ്ങൾക്ക് [Energy Lollipop Extension](https://energylollipop.com/) വഴി ലഭിച്ചിട്ടുണ്ട്.
+
+---
+
+
+**ഡിസ്ക്ലേിമർ**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന AI തർജ്ജമ സേവനം ഉപയോഗിച്ച് തർജ്ജമ ചെയ്തത് ആണ്. നാം സ്ട്രീവ് ചെയ്യുന്നുണ്ടെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന തർജ്ജമകളിൽ പിശകുകളും അ正確തകളില്ലായ്മകളും ഉണ്ടായേക്കാം. മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖയാണ് അധികാരം ഉള്ള ഉറവിടം എന്ന് പരിഗണിച്ചുകൊള്ളുകയുള്ളൂ. നിർണായക വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യൻ ചെയ്ത തർജ്ജമ വേഞ്ഞിരിക്കുക. ഈ തർജ്മ ഉപയോഗത്തിലൂടെയുണ്ടാകുന്ന എന്തെങ്കിലും തെറ്റിദ്ധാരണകൾക്കും തെറ്റായി വ്യാഖ്യാനിക്കുന്നതിനു ഞങ്ങൾ ഉത്തരവാദിത്വം ഏറ്റെടുത്തിട്ടില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/translation/README.it.md b/translations/ml/5-browser-extension/solution/translation/README.it.md
new file mode 100644
index 000000000..61b9575a7
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/translation/README.it.md
@@ -0,0 +1,43 @@
+
+# Estensione del browser Carbon Trigger: കോഡ് തുടങ്ങേണ്ടത്
+
+നാം tmrow-യുടെ Signal C02 API ഉപയോഗിച്ച് വൈദ്യുതിയുടെ ഉപയോഗം നിരീക്ഷിക്കാൻ ബ്രൗസർ എക്സ്ടൻഷൻ സൃഷ്ടിക്കും, അതിലൂടെ നിങ്ങളുടെ പ്രദേശത്ത് വൈദ്യുതി ഉപയോഗം എത്ര ഭാരമുള്ളതാണെന്ന് നേരിട്ട് നിങ്ങളുടെ ബ്രൗസറിൽ ഒരു ഓർമ്മപ്പെടുത്തൽ ഉണ്ടായിരിക്കും. ഈ പ്രത്യേക എക്സ്ടൻഷൻ ഉപയോഗിക്കുന്നത് ഈ വിവരങ്ങളുടെ അടിസ്ഥാനത്തിൽ നിങ്ങളുടെ പ്രവർത്തനങ്ങൾ മൂല്യനിർണയം ചെയ്യാൻ സഹായിക്കും.
+
+
+
+## തുടങ്ങാൻ
+
+[npm](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടാകണം. ഈ കോഡിന്റെ ഒരു പകർപ്പ് നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ഫോളഡറിലേക്ക് ഡൗൺലോഡ് ചെയ്യുക.
+
+ആവശ്യമുള്ള എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+webpack-ൽ നിന്ന് എക്സ്ടൻഷൻ സൃഷ്ടിക്കുക
+
+```
+npm run build
+```
+
+Edge-ൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലത് മൂലയിൽ ഉള്ള "മൂന്ന് പോയിന്റ്" മെനുവിൽ നിന്നു എക്സ്റ്റൻഷൻസ് പാനൽ खोजുക. നിലവിലുള്ളില്ലെങ്കിൽ, ഡവലപ്പർ മോഡ് (താഴെ ഇടത്) സജീവമാക്കുക. പുതിയ എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്യാൻ "അൺകോമ്പ്രസഡ് ലോഡ്" തിരഞ്ഞെടുക്കുക. പ്രോംപ്റ്റിൽ "dist" ഫോൾഡർ തുറക്കുക, എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്തിരിക്കും. ഉപയോഗിക്കാൻ, CO2 സിഗ്നൽ APIയുടെ API കീ ആവശ്യമുണ്ട് (ഇത് ഇവിടെ [ഇമെയിൽ വഴി ലഭ്യമാകുന്നു](https://www.co2signal.com/) - ഈ പേജിലെ പ്രദാനം ചെയ്തിട്ടുള്ള ഇമെയിൽ ബോക്സിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകുക) കൂടാതെ [ഇലക്ട്രിസിറ്റി മാപ്പിനുള്ള](https://www.electricitymap.org/map) അനുയോജ്യമായ [പ്രദേശത്തിനുള്ള കോഡ്](http://api.electricitymap.org/v3/zones) (ഉദാ. ബോസ്റ്റനിൽ, "US-NEISO").
+
+
+
+ഒരു പ്രാവശ്യം API കീയും പ്രദേശവും എക്സ്റ്റൻഷൻ ഇന്റർഫേസിൽ നൽകിവച്ചശേഷം, ബ്രൗസർ എക്സ്റ്റൻഷൻ ബാറിലുള്ള നിറമുള്ള ബിന്ദു പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപയോഗം പ്രതിഫലിപ്പിക്കാൻ മാറും, കൂടാതെ ഏത് ഉയർന്ന വിസ്തീർണ്ണമുള്ള പ്രവർത്തനങ്ങൾ പരീക്ഷിക്കാം എന്ന വിഷയത്തിൽ സൂചന നൽകും. ഈ "ബിന്ദു" അടിസ്ഥാനമായ സിസ്റ്റത്തിന്റെ ആശയം [Energy Lollipop എക്സ്റ്റൻഷൻ](https://energylollipop.com/)കളിൽ നിന്നാണ് ലഭിച്ചത്, കാലിഫോർണിയയിലെ ഉൽപ്പാദനങ്ങൾക്ക് വേണ്ടി.
+
+---
+
+
+**വിമർശന കുറിപ്പ്**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന എഐ വിവർത്തന സേവനം ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തിരിക്കുന്നു. ഞങ്ങൾ കൃത്യതയ്ക്ക് വേണ്ടി ശ്രമിച്ചിരിക്കുവെങ്കിലും, യാന്ത്രിക വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടായേക്കാമെന്നത് ദയവായി ശ്രദ്ധിക്കുക. ഉള്ളടക്കത്തിന്റെ സാക്കാ ഭാഷയിലെ യഥാർത്ഥ രേഖ ഔദ്യോഗിക ഉറവിടമായി പരിഗണിക്കേണ്ടതാണ്. അത്യാവശ്യ വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിൽ നിന്നുള്ള യാതൊരു തെറ്റായ മനസ്സിലാക്കലുകൾക്കും അല്ലെങ്കിൽ തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/translation/README.ja.md b/translations/ml/5-browser-extension/solution/translation/README.ja.md
new file mode 100644
index 000000000..dae6173c1
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/translation/README.ja.md
@@ -0,0 +1,43 @@
+
+# কার্বনট্রিগারব্রাউজার এক্সটেনশন: সম্পূর্ণ কোড
+
+tmrow এর C02 সিগন্যাল API ব্যবহার করে বিদ্যুৎ ব্যবহার ট্র্যাক করার জন্য, আপনার অঞ্চলের বিদ্যুৎ ব্যবহারের মাত্রা কত বেশি তা ব্রাউজারে রিমাইন্ডার হিসেবে প্রদর্শন করার জন্য ব্রাউজার এক্সটেনশন তৈরি করা হয়েছে। এই এক্সটেনশনটি অ্যাডহকভাবে ব্যবহার করে আপনি এই তথ্যের উপর ভিত্তি করে আপনার কার্যক্রম নির্ধারণ করতে পারবেন।
+
+
+
+## はじめに
+
+[npm](https://npmjs.com) ইন্সটল থাকা প্রয়োজন। এই কোডটি আপনার কম্পিউটারে একটি ফোল্ডারে ডাউনলোড করুন।
+
+প্রয়োজনীয় সব প্যাকেজ ইন্সটল করুন।
+
+```
+npm install
+```
+
+webpack থেকে এক্সটেনশন বিল্ড করুন।
+
+```
+npm run build
+```
+
+Edge এ ইন্সটল করতে, ব্রাউজারের উপরের ডানদিকের "তিনটি ডট" মেনু থেকে "এক্সটেনশন" প্যানেল খুঁজুন। সেখানে থেকে "Load Unpacked" নির্বাচন করে নতুন এক্সটেনশন লোড করুন। প্রম্পটে "dist" ফোল্ডার খুলুন এবং এক্সটেনশন লোড হবে। ব্যবহার করার জন্য, CO2 সিগন্যাল API এর API কী ([ইমেইল মারফত এখানে পান](https://www.co2signal.com/) - এই পৃষ্ঠার বক্সে ইমেইল টাইপ করুন) এবং [Electricity Map](https://www.electricitymap.org/map) অনুযায়ী [আপনার অঞ্চলের কোড](http://api.electricitymap.org/v3/zones) দরকার (বস্টনে, উদাহরণস্বরূপ, 'US-NEISO' ব্যবহার হয়)।
+
+
+
+API কী এবং অঞ্চল এক্সটেনশন ইন্টারফেসে প্রবেশ করানো হলে, ব্রাউজার এক্সটেনশন বারে প্রদর্শিত রঙিন ডট পরিবর্তিত হবে এবং আপনার অঞ্চলের শক্তি ব্যবহারের প্রতিবিম্ব দেখাবে, যা নির্দেশ করবে কোন ধরনের শক্তি প্রয়োজনীয় কার্যক্রম করাই উপযুক্ত। এই "ডট" সিস্টেমের ধারণাটি আমাকে দিয়েছে ক্যালিফোর্নিয়ার নির্গমনের জন্য [Energy Lollipop extension](https://energylollipop.com/)।
+
+---
+
+
+**പരിഭാഷാ എണ്ണം**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന എഐ പരിഭാഷ സേവനം ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തതാണ്. നാം ശരിയായ വിവർത്തനത്തിന് ശ്രമിച്ചിട്ടും, യന്ത്രം നിർവഹിക്കുന്ന പരിഭാഷയിൽ പിഴവുകളോ അച്ചടക്കക്കുറവുകളോ ഉണ്ടാകാമെന്ന് ശ്രദ്ധിക്കുക. മൊഴിയുടെ മാതൃഭാഷയിൽ ഉള്ള ഔദ്യോഗിക രേഖയെ സത്യസന്ധമായ ഉറവിടമായാണ് കാണേണ്ടത്. നിർണ്ണായക വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ച് ഉണ്ടാകുന്ന തെറ്റിദ്ധാരണകൾക്കും വ്യാഖ്യാന പരപട്ടതികൾക്കും anyị ബാധ്യസ്ഥരല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/solution/translation/README.ms.md b/translations/ml/5-browser-extension/solution/translation/README.ms.md
new file mode 100644
index 000000000..1527afb8e
--- /dev/null
+++ b/translations/ml/5-browser-extension/solution/translation/README.ms.md
@@ -0,0 +1,43 @@
+
+# കാർബൺ ട്രിഗർ ബ്രൗസർ എക്സ്ടൻഷൻ: പൂർണ്ണ കോഡ്
+
+CO2 സിഗ്നൽ tmrow API ഉപയോഗിച്ച് വൈദ്യുതി ഉപയോഗം കണ്ടെത്താൻ, നിങ്ങളുടെ പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപഭോഗം എത്ര ഭാരമുള്ളതാണെന്ന് കണ്ടെത്താൻ ബ്രൗസറിൽ മുന്നറിയിപ്പ് ലഭിക്കുന്നതുവരെ ബ്രൗസർ എക്സ്ടൻഷൻ നിർമ്മിക്കുക. ഈ എക്സ്ടൻഷൻ പ്രത്യേകിച്ച് ഉപയോഗിക്കുന്നത് ഈ വിവരത്തിന്റെ അടിസ്ഥാനത്തിൽ നിങ്ങളുടെ പ്രവർത്തനങ്ങളെക്കുറിച്ച് പരിഗണന നടത്താൻ സഹായിക്കും.
+
+
+
+## ഇതുവരെ തുടങ്ങുക
+
+നിങ്ങൾക്ക് [npm](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്തിരിക്കണം. ഈ കോഡിന്റെ പകർപ്പ് നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ ഫോൾഡറിൽ ഡൗൺലോഡ് ചെയ്യുക.
+
+ആവശ്യമുള്ള എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+webpack ഉപയോഗിച്ച് എക്സ്ടൻഷൻ നിർമ്മിക്കുക
+
+```
+npm run build
+```
+
+Edge-ൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലതുഭാഗത്ത് ഉള്ള 'മൂന്ന് ഡോട്ട്' മെനുവിൽ നിന്ന് എക്സ്റ്റൻഷനുകൾ പാനൽ കണ്ടെത്തുക. അവിടെ നിന്ന് 'Load Unpacked' തിരഞ്ഞെടുക്കുക പുതിയ എക്സ്റ്റൻഷൻ ലോഡ് ചെയ്യുന്നതിന്. ആവശ്യമായതു 'dist' ഫോൾഡർ തുറക്കുക, എക്സ്ടൻഷൻ ലോഡ് ചെയ്യപ്പെടും. ഇത് ഉപയോഗിക്കാൻ, CO2 സിഗ്നൽ API-ക്കായി ഒരു API കീ ([ഇമെയിൽ വഴി ഇവിടെ നേടുക](https://www.co2signal.com/) - ഈ പേജിലെ ബോക്സിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകുക) ഉം [നിങ്ങളുടെ പ്രദേശം ക്വാളിഫൈ ചെയ്യുന്ന കോഡ്](http://api.electricitymap.org/v3/zones) ([എലക്ട്രിസിറ്റിമാപ്പ്](https://www.electricitymap.org/map) നു համապատասխանമായി) ഉണ്ടാവണം. (ഉദാഹരണംയായി Boston-ൽ ഞാൻ 'US-NEISO' ഉപയോഗിക്കുന്നു).
+
+
+
+API കീയും പ്രദേശം ഇന്റഫേസിൽ നൽകുമ്പോൾ, ബ്രൗസർ എക്സ്ടൻഷന്റെ ബാറിൽ നിറമുള്ള ഡോട്ട് നിങ്ങളുടെ പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപഭോഗം പ്രതിഫലിപ്പിക്കും, നിങ്ങള്ക്ക് അനുയോജ്യമായ ഭാരമുള്ള പ്രവർത്തനങ്ങൾക്കായി സൂചന നൽകും. ഈ 'ഡോട്ട്' സിസ്റ്റത്തിന്റെ ആശയം California-ലെ Energy Lollipop [ബ്രൗസർ എക്സ്റ്റൻഷൻ](https://energylollipop.com/) എന്നതിനാൽ ലഭിച്ചിരിക്കുന്നു.
+
+---
+
+
+**അസ്വീകര്പ്പു**:
+ഈ രേഖ AI വിവര്ത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തതാണ്. wirhs വഷളാക്കുന്നതിനായി പരിശ്രമിക്കുന്നു, എങ്കിലും ഓട്ടോമേറ്റഡ് വിവര്ത്തനങ്ങളില് പിഴവ് അല്ലെങ്കില് തെറ്റുകള് ഉണ്ടാകാമെന്ന് ശ്രദ്ധിക്കുക. അതിന്റെ മാതൃഭാഷയിലെ സ原ലേഖനം പ്രാമാണികമായ ഉറവിടമായി കണക്കാക്കപ്പെടേണ്ടതാണ്. അത്യാവശ്യമായ വിവരങ്ങള്ക്കായി, പ്രൊഫഷണല് മനുഷ്യ വിവര്ത്തനം ശിപാര്ശ ചെയ്യുന്നു. ഈ വിവര്ത്തന ഉപയോഗത്തില് ഉണ്ടാകുന്ന തെറ്റായ മനസ്സിലാക്കലുകള്ക്കും തെറ്റായ വ്യാഖ്യാനങ്ങള്ക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/5-browser-extension/start/README.md b/translations/ml/5-browser-extension/start/README.md
new file mode 100644
index 000000000..ac06bd0bf
--- /dev/null
+++ b/translations/ml/5-browser-extension/start/README.md
@@ -0,0 +1,43 @@
+
+# കാർബൺ ട്രിഗർ ബ്രൗസർ വിപുലീകരണം: സ്റ്റാർട്ടർ കോഡ്
+
+തെമ്മ്രോയുടെ CO2 സിഗ്നൽ API ഉപയോഗിച്ച് വൈദ്യുതി ഉപയോഗം മോണിറ്റർ ചെയ്യുന്നതിന്, നിങ്ങളുടെ ബ്രൗസറിൽ തന്നെ നിങ്ങളുടെ പ്രദേശത്തിന്റെ വൈദ്യുതി ഉപയോഗത്തിന്റെ ഗാഢതയെക്കുറിച്ച് ഓർമ്മിപ്പിക്കാൻ ഒരു ബ്രൗസർ വിപുലീകരണം നിർമ്മിക്കുക. ഈ വിപുലീകരണം ആവശ്യംപ്രകാരം ഉപയോഗിക്കുന്നത്, ഈ വിവരത്തിന്റെ അടിസ്ഥാനത്തിൽ നിങ്ങളുടെ പ്രവർത്തനങ്ങളിൽ നീതിനിര്ണയം എടുക്കാൻ സഹായിക്കും.
+
+
+
+## ആരംഭിക്കുന്നത്
+
+[npm](https://npmjs.com) ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നത് ആവശ്യമുണ്ട്. ഈ കോഡ് നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ഒരു ഫോൾഡറിൽ ഡൗൺലോഡ് ചെയ്യുക.
+
+ആവശ്യമായ എല്ലാ പാക്കേജുകളും ഇൻസ്റ്റാൾ ചെയ്യുക:
+
+```
+npm install
+```
+
+webpack ഉപയോഗിച്ച് വിപുലീകരണം നിർമ്മിക്കുക
+
+```
+npm run build
+```
+
+Edge-ൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ, ബ്രൗസറിന്റെ മുകളിൽ വലതുവശത്തുള്ള 'മൂന്ന് പോയിന്റ്' മെനുവിൽ നിന്നുയർന്നുള്ള Extensions പാനൽ കണ്ടെത്തുക. അവിടെ നിന്ന് 'Load Unpacked' തിരഞ്ഞെടുത്ത് പുതിയ ഒരു വിപുലീകരണം ലോഡ് ചെയ്യുക. പ്രോമ്പ്റ്റിൽ 'dist' ഫോൾഡർ തുറക്കുക, അതിലൂടെ വിപുലീകരണം ലോഡ് ചെയ്യും. ഉപയോഗിക്കാൻ, നിങ്ങൾക്ക് CO2 Signal API-ക്കായി ഒരു API കീ ([ഇമെയിൽ വഴി ഇവിടെ നേടുക](https://www.co2signal.com/) - ഈ പേജിലുള്ള ബോക്സിൽ നിങ്ങളുടെ ഇമെയിൽ നൽകുക) കൂടാതെ [Electricity Map](https://www.electricitymap.org/map) ലെ നിങ്ങളുടെ മേഖലയുടെ [കോഡ്](http://api.electricitymap.org/v3/zones) വേണം (ബോസ്റ്റണിൽ ഉദാഹരണത്തിന്, ഞാൻ 'US-NEISO' ഉപയോഗിക്കുന്നു).
+
+
+
+API കീയും പ്രദേശ കോഡും വിപുലീകരണ ഇന്റർഫേസിൽ നൽകുന്നതോടെ, ബ്രൗസർ വിപുലീകരണ ബാറിലെ കളർ ഡോട്ട് നിങ്ങളുടെ പ്രദേശത്തിന്റെ ഊർജ്ജ ഉപയോഗം പ്രതിഫലിപ്പിക്കാൻ മാറും, നിങ്ങൾക്ക് ഏത് ഊർജ്ജ-ഭാരമുള്ള പ്രവർത്തനങ്ങൾ ചെയ്യേണ്ടതാണെന്ന് സൂചിപ്പിക്കും. ഈ 'ഡോട്ട്' സിസ്റ്റത്തിന്റെ ആശയം കാലിഫോർണിയയുടെ ഇമിഷൻസിനുള്ള [Energy Lollipop extension](https://energylollipop.com/) എന്നതിൽ നിന്നാണ് ഞാൻ ഉൾക്കൊണ്ടത്.
+
+---
+
+
+**പ്രതिज്ഞാപത്രം**:
+ഈ ഡോക്യുമെന്റ് AI പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷചെയ്തതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്ക് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, യന്ത്രപരിഭാഷകളിൽ പിഴവുകളും തെറ്റുകളും ഉണ്ടാകാമെന്നു ദയവായി മനസിലാക്കുക. അടിസ്ഥാന ഭാഷയിൽ ഉള്ള അസൽ ഡോക്യുമെൻറ് മാത്രമേ ഔദ്യോഗികമെന്നുള്ള ഉറപ്പുള്ള ഉറവിടമാകൂ. നിർണായകമായ വിവരങ്ങൾക്കായി, പ്രൊഫഷണൽ മാനവ പരിഭാഷ ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ച് ഉണ്ടായ യഥാർത്ഥ അർത്ഥം തെറ്റായി ഗ്രഹിക്കുന്നതിനോ വ്യവഹാരമാറ്റങ്ങൾ ഉണ്ടാകുന്നതിനോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/1-introduction/README.md b/translations/ml/6-space-game/1-introduction/README.md
new file mode 100644
index 000000000..b3c13bfbe
--- /dev/null
+++ b/translations/ml/6-space-game/1-introduction/README.md
@@ -0,0 +1,661 @@
+
+# സ്പേസ് ഗെയിം നിർമ്മാണം ഭാഗം 1: Parichayam
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് യാത്ര
+ section അടിസ്ഥാനാധാരങ്ങൾ
+ ഗെയിം ആർക്കിടെക്ചർ പഠിക്കുക: 3: Student
+ അവകാശവിവരങ്ങൾ മനസിലാക്കുക: 4: Student
+ ഘടനകൾ പര്യവേക്ഷണം ചെയ്യുക: 4: Student
+ section സംവേദനം
+ പബ്/സബ് സിസ്റ്റം നിർമ്മിക്കുക: 4: Student
+ ഇവന്റ് ഫ്ലോ ഡിസൈൻ ചെയ്യുക: 5: Student
+ ഘടകങ്ങൾ ബന്ധിപ്പിക്കുക: 5: Student
+ section അപ്ലിക്കേഷൻ
+ ഗെയിം ഒബ്ജക്ടുകൾ സൃഷ്ടിക്കുക: 5: Student
+ പാറ്റേൺസ് നടപ്പിലാക്കുക: 5: Student
+ ഗെയിം ഘടന പദ്ധതി രൂപീകരിക്കുക: 5: Student
+```
+
+
+നാസയുടെ മിഷൻ കൺട്രോൾ സ്പേസ് ലോഞ്ചിനിടെ നിരവധി സംവിധാനങ്ങൾ സംയോജിപ്പിക്കുന്നവയുപോലെ, വിവിധ പ്രോഗ്രാം ഭാഗങ്ങൾ എങ്ങനെ അസംക്രമിതമായി സഹകരിക്കാമെന്ന് കാണിക്കുന്നൊരു സ്പേസ് ഗെയിം നിർമ്മിക്കാൻ പോകുകയാണ്. എല്ലാവർക്കും കളിക്കാൻ സാധിക്കുമ്പോൾ, നിങ്ങൾക്ക് ഏതെങ്കിലും സോഫ്റ്റ്വെയർ പ്രോജക്റ്റിനും ബാധകമായ അടിസ്ഥാന പ്രോഗ്രാമിംഗ് ആശയങ്ങൾ പഠിക്കാം.
+
+കോഡ് സംഘടിപ്പിക്കാൻ രണ്ട് അടിസ്ഥാന സമീപനങ്ങൾ പരിശോധിക്കാനാകും: ഇൻഹെറിറ്റൻസ്, കോൺപോസിഷൻ. ഇത് ശാസ്ത്രീയ ആശയങ്ങൾ മാത്രമല്ല, വീഡിയോ ഗെയിമുകളേയും ബാങ്കിംഗ് സംവിധാനങ്ങളേയും പ്രവർത്തിപ്പിക്കുന്ന മാതൃകകളാണ്. ബഹിരാകാശ ഒളിപ്പിച്ചുതന്നാലും സമ്പ്രേഷണം നടത്തുന്ന pub/sub എന്ന ഒരു സംവാദ സിസ്റ്റം നടപ്പാക്കും, ഇത് വ്യത്യസ്ത ഘടകങ്ങൾ പരിഭവം ഇല്ലാതെ വിവരങ്ങൾ പങ്കിടുവാൻ സഹായിക്കുന്നു.
+
+ഈ പരമ്പരാവസാനത്തിൽ, നിങ്ങൾ സ്കെയിൽ ചെയ്യാനും വികസിപ്പിക്കാനും കഴിയുന്ന ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ അറിയും - നിങ്ങൾ ഗെയിമുകൾ, വെബ് ആപ്ലിക്കേഷനുകൾ, അല്ലെങ്കിൽ ഏതെങ്കിലും മറ്റൊരു സോഫ്റ്റ്വെയർ സംവിധാനമുണ്ടാക്കുകയാണെങ്കിലും.
+
+```mermaid
+mindmap
+ root((ഗെയിം ആർക്കിടെക്ചർ))
+ Object Organization
+ Inheritance
+ Composition
+ Class Hierarchies
+ Behavior Mixing
+ Communication Patterns
+ Pub/Sub System
+ Event Emitters
+ Message Passing
+ Loose Coupling
+ Game Objects
+ Properties (x, y)
+ Behaviors (move, collide)
+ Lifecycle Management
+ State Management
+ Design Patterns
+ Factory Functions
+ Observer Pattern
+ Component System
+ Event-Driven Architecture
+ Scalability
+ Modular Design
+ Maintainable Code
+ Testing Strategies
+ Performance Optimization
+```
+## പൂർവ-ലെക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/29)
+
+## ഗെയിം വികസനത്തിൽ ഇൻഹെറിറ്റൻസ്, കോൺപോസിഷൻ
+
+പ്രോജക്റ്റുകൾ സങ്കീർണ്ണമാകുമ്പോൾ, കോഡ് ക്രമീകരണം നിർണ്ണായകമാണ്. ലളിതമായ സ്ക്രിപ്റ്റ് തുടങ്ങുമ്പോൾ ശരിയായ ഘടനയില്ലാതെ പരിപാലിക്കൽ പ്രയാസമായി മാറും – അപ്പോളോ മിഷനുകൾ ആയിരം ഘടകങ്ങൾ തമ്മിൽ സൂക്ഷ്മമായി ഏകോപിപ്പിച്ച പോലെ.
+
+കോഡ് ക്രമീകരിക്കാൻ രണ്ട് അടിസ്ഥാന സമീപനങ്ങൾ പരിശോധിക്കാം: ഇൻഹെറിറ്റൻസ്, കോൺപോസിഷൻ. ഓരോതിൽ പ്രത്യേകം ഗുണങ്ങൾ ഉണ്ട്, ഇരണ്ടും മനസ്സിലാക്കുന്നത് വ്യത്യസ്ത സാഹചര്യങ്ങൾക്ക് ശരിയായ സമീപനം തിരഞ്ഞെടുക്കാൻ സഹായിക്കും. നമ്മുടെ സ്പേസ് ഗെയിമിൽ ഈ ആശയങ്ങൾ പ്രയോഗിക്കാം, അവിടെയുള്ള നായകർ, ശത്രുക്കൾ, പവർ-അപ്പുകൾ, മറ്റ് വസ്തുക്കൾ മികവുറ്റിനായി ഇടപെടണം.
+
+✅ പ്രശസ്തമായ പ്രോഗ്രാമിംഗ് പുസ്തകങ്ങളിൽ ഒന്ന് [ഡിസൈൻ.Patterns](https://en.wikipedia.org/wiki/Design_Patterns) സംബന്ധിച്ചതാണ്.
+
+ഏതെങ്കിലും ഗെയിമിൽ, `game objects` ഉണ്ടാകുന്നു – ആ ഘടകങ്ങൾ ഗെയിം ലോകത്ത് ഇടപെടാൻ സഹായിക്കുന്നു. നായകർ, ശത്രുക്കൾ, പവർ-അപ്പുകൾ, ദൃശ്യ ഫലങ്ങൾ എല്ലാം game objects ആണ്. ഓരോ ഒബ്ജക്റ്റും സ്ക്രീൻ കോഓർഡിനേറ്റുകൾ `x` , `y` ഉപയോഗിച്ചാണ് നിലനിർത്തുന്നത്, കോഓർഡിനേറ്റ് പ്ലെയിനിൽ പോയിന്റുകൾ ആക്സീസ് ചെയ്യുന്നതുപോലെ.
+
+വിസ്വൽ വ്യത്യാസങ്ങൾ ഉണ്ടായാലും, ഈ_objs സാധാരണ സ്വഭാവങ്ങൾ പങ്കിടുന്നു:
+
+- **അവ എവിടെങ്കിലും ഉണ്ട്** – ഓരോ ഒബ്ജക്റ്റിനും x, y കോഓർഡിനേറ്റുകൾ ഉണ്ട്, അതിനാൽ ഗെയിം എവിടെ വരയ്ക്കണം എന്ന് അറിയാം
+- **ബഹുദൂരം ചലിക്കാം** – നായകർ ഓടും, ശത്രുക്കൾ പിന്തുടരും, ബുള്ളറ്റുകൾ സ്ക്രീനിലൂടെയും പറക്കും
+- **ജീവിതകാലം ഉണ്ട്** – ചിലവ വല്ലതും നിലനിൽക്കും, ചിലത് (ഫലകങ്ങൾ പോലുള്ള) കുറേ നിമിഷം മാത്രമേ കാണപ്പെടുന്നുള്ളൂ
+- **സങ്കടങ്ങൾ വെട്ടിച്ചുമാറ്റുക** – കാര്യങ്ങൾ കൂട്ടിയിടിക്കുമ്പോൾ, പവർ-അപ്പുകൾ ശേഖരിക്കപ്പെടുമ്പോൾ, ഹെൽത്ത് ബാർ അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ
+
+✅ പാക്ക്മാൻ പോലൊരു ഗെയിമിൽ മേൽപറഞ്ഞ നാലു ഒബ്ജക്റ്റ് തരം തിരിച്ചറിയാൻ കഴിയുമോ?
+
+```mermaid
+classDiagram
+ class GameObject {
+ +x: നമ്പർ
+ +y: നമ്പർ
+ +type: സ്ട്രിംഗ്
+ +exists_somewhere()
+ }
+
+ class MovableObject {
+ +moveTo(x, y)
+ +can_move_around()
+ }
+
+ class TemporaryObject {
+ +lifespan: നമ്പർ
+ +has_lifespan()
+ }
+
+ class InteractiveObject {
+ +onCollision()
+ +reacts_to_stuff()
+ }
+
+ GameObject <|-- MovableObject
+ GameObject <|-- TemporaryObject
+ GameObject <|-- InteractiveObject
+
+ MovableObject <|-- Hero
+ MovableObject <|-- Enemy
+ MovableObject <|-- Bullet
+
+ TemporaryObject <|-- PowerUp
+ TemporaryObject <|-- Explosion
+
+ InteractiveObject <|-- Collectible
+ InteractiveObject <|-- Obstacle
+```
+### പ്രവൃത്തികളുടെ പ്രവർത്തനം കോഡിലൂടെ പ്രകടിപ്പിക്കൽ
+
+ഇപ്പോൾ game objects പങ്കിടുന്ന സാധാരണ സ്വഭാവങ്ങൾ മനസ്സിലായ മുന്നിൽ, ഇത്തരത്തിലുള്ള സ്വഭാവങ്ങൾ ജാവാസ്ക്രിപ്റ്റിൽ എങ്ങനെ നടപ്പാക്കാമെന്ന് നോക്കാം. ഒബ്ജക്റ്റ് സ്വഭാവം ക്ലാസുകളിലോ വ്യക്തിഗത ഒബ്ജക്റ്റുകളിലോ methods വഴിയാണ് പ്രകടിപ്പിക്കാവുന്നത്, വ്യത്യസ്ത സമീപനങ്ങൾ തിരഞ്ഞെടുക്കാം.
+
+**ക്ലാസ്സ്-കേന്ദ്രമായ സമീപനം**
+
+ക്ലാസ്లు, ഇൻഹെറിറ്റൻസ് ഉപയോഗിച്ച് game objects ക്രമീകരിക്കുന്ന ഘടനാപരമായ മാർഗ്ഗമാണ്. കാര്ല് ലിനിയസിന്റെ വർഗീകരണ സിസ്റ്റം പോലെ, അടിസ്ഥാന ക്ലാസ് ഒരു പൊതുവായ ഗുണങ്ങൾ ഉൾക്കൊള്ളുന്നു, പിന്നീട് പ്രത്യേക കഴിവുകൾ ചേർക്കുന്ന പ്രത്യേക ക്ലാസുകൾ ഉണ്ടാക്കുന്നു.
+
+✅ ഇൻഹെറിറ്റൻസ് പ്രധാനം. കൂടുതൽ അറിയാൻ [MDN ലേഖനം](https://developer.mozilla.org/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) കാണുക.
+
+ഈ രീതിയിൽ game objects പണിയുന്നതിന്റെ ഉദാഹരണം:
+
+```javascript
+// ഘട്ടം 1: അടിസ്ഥാന GameObject ക്ലാസ് സൃഷ്ടിക്കുക
+class GameObject {
+ constructor(x, y, type) {
+ this.x = x;
+ this.y = y;
+ this.type = type;
+ }
+}
+```
+
+**ദാ നാം ഓരോ പടിയിലും പരിശോധിക്കാം:**
+- അതിന്റെ അടിസ്ഥാനത്തിന്റെ ഒരു ഫോർമാറ്റ് സൃഷ്ടിക്കുന്നു
+- കൺസ്ട്രക്ടർ ഒബ്ജക്റ്റിന്റെ സ്ഥാനം(`x`, `y`)യും തരവും സൂക്ഷിക്കുന്നു
+- ഇതാണ് എല്ലാ game objects നിര്മ്മിക്കുന്ന അടിസ്ഥാന
+
+```javascript
+// ഘട്ടം 2: പാരമ്പര്യത്തിലൂടെ ചലനം ശേഷി ചേർക്കുക
+class Movable extends GameObject {
+ constructor(x, y, type) {
+ super(x, y, type); // മാതൃ കൺസ്ട്രക്ടർ ആഹ്വാനം ചെയ്യുക
+ }
+
+ // പുതിയ സ്ഥാനത്തിലേക്ക് ചലിക്കുന്ന കഴിവ് ചേർക്കുക
+ moveTo(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+}
+```
+
+**മുകളിൽ:**
+- GameObject ക്ലാസ് നീട്ടി მოძრാന ലോജിക് ചേർത്തു
+- തപാൽ കൺസ്ട്രക്ടർ `super()` ഉപയോഗിച്ച് വിളിച്ചു സവിശേഷതകൾ സജ്ജമടി
+- ഒബ്ജക്ടിന്റെ സ്ഥാനം പുതുക്കുന്ന `moveTo()` മെത്തഡും ചേർത്തു
+
+```javascript
+// ചുവടു 3: പ്രത്യേക ഗെയിം ഓബ്ജക്ട് ടൈപ്പുകൾ സൃഷ്ടിക്കുക
+class Hero extends Movable {
+ constructor(x, y) {
+ super(x, y, 'Hero'); // ടൈപ്പ് സ്വയമേഘം സജ്ജമാക്കുക
+ }
+}
+
+class Tree extends GameObject {
+ constructor(x, y) {
+ super(x, y, 'Tree'); // മരങ്ങൾക്ക് ചലനമില്ലാതെ മതി
+ }
+}
+
+// ചുവടു 4: നിങ്ങളുടെ ഗെയിം ഓബ്ജക്ടുകൾ ഉപയോഗിക്കുക
+const hero = new Hero(0, 0);
+hero.moveTo(5, 5); // ഹീറോ ചലിക്കാൻ കഴിയും!
+
+const tree = new Tree(10, 15);
+// tree.moveTo() പിഴവ് ഉണ്ടാക്കും - മരങ്ങൾക്കു ചലിക്കാമെന്ന് ഇല്ല
+```
+
+**ഈ ആശയങ്ങൾ മനസ്സിലാക്കുക:**
+- പ്രത്യേക ഒബ്ജക്റ്റ് തരം സൃഷ്ടിക്കുന്നു, ആവശ്യമായ സ്വഭാവങ്ങൾ ഉൾക്കൊള്ളുന്നു
+- inheritance ഉപയോഗിച്ച് തിരഞ്ഞെടുക്കപ്പെട്ട ഫീച്ചറുകൾ ഉൾപ്പെടുത്താൻ സഹായിക്കുന്നു
+- നായകർ ചലിപ്പിക്കും, മരങ്ങൾ സ്ഥിതി ചെയ്യും, ക്ലാസ്സ് ക്രമം തെറ്റായ പ്രവർത്തനം തടയുന്നു
+
+✅ പാക്മാൻ നായകനായ മറ്റ് കഥാപാത്രങ്ങളെ (Inky, Pinky, Blinky) ജാവാസ്ക്രിപ്റ്റിൽ എഴുതിയത് എങ്ങനെ ആയിരിക്കും എന്ന് നാലു മിനിറ്റ് വിഷ്ടരിച്ച് നോക്കൂ.
+
+**കോംപോസ്ഷൻ സമീപനം**
+
+കോംപോസ്ഷൻ ഘടകങ്ങളുടെ ഒരു മോഡ്യൂളർ രൂപകൽപ്പന തത്വം പിന്തുടരുന്നു, ബഹിരാകാശ യന്ത്രങ്ങൾ എങ്ങനെ മാറ്റാം കഴിയുന്ന ഘടകങ്ങളായി രൂപകൽപ്പന ചെയ്തിരിക്കുന്നുവോ പോലെ. പാരന്റ് ക്ലാസ്സിൽ നിന്ന് ഇൻഹെറിറ്റ് ചെയ്യുന്നതിനു പകരം, ആവശ്യമായ പ്രവൃത്തികൾ ചേർത്ത് ആവശ്യമായ പ്രവർത്തനങ്ങൾ ഉള്ള ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കുന്നു. ഇരുമ്പ് ക്രമം ഇല്ലാത്ത സൌകര്യമാണ്.
+
+```javascript
+// പടി 1: അടിസ്ഥാന പെരുമാറ്റ വസ്തുക്കള് ഉണ്ടാക്കുക
+const gameObject = {
+ x: 0,
+ y: 0,
+ type: ''
+};
+
+const movable = {
+ moveTo(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+};
+```
+
+**ഈ കോഡ് ചെയ്യുന്നതു:**
+- അടിസ്ഥാന `gameObject` സ്ഥാനം, തര സവിശേഷതകൾ കൈവരിക്കുന്നു
+- മടങ്ങാനുള്ള പ്രവൃത്തികളുള്ള `movable` ഒബ്ജക്റ്റ് സൃഷ്ടിക്കുന്നു
+- സ്ഥാനം, നീക്കം സ്വതന്ത്രമായ നിലയിൽ വയ്ക്കുന്നു
+
+```javascript
+// ഘട്ടം 2: പെരുമാറ്റങ്ങൾ ചേർത്ത് ഓબ્જക്റ്റുകൾ രൂപപ്പെടുത്തുക
+const movableObject = { ...gameObject, ...movable };
+
+// ഘട്ടം 3: വ്യത്യസ്ത ഓബ്രജക്റ്റ് തരങ്ങൾക്ക് ഫാക്ടറി ഫങ്ക്ഷനുകൾ സൃഷ്ടിക്കുക
+function createHero(x, y) {
+ return {
+ ...movableObject,
+ x,
+ y,
+ type: 'Hero'
+ };
+}
+
+function createStatic(x, y, type) {
+ return {
+ ...gameObject,
+ x,
+ y,
+ type
+ };
+}
+```
+
+**മുകളിൽ:**
+- base ഒബ്ജക്റ്റ് സവിശേഷതകളെ മികവ് ചേർത്തു
+- വ്യത്യസ്ത ആവശ്യങ്ങൾക്കായി ഫാക്ടറി ഫംഗ്ഷനുകൾ സൃഷ്ടിച്ചു
+- കർശന ക്ലാസ് പൈരങ്ങ് ഇല്ലാതെ ഒബ്ജക്റ്റുകൾ മനോഹരമായി സൃഷ്ടിക്കുന്നു
+- ഒബ്ജക്റ്റുകൾക്ക് ആവശ്യമായ സ്വഭാവം മാത്രം ഉണ്ട്
+
+```javascript
+// പടി 4: നിങ്ങളുടെ ചേർന്ന ഒബ്ജക്റ്റുകൾ സൃഷ്ടിച്ച് ഉപയോഗിക്കുക
+const hero = createHero(10, 10);
+hero.moveTo(5, 5); // നന്നായി പ്രവര്ത്തിക്കുന്നു!
+
+const tree = createStatic(0, 0, 'Tree');
+// tree.moveTo() നിർവചിക്കപ്പെട്ടിട്ടില്ല - ഏതെങ്കിലും ചലന പെരുമാറ്റം ചേർക്കപ്പെട്ടിട്ടില്ല
+```
+
+**പ്രധാന കാര്യങ്ങൾ:**
+- ഇൻഹെറിറ്റൻസ് അല്ലാതെ പ്രവർത്തനങ്ങൾ കലർത്തി ഒബ്ജക്റ്റുകൾ നിർമിക്കുന്നു
+- കർശന ക്ലാസ് പൈരങ്ങിനേക്കാൾ കൂടുതൽ സൗകര്യം
+- ഒബ്ജക്റ്റുകൾക്ക് ആവശ്യമായ ഫീച്ചറുകൾ മാത്രം
+- ആധുനിക ജാവാസ്ക്രിപ്റ്റ് സ്പ്രെഡ് സിന്താക്സ് ഉപയോഗിക്കുന്നു
+```
+
+**Which Pattern Should You Choose?**
+
+**Which Pattern Should You Choose?**
+
+```mermaid
+quadrantChart
+ title Code Organization Patterns
+ x-axis Simple --> Complex
+ y-axis Rigid --> Flexible
+ quadrant-1 Advanced Composition
+ quadrant-2 Hybrid Approaches
+ quadrant-3 Basic Inheritance
+ quadrant-4 Modern Composition
+
+ Class Inheritance: [0.3, 0.2]
+ Interface Implementation: [0.6, 0.4]
+ Mixin Patterns: [0.7, 0.7]
+ Pure Composition: [0.8, 0.9]
+ Factory Functions: [0.5, 0.8]
+ Prototype Chain: [0.4, 0.3]
+```
+
+> 💡 **പ്രൊ ടിപ്പ്**: രണ്ടു മാതൃകകളും ജാവാസ്ക്രിപ്റ്റ് വികസനത്തില് ആവശ്യമാണ്. ക്ലാസുകൾ നിർവ്വചിത പൈരങ്ങുകൾക്കായി നല്ലത്, കോൺപോസിഷൻ പരമാവധി സൗകര്യം ആവശ്യമുള്ളപ്പോള്.
+>
+**എപ്പോൾ ഏത് ഉപയോഗിക്കണം:**
+- "is-a" ബന്ധങ്ങളിൽ inheritance തിരഞ്ഞെടുക്കുക (ഹീറോ *is-a* movable ഒബ്ജക്റ്റ്)
+- "has-a" ബന്ധങ്ങളിൽ composition തെരഞ്ഞെടുക്കുക (ഹീറോയ്ക്ക് *has* movement കഴിവുകൾ)
+- ടീം ഇഷ്ടങ്ങൾ, പ്രോജക്ട് അനുവർത്തനങ്ങൾ പരിഗണിക്കുക
+- ഒരേ ആപ്ലിക്കേഷനിൽ ഇരണ്ടും കലർത്താം
+
+### 🔄 **പാഠപദ്ധതി പരിശോധന**
+**ഒബ്ജക്റ്റ് ക്രമീകരണം മനസ്സിലാക്കുക**: സമ്പ്രേഷണ മാതൃകകൾ മുൻപ്,
+- ✅ ഇൻഹെറിറ്റൻസും കോൺപോസിഷനും വ്യത്യാസം പറയാൻ കഴിയും
+- ✅ ക്ലാസുകൾക്കും ഫാക്ടറി ഫംഗ്ഷനുകൾക്കുമിടയിൽ ഉൾക്കൊള്ളിക്കാം
+- ✅ inheritanceൽ `super()` കിവേഡിന്റെ പ്രവർത്തനം മനസ്സിലാക്കുക
+- ✅ ഗെയിം വികസനത്തിലെ ഓരോ സമീപനത്തിന്റെ ഗുണങ്ങൾ മനസ്സിലാക്കുക
+
+**വേഗം സ്വയം പരീക്ഷണം**: പറന്നു വീഴാൻ സാധിക്കുന്ന ശത്രുവിനെ (Flying Enemy) എങ്ങനെ സൃഷ്ടിക്കും?
+- inheritance: `class FlyingEnemy extends Movable`
+- composition: `{ ...movable, ...flyable, ...gameObject }`
+
+**യഥാർത്ഥ ലോകം**: ഈ മാതൃകകൾ എല്ലായിടത്തും കാണുന്നു:
+- React ഘടകങ്ങൾ: Props (composition) vs ക്ലാസ് inheritance
+- ഗെയിം എഞ്ചിനുകൾ: Entity-component സംവിധാനങ്ങൾ composition ഉപയോഗിക്കുന്നു
+- മൊബൈൽ ആപ്ലിക്കേഷനുകൾ: UI ഫ്രെയിംവർക്കുകൾ പലപ്പോഴും inheritance
+
+## സംവാദ മാതൃകകൾ: Pub/Sub സിസ്റ്റം
+
+ആപ്ലിക്കേഷനുകൾ സങ്കീർണ്ണമാകുമ്പോൾ, ഘടകങ്ങൾ തമ്മിലുള്ള സംവാദം നിയന്ത്രിക്കുന്നത് ബുദ്ധിമുട്ടാകുന്നു. പ്രസാധന-subscribe മാതൃക(pub/sub) ഈ പ്രശ്നം പരിഹരിക്കുന്നു, റേഡിയോ സംപ്രേഷണ സമാനമായ പ്രിൻസിപ്പിൾ ഉപയോഗിച്ച് – ഒരു ട്രാൻസ്മിറ്റർ ഒരേ സമയം പല റിസീവേഴ്സിനും എത്തുമല്ലോ.
+
+ഹീറോക്ക് കേടുപാടുണ്ടായപ്പോൾ സംഭവിക്കാൻ പോകുന്നത് കരുതുക: ഹെൽത്ത് ബാർ അപ്ഡേറ്റ്, ശബ്ദങ്ങൾ, ദൃശ്യ ഫീഡ്ബാക്ക്. ഹീറോ ഒബ്ജക്റ്റ് നേരിട്ട് ഈ സിസ്റ്റങ്ങളുമായി ബന്ധിപ്പിക്കാതെ pub/sub "ഹാനി നേരിട്ടു" സന്ദേശം പ്രക്ഷേപിക്കും. ഇത് subscribe ചെയ്ത സിസ്റ്റങ്ങൾ അത് സ്വീകരിച്ച് പ്രതികരിക്കും.
+
+✅ **Pub/Sub** അതിന്റെ പൂർണ്ണരൂപം - 'publish-subscribe'
+
+```mermaid
+flowchart TD
+ A[ഹീറോയ്ക്ക് കേട് വരുന്നു] --> B[പ്രസിദ്ധീകരിക്കുക: HERO_DAMAGED]
+ B --> C[ഇവന്റ് സിസ്റ്റം]
+
+ C --> D[ഹെൽത്ത് ബാർ സബ്സ്ക്രൈബർ]
+ C --> E[സൗണ്ട് സിസ്റ്റം സബ്സ്ക്രൈബർ]
+ C --> F[വിഷ്വൽ എഫക്ട്സ് സബ്സ്ക്രൈബർ]
+ C --> G[അചീവ്മെന്റ് സിസ്റ്റം സബ്സ്ക്രൈബർ]
+
+ D --> H[ഹെൽത്ത് ഡിസ്പ്ലേ അപ്ഡേറ്റ് ചെയ്യുക]
+ E --> I[കൂടിളടൽ ശബ്ദം പ്ലേ ചെയ്യുക]
+ F --> J[ചുവപ്പ് ഫ്ലാഷ് കാണിക്കുക]
+ G --> K[ജീവിതരക്ഷാ അചീവ്മെന്റുകൾ പരിശോധിക്കുക]
+
+ style A fill:#ffebee
+ style B fill:#e1f5fe
+ style C fill:#e8f5e8
+ style H fill:#fff3e0
+ style I fill:#fff3e0
+ style J fill:#fff3e0
+ style K fill:#fff3e0
+```
+### Pub/Sub ഘടന മനസ്സിലാക്കുക
+
+Pub/sub മാതൃക നിങ്ങളുടെ ആപ്ലിക്കേഷന്റെ മേഖലകൾ തമ്മിൽ ഇളവുള്ള ബന്ധം നിലനിർത്തുന്നു, അതായത് അവ പരസ്പരം നേരിട്ട് ആശ്രയപ്പെടുത്തി പോകരുത്. ഈ വ്യത്യാസം നിങ്ങളുടെ കോഡ് പരിപാലനയോഗ്യം, പരീക്ഷണയോഗ്യവും മാറ്റങ്ങൾക്ക് സൗകര്യമാകും.
+
+**Pub/Subയിലെ പ്രധാന ഘടകങ്ങൾ:**
+- **സന്ദേശങ്ങൾ** – `'PLAYER_SCORED'` പോലുള്ള ലേബലുകൾ, സംഭവിച്ചതു വിവരിക്കുന്നത് (പലവട്ടം കൂടി ഡാറ്റയും)
+- **പ്രസാധകർ** – "ഒരു സംഭവം സംഭവിച്ചു!" എന്ന് ഏവരോടും അറിയിക്കുന്ന ഒബ്ജക്റ്റുകൾ
+- **സബ്സ്ക്രൈബർമാർ** – "ആ സംഭവത്തിൽ താൽപ്പര്യമുണ്ടു" എന്ന് പറഞ്ഞു പ്രതികരിക്കുന്നവ
+- **ഇവന്റ് സിസ്റ്റം** – അനുയോജ്യമായ രീസീവ്ർമാർക്ക് സന്ദേശങ്ങൾ എത്തിക്കുന്ന ഒരു ഇടനിലക്കാരൻ
+
+### ഒരു ഇവന്റ് സിസ്റ്റം നിർമ്മിക്കുക
+
+ഈ ആശയങ്ങൾ കാണിക്കുന്ന, ലളിതമായ ശക്തമായ ഒരു ഇവന്റ് സിസ്റ്റം ഉണ്ടാക്കാം:
+
+```javascript
+// ഘട്ടം 1: EventEmitter ക്ലാസ് സൃഷ്ടിക്കുക
+class EventEmitter {
+ constructor() {
+ this.listeners = {}; // എല്ലാ ഇവന്റ് ലിസനേഴ്സും സൂക്ഷിക്കുക
+ }
+
+ // ഒരു പ്രത്യേക സന്ദേശ തരംക്കായി ഒരു ലിസ്നർ രജിസ്റ്റർ ചെയ്യുക
+ on(message, listener) {
+ if (!this.listeners[message]) {
+ this.listeners[message] = [];
+ }
+ this.listeners[message].push(listener);
+ }
+
+ // രജിസ്റ്റർ ചെയ്ത എല്ലാ ലിസ്നർമാർക്കുമൊരു സന്ദേശം അയയ്ക്കുക
+ emit(message, payload = null) {
+ if (this.listeners[message]) {
+ this.listeners[message].forEach(listener => {
+ listener(message, payload);
+ });
+ }
+ }
+}
+```
+
+**ഇവിടെ എന്ത് നടക്കുന്നു:**
+- ലളിതമായ ക്ലാസ് ഉപയോഗിച്ച് കേന്ദ്ര ഇവന്റ് മാനേജ്മെന്റ് സിസ്റ്റം സൃഷ്ടിക്കുന്നു
+- സന്ദേശ തരം അനുസരിച്ചു ലിസ്റ്റനർമാരെ ഓർമ്മക്കുള്ളിൽ സൂക്ഷിക്കുന്നു
+- `on()` മെത്തഡ് ഉപയോഗിച്ച് ലിസ്റ്റനർമാർ രജിസ്റ്റർ ചെയ്യുന്നു
+- `emit()` ഉപയോഗിച്ച് എല്ലാ താൽപ്പര്യമുള്ള ലിസ്റ്റനർമാർക്കു സന്ദേശം പ്രക്ഷേപിക്കുന്നു
+- ആവശ്യമായ ഡാറ്റ പാസ് ചെയ്യാനും പിന്തുണ
+
+### എല്ലാം ചേർത്തുകൂട്ടൽ: പ്രായോഗിക ഉദാഹരണം
+
+നമുക്ക് pub/sub എങ്ങനെ വൃത്തിയുള്ളതും എളുപ്പമുള്ളതും ആണോ എന്ന് കാണിക്കാൻ ലളിതമായ ഒരു മൂവിങ് സിസ്റ്റം നിർമ്മിക്കാം:
+
+```javascript
+// ഘട്ടം 1: നിങ്ങളുടെ സന്ദേശ തരം നിർവചിക്കുക
+const Messages = {
+ HERO_MOVE_LEFT: 'HERO_MOVE_LEFT',
+ HERO_MOVE_RIGHT: 'HERO_MOVE_RIGHT',
+ ENEMY_SPOTTED: 'ENEMY_SPOTTED'
+};
+
+// ഘട്ടം 2: നിങ്ങളുടെ ഇവന്റ് സിസ്റ്റവും ഗെയിം ഒബ്ജക്റ്റുകളും സൃഷ്ടിക്കുക
+const eventEmitter = new EventEmitter();
+const hero = createHero(0, 0);
+```
+
+**ഈ കോഡ് ചെയ്യുന്നതു:**
+- സന്ദേശ നാമങ്ങളിൽ ടൈപ്പുകൾ ഒഴിവാക്കാൻ ഒരു constants ഒബ്ജക്റ്റ് നിർവ്വചിക്കുന്നു
+- എല്ലാ സംവാദവും കൈകാര്യം ചെയ്യാനുള്ള ഇവന്റ് എമിറ്റർ ഉദാഹരണം സൃഷ്ടിക്കുന്നു
+- നായകന്റെ തുടക്ക സ്ഥാനത്തിന് ഒരു ഒബ്ജക്റ്റും ഒരുക്കുന്നു
+
+```javascript
+// പടി 3: ഇയവന്റ് ശ്രവണികൾ (सब्स്ക്രൈബർമാർ) സജ്ജീകരിക്കുക
+eventEmitter.on(Messages.HERO_MOVE_LEFT, () => {
+ hero.moveTo(hero.x - 5, hero.y);
+ console.log(`Hero moved to position: ${hero.x}, ${hero.y}`);
+});
+
+eventEmitter.on(Messages.HERO_MOVE_RIGHT, () => {
+ hero.moveTo(hero.x + 5, hero.y);
+ console.log(`Hero moved to position: ${hero.x}, ${hero.y}`);
+});
+```
+
+**മുകളിൽ:**
+- ചലന സന്ദേശങ്ങൾക്ക് പ്രതികരിക്കുന്ന ഇവന്റ് ലിസ്റ്റനർമാർ രജിസ്റ്റർ ചെയ്തു
+- നായകന്റെ സ്ഥാനം ചലന ദിശ അനുസരിച്ചു അപ്ഡേറ്റ് ചെയ്തു
+- നോവൽ ലോഗിംഗും ചേർത്തു സ്ഥാനം ട്രാക്ക് ചെയ്യാൻ
+- ഉള്ളിക്ക് ഹാൻഡ്ലിംഗ് നിന്നു ചലന ലാജിക്ക് വേർതിരിച്ചു
+
+```javascript
+// ഘട്ടം 4: കീബോർഡ് ഇൻപുട്ട് ഇവന്റുകളുമായി (പ്രകാശകർ) ബന്ധിപ്പിക്കുക
+window.addEventListener('keydown', (event) => {
+ switch(event.key) {
+ case 'ArrowLeft':
+ eventEmitter.emit(Messages.HERO_MOVE_LEFT);
+ break;
+ case 'ArrowRight':
+ eventEmitter.emit(Messages.HERO_MOVE_RIGHT);
+ break;
+ }
+});
+```
+
+**ഈ ആശയങ്ങൾ മനസ്സിലാക്കുക:**
+- ഗെയിം ഇവന്റുകളുമായി കീബോർഡ് ഇന്പുട്ട് ബന്ധിപ്പിക്കുന്നു, കൃത്യമായ ബന്ധമില്ലാതെ
+- ഇന്പുട്ട് സിസ്റ്റം താൽക്കാലികമായി game objects-നോട് സംവദിക്കുന്നു
+- ഒരേ കീബോർഡ് ഇവന്റിനാൽ നിരവധി സിസ്റ്റങ്ങൾ പ്രതികരിക്കുന്നു
+- കീ ബൈൻഡിംഗുകൾ മാറ്റാനും പുതിയ ഇൻപുട്ട് മേത്തഡുകൾ കൂട്ടാനും എളുപ്പമാണ്
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Keyboard
+ participant EventEmitter
+ participant Hero
+ participant SoundSystem
+ participant Camera
+
+ User->>Keyboard: അമർത്തുക ArrowLeft
+ Keyboard->>EventEmitter: emit('HERO_MOVE_LEFT')
+ EventEmitter->>Hero: ഇടത്തേക്ക് 5 പിക്സൽ നീക്കുക
+ EventEmitter->>SoundSystem: കാൽനട ശബ്ദം പ്ലേ ചെയ്യുക
+ EventEmitter->>Camera: ഹീറോയെ അനുഗമിക്കുക
+
+ Hero->>Hero: സ്ഥാനം അപ്ഡേറ്റ് ചെയ്യുക
+ SoundSystem->>SoundSystem: ഓഡിയോ പ്ലേ ചെയ്യുക
+ Camera->>Camera: വീക്ഷണത്തരം ക്രമീകരിക്കുക
+```
+> 💡 **പ്രൊ ടിപ്പ്**: ഈ മാതൃകയുടെ സൗന്ദര്യം സൗകര്യത്തിലാണ്! നിങ്ങൾക്ക് പവർ, ആസ്പർത്തികളുടെ വേർഷനുകൾ മാത്രം ഇവന്റ് ലിസ്റ്റനറുകൾ കൂടി ചേർത്തു എളുപ്പത്തിൽ കൂട്ടാം – നിലവിലുള്ള കീബോർഡ് അല്ലെങ്കിൽ മൂവിങ് കോഡ് മാറ്റേണ്ടതില്ല.
+>
+**ഈ സമീപനം നിങ്ങൾക്കു ഇഷ്ടപ്പെടുന്നതിന്റെ കാരണങ്ങൾ:**
+- പുതിയ ഫീച്ചറുകൾ കൂട്ടുക എളുപ്പം – നിങ്ങൾ ശ്രദ്ധിക്കുന്ന ഇവന്റുകൾ കേൾക്കുക മാത്രം
+- ഒരേ സമയം നിരവധി ഘടകങ്ങൾ പ്രതികരിക്കും, പരസ്പരം തെറ്റാൻ പാടില്ല
+- ടെസ്റ്റിംഗ് വളരെ ലളിതം, ഓരോ ഭാഗവും സ്വതന്ത്രമായി പ്രവർത്തിക്കുന്നു
+- എന്തെങ്കിലും തകരാറ് വരുമ്പോൾ ഏത് ഭാഗം സംബന്ധിച്ചതെന്ന് നിർത്തിക്കാണാം
+
+### Pub/Sub എങ്ങനെ ഫലപ്രദമായി സ്കെയിൽ ചെയ്യുന്നു
+
+പ്രോജക്റ്റുകൾ സങ്കീർണ്ണമാകുമ്പോൾ pub/sub മാതൃക ലളിതമായ നിലനിർത്തുന്നു. പത്തിരുപതോളം ശത്രുക്കൾ, ഡൈനാമിക് UI അപ്ഡേറ്റുകൾ, ശബ്ദ സംവിധാനം എന്നിവയും കൈകാര്യം ചെയ്യാം; സ്കെയ്ല് ലഭിച്ചു മാറില്ല. പുതിയ ഫീച്ചറുകൾ നിലവിലുള്ള ഇവന്റ് സിസ്റ്റത്തിലേക്ക് എളുപ്പത്തിൽ ഒത്തുചേരുന്നു.
+
+> ⚠️ **സാധാരണ പിഴവ്**: ആദ്യം വളരെ പ്രത്യേക സന്ദേശ തരം സൃഷ്ടിക്കരുത്. വിശാലമായ വിഭാഗത്തിൽ തുടങ്ങിയ് ഗെയിം ആവശ്യങ്ങൾ വ്യക്തി വരുത്തുക.
+>
+**പാലനം ചെയ്യേണ്ട മികച്ച ആചാരങ്ങൾ:**
+- ബന്ധപ്പെട്ട സന്ദേശങ്ങൾ തന്ത്രത്തിൽ ജഡ്ജിക്കണം
+- സംഭവിച്ചത് വ്യക്തമാക്കുന്ന പേരുകൾ പേർപ്പിക്കുക
+- സന്ദേശ ഡാറ്റ ലളിതവും ലക്ഷ്യമിട്ടതുമാക്കുക
+- ടീം സഹകരണത്തിന് സന്ദേശ തരം ഡോക്യുമെന്റുചെയ്യുക
+
+### 🔄 **പാഠപദ്ധതി പരിശോധന**
+**ഇവന്റ് ഹെൻഡ്ലിംഗ് സിസ്റ്റത്തിന്റെ അറിവ്**:
+- ✅ pub/sub tight coupling എങ്ങനെ തടയുന്നു?
+- ✅ ഇവന്റ് ഡ്രിവൻ ആർക്കിടെക്ചറിൽ പുതിയ ഫീച്ചറുകൾ കൂട്ടാൻ എളുപ്പം എങ്ങനെ?
+- ✅ EventEmitter സംവാദത്തിൽ എന്ത് പങ്കു വഹിക്കുന്നു?
+- ✅ സന്ദേശ കൺസ്റ്റന്റുകൾ എങ്ങനെ പിഴവുകൾ തടയും, പരിപാലനം മെച്ചപ്പെടുത്തും?
+
+**ഡിസൈൻ വെല്ലുവിളി**: pub/sub ഉപയോഗിച്ച് ഗെയിം സംഭവങ്ങൾ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു?
+1. ശത്രു മരിക്കുന്നു: സ്കോർ അപ്ഡേറ്റ്, ശബ്ദം, പവർ-അപ്പ് ഉല്പത്തി, സ്ക്രീനിൽ നിന്ന് നീക്കം
+2. ലെവൽ പൂര്ത്തിയായി: സംഗീതം നിർത്തുക, UI കാണിക്കുക, പ്രോഗ്രസ് സേവ് ചെയ്യുക, അടുത്ത ലെവൽ ലോഡ് ചെയ്യുക
+3. പവർ-അപ്പ് ശേഖരിച്ചത്: കഴിവുകൾ മെച്ചപ്പെടുത്തുക, UI അപ്ഡേറ്റ്, ഫലങ്ങൾ പ്ലേ, ടൈമർ തുടങ്ങുക
+
+**പ്രൊഫഷണൽ കണക്ഷൻ**: ഈ മാതൃക കണ്ടെത്താം:
+- ഫ്രണ്ട്എൻഡ് ഫ്രെയിംവർക്ക്സ്: React/Vue events
+- ബാക്ക്എൻഡ് സർവീസുകൾ: മിക്രോസർവീസ് സംവാദം
+- ഗെയിം എഞ്ചിനുകൾ: Unity events
+- മൊബൈൽ ഡെവലപ്പ്മെന്റ്: iOS/Android notifications
+
+---
+
+## GitHub Copilot Agent വെല്ലുവിളി 🚀
+
+Agent മോഡ് ഉപയോഗിച്ച് താഴെ കാണുന്ന വെല്ലുവിളി പൂർത്തീകരിക്കുക:
+
+**വിവരണം:** inheritance ഉം pub/sub മാതൃകയും ഉപയോഗിച്ചുള്ള ലളിതമായ ഗെയിം ഒബ്ജക്റ്റ് സിസ്റ്റം സൃഷ്ടിക്കുക. വിവിധ ഒബ്ജക്റ്റുകൾ പരസ്പരം അറിയാതെ ഇവന്റുകൾ വഴി ആശയവിനിമയം നടത്തും.
+
+**പ്രോംപ്റ്റ്:** താഴെ പറയുന്ന ആവശ്യങ്ങൾ ഉള്ള ജാവാസ്ക്രിപ്റ്റ് ഗെയിം സിസ്റ്റം സൃഷ്ടിക്കുക: 1) x, y കോഓർഡിനേറ്റുകളും തരവും ഉള്ള GameObject അടിസ്ഥാന ക്ലാസ് നിർമ്മിക്കുക. 2) GameObject-നെ എക്സ്റ്റെണ്ടുചെയ്തു മാറാവുന്ന Hero ക്ലാസ് സൃഷ്ടിക്കുക. 3) GameObject-നെ എക്സ്റ്റെണ്ടുചെയ്തു നായകനെ പിന്തുടരുന്ന Enemy ക്ലാസ് സൃഷ്ടിക്കുക. 4) pub/sub മാതൃകയ്ക്കായി EventEmitter ക്ലാസ് നടപ്പാക്കുക. 5) ഹീറോ നീങ്ങുമ്പോൾ സമീപമുള്ള ശത്രുക്കൾ 'HERO_MOVED' ഇവന്റ് സ്വീകരിച്ച് നായകന്റെ ദിശയിൽ മാറ്റം വരുത്തുന്നതിനായി ഇവന്റ് ലിസ്റ്റനർമാർ സജ്ജമാക്കുക. ഒരുപോലെ കൺസോൾ.log ഉപയോഗിച്ച് ഒബ്ജക്റ്റുകൾ തമ്മിലുള്ള സംഭാഷണം കാണിക്കുക.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) കുറിച്ച് കൂടുതൽ പഠിക്കൂ.
+
+## 🚀 വെല്ലുവിളി
+Pub-sub പാറ്റേൺ ഗെയിം ആർക്itekture മെച്ചപ്പെടുത്തുന്നതിനെ കുറിച്ച് പരിഗണിക്കുക. ഏത് ഘടകങ്ങൾ ഇവന്റ് എമിറ്റ് ചെയ്യണം എന്നും സിസ്റ്റം എങ്ങനെ പ്രതികരിക്കണം എന്നും തിരിച്ചറിയുക. ഒരു ഗെയിം ആശയം രൂപീകരിച്ച് അതിന്റെ ഘടകങ്ങൾ തമ്മിലുള്ള കമ്മ്യൂണിക്കേഷൻ പാറ്റേണുകൾ മാനപെടുത്തുക.
+
+## പാസ്റ്റ്-ലെക്ചർ ക്വിസ്
+
+[പാസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/30)
+
+## റിവ്യൂ & സ്വയം പഠനം
+
+പബ്/സബ് ന്റെ കാര്യത്തിൽ കൂടുതൽ അറിയാൻ [ഇതെഴുതിയിരിക്കുന്നത് വായിക്കുക](https://docs.microsoft.com/azure/architecture/patterns/publisher-subscriber/?WT.mc_id=academic-77807-sagibbon).
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിനുള്ളിൽ നിങ്ങൾ ചെയ്യാവുന്ന കാര്യങ്ങൾ**
+- [ ] ഓൺലൈനിൽ ഏതെങ്കിലും HTML5 ഗെയിം തുറന്ന് അതിന്റെ കോഡ് ഡെവ്ടൂള്സിൽ പരിശോധന നടത്തുക
+- [ ] അടിസ്ഥാനങ്ങളായ ഒരു രൂപം വരച്ചുകൊണ്ടുള്ള ഒരു ലളിതമായ HTML5 കാൻവാസ് ഘടകം സൃഷ്ടിക്കുക
+- [ ] ലളിതമായ അനിമേഷൻ ലൂപ്പ് സൃഷ്ടിക്കാൻ `setInterval` ഉപയോഗിച്ച് ശ്രമിക്കുക
+- [ ] കാൻവാസ് API ഡോക്യുമെന്റേഷൻ പര്യവേക്ഷണം ചെയ്യുകയും ഒരു ഡ്രോയിംഗ് മെത്തഡ് പരീക്ഷിക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നിങ്ങൾ നേടാവുന്ന കാര്യങ്ങൾ**
+- [ ] പാഠശേഷം ക്വിസ് പൂർത്തിയാക്കി ഗെയിം ഡെവലപ്മെന്റ് ധാരണകൾ മനസിലാക്കുക
+- [ ] HTML, CSS, ജാവാസ്ക്രിപ്റ്റ് ഫയലുകളോടെ നിങ്ങളുടെ ഗെയിം പ്രോജക്റ്റ് സ്ട്രക്ചർ ക്രമപ്പെടുത്തുക
+- [ ] സ്ഥിരമായ അപ്ഡേറ്റും റენდറിംഗ് അടങ്ങിയ ലളിതമായ ഗെയിം ലൂപ്പ് സൃഷ്ടിക്കുക
+- [ ] കാൻവാസിൽ നിങ്ങളുടെ ആദ്യ ഗെയിം സ്പ്രൈറ്റുകൾ വരയ്ക്കുക
+- [ ] ഇമേജുകളും ശബ്ദങ്ങളും ലോഡ് ചെയ്യാൻ അടിസ്ഥാന അസറ്റ് ലോഡിംഗ് നടപ്പിലാക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചകാല ഗെയിം സൃഷ്ടി**
+- [ ] എല്ലാ പദ്ധതികളോടും പൂര്ണ്ണമായ സ്പേസ് ഗെയിം പൂര്ത്തിയാക്കുക
+- [ ] നന്നായി തയ്യാറാക്കപ്പെട്ട ഗ്രാഫിക്സുകൾ, ശബ്ദ എഫക്ടുകൾ, മൃദുവായ അനിമേഷനുകൾ ചേർക്കുക
+- [ ] ഗെയിം സ്റ്റേറ്റുകൾ (ആരംഭ സ്ക്രീൻ, ഗെയിംപ്ലേ, ഗെയിം ഓവർ) നടപ്പിലാക്കുക
+- [ ] സ്കോറിംഗ് സിസ്റ്റം, പ്ലെയർ പുരോഗതി ട്രാക്കിംഗ് സൃഷ്ടിക്കുക
+- [ ] നിങ്ങളുടെ ഗെയിം എല്ലായ്പ്പോഴും റെസ്പോൺസീവ് ആയി പല ഉപകരണങ്ങളിലും ഉപയോഗിക്കാൻ തയാറാക്കുക
+- [ ] നിങ്ങളുടെ ഗെയിം ഓൺലൈനിൽ പങ്കുവെച്ച് പ്ലെയേഴ്സിൽ നിന്ന് ഫീഡ്ബാക്ക് ശേഖരിക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസംകാല ഗെയിം ഡെവലപ്പ്മെന്റ്**
+- [ ] വ്യത്യസ്ത ശേഖരങ്ങളും മെക്കാനിക്കുകളും പരിശോധിച്ച് നിരവധി ഗെയിംസ് നിർമ്മിക്കുക
+- [ ] Phaser അല്ലെങ്കിൽ Three.js പോലുള്ള ഗെയിം ഡെവലപ്പ്മെന്റ് ഫ്രെയിംവർക്ക് പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഗെയിം ഡെവലപ്പ്മെന്റ് പ്രോജക്റ്റുകളിലേക്ക് സംഭാവന നൽകുക
+- [ ] ഉയർന്ന ഗെയിം പ്രോഗ്രാമിംഗ് പാറ്റേണുകളും ഓപ്റ്റിമൈസേഷനുകളും ആധിപത്യപ്പെടുത്തുക
+- [ ] നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് കഴിവുകൾ പ്രദർശിപ്പിക്കുന്ന ഒരു പോർട്ട്ഫോളിയോ നിർമ്മിക്കുക
+- [ ] ഗെയിം ഡെവലപ്പ്മെന്റിലും ഇന്ററാക്ടീവ് മീഡിയയിലും താൽപ്പര്യം ഉള്ളവർക്കു നിർദേശം നൽകുക
+
+## 🎯 നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title ഗെയിം ആർക്കിടെക്ചർ പഠന പുരോഗതി
+
+ section ഒബ്ജക്ട് പാറ്റേണുകൾ (20 മിനിറ്റ്)
+ കോഡ് സംഘടി സ്ഥാപിക്കൽ: ക്ലാസ് പാരമ്പര്യം
+ : ഘടന പാറ്റേണുകൾ
+ : ഫാക്ടറി ഫctions
+ : പെരുമാറ്റ മിക്സിംഗ്
+
+ section കമ്മ്യൂണിക്കേഷൻ സിസ്റ്റങ്ങൾ (25 മിനിറ്റ്)
+ ഇവന്റ് ആർക്കിടെക്ചർ: പബ്/സബ് നടപ്പാക്കൽ
+ : സന്ദേശ രൂപകല്പന
+ : ഇവന്റ് എമിറ്റേഴ്സ്
+ : പുസ്തകോലനം
+
+ section ഗെയിം ഒബ്ജക്ട് ഡിസൈൻ (30 മിനിറ്റ്)
+ എൻറ്റിറ്റി സിസ്റ്റങ്ങൾ: സ്വത്ത് മാനേജ്മെന്റ്
+ : പെരുമാറ്റ ഘടന
+ : നില കൈകാര്യം
+ : ജീവിതചക്രം മാനേജ്മെന്റ്
+
+ section ആർക്കിടെക്ചർ പാറ്റേണുകൾ (35 മിനിറ്റ്)
+ സിസ്റ്റം ഡിസൈൻ: കോമ്പോണന്റ് സിസ്റ്റങ്ങൾ
+ : ഒബ്സർവർ പാറ്റേൺ
+ : കമാൻഡ് പാറ്റേൺ
+ : സ്റ്റേറ്റ് മെഷീനുകൾ
+
+ section അഭിവൃദ്ധി ആശയങ്ങൾ (45 മിനിറ്റ്)
+ സ്കെയിബിൾ ആർക്കിടെക്ചർ: പ്രകടന മെച്ചപ്പെടുത്തൽ
+ : മെമ്മറി മാനേജ്മെന്റ്
+ : മോടുലാർ ഡിസൈൻ
+ : ടെസ്റ്റിംഗ് തന്ത്രങ്ങൾ
+
+ section ഗെയിം എഞ്ചിൻ ആശയങ്ങൾ (1 വാരം)
+ പ്രൊഫഷണൽ വികസനം: സീൻ ഗ്രാഫുകൾ
+ : ആസറ്റ് മാനേജ്മെന്റ്
+ : റൻഡറിംഗ് പൈപ്പ്ലൈൻಗಳು
+ : ഭൗതിക സംയോജനം
+
+ section ഫ്രെയിംവർക്ക് പണ്ടിത്യം (2 ആഴ്ചകൾ)
+ ആധുനിക ഗെയിം വികസനം: റിയാക്ട് ഗെയിം പാറ്റേണുകൾ
+ : ക്യാൻവാസ് മെച്ചപ്പെടുത്തൽ
+ : വെബ് ജിഎൽ അടിസ്ഥാനങ്ങൾ
+ : പിഡബ്ല്യുഎ ഗെയിമുകൾ
+
+ section വ്യവസായ ആചാരങ്ങൾ (1 മാസം)
+ പ്രൊഫഷണൽ കഴിവുകൾ: ടീം സഹകരണം
+ : കോഡ് അവലോകനങ്ങൾ
+ : ഗെയിം ഡിസൈൻ പാറ്റേണുകൾ
+ : പ്രകടന പ്രൊഫൈലിംഗ്
+```
+### 🛠️ നിങ്ങളുടെ ഗെയിം ആർക്itekture ഉപകരണ ശേഖരത്തിന്റെ സംഗ്രഹം
+
+ഈ പാഠം പൂര്ത്തിയാക്കിയതിനു ശേഷം, നിങ്ങൾക്കിത് ലഭിക്കുന്നു:
+- **ഡിസൈൻ പാറ്റേൺ മാസ്റ്ററി**: ഇൻഹെറിറ്റൻസ് vs. കമ്പോസിഷൻ ട്രേഡ്-ഓഫുകൾ മനസ്സിലാക്കൽ
+- **ഇവന്റ്-ഡ്രിവൻ ആർക്itekture**: സ്കെയിലബിൾ കമ്മ്യൂണിക്കേഷനു വേണ്ടി പബ്/സബ് നടപ്പാക്കൽ
+- **ഓബ്ജക്ട് ഓറിയന്റഡ് ഡിസൈൻ**: ക്ലാസ് ഹിയറാർകികൾയും ബിഹേവിയർ കമ്പോസിഷനും
+- **ആധുനിക ജാവാസ്ക്രിപ്റ്റ്**: ഫാക്ടറി ഫംഗ്ഷൻസ്, സ്പ്രെഡ്ഡിനിസ്സ്യൂ, ES6+ പാറ്റേണുകൾ
+- **സ്കെയിലബിൾ ആർക്itekture**: ലോസ് കപ്പ്ലിംഗ്, മോഡുലാർ ഡിസൈൻ സിദ്ധാന്തങ്ങൾ
+- **ഗെയിം ഡെവലപ്പ്മെന്റ് ഫൗണ്ടേഷൻ**: എന്റിറ്റി സിസ്റ്റങ്ങൾ, കമ്പോണന്റ് പാറ്റേണുകൾ
+- **പ്രൊഫഷണൽ പാറ്റേണുകൾ**: ഇൻഡസ്റ്റ്രീ-സ്റ്റാൻഡേർഡ് കോഡ് ഓർഗനൈസേഷൻ വഴി
+
+**റിയൽ വേൾഡ് അപ്ലിക്കേഷനുകൾ**: ഈ പാറ്റേണുകൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **ഫ്രണ്ട്എന്റ് ഫ്രെയിംവർക്ക്സ്**: React/Vue ഘടക ആർക്itekture, സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+- **ബാക്ക്എന്റ് സേവനങ്ങൾ**: മൈക്രോസെർവീസ് കമ്മ്യൂണിക്കേഷൻ, ഇവന്റ്-ഡ്രിവൻ സിസ്റ്റങ്ങൾ
+- **മൊബൈൽ ഡെവലപ്പ്മെന്റ്**: iOS/Android ആപ്പിൻ്റെ ആർക്itekture, നോട്ടിഫിക്കേഷൻ സിസ്റ്റങ്ങൾ
+- **ഗെയിം എന്ജിനുകൾ**: Unity, Unreal, വെബ്-ബേസ്ഡ് ഗെയിം ഡെവലപ്പ്മെന്റ്
+- **എന്റർപ്രൈസ് സോഫ്റ്റ്വെയർ**: ഇവന്റ് സോഴ്സിംഗ്, വിതരണ സമ്പ്രദായ ഡിസൈൻ
+- **API ഡിസൈൻ**: RESTful സേവനങ്ങൾ, റിയൽ-ടൈം കമ്മ്യൂണിക്കേഷൻ
+
+**പ്രൊഫഷണൽ കഴിവുകൾ നേടിയത്**: നിങ്ങൾക്ക് ഇപ്പോൾ കഴിയുന്നത്:
+- **ഡിസൈൻചെയ്യുക** തെളിഞ്ഞ പാറ്റേണുകൾ ഉപയോഗിച്ച് സ്കെയിലബിൾ സോഫ്റ്റ്വെയർ ആർക്itekture
+- **ഇമ്പ്ലിമെന്റ് ചെയ്യുക** സങ്കീർണ്ണ ഇടപെടലുകൾ കൈകാര്യം ചെയ്യുന്ന ഇവന്റ്-ഡ്രിവൻ സിസ്റ്റങ്ങൾ
+- **തിരഞ്ഞെടുക്കുക** വ്യത്യസ്ത സാഹചര്യങ്ങൾക്ക് അനുയോജ്യമായ കോഡ് ഓർഗനൈസേഷൻ നയങ്ങൾ
+- **ഡീബഗ് ചെയ്യുക** ലൂസ് കപ്പിൾഡ് സിസ്റ്റങ്ങൾ ഫലപ്രଦമായി പരിപാലിക്കുക
+- **കമ്മ്യൂണിക്കേറ്റ് ചെയ്യുക** ടെക്നിക്കൽ തീരുമാനങ്ങൾ ഇൻഡസ്റ്റ്രീ-സ്റ്റാൻഡേർഡ് പദസമ്പട്ടൈപ്പിൽ
+
+**അടുത്ത നില**: നിങ്ങൾക്ക് ഈ പാറ്റേണുകൾ ഒരു യഥാർത്ഥ ഗെയിമിൽ നടപ്പിലാക്കാനും, ആധുനിക ഗെയിം ഡെവലപ്പ്മെന്റ് വിഷയങ്ങൾ അന്വേഷിക്കാനും, വെബ് ആപ്പ്ലിക്കേഷനുകളിൽ ഈ ആർക്itekture ആശയങ്ങൾ പ്രയോഗിക്കാനും തയ്യാറാണ്!
+
+🌟 **സിദ്ധി നേടിയിരിക്കുന്നു**: ലളിതമായ ഗെയിമുകളിൽ നിന്ന് സങ്കീർണ്ണ എന്റർപ്രൈസ് സിസ്റ്റങ്ങളും ഉള്ളതുവരെയുള്ള അടിസ്ഥാന സോഫ്റ്റ്വെയർ ആർക്itekture പാറ്റേണുകൾ നിങ്ങൾക്കു കരസ്ഥമാക്കി!
+
+## അസൈൻമെന്റ്
+
+[ഒരു ഗെയിം മോക്ക് അപ്പ്](assignment.md)
+
+---
+
+
+**മൊഴിമാറ്റ അറിയിച്ചു**:
+ഈ രേഖ AI ഭാഷാമാറ്റ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് മൊഴിമാറ്റം ചെയ്തതാണ്. നമുക്ക് നിഷ്ക്കളങ്കത കഴിവുണ്ടെങ്കിലും, ഓട്ടോമേറ്റഡ് മൊഴിമാറ്റങ്ങളിൽ തെറ്റുകളോ അനിശ്ചിതത്വങ്ങളോ ഉണ്ടാകാൻ സാധ്യത ഉണ്ടെന്ന് ദയവായി ശ്രദ്ധിക്കുക. ഇതിന്റെ യഥാർത്ഥ രേഖ മാതൃഭാഷയിലുള്ളത് മാത്രമേ പ്രാമാണിക ഉറവിടമായിരുന്നുള്ളൂ. നിർണായകമായ വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ മൊഴിമാറ്റം നിർദ്ദേശിക്കുന്നു. ഈ മൊഴിമാറ്റം ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകുന്ന തെറ്റു വിവർത്തനങ്ങളോ തെറ്റിദ്ധാരണങ്ങളോ ഞങ്ങൾ ഉത്തരവാദിയല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/1-introduction/assignment.md b/translations/ml/6-space-game/1-introduction/assignment.md
new file mode 100644
index 000000000..bea9932ab
--- /dev/null
+++ b/translations/ml/6-space-game/1-introduction/assignment.md
@@ -0,0 +1,102 @@
+
+# ഒരു ഗെയിം മോക്ക് അപ്പ് ചെയ്യുക: ഡിസൈൻ പാറ്റേണുകൾ പ്രയോഗിക്കുക
+
+## അസൈൻമെന്റ് അവലോകനം
+
+ഡിസൈൻ പാറ്റേണുകളിലെ നിങ്ങളുടെ പുതിയ അറിവ് ഉപയോഗിച്ച് ഒരു ലളിതമായ ഗെയിം പ്രോട്ടോട്ടൈപ്പ് സൃഷ്ടിക്കുക! ഈ അസൈൻമെന്റ് വർഗ്ഗതല പാറ്റേണുകളും (ഇനംവരമ്പ് അല്ലെങ്കിൽ ഘടന) നിങ്ങൾ പാഠത്തിൽ പഠിച്ച പബ്ലിഷ്/സബ്സ്ക്രൈബ് (pub/sub) കമ്മ്യൂണിക്കേഷൻ സിസ്റ്റവും പ്രായോഗികമായി അഭ്യാസത്തിന് സഹായിക്കും.
+
+## നിർദ്ദേശങ്ങൾ
+
+ഈ പാഠത്തിൽ നിന്നുള്ള ഡിസൈൻ പാറ്റേണുകൾ പ്രകടിപ്പിക്കുന്ന ലളിതമായ ഒരു ഗെയിം പ്രതിനിധാനം സൃഷ്ടിക്കുക. നിങ്ങളുടെ ഗെയിം പ്രവർത്തനക്ഷമമായിരിക്കണം, എന്നാൽ പരീകൃത ഗ്രാഫിക്കുകൾ ആവശ്യമില്ല – അടിസ്ഥാന ആർക്കിടെക്ചറും കമ്മ്യൂണിക്കേഷൻ പാറ്റേണുകളും നേരത്തെ പ്രത്യേകം ശ്രദ്ധിക്കുക.
+
+### ആവശ്യകതകൾ
+
+**നിങ്ങളുടെ ആർക്കിടെക്ചർ പാറ്റേൺ തിരഞ്ഞെടുക്കുക:**
+- **ഓപ്ഷൻ A**: ക്ലാസ്-അധിഷ്ഠിത രൂപത്തിൽ ഇൻഹെറിറ്റൻസ് ഉപയോഗിക്കുക (`GameObject` → `Movable` → `Hero` ഉദാഹരണമായ പോലെ)
+- **ഓപ്ഷൻ B**: ഘടന (കമ്പോസിഷൻ) ഉപയോഗിക്കുക (നിരവധി ബിഹേവിയറുകളോടെ ഫാക്ടറി ഫങ്ഷൻ സമീപനം പോലുള്ളത്)
+
+**കമ്മ്യൂണിക്കേഷൻ നടപ്പിലാക്കുക:**
+- **`EventEmitter`** ക്ലാസ് പബ്ലിഷ്/സബ്സ്ക്രൈബ് മെസേജിംഗ് സിസ്റ്റത്തിനായി ഉൾപ്പെടുത്തുക
+- **കുറഞ്ഞത് 2-3 വ്യത്യസ്ത മെസേജ് തരം** സജ്ജമാക്കുക (`PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE` പോലുള്ളത്)
+- ഉപയോക്തൃ ഇൻപുട്ട് (കീബോർഡ്/മൗസ്) ഗെയിം ഇവന്റുകളുമായി ഈവెంట్ സിസ്റ്റത്തിന്റെ മാർഗ്ഗത്തിലൂടെ ബന്ധിപ്പിക്കുക
+
+**ഗെയിം ഘടകങ്ങൾ ഉൾപ്പെടുത്തുക:**
+- കുറഞ്ഞത് ഒരു പ്ലെയർ നിയന്ത്രിക്കുന്ന کردارം
+- മറ്റൊരു ഗെയിം ഓബ്ജക്റ്റ് (ശത്രു, ശേഖരിക്കാവുന്ന വസ്തു, അല്ലെങ്കിൽ പരിസ്ഥിതി ഘടകം)
+- ഓബ്ജക്റ്റുകൾ തമ്മിലുള്ള അടിസ്ഥാന ഇന്ററാക്ഷൻ (ടാക്കര, ശേഖരണം, അല്ലെങ്കിൽ കമ്മ്യൂണിക്കേഷൻ)
+
+### നിർദ്ദേശിച്ച ഗെയിം ആശയങ്ങൾ
+
+**പരിശീലിക്കാൻ ലളിതമായ ഗെയിമുകൾ:**
+- **സ്നേക് ഗെയിം** – സ്നേക്ക് സെഗ്മെന്റുകൾ തല പിന്തുടരുക, ഭക്ഷണം ആകെയുള്ളിടത്ത് സ്പോൺ വേണം
+- **പോങ് വ്യത്യാസം** – പാഡിൽ മുൻകരുതൽ നൽകുന്ന ഇൻപുട്ടിന് പ്രതികരിക്കും, പന്ത് മതിലുകളിൽ നിന്ന് തിരിച്ചും
+- **കള്ളക്ടർ ഗെയിം** – കളിക്കാർ വസ്തുക്കൾ ശേഖരിച്ച് തടസ്സങ്ങൾ ഒഴിവാക്കി ചലിക്കുന്നു
+- **ടോവർ ഡിഫൻസ് അടിസ്ഥാനങ്ങൾ** – ടവറുകൾ ചലിക്കുന്ന ശത്രുക്കളെ കണ്ടെത്തി തീർത്ത് ആക്രമിക്കുന്നു
+
+### കോഡ് ഘടന മാർഗ്ഗനിർദ്ദേശങ്ങൾ
+
+```javascript
+// ഉദാഹരണാരംഭ ഘടന
+const Messages = {
+ // ഇവിടെ നിങ്ങളുടെ ഗെയിം സന്ദേശങ്ങൾ നിർവചിക്കുക
+};
+
+class EventEmitter {
+ // നിങ്ങളുടെ സംഭവ സംവിധാനം നടപ്പാക്കൽ
+}
+
+// ക്ലാസ് അടിസ്ഥാനമാക്കിയോ അല്ലെങ്കിൽ ഘടനാത്മക സമീപനം തിരഞ്ഞെടുക്കുക
+// ക്ലാസ് അടിസ്ഥാനമാക്കിയ ഉദാഹരണം:
+class GameObject { /* base properties */ }
+class Player extends GameObject { /* player-specific behavior */ }
+
+// അല്ലെങ്കിൽ ഘടനാത്മക ഉദാഹരണം:
+const gameObject = { /* base properties */ };
+const movable = { /* movement behavior */ };
+function createPlayer() { /* combine behaviors */ }
+```
+
+### നിങ്ങളുടെ നടപ്പാക്കലിന്റെ പരിശോധന
+
+**നിങ്ങളുടെ കോഡ് പ്രവർത്തിക്കുന്നുവെന്ന് പരിശോധിക്കാൻ:**
+- ഇവന്റുകൾ ഉണ്ടാവുമ്പോൾ ഓബ്ജക്റ്റുകൾ ചലിക്കുകയും മാറ്റപ്പെടുകയും ചെയ്യുന്നത് പരിശോധിക്കുക
+- ഒരേ ഇവന്റിന് متعدد ഓബ്ജക്റ്റുകൾ പ്രതികരിക്കാൻ കഴിയുന്നതാണെന്ന് ഉറപ്പ് വരുത്തുക
+- നിലവിലുള്ള കോഡ് മാറ്റാതെ നിങ്ങൾക്ക് പുതിയ ബിഹേവിയറുകൾ ചേർക്കാൻ കഴിയുന്നുവെന്ന് പരിശോധിക്കുക
+- കീബോർഡ്/മൗസ് ഇൻപുട്ട് ഗെയിം ഇവന്റുകൾ ശരിയായി ആരംഭിക്കുന്നുണ്ടോ എന്ന് ഉറപ്പ് വരുത്തുക
+
+## സമർപ്പണ മാർഗ്ഗനിർദ്ദേശങ്ങൾ
+
+**നിങ്ങളുടെ സമർപ്പണം താഴെ കാണുന്നതുകൾ ഉൾക്കൊള്ളണം:**
+1. നിങ്ങൾ നിർമ്മിച്ച ഗെയിം നടപ്പാക്കലുള്ള **JavaScript ഫയൽ(കൾ)**
+2. ഗെയിം റണ് ചെയ്യാനും പരീക്ഷിക്കാനും സാധിക്കുന്ന ലളിതമായ **HTML ഫയൽ**
+3. നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന പാറ്റേൺ അനുഭവപ്പെടുന്നതും കാരണം വിശദീകരിക്കുന്ന **കോമന്റുകൾ**
+4. നിങ്ങളുടെ മെസ്സേജ് തരംകളുടെ ലഘു വിവരണം, അവ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നതും
+
+## റുബ്രിക്
+
+| മാനദണ്ഡം | ഉത്തമം (3 പോയിന്റ്) | മതിയായത് (2 പോയിന്റ്) | മെച്ചപ്പെടുത്തേണ്ടത് (1 പോയിന്റ്) |
+|----------|---------------------|---------------------|------------------------------|
+| **ആർക്കിടെക്ചർ പാറ്റേൺ** | ഇൻഹെറിറ്റൻസ് അല്ലെങ്കിൽ ഘടന ശരിയായി ക്ലാസ്/ഓബ്ജക്റ്റ് వరിശയിൽ നടപ്പാക്കിയത് | തെരഞ്ഞെടുക്കപ്പെട്ട പാറ്റേൺ ചെറിയ പിശകുകളോടെ പ്രയോഗിച്ചിരിക്കുന്നു | പാറ്റേൺ uporabിക്കാൻ ശ്രമം, എന്നാൽ നടപ്പാക്കലിൽ പ്രധാന വീഴ്ചകൾ ഉള്ളത് |
+| **പബ്ലിഷ്/സബ്സ്ക്രൈബ് നടപ്പാക്കൽ** | EventEmitter പരമാവധി മെസ്സേജ് തരംകളോടെ ശരിയായി പ്രവർത്തിക്കുന്നു | അടിസ്ഥാന പബ്ലിഷ/സബ്സ്ക്രൈബ് സിസ്റ്റം ചില ഇവന്റ് കൈകാര്യം ചെയ്യൽ കുഴപ്പങ്ങൾ സഹിതം പ്രവർത്തിക്കുന്നു | ഇവന്റ് സിസ്റ്റം ഉണ്ടായെങ്കിലും വിശ്വസനീയമായി പ്രവർത്തിക്കുന്നില്ല |
+| **ഗെയിം പ്രവർത്തനം** | ഇവന്റുകൾ മുഖേന ആശയവിനിമയം നടത്തുന്ന മൂന്നു അല്ലെങ്കിൽ അതിനധികം ഇന്ററാക്ടീവ് ഘടകങ്ങൾ ഉണ്ടാകണം | രണ്ടു ഇന്ററാക്ടീവ് ഘടകങ്ങൾ അടിസ്ഥാന ഇവന്റ് കമ്മ്യൂണിക്കേഷൻ ഉപയോഗിച്ച് | ഒരേയൊന്നും അല്ലെങ്കിൽ അടിസ്ഥാന ഇന്ററാക്ഷൻ വരുന്ന ഘടകം മാത്രം |
+| **കോഡ് ഗുണമേന്മ** | നിരാകരണം ലളിതം, മെച്ചപ്പെട്ട കമന്റ് ഉപയോഗം, യുക്തിപരമായ സംഘടന, ആധുനിക ജാവാസ്ക്രിപ്റ്റ് | പൊതുവിൽ വിശിഷ്ടമായ കോഡ് കമന്റുകളില്ലാതെയെങ്കിലും നന്നായി ക്രമീകരിച്ചിരിക്കുന്നു | കോഡ് പ്രവർത്തിക്കുന്നെങ്കിലും സംഘാടനവും കമന്റിംഗും അഭാവം കാണിക്കുന്നു |
+
+**ബോണസ് പോയിന്റുകൾ:**
+- പാറ്റേണുകൾ രസകരമായി പ്രയോഗിക്കുന്ന സൃഷ്ടിപരമായ ഗെയിം മെക്കാനിക്സ്
+- അടക്കം അനേകം ഇൻപുട്ട് രീതികൾ (കീബോർഡും മൗസും)
+- പുതിയ ഫീച്ചറുകളുമായി വിപുലീകരിക്കാൻ എളുപ്പമുള്ള സ്കേബിൾ ആർക്കിടെക്ചർ
+
+---
+
+
+**വ്യക്തിഗത നഷ്ടപരിഹാരം**:
+ഈ ഡോക്യുമെന്റ് എഐ തർജ്ജമാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. ഞങ്ങൾ കൃത്യത നിലനിർത്താൻ ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, അതോത്യന്തം ശരിയായതിന് പകരം ഓട്ടോമാറ്റഡ് തർജ്ജമകളിൽ തെറ്റുകൾ ഉണ്ടായേക്കാം. സകല അവകാശവും ഉദ്ദേശിച്ച ഭാഷയിലുള്ള ആദിമ ഡോക്യുമെന്റ് യഥാർത്ഥ സൂത്രധാരമായി കാണപ്പെടണം. നിർണായക വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യ തർജ്ജമ നടപ്പിലാക്കാനുള്ള ശുപാർശ ഉണ്ട്. ഈ തർജ്ജമ ഉപയോഗിച്ചതിലൂടെ ഉണ്ടാകാവുന്ന ഏതൊരു തെറ്റായ ധാരണയ്ക്കോ അവബോധക്കേടിനോ ഞങ്ങൾ ഉത്തരവാദ órgãoളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/2-drawing-to-canvas/README.md b/translations/ml/6-space-game/2-drawing-to-canvas/README.md
new file mode 100644
index 000000000..f37c3f43f
--- /dev/null
+++ b/translations/ml/6-space-game/2-drawing-to-canvas/README.md
@@ -0,0 +1,624 @@
+
+# സ്പേസ് ഗെയിം അംശം 2: ഹീറോയും ഭീകരനും കാൻവാസിൽ വരയ്ക്കുക
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ക്യാന്വാസ് ഗ്രാഫിക്സ് യാത്ര
+ section അടിസ്ഥാനപടി
+ Understand Canvas API: 3: Student
+ Learn coordinate system: 4: Student
+ Draw basic shapes: 4: Student
+ section ചിത്രം കൈകാര്യം ചെയ്യൽ
+ Load game assets: 4: Student
+ Handle async loading: 5: Student
+ Position sprites: 5: Student
+ section ഗേം റെൻഡറിംഗ്
+ Create game screen: 5: Student
+ Build formations: 5: Student
+ Optimize performance: 4: Student
+```
+Canvas API വെബ് ഡെവലപ്പ്മെന്റിലെ ഏറ്റവും ശക്തമായ ഫീച്ചറുകളിലൊന്നാണ്, ഇത് നിങ്ങളുടെ ബ്രൗസറിൽ നിസ്സാരമായി, ഇന്ററാക്ടീവ് ഗرافيക്സ് സൃഷ്ടിക്കാൻ സഹായിക്കുന്നു. ഈ പാഠത്തിൽ, ആ ശൂന്യമായ HTML `` ഘടകം ഒരു ഹീറോകളും ഭീകരന്മാരും നിറഞ്ഞ ഒരു ഗെയിം ലോകവുമായിരിക്കും മാറുന്നത്. കാൻവാസിനെ നിങ്ങളുടെ ഡിജിറ്റൽ ആർട്ട് ബോർഡായി ചിന്തിക്കാം, അവിടെ കോഡ് ദൃശ്യമായി മാറും.
+
+നിങ്ങൾ കഴിഞ്ഞ പാഠത്തിൽ പഠിച്ചതിന്റെ അടിസ്ഥാനത്തിൽ, ഇപ്പോൾ നാം ദൃശ്യ ഘടകങ്ങളിൽ ഇറങ്ങും. ഗെയിം സ്പ്രൈറ്റ്സ് എങ്ങനെ ലോഡ് ചെയ്യാം, എലമെന്റുകൾ എങ്ങനെ കൃത്യമായി സ്ഥിതി ചെയ്യാം, നിങ്ങളുടെ സ്പേസ് ഗെയിമിനുള്ള ദൃശ്യ അടിസ്ഥാനങ്ങൾ എങ്ങനെ സൃഷ്ടിക്കാമെന്ന് നിങ്ങൾ പഠിക്കും. ഈ പിരിമുറുക്കം സ്റ്റാറ്റിക് വെബ് പേജുകളുടെയും ഡൈനാമിക്, ഇന്ററാക്ടീവ് അനുഭവങ്ങളുടെയും ഇടയിൽ ഒരു പാലമാണ്.
+
+ഈ പാഠം കഴിഞ്ഞാൽ, നിങ്ങൾക്കൊരു പൂർണ്ണമായ ഗെയിം രംഗം ഉണ്ടാകും, നിങ്ങളുടെ ഹീറോ ഷിപ്പ് ശരിയായ രീതിയിൽ നിലനിർത്തുകയും, യുദ്ധത്തിന് തയ്യാറായിരിക്കുന്ന ഭീകര നിർമ്മിതികൾ കാണിക്കുകയും ചെയ്യും. നിങ്ങൾ അറിഞ്ഞേക്കും ആധുനിക ഗെയിമുകൾ ബ്രൗസറുകളിൽ എങ്ങനെ ഗرافيക്സ് റൻഡർ ചെയ്യുന്നുവെന്ന്, കൂടാതെ സ്വന്തമായി ഇന്ററാക്ടീവ് ദൃശ്യ അനുഭവങ്ങൾ സൃഷ്ടിക്കാനുള്ള കഴിവ് ലഭിയ്ക്കും. കാൻവാസ് ഗ്രാഫിക്സിനെ അന്വേഷിച്ച്, നിങ്ങളുടെ സ്പേസ് ഗെയിം ജീവിപ്പിക്കാം!
+
+```mermaid
+mindmap
+ root((कैनवास ഗ്രാഫിക്സ്))
+ Canvas Element
+ HTML5 Feature
+ 2D Context
+ Coordinate System
+ Pixel Control
+ Drawing Operations
+ അടിസ്ഥാന ആകൃതികൾ
+ ടെക്സ്റ്റ് റെൻഡറിങ്
+ ഇമേജ് പ്രദർശനം
+ പാത്ത് ഡ്രോയിംഗ്
+ Asset Management
+ ഇമേജ് ലോഡിംഗ്
+ അസിങ്ക് ഓപ്പറേഷനുകൾ
+ പിശക് കൈകാര്യം
+ പ്രകടനം
+ Game Rendering
+ സ്പ്രൈറ്റ് പൊസിഷനിംഗ്
+ ഫോമേഷൻ ലേ ഔട്ട്
+ സീన్ കോംപوزیشن
+ ഫ്രെയിം അപ്ഡേറ്റുകൾ
+ Visual Effects
+ കളറുകൾ & സ്റ്റൈലുകൾ
+ ട്രാൻസ്ഫർമേഷനുകൾ
+ ആനിമേഷനുകൾ
+ ലെയറിംഗ്
+```
+## പ്രീലക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/31)
+
+## കാൻവാസ്
+
+അപ്പോ, ഈ `` ഘടകം യഥാർത്ഥത്തിൽ എന്താണ്? വെബ് ബ്രൗസറുകളിൽ ഡൈനാമിക് ഗ്രാഫിക്സും ആനിമേഷനും സൃഷ്ടിക്കാൻ HTML5 നൽകിയ പരിഹാരമാണ് ഇത്. സാധാരണ ചിത്രങ്ങളും വീഡിയോകളും സ്റ്റാറ്റിക്ക് ആണെന്നു കൊണ്ടാണ്, കാൻവാസ് ഓരോ പക്സ്വലഞ്ഞിലെയും നിയന്ത്രണം നിങ്ങൾക്ക് നൽകുന്നത്. ഇത് ഗെയിമുകൾ, ഡാറ്റാ വിസ്വലൈസേഷനുകൾ, ഇന്ററാക്ടീവ് ആർട്ടുകൾ എന്നിവയ്ക്ക് അനുയോജ്യമാണ്. ജാവാസ്ക്രിപ്റ്റ് നിങ്ങളുടെ പെയിൻറ്ബ്രഷ് ആകുന്ന പ്രോഗ്രാമബിൾ ഡ്രോയിംഗ് സർഫേസായി ഇത് ചിന്തിക്കാം.
+
+സ്വാഭാവികമായി, കാൻവാസ് ഘടകം തുറന്ന, പാരദർശകമായി ഒരു ലക്ഷംചതുരം പോലെ തോന്നും. പക്ഷേ അവിടെയാണ് സാധ്യത സഞ്ചരിച്ചു നിൽക്കുന്നത്! ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ആകൃതികൾ വരയ്ക്കാനും, ചിത്രങ്ങൾ ലോഡ് ചെയ്യാനും, ആനിമേഷനുകൾ സൃഷ്ടിക്കാനും, ഉപയോക്തൃ ഇടപെടലുകളോട് പ്രതികരിക്കാനും ഇത് യഥാർത്ഥ ശക്തി കാണിക്കും. 1960കളിലെ ബെൽ ലാബ്സ് ആദ്യകാല കമ്പ്യൂട്ടർ ഗ്രാഫിക്സ് വിങ്ങൽക്കാർ ഓരോ പിക്സലും പ്രോഗ്രാം ചെയ്ത് പ്രഥമ ഡിജിറ്റൽ ആനിമേഷനുകൾ സൃഷ്ടിച്ചതുപോലെ.
+
+✅ [Canvas API-യെ കുറിച്ച് കൂടുതൽ വായിക്കുക](https://developer.mozilla.org/docs/Web/API/Canvas_API) MDN-ൽ.
+
+ഇത് സാധാരണയായി പേജിന്റെ ബോഡിയിൽ ഇങ്ങനെ പ്രഖ്യാപിക്കാറുണ്ട്:
+
+```html
+
+```
+
+**ഈ കോഡ് ചെയ്യുന്നത് എന്താണെന്ന് കാണാം:**
+- **`id`** ആട്രിബ്യൂട്ട് സജ്ജമാക്കുന്നു, അതിലൂടെ ജാവാസ്ക്രിപ്റ്റിൽ താങ്കൾക്ക് ഈ canvas-നെ റഫറൻസു ചെയ്യാം
+- കാൻവാസിന്റെ ദിശാനിരോധനത്തിലായി **`width`** പിക്സലുകളിൽ നിർണ്ണയം ചെയ്യുന്നു
+- കാൻവാസിന്റെ ഉരുളഴവോളം നിർണ്ണയിക്കാൻ **`height`** പിക്സലുകൾ നൽകുന്നു
+
+## എളുപ്പമുള്ള ജ്യാമിതീയ വരച്ചിടൽ
+
+ഇപ്പോൾ നിങ്ങൾക്ക് കാൻവാസ് ഘടകം എന്താണെന്ന് അറിയുന്നു, ശരിയാണ്, വരച്ചുണരാം! കാൻവാസ് ഒരു കോ-ഓർഡിനേറ്റ് സിസ്റ്റം ഉപയോഗിക്കുന്നു, അത് നിങ്ങൾക്ക് മാത്ത് ക്ലാസിൽ പരിചിതമായിരിക്കാം, പക്ഷേ കമ്പ്യൂട്ടർ ഗ്രാഫിക്സിന് പ്രത്യേകമായ ഒരു വളർച്ചയുണ്ട്.
+
+കാൻവാസ് ഉയർന്ന ദിശയിലും (x-അക്ഷം) ലംബ ദിശയിലും (y-അക്ഷം) കോ-ഓർഡിനേറ്റുകളിൽ എല്ലാം നിശ്ചയിക്കപ്പെടുന്നു. എന്നാൽ പ്രധാന വ്യത്യാസം: ഗണിതം പഠിച്ച കോ-ഓർഡിനേറ്റ് സിസ്റ്റത്തിൽ നിന്ന് വ്യത്യസ്തമായി, ഓറിയിജിനായ (0,0) ഇരുന്നതാണ് മേൽവലത്ത് ഇടതു കോണിൽ, x-മൂല്യങ്ങൾ വലത്തേക്ക് കൂടുകയും y-മൂല്യങ്ങൾ താഴേക്ക് കൂടുകയും ചെയ്യും. ഇത് 1960കളിലെ കമ്പ്യൂട്ടർ ഡിസ്പ്ലേ ലേഖനങ്ങളിൽ നിന്നുള്ള രീതിയാണ്, എലക്ട്രോൺ ബീം മുകളിൽ നിന്ന് താഴേക്ക് സ്കാൻ ചെയ്യാറുള്ളത് മൂലമാണ് മേൽവലത്ത് ഇടത് പൊയിന്റ് സ്വാഭാവിക തുടക്കമാകുന്നത്.
+
+```mermaid
+quadrantChart
+ title ക്യാന്വാസ് കോഓര്ഡിനേറ്റ് സിസ്റ്റം
+ x-axis ഇടത്ത് --> വലത്
+ y-axis മുകളിൽ --> അടിയിൽ
+ quadrant-1 സോടി 1
+ quadrant-2 സോടി 2
+ quadrant-3 സോടി 3
+ quadrant-4 സോടി 4
+
+ Origin Point: [0.1, 0.1]
+ Hero Center: [0.5, 0.8]
+ Enemy Formation: [0.3, 0.2]
+ Power-up: [0.7, 0.6]
+ UI Elements: [0.9, 0.1]
+```
+
+> ചിത്രം [MDN](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes)
+
+കാൻവാസ് ഘടകത്തിൽ വരയ്ക്കാൻ, നിങ്ങൾ എല്ലാ കാൻവാസ് ഗ്രാഫിക്സിന്റെയും അടിസ്ഥാനമായ മൂന്ന് പടികളുടെ പ്രക്രിയ പിന്തുടരും. ഇത് കുറച്ച് പ്രാവശ്യം ചെയ്താൽ എളുപ്പത്തിൽ മനസ്സിലാക്കാം:
+
+```mermaid
+flowchart LR
+ A[HTML ക്യാൻവസ് എലമെന്റ്] --> B[ക്യാൻവസ് റഫറൻസ് നേടുക]
+ B --> C[2D കോൺടെക്സ്റ്റ് നേടുക]
+ C --> D[ചിത്രീകരണ പ്രവർത്തനങ്ങൾ]
+
+ D --> E[ആകൃതികൾ വരയ്ക്കുക]
+ D --> F[വാചകം വരയ്ക്കുക]
+ D --> G[ചിത്രങ്ങൾ വരയ്ക്കുക]
+ D --> H[ശൈലികൾ പ്രയോഗിക്കുക]
+
+ E --> I[സ്ക്രീനിൽ പ്രദർശിപ്പിക്കുക]
+ F --> I
+ G --> I
+ H --> I
+
+ style A fill:#e1f5fe
+ style C fill:#e8f5e8
+ style I fill:#fff3e0
+```
+1. DOM-ഇൽ നിന്നും കാൻവാസ് ഘടകത്തിനുള്ള റഫറൻസ് നേടുക (പിങ്കുള്ള HTML എലമെന്റ് പോലെ)
+2. 2D റൻഡറിംഗ് കോൺടെക്സ്റ്റ് (context) നേടുക – ഇത് എല്ലാ വരയ്ക്കൽ മെത്തഡുകളും നൽകും
+3. വരക്ക തുടങ്ങുക! കോൺടെക്സ്റ്റിന്റെ ഇൻബിൽട്ട് മെത്തഡുകൾ ഉപയോഗിച്ച് നിങ്ങളുടെ ഗ്രാഫിക്സ് സൃഷ്ടിക്കുക
+
+ഇതെങ്ങനെ കോഡിൽ കാണാം:
+
+```javascript
+// പതിപ്പ് 1: ക്യാന്വാസ് ഘടകം നേടുക
+const canvas = document.getElementById("myCanvas");
+
+// പതിപ്പ് 2: 2D റെന്ഡറിംഗ് സാന്ദ്രത നേടുക
+const ctx = canvas.getContext("2d");
+
+// പതിപ്പ് 3: നിറം സെറ്റ് ചെയ്ത് ഒരു ചതുരം വരയ്ക്കുക
+ctx.fillStyle = 'red';
+ctx.fillRect(0, 0, 200, 200); // x, y, വീതി, ഉയരം
+```
+
+**ഇതെന്താണെന്നും ബിംബമായി മനസ്സിലാക്കാം:**
+- ID ഉപയോഗിച്ച് കാൻവാസ് എലമെന്റിനെ സംഘടിപ്പിച്ച് വേരിയബിളിൽ സൂക്ഷിക്കുന്നു
+- 2D റൻഡറിംഗ് കോൺടെക്സ്റ്റ് ലഭിക്കുന്നു – വരയ്ക്കാനുള്ള ഉപകരണങ്ങൾ എല്ലാം ഇവിടെ ഉണ്ട്
+- കാൻവാസിന് വെള്ളം നിറയ്ക്കണമെന്നു `fillStyle` ഇലക്ഷൻ ചെയ്യുന്നു
+- മേൽക്കൈയും ഇടതുവശവും കൂടിയ (0,0) പോയിന്റിൽ നിന്നും 200 പിക്സൽ വീതിയുള്ള പരിക്കർത്തം വരക്കും
+
+✅ കാൻവാസ് API മുഖ്യമായും 2D ആകൃതികളിൽ കേന്ദ്രീകരിച്ചിരിക്കുകയാണ്, എന്നാൽ 3D ഇലമെന്റുകളും വെബ്സൈറ്റിൽ വരക്കാവുന്നതാണ്; അതിനായി [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API) ഉപയോഗിക്കാം.
+
+Canvas API-യോട് നിങ്ങൾ ഈപോലെ എല്ലാത്തരം വരക്കാവുന്നതാണ്:
+
+- **ജ്യാമിതീയ ആകൃതികളിൽ**, ഞങ്ങൾ ഒരു പരിക്കർത്തം വരയ്ക്കാനുള്ള ഉദാഹരണം കാണിച്ചിരുന്നു, പക്ഷേ നിങ്ങൾക്ക് കൂടുതൽ പലതും വരക്കാമെന്ന് മനസ്സിലാക്കാം.
+- **ടെക്സ്റ്റ്**, നിങ്ങൾക്ക് ഇഷ്ടപ്പെട്ട ഫോണ്ടും നിറവും ഉപയോഗിച്ച് ടെക്സ്റ്റ് വരക്കാം.
+- **ചിത്രങ്ങൾ**, .jpg അല്ലെങ്കിൽ .png പോലുള്ള ചിത്ര ആസ്തി അടിസ്ഥാനമാക്കി ചിത്രങ്ങൾ വരക്കാവുന്നതാണ്.
+
+✅ പരീക്ഷിച്ച് നോക്കൂ! ഒരു പരിക്കർത്തം വരച്ചത് നിങ്ങൾക്ക് അറിയാം, ഇപ്പോൾ ഒരു വൃത്തം വരക്കാമോ? CodePenൽ കാണുന്ന ചില ആകർഷകമായ കാൻവാസ് വരച്ചിടലുകൾ നോക്കൂ. ഇതാ [പ്രത്യേകം ശക്തമായ ഒരു ഉദാഹരണം](https://codepen.io/dissimulate/pen/KrAwx).
+
+### 🔄 **അധ്യാപന പരിശോധന**
+**കാൻവാസ് അടിസ്ഥാനങ്ങളുടെ ബോധം**: ചിത്രങ്ങൾ ലോഡ് ചെയ്യുന്നതിന് മുൻപ് ഉറപ്പു വരുത്തുക:
+- ✅ കാൻവാസ് കോ-ഓർഡിനേറ്റ് സിസ്റ്റം ഗണിത കോ-ഓർഡിനേറ്റുകളിൽ നിന്ന് എങ്ങനെ വ്യത്യസ്തമാണെന്ന് വിശദീകരിക്കാം
+- ✅ കാൻവാസ് വരച്ചിടൽ പ്രവർത്തനങ്ങൾക്ക് മൂന്ന് അടിസ്ഥാനം ഘട്ടങ്ങൾ അറിയാം
+- ✅ 2D റൻഡറിംഗ് കോൺടെക്സ്റ്റ് എന്താണ് നൽകുന്നത് തിരിച്ചറിയാം
+- ✅ fillStyle-ഉം fillRect-ഉം എങ്ങനെ ചേർന്ന് പ്രവർത്തിക്കുന്നു എന്നു പറയാനാകണം
+
+**ദ്രുത സ്വയം പരിശേധ:** (100, 50) സ്ഥാനത്ത് radius 25 ഉള്ള നീല വൃത്തം എങ്ങനെ വരയ്ക്കും?
+```javascript
+ctx.fillStyle = 'blue';
+ctx.beginPath();
+ctx.arc(100, 50, 25, 0, 2 * Math.PI);
+ctx.fill();
+```
+
+**നീங்கள் ഇപ്പോൾ അറിയുന്ന കാൻവാസ് വരച്ചിടൽ മെത്തഡുകൾ**:
+- **fillRect()**: നിറഞ്ഞ പരിക്കർത്തങ്ങൾ വരയ്ക്കുന്നു
+- **fillStyle**: നിറങ്ങളും പാറ്റേണുകളും സജ്ജീകരിക്കുന്നു
+- **beginPath()**: പുതിയ വരച്ചിടൽ പാതകൾ തുടങ്ങുന്നു
+- **arc()**: വൃത്തങ്ങളും വളക്കളും സൃഷ്ടിക്കുന്നു
+
+## ഒരു ചിത്രം ലോഡ് ചെയ്ത് വരയ്ക്കുക
+
+അടിസ്ഥാന ആകൃതികൾ വരയ്ക്കുന്നത് തുടക്കംകാണാനാവശ്യകമാണ്, എന്നാൽ ഭൂരിപക്ഷ ഗെയിമുകൾക്ക് യഥാർത്ഥ ചിത്രങ്ങൾ ആവശ്യമുണ്ട്! സ്പ്രൈറ്റ്സ്, പശ്ചാത്തലങ്ങൾ, ടെക്സ്ചറുകൾ എന്നിവ ഗെയിമിന് ദൃശ്യ ആകർഷണം നൽകുന്നു. കാൻവാസിൽ ചിത്രം ലോഡ് ചെയ്ത് കാണിക്കാൻ ജ്യാമിതീയ ആകൃതികളിൽ വരയ്ക്കുന്നതിനേക്കാളും വ്യത്യസ്ത രീതിയുണ്ട്, പക്ഷേ നിങ്ങളുടെ മനസ്സിലാകുമ്പോൾ വളരെ ലളിതമാണ്.
+
+നമുക്ക് ഒരു `Image` ഒബ്ജക്റ്റ് സൃഷ്ടിക്കേണ്ടതുണ്ട്, അതിന്റെ ചിത്രം (അസിങ്ക്രോണസായി, അർത്ഥം "പശ്ചാത്തലത്തിൽ") ലോഡ് ചെയ്യണം, ശേഷം അത് ഒരുങ്ങുമ്പോൾ കാൻവാസിൽ വരയ്ക്കണം. ഇത് ചിത്രങ്ങൾ ശരിയായി പ്രദർശിപ്പിക്കാൻ ഉറപ്പാക്കും, ഉപയോഗം തടയാതെ.
+
+```mermaid
+sequenceDiagram
+ participant JS as ജാവാസ്ക്രിപ്റ്റ്
+ participant Img as ചിത്ര വസ്തു
+ participant Server as ഫയല് സെര്വര്
+ participant Canvas as ക്യാന്വാസ് കണ്ടക്സ്റ്റ്
+
+ JS->>Img: new Image()
+ JS->>Img: Set src property
+ Img->>Server: Request image file
+ Server->>Img: Return image data
+ Img->>JS: Trigger onload event
+ JS->>Canvas: drawImage(img, x, y)
+ Canvas->>Canvas: Render to screen
+
+ Note over JS,Canvas: അസിങ്ക് ലോഡിംഗ് UI ബ്ലോക്കിംഗ് തടയുന്നു
+```
+### അടിസ്ഥാന ചിത്രം ലോഡിങ്
+
+```javascript
+const img = new Image();
+img.src = 'path/to/my/image.png';
+img.onload = () => {
+ // ചിത്രം ലോഡുചെയ്്ത് ഉപയോഗത്തിന് തയ്യാറാണ്
+ console.log('Image loaded successfully!');
+};
+```
+
+**ഈ കോഡിൽ സംഭവിക്കുന്നത്:**
+- നമ്മുടെ സ്പ്രൈറ്റ് അല്ലെങ്കിൽ ടെക്സ്ചർ ചേർത്തുവയ്ക്കാൻ പുതിയ Image ഒബ്ജക്റ്റ് നിർമ്മിക്കുന്നു
+- ലോഡ് ചെയ്യേണ്ട ചിത്രത്തിന്റെ സോഴ്സ് പാത സജ്ജീകരിക്കുന്നു
+- ചിത്രം ഉപയോഗത്തിന് ഒരുങ്ങുമ്പോൾ അറിയാൻ ലോഡ് ഇവന്റ് കേൾക്കുന്നു
+
+### കൂടുതൽ ഉറപ്പുള്ള ചിത്രം ലോഡ് ചെയ്യൽ
+
+വ്യവസായ ഡെവലപ്പർമാർ പൊതുവേ ഉപയോഗിക്കുന്ന, ചിത്രം ലോഡിങ്ങ് കൈകാര്യം ചെയ്യാനുള്ള ഒരു മികച്ച മാർഗമാണ് ഇത്. Promise അടിസ്ഥാനമാക്കിയ ഫംഗ്ഷനിൽ ചിത്രം ലോഡിങ്ങ് കവർ ചെയ്യാം – JavaScript Promises ES6-ൽ സാധാരണമായതിന്റെ പേരിൽ പ്രചാരമായ ഈ രീതിയിൽ നിങ്ങളുടെ കോഡ് കൂടുതൽ ക്രമസമയമായും പിശകുകൾ കരുതിയും പ്രവർത്തിക്കും:
+
+```javascript
+function loadAsset(path) {
+ return new Promise((resolve, reject) => {
+ const img = new Image();
+ img.src = path;
+ img.onload = () => {
+ resolve(img);
+ };
+ img.onerror = () => {
+ reject(new Error(`Failed to load image: ${path}`));
+ };
+ });
+}
+
+// അസിങ്ക്/അവെയിറ്റ് ഉപയോഗിച്ച് ആധുനിക ഉപയോഗം
+async function initializeGame() {
+ try {
+ const heroImg = await loadAsset('hero.png');
+ const monsterImg = await loadAsset('monster.png');
+ // ചിത്രങ്ങൾ ഇപ്പോൾ ഉപയോഗിക്കാൻ സജ്ജമാണ്
+ } catch (error) {
+ console.error('Failed to load game assets:', error);
+ }
+}
+```
+
+**ഇവിടെ ചെയ്ത കാര്യം:**
+- Promise-ൽ എല്ലാം പാക്ക് ചെയ്തു, അത് നല്ല കൈകാര്യം സാദ്ധ്യമാകും
+- പിശകുകൾ സംഭവിക്കുമ്പോൾ അറിയിക്കുന്ന error handling ചേർത്തു
+- തൻ asynchronous await സിന്റക്ഷ് ഉപയോഗിച്ചു, വായിക്കാൻ കൂടുതൽ സുതാര്യവും
+- try/catch ബ്ലോക്കുകൾ ചേർന്ന് ലോഡിങ് പരാജയങ്ങൾ സൗമ്യമായി കൈകാര്യം ചെയ്യുന്നു
+
+ചിത്രങ്ങൾ ലോഡ് ചെയ്യപ്പെട്ടാൽ, അവ കാൻവാസിൽ വരയ്ക്കുന്നത് വളരെ ലളിതമാണ്:
+
+```javascript
+async function renderGameScreen() {
+ try {
+ // ഗെയിം ആസ്തികൾ ലോഡ് ചെയ്യുക
+ const heroImg = await loadAsset('hero.png');
+ const monsterImg = await loadAsset('monster.png');
+
+ // കാൻവാസ് மற்றும் കോൺടക്സ്റ്റ് നേടുക
+ const canvas = document.getElementById("myCanvas");
+ const ctx = canvas.getContext("2d");
+
+ // ചിത്രങ്ങൾ നിർദ്ദിഷ്ട സ്ഥാനങ്ങളിൽ വരയ്ക്കുക
+ ctx.drawImage(heroImg, canvas.width / 2, canvas.height / 2);
+ ctx.drawImage(monsterImg, 0, 0);
+ } catch (error) {
+ console.error('Failed to render game screen:', error);
+ }
+}
+```
+
+**ഇവിടത്തെ ഓരോ ഘട്ടവും വിശദീകരിക്കാം:**
+- await ഉപയോഗിച്ച് ഹീറോയും ഭീകരനുമായ ചിത്രങ്ങളെയും പശ്ചാത്തലത്തിൽ ലോഡ് ചെയ്യുന്നു
+- കാൻവാസ് ഘടകം പിടിച്ച് 2D റൻഡറിംഗ് കോൺടെക്സ്റ്റും എടുക്കുന്നു
+- ഹീറോ ചിത്രം തരംതിരിച്ച് കോ-ഓർഡിനേറ്റുകൾക്കനുസരിച്ച് കുത്തനെ സ്ഥിതി ചെയ്യുന്നു
+- ഭീകരൻ ചിത്രത്തെ വയലത്ത് മുകളിൽ വച്ചുകൊണ്ട് ശത്രുക്കളുടെ രൂപം തുടങ്ങുന്നു
+- ലോഡിങ് അല്ലെങ്കിൽ റൻഡറിംഗ് സമയത്ത് സംഭവിക്കുന്ന പിശകുകൾ പിടിക്കുന്നത് ഉറപ്പുവരുത്തുന്നു
+
+```mermaid
+flowchart TD
+ A[ആസറ്റുകൾ ലോഡ് ചെയ്യുക] --> B{എല്ലാ ചിത്രങ്ങളും ലോഡ് ചെയ്തു了吗?}
+ B -->|ഇല്ല| C[ലോഡിംഗ് കാണിക്കൂ]
+ B -->|അതെ| D[കാൻവാസ് കോൺടെക്സ്റ്റ് നേടുക]
+ C --> B
+ D --> E[സ്ക്രീൻ ശുദ്ധമാക്കുക]
+ E --> F[പശ്ചാത്ഭാഗം വരയ്ക്കൂ]
+ F --> G[ശത്രുനിര്മാണം വരയ്ക്കൂ]
+ G --> H[ഹീറോ കപ്പൽ വരയ്ക്കൂ]
+ H --> I[ദൃശ്യ_EFFECTS_ ബാധിക്കുക]
+ I --> J[ഫ്രേിം റെൻഡർ ചെയ്യുക]
+
+ subgraph "റെൻഡറിംഗ് പൈപ്പ്ലൈൻ"
+ K[ആസറ്റ് മാനേജ്മെന്റ്]
+ L[സീൻ സംയോജനം]
+ M[വരച്ചൽ ഓപ്പറേഷനുകൾ]
+ N[ഫ്രേിം ഔട്ട്പുട്ട്]
+ end
+
+ style A fill:#e1f5fe
+ style J fill:#e8f5e8
+ style I fill:#fff3e0
+```
+## ഇപ്പോൾ നിങ്ങളുടെ ഗെയിം നിർമ്മിക്കാൻ സമയം
+
+ഇപ്പോൾ എല്ലാം ചേർത്ത് നിങ്ങളുടെ സ്പേസ് ഗെയിം ദൃശ്യ അടിസ്ഥാനമൊക്കാനാണ് വരുന്നത്. നിങ്ങൾക്കുണ്ട് കാൻവാസ് അടിസ്ഥാനവും ചിത്രം ലോഡിംഗ് സാങ്കേതിക വിദ്യകളും ബോധമുള്ളത്, ഈ പ്രായോഗിക ഭാഗം പൂർണ്ണമായ ഒരു ഗെയിം സ്ക്ക്രീൻ നിർമ്മിക്കാനായി നയിക്കും, സ്പ്രൈറ്റ്സിന്റെ ശരിയായ സ്ഥിതിവിവരക്കൊപ്പം.
+
+### എന്തൊക്കെയാണ് നിർമ്മിക്കേണ്ടത്
+
+നിങ്ങൾ ഒരു വെബ് പേജ് കാൻവാസ് ഘടകത്തോടുകൂടി നിർമ്മിക്കും. അതിൽ കറുത്ത സ്ക്രീൻ (black screen) `1024*768` പ്രദർശിപ്പിക്കും. ഞങ്ങൾ നിങ്ങൾക്ക് രണ്ട് ചിത്രങ്ങൾ നൽകുന്നു:
+
+- ഹീറോ ഷിപ്പ്
+
+ 
+
+- 5*5 ഭീകരൻ
+
+ 
+
+### വികസനം തുടങ്ങാനുള്ള ശുപാർശ ചെയ്ത ഘട്ടങ്ങൾ
+
+`your-work` സബ് ഫോളഡറിലാണ് സ്റ്റാർട്ടർ ഫയലുകൾ നിങ്ങൾക്കു നൽകിയിരിക്കുന്നത്. നിങ്ങളുടെ പ്രോജക്റ്റിന്റെ ഘടനയിൽ അടങ്ങേണ്ടത്:
+
+```bash
+your-work/
+├── assets/
+│ ├── enemyShip.png
+│ └── player.png
+├── index.html
+├── app.js
+└── package.json
+```
+
+**നിങ്ങൾ യാതൊരു പദാർത്ഥത്തിലാണെന്ന് കാണാം:**
+- ഗെയിം സ്പ്രൈറ്റുകൾ `assets/` ഫോൾഡറിലുള്ളവ, എല്ലാം ക്രമസമയമായി സൂക്ഷിക്കപ്പെടുന്നു
+- മുഖ്യ HTML ഫയൽ കാൻവാസ് ഘടകം സജ്ജമാക്കുകയും എല്ലാം ഒരുക്കുകയും ചെയ്യുന്നു
+- ഒരു ജാവാസ്ക്രിപ്റ്റ് ഫയൽ നിങ്ങള് എത്രയും വേഗം നിങ്ങളുടെ ഗെയിം റൻഡറിംഗ് മാസ്റ്ററി എഴുതുവാന് ഉപയോഗിക്കുന്നതു
+- ഒരു package.json വെബ് ഡെവലപ്പ്മെന്റ് സർവർ സജ്ജീകരിക്കാൻ സഹായിക്കുന്നു, സ്ഥാനാന്തരമായി ടെസ്റ്റ് ചെയ്യുന്നതിന്
+
+വികസനം തുടങ്ങാൻ Visual Studio Code-ൽ ഈ ഫോൾഡർ തുറക്കുക. നിങ്ങൾക്ക് Visual Studio Code, NPM, Node.js എന്നിവ അടങ്ങിയ ഒരു പ്രാദേശിക ഡെവലപ്പ്മെന്റ് പരിസ്ഥിതി വേണ്ടതാണ്. നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ `npm` ഇല്ലെങ്കിൽ, [ഇവിടെ അതു ഇൻസ്റ്റാൾ ചെയ്യുന്നത്](https://www.npmjs.com/get-npm) കാണാം.
+
+`your-work` ഫോളഡറിലേക്ക് ജയംതുടങ്ങി സർവർ തുടങ്ങുക:
+
+```bash
+cd your-work
+npm start
+```
+
+**ഈ കമാൻഡ് ചെയ്യുന്നത്:**
+- `http://localhost:5000` ലൊകൽ സർവർ ആരംഭിക്കുന്നു, അതിലൂടെ നിങ്ങളുടെ ഗെയിം ടെസ്റ്റ് ചെയ്യാം
+- നിങ്ങളുടെ എല്ലാ ഫയലുകളും ശരിയായി സേവിക്കുന്നു, അതുകൊണ്ട് ബ്രൗസർ അവ ശരിയായ രീതിയിൽ ലോഡ് ചെയ്യും
+- ഫയലുകളിൽ മാറ്റം സംഭവിക്കുന്നതിന് നിരീക്ഷിച്ച് നിങ്ങൾക്ക് മൃദുവായ വികസനം സാദ്ധ്യമാക്കുന്നു
+- പ്രൊഫഷണൽ ഡെവലപ്പ്മെന്റ് എൻവയോൻമെന്റ് നൽകുന്നു, എല്ലാം പരിശോധിക്കുന്നതിന്
+
+> 💡 **കുറിപ്പ്**: നിങ്ങളുടെ ബ്രൗസർ പ്രാഥമികമായി ശൂന്യമുള്ള ഒരു പേജ് കാണിക്കും – ഇത് പ്രതീക്ഷിച്ച കാര്യമാണ്! നിങ്ങൾ കോഡ് ചേർക്കുമ്പോൾ ബ്രൗസർ റിഫ്രഷ് ചെയ്ത് മാറ്റങ്ങൾ കാണുക. ഈ പിരിവ്-പിരിവായി വികസന ദൃശ്യം NASA-യുടെ അപ്പോളോ ഗൈഡൻസ് കമ്പ്യൂട്ടർ നിർമ്മാണത്തിലും ഏൽപ്പിച്ചതാണ് – ഓരോ ഘടകവും പരീക്ഷിച്ച്, ശേഷം വലിയ സംവിധാനത്തിലെത്തിച്ചിരിക്കുന്നു.
+
+### കോഡ് കൂട്ടിച്ചേർക്കുക
+
+താഴെത്തന്നെ കൊടുത്ത താൽപ്പര്യവും പ്രവർത്തനവും പൂർത്തിയാക്കാൻ `your-work/app.js`-ൽ ആവശ്യമായ കോഡ് ചേർക്കുക:
+
+1. **കറുത്ത പശ്ചാത്തലവും ഉള്ള കാൻവാസ് വരയ്ക്കുക**
+ > 💡 **ഇങ്ങനെ ചെയ്യാം**: `/app.js` എന്ന ഫയലിൽ TODO കാണുകയും ctx.fillStyle-നെ കറുത്ത് സജ്ജീകരിക്കുകയും ctx.fillRect() ഉപയോഗിച്ച് കാൻവാസിന്റെ വലിപ്പത്തിൽ (0,0) മുതൽ നിറക്കുകയും ചെയ്യുക. എളുപ്പം!
+
+2. **ഗെയിം ടെക്സ്ചറുകൾ ലോഡ് ചെയ്യുക**
+ > 💡 **ഇങ്ങനെ ചെയ്യാം**: await loadAsset() ഉപയോഗിച്ച് പ്ലേയറും എനമിയും ചിത്രങ്ങൾ ലോഡ് ചെയ്യുക. പിന്നീട് ഉപയോഗിക്കാൻ വേരിയബിളുകളിൽ സൂക്ഷിക്കുക. ഇവ വരയ്ക്കുന്നത് വരെ ചിത്രങ്ങൾ കാണാനാകില്ല!
+
+3. **ഹീറോ ഷിപ്പ് സെന്റർ ബോട്ടത്തിൽ വരയ്ക്കുക**
+ > 💡 **ഇങ്ങനെ ചെയ്യാം**: ctx.drawImage() ഉപയോഗിച്ച് ഹീറോ സ്ഥാനമിടുക. x-കോഓർഡിനേറ്റ് വേണ്ടി `canvas.width / 2 - 45` ഉപയോഗിച്ച് സെൻറർ ചെയ്യുക, y-കോഓർഡിനേറ്റ് വേണ്ടി `canvas.height - canvas.height / 4` ഉപയോഗിച്ച് താഴെ ഉള്ള ഭാഗത്ത് ഇടുക.
+
+4. **5×5 ഭീകരനുകളുടെ രൂപമാറ്റം വരയ്ക്കുക**
+ > 💡 **ഇങ്ങനെ ചെയ്യാം**: `createEnemies` ഫംഗ്ഷനിൽ നേസ്റ്റ് ലൂപ്പ് സജ്ജമാക്കുക. സ്പേസിംഗ്, സ്ഥിതിവിവരങ്ങൾക്കായി ഗണിതം ചെയ്യേണ്ടതുണ്ട്, പക്ഷേ ഞാൻ നിങ്ങളെ കൃത്യമായി നിർദ്ദേശിക്കും!
+
+ആദ്യമായി ശരിയായ ഭീകരൻ നിർമാണത്തിനായി സ്ഥിര ഊർജിതങ്ങളൊരുക്കുക:
+
+```javascript
+const ENEMY_TOTAL = 5;
+const ENEMY_SPACING = 98;
+const FORMATION_WIDTH = ENEMY_TOTAL * ENEMY_SPACING;
+const START_X = (canvas.width - FORMATION_WIDTH) / 2;
+const STOP_X = START_X + FORMATION_WIDTH;
+```
+
+**ഈ സ്ഥിര ഊർജിതങ്ങൾ എന്ത് ചെയ്യുന്നു എന്ന് കാണാം:**
+- ഓരോ വരിയിലും ഒപ്പം 5 ഭീകരന്മാരും (നല്ലൊരു 5×5 ഗ്രിഡ്) നിശ്ചയിക്കുന്നു
+- ഭീകരന്മാരും ഇടയിൽ എത്ര ഇടവഴി ഇരിക്കണം എന്ന് നിർണ്ണയിക്കുന്നു
+- ആകുടവും വലിപ്പവും കണക്കാക്കുന്നു
+- രൂപമാറ്റം എവിടെയാണ് തുടങ്ങുകയും അവസാനിക്കുന്നതും ആദ്യം സജ്ജമാക്കുന്നു, ഇതിലൂടെ രൂപം സെൻററിൽ കാണിക്കും
+
+```mermaid
+flowchart LR
+ A["കാൻവാസ് വീതം: 1024px"] --> B["ഫോർമേഷൻ വീതം: 490px"]
+ B --> C["സ്റ്റാർട്ട് X: 267px"]
+ C --> D["ശത്രു ഇടവലയം: 98px"]
+
+ subgraph "5x5 ശത്രു ഘടന"
+ E["ലൈൻ 1: Y=0"]
+ F["ലൈൻ 2: Y=50"]
+ G["ലൈൻ 3: Y=100"]
+ H["ലൈൻ 4: Y=150"]
+ I["ലൈൻ 5: Y=200"]
+ end
+
+ subgraph "കോളം ഇടവലയം"
+ J["കോൾ 1: X=267"]
+ K["കോൾ 2: X=365"]
+ L["കോൾ 3: X=463"]
+ M["കോൾ 4: X=561"]
+ N["കോൾ 5: X=659"]
+ end
+
+ style A fill:#e1f5fe
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+```
+പിന്നീട് ഭീകരൻ രൂപമാറ്റത്തിനായി നേസ്റ്റ്ലൂപ്പുകൾ സൃഷ്ടിക്കുക:
+
+```javascript
+for (let x = START_X; x < STOP_X; x += ENEMY_SPACING) {
+ for (let y = 0; y < 50 * 5; y += 50) {
+ ctx.drawImage(enemyImg, x, y);
+ }
+}
+```
+
+**ഈ നേസ്റ്റ് ലൂപ്പ് ചെയ്യുന്നത്:**
+- പുറം ലൂപ്പ് രൂപമാറ്റം ഇടത് മുതൽ വലത്തേക്ക് നീങ്ങുന്നു
+- ഉള്ളിലെ ലൂപ്പ് മുകളിൽ നിന്ന് താഴേക്ക് വരി സൃഷ്ടിക്കുന്നു
+- കണക്കാക്കിയ x,y കോ-ഓർഡിനേറ്റുകളിൽ ഓരോ ഭീകരൻ സ്പ്രൈറ്റ് വരയ്ക്കുന്നു
+- എല്ലാം സമമായി വ്യവസ്ഥാപിതമായി കാഴ്ചമുണ്ട്
+
+### 🔄 **അധ്യാപന പരിശോധന**
+**ഗെയിം റൻഡറിംഗ് മെന്നും**: സമ്പൂർണ റൻഡറിംഗ് സിസ്റ്റം മനസ്സിലായെന്ന് ഉറപ്പാക്കുക:
+- ✅ അസിങ്ക്രോൺ ചിത്ര ലോഡിങ് ഗെയിം സ്റ്റാർട്ടപ്പിൽ UI തടസ്സം ഉണ്ടാകാതിരിക്കാൻ എങ്ങനെ സഹായിക്കുന്നു?
+- ✅ ഭീകരൻ രൂപമാറ്റം സ്ഥിതിവിവരങ്ങൾ സ്ഥിര ഊർജിതങ്ങൾ ഉപയോഗിച്ച് ഗണിതം നടത്തുന്നതിന് പ്രത്യേകിച്ച് എന്തുകൊണ്ട്?
+- ✅ വരയ്ക്കലുകൾക്കായുള്ള 2D റൻഡറിംഗ് കോൺടെക്സ്റ്റിന്റെ പങ്ക് എന്താണ്?
+- ✅ നേസ്റ്റ് ലൂപ്പുകൾ സ്പ്രൈറ്റ് രൂപമാറ്റങ്ങൾ എങ്ങനെ ക്രമീകരിക്കുന്നു?
+
+**പ്രവർത്തന പരിഗണനകൾ**: നിങ്ങളുടെ ഗെയിം ഇതിന്റെ പ്രകടനം കാണിക്കുന്നു:
+- **ക്ഷമതയുള്ള അസറ്റ് ലോഡിങ്**: പ്രോമിസ് അടിസ്ഥാനമാക്കിയ ചിത്രം മാനേജ്മെന്റ്
+- **ക്രമീകരിച്ച റൻഡറിംഗ്**: ഘടക വകഭേദത്തിലുള്ള വരയ്ക്കൽ പ്രവർത്തനങ്ങൾ
+- **ഗണിതബദ്ധമായ സ്ഥിതിവിവരം**: കണക്കാക്കിയ സ്പ്രൈറ്റ് സ്ഥാനമിടൽ
+- **പിശക് കൈകാര്യം ചെയ്തൽ**: ശാന്തമായ പരാജയ മാനേജ്മെന്റ്
+
+**ദൃശ്യ പ്രോഗ്രാമിംഗ് ആശയങ്ങൾ**: നിങ്ങൾ പഠിച്ചതാണ്:
+- **കോഓർഡിനേറ്റ് സിസ്റ്റങ്ങൾ**: സ്വഭാവത്തെ സ്ക്രീൻ നിലകളിലേക്ക് വിവർത്തനം ചെയ്യുക
+- **സ്പ്രൈറ്റ് മാനേജ്മെന്റ്**: ഗെയിം ഗ്രാഫിക്സ് ലോഡ് ചെയ്യുകയും പ്രദർശിപ്പിക്കുകയും ചെയ്യുക
+- **ഫോർമേഷൻ ആൽഗോറിത്തങ്ങൾ**: സജ്ജീകരിച്ച ലേഔട്ടുകൾക്കുള്ള ഗണിത മാതൃകകൾ
+- **അസിങ്ക്രൺ ഓപ്പറേഷൻസ്**: മൃദുവായ ഉപയോക്തൃ അനുഭവത്തിനുള്ള ആധുനിക ജാവാസ്ക്രിപ്റ്റ്
+
+## ഫലം
+
+പരിപൂർണ്ണമായ ഫലം വേണ്ട വിധത്തിൽ ഇങ്ങനെ കാണുന്നതാണ്:
+
+
+
+## പരിഹാരം
+
+ദയവായി ആദ്യം നിങ്ങൾ തന്നെ ഇതു പരിഹരിക്കാന कोशिश ചെയ്യുക; പക്ഷേ തടസപ്പെട്ടാൽ, ഒരു [പരിഹാരം](../../../../6-space-game/2-drawing-to-canvas/solution/app.js) നോക്കുക
+
+---
+
+## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀
+
+നിങ്ങളുടെ സ്പേസ് ഗെയിം ക്യാന്വാസിൽ Canvas API സാങ്കേതികവിദ്യ ഉപയോഗിച്ച് ദൃശ്യ പ്രഭാവങ്ങളും ഇന്ററാക്ടീവ് ഘടകങ്ങളും ചേർക്കാൻ ഏജന്റ് മോഡ് ഉപയോഗിക്കുക.
+
+**വിവരണം:** Canvas API ഉപയോഗിച്ച് ദൃശ്യങ്ങളെയും ഇന്ററാക്ഷനുകളെയും കൂട്ടിച്ചേർക്കുന്നൊരു സ്പേസ് ഗെയിം ക്യാന്വാസിനെ (canvas) മെച്ചപ്പെടുത്തുക.
+
+**പ്രോമ്പ്റ്റ്:** `enhanced-canvas.html` എന്ന പുതിയ ഫയൽ ഉണ്ടാക്കുക. അതിൽ പൃഥ്വി നായകളോട് പ്ചഞ്ഞു പുലഞ്ഞ് നക്ഷത്രങ്ങൾ അനിമേറ്റ് ചെയ്യുകയും, ഹീറോ കപ്പലിന്റെ ഹീൽത്ത് ബാർ ദൃശ്യമായി പൾസ് ചെയ്യുകയും, ശത്രു കപ്പലുകൾ മന്ദഗതിയിൽ താഴേയ്ക്ക് നീങ്ങുന്നതായി കാണിക്കുകയും ചെയ്യണം. പൂർവ്വനിർണ്ണയത്തോടൊപ്പം പ്ലാജർചെയ്യുന്നതും, കളിക്കുന്ന നക്ഷത്രങ്ങളായുള്ള അനിമേഷൻ പാക്സിലെ റാൻഡം സ്ഥാനവും ഓപാസിറ്റി ഉപയോഗിച്ച് കോഡിംഗ് ചെയ്തു, ഹീൽത്ത് ലെവല് അടിസ്ഥാനമാക്കി നിറം മാറ്റുന്ന ഹീൽത്ത് ബാർ ഉൾപ്പെടുത്തുക (ആലോചനം: ഹരിതം > മഞ്ഞ > ചുവപ്പ്), വിവിധ വേഗതകളിൽ ഷിപ്മാർ ആണ് താഴേക്ക് എറിയപ്പെടുന്നത് എന്ന അനിമേഷൻ വേണമെന്ന് ജാവാസ്ക്രിപ്റ്റ് കോഡ് നൽകുക.
+
+[എജന്റ് മോഡ്](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) സംബന്ധിച്ച് കൂടുതൽ അറിയുക.
+
+## 🚀 ചലഞ്ച്
+
+നിങ്ങൾ 2D-ഫോക്കസ് ചെയ്ത Canvas API ഉപയോഗിച്ച് വരയ്ക്കുന്നത് പഠിച്ചു; ഇപ്പോൾ [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API) നോക്കി ഒരു 3D ഒბიექტ് വരയ്ക്കാൻ ശ്രമിക്കുക.
+
+## പോസ്റ്റ്-ലെക്ചർ ക്വിസ്
+
+[പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/32)
+
+## അവലോക്കനവും സ്വയം പഠനവും
+
+Canvas API സംബന്ധിച്ച് കൂടുതൽ അറിയാൻ [ഇത് വായിക്കുക](https://developer.mozilla.org/docs/Web/API/Canvas_API).
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിനുള്ളിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയുന്നത്**
+- [ ] ബ്രൌസർ കോൺസോൾ തുറക്കുക, `document.createElement('canvas')` ഉപയോഗിച്ച് ഒരു ക്യാന്വാസ് എലമെന്റ് സൃഷ്ടിക്കുക
+- [ ] ക്യാന്വാസ് കോൺടെക്സ്റ്റിൽ `fillRect()` ഉപയോഗിച്ച് ഒരു ചതുരം വരയ്ക്കാൻ ശ്രമിക്കുക
+- [ ] വ്യത്യസ്ത നിറങ്ങളുമായി പരീക്ഷണം നടത്തുക `fillStyle` പ്രോപ്പർട്ടി ഉപയോഗിച്ച്
+- [ ] `arc()` മെത്തഡ് ഉപയോഗിച്ച് ഒരു ലളിതമായ വൃത്തം വരയ്ക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നിങ്ങൾ നേടാനാകുന്നതത്**
+- [ ] പോസ്റ്റ്-പാഠം ക്വിസ് പൂർത്തിയാക്കി ക്യാന്വാസ് അടിസ്ഥാനങ്ങൾ മനസിലാക്കുക
+- [ ] നിരവധി ആകൃതികളും നിറങ്ങളുമായി ക്യാന്വാസ് വരച്ചിടൽ അപ്ലിക്കേഷൻ സൃഷ്ടിക്കുക
+- [ ] ഗെയിമിനായി ഇമേജ് ലോഡിംഗ് ആന്റ് സ്പ്രൈറ്റ് റെൻഡറിംഗ് നടപ്പിലാക്കുക
+- [ ] സിമ്പിൾ അനിമേഷൻ നിർമ്മിക്കുക — ക്യാന്വാസ് വ്യവസായങ്ങളിലൂടെ വസ്തുക്കൾ നീങ്ങുന്നു
+- [ ] സ്കെയ്ലിംഗ്, റൊട്ടേഷൻ, ട്രാൻസ്ലേഷൻ പോലുള്ള ക്യാന്വാസ് രൂപാന്തരണങ്ങൾ അഭ്യാസം ചെയ്യുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചകൊണ്ടുള്ള ക്യാന്വാസ് യാത്ര**
+- [ ] ഇളകിയ ഗ്രാഫിക്സും സ്പ്രൈറ്റ് അനിമേഷനുമുള്ള സ്പേസ് ഗെയിം നിർമ്മിക്കുക
+- [ ] ഗ്രേഡിയന്റുകൾ, പാറ്റേണുകൾ, കോമ്പോസിറ്റിംഗ് പോലുള്ള ആധുനിക ക്യാന്വാസ് സങ്കേതങ്ങൾ മികവുറ്റവനാകുക
+- [ ] ഡാറ്റ പ്രദർശനത്തിന് വേഗതയുള്ള ഇന്ററാക്ടീവ് ചിത്രീകരണങ്ങൾ സൃഷ്ടിക്കുക
+- [ ] സ്മൂത് പ്രകടനത്തിന് ക്യാന്വാസ് ഒപ്റ്റിമൈസേഷൻ സാങ്കേതികവിദ്യകൾ പഠിക്കുക
+- [ ] വിവിധ ഉപകരണങ്ങളുള്ള ഒരു വരക്ക് അല്ലെങ്കിൽ പെയിന്റിങ് അപ്ലിക്കേഷൻ നിർമ്മിക്കുക
+- [ ] ക്രിയേറ്റീവ് കോഡിംഗ് പാറ്റേണുകളും ജനറേറ്റീവ് ആർട്ടും ക്യാന്വാസിൽ പരീക്ഷിക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസംകൊണ്ടുള്ള ഗ്രാഫിക്സ് വൈദഗ്ധ്യം**
+- [ ] ക്യാന്വാസ് 2D, WebGL ഉപയോഗിച്ച് സങ്കീർണ്ണ ദൃശ്യ അപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുക
+- [ ] ഗ്രാഫിക്സ് പ്രോഗ്രാമിംഗിന്റെ ആശയങ്ങളും ഷേഡർ അടിസ്ഥാനങ്ങളും പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഗ്രാഫിക്സ് ലൈബ്രറികളിലും ദൃശ്യീകരണ ഉപകരണങ്ങളിലും സംഭാവന ചെയ്യുക
+- [ ] ഗ്രാഫിക്സ് കർശനമായ അപ്ലിക്കേഷനുകളുടെ പ്രകടനം മെച്ചപ്പെടുത്തുക
+- [ ] ക്യാന്വാസിന്റെ പ്രോഗ്രാമിംഗ്, കമ്പ്യൂട്ടർ ഗ്രാഫിക്സ് വിഷയങ്ങളിൽ വിദ്യാഭ്യാസ ഉള്ളടക്കം സൃഷ്ടിക്കുക
+- [ ] മറ്റുള്ളവർക്കു സഹായമുള്ള ഗ്രാഫിക്സ് പ്രോഗ്രാമിംഗ് വിദഗ്ധനാകുക, ദൃശ്യ അനുഭവങ്ങൾ സൃഷ്ടിക്കാൻ
+
+## 🎯 നിങ്ങളുടെ ക്യാന്വാസ് ഗ്രാഫിക്സ് മാസ്ടറിയ്റെ ടൈംലൈൻ
+
+```mermaid
+timeline
+ title Canvas API പഠന പുരോഗതി
+
+ section ക്യാൻവാസ് അടിസ്ഥാനങ്ങൾ (15 മിനിറ്റുകൾ)
+ അടിസ്ഥാന പ്രവർത്തനങ്ങൾ: എലിമന്റ് റഫറൻസ്
+ : 2D കോൺടെക്സ്റ് ആക്സസ്
+ : കോഓർഡിനേറ്റ് സിസ്റ്റം
+ : ലളിതമായ ആകൃതി വരയ്ക്കൽ
+
+ section വരച്ചെടുക്കൽ സാങ്കേതിക നിപുണതകൾ (20 മിനിറ്റുകൾ)
+ ഗ്രാഫിക്സ് പ്രിമിറ്റീവുകൾ: ചതുരങ്ങളായും വൃത്തങ്ങളായും
+ : നിറങ്ങളെയും രീതികളെയും
+ : ടെക്സ്റ് റൻഡറിംഗ്
+ : പാത്ത് പ്രവർത്തനങ്ങൾ
+
+ section ചിത്രം കൈകാര്യം ചെയ്യൽ (25 മിനിറ്റുകൾ)
+ അസറ്റ് മാനേജ്മെന്റ്: ചിത്രം ഒബ്ജക്റ്റ് സൃഷ്ടിക്കൽ
+ : അസിങ്ക് ലോഡിംഗ് പതിപ്പുകൾ
+ : പിശക് കൈകാര്യം ചെയ്യൽ
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+
+ section ഗെയിം ഗ്രാഫിക്സ് (30 മിനിറ്റുകൾ)
+ സ്പ്രൈറ്റ് റൻഡറിംഗ്: സ്ഥിതിഗതികൾ ആൾഗോരിതങ്ങൾ
+ : ഘടന കണക്കുകൂട്ടൽ
+ : സീൻ ഘടന
+ : ഫ്രെയിം റൻഡറിംഗ്
+
+ section പ്രഗത്ഭ സാങ്കേതികങ്ങൾ (40 മിനിറ്റുകൾ)
+ ദൃശ്യ പ്രഭാവങ്ങൾ: പരിവർത്തനങ്ങൾ
+ : അനിമേഷനുകൾ
+ : ലെയറിംഗ്
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+
+ section പ്രകടനം (35 മിനിറ്റുകൾ)
+ മെച്ചപ്പെടുത്തൽ: കാര്യക്ഷമമായ വരച്ചെടുക്കൽ
+ : മെമ്മറി മാനേജ്മെന്റ്
+ : ഫ്രെയിം നിര നിയന്ത്രണം
+ : അസറ്റ് കാഷിംഗ്
+
+ section പ്രൊഫഷണൽ നിപുണതകൾ (1 ആഴ്ച)
+ പ്രൊഡക്ഷൻ ഗ്രാഫിക്സ്: WebGL ഇന്റഗ്രേഷൻ
+ : ക്യാൻവാസ് ലൈബ്രറികൾ
+ : ഗെയിം എഞ്ചിനുകൾ
+ : ക്രോസ്-പ്ലാറ്റ്ഫോം പരിഗണനകൾ
+
+ section പ്രഗത്ഭ ഗ്രാഫിക്സ് (1 മാസം)
+ പ്രത്യേക അപേക്ഷകൾ: ഡാറ്റാ വിസ്വലൈസേഷൻ
+ : ഇന്ററാക്ടീവ് ആർട്ട്
+ : റിയൽ-ടൈം പ്രഭാവങ്ങൾ
+ : 3D ഗ്രാഫിക്സ്
+```
+### 🛠️ നിങ്ങളുടെ ക്യാന്വാസ് ഗ്രാഫിക്സ് ടൂള്കിറ്റ് സംഗ്രഹം
+
+ഈ പാഠം പൂർത്തിയാക്കിയതോടെ, നിങ്ങൾക്ക് ഇപ്പോൾ ലഭ്യമായിരിക്കുന്നു:
+- **ക്യാന്വാസ് API നൈപുണ്യം**: 2D ഗ്രാഫിക്സ് പ്രോഗ്രാമിംഗിൽ സമ്പൂർണ്ണ മനസ്സിലാക്കൽ
+- **കോഓർഡിനേറ്റ് ഗണിതം**: തുരുത്തവും ലേഔട്ട് ആൽഗോറിത്തവും
+- **ആസറ്റ് മാനേജ്മെന്റ്**: പ്രൊഫഷണൽ ഇമേജ് ലോഡിംഗും പിശക് കൈകാര്യം ചെയ്യലും
+- **റെൻഡറിംഗ് പൈപ്പ്ലൈൻ**: ദൃശ്യ ദൃശ്യഘടനയ്ക്ക് ഘടനാപരമായ സമീപനം
+- **ഗെയിം ഗ്രാഫിക്സ്**: സ്പ്രൈറ്റ് സ്ഥാനം നിശ്ചയിക്കൽ, ഫോർമേഷൻ കണക്കുകൾ
+- **അസിങ്ക്രൺ പ്രോഗ്രാമിംഗ്**: മൃദുവായ പ്രകടനത്തിനുള്ള ആധുനിക ജാവാസ്ക്രിപ്റ്റ് മാതൃകകൾ
+- **വിജ്വൽ പ്രോഗ്രാമിംഗ്**: ഗണിത ആശയങ്ങളെ സ്ക്രീൻ ഗ്രാഫിക്സിലേക്ക് പരിഭാഷപ്പെടുത്തൽ
+
+**വാസ്തവ ലോക ഉപയോഗങ്ങൾ**: നിങ്ങളുടെ ക്യാന്വാസ് കഴിവുകൾ നേരിട്ടു പ്രയോജനപ്പെടുന്നു:
+- **ഡാറ്റാ ദൃശ്യമാക്കൽ**: ചാർട്ടുകൾ, ഗ്രാഫുകൾ, ഇന്ററാക്ടീവ് ഡാഷ്ബോർഡുകൾ
+- **ഗെയിം വികസനം**: 2D ഗെയിമുകൾ, സിമുലേഷനുകൾ, ഇന്ററാക്ടീവ് അനുഭവങ്ങൾ
+- **ഡിജിറ്റൽ ആർട്ട്**: ക്രിയേറ്റീവ് കോഡിംഗ്, ജനറേറ്റീവ് ആർട്ട് പ്രൊജക്റ്റുകൾ
+- **UI/UX ഡിസൈൻ**: കസ്റ്റം ഗ്രാഫിക്സ്, ഇന്ററാക്ടീവ് ഘടകങ്ങൾ
+- **വിദ്യാഭ്യാസ സോഫ്റ്റ്വെയർ**: ദൃശ്യ പഠന ഉപകരണങ്ങളും സിമുലേഷനുകളും
+- **വെബ് അപ്ലിക്കേഷനുകൾ**: ഡൈനാമിക് ഗ്രാഫിക്സ്, റിയൽ ടൈം ദൃശ്യീകരണങ്ങൾ
+
+**പ്രൊഫഷണൽ കഴിവുകൾ നിങ്ങൾ നേടിയത്**: ഇപ്പോൾ നിങ്ങൾക്ക് കഴിയും:
+- **ക്യാന്വാസ് ഗ്രാഫിക്സ് പരിഹാരങ്ങൾ** ലൈബ്രറികൾ ഇല്ലാതെ നിർമ്മിക്കുക
+- **റെൻഡറിങ് പ്രകടനം** മെച്ചപ്പെട്ടു അതിനായി ഓപ്റ്റിമൈസ് ചെയ്യുക
+- **കമ്പ്ലക്സ് ദൃശ്യ പ്രശ്നങ്ങൾ** ബ്രൗസർ ഡെവലപ്പർ ടൂളുകൾ ഉപയോഗിച്ച് ഡിബഗ് ചെയ്യുക
+- **സ്കെന്ന്, ഗ്രാഫിക്സ് സിസ്റ്റങ്ങൾ** ഗണിത സിദ്ധാന്തം ഉപയോഗിച്ച് ഡിസൈൻ ചെയ്യുക
+- **ആധുനിക വെബ് അപ്ലിക്കേഷൻ ഫ്രെയിംവര്ക്കുകൾ** ക്യാന്വാസ് ഗ്രാഫിക്സിൽ ഇന്റഗ്രേറ്റ് ചെയ്യുക
+
+**നീ പരിചയപ്പെട്ട ക്യാന്വാസ് API മെത്തഡുകൾ**:
+- **എലമെന്റ് മാനേജ്മെന്റ്**: getElementById, getContext
+- **ഡ്രോയിംഗ് ഓപ്പറേഷനുകൾ**: fillRect, drawImage, fillStyle
+- **ആസറ്റ് ലോഡിംഗ്**: ഇമേജ് ഒബ്ജക്ടുകൾ, പ്രോമിസ് മാതൃകകൾ
+- **ഗണിതമാതൃകിച്ച സ്ഥിതിയിടം**: കോഓർഡിനേറ്റ് കണക്കുകൾ, ഫോർമേഷൻ ആൽഗോറിതങ്ങൾ
+
+**അടുത്ത നില**: ഇനി നിങ്ങൾക്ക് അനിമേഷൻ, ഉപയോക്തൃ ഇടപെടൽ, ഘർഷണ പരിശോധന എന്നിവ ചേർക്കാനും 3D ഗ്രാഫിക്സിനായി WebGL പഠിക്കുന്നതും ഉണ്ട്!
+
+🌟 **സാധനം നേടിയത്**: അടിസ്ഥാന ക്യാന്വാസ് API സാങ്കേതികവിദ്യകൾ ഉപയോഗിച്ച് സമ്പൂർണ്ണ ഗെയിം റെൻഡറിങ് സിസ്റ്റം നിങ്ങൾ നിർമ്മിച്ചു!
+
+## അസൈൻമെന്റ്
+
+[ക്യാന്വാസ് API ഉപയോഗിച്ച് കളിക്കൂ](assignment.md)
+
+---
+
+
+**പരിധിക്കുറിപ്പ്**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന എഐ പരിഭാഷാ സേവനം ഉപയോഗിച്ച് വിവര്ത്തനം ചെയ്തതാണ്. ശരിതിന്മകള്ക്കായി ഞങ്ങള് ശ്രമിച്ചിട്ടുണ്ടെങ്കിലും, യാന്ത്രിക പരിഭാഷകള് തെറ്റുകളോ ശരിതിന്മകളോ ഉണ്ടായിരിക്കാനിടയുള്ളതായി ദയവായി മനസ്സിലാക്കുക. യഥാര്ത്ഥ ഭാഷയില് ഉള്ള മൂല രേഖ അധികാരമുള്ള ഉറവിടമായി കരുതപ്പെടണം. അത്യാവശ്യമുള്ള വിവരങ്ങള്ക്കായി പ്രൊഫഷണല് മനുഷ്യ പരിഭാഷ നിര്ദ്ദേശിക്കുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ചതിനാല് ഉണ്ടാകാവുന്ന തെറ്റിദ്ധാരണകളോ വ്യാഖ്യാനസംബന്ധമായ ബുദ്ധിമുട്ടുകളോയ്ക്ക് ഞങ്ങള് ഉത്തരവാദിത്വം വഹിക്കരുത്.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/2-drawing-to-canvas/assignment.md b/translations/ml/6-space-game/2-drawing-to-canvas/assignment.md
new file mode 100644
index 000000000..d4422346d
--- /dev/null
+++ b/translations/ml/6-space-game/2-drawing-to-canvas/assignment.md
@@ -0,0 +1,83 @@
+
+# അസൈൻമെന്റ്: കാൻവാസ് API അന്വേഷിക്കുക
+
+## പഠന ലക്ഷ്യങ്ങൾ
+
+ഈ അസൈൻമെന്റ് പൂർത്തിയാക്കുന്നതിനാൽ, നിങ്ങൾ കാൻവാസ് API അടിസ്ഥാനങ്ങൾ മനസ്സിലാക്കി, ജാവാസ്ക്രിപ്റ്റും HTML5 കാൻവാസും ഉപയോഗിച്ച് ദൃശ്യ ഘടകങ്ങൾ സൃഷ്ടിക്കുന്നതിന് സൃഷ്ടിപരമായ പ്രശ്നപരിഹാരങ്ങളെ പ്രയോഗിക്കുന്നു എന്ന് തെളിയിക്കും.
+
+## നിർദ്ദേശങ്ങൾ
+
+കാൻവാസ് API യുമായി ബന്ധപ്പെട്ട ഒരു വിഷയത്തെ തിരഞ്ഞെടുക്കുക, അതിനൊരു ആകർഷകമായ ദൃശ്യ പ്രോജക്റ്റ് സൃഷ്ടിക്കുക. നിങ്ങൾ പഠിച്ച വരയുടെ ശേഷീയതകൾ പരീക്ഷിക്കാൻ ഈ അസൈൻമെന്റ് പ്രോത്സാഹിപ്പിക്കുന്നു, അതും നിങ്ങൾക്ക് ഐശ്വര്യമായ തനതായ ഒന്നിടുക.
+
+### നിങ്ങൾക്കായി പ്രോജക്റ്റ് ആശയങ്ങൾ
+
+**ജ്യംട്രിക പാറ്റേണുകൾ:**
+- **സൃഷ്ടിക്കുക** അകസ്മാത് സ്ഥാനങ്ങളിൽ ഉള്ള അനിമേറ്റഡ് മിങിളിക്കുന്ന നക്ഷത്രങ്ങളുടെ ഒരു ഗാലക്സി
+- **ഡിസൈൻ ചെയ്യുക** ആവർത്തിക്കുന്ന ജ്യംട്രിക ആകൃതികൾ ഉപയോഗിച്ച് രസകരമായ ടെക്ച്ചർ
+- **നിർമിക്കുക** ചുറ്റിപ്പറക്കുന്ന വൈവിധ്യേ നിറമുള്ള പാറ്റേണുകൾ കൊണ്ടുള്ള കാലൈഡോസ്കോപ്പ് ഇഫക്ട്
+
+**ഇന്ററാക്ടീവ് ഘടകങ്ങൾ:**
+- **വികസിപ്പിക്കുക** മൗസ് ചലനങ്ങളോടു പ്രതികരിക്കുന്ന ഒരു ഡ്രോയിംഗ് ഉപകരണം
+- **നിർവഹിക്കുക** ക്ലിക്കുചെയ്താൽ പ رنگം മാറ്റുന്ന ആകൃതികൾ
+- **ഡിസൈൻ ചെയ്യുക** ചലിക്കുന്ന ഘടകങ്ങളോടുള്ള ലളിതമായ ആനിമേഷൻ ലൂപ്പ്
+
+**ഗെയ്മുമായി ബന്ധപ്പെട്ട ഗ്രാഫിക്സ്:**
+- **നിർമ്മിക്കുക** ഒരു സ്പേസ് ഗെയിമിനുള്ള സ്ക്രോളിംഗ് ബാക്ക്ഗ്രൗണ്ട്
+- **നിർമിക്കുക** പൊട്ടിച്ചെറിവ് അല്ലെങ്കിൽ മാജിക് മંત્રങ്ങൾ പോലുള്ള പാർട്ടിക്കിൾ ഇഫക്ടുകൾ
+- **സൃഷ്ടിക്കുക** നിരവധി ഫ്രെയിമുകളുള്ള അനിമേറ്റഡ് സ്പ്രൈറ്റുകൾ
+
+### വികസന മാർഗ്ഗനിർദ്ദേശങ്ങൾ
+
+**ഗവേഷണം, പ്രചോദനം:**
+- **തുടരുക** CodePen ലെ സൃഷ്ടിപരമായ കാൻവാസ് ഉദാഹരണങ്ങൾ (പ്രചോദനത്തിന്, പകർത്തുന്നതിനല്ല)
+- **അധ്യയനം ചെയ്യുക** [Canvas API ഡോക്യുമെന്റേഷൻ](https://developer.mozilla.org/docs/Web/API/Canvas_API) അധികമാർഗ്ഗങ്ങൾക്കായി
+- **പരിശോക്തികൾ നടത്തുക** വ്യത്യസ്ത വരkụ ചടകളും, നിറങ്ങളുടേയും, ആനിമേഷനുകളുടെ
+
+**സാങ്കേതിക ആവശ്യകതകൾ:**
+- **ഉപയോഗിക്കുക** ശരിയായ കാൻവാസ് ക്രമീകരണം `getContext('2d')` ഉപയോഗിച്ച്
+- **ഉൾപ്പെടുത്തുക** നിങ്ങളുടെ സമീപനം വിശദീകരിക്കുന്ന അഭ്യാസコメントുകൾ
+- **പരിശോധിക്കുക** താങ്കളുടെ കോഡ് പിശകുകൾ ഇല്ലാതെ പ്രവർത്തിക്കുന്നതിന്റെ വിശ്വാസ്യതയ്ക്ക്
+- **പ്രയോഗിക്കുക** ആധുനിക ജാവാസ്ക്രിപ്റ്റ് സിന്താക്സ് (const/let, arrow functions)
+
+**സൃഷ്ടിപരമായ പ്രഭാഷണം:**
+- **കേന്ദ്രീകരിക്കുക** ഒരു കാൻവാസ് API സവിശേഷതയിൽ, അതിനെ ആഴത്തിൽ പരിശോധിക്കുക
+- **ചേര്ക്കുക** സൃഷ്ടിപരമായ നിങ്ങളുടെ ട്വിസ്റ്റ് പ്രോജക്റ്റ് വ്യക്തിഗതമാക്കാൻ
+- **ചിന്തിക്കുക** നിങ്ങളുടെ സൃഷ്ടി ഒരു വലിയ ആപ്ലിക്കേഷനോ ഗെയിമിലോ അറിയാനുള്ള സാധ്യത
+
+### സമർപ്പണ മാർഗ്ഗനിർദ്ദേശങ്ങൾ
+
+നിങ്ങളുടെ പൂർത്തിയായ പ്രോജക്റ്റ് ഒരു മാത്രം HTML ഫയലായി സമർപ്പിക്കാമോ, CSSയും JavaScriptയും ഉൾപ്പെടുത്തിയതാണ് അല്ലെങ്കിൽ പ്രത്യേക ഫയൽ ഫോള്ഡറിൽ ഉൾപ്പെടുത്തി. നിങ്ങളുടെ സൃഷ്ടിപരമായ തിരഞ്ഞെടുപ്പുകളും നിങ്ങൾ അന്വേഷിക്കുന്ന കാൻവാസ് API സവിശേഷതകളും വിശദീകരിക്കുന്ന ചെറിയ അഭിപ്രായവും ഉൾപ്പെടുത്തുക.
+
+## റൂബ്രിക്
+
+| മാനദണ്ഡം | മികച്ചത് | യോജിച്ച | മെച്ചപ്പെടുത്തേണ്ടത് |
+|----------|-----------|----------|-------------------|
+| **സാങ്കേതിക നടപ്പാക്കൽ** | കാനവ്സ് API സൃഷ്ടിപരമായി ഉപയോഗിച്ചു പല സവിശേഷതകളും, കോഡ് തകൃതിയായി പ്രവർത്തിക്കുന്നു, ആധുനിക ജാവാസ്ക്രിപ്റ്റ് സിന്താക്സ് പ്രയോഗിച്ചു | കാൻവാസ് API ശരിയായ രീതിയിൽ ഉപയോഗിച്ചു, കോഡ് ചെറിയ പിശകുകളോടെ പ്രവർത്തിക്കുന്നു, അടിസ്ഥാന നടപ്പാക്കൽ | കാൻവാസ് API ശ്രമിച്ചെങ്കിലും കോഡിൽ പിശകുകൾ ഉണ്ട് അല്ലെങ്കിൽ പ്രവർത്തിക്കില്ല |
+| **സൃഷ്ടിപരതയും ഡിസൈനും** | വളരെ യഥാർത്ഥ ആശയം, ശോഭനമായ ദർശന ആകർഷണം, തിരഞ്ഞെടുത്ത കാൻവാസ് സവിശേഷതയുടെ ആഴമായ പരിശോധന | കാൻവാസ് സവിശേഷതകൾ നല്ല നിലയിൽ ഉപയോഗിച്ച് ചില സൃഷ്ടിപരമായ ഘടകങ്ങൾ, ദൃശ്യ ഫലം സധാ | അടിസ്ഥാന നടപ്പാക്കൽ കുറഞ്ഞ സൃഷ്ടിപരതയോടും ദൃശ്യ ആകർഷണത്തോടും കൂടിയ |
+| **കോഡ് ഗുണമേന്മ** | ക്രമീകരിച്ച, മികച്ച രീതിയിൽ അഭിപ്രായങ്ങൾ നൽകിയ കോഡ്, ഫലപ്രദമായ അല്ഗോറിദ്ധങ്ങൾ | ചില അഭിപ്രായങ്ങളോടുള്ള ശുചിത്വം ഉള്ള കോഡ്, അടിസ്ഥാന കോഡിംഗ് രീതികൾ പാലിക്കുന്നു | കോഡ് ക്രമീകരണമില്ല, കുറഞ്ഞ അഭിപ്രായങ്ങൾ, ഫലപ്രദമല്ലാത്ത നടപ്പാക്കൽ |
+
+## പ്രതിബിംബ ചോദ്യങ്ങൾ
+
+നിങ്ങളുടെ പദ്ധതി പൂർത്തിയാക്കിയ ശേഷം, ഈ ചോദ്യങ്ങൾ പരിഗണിക്കുക:
+
+1. **നിങ്ങൾ തിരഞ്ഞെടുത്ത കാൻവാസ് API സവിശേഷത എന്തു, എന്തുകൊണ്ട്?**
+2. **പദ്ധതി നിർമ്മിക്കുമ്പോൾ നിങ്ങൾ നേരിട്ട വെല്ലുവിളികൾ എന്തെന്തായിരുന്നു?**
+3. **ഈ പദ്ധതി ഒരു വലിയ ആപ്ലിക്കേഷനോ ഗെയിമിലോ എങ്ങനെ വിപുലീകരിക്കാം?**
+4. **മറ്റ് ഏതൊരു കാൻവാസ് API സവിശേഷതകൾ നിങ്ങൾ അടുത്തതായി അന്വേഷിക്കുമെന്നു ആഗ്രഹിക്കുന്നു?**
+
+> 💡 **പ്രൊ ടിപ്പ്**: ലളിതമാകുന്നതു കൊണ്ട് തുടങ്ങി, സാധുതയും സങ്കീർണ്ണതയും ക്രമേണ കൂട്ടുക. നന്നായി നടപ്പാക്കിയ ലളിതമായ ഒരു പദ്ധതി, ശരിയായി പ്രവർത്തിക്കാത്ത അത്യന്തം പ്രയസ്കരമായ പദ്ധതിയേക്കാൾ മെച്ചമാണ്!
+
+---
+
+
+**വിവരണം**:
+ഈ പ്രമാണം AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്ക് പരിശ്രമിച്ചെങ്കിലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ തെറ്റിദ്ധാരണകൾ ഉണ്ടാകാൻ സാധ്യതയുണ്ട്. അതിനാൽ, മൗലിക ഭാഷയിൽ ഉള്ള അസൽ പ്രമാണം മികച്ച ഉറവിടമായി പരിഗണിക്കേണ്ടതാണ്. സുപ്രധാന വിവരങ്ങൾക്കായി, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിച്ചതിനാൽ ഉണ്ടാകുന്ന ഏതേയെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ ദുരവബോധങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദിത്വം സ്വീಕರിക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/3-moving-elements-around/README.md b/translations/ml/6-space-game/3-moving-elements-around/README.md
new file mode 100644
index 000000000..33d36bd99
--- /dev/null
+++ b/translations/ml/6-space-game/3-moving-elements-around/README.md
@@ -0,0 +1,900 @@
+
+# സ്റ്റെപ്പിൽ സ്പേസ് ഗെയിം നിർമാണം ഭാഗം 3: മോഷൻ ചേർക്കൽ
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ഗെയിം ആനിമേഷൻ യാത്ര
+ section മോഷൻ അടിസ്ഥാനങ്ങൾ
+ മോഷൻ സിദ്ധാന്തങ്ങൾ മനസിലാക്കുക: 3: Student
+ കോഓർഡിനേറ്റ് അപ്ഡേറ്റുകൾ പഠിക്കുക: 4: Student
+ അടിസ്ഥാന നീക്കം നടപ്പിലാക്കുക: 4: Student
+ section പ്ലേയർ നിയന്ത്രണങ്ങൾ
+ കീബോർഡ് ഇവന്റുകൾ കൈകാര്യം ചെയ്യുക: 4: Student
+ ഡീഫോൾട്ട് പെരുമാറ്റങ്ങൾ തടയുക: 5: Student
+ പ്രതികരണക്ഷമമായ നിയന്ത്രണങ്ങൾ സൃഷ്ടിക്കുക: 5: Student
+ section ഗെയിം സിസ്റ്റങ്ങളും
+ ഗെയിം ലൂപ്പ് രൂപപ്പെടുത്തുക: 5: Student
+ ഒബ്ജക്റ്റ് ലൈഫ്സൈക്കിൾ മാനേജ് ചെയ്യുക: 5: Student
+ പബ്/സബ് പാറ്റേൺ നടപ്പിലാക്കുക: 5: Student
+```
+നിങ്ങളുടെ ഇഷ്ടപ്പെട്ട ഗെയിമുകളെ കുറിച്ച് ചിന്തിക്കൂ – അവയെ ആകർഷകമാക്കുന്നത് സുന്ദരമായ ഗ്രാഫിക്ക്സുകൾ മാത്രമല്ല, അത് എല്ലാം നീങ്ങുകയും നിങ്ങളുടെ പ്രവർത്തനങ്ങൾക്ക് പ്രതികരിക്കുകയും ചെയ്യുന്ന രീതിയാണ്. ഇടശേഷം, നിങ്ങളുടെ സ്പേസ് ഗെയിം ഒരു മനോഹരമായ ചിത്രപതത്തിൽപോലെ ആണ്, പക്ഷേ നാം അതിലേക്ക് ജീവൻ നിറച്ച് ചലനം ചേർക്കാനിരിക്കുകയാണ്.
+
+NASA എഞ്ചിനീയർമാർ അപോളോ മിഷനുകൾക്കായി ഗൈഡൻസ് കമ്പ്യൂട്ടർ പ്രോഗ്രാം ചെയ്യുമ്പോൾ അവർ അഭിമുഖീകരിച്ച പ്രശ്നം ഇതുപോലെയാണ്: പയലറ്റിന്റെ ഇൻപുട്ടിന് ഒരു സ്പേസ്ക്രാഫ്റ്റ് എങ്ങനെ പ്രതികരിക്കണം എന്നും സ്വയമേധയാ ദിശാസൂചന പരിഷ്കാരങ്ങൾ എങ്ങനെ നിലനിർത്തണം എന്നും. ഇന്നു നാം പഠിക്കാനിരിക്കുന്ന സിദ്ധാന്തങ്ങൾ ഈ സമാന ആശയങ്ങളെ പ്രതിഫലിപ്പിക്കുന്നു – കളിക്കovu തുടർന്ന് നിയന്ത്രിതമായ നിധികള് സാമ്പത്തിക സ്വയം പ്രവർത്തന സിസ്റ്റങ്ങളോ ല്качилാ.
+
+ഈ പాఠത്തിൽ, നിങ്ങൾ സ്പേസ്ഷിപ്പുകൾ സ്ക്രീനിലൂടെ സ്ലൈഡ് ചെയ്യുന്നതും കളിക്കാരന്റെ കമാൻഡുകൾക്കെ പ്രതികരിക്കുന്നതും സുന്ദരമായ ചലന മാതൃകകൾ സൃഷ്ടിക്കുന്നതും പഠിക്കും. എല്ലാം സ്വാഭാവികമായി ഒന്നിൽ ഒന്ന് കെട്ടിയെടുത്തുകൊണ്ട് നിയന്ത്രിക്കാവുന്ന ആശയങ്ങളായി നാം വിഭജിക്കും.
+
+അവസാനിക്കുമ്പോൾ, കളിക്കാർ അവരുടെ ഹീറോ ജഹാജ് സ്ക്രീനിലുടനീളം പറക്കുകയും ശത്രു ജഹാജുകൾ മുകളിൽ പട്രോൾ നടത്തുന്നതും കാണാൻ കഴിയും. കൂടുതൽ പ്രധാനമായി, ഗെയിം ചലന സിസ്റ്റങ്ങളെ ശക്തിപ്പെടുത്തുന്ന മുൾ സിദ്ധാന്തങ്ങൾ നിങ്ങൾ മനസ്സിലാക്കും.
+
+```mermaid
+mindmap
+ root((ഗെയിം അനിമേഷൻ))
+ Movement Types
+ Player Controlled
+ Automatic Motion
+ Physics Based
+ Scripted Paths
+ Event Handling
+ കീബോർഡ് ഇൻപുട്ട്
+ മൗസ് ഇവന്റ്സ്
+ ടച്ചു കോൺട്രോളുകൾ
+ ഡിഫോൾട്ട് പ്രിവൻഷൻ
+ Game Loop
+ അപ്ഡേറ്റ് ലജിക്
+ റেণ്ഡർ ഫ്രെയിം
+ ക്ലിയർ ക്യാൻവാസ്
+ ഫ്രെയിം റേറ്റ് കൺട്രോൾ
+ Object Management
+ സ്ഥാനം ആപ്ഡേറ്റുകൾ
+ കോളിഷൻ കണ്ടെത്തൽ
+ ജീവിതചക്രം മാനേജ്മെന്റ്
+ സ്റ്റേറ്റ് ට്രാക്കിംഗ്
+ Communication
+ പബ്/സബ് പാറ്റേൺ
+ ഇവന്റ് എമിറ്ററുകൾ
+ മെസ്സേജ് പാസ്സിംഗ്
+ ലൂസ് കപ്ലിംഗ്
+```
+## മുൻപത്തെ പാഠം-മുൻപരീക്ഷ
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/33)
+
+## ഗെയിം ചലനം മനസ്സിലാക്കൽ
+
+വസ്തുക്കൾ ചലിച്ചുതുടങ്ങുമ്പോൾ ഗെയിംകൾ ജീവൻ പകരുന്നു, ഇത് രണ്ടുതരം അടിസ്ഥാനരீதിയിലാണ് നടക്കുന്നത്:
+
+- **കളിക്കാരൻ നിയന്ത്രിക്കുന്ന ചലനം**: നിങ്ങൾ ഒരു കീ ഞെക്കുമ്പോൾ അല്ലെങ്കിൽ മൗസ് ക്ലിക്ക് ചെയ്യുമ്പോൾ എന്തെങ്കിലും ജീവിക്കുന്നു. ഇത് നിങ്ങളും നിങ്ങളുടെ ഗെയിംലോകവും തമ്മിലുള്ള നേരിട്ടുള്ള ബന്ധമാണ്.
+- **സ്വയമേധയാ ചലനം**: ഗെയിം തന്നെ നീക്കാനുള്ള തീരുമാനം എടുക്കുമ്പോൾ – ഉദാഹരണത്തിന്, നിങ്ങൾ എന്തും ചെയ്താലും കാണാനാകുന്ന ആ ശത്രു ജഹാജുകൾ സ്ക്രീൻ വഴി പട്രോൾ ചെയ്യുന്നത്.
+
+കമ്പ്യൂട്ടർ സ്ക്രീനിൽ വസ്തുക്കൾ നീക്കുന്നത് നിങ്ങൾക്ക് തോന്നുന്നതേക്കാൾ എളുപ്പമാണ്. ഗണിത പാഠത്തിലെ x, y കോർഡിനേറ്റുകൾ ഓർക്കൂ? നമ്മൾ ഇതെന്താണ് കൈകാര്യം ചെയ്യുന്നിരുന്നത്. 1610 ആസൂലിക്കപ്പുറം ഗാലിലിയോ ജുപിറ്ററിന്റെ ചന്ദ്രന്മാരെ നിരീക്ഷിച്ചപ്പോൾ, അദ്ദേഹവും തുല്യമായ ഒരു പ്രവൃത്തി നിർവഹിച്ചിരുന്നു – ചലന മാതൃകകൾ മനസിലാക്കാൻ സമയക്രമത്തിൽ സ്ഥാനങ്ങൾ രേഖപ്പെടുത്തൽ.
+
+സ്ക്രീനിൽ വസ്തുക്കൾ നീക്കുന്നത് ഫ്ലിപ്ബുക്ക് അനിമേഷൻ സൃഷ്ടിക്കുന്നതുപോലെ ആണ് – ഈ മൂന്ന് ലളിതമായവ പിന്തുടരേണ്ടതാണ്:
+
+```mermaid
+flowchart LR
+ A["ഫ്രെയിം N"] --> B["സ്ഥിതികൾ പുതുക്കുക"]
+ B --> C["കാൻവാസ് ഉളവാക്കുക"]
+ C --> D["വസ്തുക്കൾ വരയ്ക്കുക"]
+ D --> E["ഫ്രെയിം N+1"]
+ E --> F{തുടരണമോ?}
+ F -->|അതെ| B
+ F -->|ഇല്ല| G["ഗെയിം ഒവേർ"]
+
+ subgraph "ആനിമേഷൻ ചക്രം"
+ H["1. പുതിയ സ്ഥാനങ്ങൾ കണക്കാക്കുക"]
+ I["2. മുമ്പത്തെ ഫ്രെയിം മായ്ക്കുക"]
+ J["3. പുതിയ ഫ്രെയിം റെൻഡർ ചെയ്യുക"]
+ end
+
+ style B fill:#e1f5fe
+ style C fill:#ffebee
+ style D fill:#e8f5e8
+```
+1. **പൊസിഷൻ അപ്ഡേറ്റ് ചെയ്യുക** – നിങ്ങളുടെ വസ്തു എവിടെയാണ് എന്ന് മാറ്റുക (ഉദാഹരണം: 5 പിക്സൽ വലത്തേക്ക് നീക്കം ചെയ്യുക)
+2. **പഴയ ഫ്രെയിം നീക്കംചെയ്യുക** – സ്ക്രീൻ ശൂന്യമാക്കുക, അത് കൊണ്ട് പുറന്തള്ളിയ വഴികൾ കാണുന്നില്ല
+3. **പുതിയ ഫ്രെയിം വരയ്ക്കുക** – വസ്തു പുതിയ സ്ഥാനത്ത് വെക്കുക
+
+ഇത് വേഗത്തിൽ ചെയ്താൽ, സൂപ്പർ! നിങ്ങൾക്ക് സുന്ദരമായ, സ്വാഭാവികമായ തോന്നൽ വരുന്ന ചലനം നൽകാം.
+
+കೋഡിൽ ഇത് ഇങ്ങനെ കാണാം:
+
+```javascript
+// ഹീറോയുടെ സ്ഥാനം സജ്ജമാക്കുക
+hero.x += 5;
+// ഹീറോയെ ഹോസ്റ്റ് ചെയ്യുന്ന ചതുരഭുജം മായ്ക്കുക
+ctx.clearRect(0, 0, canvas.width, canvas.height);
+// ഗെയിം പശ്ചാത്തലവും ഹീറോയും പുനരാഖ്യാനം ചെയ്യുക
+ctx.fillRect(0, 0, canvas.width, canvas.height);
+ctx.fillStyle = "black";
+ctx.drawImage(heroImg, hero.x, hero.y);
+```
+
+**ഈ കോഡ് ചെയ്യുന്നത്:**
+- ഹീറോയുടെ x-കോ-ഓർഡിനേറ്റ് 5 പിക്സൽ വലത്തേക്ക് മാറ്റി *അപ്ഡേറ്റ്* ചെയ്യുന്നു
+- മുമ്പത്തെ ഫ്രെയിം നീക്കം ചെയ്യാൻ കാൻവാസ് മുഴുവൻ ശൂന്യമാക്കുന്നു
+- പിന്നീടുള്ള പശ്ചാത്തലം കറുത്ത നീലബർണ്ണമായി പൂരിപ്പിക്കുന്നു
+- ഹീറോ ചിത്രത്തെ പുതിയ സ്ഥാനത്ത് വീണ്ടും വരയ്ക്കുന്നു
+
+✅ ഹീറോ ഉടനീളം നിരവധി ഫ്രെയിമുകൾ ഓരോ സെക്കന്റിലും വീണ്ടും വരയ്ക്കുന്നത് പ്രകടന ചിലവ് ഉണ്ടാക്കാൻ കാരണമാകാമോയെന്നു ഗുമാനിക്കാമോ? ഈ മാതൃകയ്ക്ക് മറ്റു ബദൽ മാർഗങ്ങൾ [ഇവിടെ](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas) വായിക്കൂ.
+
+## കീബോർഡ് ഇവന്റ് കൈകാര്യം ചെയ്യൽ
+
+ഇവിടെയാണ് കളിക്കാരന്റെ ഇൻപുട്ടും ഗെയിം പ്രവർത്തനവും ബന്ധിപ്പിക്കുന്നത്. ആരെങ്കിലും ലേസർ അടിക്കാൻ സ്പേസ്ബാർ ഞെക്കുകയോ അസ്ഥിരകാന്തിയെ ഇടിഞ്ഞുകെട്ടാൻ അരിപ്പിൽ അണഞ്ഞു കീ അമർത്തുകയോ ചെയ്താൽ, ഗെയിം ആ ഇൻപുട്ട് തിരിച്ചറിയുകയും പ്രതികരിക്കുകയും വേണം.
+
+കീബോർഡ് ഇവന്റ്സ് വിൻഡോ നിലവാരത്തിലാണ് നടക്കുന്നത്, അർത്ഥം ഒരു മുഴുവൻ ബ്രൗസർ വിൻഡോ ആകെയുള്ള കീപ്രസുകൾ കേൾക്കുന്നു. പക്ഷേ മൗസ് ക്ലിക്കുകൾ പ്രത്യേക ഘടകങ്ങളോടെ ബന്ധപ്പെട്ടിരിക്കുന്നു (ഉദാഹരണത്തിന് ഒരു ബട്ടൺ ക്ലിക്ക് ചെയ്യുക). നമ്മുടെ സ്പേസ് ഗെയിമിനായി, കീബോർഡ് നിയന്ത്രണങ്ങളിൽ മാത്രമേ നാം കേന്ദ്രീകരിക്കൂ, കാരണം അത് കളിക്കാർക്ക് ആർക്കെയ്ഡ് അനുഭവം നൽകുന്നു.
+
+1800 കമോൺ കാലത്ത് ടെലിഗ്രാഫ് ഓപ്പറേറ്റർമാർ മോഴ്സ് കോഡ് ഇൻപുട്ടുകളെ അർത്ഥംനൽകുന്ന സന്ദേശങ്ങളായി തർജ്ജമ ചെയ്യേണ്ടി വന്നതുപോലെ, നാം കീപ്രസ് ഗെയിം കമാൻഡുകളാക്കി തർജ്ജമ ചെയ്യുന്നുണ്ട്.
+
+ഒരു ഇവന്റ് കൈകാര്യം ചെയ്യാൻ, `window`യുടെ `addEventListener()` മെത്തഡ് ഉപയോഗിച്ച് രണ്ട് ഇൻപുട്ട് പാരാമീറ്ററുകൾ നൽകേണ്ടതാണ്. ആദ്യപാരാമീറ്റർ ഇവന്റിന്റെ പേര് (ഉദാ. `keyup`), രണ്ടാം പാരാമീറ്റർ ഇവന്റ് സംഭവിക്കുമ്പോൾ വിളിക്കേണ്ട ഫങ്ഷനാണ്.
+
+ഉദാഹരണം:
+
+```javascript
+window.addEventListener('keyup', (evt) => {
+ // evt.key = കിയുടെ സ്ട്രിംഗ് പ്രത്യക്ഷം
+ if (evt.key === 'ArrowUp') {
+ // എന്തോ ചെയ്യുക
+ }
+});
+```
+
+**ഇവിടെ നടക്കുന്ന കാര്യങ്ങൾ:**
+- തീരെ വിൻഡോയിൽ നിന്ന് കീബോർഡ് ഇവന്റ് കേൾക്കുന്നു
+- ഇവന്റ് ഒബ്ജക്റ്റ് പിടിക്കുന്നുണ്ട്, അതിൽ ഏതു കീ അമർത്തപ്പെട്ടുവെന്ന വിവരം ഉണ്ട്
+- അമർത്തിയ കീ പ്രത്യേക കീ (ഈ കേസ്: അപ് അറോ) ആണെന്ന് പരിശോധിക്കുന്നു
+- നിബന്ധന പൂർത്തിയായാൽ കോഡ് പ്രവർത്തിപ്പിക്കുന്നു
+
+കീഇവന്റുകളിലായി താഴെപ്പറയുന്ന രണ്ട് പ്രോപ്പർട്ടികൾ ഉപയോഗിക്കാം:
+
+- `key` - അമർത്തിയ കീയുടെ സ്ട്രിംഗ് പ്രതിനിധാനം (ഉദാ. `'ArrowUp'`)
+- `keyCode` - അതിന്റെ സംഖ്യാത്മക പ്രതിനിധാനം (ഉദാ. `37`, ഇത് `ArrowLeft` подойдет)
+
+✅ ഗെയിം വികസനത്തിന് പുറമെ കീഇവന്റ് നിയന്ത്രണങ്ങൾ ഉപയോഗപ്രദമാണ്. ഇതിന് ഏത് മറ്റ് ഉപയോഗങ്ങൾ നിങ്ങൾക്ക് തോന്നുന്നു?
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant EventSystem
+ participant GameLogic
+ participant Hero
+
+ User->>Browser: അരോഅപ്പ് കീ അമർത്തുന്നു
+ Browser->>EventSystem: കീഡൗൺ ഇവന്റ്
+ EventSystem->>EventSystem: preventDefault()
+ EventSystem->>GameLogic: emit('KEY_EVENT_UP')
+ GameLogic->>Hero: hero.y -= 5
+ Hero->>Hero: സ്ഥാനമാറ്റം അപ്ഡേറ്റ് ചെയ്യുന്നു
+
+ Note over Browser,GameLogic: ഇവന്റ് പ്രവാഹം ബ്രൗസർ ഡീഫോൾട്ടുകൾ തടയുന്നു
+ Note over GameLogic,Hero: പബ്ലിഷർ/സബ്സ്ക്രൈബർ മാതൃക ശുദ്ധമായ കമ്മ്യൂണിക്കേഷൻ സജ്ജമാക്കുന്നു
+```
+### പ്രത്യേക കീകൾ: മുന്നറിയിപ്പ്!
+
+കീകൾക്കെല്ലത്രേ നിർമ്മിതമായ ബ്രൗസർ പെരുമാറ്റങ്ങൾ ഉണ്ടാകാം, ഇത് നിങ്ങളുടെ ഗെയിം ഇടയാക്കാം. അറോകീസ് പേജ് സ്ക്രോൾ ചെയ്യുന്നു സ്പേസ്ബാർ താഴേക്ക് ചാടുന്നു – കളിക്കാരൻ ജഹാജ് നിയന്ത്രിക്കുമ്പോൾ ഇത് ആഗ്രഹിക്കാത്തതാണ്.
+
+നാം ഈ നിഷിദ്ധമായ പെരുമാറ്റങ്ങൾ തടയാം, ഗെയിം തന്നെ ഇൻപുട്ട് കൈകാര്യം ചെയ്യട്ടെ. ആദ്യകാല കമ്പ്യൂട്ടർ പ്രോഗ്രാമർമാർ സിസ്റ്റം ഇൻററപ്പ്റ്റുകൾ മറികടന്ന് ഇങ്ങനെ ചെയ്തതുപോലെ – എന്നാൽ ഇപ്പോൾ ബ്രൗസർ നിലവാരത്തിലാണ്.
+
+ഇതിലേക്കുള്ള മാർഗം:
+
+```javascript
+const onKeyDown = function (e) {
+ console.log(e.keyCode);
+ switch (e.keyCode) {
+ case 37:
+ case 39:
+ case 38:
+ case 40: // ആൺബാണ ചാവികളുകൾ
+ case 32:
+ e.preventDefault();
+ break; // സ്പെയ്സ്
+ default:
+ break; // മറ്റ് ചാവികളുകൾ തടസ്സപ്പെടുത്തരുത്
+ }
+};
+
+window.addEventListener('keydown', onKeyDown);
+```
+
+**ഈ തടയൽ കോഡ് മനസിലാക്കൽ:**
+- മത്സരിച്ച കീ കോഡുകൾ browser ല് പ്രത്യാഘാതം ഉണ്ടാക്കാതിരിക്കാൻ പരിശോധിക്കുന്നു
+- അറോകീസിനും സ്പേസ്ബാറിനും ഡിഫോൾട്ട് ബ്രൗസർ പ്രവർത്തനം തടയുന്നു
+- മറ്റുള്ള കീകൾ സ്വാഭാവികമായി പ്രവർത്തിക്കാൻ അനുവദിക്കുന്നു
+- ബ്രൗസറിന്റെ ഡിഫോൾട്ട് പെരുമാറ്റം മുടക്കാൻ `e.preventDefault()` ഉപയോഗിക്കുന്നു
+
+### 🔄 **പാഠപരിശോധന**
+**ഇവന്റ് ഹാൻഡ്ലിംഗ് മനസ്സിലാക്കൽ**: സ്വയം പരിശോധിക്കുക –
+- ✅ `keydown`യും `keyup`യും തമ്മിലുള്ള വ്യത്യാസം വിശദീകരിക്കാം
+- ✅ നിഷിദ്ധമായ ബ്രൗസർ പെരുമാറ്റം ഞങ്ങൾ തടയുന്നതെന്തുകൊണ്ടാണ് എന്ന് മനസ്സിലാക്കുക
+- ✅ ഇവന്റ് ലിസണർ ഉപയോക്തൃ ഇൻപുട്ടും ഗെയിം ലജിക്കും എങ്ങനെ ബന്ധപ്പെടുന്നു എന്ന് വിവരിക്കുക
+- ✅ ഗെയിം നിയന്ത്രണങ്ങൾ തടസ്സപ്പെടുത്താവുന്ന കീകൾ ഏതെല്ലാമാണെന്ന് തിരിച്ചറിയുക
+
+**വേഗം-ടെസ്റ്റ്**: അറോ കീകൾക്കുള്ള ഡിഫോൾട്ട് പെരുമാറ്റം നിങ്ങൾ തടയാതിരുന്നാൽ എന്തു സംഭവിക്കും?
+*ഉത്തരം: ബ്രൗസർ പേജ് സ്ക്രോൾ ചെയ്ത് ഗെയിം ചലനത്തെ തടസമാക്കും*
+
+**ഇവന്റ് സിസ്റ്റം ആർക്കിടെക്ചർ**: നിങ്ങൾ ഇതിൽ ഇപ്പോൾ വാക്ഫലമായിട്ടുണ്ട്:
+- **വിൻഡോ നിലവാരത്തിൽ കേൾക്കൽ**: ബ്രൗസർ തലത്തിൽ ഇവന്റ് പിടിക്കുക
+- **ഇവന്റ് ഒബ്ജക്റ്റ് പ്രോപ്പർട്ടികൾ**: `key` സ്ട്രിംഗുകളും `keyCode` സംഖ്യകളും
+- **ഡിഫോൾട്ട് തടയൽ**: അനിഷ്ട ബ്രൗസർ പെരുമാറൽ തടയൽ
+- **നിബന്ധനാ ലജിക്ക്**: പ്രത്യേക കീ കൂട്ടികൾക്ക് പ്രതിയോഗം
+
+## ഗെയിം സൃഷ്ടിക്കുന്ന ചലനം
+
+ഇപ്പോൾ മരക്കാട്ടിൽ മനസ്സിലാക്കൂ, കളിക്കാരന്റെ ഇൻപുട്ടില്ലാതെ വസ്തുക്കൾ നീങ്ങുന്നു. നിമിഷം മുതൽ സ്ക്രീനിലൂടെ പട്രോൾ ചെയ്യുന്ന ശത്രുക്കളുടെ ജഹാജുകൾ, നേരിയ രേഖകളിൽ പറക്കുന്ന ബുള്ളറ്റുകൾ, പശ്ചാത്തലത്തിൽ മന്ദഗതിയായ മേഘങ്ങൾ. ഈ സ്വയംപ്രേരിതമായ ചലനം നിങ്ങളുടെ ഗെയിം ലോകം ജീവനുള്ളതുപോലെ തോന്നിക്കാൻ സഹായിക്കുന്നു.
+
+നമുക്ക് ജാവാസ്ക്രിപ്റ്റിന്റെ ഇൻബിൽറ്റ് ടൈമറുകൾ ഉപയോഗിച്ച് പോസിഷനുകൾ തുടർച്ചയായി അപ്ഡേറ്റ് ചെയ്യാം. ഇത് നടപ്പാക്കുന്നത് പെൻഡുലം ക്ലോക്കുകൾ എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്നതുപോലെ – സ്ഥിരം തീയർമരയും ക്രമിതമായ സമയ നടപടികളും. എളുപ്പത്തിൽ കാണാം:
+
+```javascript
+const id = setInterval(() => {
+ // എതിരാളിയെ y അക്ഷത്തിൽ ചേർത്ത് നീക്കുക
+ enemy.y += 10;
+}, 100);
+```
+
+**ഈ ചലന കോഡ് ചെയ്യുന്നത്:**
+- ഓരോ 100 മില്ലിസെക്കന്റിലും പ്രവർത്തിക്കുന്ന ടൈമർ സൃഷ്ടിക്കുന്നു
+- ഓരോ തവണയും ശത്രുവിന്റെ y-കോ-ഓർഡിനേറ്റ് 10 പിക്സൽ കുറഞ്ഞ് അപ്ഡേറ്റ് ചെയ്യുന്നു
+- ഇടവേള ഐഡി സൂക്ഷിക്കുന്നു, ആവശ്യത്തിൽ ആണെങ്കിൽ നിർത്താനാകും
+- ശത്രുവിനെ സ്വയം സ്ക്രീനിൽ താഴേക്ക് സഞ്ചടിപ്പിക്കുന്നു
+
+## ഗെയിം ലൂപ്പ്
+
+എല്ലാം ബന്ധിപ്പിക്കുന്ന ആശയം ഇത് – ഗെയിം ലൂപ്പ്. നിങ്ങളുടെ ഗെയിം ഒരു ചിത്രം ആണെങ്കിൽ, ഗെയിം ലൂപ്പ് ചിത്രപ്രൊജക്ടറാണ്, ഫ്രെയിം ഒന്നുകിൽ അനിരവധി വേഗത്തിൽ പ്രദർശിപ്പിച്ച് എല്ലാം സുഖപ്രദമായി ചലിക്കുന്നതുപോലെ കാണിക്കുന്നു.
+
+ആൾക്കുന്ന ഗെയിമുകൾക്ക് പിന്നിൽ പ്രവർത്തിക്കുന്ന ഒരൊരു ഫംഗ്ഷൻ ഇതാണ്. എല്ലാ ഗെയിം വസ്തുക്കളും അപ്ഡേറ്റ് ചെയ്യുകയും, സ്ക്രീൻ വീണ്ടും വരയ്ക്കുകയും, തുടർച്ചയായി ഈ പ്രക്രിയ തുടരുമ്. ഇത് നിങ്ങളുടെ ഹീറോയുടെ സ്ഥാനം, എല്ലാ ശത്രുക്കളും, ലേസറുകളും എല്ലാം നേരത്തെ ട്രാക്ക് ചെയ്യുന്നു.
+
+പ്രാരംഭ സിനിമ അനിമേറ്റർമാർ വാൾറ്റ് ഡിസ്നി പോലുള്ളവർ ഒരു കഥാപാത്രം ഫ്രെയിം ബൈ ഫ്രെയിമായി വീണ്ടും വരയ്ക്കേണ്ടി വന്നതുപോലെ – നമ്മൾ അതു കോഡുമായ് ചെയ്യുകയാണ്.
+
+ഗെയിം ലൂപ്പ് സാധാരണയായി ഇങ്ങനെ കാണാം:
+
+```mermaid
+flowchart TD
+ A["ഗെയിം ലൂപ്പ് തുടങ്ങുക"] --> B["കാൻവാസ് ക്ലിയർ ചെയ്യുക"]
+ B --> C["പശ്ചാത്തലം നിറയ്ക്കുക"]
+ C --> D["ഗെയിം ഒബ്ജക്റ്റുകൾ അപ്ഡേറ്റ് ചെയ്യുക"]
+ D --> E["ഹീറോ ആക്ക്ഷൻ ചിതറിക്കുക"]
+ E --> F["ശത്രുക്കളെ ചിത്രീകരിക്കുക"]
+ F --> G["യൂഐ ഘടകങ്ങൾ വരക്കുക"]
+ G --> H["അടുത്ത ഫ്രെയിമിനായി കാത്തിരിക്കുക"]
+ H --> I{ഗെയിം ഓടുന്നുണ്ടോ?}
+ I -->|അതെ| B
+ I -->|ഇല്ല| J["ഗെയിം അവസാനിപ്പിക്കുക"]
+
+ subgraph "ഫ്രെയിം നിരക്കിൽ നിയന്ത്രണം"
+ K["60 FPS = 16.67ms"]
+ L["30 FPS = 33.33ms"]
+ M["10 FPS = 100ms"]
+ end
+
+ style B fill:#ffebee
+ style D fill:#e1f5fe
+ style E fill:#e8f5e8
+ style F fill:#e8f5e8
+```
+```javascript
+const gameLoopId = setInterval(() => {
+ function gameLoop() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ drawHero();
+ drawEnemies();
+ drawStaticObjects();
+ }
+ gameLoop();
+}, 200);
+```
+
+**ഗെയിം ലൂപ് ഘടന മനസ്സിലാക്കൽ:**
+- മുമ്പത്തെ ഫ്രെയിം നീക്കം ചെയ്യാൻ കാൻവാസ് മുഴുവൻ ശൂന്യമാക്കുന്നു
+- പശ്ചാത്തല നിറം പൂരിപ്പിക്കുന്നു
+- എല്ലാ ഗെയിം വസ്തുക്കളും തങ്ങളുടെ നിലവിലെ സ്ഥാനങ്ങളിൽ വരയ്ക്കുന്നു
+- ഓരോ 200 മില്ലിസെക്കന്റിലും ഇത് ആവർത്തിക്കുന്നു, മൃദുവായ അനിമേഷൻ സൃഷ്ടിക്കുന്നു
+- ഇടവേളയുടെ സമയക്രമം നിയന്ത്രിച്ച് ഫ്രെയിംനിരക്ക് നിയന്ത്രിക്കുന്നു
+
+## സ്പേസ് ഗെയിം തുടർക്കഥ
+
+നീണ്ടിരിക്കുന്ന സ്റ്റെപ്പിൽ നാം മുമ്പ് നിർമിച്ചിരിക്കുന്ന നിശ്ചല ദൃശ്യത്തിന് ചലനം ചേർക്കാം. സ്ക്രീൻഷോട്ട് നിന്നൊരു ഇടപെടു അനുഭവമായി മാറ്റിക്കൊടുക്കുകയാണ്. ഓരോ ഘട്ടവും മുൻ ഘട്ടത്തിനൊപ്പം ചേർന്ന് നിർമ്മിക്കാനുള്ളത്.
+
+മുമ്പത്തെ പാഠത്തിൽ നിന്നു തുടങ്ങിയത് കോഡ് പിടിച്ച് നോക്കുക (അല്ലെങ്കിൽ പുതുതായി തുടങ്ങേണ്ടെങ്കിൽ [Part II- starter](../../../../6-space-game/3-moving-elements-around/your-work) ഫോൾഡറിൽ നിന്ന് സ്റ്റാർട്ട് ചെയ്യാം).
+
+**ഇന്ന് നാം നിർമ്മിക്കേണ്ടതെന്ത്:**
+- **ഹീറോ നിയന്ത്രണങ്ങൾ**: അരോ കീസുകൾ കൊണ്ട് നിങ്ങളുടെ സ്പേസ്ഷിപ്പ് സ്ക്രീൻ ചുറ്റി പറക്കും
+- **ശത്രുചലനം**: ആ വിദേശ ജഹാജുകൾ അവരുടെ ആക്രമണം ആരംഭിക്കും
+
+ഇവ നടപ്പിലാക്കാം.
+
+## ശിപാർശ ചെയ്തപടി നിവർത്തുക
+
+`your-work` ഉപഫോൾഡറിൽ నిర్మിച്ചിട്ടുള്ള ഫയലുകൾ കണ്ടെത്തുക. ഈ ഫയലുകൾ അടങ്ങിയിരിക്കണം:
+
+```bash
+-| assets
+ -| enemyShip.png
+ -| player.png
+-| index.html
+-| app.js
+-| package.json
+```
+
+പ്രോജക്റ്റ് `your-work` ഫോൾഡറിൽ തുടങ്ങാൻ ടൈപ്പ് ചെയ്യുക:
+
+```bash
+cd your-work
+npm start
+```
+
+**ഈ കമാൻഡ് ചെയ്യുന്നത്:**
+- പ്രോജക്റ്റ് ഡയറക്ടറിയിലേക്കു പോകുന്നു
+- `http://localhost:5000` എന്ന വിലാസത്തിൽ HTTP സർവർ ആരംഭിക്കുന്നു
+- ഗെയിം ഫയലുകൾ ബ്രൗസറിൽ പരീക്ഷിക്കാനായി സർവ് ചെയ്യുന്നു
+
+മുകളിൽ പറഞ്ഞത് `http://localhost:5000` വിലാസത്തിൽ HTTP സർവർ ചാലിക്കുന്നത്. ഇപ്പോൾ ഒരു ബ്രൗസർ ഓപ്പൺ ചെയ്ത് ആ വിലാസം നൽകുക, ഹീറോയും എല്ലാ ശത്രുകളും দেখা മാത്രമാണ്, ഇന്നുവരെ ഒന്നും ചലിക്കുന്നില്ല!
+
+### കോഡ് ചേർക്കുക
+
+1. `hero`, `enemy` နှင့် `game object` എന്ന കാര്യത്തിന് പ്രത്യേക ഒബ്ജക്റ്റുകൾ ചേർക്കുക. അവയ്ക്ക് `x` , `y` പ്രോപ്പർട്ടികൾ ഉണ്ടാകണം. ([ഇറ наследം അല്ലെങ്കിൽ സംയോജനം](../README.md) എന്ന ഭാഗം ഓർമിക്കുക).
+
+ *HINT* `game object` ആയിരിക്കേണ്ടത് `x`, `y` ഉള്ള ക്ലാസ് ആകുന്നു, അതും കാൻവാസിലേക്ക് സ്വയം വരയ്ക്കുന്ന ശേഷി ഉള്ളത്.
+
+ > **ടിപ്പ്**: ആദ്യം പുതിയ `GameObject` ക്ലാസ് ചേർക്കുക, അതിന്റെ കൺസ്ട്രക്ടർ താഴെപ്പറഞ്ഞിട്ടുള്ളതുപോലെ നിർവചിക്കുക, ശേഷം കാൻവാസ്യിൽ വരയ്ക്കുക:
+
+ ```javascript
+ class GameObject {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ this.dead = false;
+ this.type = "";
+ this.width = 0;
+ this.height = 0;
+ this.img = undefined;
+ }
+
+ draw(ctx) {
+ ctx.drawImage(this.img, this.x, this.y, this.width, this.height);
+ }
+ }
+ ```
+
+**ഈ അടിസ്ഥാന ക്ലാസ് മനസ്സിലാക്കൽ:**
+- എല്ലാ ഗെയിം ഒബ്ജക്റ്റുകളും പങ്കിടുന്ന പൊതുവായ പ്രോപ്പർട്ടികൾ നിർവചിക്കുന്നു (സ്ഥാനവും വലിപ്പവും ചിത്രം)
+- ഒബ്ജക്റ്റ് നീക്കം ചെയ്യേണ്ടതായിരുന്നെങ്കിൽ ട്രാക്ക് ചെയ്യാൻ `dead` ഫ്ലാഗ് ഉണ്ട്
+- ഒബ്ജക്റ്റ് കാൻവസ്ൽ വരയ്ക്കുന്ന `draw()` മേധം ഉണ്ട്
+- ബാല്യ ക്ലാസുകൾക്ക് വിവാഹം നിശ്ചയിക്കാവുന്ന എല്ലാ പ്രോപ്പർട്ടികൾക്കും ഡിഫോൾട്ട് മൂല്യങ്ങൾ സെറ്റ് ചെയ്യുന്നു
+
+```mermaid
+classDiagram
+ class GameObject {
+ +x: number
+ +y: number
+ +dead: boolean
+ +type: string
+ +width: number
+ +height: number
+ +img: Image
+ +draw(ctx)
+ }
+
+ class Hero {
+ +speed: number
+ +type: "ഹീറോ"
+ +width: 98
+ +height: 75
+ }
+
+ class Enemy {
+ +type: "എനമി"
+ +width: 98
+ +height: 50
+ +setInterval()
+ }
+
+ GameObject <|-- Hero
+ GameObject <|-- Enemy
+
+ class EventEmitter {
+ +listeners: object
+ +on(message, listener)
+ +emit(message, payload)
+ }
+```
+`GameObject` വിപുലീകരിച്ച് `Hero` എന്നും `Enemy` എന്നും സൃഷ്ടിക്കുക:
+
+ ```javascript
+ class Hero extends GameObject {
+ constructor(x, y) {
+ super(x, y);
+ this.width = 98;
+ this.height = 75;
+ this.type = "Hero";
+ this.speed = 5;
+ }
+ }
+ ```
+
+ ```javascript
+ class Enemy extends GameObject {
+ constructor(x, y) {
+ super(x, y);
+ this.width = 98;
+ this.height = 50;
+ this.type = "Enemy";
+ const id = setInterval(() => {
+ if (this.y < canvas.height - this.height) {
+ this.y += 5;
+ } else {
+ console.log('Stopped at', this.y);
+ clearInterval(id);
+ }
+ }, 300);
+ }
+ }
+ ```
+
+**ഈ ക്ലാസുകളിൽ പ്രധാന ആശയങ്ങൾ:**
+- `extends` കീവേഡ് ഉപയോഗിച്ച് `GameObject` മുതൽ അവകാശപ്പെടുന്നു
+- `super(x, y)` ഉപയോഗിച്ച് പാരന്റ് കൺസ്ട്രക്ടർ വിളിക്കുന്നു
+- ഓരോ വസ്തുവിനും പ്രത്യേക വലിപ്പങ്ങളും ലക്ഷണങ്ങളും സജ്ജമാക്കുന്നു
+- `setInterval()` ഉപയോഗിച്ച് ശത്രുക്കളുടെ സ്വയംചലനം നടപ്പിലാക്കുന്നു
+
+2. കീ ന്യൂനസംഖ്യകൾ കൈകാര്യം ചെയ്യുന്ന കീഇവന്റ് ഹാൻഡ്ലറുകൾ ചേർക്കുക (ഹീറോയ്ക്ക് മുകളിലെയും കീഴിലെയും ഇടത്തും വലത്തും നീക്കം ചെയ്യാൻ)
+
+ *ഓർക്കുക* പരമാവധി സിസ്റ്റം കാർട്ടീഷ്യൻ ഓഫീസാണു, മുകളിൽ-ഇടത്തുകൈത് ആയിരിക്കും `0,0`. കൂടാതെ ഡിഫോൾട്ട് പെരുമാറ്റം തടയാനുള്ള കോഡ് ചേർക്കുക.
+
+ > **ടിപ്പ്**: നിങ്ങളുടെ `onKeyDown` ഫങ്ഷൻ സൃഷ്ടിച്ച് അത് വിൻഡോയിൽ കൂട്ടി:
+
+ ```javascript
+ const onKeyDown = function (e) {
+ console.log(e.keyCode);
+ // ഡിഫോൾട്ട് പെരുമാറ്റം നിർത്താൻ മുകളിലുള്ള പാഠത്തിലെ കോഡ് ചേർക്കുക
+ switch (e.keyCode) {
+ case 37:
+ case 39:
+ case 38:
+ case 40: // ഇറങ്കി താറുകൾ
+ case 32:
+ e.preventDefault();
+ break; // സ്പേസ്
+ default:
+ break; // മറ്റ് കീകൾ തടയരുത്
+ }
+ };
+
+ window.addEventListener("keydown", onKeyDown);
+ ```
+
+**ഈ ഇവന്റ് ഹാൻഡ്ലർ ചെയ്യുന്നത്:**
+- വിൻഡോയിലെ കീഡൗൺ ഇവന്റ് കേൾക്കുന്നു
+- അമർത്തിയ കീകോഡ് ഡിബഗിന് ലോഗ് ചെയ്യുന്നു
+- അറോകീകൾക്കും സ്പേസ്ബാറിനും വേണ്ടി ഡിഫോൾട്ട് ബ്രൗസർ പെരുമാറ്റം തടയുന്നു
+- മറ്റുള്ള കീകൾ സാധാരണപ്രകാരമാണ് പ്രവർത്തിക്കുന്നത്
+
+ഈ ഘട്ടത്തിൽ ബ്രൗസർ കോൺസോൾ പരിശോധിച്ച് കീസ്റ്റ്രോക്ക് ലോഗിംഗ് നിരീക്ഷിക്കുക.
+
+3. [Pub sub പാറ്റേൺ](../README.md) നടപ്പാക്കുക, ഇത് ബാക്കി ഭാഗങ്ങൾക്കായുള്ള കോഡ് സുസ്ഥിരമാക്കും.
+
+പബ്ലീഷ്-സബ്സ്ക്രൈബ് പാറ്റേൺ ഇവന്റ് കണ്ടെത്തലും ഇവന്റ് കൈകാര്യം ചെയ്യലും വേർതിരിച്ചും കോഡ് ക്രമീകരിക്കുകയും ചെയ്യുന്നു. ഇത് കോഡ് കൂടുതൽ മെയിന്റെയിനേബിളും.
+
+ഈ അവസാനഭാഗം ചെയ്യാൻ:
+
+1. വിൻഡോയിൽ ഒരു ഇവന്റ് ലിസണർ ചേർക്കുക:
+
+ ```javascript
+ window.addEventListener("keyup", (evt) => {
+ if (evt.key === "ArrowUp") {
+ eventEmitter.emit(Messages.KEY_EVENT_UP);
+ } else if (evt.key === "ArrowDown") {
+ eventEmitter.emit(Messages.KEY_EVENT_DOWN);
+ } else if (evt.key === "ArrowLeft") {
+ eventEmitter.emit(Messages.KEY_EVENT_LEFT);
+ } else if (evt.key === "ArrowRight") {
+ eventEmitter.emit(Messages.KEY_EVENT_RIGHT);
+ }
+ });
+ ```
+
+**ഈ ഇവന്റ് സിസ്റ്റം ചെയ്യുന്നത്:**
+- കീബോർഡ് ഇൻപുട്ട് കണ്ടെത്തി അത് മാന്ദ്യ ഗെയിം ഇവന്റുകളായി മാറുന്നു
+- ഇൻപുട്ട് കണ്ടെത്തലും ഗെയിം ലജിക്കാൻ വേർതിരിക്കുന്നു
+- നിയന്ത്രണങ്ങൾ പിന്നീട് എളുപ്പത്തിൽ മാറ്റാൻ കഴിയും
+- ഒരേ ഇൻപുട്ടിന് പല സിസ്റ്റങ്ങൾ പ്രതികരിക്കാൻ അനുമതിയുണ്ട്
+
+```mermaid
+flowchart TD
+ A["കീബോർഡ് ഇൻപുട്ട്"] --> B["വിൻഡോ ഇവന്റ് ലിസണർ"]
+ B --> C["ഇവന്റ് എമിറ്റർ"]
+ C --> D["KEY_EVENT_UP"]
+ C --> E["KEY_EVENT_DOWN"]
+ C --> F["KEY_EVENT_LEFT"]
+ C --> G["KEY_EVENT_RIGHT"]
+
+ D --> H["ഹീറോ ചലനം"]
+ D --> I["ശബ്ദ സംവിധാനം"]
+ D --> J["വിജ്വൽ ഇഫക്റ്റുകൾ"]
+
+ E --> H
+ F --> H
+ G --> H
+
+ style A fill:#e1f5fe
+ style C fill:#e8f5e8
+ style H fill:#fff3e0
+```
+2. സന്ദേശങ്ങൾ പ്രസിദ്ധീകരിക്കുകയും സബ്സ്ക്രൈബ് ചെയ്യുകയും ചെയ്യാനുള്ള EventEmitter ക്ലാസ് സൃഷ്ടിക്കുക:
+
+ ```javascript
+ class EventEmitter {
+ constructor() {
+ this.listeners = {};
+ }
+
+ on(message, listener) {
+ if (!this.listeners[message]) {
+ this.listeners[message] = [];
+ }
+ this.listeners[message].push(listener);
+ }
+
+
+3. കോൺസ്റ്റന്റ് വേരിയബിളുകളും EventEmitter ക്രമീകരണവും ചേർക്കുക:
+
+ ```javascript
+ const Messages = {
+ KEY_EVENT_UP: "KEY_EVENT_UP",
+ KEY_EVENT_DOWN: "KEY_EVENT_DOWN",
+ KEY_EVENT_LEFT: "KEY_EVENT_LEFT",
+ KEY_EVENT_RIGHT: "KEY_EVENT_RIGHT",
+ };
+
+ let heroImg,
+ enemyImg,
+ laserImg,
+ canvas, ctx,
+ gameObjects = [],
+ hero,
+ eventEmitter = new EventEmitter();
+ ```
+
+**സജ്ജീകരണം മനസ്സിലാക്കുക:**
+- ചീട്ട് പിഴവുകൾ ഒഴിവാക്കാൻ മെസ്സേജ് കോൺസ്റ്റന്റുകൾ നിർവചിക്കുന്നു, പുനസംഘടിപ്പിക്കൽ സുഗമമാക്കുന്നു
+- ചിത്രങ്ങൾ, കാൻവാസ് കോൺടെക്സ്, ഗെയിം സ്റ്റേറ്റ് എന്നിവയ്ക്കുള്ള വേരിയബിളുകൾ പ്രഖ്യാപിക്കുന്നു
+- പബ്ലിഷ്-സബ്സ്ക്രൈബ് സിസ്റ്റത്തിനായി ഒരു ആഗോള ഇവന്റ് എമിറ്റർ സൃഷ്ടിക്കുന്നു
+ - **എല്ലാ ഗെയിം ഒബ്ജക്ടുകളും കൈവശം വെയ്ക്കാനായി** ഒരു അറേ ആരംഭിക്കുന്നു
+
+ 4. **ഗെയിം ആരംഭിക്കുക**
+
+ ```javascript
+ function initGame() {
+ gameObjects = [];
+ createEnemies();
+ createHero();
+
+ eventEmitter.on(Messages.KEY_EVENT_UP, () => {
+ hero.y -= 5;
+ });
+
+ eventEmitter.on(Messages.KEY_EVENT_DOWN, () => {
+ hero.y += 5;
+ });
+
+ eventEmitter.on(Messages.KEY_EVENT_LEFT, () => {
+ hero.x -= 5;
+ });
+
+4. **ഗെയിം ലൂപ്പ് ക്രമീകരിക്കുക**
+
+ ഗെയിം ആരംഭിക്കുകയും നല്ല ഇടവേളയിൽ ഗെയിം ലൂപ്പ് ക്രമീകരിക്കുകയും ചെയ്യാൻ `window.onload` ഫംഗ്ഷൻ റിഫാക്ടർ ചെയ്യുക. നിങ്ങൾ ഒരു ലേസർ ബീം കൂടി കൂട്ടിച്ചേർക്കും:
+
+ ```javascript
+ window.onload = async () => {
+ canvas = document.getElementById("canvas");
+ ctx = canvas.getContext("2d");
+ heroImg = await loadTexture("assets/player.png");
+ enemyImg = await loadTexture("assets/enemyShip.png");
+ laserImg = await loadTexture("assets/laserRed.png");
+
+ initGame();
+ const gameLoopId = setInterval(() => {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ drawGameObjects(ctx);
+ }, 100);
+ };
+ ```
+
+ **ഗെയിം ക്രമീകരണത്തെ മനസ്സിലാക്കുക:**
+ - **പേജ് മുഴുവൻ ലോഡ് ആവുന്നത് വരെ കാത്തിരിക്കുന്നു**
+ - **കാൻവാസ് എലമെന്റ് ആയും അതിന്റെ 2D റെന്ററിംഗ് കോൺടെക്സ്റ്റും എടുക്കുന്നു**
+ - **`await` ഉപയോഗിച്ച് എല്ലാ ചിത്രം ആസറ്റുകളും അസിൻക്രോണസ് ആയി ലോഡ് ചെയ്യുന്നു**
+ - **100ms ഇടവേളകളിൽ (10 FPS) ഗെയിം ലൂപ്പ് ആരംഭിക്കുന്നു**
+ - **തൊഴുത്തുന്ന ഓരോ ഫ്രെയിമിലും പൂർണ സ്ക്രീൻ ക്ലിയർ ചെയ്യുകയും पुന:രേഖ ചെയ്യുകയും ചെയ്യുന്നു**
+
+5. **എനിമികളെ ഒരു നിശ്ചിത് ഇടവേളയിൽ സഞ്ചരിക്കാൻ കോഡ് ചേർക്കുക**
+
+ `createEnemies()` ഫംഗ്ഷൻ റിഫാക്ടർ ചെയ്ത് എനിമികൾ സൃഷ്ടിക്കുകയും അവയെ പുതിയ gameObjects ക്ലാസ്-ലേക്ക് ചേർക്കുകയും ചെയ്യുക:
+
+ ```javascript
+ function createEnemies() {
+ const MONSTER_TOTAL = 5;
+ const MONSTER_WIDTH = MONSTER_TOTAL * 98;
+ const START_X = (canvas.width - MONSTER_WIDTH) / 2;
+ const STOP_X = START_X + MONSTER_WIDTH;
+
+ for (let x = START_X; x < STOP_X; x += 98) {
+ for (let y = 0; y < 50 * 5; y += 50) {
+ const enemy = new Enemy(x, y);
+ enemy.img = enemyImg;
+ gameObjects.push(enemy);
+ }
+ }
+ }
+ ```
+
+ **എനമി സൃഷ്ടിയുടെ പ്രവർത്തനം:**
+ - **എനിമികളെ സ്ക്രീന്റിന്റെ മദ്ധ്യത്തിൽ വയ്ക്കാനുള്ള സ്ഥാനം കണക്കാക്കുന്നു**
+ - **നസ്റ്റഡ് ലൂപ്പുകൾ ഉപയോഗിച്ച് എനമികളുടെ ഗ്രിഡ് സൃഷ്ടിക്കുന്നു**
+ - **ഏതൊരു എനമിക്കും എനമി ചിത്രം നിയോഗിക്കുന്നു**
+ - **പ്രതിയൊരു എനമിയും ഗ്ലോബൽ game objects അറേയിൽ ചേർക്കുന്നു**
+
+ കൂടാതെ, ഹീറോയ്ക്ക് സമാനമായ പ്രക്രിയ നടത്താൻ `createHero()` ഫംഗ്ഷൻ ചേർക്കുക.
+
+ ```javascript
+ function createHero() {
+ hero = new Hero(
+ canvas.width / 2 - 45,
+ canvas.height - canvas.height / 4
+ );
+ hero.img = heroImg;
+ gameObjects.push(hero);
+ }
+ ```
+
+ **ഹീറോ സൃഷ്ടിയുടെ പ്രവർത്തനം:**
+ - **ഹീറോയെ സ്ക്രീന്റെ താഴ്വശ മദ്ധ്യത്തിൽ സ്ഥിതിചെയ്യുന്നു**
+ - **ഹീറോ ഒബ്ജക്ടിൽ ഹീറോ ചിത്രം നിയോഗിക്കുന്നു**
+ - **റെന്ററിംഗിനായി ഹീറോ game objects അറേയിൽ ചേർക്കുന്നു**
+
+ ഒടുവിൽ, ഡ്രോയിംഗ് ആരംഭിക്കാൻ `drawGameObjects()` ഫംഗ്ഷൻ ചേർക്കുക:
+
+ ```javascript
+ function drawGameObjects(ctx) {
+ gameObjects.forEach(go => go.draw(ctx));
+ }
+ ```
+
+ **ഡ്രോയിംഗ് ഫംഗ്ഷൻ മനസ്സിലാക്കുക:**
+ - **അറേയിലെ എല്ലാ ഗെയിം ഒബ്ജക്ടുകൾക്കും ഇറ്ററേറ്റ് ചെയ്യുന്നു**
+ - **പ്രതിയൊരു ഒബ്ജക്ടിലും `draw()` മേത്തഡ്സ്സ് വിളിക്കുന്നു**
+ - **ഓബ്ജക്ടുകൾ സ്വയം റെന്റർ ചെയ്യുന്നുണ്ടാകാൻ കാൻവാസ് കോൺടെക്സ്റ്റ് പാസ്സ് ചെയ്യുന്നു**
+
+ ### 🔄 **വിദ്യാഭ്യാസ പരിശോധന**
+ **സമ്പൂർണ ഗെയിം സിസ്റ്റം മനസിലാക്കൽ**: മുഴുവൻ ആർക്കിടെക്ചർ നിങ്ങൾ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു എന്ന് പരിശോധിക്കുക:
+ - ✅ എന്റെറിട്ടൻസ് ഹീറോയും എനമിയും പൊതുവായ GameObject ഗുണങ്ങൾ പങ്കിടാൻ എങ്ങനെ സഹായിക്കുന്നു?
+ - ✅ pub/sub പേടർൺ നിങ്ങളുടെ കോഡ് എങ്ങനെ കൂടുതൽ റক্ষণാധിക്യമായാക്കുന്നു?
+ - ✅ സ്മൂത്ത് ആനിമേഷൻ സൃഷ്ടിക്കുന്നതിന് ഗെയിം ലൂപ്പ് എന്ത് പാതവഹിക്കുന്നു?
+ - ✅ യുസർ ഇൻപുട്ടും ഗെയിം ഒബ്ജക്ട് പെരുമാറ്റവും ഇവന്റ് ലിസണറുകൾ എങ്ങനെ ബന്ധിപ്പിക്കുന്നു?
+
+ **സിസ്റ്റം ഇന്റഗ്രേഷൻ**: നിങ്ങളുടെ ഗെയിം ഇപ്പോൾ കാണിക്കുന്നു:
+ - **ഓബ്ജക്ട്-ഓറിയന്റഡ് ഡിസൈൻ**: സ്പെഷ്യലൈസ്ഡ് എൻറിട്ടൻസ് ഉള്ള ബേസ് ക്ലാസുകൾ
+ - **ഇവന്റ്-ഡ്രിവൻ ആർക്കിടെക്ചർ**: പബ്/സബ് പേടർൺ ലൂസ് കപ്പ്ലിങ്ങിനായി
+ - **ആനിമേഷൻ ഫ്രെയിംവർക്ക്**: സ്ഥിരമായ ഫ്രെയിം അപ്ഡേറ്റുകൾ ഉള്ള ഗെയിം ലൂപ്പ്
+ - **ഇൻപുട്ട് ഹാൻഡ്ലിങ്**: ഡിഫോൾട്ട് പ്രിവെൻഷനോടെ കീബോർഡ് ഇവന്റുകൾ
+ - **ആസറ്റ് മാനേജ്മെന്റ്**: ഇമേജ് ലോഡിങ്ങും സ്പ്രൈറ്റ് റെന്ററിംഗും
+
+ **പ്രൊഫഷണൽ പേടർണുകൾ**: നിങ്ങൾ നടപ്പിലാക്കിയതെന്തെന്നാൽ:
+ - **കാര്യങ്ങൾ വേർതിരിക്കൽ**: ഇൻപുട്ട്, ലൊജിക്സ്, റെന്ററിംഗ് വേർതിരിച്ച് നടത്തുന്നു
+ - **പോളിമോർഫിസം**: എല്ലാ ഗെയിം ഒബ്ജക്ടുകളും പൊതുവായ ഡ്രോയിംഗ് ഇന്റർഫേസ് പങ്കിടുന്നു
+ - **മെസേജ് പാസ്സിംഗ്**: ഘടകങ്ങൾക്കിടയിൽ ശുചിത്വപ്പെട്ട ആശയവിനിമയം
+ - **റിസോഴ്സ് മാനേജ്മെന്റ്**: കാര്യക്ഷമമായ സ്പ്രൈറ്റ്, ആനിമേഷൻ ഹാൻഡ്ലിംഗ്
+
+ നിങ്ങളുടെ എനിമികൾ ഹീറോ സ്പേസ്ഷിപ്പിലേക്ക് മുന്നോട്ടു തുടങ്ങും!
+ }
+ }
+ ```
+
+ and add a `createHero()` function to do a similar process for the hero.
+
+ ```javascript
+ function createHero() {
+ hero = new Hero(
+ canvas.width / 2 - 45,
+ canvas.height - canvas.height / 4
+ );
+ hero.img = heroImg;
+ gameObjects.push(hero);
+ }
+ ```
+
+ ഒടുവിൽ, ഡ്രോയിംഗ് ആരംഭിക്കാൻ `drawGameObjects()` ഫംഗ്ഷൻ ചേർക്കുക:
+
+ ```javascript
+ function drawGameObjects(ctx) {
+ gameObjects.forEach(go => go.draw(ctx));
+ }
+ ```
+
+ നിങ്ങളുടെ എനിമികൾ ഹീറോ സ്പേസഷിപ്പിലേക്ക് മുന്നോട്ടു തുടങ്ങും!
+
+---
+
+## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🚀
+
+ഇതാണ് നിങ്ങളുടെ ഗെയിം മെച്ചപ്പെടുത്താനുള്ള ഒരു ചാലഞ്ച്: പരിധികളും സ്മൂത്ത് കൺട്രോളുകളും ചേർക്കുക. ഇപ്പോൾ നിങ്ങളുടെ ഹീറോ സ്ക്രീനിൽ നിന്നു പറക്കുന്നു, അതും സഞ്ചാരം കുറച്ചേ തിളക്കമുള്ളതാണ്.
+
+**നിങ്ങളുടെ ദൗത്യം:** സ്ക്രീൻ പരിധികൾ നടപ്പിലാക്കി സ്മൂത്ത് മൂവ്മെന്റ് അനുഭവമാക്കുക, ഹീറോ സ്പേസ്ഷിപ്പ് സ്ക്രീനിൽ നിന്ന് പുറത്തു പോകുന്നത് തടയുക. പ്ലേയേഴ്സ് ഒരു അ്റോ കീ അമർത്തുമ്പോൾ കപ്പലുകൾ മുഴുവനായി മൃദുവായി നീങ്ങണമെന്നും ദിവസത്തിലല്ല അതാണ് ലക്ഷ്യം. സ്ക്രീൻ പരിധികളിൽ എത്തുമ്പോൾ ദൃശ്യമാകുന്ന ഫീഡ്ബാക്ക് ചേർക്കാനും പരിഗണിക്കുക – കളിസ്ഥലത്തിന്റെ അറ്റം സൂചിപ്പിക്കുന്ന സൂക്ഷ്മ ദൃശ്യഫലമാണ് അത്.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) കുറിച്ച് കൂടുതൽ പഠിക്കുക.
+
+## 🚀 ചാലഞ്ച്
+
+പദ്ധതികൾ വലുതാകുന്നതോടെ കോഡ് ഓർഗനൈസേഷൻ കൂടുതൽ പ്രധാനമാകുന്നു. നിങ്ങളുടെ ഫയൽ ഫംക്ഷനുകൾ, വേരിയബിളുകൾ, ക്ലാസുകൾ എല്ലാം ഒറ്റക്കെട്ടായി മാറുന്നതു നിങ്ങൾ കാണാം. ഇത് Apollo മിഷൻ കോഡ് എഞ്ചിനീയർമാർ എങ്ങനെ വൺടെമ്റ്റ് സിസ്റ്റങ്ങൾ സ്ഥാപിച്ചുവെന്ന് ഓർമ്മിപ്പിക്കുന്നു.
+
+**നിങ്ങളുടെ ദൗത്യം:**
+സോഫ്റ്റ്വെയർ ആർക്കിടെക്റ്റ് ആയി ചിന്തിക്കുക. ആറ് മാസം കഴിഞ്ഞ് നിങ്ങൾ അല്ലെങ്കിൽ ടീമിലെ മറ്റാരെങ്കിലും ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു എന്ന് എളുപ്പത്തിൽ മനസ്സിലാക്കാൻ എങ്ങനെ കോഡ് ക്രമീകരിക്കും? ഇപ്പോൾ എല്ലാം ഒറ്റ ഫയലിൽ തന്നെയാണ് എങ്കിൽ പോലും നന്നായി ക്രമീകരിക്കാൻ കഴിയുന്ന മാർഗ്ഗങ്ങൾ:
+
+- **സംബന്ധപ്പെട്ട ഫംഗ്ഷനുകൾ കൂട്ടിച്ചേർക്കുക** വ്യക്തമായ കമന്റ് ഹെഡറുകൾ ഉപയോഗിച്ച്
+- **കാര്യങ്ങൾ വേർതിരിക്കുക** - ഗെയിം ലൊജിക്ക് റെന്ററിംഗിൽ നിന്നും വേർതിരിക്കുക
+- **സ്ഥിരമായ നാമകരണം** വേരിയബിളുകൾക്കും ഫംഗ്ഷനുകൾക്കും
+- **മൊഡ്യൂളുകൾ** അല്ലെങ്കിൽ നെയ്സ്പേസുകൾ ഉപയോഗിച്ച് ഗെയിം വ്യത്യസ്ത തലങ്ങൾ ക്രമീകരിക്കുക
+- **പ്രതിപാദനം** പ്രധാന വിഭാഗങ്ങളുടെ ഉദ്ദേശം വിശദീകരിക്കുന്ന ഡോക്യുമെന്റേഷൻ ചേർക്കുക
+
+**പ്രതിബിംബിക്കുന്ന ചോദ്യങ്ങൾ:**
+- മടങ്ങി വന്നപ്പോൾ നിങ്ങളുടെ കോഡിന്റെ ഏത് ഭാഗങ്ങൾ ഏറ്റവും ബുദ്ധിമുട്ടുള്ളതാണ്?
+- മറ്റൊരാൾക്ക് സുലഭമായി സംഭാവന ചെയ്യാൻ എങ്ങനെ കോഡ് ക്രമീകരിക്കാം?
+- പവർ-അപ്പ്സ് അല്ലെങ്കിൽ വ്യത്യസ്ത എനമി തരം ചേർക്കുമ്പോൾ പുതിയ കഷ്ടതകൾ വരുമോ?
+
+## പാഠശേഷി ക്വിസ്
+
+[പാഠശേഷി ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/34)
+
+## റിവ്യൂ & സ്വയം പഠനം
+
+ഞങ്ങൾ യഥാർത്ഥത്തിൽ എല്ലാം നുള്ളിൽ നിന്നും നിർമ്മിച്ചു, പഠിക്കാൻ അതിന് മികച്ചതാണെങ്കിലും ഒരു ചെറിയ രഹസ്യമുണ്ട് – അത്ഭുതകരമായ ജാവാസ്ക്രിപ്റ്റ് ഫ്രെയിംവർക്ക്സ് ഉണ്ട്, നിങ്ങള്ക്ക് ബുദ്ധിമുട്ടുകള് ഒഴിവാക്കാന് സഹായിക്കുന്നതും. അടിസ്ഥാനങ്ങള് നന്നായി മനസ്സിലായ ശേഷം, [ലഭ്യമായവ പരിശോധിക്കുക](https://github.com/collections/javascript-game-engines) ഉചിതമാണ്.
+
+ഫ്രെയിംവർക്ക്സ് നമ്മള്ക്ക് എല്ലാ ടൂളുകളും സ്വന്തം കയ്യൊഴിവിടാതെ തന്നെ ലഭ്യമാകുന്ന ഒരു പെട്ടി പോലെ ആണ്. വിദ്യാഭ്യാസത്തിനും ചുരുക്കിയായവര്ക്കുംفوൾ ഫീച്ചറുകൾ നൽകുന്നു.
+
+**പരിശോധിക്കേണ്ട കാര്യങ്ങൾ:**
+- ഗെയിം എൻജിനുകൾ കോഡ് എങ്ങനെ ക്രമീകരിക്കുന്നു – അവ മനോഹരമായ പേടർണുകൾ ഉപയോഗിക്കുന്നു
+- കാൻവാസ് ഗെയിംസ് മികച്ച രീതിയിൽ നടത്താനുള്ള പെർഫോമൻസ് ട്രിക്കുകൾ
+- മോഡേൺ ജാവാസ്ക്രിപ്റ്റ് ഫീച്ചറുകൾ കോഡ് കൂടുതൽ ശുചിത്വം കൂടിയതും പരിചരണയോഗ്യമായതും ആക്കുന്നു
+- ഗെയിം ഒബ്ജക്ടുകൾക്കും അവയുടെ ബന്ധങ്ങൾക്കും വ്യത്യസ്ത സമീപനങ്ങൾ
+
+## 🎯 നിങ്ങളുടെ ഗെയിം ആനിമേഷൻ മാസ്ടറി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title ഗെയിം അനിമേഷൻ & ഇന്ററാക്ഷൻ പഠന പുരോഗതി
+
+ section ഘടകങ്ങൾ ബേസിക് മൂവ്മെന്റ് (20 മിനിറ്റ്)
+ Animation Principles: ഫ്രെയിം ആധാരിത അനിമേഷൻ
+ : സ്ഥാനം അപ്ഡേറ്റുകൾ
+ : സഹചാര ക്രമരേഖകൾ
+ : സുഖപ്രദമായ ചലനം
+
+ section ഇവന്റ് സിസ്റ്റങ്ങൾ (25 മിനിറ്റ്)
+ User Input: കീബോർഡ് ഇവന്റ് കൈകാര്യം
+ : ഡീഫോൾട്ട് പെരുമാറ്റം തടയൽ
+ : ഇവന്റ് വസ്തു ഗുണങ്ങൾ
+ : വിൻഡോ-നിരീക്ഷണം
+
+ section ഗെയിം ആർക്കിടെക्चर (30 മിനിറ്റ്)
+ Object Design: വംശപരമ്പര പാറ്റേണുകൾ
+ : അടിസ്ഥാന ക്ലാസ് സൃഷ്ടി
+ : പ്രത്യേകിച്ച് പെരുമാറ്റങ്ങൾ
+ : പൊളിമോർഫിക് ഇന്ററഫേസുകൾ
+
+ section കമ്യൂണിക്കേഷൻ പാറ്റേണുകൾ (35 മിനിറ്റ്)
+ Pub/Sub Implementation: ഇവന്റ് എമിറ്ററുകൾ
+ : സന്ദേശ സ്ഥിരങ്ങൾ
+ : ലൂസ് കപ്പ്ലിംഗ്
+ : സിസ്റ്റം സംയോജനം
+
+ section ഗെയിം ലൂപ്പ് മാസ്റ്ററി (40 മിനിറ്റ്)
+ Real-time Systems: ഫ്രെയിം നിരക്ക് നിയന്ത്രണം
+ : അപ്ഡേറ്റ്/റെൻഡർ ചക്രം
+ : നില മാനേജ്മെന്റ്
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+
+ section ആഗാധ സാങ്കേതികതകൾ (45 മിനിറ്റ്)
+ Professional Features: കൂട്ടിയിടിപ്പ് കണ്ടെത്തൽ
+ : ഭൗതിക സിമുലേഷൻ
+ : സ്റ്റേറ്റ് മെഷീനുകൾ
+ : ഘടക സിസ്റ്റങ്ങൾ
+
+ section ഗെയിം എഞ്ചിൻ ആശയങ്ങൾ (1 ആഴ്ച)
+ Framework Understanding: എന്റിറ്റി-ഘടക സിസ്റ്റങ്ങൾ
+ : സീൻ ഗ്രാഫുകൾ
+ : ആസസ്റ്റ് പൈപ്പ്ലൈൻകൾ
+ : പ്രകടനം പ്രൊഫൈലിംഗ്
+
+ section പ്രൊഡക്ഷൻ കഴിവുകൾ (1 മാസം)
+ Professional Development: കോഡ് ഓർഗനൈസേഷൻ
+ : ടീം സഹകാര്യ
+ : ടെസ്റ്റിങ് തന്ത്രങ്ങൾ
+ : ഡിപ്ലോയ്മെന്റ് മെച്ചപ്പെടുത്തൽ
+```
+### 🛠️ നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് ടൂൾകിറ്റ് സംഗ്രഹം
+
+ഈ പಾಠം പൂർത്തിയായ ശേഷം നിങ്ങൾ മാസ്റ്റർ ചെയ്തിട്ടുണ്ട്:
+- **ആനിമേഷൻ സ 원പ്രിൻസിപ്പിൾസ്**: ഫ്രെയിം അടിസ്ഥാനമാക്കിയ സഞ്ചാരവും സ്മൂത് ട്രാൻസിഷൻഉം
+- **ഇവന്റ് ഡ്രിവൻ പ്രോഗ്രാമിംഗ്**: കീബോർഡ് ഇൻപുട്ട് ഹാൻഡ്ലിംഗ് കൃത്യമായ ഇവന്റ് മാനേജ്മെന്റോടെ
+- **ഓബ്ജക്ട് ഓറിയന്റഡ് ഡിസൈൻ**: എൻറിട്ടൻസ് ഹിയരാർകികളും പോളിമോർഫിക് ഇന്റർഫേസുകളും
+- **കമ്മ്യൂണിക്കേഷൻ പേടർണുകൾ**: പബ്/സബ് ആർക്കിടെക്ചർ റক্ষণാധിക്യത്തിന്
+- **ഗെയിം ലൂപ്പ് ആർക്കിടെക്ചർ**: റിയൽ-ടൈം അപ്ഡേറ്റ് & റെന്ററിംഗ് സൈക്കിളുകൾ
+- **ഇൻപുട്ട് സിസ്റ്റംസ്സ്**: യൂസർ നിയന്ത്രണം നോട്ിഫ് ചെയ്യപ്പെട്ട പെരുമാറ്റത്തോടെ
+- **ആസിറ്റ് മാനേജ്മെന്റ്**: സ്പ്രൈറ്റ് ലോഡിങ്ങും കാര്യക്ഷമമായ റെന്ററിംഗ് സാങ്കേതികവിദ്യയും
+
+### ⚡ **അടുത്ത 5 മിനിറ്റ് ചെയ്തേക്കാവുന്നവ**
+- [ ] ബ്രൗസർ കോൺസോൾ തുറന്ന് `addEventListener('keydown', console.log)` പരീക്ഷിക്കുക കീബോർഡ് ഇവന്റ് കാണാനായി
+- [ ] ഒരു ലഘു div എലമെന്റ് സൃഷ്ടിച്ച് അറായികങ്ങളാൽ ചലിപ്പിക്കുക
+- [ ] `setInterval` ഉപയോഗിച്ച് തുടർച്ചയായ സഞ്ചാരം സൃഷ്ടിക്കുക
+- [ ] `event.preventDefault()` ഉപയോഗിച്ച് ഡിഫോൾട്ട് പെരുമാറ്റം തടയാൻ ശ്രമിക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നേടാൻ സാധിക്കുന്നവ**
+- [ ] പാഠശേഷി ക്വിസ് പൂർത്തിയാക്കി ഇവന്റ് ഡ്രിവൻ പ്രോഗ്രാമിംഗ് മനസ്സിലാക്കുക
+- [ ] ഫുൾ കീബോർഡ് കൺട്രോളോടുകൂടിയ ഹീറോ സ്പേസ്ഷിപ്പ് നിർമ്മിക്കുക
+- [ ] സ്മൂത് എനമി മൂവ്മെന്റ് പാറ്റേണുകൾ നടപ്പിലാക്കുക
+- [ ] ഗെയിം ഒബ്ജക്ടുകൾ സ്ക്രീൻ കൂടെ പോകുന്നത് തടയാൻ പരിധി ചേർക്കുക
+- [ ] ലഘു കോൾഷൻ കണ്ടക്ഷൻ സൃഷ്ടിക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ച നീണ്ട ആനിമേഷൻ യാത്ര**
+- [ ] പൂർണ്ണ സ്പേസ് ഗെയിം സൃഷ്ടിച്ച് നന്നായി മൂവ്മെന്റ്, ഇന്ററാക്ഷനുകൾ ചേർക്കുക
+- [ ] കർവ്സ്, ആക്സലറേഷൻ, ഫിസിക്സ് പോലുള്ള മൂവ്മെന്റ് പാറ്റേണുകൾ ചേർക്കുക
+- [ ] സ്മൂത്ത് ട്രാൻസിഷനുകളും ഇസി ഫങ്ഷനുകളും നടപ്പിലാക്കുക
+- [ ] പാർട്ടിൾ എഫക്റ്റുകളും ദൃഷ്ടിമാതൃക ഫീഡ്ബാക്ക് സംവിധാനം നിർമ്മിക്കുക
+- [ ] 60fps കളി അനുഭവം ഉറപ്പു വരുത്തുന്നതിനുള്ള പർഫോമൻസ് ഒപ്റ്റിമൈസേഷന് ചെയ്യുക
+- [ ] മൊബൈൽ ടച്ച് കോൺട്രോളുകളും പ്രതികരണശേഷിയുള്ള ഡിസൈനും ചേർക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസം നീണ്ട ഇൻററാക്ടീവ് ഡെവലപ്പ്മെന്റ്**
+- [ ] സങ്കീർണ്ണമായ ഇൻററാക്ടീവ് ആപ്ലിക്കേഷനുകൾ വികസിപ്പിക്കുക
+- [ ] GSAP പോലുള്ള ആനിമേഷൻ ലൈബ്രററികള് പഠിക്കുക അല്ലെങ്കിൽ സ്വന്തം ആനിമേഷൻ എൻജിൻ സൃഷ്ടിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഗെയിം ഡെവലപ്പ്മെന്റിനും ആനിമേഷനും സംഭാവന നൽകുക
+- [ ] ഗ്രാഫിക്സ് ബലിച്ചുള്ള പ്രൊഫോമൻസ് ഒപ്റ്റിമൈസേഷൻ മാസ്റ്റർ ചെയ്യുക
+- [ ] ഗെയിം ഡെവലപ്പ്മെന്റ്, ആനിമേഷൻ സംബന്ധിച്ച വിദ്യാഭ്യാസ ഉള്ളടക്കം ഒരുക്കുക
+- [ ] ആധുനിക ഇന്ററാക്ടീവ് പ്രോഗ്രാമിങ്ങ് കഴിവുകൾ പ്രദർശിപ്പിക്കുന്ന പോർട്ട്ഫോളിയോ നിർമ്മിക്കുക
+
+**യാഥാർത്ഥ ലോക പ്രയോഗങ്ങൾ**: നിങ്ങളുടെ ഗെയിം ആനിമേഷൻ കഴിവുകൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **ഇന്ററാക്ടീവ് വെബ് ആപ്ലിക്കേഷനുകൾ**: ഡൈനാമിക് ഡാഷ്ബോർഡുകളും റിയൽ-ടൈം ഇന്റർഫേസുകളും
+- **ഡാറ്റാ വിഷ്വലൈസേഷൻ**: ആനിമേറ്റഡ് ചാർട്ടുകളും ഇന്ററാക്ടീവ് ഗ്രാഫിക്ക്സും
+- **ശിക്ഷണസോഫ്റ്റ്വేర్**: ഇന്ററാക്ടീവ് സിമുലേഷൻകളും പഠന സഹായികളും
+- **മൊബൈൽ വികസനം**: ടച്ച് അടിസ്ഥാനമാക്കിയ ഗെയിമുകളും പ്രയോഗങ്ങളും
+- **ഡെസ്ക്ടോപ്പ് ആപ്ലിക്കേഷനുകൾ**: ഇലക്ട്രോൺ ആപ്ലിക്കേഷനുകൾ സ്മൂത്ത് ആനിമേഷനുകളോടെ
+- **വെബ് ആനിമേഷനുകൾ**: CSS, ജാവാസ്ക്രിപ്റ്റ് ആനിമേഷൻ ലൈബ്രററികൾ
+
+**പ്രൊഫഷണൽ കഴിവുകൾ**: നിങ്ങൾ ഇനി:
+- **ആർക്കിടെക്റ്റ് ചെയ്യാൻ** ഇവന്റ്-ഡ്രിവൻ സിസ്റ്റങ്ങൾ വലിയ തലത്തിൽ വിജയകരമായി
+- **സൃഷ്ണീകരിക്കാൻ** ഗണിത സ 원പ്രിൻസിപ്പിൾസ് ഉപയോഗിച്ച് സ്മൂത്ത് ആനിമേഷനുകൾ
+- **ഡീബഗ് ചെയ്യാൻ** ബ്രൗസർ ഡെവലപ്പർ ടൂൾസ് ഉപയോഗിച്ച് സങ്കീർണ്ണ ഇന്ററാക്ഷൻ സിസ്റ്റങ്ങൾ
+- **ഒപ്റ്റിമൈസ് ചെയ്യാൻ** വ്യത്യസ്ത ഉപകരണങ്ങൾക്കും ബ്രൗസറുകൾക്കും അനുയോജ്യമായി ഗെയിം പ്രകടനം
+- **ഡിസൈൻ ചെയ്യാൻ** തെളിയിച്ച പേടർണുകൾ ഉപയോഗിച്ച് പരിചരണയോഗ്യമായ കോഡ് ഘടനകൾ
+
+**ഗെയിം ഡെവലപ്പ്മെന്റ് ആശയങ്ങൾ മാസ്റ്റർ ചെയ്തിരിക്കുന്നു**:
+- **ഫ്രെയിം റേറ്റ് മാനേജ്മെന്റ്**: FPSയും ടൈമിങ് നിയന്ത്രണങ്ങളുടെയും മനസ്സിലാക്കൽ
+- **ഇൻപുട്ട് ഹാൻഡ്ലിങ്**: പ്ലാറ്റ്ഫോം അതിരുകൾ മറികടന്ന് കീബോർഡ്, ഇവന്റ് സിസ്റ്റങ്ങൾ
+- **ഓബ്ജക്ട് ലൈഫ്സൈക്കിൾ**: സൃഷ്ടി, അപ്ഡേറ്റ്, നശിക്കൽ പേടർണുകൾ
+- **സ്റ്റേറ്റ് സിങ്ക്രണൈസേഷൻ**: ഫ്രെയിമുകൾക്കിടയിൽ ഗെയിം സ്റ്റേറ്റ് സ്ഥിരത ഉറപ്പാക്കുന്നു
+- **ഇവന്റ് ആർക്കിടെക്ചർ**: ഗെയിം സിസ്റ്റങ്ങളിൽത്തുള്ള വിച്ഛേദിച്ച ആശയവിനിമയം
+
+**അടുത്ത നില**: നിങ്ങൾ തയ്യാറാണ് കോൾഷൻ കണ്ടെത്തൽ, സ്കോറിംഗ് സിസ്റ്റങ്ങൾ, ശബ്ദപ്രഭാഷണം എന്നിവ ചേർക്കാൻ അല്ലെങ്കിൽ Phaser, Three.js പോലുള്ള ആധുനിക ഗെയിം ഫ്രെയിംവർക്സ് അന്വേഷിക്കാൻ!
+
+🌟 **അധികാരം നേടിയത്**: പ്രൊഫഷണൽ ആർക്കിടെക്ചർ പേടർണുകൾ ഉൾക്കൊള്ളുന്ന ഒരു സമ്പൂർണ്ണ ഇന്ററാക്ടീവ് ഗെയിം സിസ്റ്റം നിങ്ങൾ നിർമ്മിച്ചിട്ടുണ്ട്!
+
+## അസൈൻമെന്റ്
+
+[Comment your code](assignment.md)
+
+---
+
+
+**വിമർശന കുറിപ്പ്**:
+ഈ പ്രമാണം AI പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. നാം ശരിയായി വിവർത്തനം ചെയ്യാൻ ശ്രമിച്ചെങ്കിലും, സ്വയമാറ്റ അനువാദങ്ങളിൽ തെറ്റുകളും കൃത്യതയില്ലായ്മകളും ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അതിന്റെ യഥാർത്ഥ ഭാഷയിലുള്ള പ്രമാണം അദ്ധിഷ്ഠിത സ്രോതസ്സായി പരിഗണിക്കണം. അനിവാര്യ വിവരങ്ങൾക്കായി, പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ നിർദ്ദേശിക്കുന്നു. ഈ പരിഭാഷ ഉപയോഗത്തിൽ നിന്നുള്ള ഏതൊരു തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ബാധ്യസ്ഥരാകില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/3-moving-elements-around/assignment.md b/translations/ml/6-space-game/3-moving-elements-around/assignment.md
new file mode 100644
index 000000000..2ec0f3120
--- /dev/null
+++ b/translations/ml/6-space-game/3-moving-elements-around/assignment.md
@@ -0,0 +1,38 @@
+
+# നിങ്ങളുടെ കോഡ് കമന്റ് ചെയ്യുക
+
+## നിർദ്ദേശങ്ങൾ
+
+ശുദ്ധമായ, നന്നായി രേഖപ്പെടുത്തിയ കോഡ് നിങ്ങളുടെ പ്രോജക്റ്റുകൾ പരിപാലിക്കുകയും പങ്കിടുകയും ചെയ്യുന്നതിന് അത്യന്താപേക്ഷിതമാണ്. ഈ അസൈൻമെന്റിൽ, പ്രൊഫഷണൽ ഡെവലപ്പർമാരുടെ ഏറ്റവും 중요한 ശീലങ്ങളിൽ ഒന്നായ നിങ്ങളുടെ കോഡിന്റെ ഉദ്ദേശവും പ്രവർത്തന ശേഷിയും വിശദീകരിക്കുന്ന വ്യക്തമായ, സഹായകരമായ കമന്റുകൾ എഴുതുന്നതിൽ നിങ്ങൾ പ്രായോഗികമാകും.
+
+നിങ്ങളുടെ ഗെയിം ഫോൾഡറിലെ നിലവിലുള്ള `app.js` ഫയൽ പരിശോധിക്കുക, അതിൽ കമന്റുകൾ ചേർക്കാനും അവ ശുചിത്വമാക്കാനും മാർഗങ്ങൾ കണ്ടെത്തുക. കോഡ് നിയന്ത്രണം വിട്ടുപോകുന്നത് വളരെ എളുപ്പമാണ്, ഇപ്പോൾ കമന്റുകൾ ചേർത്തുകൊണ്ട് വായിക്കാൻ എളുപ്പമുള്ള കോഡ് ഉറപ്പാക്കുന്നത് നന്ന് അവസരം.
+
+**നിങ്ങളുടെ ചുമതലയിൽ ഉൾപ്പെടുന്നതുഃ**
+- കോഡിലെ ഓരോ പ്രധാന ഭാഗവും എന്ത് ചെയ്യുന്നതാണെന്ന് വിശദീകരിക്കുന്ന **കമന്റുകൾ ചേർക്കുക**
+- ഫങ്ഷനുകളുടെ ഉദ്ദേശവും പാരാമീറ്ററുകളും വ്യക്തമായി വിവരിക്കുന്ന **ഫങ്ഷനുകൾ രേഖപ്പെടുത്തുക**
+- കോഡ് **താരതമ്യബദ്ധമായി ലജിക്കൽ ബ്ലോക്കുകളിൽ** ഓർഗനൈസ് ചെയ്യുക, വിഭാഗ തലക്കെട്ടുകൾ ഉപയോഗിച്ച്
+- ഉപയോഗിക്കാത്തതായി കാണുന്ന അല്ലെങ്കിൽ ആവർത്തനമുള്ള കോഡ് **തെരെ്ത്തുക**
+- മാറ്റങ്ങൾക്കായി സുസ്ഥിരമായ പേരിടൽ സമ്പ്രദായം **ഉപയോഗിക്കുക**
+
+## റൂബ്രിക്
+
+| മാനദണ്ഡങ്ങൾ | മികച്ചത് | മതിയായത് | മെച്ചപ്പെടുത്തേണ്ടത് |
+| -------- | --------- | -------- | ----------------- |
+| **കോഡ് രേഖപ്പെടുത്തൽ** | `app.js` കോഡ് മുഴുവൻ പ്രധാന ഭാഗങ്ങൾക്കും ഫങ്ഷനുകൾക്കും വ്യക്തവും സഹായകരവുമായ വിശദവിവരണങ്ങളോടൊപ്പം കമന്റ് ചെയ്തിട്ടുണ്ടാകണം | `app.js` കോഡിൽ അധികাংশം ഭാഗങ്ങൾക്കായി അടിസ്ഥാന വിശദീകരണങ്ങളോടെ മതിയായ കമന്റ് ഉണ്ടായിരിക്കണം | `app.js` കോഡിൽ വളരെ കുറവ് കമന്റുകൾ മാത്രം ഉണ്ടാകാനും വ്യക്തമായ വിശദീകരണം ഇല്ലാതിരിക്കാം |
+| **കോഡ് ഓർഗനൈസേഷൻ** | കോഡ് ലജിക്കൽ ബ്ലോക്കുകളായി വിഭജിച്ച് സ്പഷ്ടമായ വിഭാഗ തലക്കെട്ടുകളും സ്ഥിരതയുള്ള ഘടനയും ഉള്ളതായിരിക്കും | കോഡിൽ ബന്ധപ്പെട്ട ഫംഗ്ഷനുകൾ അടിസ്ഥാന ഗ്രൂപ്പിംഗോടെ കുറച്ചു ഓർഗനൈസേഷൻ ഉള്ളതായിരിക്കും | കോഡ് ക്രമരഹിതമായും പിന്തുടരാൻ പ്രയാസമുള്ളതുമാകും |
+| **കോഡ് ഗുണനിലവ്** | എല്ലാ വെരിയബിളുകളുടെയും ഫങ്ഷനുകളുടെയും പേരിടൽ വിശദമായും സമ്പ്രദായബദ്ധവും, ഉപയോഗിക്കാത്ത കോഡ് ഇല്ല, സ്ഥിരതയുള്ള രീതി പാലിക്കുന്നു | അധികാംശ കോഡ് നല്ല പേരിടലുകൾ പാലിക്കുന്നതായി, കുറഞ്ഞ ഉപയോഗിക്കാത്ത കോഡും ഉണ്ട് | വേരിയബിളുകളുടെ പേരുകൾ അസ്പഷ്ടം, ഉപയോഗിക്കാത്ത കോഡ് ഉള്ളത്, ശൈലിയിൽ അനിയമിതത്വം |
+
+---
+
+
+**പരിസ്ഥിതി**:
+ഈ ദസ്താവേജ് AI വിവർത്തന സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്ക് പ്രയത്നിക്കുന്നുണ്ടെങ്കിലും, ഓട്ടോമാറ്റഡ് വിവർത്തനങ്ങളിൽ പിശകുകളോ അപ്രമാദങ്ങളോ ഉണ്ടാവാൻ സാധ്യതയുള്ളതാണ്. അസൽ പ്രമാണം അതിന്റെ സ്വന്തം ഭാഷയിൽ ആണ് ഔദ്യോഗിക ഉറവിടം എന്നാണ് കരുതുന്നത്. നിർണായക വിവരങ്ങളേക്കുറിച്ച് പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന എന്തെങ്കിലും തെറ്റിദ്ധാരണകളോ വ്യാഖ്യാന വ്യത്യാസങ്ങളോ için ഞങ്ങൾ ഉത്തരവാദിത്വം കൈക്കൊള്ളുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/4-collision-detection/README.md b/translations/ml/6-space-game/4-collision-detection/README.md
new file mode 100644
index 000000000..437485cc8
--- /dev/null
+++ b/translations/ml/6-space-game/4-collision-detection/README.md
@@ -0,0 +1,776 @@
+
+# ഒരു സ്പെയ്സ് ഗെയിം നിർമ്മിക്കൽ ഭാഗം 4: ലേസർ ചേർക്കൽ ഒപ്പം ഘർഷണം കണ്ടെത്തൽ
+
+```mermaid
+journey
+ title നിങ്ങളുടെ കൂട്ടിയിടിപ്പ് കണ്ടെത്തൽ യാത്ര
+ section ഫിസിക്സ് അടിസ്ഥാനങ്ങൾ
+ വൃത്താകൃതികൾ മനസ്സിലാക്കുക: 3: Student
+ ഇടപെടൽ ഗണിതം പഠിക്കുക: 4: Student
+ കോഓർഡിനേറ്റ് സിസ്റ്റങ്ങൾ പിടിച്ചുപറി: 4: Student
+ section ഗെയിം മെക്കാനിക്സ്
+ ലേസർ ഫയർ ചെയ്യുന്നതു നടപ്പിലാക്കുക: 4: Student
+ ഒബ്ജക്റ്റ് ജീവിതചക്രം ചേർക്കുക: 5: Student
+ കൂട്ടിയിടിപ്പ് നിയമങ്ങൾ സൃഷ്ടിക്കുക: 5: Student
+ section സിസ്റ്റം ഇന്റഗ്രേഷൻ
+ കൂട്ടിയിടിപ്പ് കണ്ടെത്തൽ പ്രാവർത്തികമാക്കുക: 5: Student
+ കാര്യക്ഷമത оптимൈസ്ചെയ്യുക: 5: Student
+ ഇന്ററാക്ഷൻ സിസ്റ്റങ്ങൾ പരീക്ഷിക്കുക: 5: Student
+```
+## മുൻപുള്ള ക്ലാസിനുള്ള ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/35)
+
+സ്റ്റാർ വാർസിലെ ലൂക്കിന്റെ പ്രോട്ടോൺ ടോർപ്പിഡോകൾ ഡെത്ത് സ്റ്റാറിന്റെ എക്സോസ്റ്റ് പോർട്ടിൽ എപ്പോൾ തൊട്ടു എന്ന് ചിന്തിക്കുക. ആ കൃത്യമായ ഘർഷണം ആലയ്ക്കു വിധി മാറ്റി! ഗെയിമുകളിൽ, ഘർഷണം കണ്ടെത്തൽ അതുപോലെ പ്രവർത്തിക്കുന്നു - ഒബ്ജക്റ്റുകൾ എപ്പോൾ ഇടപെടുകയാണ് എന്നതും തുടർന്ന് എന്താകും എന്നതും നിർണ്ണയിക്കുന്നു.
+
+ഈ പാഠത്തിൽ, നിങ്ങളുടെ സ്പെയ്സ് ഗെയിമിലേക്ക് ലേസർ അമ്പുകൾ ചേർക്കുകയും ഘർഷണം കണ്ടെത്തൽ നടപ്പിലാക്കുകയും ചെയ്യും. NASAയുടെ മിഷൻ പ്ലാനർമാർ ബ്ളാസ്റ്റ് കഷണങ്ങൾ ഒഴിവാക്കി ബഹിരാകാശക്കപ്പലുകളുടെ ട്രാജക്ടറികൾ കണക്കാക്കുന്നതുപോലെ, നിങ്ങൾ ഗെയിം ഒബ്ജക്റ്റുകൾ എപ്പോൾ ഒട്ടും പരം സമാന്തരിക്കുന്നു എന്ന് കണ്ടെത്താൻ പഠിക്കും. നാം ഇത് ക്രമമായ ഘട്ടങ്ങളായി വിഭജിക്കും.
+
+അവസാനിപ്പിച്ചപ്പോൾ, ലേസറുകൾ എനിമികൾ നശിപ്പിക്കുകയും ഘർഷണങ്ങൾ ഗെയിം ഇവന്റുകൾ പ്രേരിപ്പിക്കുകയും ചെയ്യുന്ന ഫംഗ്ഷണൽ കോംബാറ്റ് സിസ്റ്റം ഉണ്ടാകും. ഇതുപോലുള്ള ഘർഷണ സിദ്ധാന്തങ്ങൾ ഭൗതിക സിമുലേഷനുകളിൽ നിന്നുയർന്ന് ഇന്ററാക്ടീവ് വെബ് ഇന്റർഫേസുകൾ വരെ എല്ലായിടത്തും ഉപയോഗിക്കുന്നു.
+
+```mermaid
+mindmap
+ root((സഖ്യനിർണയം))
+ Physics Concepts
+ ചതുറ്റളവുകളുടെ അതിരുകൾ
+ ഒത്തൊരുമയുടെ പരീക്ഷണങ്ങൾ
+ കോഓർഡിനേറ്റ് സിസ്റ്റങ്ങൾ
+ വേർതിരിവ് തർകങ്ങൾ
+ Game Objects
+ ലേസർ പ്രൊജക്ടൈലുകൾ
+ ശത്രുവിന്റെ കപ്പലുകൾ
+ ഹീറോ കഥാപാത്രം
+ സഖ്യ മേഖലകൾ
+ Lifecycle Management
+ വസ്തു സൃഷ്ടി
+ ചലനം تازهപ്പെടുത്തലുകൾ
+ നശീകരണ അടയാളങ്ങൾ
+ മെമ്മറി ശുചീകരണം
+ Event Systems
+ കീബോർഡ് ഇൻപുട്ട്
+ സഖ്യ ഇവന്റുകൾ
+ ഗെയിം സ്റ്റേറ്റ് മാറ്റങ്ങൾ
+ ഓഡിയോ/വിസ്വൽ ഇഫക്റ്റുകൾ
+ Performance
+ ഫലപ്രദമായ ആൽഗോരിതങ്ങൾ
+ ഫ്രെയിം നിരക്ക് ഓപ്റ്റിമൈസേഷൻ
+ മെമ്മറി മാനേജ്മെന്റ്
+ സ്ഥലം വിഭജനം
+```
+✅ ഏറ്റവും ആദ്യം എഴുതിയ കമ്പ്യൂട്ടർ ഗെയിമിനെ കുറിച്ച് ചെറിയൊരു റിസേർച്ച്ച് ചെയ്യുക. അതിന്റെ ഫംഗ്ഷണാലിറ്റി എന്തായിരുന്നു?
+
+## ഘർഷണം കണ്ടെത്തൽ
+
+ഘർഷണം കണ്ടെത്തൽ Apollo ല്യൂണാർ മോഡ്യൂളിലെ പ്രോക്സിമിറ്റി സെൻസറുകൾ പോലെ പ്രവർത്തിക്കുന്നു - കണുകൂടി ദൂരം പരിശോധിച്ച് ഒബ്ജക്റ്റുകൾ വളരെ അടുത്തുവന്നാൽ അലർട്ട് നൽകുന്നു. ഗെയിമുകളിൽ, ഈ സിസ്റ്റം ഒബ്ജക്റ്റുകൾ എപ്പോൾ ഇടപെടുകയാണ് എന്ന് നിർണ്ണയിക്കുകയും തുടർന്ന് എന്താകണം എന്ന് നിബന്ധിക്കുന്നു.
+
+നാം ഉപയോഗിക്കുന്ന സമീപനം എല്ലാ ഗെയിം ഒബ്ജക്റ്റുകളെയും ഒരു ചതുരേക്കോണം (_rectangle_) ആയി കാണുന്നു, വിമാന ട്രാഫിക് നിയന്ത്രണ സിസ്റ്റങ്ങൾ എയർക്രാഫ്റ്റ് ട്രാക്ക് ചെയ്യുന്നതുപോലെ ലളിതമായ ജ്യാമിതീയ ആകൃതികൾ ഉപയോഗിക്കുന്നത് പോലെ. ഈ ചതുരേക്കോണ പద్ధതി എളുപ്പമുള്ളതെങ്കിലും കണക്ക് കാര്യക്ഷമവും കൂടുതലായി ഗെയിം ദ്രശ്യങ്ങളിൽ മികച്ചതാണ്.
+
+### ചതുരേകോണ പ്രതിനിധാനം
+
+എല്ലാ ഗെയിം ഒബ്ജക്റ്റിനും കോർഡിനേറ്റ് അതിരുകൾ വേണം, മാർസ് പാത്ത്ഫൈൻഡർ റോവർ മാരിയൻ ഭൂപ്രകൃതിയിലെ സ്ഥാനം മാപ്പ് ചെയ്തതുപോലെ. അതിരിനിർവ്വചനം ഇപ്രകാരം:
+
+```mermaid
+flowchart TD
+ A["🎯 ഗെയിം ഒബ്ജക്ട്"] --> B["📍 സ്ഥാനം (x, y)"]
+ A --> C["📏 വലിപ്പങ്ങൾ (വീതി, ഉയരം)"]
+
+ B --> D["മുകൾ: y"]
+ B --> E["ഇടത്: x"]
+
+ C --> F["താഴെ: y + ഉയരം"]
+ C --> G["വലത്: x + വീതി"]
+
+ D --> H["🔲 ചതുരാകൃതിയുടെ പരിധികൾ"]
+ E --> H
+ F --> H
+ G --> H
+
+ H --> I["സംഘർഷ കണ്ടെത്തൽ തയാറാണ്"]
+
+ style A fill:#e3f2fd
+ style H fill:#e8f5e8
+ style I fill:#fff3e0
+```
+```javascript
+rectFromGameObject() {
+ return {
+ top: this.y,
+ left: this.x,
+ bottom: this.y + this.height,
+ right: this.x + this.width
+ }
+}
+```
+
+**ഇത് വിഭജിച്ചാൽ:**
+- **മുകളിൽ ഉള്ള അതിരു**: നിങ്ങൾക്ക് ഒബ्जക്റ്റ് ഉയരം ആരംഭിക്കുന്ന y- സ്ഥാനം
+- **ഇടത് അതിരു**: ദിശാനുയായ ഫലകം ആരംഭിക്കുന്ന x- സ്ഥാനം
+- **താഴെ അതിരു**: y-സ്ഥാനത്തേക്ക് ഉയരം ചേർക്കുക - ഒടുവിൽ എത്തുന്ന സ്ഥലം
+- **വലത് അതിരു**: x-സ്ഥാനത്തേക്ക് വീതി ചേർക്കുക - സമ്പൂർണ്ണ അതിരാണു ലഭിച്ചത്
+
+### ഒട്ടുമെത്തിയാൽ പ്രവർത്തിക്കുന്ന ആൽഗോറിതം
+
+ചതുരേക്കോണ ഒട്ടുമെത്തൽ കണ്ടെത്തൽ ഹൈബിൾ സ്പേസ് ടെലിസ്കോപ് ആകാശ വസ്തുക്കൾ ഒട്ടുമെത്തിച്ചിട്ടുണ്ടോ എന്ന് പരിശോധിക്കുന്ന പ്രക്രിയയിലേതുപോലെ ആണ് പ്രവർത്തിക്കുന്നത്. ഈ ആൽഗോറിതം ഓർമ്മപ്പെടുത്തുന്നു രാജ്ഡാർ സമ്പ്രദായം:
+
+```mermaid
+flowchart LR
+ A["ചതുരഭുജം 1"] --> B{"വ്യത്യാസ പരിശോധനകൾ"}
+ C["ചതുരഭുജം 2"] --> B
+
+ B --> D["R2 ഇടത് > R1 വലത്?"]
+ B --> E["R2 വലതത് < R1 ഇടത്?"]
+ B --> F["R2 മുകളിൽ > R1 താഴെയാണ്?"]
+ B --> G["R2 താഴെ < R1 മുകളിൽ?"]
+
+ D --> H{"ഏത് ശരിയോ?"}
+ E --> H
+ F --> H
+ G --> H
+
+ H -->|അതെ| I["❌ സ്പർശനം ഇല്ല"]
+ H -->|ഇല്ല| J["✅ സ്പർശനം കണ്ടെത്തി"]
+
+ style B fill:#e3f2fd
+ style I fill:#ffebee
+ style J fill:#e8f5e8
+```
+```javascript
+function intersectRect(r1, r2) {
+ return !(r2.left > r1.right ||
+ r2.right < r1.left ||
+ r2.top > r1.bottom ||
+ r2.bottom < r1.top);
+}
+```
+
+**വിവരണമടിയിൽ വിലയിരുത്തൽ ചെയ്യുന്നത്:**
+- റെക്റ്റാംഗിൾ 2 പൂർണമായും റെക്റ്റാംഗിൾ 1-ന്റെ വലത് ഭാഗത്താണോ?
+- റെക്റ്റാംഗിൾ 2 പൂർണമായും റെക്റ്റാംഗിൾ 1-ന്റെ ഇടത് ഭാഗത്താണോ?
+- റെക്റ്റാംഗിൾ 2 പൂർണമായും റെക്റ്റാംഗിൾ 1-ന്റെ താഴെ ഭാഗത്താണോ?
+- റെക്റ്റാംഗിൾ 2 പൂർണമായും റെക്റ്റാംഗിൾ 1-ന്റെ മേൽ ഭാഗത്താണോ?
+
+ഇവയിൽ ഒന്നും ശരിയല്ലെങ്കിൽ, റെക്റ്റാംഗിളുകൾ ഒട്ടുമെത്തിച്ചിരിക്കണം. ഇത് തന്നെയാണ് റഡാർ ഓപ്പറേറ്റർമാർ വിമാനങ്ങൾ സുരക്ഷിത ദൂരത്താണെന്ന് കണ്ടെത്തുന്നത് പോലെയാണ്.
+
+## ഒബ്ജക്റ്റുകളുടെ ലൈഫ്സൈകിൾ മാനേജ്മെന്റ്
+
+ഒരു ലേസർ ഒരു എനിമിയെ തൊട്ടാൽ, രണ്ടു ഒബ്ജക്റ്റുകളും ഗെയിമിൽ നിന്ന് അഴിക്കാൻ വേണം. പക്ഷേ, ലൂപ്പ് നടപ്പിലായി ഘട്ടത്തിൽ ഒബ്ജക്റ്റുകൾ നീക്കം ചെയ്യുന്നത് ക്രാഷ് സംഭവിക്കും - അപ്പോളോ ഗൈഡൻസ് കമ്പ്യൂട്ടറിൽ നേരിട്ട പാഠം. പകരം, "ഡീലക്ഷൻ മാർക്ക്" വഴികള് ഉപയോഗിച്ച് ഫ്രെയിമുകൾക്കിടയിൽ സുരക്ഷിതമായ നീക്കം നടപ്പാക്കുന്നു.
+
+```mermaid
+stateDiagram-v2
+ [*] --> Active: ഒബ്ജക്റ്റ് സൃഷ്ടിച്ചു
+ Active --> Collided: ഘർഷണം കണ്ടെത്തി
+ Collided --> MarkedDead: മരിച്ചതു true ആയി സജ്ജീകരിച്ചു
+ MarkedDead --> Filtered: അടുത്ത ഫ്രെയിം
+ Filtered --> [*]: ഒബ്ജക്റ്റ് നീക്കം ചെയ്തു
+
+ Active --> OutOfBounds: സ്ക്രീനിൽ നിന്നു പുറത്തേക്ക്
+ OutOfBounds --> MarkedDead
+
+ note right of MarkedDead
+ തുടരാൻ സുരക്ഷിതം
+ നിലവിലെ ഫ്രെയിം
+ end note
+
+ note right of Filtered
+ ഫ്രെയിമുകൾക്കിടയിൽ
+ ഒബ്ജക്റ്റുകൾ നീക്കം ചെയ്തത്
+ end note
+```
+ഇങ്ങനെ ഒരു ഒബ്ജക്റ്റ് നീക്കംക്കായി മാർക്ക് ചെയ്യുന്നു:
+
+```javascript
+// ഒബ്ജക്ട് നീക്കംചെയ്യാൻ സംചിഹ്നീകരിക്കുക
+enemy.dead = true;
+```
+
+** എങ്ങനെ ഇത് പ്രവർത്തിക്കുന്നു:**
+- ഒബ്ജക്റ്റ് "മൂടിയ" എന്ന് അടയാളപ്പെടുത്തുന്നു പക്ഷേ ഉടൻ നീക്കംചെയ്യരുത്
+- നിലവിലെ ഗെയിം ഫ്രെയിം സുരക്ഷിതമായി പൂർത്തിയാക്കുന്നു
+- ഇപ്പോഴത്തെ ഇല്ലാതായ ഒന്നിനെ ഉപയോഗിക്കാൻ ശ്രമിച്ച് പിഴവ് വരുന്നതില്ല!
+
+തിൻറെ തുടർന്ന് ഓരോ റൻഡർ ചക്രത്തിനും മുൻപ് മാർക്ക് ചെയ്ത ഒബ്ജക്റ്റുകൾ ഫിൽട്ടർ ചെയ്യുക:
+
+```javascript
+gameObjects = gameObjects.filter(go => !go.dead);
+```
+
+**ഈ ഫിൽട്ടർ ചെയ്യുന്നത്:**
+- "സജീവ" ഒബ്ജക്റ്റുകൾ മാത്രം ഉള്ള പുതുക്കിയ പട്ടിക സൃഷ്ടിക്കുന്നു
+- മരിച്ചവയും ഇല്ലാതാക്കുന്നു
+- ഗെയിം നീക്കമർച്ച് തുടരുന്നു
+- നശിച്ച ഒബ്ജക്റ്റുകൾ പെരുകാതിരിക്കാൻ സഹായിക്കുന്നു
+
+## ലേസർ മെക്കാനിക്സ് നടപ്പിലാക്കൽ
+
+ഗെയിമിലെ ലേസർ പ്രൊജക്ടൈലുകൾ സ്റ്റാർ ട്രെക്കിലെ ഫോട്ടോൺ ടോർപ്പിഡോകളുടെ പോലെ പ്രവർത്തിക്കുന്നു - അവ้วน സമാന്തര രേഖകളിൽ സഞ്ചരിക്കുമ്പോൾ ഒന്നിനെ തൊട്ടാൽ അവസാനിക്കും. ഓരോ സ്പേസ്ബാർ അമർത്തലും പുതിയ ലേസർ ഒബ്ജക്റ്റ് സൃഷ്ടിക്കുന്നു, അത് സ്ക്രീനിൽ താണ്ടിയടിക്കുന്നു.
+
+ഇത് പ്രവർത്തിക്കാൻ ചില ഘടകങ്ങൾ ഏകോപിപ്പിക്കണം:
+
+**നിർവ്വഹണ ഇനങ്ങൾ:**
+- **സൃഷ്ടിക്കുക** നായകന്റെ സ്ഥാനം മുതൽ ലേസർ ഒബ്ജക്റ്റുകൾ
+- **ഹാൻഡ്ൾ** കീബോർഡ് ഇന്റപുട്ട് ലേസർ സൃഷ്ടിക്കാനായി
+- **മാനേജ് ചെയ്യുക** ലേസർ നീക്കം ഒപ്പം ലൈഫ് സൈകിൾ
+- **നിർവ്വഹിക്കുക** ലേസർ പ്രൊജക്ടൈലുകളുടെ ദൃശ്യ പ്രതിനിധാനം
+
+## ഷൂട്ടിംഗ് നിരക്ക് നിയന്ത്രണം നടപ്പിലാക്കൽ
+
+അപരിമിതമായ ഷൂട്ടിംഗ് നിരക്കുകൾ ഗെയിം എൻജിൻ അത്തരമൊരു ഭ്രമം ആക്കി കളി വളരെ എളുപ്പമാക്കും. യഥാർത്ഥ ആയുധ സിസ്റ്റങ്ങൾക്കും തീവ്രമായ നിയന്ത്രണങ്ങൾ ഉണ്ട് - USS എൻറ്പ്രൈസിന്റെ ഫേസേഴ്സിനും ഷൂട്ടിംഗിനുണ്ടായ ഇടവേളകൾ പോലെ.
+
+നാം കൂൾഡൗൺ സിസ്റ്റം നടപ്പിലെത്തിക്കും, ഇത് റെസ്പോൺസീവ് നിയന്ത്രണങ്ങളെ വെറും സ്പാം ക്ലിക്കിങ് തടയും:
+
+```mermaid
+sequenceDiagram
+ participant Player
+ participant Weapon
+ participant Cooldown
+ participant Game
+
+ Player->>Weapon: സ്പെയ്സ്ബാർ അമർത്തുക
+ Weapon->>Cooldown: തണുത്തിട്ടുണ്ടോ എന്ന് പരിശോധിക്കുക
+
+ alt ആയുധം സജ്ജമാണ്
+ Cooldown->>Weapon: തണുത്ത് = സത്യം
+ Weapon->>Game: ലേസർ സൃഷ്ടിക്കുക
+ Weapon->>Cooldown: പുതിയ കൂള്ഡൗൺ ആരംഭിക്കുക
+ Cooldown->>Cooldown: തണുത്ത് = അസത്യം
+
+ Note over Cooldown: 500 എംഎസ് വരെ കാത്തിരിക്കുക
+
+ Cooldown->>Cooldown: തണുത്ത് = സത്യം
+ else ആയുധം തണുത്തുകൊണ്ടിരിക്കുന്നു
+ Cooldown->>Weapon: തണുത്ത് = അസത്യം
+ Weapon->>Player: പ്രവർത്തനം ഇല്ല
+ end
+```
+```javascript
+class Cooldown {
+ constructor(time) {
+ this.cool = false;
+ setTimeout(() => {
+ this.cool = true;
+ }, time);
+ }
+}
+
+class Weapon {
+ constructor() {
+ this.cooldown = null;
+ }
+
+ fire() {
+ if (!this.cooldown || this.cooldown.cool) {
+ // ലേസർ പ്രോജക്ടൈൽ സൃഷ്ടിക്കുക
+ this.cooldown = new Cooldown(500);
+ } else {
+ // ആയുധം ഇപ്പോഴും തണുപ്പുകയാണ്
+ }
+ }
+}
+```
+
+**കൂൾഡൗൺ എങ്ങനെ പ്രവർത്തിക്കുന്നു:**
+- സൃഷ്ടിച്ചപ്പോൾ ആയുധം "ഹോട്ട്" ആയി ആരംഭിക്കുന്നു (ഇപ്പോൾ ഷൂട്ട് ചെയ്യാൻ കഴിയില്ല)
+- സമയ പരിധി കഴിഞ്ഞാൽ അത് "കൂൾ" ആകുന്നു (ഷൂട്ടിന് തയ്യാറാണ്)
+- ഷൂട്ടിങ്ങിന് മുമ്പ് പരിശോധിക്കുന്നു: "ആയുധം കൂൾ ആണോ?"
+- ഇത് സ്പാം ക്ലിക്കിങ് തടഞ്ഞു കൂട്ടിയതും റെസ്പോൺസീവ് നിയന്ത്രണങ്ങളോടെയാണ്
+
+✅ സ്പേസ് ഗെയിം സീരീസിലെ പാഠം 1-നെ മത്സരിപ്പിക്കാൻ കൂൾഡൗൺ ഓർമ്മിക്കുക.
+
+## ഘർഷണ സിസ്റ്റം നിർമ്മിക്കൽ
+
+നിങ്ങളുടെ നിലവിലുള്ള സ്പെയ്സ് ഗെയിം കോഡ് വിപുലീകരിച്ച് ഘർഷണം കണ്ടെത്തൽ സിസ്റ്റം സൃഷ്ടിക്കും. ഇന്റർനാഷണൽ സ്പേസ് സ്റ്റേഷന്റെ സ്വയം ഘർഷണം ഒഴിവാക്കൽ സംവിധാനത്തിന്റെ പോലെയാണ് നിങ്ങളുടെ ഗെയിം ഒബ്ജക്റ്റുകളെ നിരന്തരം നിരീക്ഷിക്കുകയും ഒട്ടുമെത്തൽ സംഭവിക്കുമ്പോൾ പ്രതികരിക്കുകയും ചെയ്യും.
+
+മുൻപത്തെ പാഠത്തിലെ കോഡിൽ നിന്നു തുടങ്ങി, ഘർഷണം കണ്ടെത്തൽ പ്രത്യേക നിയമങ്ങളോടെ ഒബ്ജക്റ്റുകൾ ഇടപെടലുകൾ നിയന്ത്രിക്കും.
+
+> 💡 **പ്രൊ ടിപ്**: ലേസർ സ്പ്രൈറ്റ് നിങ്ങളുടെ അസറ്റുകൾ ഫോൾഡറിൽ ഇതിനകം ഉൾപ്പെടുത്തിയതിനാൽ എളുപ്പത്തിൽ നടപ്പിലാക്കാം.
+
+### നടപ്പാക്കേണ്ട ഘർഷണ നിയമങ്ങൾ
+
+**കേംമെറ്റിക്സ് ചേർക്കേണ്ടത്:**
+1. **ലേസർ എനിമിയെ തൊടുന്നു**: ലേസർ പ്രൊജക്ടൈൽ എനിമിയെ തൊടുമ്പോൾ നശിക്കുന്നു
+2. **ലേസർ സ്ക്രീൻ അതിരിലേറി**: ലേസർ മുകളിൽ എത്തുമ്പോൾ നീക്കം ചെയ്യുക
+3. **എനിമി ഒപ്പം നായകൻ ഘർഷിക്കുന്നു**: രണ്ടു ഒബ്ജക്റ്റുകളും ഒട്ടിയാൽ നശിക്കുന്നു
+4. **എനിമി താഴെയെത്തുന്നു**: സ്ക്രീൻ താഴെ എത്തിയാൽ ഗെയിം ഓവർ
+
+### 🔄 **പഠന സ്ഥിതി പരിശോധന**
+**ഘർഷണം കണ്ടെത്തൽ അടിസ്ഥാനങ്ങൾ**: നടപ്പിലാക്കുന്നതിനുമുമ്പ് ഉറപ്പാക്കാം:
+- ✅ ചതുരേക്കോൺ അതിരുകൾ ഘർഷണ മേഖല നിർവ്വചിക്കുന്നത് എങ്ങനെ?
+- ✅ വേർതിരിയൽ പരിശോധന ഒട്ടുമെത്തൽ തുകൽക്കാൾ കാര്യക്ഷമമെന്ന് എന്തുകൊണ്ട്?
+- ✅ ഗെയിം ലൂപുകളിൽ ഒബ്ജക്റ്റ് ലൈഫ്സൈക്ൾ മാനേജ്മെന്റ് പ്രധാനത
+- ✅ ഇവന്റുകൾ ചലിക്കുന്ന ഘർഷണ പ്രതികരണങ്ങൾ എങ്ങനെ ഏകോപിപ്പിക്കുന്നു
+
+**ഷോർട്ട് സെൽഫ്-ടെസ്റ്റ്**: ഒബ്ജക്റ്റുകൾ ഉടനടി നീക്കം ചെയ്താൽ എന്താകും?
+*ഉത്തരം: മിഡ്-ലൂപ്പ് ഡീലക്ഷന്റെ പിഴവ് അല്ലെങ്കിൽ ഐറ്ററേഷൻ ഒഴിവാക്കൽ സംഭവിക്കും*
+
+**ഭൗതിക ബോധം**: നിങ്ങൾക്കു മനസ്സിലായി:
+- **കോഓർഡിനേറ്റ് സിസ്റ്റങ്ങൾ**: സ്ഥാനം വീതിയും അതിരുകൾ നിർണയിച്ചുവരുന്നു
+- **ഒട്ടുമെത്തൽ ലെജിക്**: ഘർഷണം കണ്ടെത്തലിന്റെ ഗണിത സിദ്ധാന്തങ്ങൾ
+- **പരഫോമൻസ് ഒപ്റ്റിമൈസേഷൻ**: റിയൽ-ടൈം സിസ്റ്റങ്ങൾക്കു പ്രയോജനം
+- **മെമ്മറി മാനേജ്മെന്റ്**: സുരക്ഷിതമായ ഒബ്ജക്റ്റ് ലൈഫ്സൈകിൾ രീതികൾ
+
+## ഡെവലപ്മെന്റ് പരിസരം സജ്ജമാക്കൽ
+
+സുഖവാർത്ത - എല്ലാ ആസറ്റുകളും നിഗൂഢ ഘടനകളും `your-work` സബ് ഫോളഡറിൽ സജ്ജമാണ്, നിങ്ങൾക്ക് ഇപ്പോൾ തണുത്ത ഘർഷണ ഫീച്ചറുകൾ ചേർക്കാം.
+
+### പ്രോജക്റ്റ് ഘടന
+
+```bash
+-| assets
+ -| enemyShip.png
+ -| player.png
+ -| laserRed.png
+-| index.html
+-| app.js
+-| package.json
+```
+
+**ഫയൽ ഘടന മനസ്സിലാക്കുക:**
+- ഗെയിം ഒബ്ജക്റ്റുകൾക്കുള്ള എല്ലാ സ്പ്രൈറ്റ് ചിത്രങ്ങളും ഉള്ളത്
+- പ്രധാന HTML ഡോക്യൂമെന്റും ജാവാസ്ക്രിപ്റ്റ് ആപ്പ് ഫയൽ ഉൾക്കൊള്ളുന്നു
+- പ്രാദേശിക ഡെവലപ്മെന്റ് സർവർ പാക്കേജ് കോൺഫിഗറേഷൻ
+
+### ഡെവലപ്മെന്റ് സർവർ ആരംഭിക്കൽ
+
+നിങ്ങളുടെ പ്രോജക്റ്റ് ഫോൾഡറിൽ പോയി ലോക്കൽ സർവർ ആരംഭിക്കുക:
+
+```bash
+cd your-work
+npm start
+```
+
+**ഈ കമാൻഡ് ക്രമം:**
+- പ്രോജക്റ്റ് ഡയറക്ടറിയിലേക്ക് മാറുന്നു
+- `http://localhost:5000` ലെ ലോക്കൽ HTTP സർവർ ആരംഭിക്കുന്നു
+- ഗെയിം ഫയലുകൾ ടെസ്റ്റിംഗിനും ഡെവലപ്മെന്റിനും സർവുചെയ്യുന്നു
+- ലൈവ് ഡെവലപ്മെന്റ് എളുപ്പമാക്കാൻ ഓട്ടോംറിലോഡ് സജ്ജീകരിക്കുന്നു
+
+ബ്രൗസർ തുറന്ന് `http://localhost:5000` സന്ദർശിക്കുക; നായകൻ, എനിമികൾ സ്ക്രീനിൽ കാഴ്ചവെക്കും.
+
+### ഘട്ടം ഘട്ടമായ നടപ്പാക്കൽ
+
+നാസ ഓണറുകളായ വോയ്ജർ ബഹിരാകാശ ബോധിയുടെ പ്രോഗ്രാമിംഗുപോലെ നാം ഘർഷണം കണ്ടെത്തൽ ക്രമമായി നടപ്പിലാക്കാം, ഓരോ ഘടകവും ഉടനടി സൃഷ്ടിച്ച്.
+
+```mermaid
+flowchart TD
+ A["1. രേഖചതുരങ്ങളുടെ അതിരുകൾ"] --> B["2. ഇന്റേഴ്സക്ഷൻ കണ്ടെത്തൽ"]
+ B --> C["3. ലേസർ സിസ്റ്റം"]
+ C --> D["4. ഇവന്റ് കൈകാര്യംചെയ്യൽ"]
+ D --> E["5. അപകടനിബന്ധനകൾ"]
+ E --> F["6. കൂൾഡൗൺ സിസ്റ്റം"]
+
+ G["വസ്തു അതിരുകൾ"] --> A
+ H["ഭൗതിക ആൽഗോരിതം"] --> B
+ I["പ്രോജക്ടൈൽ സൃഷ്ടി"] --> C
+ J["കീബോർഡ് ഇൻപുട്ട്"] --> D
+ K["ഗെയിം ലജിക്"] --> E
+ L["വേഗം നിയന്ത്രണം"] --> F
+
+ F --> M["🎮 സമ്പൂർണ്ണ ഗെയിം"]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+ style F fill:#fce4ec
+ style M fill:#e1f5fe
+```
+#### 1. ചതുരേക്കോൺ ഘർഷണ അതിരുകൾ ചേർക്കുക
+
+ ആദ്യം, നിങ്ങളുടെ ഗെയിം ഒബ്ജക്റ്റുകൾ അതിരുകൾ നിർവ്വചിക്കുന്ന രീതിയെ പഠിപ്പിക്കൂ. ഇത് `GameObject` ക്ലാസിൽ ചേർക്കുക:
+
+```javascript
+rectFromGameObject() {
+ return {
+ top: this.y,
+ left: this.x,
+ bottom: this.y + this.height,
+ right: this.x + this.width,
+ };
+ }
+```
+
+**ഈ മെത്തേഡ് ചെയ്യുന്നത്:**
+- കൃത്യമായ അതിരുകൾ ഉള്ള ഒരു റ്റെക്റ്റാംഗിൾ ഒബ്ജക്റ്റ് സൃഷ്ടിക്കുന്നു
+- സ്ഥാനത്തും അളവുകളும் ചേർത്ത് താഴെയും വലത്തെയും കണക്കാക്കുന്നു
+- ഘർഷണം കണ്ടെത്തൽ ആൽഗോറിതങ്ങൾക്ക് ക്രമത്തിൽ ഡാറ്റ നൽകുന്നു
+- എല്ലാ ഗെയിം ഒബ്ജക്റ്റുകൾക്കും സ്ഥിരതയുള്ള ഇന്റർഫേസ് നൽകുന്നു
+
+#### 2. ഒട്ടുമെത്തൽ കണ്ടെത്തൽ നടപ്പിലാക്കുക
+
+ഇപ്പോൾ രണ്ട് റ്റെക്റ്റാംഗിൾ ഒട്ടുമെത്തുന്നുണ്ടോ എന്ന് കണ്ടെത്തുന്ന ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:
+
+```javascript
+function intersectRect(r1, r2) {
+ return !(
+ r2.left > r1.right ||
+ r2.right < r1.left ||
+ r2.top > r1.bottom ||
+ r2.bottom < r1.top
+ );
+}
+```
+
+**ആൽഗോറിതം ചെയ്യുന്നത്:**
+- റ്റെക്റ്റാംഗിളുകൾ തമ്മിലുള്ള നാല് വേർതിരിയൽ ഘട്ടങ്ങൾ പരീക്ഷിക്കുന്നു
+- വേർതിരിയൽ സംഭവിച്ചാൽ 'false' തിരിച്ചുവിടുന്നു
+- വേർതിരിയൽ ഇല്ലെങ്കിൽ ഒട്ടുമെത്തൽ നിർദ്ദിഷ്ടമാക്കുന്നു
+- നെഗേഷൻ ലൊജിക് ഉപയോഗിച്ച് കാര്യക്ഷമ പരിശോധന
+
+#### 3. ലേസർ ഷൂട്ടിംഗ് സിസ്റ്റം നടപ്പിലാക്കുക
+
+ഇവിടെ രസകരമായ ഘട്ടം! ലേസർ ഷൂട്ടിംഗ് സിസ്റ്റം ക്രമീകരിക്കുക.
+
+##### സന്ദേശ സ്ഥിരം വാക്കുകൾ
+
+ക്ലാസുകൾ തമ്മിൽ സംവദിക്കാൻ വിവിധ ഈവന്റ് പേര് നിർവചിക്കുക:
+
+```javascript
+KEY_EVENT_SPACE: "KEY_EVENT_SPACE",
+COLLISION_ENEMY_LASER: "COLLISION_ENEMY_LASER",
+COLLISION_ENEMY_HERO: "COLLISION_ENEMY_HERO",
+```
+
+**ചില സ്ഥിരം വാക്കുകൾ:**
+- അപ്പ്ലിക്കേഷനിൽ അവസാനത്തോളം ഈവന്റ് നാമങ്ങൾ ഒരുപോലാക്കുന്നു
+- ഗെയിം സിസ്റ്റങ്ങൾ തമ്മിൽ സ്ഥിരതയുള്ള ആശയവിനിമയം
+- ഈവന്റ് രജിസ്ട്രേഷനിൽ ടൈപ്പോ ഒഴിവാക്കുന്നു
+
+##### കീബോർഡ് ഇൻപുട്ട് കൈകാര്യം
+
+നിങ്ങളുടെ കീ ഇവന്റ് ലിസ്തനറിൽ സ്പേസ് കീ കണ്ടുപിടിക്കുക:
+
+```javascript
+} else if(evt.keyCode === 32) {
+ eventEmitter.emit(Messages.KEY_EVENT_SPACE);
+}
+```
+
+**ഈ ഇൻപുട്ട് ഹാൻഡ്ലർ:**
+- keyCode 32 ഉപയോഗിച്ച് സ്പേസ് കീ അമർത്തലുകൾ കണ്ടെത്തുന്നു
+- സ്റ്റാൻഡേർഡ് ഈവന്റ് സന്ദേശം പുറപ്പെടുവിക്കുന്നു
+- ഷൂട്ടിംഗ് ലോജിക് ഡിഗ്നൈമാക്കി വിടുന്നു
+
+##### ഈവന്റ് ലിസ്തനർ സജ്ജമാക്കൽ
+
+`initGame()` ഫംഗ്ഷനിൽ ഷൂട്ടിംഗ് പെരുമാറ്റം രജിസ്റ്റർ ചെയ്യുക:
+
+```javascript
+eventEmitter.on(Messages.KEY_EVENT_SPACE, () => {
+ if (hero.canFire()) {
+ hero.fire();
+ }
+});
+```
+
+**ഈ ഈവന്റ് ലിസ്തനർ:**
+- സ്പേസ് കീ സംഭവങ്ങൾക്ക് പ്രതികരിക്കുന്നു
+- ഷൂട്ടിംഗ് കൂൾഡൗൺ നില ഞെക്കുന്നു
+- അനുമതിയുള്ളപ്പോൾ ലേസർ സൃഷ്ടിക്കുന്നു
+
+ലേസർ-എനമി ഘർഷണം കൈകാര്യം ചെയ്യുക:
+
+```javascript
+eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
+ first.dead = true;
+ second.dead = true;
+});
+```
+
+**ഘർഷണം ഹാൻഡ്ലർ:**
+- രണ്ട് ഒബ്ജക്റ്റുകൾ ഉള്ള ഘർഷണം ഡാറ്റ സ്വീകരിക്കുന്നു
+- രണ്ട് ഒബ്ജക്റ്റും നീക്കം ചെയ്യാൻ അടയാളപ്പെടുത്തുന്നു
+- ശരിയായ ക്ലീനപ്പ് ഉറപ്പാക്കുന്നു
+
+#### 4. ലേസർ ക്ലാസ് സൃഷ്ടിക്കുക
+
+സ്വയം നീങ്ങുകയും ലൈഫ് സൈകിൾ മാനേജുമെന്റ് ചെയ്യുന്ന ലേസർ പ്രൊജക്ടൈൽ രൂപീകരിക്കുക:
+
+```javascript
+class Laser extends GameObject {
+ constructor(x, y) {
+ super(x, y);
+ this.width = 9;
+ this.height = 33;
+ this.type = 'Laser';
+ this.img = laserImg;
+
+ let id = setInterval(() => {
+ if (this.y > 0) {
+ this.y -= 15;
+ } else {
+ this.dead = true;
+ clearInterval(id);
+ }
+ }, 100);
+ }
+}
+```
+
+**ക്ലാസ് നടപ്പിലാക്കൽ:**
+- GameObjectക്ലാസിൽ നിന്നു വൻദ്ധാനം ചെയ്യുന്നു
+- ലേസർ സ്പ്രൈറ്റിന് യോജിച്ച അളവുകൾ സജ്ജമാക്കുന്നു
+- സജ്ജീകരിച്ച setInterval() വഴി സ്വയം മുകളിൽ നീങ്ങുന്നു
+- സ്ക്രീൻ മുകളില് എത്തുമ്പോൾ സ്വയം നശിക്കുന്നു
+- സ്വയം അനിമേഷൻ ടൈമിംഗും ക്ലീനപ്പും കൈകാര്യം ചെയ്യുന്നു
+
+#### 5. ഘർഷണം കണ്ടെത്തൽ സിസ്റ്റം നടപ്പിലാക്കുക
+
+കൺപ്രഹെൻസീവ് ഘർഷണം കണ്ടെത്തൽ ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:
+
+```javascript
+function updateGameObjects() {
+ const enemies = gameObjects.filter(go => go.type === 'Enemy');
+ const lasers = gameObjects.filter(go => go.type === "Laser");
+
+ // ലേസർ-മതിലുകൾ തമ്മിലുള്ള കൂട്ടിയിടിപ്പ് പരിശോധിക്കുക
+ lasers.forEach((laser) => {
+ enemies.forEach((enemy) => {
+ if (intersectRect(laser.rectFromGameObject(), enemy.rectFromGameObject())) {
+ eventEmitter.emit(Messages.COLLISION_ENEMY_LASER, {
+ first: laser,
+ second: enemy,
+ });
+ }
+ });
+ });
+
+ // നശിച്ച വസ്തുക്കൾ നീക്കം ചെയ്യുക
+ gameObjects = gameObjects.filter(go => !go.dead);
+}
+```
+
+**ചടങ്ങിൽ:**
+- ഫിൽട്ടർ ചെയ്തു ലേസറുകളും എനമികളും ടെസ്റ്റ് ചെയ്യുന്നു
+- ഓരോ ലേസറിനും എല്ലാ എനമിയോടും ഒട്ടുമെത്തൽ പരിശോധിക്കുന്നു
+- ഒട്ടുമെത്തലുണ്ടായാൽ ഘർഷണം ഇവന്റ് പുറപ്പെടുവിക്കുന്നു
+- ഘർഷണം പൂർത്തിയാകുമ്പോൾ നശിച്ച ഒബ്ജക്റ്റുകൾ നീക്കം ചെയ്യുന്നു
+
+> ⚠️ **മഹത്വം**: `window.onload`യിലെ പ്രധാന ഗെയിം ലൂപിൽ `updateGameObjects()` ചേർക്കുക ഘർഷണം കണ്ടെത്തൽ സജ്ജമാക്കാൻ.
+
+#### 6. ഹീറോ ക്ലാസിൽ കൂൾഡൗൺ സിസ്റ്റം ചേർക്കുക
+
+ഷൂട്ടിംഗ് മെക്കാനിക്സ് അടങ്ങുന്ന ഹീറോ ക്ലാസ് മെച്ചപ്പെടുത്തുക:
+
+```javascript
+class Hero extends GameObject {
+ constructor(x, y) {
+ super(x, y);
+ this.width = 99;
+ this.height = 75;
+ this.type = "Hero";
+ this.speed = { x: 0, y: 0 };
+ this.cooldown = 0;
+ }
+
+ fire() {
+ gameObjects.push(new Laser(this.x + 45, this.y - 10));
+ this.cooldown = 500;
+
+ let id = setInterval(() => {
+ if (this.cooldown > 0) {
+ this.cooldown -= 100;
+ } else {
+ clearInterval(id);
+ }
+ }, 200);
+ }
+
+ canFire() {
+ return this.cooldown === 0;
+ }
+}
+```
+
+**വികസിച്ച ഹീറോ ക്ലാസ്:**
+- കൂൾഡൗൺ ടൈമർ ശൂന്യത്തിൽ തുടങ്ങിയിരിക്കുന്നു (ഷൂട്ടിനു സജ്ജം)
+- നായകന്റെ ആകാശത്തിലേക്ക് ലേസർ ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കുന്നു
+- തോക്ക് വേഗത നിയന്ത്രിക്കാൻ കൂൾഡൗൺ കാലം സജ്ജമാക്കുന്നു
+- ഇന്റർവൽ അടിസ്ഥാനത്തിൽ കൂൾഡൗൺ ടൈമർ കുറയ്ക്കുന്നു
+- `canFire()` വഴി ഷൂട്ടിംഗ് സാധ്യമായിരിക്കുന്നെന്ന് പരിശോധിക്കുന്നു
+
+### 🔄 **പഠന സ്ഥിതി പരിശോധന**
+**സിസ്റ്റം പൂർണ്ണ ബോധം**: നിങ്ങളുടെ ഘർഷണ സിസ്റ്റം മേൽനോട്ടം ശരിയെന്ന് ഉറപ്പാക്കൂ:
+- ✅ ചതുരേക്കോൺ അതിരുകൾ എങ്ങനെ കാര്യക്ഷമ ഘർഷണം കണ്ടെത്തലിനുള്ള വഴിയൊരുക്കുന്നു?
+- ✅ ഒബ്ജക്റ്റ് ലൈഫ്സൈകിൾ മാനേജ്മെന്റ് ഗെയിം സ്ഥിരതയിൽ എന്തു പങ്ക് വഹിക്കുന്നു?
+- ✅ കൂൾഡൗൺ സിസ്റ്റം പ്രകടനം മെച്ചപ്പെടുത്തുന്നതെങ്ങിനെ തടയുന്നു?
+- ✅ ഇവന്റ് ഡ്രിവൺ ആർക്കിടെക്ചർ ഘർഷണം കൈകാര്യം ചെയ്യുന്നതിൽ എങ്ങനെ പ്രവർത്തിക്കുന്നു?
+
+**സിസ്റ്റം ഇന്റിഗ്രേഷൻ**: നിങ്ങളുടെ ഘർഷണം കണ്ടെത്തൽ:
+- **ഗണിത കൃത്യത**: റ്റെക്റ്റാംഗിൾ ഒട്ടുപിടിപ്പ് ആൽഗോറിതങ്ങൾ
+- **പ്രകടന മെച്ചപ്പെടുത്തൽ**: കാര്യക്ഷമ ടെസ്റ്റിംഗ് മാതൃകകൾ
+- **മെമ്മറി മാനേജ്മെന്റ്**: സുരക്ഷിത ഒബ്ജക്റ്റ് സൃഷ്ടിയും നശീകരണവും
+- **ഇവന്റ് ഏകോപനം**: ഡികപ്പിള്ഡ് സിസ്റ്റം ആശയവിനിമയം
+- **റിയൽ-ടൈം പ്രോസസ്സിംഗ്**: ഫ്രെയിം അധിഷ്ഠിത അപ്ഡേറ്റ് ചക്രങ്ങൾ
+
+**പ്രൊഫഷണൽ പാറ്റേണുകൾ**: നിങ്ങൾ നടപ്പിലാക്കിയിരിക്കുന്നത്:
+- **പൃഥകിച്ച പിന്തുണകൾ**: ഫിസിക്സ്, റെൻഡറിംഗ്, ഇൻപുട്ട് വിഭജനം
+- **ഒബ്ജക്റ്റ്-ഓറിയന്റഡ് ഡിസൈൻ**: ഇൻഹെറിട്ടൻസ്, પોલിമോർഫിസം
+- **സ്റ്റേറ്റ് മാനേജ്മെന്റ്**: ഒബ്ജക്റ്റ് ലൈഫ്സൈകിൾ, ഗെയിം സ്റ്റേറ്റ് ട്രാക്കിംഗ്
+- **പ്രകടന മെച്ചപ്പെടുത്തൽ**: റിയൽ-ടൈം ആൽഗോറിതങ്ങൾ
+
+### നിങ്ങളുടെ നടപ്പാക്കൽ പരീക്ഷിക്കുക
+
+നിങ്ങളുടെ സ്പെയ്സ് ഗെയിം ഇപ്പോൾ പൂർണ്ണമായ ഘർഷണം കണ്ടെത്തലും കോംബാറ്റ് മെക്കാനിക്സും ഉൾക്കൊള്ളുന്നു. 🚀 ഈ പുതിയ ഫീച്ചറുകൾ പരീക്ഷിക്കുക:
+- അറോ കീകൾ ഉപയോഗിച്ച് നീക്കം നിയന്ത്രണം പരിശോദിക്കുക
+- സ്പേസ്ബാർ ഉപയോഗിച്ച് ലേസറുകൾ ഉത്ഭവിപ്പിക്കുക - കൂൾഡൗൺ സ്പാം ക്ലിക്കിങ് തടയുന്നുണ്ടെന്ന് ശ്രദ്ധിക്കുക
+- ലേസറുകൾ എനിമികളെ തൊടുമ്പോൾ സംഭവിക്കുന്ന ഘർഷണങ്ങൾ കാണുക
+- നശിച്ച ഒബ്ജക്റ്റുകൾ ഗെയിമിൽ നിന്നും അലയുന്നത് പരിശോധിക്കുക
+
+നിങ്ങൾ ബഹിരാകാശ യാത്രകളെയും റോബോട്ടിക്സിനെ ആസ്പദമാക്കി ഉപയോഗിക്കുന്ന ഗണിത സിദ്ധാന്തങ്ങൾ ഉപയോഗിച്ച് ഘർഷണം കണ്ടെത്തൽ സിസ്റ്റം വിജയകരമായി നടപ്പിലാക്കിയിരിക്കുന്നു.
+
+### ⚡ **അടുത്ത 5 മിനുട്ടിൽ ചെയ്യാവുന്നതുകൾ**
+- [ ] ബ്രൗസറിലെ ഡെവ്ടൂൾസ് খুলി, ഘർഷണം കണ്ടെത്തൽ ഫംഗ്ഷനിൽ ബ്രേക്ക്പോയിന്റുകൾ സെറ്റുചെയ്യുക
+- [ ] ലേസർ വേഗത അല്ലെങ്കിൽ എനമി നീക്കം മാറ്റി ഘർഷണ ഫലങ്ങൾ പരിശോധിക്കുക
+- [ ] വ്യത്യസ്ത കൂൾഡൗൺ മൂല്യങ്ങൾ പരീക്ഷിച്ച് ഷൂട്ടിംഗ് നിരക്ക് വിലയിരുത്തുക
+- [ ] കോൾഷൻ ഇവന്റുകൾ റിയൽ ടൈമിൽ ട്രാക്ക് ചെയ്യാൻ `console.log` സ്റ്റേറ്റ്മെന്റുകൾ ചേർക്കുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ თქვენ സാധ്യമാക്കാൻ കഴിയും**
+- [ ] പാഠത്തിനുശേഷമുള്ള ക്വിസ് പൂർത്തിയാക്കി കോൾഷൻ ഡിറ്റക്ഷൻ ആൽഗോരിതങ്ങൾ മനസിലാക്കുക
+- [ ] കോൾഷനുകൾ സംഭവിക്കുമ്പോൾ സ്ഫോടനങ്ങൾ പോലുള്ള ദൃശ്യ പ്രഭാവങ്ങൾ ചേർക്കുക
+- [ ] വിവിധ സ്വഭാവമുള്ള/projectiles ടൈപ്പുകൾ നടപ്പിലാക്കുക
+- [ ] കളിക്കാരന്റെ കഴിവുകൾ താൽക്കാലികമായി മെച്ചപ്പെടുത്തുന്ന പവർ-അപ്പുകൾ സൃഷ്ടിക്കുക
+- [ ] കോൾഷനുകൾ കൂടുതല് സന്തോഷമാക്കാൻ ശബ്ദ പ്രഭാവങ്ങൾ ചേർക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചപ്പഴക്കം ഫിസിക്സ് പ്രോഗ്രാമിങ്**
+- [ ] പരിപൂണമായ കോൾഷൻ സിസ്റ്റങ്ങളോടുകൂടിയ പൂർണ്ണ സ്പേസ് ഗെയിം പൂർത്തിയാക്കുക
+- [ ] റെക്ടാംഗിളുകൾക്ക് മുകളിൽ ഉയർന്ന കോൾഷൻ ആകൃതികളായ (സർക്കിള്, പോളിഗൺ എന്നിവ) നടപ്പിലാക്കുക
+- [ ] യാഥാർത്ഥ്യമാണ് സ്ഫോടന പ്രഭാവങ്ങൾക്കായി പാർട്ടിക്കിൾ സിസ്റ്റങ്ങൾ ചേർക്കുക
+- [ ] കോൾഷൻ ഒഴിവാക്കൽ പ്രകടനമുള്ള കോംപ്ലക്സ് എനറ്മി പെരുമാറ്റം സൃഷ്ടിക്കുക
+- [ ] അനവധി ഒബ്ജക്ടുകളോടുള്ള മികച്ച പ്രകടനത്തിനായി കോൾഷൻ ഡിറ്റക്ഷൻ ഒപ്പോറ്ത്തിമൈസ് ചെയ്യുക
+- [ ] മോമെന്റം പോലുള്ള ഫിസിക്സ് സിമുലേഷൻ ചേർക്കുക, യാഥാർത്ഥ്യശെയ്യുന്ന ചലനം
+
+### 🌟 **നിങ്ങളുടെ മാസംനാളത്തെ ഗെയിം ഫിസിക്സ് മാസ്റ്ററി**
+- [ ] പരിപൂർണ്ണ ഫിസിക്സ് എഞ്ചിനുകളും യാഥാർത്ഥ്യശെയ്യുന്ന സിമുലേഷനുകളും ഉള്ള ഗെയിമുകൾ നിർമ്മിക്കുക
+- [ ] 3D കോൾഷൻ ഡിറ്റക്ഷനും സ്ഥലം തിരിച്ചറിയൽ ആൽഗോരിതങ്ങളും പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഫിസിക്സ് ലൈബ്രറികളിലും ഗെയിം എഞ്ചിനുകളിലും സംഭാവന നൽകുക
+- [ ] ഗ്രാഫിക്സ്-ഇൻറൻസീവ് ആപ്ലിക്കേഷനുകൾക്കുള്ള പ്രകടന ഒപ്പോറ്ത്തിമൈസേഷൻ മാസ്റ്റർ ചെയ്യുക
+- [ ] ഗെയിം ഫിസിക്സും കോൾഷൻ ഡിറ്റക്ഷനും സംബന്ധിച്ച വിദ്യാഭ്യാസ ഉള്ളടക്കം സൃഷ്ടിക്കുക
+- [ ] പരിപൂർണ്ണ ഫിസിക്സ് പ്രോഗ്രാമിങ് കഴിവുകൾ പ്രദർശിപ്പിക്കുന്ന പോർട്ട്ഫോളിയോ നിർമ്മിക്കുക
+
+## 🎯 നിങ്ങളുടെ കോൾഷൻ ഡിറ്റക്ഷൻ മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title കോളിഷൻ ഡിറ്റക്ഷൻ & ഗെയിം ഫിസിക്സ് പഠന പുരോഗതി
+
+ section അടിസ്ഥാനപരമായത് (10 മിനിറ്റ്)
+ Rectangle Math: കോർഡിനേറ്റ് സിസ്റ്റങ്ങൾ
+ : അതിർത്തി കണക്കുകൂട്ടലുകൾ
+ : സ്ഥിതി പിന്തുടർച്ച
+ : വലിപ്പം മാനേജ്മെന്റ്
+
+ section ആൾഗോരിതം രൂപകൽപ്പന (20 മിനിറ്റ്)
+ Intersection Logic: വേർതിരിക്കൽ ടെസ്റ്റിംഗ്
+ : ഒതുക്കം കണ്ടെത്തൽ
+ : പ്രകടന മെച്ചപ്പെടുത്തൽ
+ : എജ്ജ് കെയ്സ് കൈകാര്യം
+
+ section ഗെയിം നടപ്പ് (30 മിനിറ്റ്)
+ Object Systems: ജീവിത ചക്രം മാനേജ്മെന്റ്
+ : ഇവന്റ് കോർഡിനേഷൻ
+ : സ്ഥിതി പിന്തുടർച്ച
+ : മെമ്മറി ക്ലീനപ്പ്
+
+ section ഇന്ററാക്ടീവ് സവിശേഷതകൾ (40 മിനിറ്റ്)
+ Combat Mechanics: പ്രോജക്ടൈൽ സിസ്റ്റങ്ങൾ
+ : ആയുധം കൂൾഡൗണുകൾ
+ : കേടു കണക്കുകൂട്ടൽ
+ : ദൃശ്യ പ്രതികരണം
+
+ section മുൻശ്രേണി ഫിസിക്സ് (50 മിനിറ്റ്)
+ Real-time Systems: ഫ്രെയിം റേറ്റ് ഓപ്റ്റിമൈസേഷൻ
+ : സ്ഥലബന്ധിത വിഭജനം
+ : കോളിഷൻ പ്രതികരണം
+ : ഫിസിക്സ് സിമുലേഷൻ
+
+ section പ്രൊഫഷണൽ സാങ്കേതിക വിദ്യകൾ (1 ആഴ്ച)
+ Game Engine Concepts: ഘടകം സിസ്റ്റങ്ങൾ
+ : ഫിസിക്സ് പൈപ്പ്ലൈൻസ്
+ : പ്രകടന പ്രഫൈലിംഗ്
+ : ക്രോസ് പ്ലാറ്റ്ഫോം ഓപ്റ്റിമൈസേഷൻ
+
+ section വ്യവസായ പ്രയോഗങ്ങൾ (1 മാസം)
+ Production Skills: വലിയ തോതിലുള്ള മെച്ചപ്പെടുത്തൽ
+ : ടീമിന്റെ സഹകരണം
+ : എഞ്ചിൻ വികസനം
+ : പ്ലാറ്റ്ഫോം വിന്യാസം
+```
+### 🛠️ നിങ്ങളുടെ ഗെയിം ഫിസിക്സ് ടൂൾകിറ്റ് സംഗ്രഹം
+
+ഈ പാഠം പൂർത്തിയാക്കിയശേഷം, നിങ്ങൾ ഇപ്പോൾ മാസ്റ്റർ ചെയ്കട് ചെയ്തു:
+- **കൊളിഷൻ ഗണിതശാസ്ത്രം**: റെക്ടാംഗിൾ ഇന്റേഴ്സെക്ഷൻ ആൽഗോരിതങ്ങളും കോഓർഡിനേറ്റ് സിസ്റ്റവും
+- **പ്രകടന ഒപ്പോറ്ത്തിമൈസേഷൻ**: റിയൽ-ടൈം ആപ്ലിക്കേഷനുകൾക്കുള്ള ഫലപ്രദമായ കോൾഷൻ ഡിറ്റക്ഷൻ
+- **ഒബ്ജക്ട് ലൈഫ്സൈക്കിൾ മാനേജ്മെന്റ്**: സുരക്ഷിതമായ സൃഷ്ടി, अपडेट്, നശീകരണ പാറ്റേൺസ്
+- **ഇവന്റ്ഡ്രിവൻ ആർക്കിടെക്ചർ**: കോൾഷൻ പ്രതികരണത്തിനായുള്ള അവിടറിഞ്ഞ സംവിധാനങ്ങൾ
+- **ഗെയിം ലൂപ്പ് ഇന്റഗ്രേഷൻ**: ഫ്രെയിം അടിസ്ഥാന ഫിസിക്സ് അപ്ഡേറ്റുകളും റെൻഡറിംഗ് കോർഡിനേഷനും
+- **ഇൻപുട്ട് സിസ്റ്റങ്ങൾ**: റേറ്റ് ലിമിറ്റിങ്ങോടും ഫീഡ്ബാക്കോടും കൂടിയ പ്രതികരണ ശക്തമായ നിയന്ത്രണങ്ങൾ
+- **മെമ്മറി മാനേജ്മെന്റ്**: ഫലപ്രദമായ ഒബ്ജക്ട് പൂളിംഗ്, ക്ലീനപ്പ് തന്ത്രങ്ങൾ
+
+**യാഥാർത്ഥ ലോക ഉപയോഗങ്ങൾ**: നിങ്ങളുടെ കോൾഷൻ ഡിറ്റക്ഷൻ കഴിവുകൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **ഇന്ററാക്ടിവ് സിമുലേഷനുകൾ**: ശാസ്ത്രീയ മോഡലിംഗും വിദ്യാഭ്യാസ ഉപകരണങ്ങളും
+- **യൂസർ ഇന്റർഫേസ് ഡിസൈൻ**: ഡ്രാഗ്-ആന്റ്-ഡ്രോപ്പ് ഇടപെടലുകളും ടച്ച് ഡിറ്റക്ഷനും
+- **ഡാറ്റാ വിസ്വലൈസേഷൻ**: ഇന്ററാക്ടിവ് ചാർട്ടുകളും ക്ലിക്കബിൾ ഘടകങ്ങളും
+- **മൊബൈൽ ഡെവലപ്പ്മെന്റ്**: ടച്ച് ജെഷ്ചർ തിരിച്ചറിയലും കോൾഷൻ കൈകാര്യം ചെയ്യലും
+- **റോബോട്ടിക്സ് പ്രോഗ്രാമിങ്**: പാത്ത് പ്ലാനിംഗ്, തടസ്സം ഒഴിവാക്കൽ
+- **കമ്പ്യൂട്ടർ ഗ്രാഫിക്സ്**: റേ ട്രേസിങ്ങും സ്ഥല പാഠ്യവ്യവസ്ഥകളും
+
+**പ്രൊഫഷണൽ കഴിവുകൾ നേടിയത്**: നിങ്ങൾ ഇനി കഴിയും:
+- **ഡിസൈൻ** ഫലപ്രദമായ ആൽഗോരിതങ്ങൾ റിയൽ-ടൈം കോൾഷൻ ഡിറ്റക്ഷനിലേക്കായി
+- **ഇംപ്ലിമെന്റ്** ഒബ്ജക്ട് സങ്കീർണ്ണത അനുസരിക്കുന്ന ഫിസിക്സ് സിസ്റ്റങ്ങൾ
+- **ഡീബഗ്** ഗണിത സിദ്ധാന്തങ്ങൾ ഉപയോഗിച്ച് കോംപ്ലക്സ് ഇടപെടലുകൾ
+- **ഒപ്പോർറ്ത്തിമൈസ്** വ്യത്യസ്ത ഹാർഡ്വെയർ, ബ്രൗസർ കഴിവുകൾക്കായി പ്രകടനം
+- **ആർക്കിടെക്റ്റ്** തെളിയിച്ച ഡിസൈൻ പാറ്റേൺസ്ബദ്ധമായ സൂക്ഷ്മ ഗെയിം സിസ്റ്റങ്ങൾ
+
+**ഗെയിം ഡെവലപ്പ്മെന്റ് ആശയങ്ങൾ മാസ്റ്റർ ചെയ്തു**:
+- **ഫിസിക്സ് സിമുലേഷൻ**: റിയൽ-ടൈം കോൾഷൻ ഡിറ്റക്ഷനും പ്രതികരണവും
+- **പ്രകടന എഞ്ചിനീയറിംഗ്**: ഇന്ററാക്ടിവ് ആപ്ലിക്കേഷനുകൾക്കുള്ള ഒപ്പോർറ്ത്തിമൈസ് ചെയ്ത ആൽഗോരിതങ്ങൾ
+- **ഇവന്റ് സിസ്റ്റങ്ങൾ**: ഗെയിം ഘടകങ്ങൾ തമ്മിലുള്ള അവിടറിഞ്ഞ ആശയവിനിമയം
+- **ഒബ്ജക്ട് മാനേജ്മെന്റ്**: ഡൈനാമിക് ഉള്ളടക്കത്തിന് ഫലപ്രദമായ ലൈഫ്സൈക്കിൾ പാറ്റേൺസ്
+- **ഇൻപുട്ട് ഹാൻഡ്ലിംഗ്**: അനുയായി ഫീഡ്ബാക്കോടെയുള്ള പ്രതികരണസാധ്യത
+
+**അടുത്ത നില**: നിങ്ങൾക്കെ ഇപ്പോൾ Matter.js പോലുള്ള ആധുനിക ഫിസിക്സ് എഞ്ചിനുകൾ പരീക്ഷിക്കാനും, 3D കോൾഷൻ ഡിറ്റക്ഷൻ നടപ്പിലാക്കാനും, കോംപ്ലക്സ് പാർട്ടിക്കിൾ സിസ്റ്റങ്ങൾ നിർമ്മിക്കാനും ഒരുങ്ങി!
+
+🌟 **അപാര നേട്ടം നേടി**: പ്രൊഫഷണൽ ഗ്രേഡ് കോൾഷൻ ഡിറ്റക്ഷനോടുകൂടിയ ഒരു പൂർണ്ണമായ ഫിസിക്സ് അടിസ്ഥാന ഇടപെടലുലളി നിങ്ങൾ നിർമ്മിച്ചു!
+
+## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🚀
+
+എജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെ പറയുന്ന വെല്ലുവിളി പൂർത്തിയാക്കുക:
+
+**വിവരണം:** հերോ ഷിപ്പ് ഒത്തു ചേർന്നപ്പോൾ താൽക്കാലിക കഴിവുകൾ നൽകുന്ന പവർ-അപ്പുകൾ എത്രയും വേഗം സൃഷ്ടിക്കുന്ന പതിപ്പു ചേർത്ത് കോൾഷൻ ഡിറ്റക്ഷൻ സിസ്റ്റം മെച്ചപ്പെടുത്തുക.
+
+**പ്രോംപ്റ്റ്:** GameObject-നെ പകർപ്പിച്ച് ഒരു PowerUp ക്ലാസ് സൃഷ്ടിക്കുക, ഹീറോയും പവർ-അപ്പുകളും തമ്മിലുള്ള കോൾഷൻ ഡിറ്റക്ഷൻ നടപ്പിലാക്കുക. অন্তിക്കായി രണ്ട് തരം പവർ-അപ്പുകൾ: ഒന്നു തീ വേഗത വർദ്ധിപ്പിക്കുന്നതും (കൂടാതെ കൂള്ഡൗൺ കുറയ്ക്കുന്ന), മറ്റൊന്ന് താൽക്കാലിക ഷീൽഡ് സൃഷ്ടിക്കുന്നത്. പവർ-അപ്പുകൾ ഓർത്തിരിക്കുകയും പദവി തിരഞ്ഞെടുക്കുകയും ചെയ്യുന്ന ലോഗിക് ഉൾപ്പെടുത്തുക.
+
+---
+
+
+
+## 🚀 വെല്ലുവിളി
+
+ഒരു സ്ഫോടനം ചേർക്കുക! [Space Art repo](../../../../6-space-game/solution/spaceArt/readme.txt) ലെ ഗെയിം ആസറ്റുകൾ നോക്കി, ലേസർ ഒരു എലിയനെ തട്ടുമ്പോൾ സ്ഫോടനം ഉണ്ടാക്കാൻ ശ്രമിക്കുക
+
+## പാഠാനന്തര ക്വിസ്
+
+[പോസ്റ്റ്-ലെക്ചർ ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/36)
+
+## അവലോകനം & സ്വയം പഠനം
+
+ഇതുവരെ നിങ്ങളുടെ ഗെയിമിലെ ഇന്റർവലുകൾ പരീക്ഷിക്കുക. അവ മാറ്റുമ്പോൾ എന്ത് സംഭവിക്കുന്നു? [ജാവാസ്ക്രിപ്റ്റ് ടൈമിംഗ് ഇവന്റുകൾ](https://www.freecodecamp.org/news/javascript-timing-events-settimeout-and-setinterval/) കുറിച്ച് കൂടുതൽ വായിക്കുക.
+
+## അസൈൻമെന്റ്
+
+[കോൾഷനുകൾ അവലോകനം ചെയ്യുക](assignment.md)
+
+---
+
+
+**സ്പഷ്ടീകരണം**:
+ഈ രേഖ AI പരിഭാഷാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതായിരിക്കുന്നു. ഞങ്ങൾ കൃത്യതയ്ക്ക് ശ്രമിക്കുന്നുണ്ടെങ്കിലും, автоматം വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ അസാധുതകൾ ഉണ്ടായിരിക്കാമെന്ന് ദയവായി ജാഗ്രത പുലർത്തുക. അസൽ ഭാഷയിലെ അടിസ്ഥാനം രേഖയാണ് അംഗീകരിക്കേണ്ട പ്രാധാനിക ഉറവിടം. പ്രധാന വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മാനവ പരിഭാഷ നിർദേശിക്കുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ ഉണ്ടായേക്കാവുന്ന തെറ്റിദ്ധാരണകൾക്കോ അർത്ഥക്ഷതിയിൽ ഉണ്ടായേക്കാവുന്ന പ്രശ്നങ്ങൾക്ക് ഞങ്ങൾ ഉത്തരവാദിത്വം ഏറ്റെടുക്കുകയില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/4-collision-detection/assignment.md b/translations/ml/6-space-game/4-collision-detection/assignment.md
new file mode 100644
index 000000000..755368d2a
--- /dev/null
+++ b/translations/ml/6-space-game/4-collision-detection/assignment.md
@@ -0,0 +1,64 @@
+
+# കൂട്ടിയിടിത്തങ്ങൾ പരീക്ഷിക്കുക
+
+## നിർദ്ദേശങ്ങൾ
+
+വിവിധ തരം വസ്തു ഇടപെടലുകൾ പ്രദർശിപ്പിക്കുന്ന ഒരു കസ്റ്റം മിനി-ഗെയിം സൃഷ്ടിച്ച് നിങ്ങളുടെ കൂട്ടിയിടുത്തം കണ്ടെത്തൽ അറിവ് പ്രയോഗിക്കുക. സൃഷ്ടിപരമായ നടപ്പാക്കലിനും പരീക്ഷണത്തിലൂം മുഖേന നിങ്ങൾക്ക് കൂട്ടിയിടി മൈക്കാനിക്സ് മനസ്സിലാക്കാൻ ഈ ഏൽപ്പാട് സഹായിക്കും.
+
+### പ്രോജക്ട് ആവശ്യകതകൾ
+
+**ഇടപെടലുള്ള ചെറിയ ഇന്ററാക്ടീവ് ഗെയിം സൃഷ്ടിക്കുക:**
+- **കീബോർഡ് അല്ലെങ്കിൽ മൗസ് ഇൻപുട്ട് വഴി നിയന്ത്രിക്കാവുന്ന നിരവധി സഞ്ചരിക്കുന്ന വസ്തുക്കൾ**
+- **പാഠത്തിൽ നിന്നുള്ള ചതുരം ചേർത്തിടുന്ന സിദ്ധാന്തങ്ങൾ ഉപയോഗിച്ച് കൂട്ടിയിടിത്തം കണ്ടെത്തൽ സംവിധാനം**
+- **കൂട്ടിയിടുത്തങ്ങൾ സംഭവിക്കുന്നപ്പോൾ ദൃശ്യ പ്രതികരണം** (വസ്തു നശീകരണം, നിറം മാറ്റങ്ങൾ, ಪರಿಣಾಮങ്ങൾ)
+- **കൂട്ടിയിടിത്തങ്ങളെ അർത്ഥപൂർണവും ആകർഷകവുമാക്കുന്ന ഗെയിം നിയമങ്ങൾ**
+
+### സൃഷ്ടിപരമായ നിർദ്ദേശങ്ങൾ
+
+**ഈ ഘടനകളിൽ ഒന്നിൽ നടപ്പാക്കാൻ പരിഗണിക്കുക:**
+- **ആസ്റ്ററോയിഡ് ഫീൽഡ്**: അപകടകരമായ ബാഹ്യാവകാശമേഖല വഴി ഒരു കപ്പൽ നയിക്കുക
+- **ബമ്പർ കാർസ്**: ഭൗതിക ആധാരമുള്ള കൂട്ടിയിടുത്ത അരീന സൃഷ്ടിക്കുക
+- **മീറ്റിയോർ ഡിഫൻസ്**: ഭൂമിയെ വരവേൽക്കുന്ന ബഹിരാകാശ കല്ലുകളിൽനിന്നു രക്ഷിക്കുക
+- **ശേഖരണ ഗെയിം**: തടസ്സങ്ങൾ ഒഴിവാക്കി വസ്തുക്കൾ ശേഖരിക്കുക
+- **പ്രദേശം നിയന്ത്രണം**: സ്ഥലങ്ങള് സ്വന്തമാക്കാൻ ശ്രമിക്കുന്ന മത്സരിക്കുന്ന വസ്തുക്കൾ
+
+### പ്രായോഗിക നടപ്പാക്കലുകൾ
+
+**നിങ്ങളുടെ പരിഹാരം പ്രകടിപ്പിക്കുക:**
+- ചതുരം അടിസ്ഥാനമാക്കിയുള്ള കൂട്ടിയിടിത്തം കണ്ടെത്തലിന്റെ ശരിയായ ഉപയോഗം
+- ഉപയോക്തൃ ഇൻപുട്ടിനുള്ള സംഭവം പ്രേരിത പ്രോഗ്രാമിംഗ്
+- വസ്തു ജീവിതചക്രം മാനেজ്മെന്റ് (സൃഷ്ടിയും നശീകരണവും)
+- അനുയോജ്യമായ ക്ലാസ് ഘടനയോടെ വൃത്തിയുള്ള കോഡ് ഘടന
+
+### ബോണസ് വെല്ലുവിളികൾ
+
+**കൂടുതല് സവിശേഷതകളോടെ നിങ്ങളുടെ ഗെയിം വിപുലമാക്കുക:**
+- **കൂട്ടിയിടുത്തങ്ങൾ ഉണ്ടാകുമ്പോൾ പാർട്ടിക്കിൾ ഫലങ്ങൾ**
+- **വ müxtəlif കൂട്ടിയിടി തരം അടിസ്ഥാനമാക്കിയുള്ള ശബ്ദഫലങ്ങൾ**
+- **കൂട്ടിയിടി ഫലങ്ങളുടെ അടിസ്ഥാനത്തിലുള്ള സ്കോറിംഗ് സംവിധാനം**
+- **മസ്കല വ്യത്യസ്ത സ്വഭാവങ്ങളുള്ള നിരവധി കൂട്ടിയിടിത്ത തരം**
+- **കാലക്രമേണ ഉയർന്നുവരുന്ന വെല്ലുവിളികളുടെ ക്രമീകരണം**
+
+## റൂബ്രിക്
+
+| ക്രൈറ്റീരിയ | ഉത്തമം | യഥാർത്ഥം | മെച്ചപ്പെടുത്തൽ ആവശ്യമാണ് |
+|----------|-----------|----------|-------------------|
+| **കൂട്ടിയിടിത്തം കണ്ടെത്തൽ** | പല വസ്തു തരംമാരും സങ്കീർണ്ണ ഇടപെടൽ നിയമങ്ങളോടെ കൃത്യമായ ചതുരം അടിസ്ഥാനമാക്കിയുള്ള കൂട്ടിയിടിത്തം കണ്ടെത്തലും നടപ്പാക്കും | അടിസ്ഥാനക്കൂട്ടിയിടിത്തം ശരിയായി പ്രവർത്തിച്ച് ലഘുവായ വസ്തു ഇടപെടലുകൾ | കൂട്ടിയിടിത്തം കണ്ടെത്തലിൽ പ്രശ്നങ്ങൾ ഉണ്ടോ സ്ഥിരതയില്ല |
+| **കോഡ് ഗുണനിലവാരം** | ശരിയായ ക്ലാസ് ഘടന, അഭിപ്രേതമായ വെരിയബിൾ നാമങ്ങൾ, അനുയോജ്യമായ കമന്റുകൾ ഉൾപ്പടെ വൃത്തിയുള്ള, നന്നായി സംഘമാക്കിയ കോഡ് | ജോലി ചെയ്യുന്ന കോഡ് എന്നാൽ മികച്ച ഘടനയോ ഡോക്യുമെന്റേഷനോ വേണം | മനസ്സിലാക്കാൻ ബുദ്ധിമുട്ടുള്ള അല്ലെങ്കിൽ ദുർബ്ബലമായ ഘടനയുള്ള കോഡ് |
+| **ഉപയോക്തൃ ഇടപെടൽ** | സ്മൂത്ത് ഗെയിംപ്ലേ, വ്യക്തമായ ദൃശ്യപ്രതികരണം, ആകർഷക മേക്കനിക്സ്, പ്രതികരിക്കുന്ന നിയന്ത്രണങ്ങൾ | അടിസ്ഥാന നിര്ദേശങ്ങൾ പ്രവർത്തിക്കുന്നു, മതിയായ പ്രതികരണം | നിയന്ത്രണങ്ങൾ പ്രതികരിക്കാതെ അല്ലെങ്കിൽ ആശയക്കുഴപ്പം സൃഷ്ടിക്കുന്നു |
+| **സൃഷ്ടിപരത്വം** | പ്രത്യേകം സവിശേഷതകൾ, ദൃശ്യഭംഗി, നവീന കൂട്ടിയിടിത്ത സ്വഭാവങ്ങളോടെ ആസ്വാദനാത്മക ആശയം | ചില സൃഷ്ടിപരമായ ഘടകങ്ങളോടു കൂടിയ സ്റ്റാൻഡേർഡ് നടപ്പാക്കൽ | സൃഷ്ടിപരത്വം ഇല്ലാത്ത അടിസ്ഥാന പ്രവർത്തനക്ഷമത |
+
+---
+
+
+**അസൂയാപത്രം**:
+ഈ പ്രമാണം AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ ಶುದ್ಧതയ്ക്ക് പരിശ്രമിക്കുന്നുവെങ്കിലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ അശുദ്ധികൾ ഉണ്ടായിരിക്കാമെന്ന് ശ്രദ്ധിക്കേണ്ടതാണ്. യഥാർത്ഥ പ്രമാണം അതിന്റെ സ്വഭാവത്തിലുള്ള ഭാഷയിൽ അധികാരപ്രദമായ ഉറവിടമായി പരിഗണിക്കപ്പെടണം. പ്രധാന വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകുന്ന തെറ്റിദ്ധാരണങ്ങൾക്ക് ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/4-collision-detection/solution/README.md b/translations/ml/6-space-game/4-collision-detection/solution/README.md
new file mode 100644
index 000000000..bb4ceac55
--- /dev/null
+++ b/translations/ml/6-space-game/4-collision-detection/solution/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡർ ആണ്, ഉദ്ദേശപൂർവം ഒഴിവാക്കിയിരിക്കുന്നു
+
+---
+
+
+**തള്ളി പറയൽ**:
+ഈ പ്രമാണം [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന AI വിവർത്തന സേവനം ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. ഞങ്ങൾ കൃത്യതയുടെ ശ്രമം നടത്തുന്നുവെങ്കിൽ പോലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ ചില പിഴവുകൾ അല്ലെങ്കിൽ അശുദ്ധികൾ ഉണ്ടാകുമെന്ന് ദയവായി മനസിലാക്കുക. ലഘുവായ ഭാഷയിലുള്ള اصل പ്രമാണമാണ് ഔദ്യോഗികമായ ഉറവിടം. അത്യാവശ്യം വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനാൽ സൃഷ്ടമായ ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾ അല്ലെങ്കിൽ മറുവാചകങ്ങൾക്കായി ഞങ്ങൾ ബാധ్యత വഹിക്കില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/4-collision-detection/your-work/README.md b/translations/ml/6-space-game/4-collision-detection/your-work/README.md
new file mode 100644
index 000000000..3763ff76c
--- /dev/null
+++ b/translations/ml/6-space-game/4-collision-detection/your-work/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡറാണ്, ഉദ്ദേശ്യപൂർവം ശൂന്യമായി വച്ച് നന്നിരിക്കുന്നു
+
+---
+
+
+**ഡിസ്ക്ലെയ്മർ**:
+ഈ രേഖ AI പരിഭാഷ സേവനം [കോ-ഓപ് ട്രാൻസ്ലേറ്റർ](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. നമുക്ക് സത്യസന്ധതയ്ക്കായി പരിശ്രമിച്ചാൽ പോലും, യന്ത്രം ചെയ്ത പരിഭാഷകളിൽ പിശകുകളും തെറ്റുകളും ഉണ്ടാകാമെന്ന് ദയവായി മനസ്സിലാക്കുക. ഈ രേഖയുടെ മാതൃഭാഷയിൽ ഉള്ള അസൽ പതിപ്പ് അതിന്റെ അധികാരമതിയായ ഉറവിടമാക്കിക്കണം. പ്രധാന വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ അനുശംസിക്കുന്നു. ഈ പരിഭാഷയുടെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന യാതൊരുവിധം തെറ്റിദ്ധാരണകൾക്കോ ദുർവ്യാഖ്യാനങ്ങൾക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/5-keeping-score/README.md b/translations/ml/6-space-game/5-keeping-score/README.md
new file mode 100644
index 000000000..d8c747585
--- /dev/null
+++ b/translations/ml/6-space-game/5-keeping-score/README.md
@@ -0,0 +1,508 @@
+
+# സ്പെയ്സ് ഗെയിം പണി 5: സ്കോറിംഗ് ആൻഡ് ലൈവ്സ്
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ഗെയിം ഡിസൈൻ യാത്ര
+ section കളിക്കാരന്റെ പ്രതികരണം
+ സ്കോറിംഗ് സൈകോലജി മനസിലാക്കുക: 3: Student
+ ദൃശ്യ സംവേദനം പഠിക്കുക: 4: Student
+ സോഷ്യൽ റിവാർഡ് സിസ്റ്റങ്ങൾ ഡിസൈൻ ചെയ്യുക: 4: Student
+ section സാങ്കേതിക നടപ്പാക്കൽ
+ ക്യാൻവാസ് ടെക്സ്റ്റ് റെൻഡറിംഗ്: 4: Student
+ സ്റ്റേറ്റ് മാനേജ്മെന്റ്: 5: Student
+ ഇവന്റ്-ഓരiented അപ്ഡേറ്റുകൾ: 5: Student
+ section ഗെയിം പൊളിഷ്
+ ഉപയോക്തൃ അനുഭവം ഡിസൈൻ: 5: Student
+ വെല്ലുവിളിയും റിവാർഡും ബാലൻസ് ചെയ്യുക: 5: Student
+ ആകർഷകമായ ഗെയിംപ്ലേ സൃഷ്ടിക്കുക: 5: Student
+```
+## പ്രീ-ലെക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/37)
+
+നിങ്ങളുടെ സ്പെയ്സ് ഗെയിം ഒരു യഥാർത്ഥ ഗെയിം പോലെ തോന്നാൻ സജ്ജമാണോ? പോയിന്റുകൾ ഉൾപ്പെടുത്തലും ലിവുകൾ മാനേജ്മെന്റും ചേർക്കാം - ആദ്യകാല ആർക്കേഡ് ഗെയിമുകൾ പോലുള്ള സ്പെയ്സ് ഇൻവേഡേഴ്സ് പോലുള്ള ലളിത പ്രദർശനങ്ങളിൽ നിന്ന് ആഡ്ഡിക്ക്ടീവ് എന്റർടെയ്ൻമെന്റിലേക്കുള്ള കോർ മെക്കാനിക്സുകൾ. ഇവിടെ നിങ്ങളുടെ ഗെയിം യഥാർത്ഥത്തിൽ കളിക്കാൻ പാടുള്ളതാകും.
+
+```mermaid
+mindmap
+ root((ഗെയിം ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ))
+ Visual Communication
+ Text Rendering
+ Icon Display
+ Color Psychology
+ Layout Design
+ Scoring Mechanics
+ Point Values
+ Reward Timing
+ Progress Tracking
+ Achievement Systems
+ Life Management
+ Risk vs Reward
+ Player Agency
+ Difficulty Balance
+ Recovery Mechanics
+ User Experience
+ Immediate Feedback
+ Clear Information
+ Emotional Response
+ Engagement Loops
+ Implementation
+ Canvas API
+ State Management
+ Event Systems
+ Performance
+```
+## സ്ക്രീനിലെ ടെക്സ്റ്റ് വരയ്ക്കൽ - നിങ്ങളുടെ ഗെയിമിന്റെ ശബ്ദം
+
+നിങ്ങളുടെ സ്കോർ പ്രദർശിപ്പിക്കാൻ, ക്യാൻവാസിൽ ടെക്സ്റ്റ് എങ്ങനെ റെണ്ടർ ചെയ്യാമെന്ന് പഠിക്കേണ്ടതാണ്. `fillText()` മെത്തഡ് ഇതിന് പ്രധാന ഉപകരണം - ക്ലാസ്സിക് ആർക്കേഡ് ഗെയിമുകളിൽ സ്കോർസ്, സ്റ്റാറ്റസ് വിവരങ്ങൾ കാണിക്കാനായി ഉപയോഗിച്ച സമാന സാങ്കേതിക വിദ്യ.
+
+```mermaid
+flowchart LR
+ A["📝 എഴുത്ത് ഉള്ളടക്കം"] --> B["🎨 സ്റ്റൈലിംഗ്"]
+ B --> C["📍 സ്ഥാനം നിശ്ചയിക്കൽ"]
+ C --> D["🖼️ ക്യാനവാസ് റെൻഡർ"]
+
+ E["ഫോണ്ട് കുടുംബം"] --> B
+ F["ഫോണ്ട് വലുപ്പം"] --> B
+ G["നിറം"] --> B
+ H["അലൈൻമെന്റ്"] --> B
+
+ I["X കോർഡിനേറ്റ്"] --> C
+ J["Y കോർഡിനേറ്റ്"] --> C
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+```
+നിങ്ങൾക്ക് ടെക്സ്റ്റ് രൂപം പൂർണ്ണമായി നിയന്ത്രിക്കാം:
+
+```javascript
+ctx.font = "30px Arial";
+ctx.fillStyle = "red";
+ctx.textAlign = "right";
+ctx.fillText("show this on the screen", 0, 0);
+```
+
+✅ [ക്യാൻവാസിൽ ടെക്സ്റ്റ് ചേർക്കൽ](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_text) കൂടുതൽ ദൈർഘ്യമേറിയ പഠനം എളുപ്പം ചെയ്യൂ - ഫോണ്ടുകളും സ്റ്റൈലിംഗും സംബന്ധിച്ചാൽ നിങ്ങൾക്ക് ഏറ്റവും സൃഷ്ടിപരമായ കാര്യങ്ങൾ കണ്ടെത്താൻ സാധിക്കും!
+
+## ലൈവ്സ് - ഒരു സംഖ്യയെ വെറും നോക്കി മാത്രം കാണാതെ
+
+ഗെയിം ഡിസൈനിൽ, "ലൈഫ്" എന്നത് പ്ലെയറുടെ പിഴവ് പാടവത്തിന് മാർജിന് ആണ്. ഈ ആശയം പിന്ബോൾ മെഷീനുകളിൽ നിന്ന് ഉദ്ഭവിച്ചു, അവിടെ നിങ്ങൾക്ക് കളിക്കാനായി പല ബോളുകളും ലഭിച്ചിരുന്നു. അഴ്സ്റ്റ്രോയിഡ്സ് പോലുള്ള ആദിമ വീഡിയോ ഗെയിമുകളിൽ, ലൈവുകൾ പ്ലെയർമാർക്ക് റിസ്കുകൾ എടുക്കാനും പിഴവുകളിൽ നിന്നു പഠിക്കാനും അനുവാദം നൽകി.
+
+```mermaid
+flowchart TD
+ A["🎮 കളിക്കാരന്റെ പ്രവർത്തനം"] --> B{"റിസ്ക് അസ്സസ്മെന്റ്"}
+
+ B --> C["ഉയർന്ന റിസ്ക്, ഉയർന്ന റിവാർഡ്"]
+ B --> D["സുരക്ഷിത പദ്ധതി"]
+
+ C --> E{"ഫലം"}
+ D --> F["സ്ഥിരമായ പുരോഗതി"]
+
+ E -->|വिजയം| G["🏆 വലിയ പോയിന്റുകൾ"]
+ E -->|പരാജയം| H["💔 ജീവൻ നഷ്ടപ്പെടുക"]
+
+ H --> I{"ജീവിതങ്ങൾ ശേഷിക്കുമോ?"}
+ I -->|അതെ| J["🔄 വീണ്ടും ശ്രമിക്കുക"]
+ I -->|ഇല്ല| K["💀 ഗെയിം ഒവർ"]
+
+ J --> B
+ G --> B
+ F --> B
+
+ style C fill:#ffebee
+ style D fill:#e8f5e8
+ style G fill:#e3f2fd
+ style H fill:#fff3e0
+```
+ദൃശ്യ പ്രതിനിധാനം വളരെ പ്രധാനമാണ് - "Lives: 3" എന്ന എഴുത്തിനേക്കാളും കപ്പല് ഐകോണുകൾ പ്രദർശിപ്പിക്കുന്നത് ഉടൻ ദൃശ്യപര തിരിച്ചറിവു നൽകുന്നു, ഇത് ആദിമ ആർക്കേഡ് കാബിനറ്റുകൾ ഭാഷാ ബാരിയറുകളെ മറികടക്കാൻ ഐകോനോഗ്രഫി ഉപയോഗിച്ചതുപോലെ.
+
+## നിങ്ങളുടെ ഗെയിമിന്റെ റിവാർഡ് സിസ്റ്റം നിർമ്മിക്കൽ
+
+ഇപ്പോൾ നാം പ്ലെയർമാരെ ആകർഷിക്കുകയും നിരന്തരമായി ഉൾപ്പെടുത്തുകയും ചെയ്യുന്ന കോർ ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ നടപ്പിലാക്കാം:
+
+```mermaid
+sequenceDiagram
+ participant Player
+ participant GameEngine
+ participant ScoreSystem
+ participant LifeSystem
+ participant Display
+
+ Player->>GameEngine: ശൂട്ട്സ് ശത്രു
+ GameEngine->>ScoreSystem: പോയിന്റുകള് നല്കുക
+ ScoreSystem->>ScoreSystem: +100 പോയിന്റുകള്
+ ScoreSystem->>Display: സ്കോര് അപ്ഡേറ്റ് ചെയ്യുക
+
+ Player->>GameEngine: ശത്രുവുമായി കൂട്ടിയിടിക്കുന്നു
+ GameEngine->>LifeSystem: ജീവിതം നഷ്ടപ്പെടുന്നു
+ LifeSystem->>LifeSystem: -1 ജീവിതം
+ LifeSystem->>Display: ജീവിതങ്ങള് അപ്ഡേറ്റ് ചെയ്യുക
+
+ alt ജീവിതങ്ങള് > 0
+ LifeSystem->>Player: കളി തുടരുക
+ else ജീവിതങ്ങള് = 0
+ LifeSystem->>GameEngine: ഗെയിം ഒവര്
+ end
+```
+- **സ്കോറിംഗ് സിസ്റ്റം**: ഓരോ നശിച്ച ശത്രു കപ്പലും 100 പോയിന്റ് നൽകുന്നു (ചുറ്റും പറ്റിയ സംഖ്യകൾ മental കണക്കാക്കാൻ എളുപ്പമാണ്). സ്കോർ സ്ക്രീന്റെ താഴ് വലത് കോണിൽ പ്രദർശിപ്പിക്കും.
+- **ലൈഫ് കൗണ്ടർ**: നിങ്ങളുടെ ഹീറോ മൂന്നു ലൈവുകളുമായാണ് ആരംഭിക്കുക - ആദിമ ആർക്കേഡ് ഗെയിമുകൾ സ്ഥാപിച്ച സ്റ്റാൻഡേർഡ്, ഈ ചെറിയ সংখ্যা പ്ലേയ്ബിലിറ്റിക്കൊപ്പം വെല്ലുവിളി കൂട്ടുന്നു. ഓരോ ശത്രു കൂട്ടിയിടിപ്പും ഒരു ലൈഫ് നഷ്ടപ്പെടുന്നു. ബാക്കിയുള്ള ലൈവുകൾ താഴ് വലതു കോണിൽ കപ്പൽ ഐക്കണുകളിലായി (  ) കാണിക്കും.
+
+## നമുക്ക് ആരംഭിക്കാം!
+
+ആദ്യമായി, നിങ്ങളുടെ വർക്ക്സ്പേസ് സജ്ജമാക്കൂ. `your-work` സബ് ഫോൾഡറിലുള്ള ഫയലുകളിലേക്ക് നയിക്കൂ. നിങ്ങൾക്ക് താഴെ കാണുന്ന ഫയലുകൾ കാണാനാകും:
+
+```bash
+-| assets
+ -| enemyShip.png
+ -| player.png
+ -| laserRed.png
+-| index.html
+-| app.js
+-| package.json
+```
+
+നിങ്ങളുടെ ഗെയിം ടെസ്റ്റ് ചെയ്യുന്നതിന്, `your_work` ഫോൾഡറിൽ നിന്ന് ഡെവലപ്പ്മെന്റ് സർവർ തുടങ്ങി:
+
+```bash
+cd your-work
+npm start
+```
+
+ഇത് `http://localhost:5000` എന്ന ലൊക്കൽ സെർവർ പ്രവർത്തിപ്പിക്കും. നിങ്ങളുടെ ബ്രൗസറിൽ ഈ അഡ്രസ് തുറക്കൂ. കോണ്ട്രോളുകൾ അരോ കീകൾ ഉപയോഗിച്ച് പരീക്ഷിച്ച്, ശത്രുക്കളെ വെടിവെച്ചു പരിശോധിക്കൂ എല്ലാ പ്രവർത്തനങ്ങളും ശരിയായിട്ടാണെന്ന്.
+
+```mermaid
+flowchart TD
+ A["1. ആസ്തി ലോഡിങ്"] --> B["2. ഗെയിം വേരിയബിളുകൾ"]
+ B --> C["3. സംഘർഷം കണ്ടെത്തൽ"]
+ C --> D["4. നായകൻ മെച്ചപ്പെടുത്തൽ"]
+ D --> E["5. പ്രദർശന ഫംഗ്ഷനുകൾ"]
+ E --> F["6. ഇവന്റ് ഹാൻഡ്ലറുകൾ"]
+
+ G["ലൈഫ്ഐക്കൺ ചിത്രം"] --> A
+ H["സ്കോറും ജീവനും ട്രാക്കിങ്"] --> B
+ I["നായകൻ-ശത്രു മറുപടി"] --> C
+ J["പോയിന്റുകൾ & ലൈഫ് മാര്ഗ്ഗങ്ങള്"] --> D
+ K["ടെക്സ്റ്റും ഐക്കണും റെൻഡറിംഗ്"] --> E
+ L["റിവാർഡ് & പിനാല്റ്റി ലോജിക്"] --> F
+
+ F --> M["🎮 പൂര്ണ ഗെയിം"]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+ style F fill:#fce4ec
+ style M fill:#e1f5fe
+```
+### കോഡ് എഴുതാൻ സമയം!
+
+1. **ആവശ്യമുള്ള ദൃശ്യ വസ്തുക്കൾ പിടിക്കുക**. `solution/assets/` ഫോൾഡറിൽ നിന്നുള്ള `life.png` ആസ്തി നിങ്ങളുടെ `your-work` ഫോൾഡറിൽ കോപ്പി ചെയ്യുക. പിന്നീട് lifeImg നിങ്ങളുടെ window.onload ഫังก്ഷനിൽ ചേർക്കുക:
+
+ ```javascript
+ lifeImg = await loadTexture("assets/life.png");
+ ```
+
+1. `lifeImg` നിങ്ങളുടെ ആസ്തി ലിസ്റ്റിൽ ചേർക്കുന്നത് മറക്കരുത്:
+
+ ```javascript
+ let heroImg,
+ ...
+ lifeImg,
+ ...
+ eventEmitter = new EventEmitter();
+ ```
+
+2. **ഗെയിം വേരിയബിളുകൾ സജ്ജമാക്കുക**. മൊത്തം സ്കോർ (0 മുതൽ തുടങ്ങിയ) ഒപ്പം ശേഷിച്ച ലൈവുകൾ (3 മുതൽ) ട്രാക്ക് ചെയ്യാൻ ചില കോഡ് ചേർക്കുക. ഞങ്ങൾ ഇത് സ്ക്രീനിൽ പ്രദർശിപ്പിക്കും, എന്നിങ്ങനെ പ്ലേയേഴ്സ് എവിടെ നിന്നാണ് എന്ന് അറിയാം.
+
+3. **കാളിഷൻ ഡിറ്റക്ഷൻ നടപ്പിലാക്കുക**. ശത്രുക്കൾ നിങ്ങളുടെ ഹീറോയുമായുള്ള കൂട്ടിയിടിപ്പുകൾ കണ്ടെത്താൻ `updateGameObjects()` ഫംഗ്ഷൻ വ്യാപിപ്പിക്കുക:
+
+ ```javascript
+ enemies.forEach(enemy => {
+ const heroRect = hero.rectFromGameObject();
+ if (intersectRect(heroRect, enemy.rectFromGameObject())) {
+ eventEmitter.emit(Messages.COLLISION_ENEMY_HERO, { enemy });
+ }
+ })
+ ```
+
+4. **ഹീറോയിലേക്ക് ലൈഫ്, പോയിന്റ് ട്രാക്കിങ് ചേർക്കുക**.
+ 1. **കൗണ്ടറുകൾ ആരംഭിക്കുക**. നിങ്ങളുടെ `Hero` ക്ലാസിലുന് `this.cooldown = 0` താഴെ, ലൈഫ്, പോയിന്റുകൾ സജ്ജമാക്കൂ:
+
+ ```javascript
+ this.life = 3;
+ this.points = 0;
+ ```
+
+ 1. **ഈ മൂല്യങ്ങൾ പ്ലെയറിന് കാണിക്കുക**. സ്ക്രീനിൽ ഇതൊക്കെ വരയ്ക്കാൻ ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കുക:
+
+ ```javascript
+ function drawLife() {
+ // ചെയ്യാനുള്ളത്, 35, 27
+ const START_POS = canvas.width - 180;
+ for(let i=0; i < hero.life; i++ ) {
+ ctx.drawImage(
+ lifeImg,
+ START_POS + (45 * (i+1) ),
+ canvas.height - 37);
+ }
+ }
+
+ function drawPoints() {
+ ctx.font = "30px Arial";
+ ctx.fillStyle = "red";
+ ctx.textAlign = "left";
+ drawText("Points: " + hero.points, 10, canvas.height-20);
+ }
+
+ function drawText(message, x, y) {
+ ctx.fillText(message, x, y);
+ }
+
+ ```
+
+ 1. **എല്ലാം ഗെയിം ലൂപിൽ കണക്ട് ചെയ്യുക**. `updateGameObjects()` ന് ശേഷം നിങ്ങളുടെ window.onload ഫംഗ്ഷനിൽ ഈ ഫംഗ്ഷനുകൾ ചേർക്കുക:
+
+ ```javascript
+ drawPoints();
+ drawLife();
+ ```
+
+### 🔄 **പഠനചെക്ക്-ഇൻ**
+**ഗെയിം ഡിസൈൻ ഗ്രഹിക്കൽ**: പ്രത്യാഘാതങ്ങളും ഫലങ്ങളും നടപ്പിലാക്കുന്നതിനു മുമ്പ്:
+- ✅ ദൃശ്യ ഫീഡ്ബാക്ക് ഗെയിം സ്റ്റേറ്റ് പ്ലയർമാർക്ക് എങ്ങനെ അറിയിക്കുന്നു
+- ✅ UI ഘടകങ്ങളുടെ സ്ഥിരത യുസബിൾ ആയിരിക്കാൻ എങ്ങനെ സഹായിക്കുന്നു
+- ✅ പോയിന്റ് മൂല്യങ്ങളും ലൈഫ് മാനേജ്മെന്റ് പിന്നെയുള്ള മനോവശേഷി
+- ✅ ക്യാൻവാസ് ടെക്സ്റ്റ് റെണ്ടറിങ്ങിന്റെ HTML ടെക്സ്റ്റിൽ നിന്ന് വ്യത്യാസം
+
+**വേഗം സ്വയംപരിശോധനം**: ആർക്കേഡ് ഗെയിമുകൾ സാധാരണയായി പോയിന്റ് മൂല്യങ്ങൾക്ക് ചുറ്റുപാട് സംഖ്യകൾ ഉപയോഗിക്കുന്നത് എന്തുകൊണ്ട്?
+*ഉത്തരം: ചുറ്റുപാട് സംഖ്യകൾ കണക്കാക്കാൻ എളുപ്പമാണ്, മനസ്സിലേക്ക് സമ്മതസ്ഥായമായ പ്രതിഫലങ്ങൾ നൽകുന്നു*
+
+**ഉപയോക്തൃ അനുഭവത്തിന്റെ സിദ്ധാന്തങ്ങൾ**:
+- **ദൃശ്യ ക്രമീകരണം**: പ്രധാന വിവരങ്ങൾ പ്രാമുഖ്യത്തോടെ കാണിക്കുക
+- **തക്ഷണ പ്രതികരണം**: പ്ലെയർ പ്രവർത്തനങ്ങൾക്ക് റിയൽ-ടൈം അപ്ഡേറ്റുകൾ
+- **സങ്കല്പ ചുമതും മനോവിജ്ഞാനവും**: ലളിതവും വ്യക്തവുമായ വിവര പ്രദർശനം
+- **ഭാവന രൂപകൽപ്പന**: ഐക്കണുകളും നിറങ്ങളും പ്ലെയർ ബന്ധം ഓർമ്മപ്പെടുത്തുന്നു
+
+1. **ഗെയിം ഫലം പ്രവൃത്തിയിൽ വരുത്തുക**. ഇപ്പോൾ പ്ലെയർ പ്രവർത്തനങ്ങൾ അസൽമാർത്തമാക്കുന്ന ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ ചേർക്കാം:
+
+ 1. **കാളിഷൻ പാലിക്കുന്നത് ലൈഫ് നഷ്ടപ്പെടുന്നത് ആക്കുന്നു**. നിങ്ങളുടെ ഹീറോ ഒരു ശത്രുവിനോടു കൂട്ടിയിടിച്ചാൽ ഒരുങ്ങി ഒരു ലൈഫ് നഷ്ടപ്പെടും.
+
+ ഈ മെത്തഡ് നിങ്ങളുടെ `Hero` ക്ലാസിൽ ചേർക്കുക:
+
+ ```javascript
+ decrementLife() {
+ this.life--;
+ if (this.life === 0) {
+ this.dead = true;
+ }
+ }
+ ```
+
+ 2. **ശത്രുക്കളെ വെടിവെക്കുന്നതിൽ പോയിന്റുകൾ നേടും**. ഓരോ വിജയകരമായ ഷോട്ട് 100 പോയിന്റ് നൽകുന്നു, കൃത്യമായ ഷൂട്ടിങ്ങിന് തಕ್ಷಣ ഫലപ്രദമായ പോസിറ്റീവ് ഫീഡ്ബാക്ക്.
+
+ നിങ്ങളുടെ Hero ക്ലാസിൽ മറ്റു മെത്തഡായി ഇത് ചേർക്കുക:
+
+ ```javascript
+ incrementPoints() {
+ this.points += 100;
+ }
+ ```
+
+ ഇനി ഈ ഫംഗ്ഷനുകൾ നിങ്ങളുടെ കൂട്ടിയിടിപ്പ് ഇവന്റുകളുമായി ബന്ധിപ്പിക്കുക:
+
+ ```javascript
+ eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
+ first.dead = true;
+ second.dead = true;
+ hero.incrementPoints();
+ })
+
+ eventEmitter.on(Messages.COLLISION_ENEMY_HERO, (_, { enemy }) => {
+ enemy.dead = true;
+ hero.decrementLife();
+ });
+ ```
+
+✅ ജാവാസ്ക്രിപ്റ്റും ക്യാൻവാസും ഉപയോഗിച്ച് നിർമ്മിച്ച മറ്റു ഗെയിമുകളെക്കുറിച്ച് അറിയാൻ ആഗ്രഹമുണ്ടോ? കുറച്ച് തിരയൂ - നിങ്ങൾക്കു ആശ്ചര്യം തോന്നും!
+
+ഈ പ്രവർത്തനങ്ങൾ നടപ്പിലാക്കിയതിന് ശേഷം ഗെയിം ടെസ്റ്റ് ചെയ്ത് മുഴുവൻ ഫീഡ്ബാക്ക് സിസ്റ്റം പ്രവർത്തനം പരിശോധിക്കൂ. താഴ് വലതു ലൈഫ് ഐക്കണുകൾ കാണിച്ചിരിക്കും, ബാക്ക് ഡോക്ടർ സ്കോർ താഴ് ഇടത് കാണും, കൂട്ടിയിടുപ്പ് ലൈവ് കുറയ്ക്കുമ്പോഴും വിജയകരമായ ഷോട്ടുകൾ സ്കോർ കൂട്ടുമ്പോഴും കാണാം.
+
+നിങ്ങളുടെ ഗെയിം ആദ്യകാല ആർക്കേഡ് ഗെയിമുകൾ പോലെ പ്രേരകവും വ്യക്തവും ആകുന്നതിന് ആവശ്യമായ കോർ മെക്കാനിക്സുകൾ ഉൾക്കൊള്ളുന്നു - വ്യക്തമുളള ലക്ഷ്യങ്ങൾ, തത്സമയം ഫീഡ്ബാക്ക്, പ്ലെയർ പ്രവർത്തനങ്ങൾക്ക് ഫലം കാണിക്കൽ.
+
+### 🔄 **പഠനചെക്ക്-ഇൻ**
+**പരിപൂർണ്ണ ഗെയിം ഡിസൈൻ സിസ്റ്റം**: പ്ലെയർ ഫീഡ്ബാക്ക് തന്റെ മേൽനോട്ടം ഉറപ്പാക്കുക:
+- ✅ സ്കോറിംഗ് മെക്കാനിസങ്ങൾ പ്ലെയർ പ്രേരണയും ഉൾപ്പെടും സംഭവിപ്പിക്കുന്നത് എങ്ങനെ?
+- ✅ ദൃശ്യ സ്ഥിരത യൂസർ ഇന്റർഫേസ് ഡിസൈനിൽ എങ്ങനെ പ്രാധാന്യമാർന്നതാണ്?
+- ✅ ലൈഫ് സിസ്റ്റം വെല്ലുവിളിയും പ്ലെയർ നിലനിർത്തലും എങ്ങനെ ബലൻസ് ചെയ്യുന്നു?
+- ✅ തൽക്ഷണ ഫീഡ്ബാക്ക് സുഖപ്രദമായ ഗെയിംപ്ലേ സൃഷ്ടിക്കുവാൻ എന്താണ് പങ്ക്?
+
+**സിസ്റ്റം സംയോജനം**: നിങ്ങളുടെ ഫീഡ്ബാക്ക് സംവിധാനം കാണിച്ചു തരുന്നത്:
+- **ഉപയോക്തൃ അനുഭവം ഡിസൈൻ**: വ്യക്തവും മികവുറ്റ ദൃശ്യ സമ്പ്രേഷണം
+- **ഇവന്റ്-ഡ്രൈവ് ആർകിടെക്ചർ**: പ്ലെയർ പ്രവർത്തനങ്ങൾക്ക് ഫലപ്രദമായ അപ്ഡേറ്റുകൾ
+- **സംസ്ഥിതി മാനേജ്മെന്റ്**: ഡൈനാമിക് ഗെയിം ഡാറ്റ ട്രാക്ക് ചെയ്യ অল
+- **ക്യാൻവാസ് മാസ്റ്ററി**: ടെക്സ്റ്റ് റെണ്ടറിംഗ്, സ്പ്രൈറ്റ് സ്ഥാനം
+- **ഗെയിം സൈക്കോളജി**: പ്ലെയർ പ്രേരണയും ഉൾപ്പെടുത്തലും മനസ്സിലാക്കൽ
+
+**പ്രൊഫഷണൽ പാറ്റേണുകൾ**: നിങ്ങൾ നടപ്പിലാക്കിയിരിക്കുന്നത്:
+- **MVC ആർകിടെക്ചർ**: ഗെയിം ലോജിക്, ഡാറ്റ, പ്രദർശനം വേർതിരിച്ച സ്വഭാവം
+- **ഓബ്ജർവർ പാറ്റേൺ**: ഗെയിം സ്റ്റേറ്റ് മാറ്റങ്ങൾക്ക് ഇവന്റ്-ഡ്രൈവ് അപ്ഡേറ്റുകൾ
+- **കമ്പോണന്റ് ഡിസൈൻ**: റെൻഡറിങ്, ലോജിക് വീണ്ടും ഉപയോഗിക്കാവുന്ന ഫംഗ്ഷൻ
+- **പ്രദർശന മെച്ചപ്പെടുത്തൽ**: ഗെയിം ലൂപ്പുകളിൽ ഫലപ്രദമായ റെന്ററിംഗ്
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയുന്നത്**
+- [ ] സ്കോർ പ്രദർശനത്തിന് വ്യത്യസ്ത ഫോണ്ട് വലിപ്പങ്ങളും നിറങ്ങളും പരീക്ഷിക്കുക
+- [ ] പോയിന്റ് മൂല്യങ്ങൾ മാറ്റി ഗെയിംപ്ലേ അനുഭവം എങ്ങനെ മാറുന്നു చూడുക
+- [ ] പോയിന്റ്, ലൈഫ് മാറ്റം ട്രാക്ക് ചെയ്യാൻ console.log സ്റ്റേറ്റ്മെന്റുകൾ ചേർക്കുക
+- [ ] ലൈഫുകൾหมดതായാലോ ഉയർന്ന സ്കോറ് നേടുന്നതിന്റെയും എഡ്ജ് കേസ് പരീക്ഷണം
+
+### 🎯 **ഈ മണിക്കൂറിൽ നിങ്ങൾ കൈവരിക്കാൻ കഴിയും**
+- [ ] പോസ്റ്റ്-ലെസൺ ക്വിസ് പൂർത്തിയാക്കി ഗെയിം ഡിസൈൻ സൈക്കോളജി മനസിലാക്കുക
+- [ ] സ്കോറിംഗ്, ലൈഫ് നഷ്ടപരിഹാരത്തിന് ശബ്ദഫലങ്ങൾ ചേർക്കുക
+- [ ] localStorage ഉപയോഗിച്ച് ഹൈ സ്കോർ സിസ്റ്റം നടപ്പിലാക്കുക
+- [ ] വ്യത്യസ്ത ശത്രു തരം ലെ വ്യത്യസ്ത പോയിന്റ് മൂല്യങ്ങൾ ചേർക്കുക
+- [ ] ലൈഫ് നഷ്ടമായപ്പോൾ സ്ക്രീൻ ഷെയ്ക്ക് പോലുള്ള ദൃശ്യ പ്രഭാകങ്ങൾ ചേർക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചപ്പ-long ഗെയിം ഡിസൈൻ ജേർണി**
+- [ ] എതാണ് ഞയ്ക്ക് പൂർണ്ണമായ സ്പെയ്സ് ഗെയിം പരിപൂർണ്ണ ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ
+- [ ] കംബോ മൾടിപ്പ്ലയറുകൾ പോലുള്ള അത്യാധുനിക സ്കോറിംഗ് മെക്കാനികുകൾ നടപ്പിലാക്കുക
+- [ ] അച്ചിവ്മെന്റുകളും അൺലോക്കബിൾ ഉള്ളടക്കവും ചേർക്കുക
+- [ ] ദുർത്തിയ പ്രോഗ്രഷൻ, ബാലൻസിംഗ് സിസ്റ്റങ്ങൾ രൂപകൽപ്പന ചെയ്യുക
+- [ ] മെനു, ഗെയിം ഒവർ സ്ക്രീനുകളുടെ UI രൂപകൽപ്പന
+- [ ] വിവിധ ഗെയിമുകൾ പഠിച്ച് ഉൾപ്പെടെ മെക്കാനിസങ്ങൾ മനസിലാക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസം-നീളെയുള്ള ഗെയിം ഡവലപ്പ്മെന്റ് മാസ്റ്ററി**
+- [ ] സമ്പൂർണ്ണ ഗെയിമുകൾ നിർമ്മിച്ച് സുപ്രധാന പ്രോഗ്രഷൻ സിസ്റ്റങ്ങൾ
+- [ ] ഗെയിം അനലിറ്റിക്സ്, പ്ലെയർ പെരുമാറ്റം അളക്കൽ പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഗെയിം ഡവലപ്പ്മെന്റ് പ്രോജക്ടുകളിലേക്ക് സംഭാവന നൽകുക
+- [ ] ഉയർന്ന തലത്തിലുള്ള ഗെയിം ഡിസൈൻ പാറ്റേണുകൾ, മണിറ്റൈസേഷൻ
+- [ ] ഗെയിം ഡിസൈൻ, ഉപയോക്തൃ അനുഭവത്തെക്കുറിച്ചുള്ള വിദ്യാഭ്യാസ ഉള്ളടക്കം സൃഷ്ടിക്കുക
+- [ ] ഗെയിം ഡിസൈൻ, ഡവലപ്പ്മെന്റ് സkillset നിരൂപണം ഉൾപ്പെടുന്ന പോർട്ട്ഫോളിയോ നിർമ്മിക്കുക
+
+## 🎯 നിങ്ങളുടെ ഗെയിം ഡിസൈൻ മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title ഗെയിം ഡിസൈൻ & പ്ലേയർ ഫീഡ്ബാക്ക്ൽ പഠന പുരോഗതി
+
+ section അടിസ്ഥാനരൂപം (10 മിനിറ്റ്)
+ ദൃശ്യമാധ്യമ സംവേദനം: ടെക്സ്റ്റ് റെൻഡറിംഗ്
+ : ഐക്കൺ ഡിസൈൻ
+ : ലേഔട്ട് സിദ്ധാന്തങ്ങൾ
+ : നിറം മനശ്ശാസ്ത്രം
+
+ section പ്ലേയർ സൈക്കോളജി (20 മിനിറ്റ്)
+ പ്രചോദന സമ്പ്രദായങ്ങൾ: പോയിന്റ് മൂല്യങ്ങൾ
+ : ঝুঁকি വേഴ്സസ് പുരസ്കാരം
+ : പുരോഗതി ഫീഡ്ബാക്ക്
+ : നേട്ട ഡിസൈൻ
+
+ section സാങ്കേതിക നടപ്പിലാക്കൽ (30 മിനിറ്റ്)
+ ക്യാന്വാസ് മാസ്ടറി: ടെക്സ്റ്റ് സ്ഥാനം നിർണ്ണയം
+ : സ്പ്രൈറ്റ് റെൻഡറിംഗ്
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+ : പ്രകടനം മെച്ചപ്പെടുത്തൽ
+
+ section ഗെയിം ബാലൻസ് (40 മിനിറ്റ്)
+ കഠിനത ഡിസൈൻ: ജീവിതം മാനേജ്മെന്റ്
+ : സ്കോറിംഗ് വക്രരേഖകൾ
+ : പ്ലേയർ റിട്ടൻഷൻ
+ : ആക്സസിബിലിറ്റി
+
+ section ഉപയോക്തൃ അനുഭവം (50 മിനിറ്റ്)
+ ഇന്റർഫേസ് ഡിസൈൻ: വിവര പരമാവധി
+ : പ്രതികരണ ഫീഡ്ബാക്ക്
+ : സാമൂഹ്യ ഡിസൈൻ
+ : ഉപയോഗമാര്ഗ પરીീക്ഷണം
+
+ section മെച്ചപ്പെട്ട സിസ്റ്റങ്ങൾ (1 ആഴ്ച)
+ ഗെയിം മെക്കാനിക്സ്: പുരോഗതി സമ്പ്രദായങ്ങൾ
+ : വിശകലന സംയോജനം
+ : രൂപപണമിടപാട് ഡിസൈൻ
+ : സമൂഹ സവിശേഷതകൾ
+
+ section വ്യവസായ കഴിവുകൾ (1 മാസം)
+ പ്രൊഫഷണൽ വികസനം: ടീം സഹകരണം
+ : ഡിസൈൻ രേഖപ്പെടുത്തൽ
+ : പ്ലേയർ ഗവേഷണം
+ : പ്ലാറ്റ്ഫോം മെച്ചപ്പെടുത്തൽ
+```
+### 🛠️ നിങ്ങളുടെ ഗെയിം ഡിസൈൻ ടൂൾകിറ്റ് സംഗ്രഹം
+
+ഈ പാഠമൂലം പൂർത്തിയാക്കിയതിന് ശേഷം നിങ്ങൾക്ക് താഴെക്കാലത്തേക്കുള്ള വൈദഗ്ധ്യം ലഭിച്ചു:
+- **പ്ലെയർ സൈക്കോളജി**: പ്രേരണ, റിസ്ക്/റിവാർഡ്, ഉൾപ്പെടുത്തലുകളുടെ ലൂപ്പുകൾ
+- **ദൃശ്യ സമ്പ്രേക്ഷണം**: ടെക്സ്റ്റ്, ഐക്കൺസ്, ലെയൗട്ട് ഉപയോഗിച്ച ഫലപ്രദ UI
+- **ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ**: പ്ലെയർ പ്രവർത്തനങ്ങൾക്കും ഗെയിം ഇവന്റുകൾക്കും തൽക്ഷണ പ്രതികരണം
+- **സംസ്ഥിതി മാനേജ്മെന്റ്**: ഡൈനാമിക് ഗെയിം ഡാറ്റ ഫലപ്രദമായി ട്രാക്ക് ചെയ്യൽ
+- **ക്യാൻവാസ് ടെക്സ്റ്റ് റെണ്ടറിംഗ്**: പ്രൊഫഷണൽ സ്റ്റൈലും സ്ഥിതനിർണ്ണയവും ഉള്ള ടെക്സ്റ്റ് പ്രദർശനം
+- **ഇവന്റ് ഇന്റഗ്രേഷൻ**: ഉപയോക്തൃ പ്രവർത്തനങ്ങളുമായി ഫലംössüyor കണക്ട് ചെയ്യൽ
+- **ഗെയിം ബാലൻസ്**: വെല്ലുവിളി വളയങ്ങളും പ്ലെയർ പ്രോഗ്രഷൻ സിസ്റ്റങ്ങളും രൂപകൽപ്പന
+
+**യഥാർത്ഥ ലോക ആപ്ലിക്കേഷനുകൾ**:
+- **യുസർ ഇന്റർഫേസ് ഡിസൈൻ**: ആകർഷകവും ഇൻറ്യൂട്ടീവ് അനുഭവങ്ങൾ സൃഷ്ടിക്കൽ
+- **ഉൽപ്പന്ന വികസനം**: ഉപയോക്തൃ പ്രേരണയും ഫീഡ്ബാക്ക് ലൂപ്പുകളും മനസിലാക്കൽ
+- **വിദ്യാഭ്യാസ ടെക്നോളജി**: ഗാമിഫിക്കേഷൻ, പഠന ഉൾപ്പെടുത്തൽ സിസ്റ്റങ്ങൾ
+- **ഡാറ്റാ വിസ്വലൈസേഷൻ**: ക്ലിഷ്ടമായ വിവരങ്ങൾ ആക്സസിബിൾ ആയി മാറ്റൽ
+- **മൊബൈൽ ആപ്പ് ഡവലപ്പ്മെന്റ്**: റിട്ടെൻഷൻ മെക്കാനിക്സ്, ഉപയോക്തൃ അനുഭവ രൂപകൽപ്പന
+- **മാർക്കറ്റിംഗ് ടെക്നോളജി**: ഉപയോക്തൃ പെരുമാറ്റവും കൺവേർഷൻ മെച്ചപ്പെടുത്തൽ
+
+**പ്രൊഫഷണൽ സ്കിൽസുകൾ**:
+- **ഡിസൈൻ** ഉപയോക്തൃ അനുഭവങ്ങൾ പ്രേരിപ്പിക്കുന്നതിനും ഉൾപ്പെടുത്തുന്നതിനും
+- **നടപ്പിലാക്കുക** ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ ഫലപ്രദമായി ഉപയോക്തൃ പെരുമാറ്റം ഗൈഡ് ചെയ്യാൻ
+- **ബാലൻസ്** വെല്ലുവിളിയും ആക്സസിബിലിറ്റിയും ഇന്ററാക്റ്റീവ് സിസ്റ്റങ്ങൾ
+- **സൃഷ്ടിക്കുക** ദൃശ്യ സമ്പ്രേക്ഷണം വ്യത്യസ്ത ഉപയോക്തൃ ഗ്രൂപ്പുകൾക്കായി
+- **വിശകലനം** ഉപയോക്തൃ പെരുമാറ്റം, ഡിസൈൻ മെച്ചപ്പെടുത്തലുകൾ
+
+**ഗെയിം ഡവലപ്പ്മെന്റ് കോൺസെപ്റ്റുകൾ**:
+- **പ്ലെയർ പ്രേരണ**: പ്രവേശനം, തുടർച്ച മനസിലാക്കുക
+- **ദൃശ്യ ഡിസൈൻ**: വ്യക്തവും ആകര്ഷകവുമായ ഫംഗ്ഷണൽ ഇന്റർഫേസുകൾ
+- **സിസ്റ്റം സംയോജനം**: ഒത്തുചേരുന്ന അനുഭവത്തിന് ഗെയിം സിസ്റ്റങ്ങൾ ബന്ധിപ്പിക്കൽ
+- **പ്രവർത്തനം മെച്ചപ്പെടുത്തൽ**: എഫിഷ്യന്റ് റെണ്ടറിംഗ്, സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+- **ആക്സസിബിലിറ്റി**: വ്യത്യസ്ത കഴിവ് തലങ്ങളും പ്ലെയർ ആവശ്യങ്ങൾക്കായുള്ള ഡിസൈൻ
+
+**അടുത്ത ഘട്ടം**: നിങ്ങൾക്ക് ആഡ്വാൻസ്ഡ് ഗെയിം ഡിസൈൻ പാറ്റേണുകൾ ആഴത്തിൽ പഠിക്കാനും, അനലിറ്റിക് സിസ്റ്റങ്ങൾ നടപ്പിലാക്കാനും, ഗെയിം മണിറ്റൈസേഷൻ, പ്ലെയർ റിട്ടെൻഷൻ സ്ട്രാറ്റജികൾ വിശകലനം ചെയ്യാനുമാണ് തയ്യാറാണ്!
+
+🌟 **അചീവ്മെന്റ് അൺലോക്കിങ്**: പ്രൊഫഷണൽ ഗെയിം ഡിസൈൻ സിദ്ധാന്തങ്ങളാൽ സമ്പൂർണ്ണ പ്ലെയർ ഫീഡ്ബാക്ക് സിസ്റ്റം നിങ്ങൾ നിർമ്മിച്ചു!
+
+---
+
+## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀
+
+ഏജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെ പറയുന്ന ചലഞ്ച് പൂർത്തിയാക്കുക:
+
+**വിവരണം:** സ്പെയ്സ് ഗെയിമിന്റെ സ്കോറിംഗ് സിസ്റ്റം വികസിപ്പിച്ച് ഹൈ സ്കോർ ഫീച്ചർ സ്ഥിരമായി സംഭരിക്കുന്ന സാങ്കേതികവിദ്യയും ബോണസ് പോയിന്റ് മെക്കാനിസവും നടപ്പിലാക്കുക.
+
+**പ്രോംപ്റ്റ്:** പ്ലെയറുടെ മികച്ച സ്കോർ localStorage-ലേക്ക് സൂക്ഷിക്കുന്ന ഹൈസ്കോർ സിസ്റ്റം സൃഷ്ടിക്കുക. തുടര്ച്ചയായ ശത്രു വധങ്ങൾക്ക് ബോണസ് പോയിന്റ് (കംബോ സിസ്റ്റം) ചേർക്കുക, വ്യത്യസ്ത ശത്രു തരങ്ങൾക്ക് അഭിന്ന point മൂല്യങ്ങൾ നടപ്പിലാക്കുക. പ്ലെയർ പുതിയ ഹൈസ്കോർ നേടിയപ്പോൾ ദൃശ്യ സൂചന നൽകുകയും നിലവിലെ ഹൈസ്കോർ ഗെയിം സ്ക്രീനിൽ പ്രദർശിപ്പിക്കുകയും ചെയ്യുക.
+
+## 🚀 ചലഞ്ച്
+
+ഇപ്പോൾ നിങ്ങൾക്ക് സ്കോറിംഗ്, ലൈവുകളോടെ പ്രവർത്തനക്ഷമമായ ഗെയിം ഉണ്ടായിട്ടുണ്ട്. പ്ലെയർ അനുഭവം മെച്ചപ്പെടുത്താനുള്ള അധിക ഫീച്ചറുകൾ എന്തൊണെന്ന് പരിഗണിക്കൂ.
+
+## പോസ്റ്റ്-ലെക്ചർ ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/38)
+
+## റിവ്യൂ & സ്വയം പഠനം
+
+കൂടുതൽ അറിയാൻ ആഗ്രഹമുണ്ടോ? ഗെയിം സ്കോറിംഗും ലൈഫ് സിസ്റ്റവും സംബന്ധിച്ച വ്യത്യസ്ത സമീപനങ്ങൾ പരിശോധിക്കൂ. [PlayFab](https://playfab.com) പോലുള്ള ആകർഷകമായ ഗെയിം എൻജിനുകൾ സ്കോറിംഗ്, ലീഡ്ബോർഡുകൾ, പ്ലെയർ പ്രോഗ്രഷൻ എന്നിവ കൈകാര്യം ചെയ്യുന്നു. അതുപോലേന്ത integrating ചെയ്യുന്നത് നിങ്ങളുടെ ഗെയിം അടുത്ത തലത്തിലേക്ക് എങ്ങനെ കൊണ്ടുപോകും എന്നു ചിന്തിക്കൂ.
+
+## അസൈൻമെന്റ്
+
+[Build a Scoring Game](assignment.md)
+
+---
+
+
+**അസൂയ കുറിപ്പ്**:
+ഈ ഡോക്യുമെന്റ് AI പരിഭാഷ сервисായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തിരിക്കുന്നു. നാം കൃത്യതയ്ക്കായി ശ്രമിച്ചുവെങ്കിലും, ആട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ അസത്യതകൾ ഉണ്ടാകാം എന്നത് ശ്രദ്ധിക്കുക. അസൽ ഡോക്യുമെന്റ് അതിന്റെ സ്വതന്ത്ര ഭാഷയിലുള്ളത് പ്രാമാണിക സ്രോതസ്സ് എന്നായി പരിഗണിക്കണം. നിർണ്ണായകമായ വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നത് കൊണ്ട് ഉണ്ടായ ഏതെങ്കിലും തെറ്റിദ്ധാരണക്കോ തെറ്റായ വ്യാഖ്യാനംക്കോ ഞങ്ങൾ ഉത്തരവാദിത്വമെടുത്തിരിക്കില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/5-keeping-score/assignment.md b/translations/ml/6-space-game/5-keeping-score/assignment.md
new file mode 100644
index 000000000..601a60788
--- /dev/null
+++ b/translations/ml/6-space-game/5-keeping-score/assignment.md
@@ -0,0 +1,27 @@
+
+# സ്കോറിംഗ് ഗെയിം നിർമ്മിക്കുക
+
+## നിര്ദ്ദേശങ്ങള്
+
+ജീവിതവും പോയിന്റുകളും സൃഷ്ടിപരമായ രീതിയില് പ്രദര്ശിപ്പിക്കുന്നൊരു ഗെയിം സൃഷ്ടിക്കുക. ജീവിതം ഹൃദയങ്ങളായി കാണിക്കുകയും, പോയിന്റുകള് സ്ക്രീന്റെ താഴ്തു മധ്യഭാഗത്ത് വലിയ സംഖ്യയായി കാണിക്കുകയും ചെയ്യുന്നത് ഒരു സൂചനയാണ്. [Free game resources](https://www.kenney.nl/) ഇവിടെ കണ്ടുപിടിക്കാം
+
+# റൂബ്രിക്
+
+| നിര്ണായകങ്ങൾ | ഉദാഹരണമായുള്ളത് | യഥേഷ്ടം | മെച്ചപ്പെടുത്തേണ്ടതാണ് |
+| -------- | ---------------------- | --------------------------- | -------------------------- |
+| | പൂർണ്ണ ഗെയിം അവതരിപ്പിച്ചത് | ഗെയിം ഭാഗികമായി അവതരിപ്പിച്ചത് | ഭാഗിക ഗെയിമിന് പിഴവുകൾ ഉണ്ട് |
+
+---
+
+
+**അസ്വീകാര്യത**:
+ഈ രേഖ AI വിവർത്തന സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്കായി പരിശ്രമിക്കുന്നെങ്കിലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ അസംവരണം ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. സൈദ്ധാന്തികമായ ഉറവിടമായി യഥാഭാഷയിലെ اصل രേഖ തന്നെ കരുതേണ്ടതാണ്. നിർണായക വിവരങ്ങൾക്ക്, പ്രഫഷണൽ മാനവ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനത്തിന്റെ ഉപയോഗത്തിൽ നിന്നുണ്ടാകുന്ന തെറ്റായ വിവരണങ്ങൾക്കോ അറിവുകേടിനോ ഞങ്ങൾ ഉത്തരവാദികൾ അല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/5-keeping-score/solution/README.md b/translations/ml/6-space-game/5-keeping-score/solution/README.md
new file mode 100644
index 000000000..ff425f871
--- /dev/null
+++ b/translations/ml/6-space-game/5-keeping-score/solution/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡറാണ്, ഉദ്ദേശപൂർവമായി ശൂന്യമായി വച്ചിരിക്കുന്നു
+
+---
+
+
+**അത്യന്താവശ്യ കുറിപ്പ്**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന AI വിവർത്തന സേവനം ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം നിഷ്ധിഷ്ടതയ്ക്ക് പരിശ്രമിച്ചുവെങ്കിലും, യന്ത്രത്തിന്റെ വിവർത്തനങ്ങളിൽ പിശകുകൾ അടങ്ങിയിരിക്കാമെന്നു ദയവായി മനസ്സിലാക്കുക. അതിന്റെ മാതൃഭാഷയിലുള്ള യഥാർത്ഥ രേഖ വിവരങ്ങളുടെ പ്രാമാണിക ഉറവിടമായി കണക്കാക്കപ്പെടണം. സുപ്രധാന വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യവിവർത്തനം ശുപാർശ ചെയ്യുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനാൽ ഉണ്ടാകാവുന്ന തെറ്റുതിരുത്തലുകൾക്കും തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദിത്വം വഹിക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/5-keeping-score/your-work/README.md b/translations/ml/6-space-game/5-keeping-score/your-work/README.md
new file mode 100644
index 000000000..35cf55236
--- /dev/null
+++ b/translations/ml/6-space-game/5-keeping-score/your-work/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്হോൾഡറാണ്, സങ്കൽപ്പമാക്കി intentionally വിടുത്തിരിക്കുന്നത്.
+
+---
+
+
+**വിശദീകരണം**:
+ഈ ദസ്താവേകം എഐ പരിഭാഷാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. ഞങ്ങൾ കൃത്യതയ്ക്ക് ശ്രമിച്ചിരുന്നുവെങ്കിലും, യന്ത്രം സൃഷ്ടിക്കുന്ന പരിഭാഷയിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാൻ സാധ്യതയുള്ളതാണ്. അതിനാൽ, മേന്മയുള്ള ഭാഷയിൽ ഉള്ള യഥാർത്ഥ ദസ്താവേകം ഔദ്യോഗിക ഉറവിടമായി കണക്കാക്കണം. അത്യന്താപേക്ഷിത വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മാനവ പരിഭാഷ ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ചതോടെ ഉണ്ടാകുന്ന തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനങ്ങളിൽ നിന്നുമുള്ള ബാധ്യത ഞങ്ങൾ ഏറ്റെടുക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/6-end-condition/README.md b/translations/ml/6-space-game/6-end-condition/README.md
new file mode 100644
index 000000000..f668654b6
--- /dev/null
+++ b/translations/ml/6-space-game/6-end-condition/README.md
@@ -0,0 +1,673 @@
+
+# ബിൽഡ് എ സ്പേസ് ഗെയിം ഭാഗം 6: അവസാനവും പുനരാരംഭവും
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ഗെയിം പൂർത്തീകരണ യാത്ര
+ section അവസാന നിലകള്
+ ജയിക്കുക/തുടക്കം നിലകള് നിർവചിക്കുക: 3: Student
+ അവസ്ഥ പരിശോധന നടപ്പിലാക്കുക: 4: Student
+ അവസ്ഥ മാറ്റങ്ങൾ കൈകാര്യം ചെയ്യുക: 4: Student
+ section പ്ലേയര് അനുഭവം
+ പ്രതികരണം സംവിധാനങ്ങൾ രൂപകല്പ്പന ചെയ്യുക: 4: Student
+ പുനരാരംഭ മെക്കാനിക്കുകൾ സൃഷ്ടിക്കുക: 5: Student
+ ഉപയോക്തൃ ഇന്റർഫേസ് പ تويശിക്കുക: 5: Student
+ section സിസ്റ്റം സംയോജനം
+ ഗെയിം ജീവിതചക്രം നിയന്ത്രിക്കുക: 5: Student
+ മേക്കറി ശുചീകരണം കൈകാര്യം ചെയ്യുക: 5: Student
+ സമ്പൂര്ണ അനുഭവം സൃഷ്ടിക്കുക: 5: Student
+```
+ഏല്പ്പെട്ട ഗെയിമുകൾക്കു് വ്യക്തമായ അവസാന നിബന്ധനകളും മൃദുലമായ പുനരാരംഭ സംവിധാനംയും ആവശ്യമുണ്ട്. നീ മെച്ചപ്പെട്ട സ്പേസ് ഗെയിം സൃഷ്ടിച്ചു, ചലനം, പോരാട്ടം, സ്കോറിംഗ് എന്നിവ ഉൾപ്പെടുത്തി - ഇപ്പോൾ അത് പരിപൂർണമായി അനുഭവപ്പെടാൻ വേണ്ട അവസാന ഘടകങ്ങൾ ചേർക്കേണ്ട സമയം.
+
+നിന്റെ ഗെയിം ഇപ്പോൾ അനന്തകാലം പ്രവർത്തിക്കുന്നു, 1977-ൽ NASA പുറത്തിറക്കിയ Voyager പ്രൊബുകൾ പോലെ - ദശകങ്ങളായി സ്പേസ് വഴി സഞ്ചരിച്ചു നടക്കുകയാണ്. സ്പേസ് അന്വേഷണത്തിന് അത് ശരിയാണെങ്കിലും, ഗെയിമുകൾക്ക് തൃപ്തികരമായ അനുഭവങ്ങൾ സൃഷ്ടിക്കാൻ നിർവ്വചിതമായ അവസാന ബിന്ദുക്കൾ ആവശ്യമാണ്.
+
+ഇന്ന് നാം ശരിയായ ജയ/തെറ്റു നിബന്ധനകളും പുനരാരംഭ സംവിധാനം നടപ്പിലാക്കും. ഈ പാഠത്തിനുശേഷം, പ്ലേയർമാര്ക്ക് പൂര്ത്തിയാക്കി വീണ്ടും കളിക്കാൻ കഴിയുന്ന, ക്ലാസിക് ആർക്കേഡ് ഗെയിമുകളുപോലെ, പറ്റിയ ഒരു ഗെയിം ഉണ്ടാകും.
+
+```mermaid
+mindmap
+ root((ഗെയിം പൂർത്തീകരണം))
+ End Conditions
+ വിജയ നിലകൾ
+ പരാജയ ശരതുകൾ
+ പുരോഗതി ട്രാക്കിംഗ്
+ നിലാസ്ഥിതിവിശകലനം
+ Player Feedback
+ ദൃശ്യ സന്ദേശങ്ങൾ
+ നിറം മനശ്ശാസ്ത്രം
+ വ്യക്തമായ ആശയവിനിമയം
+ മാനസികപ്രതികരണം
+ State Management
+ ഗെയിം ലൂപ്പ് നിയന്ത്രണം
+ മെമ്മറി ശുചീകരണം
+ വസ്തു ജീവിതചക്രം
+ ഇവന്റ് കൈകാര്യം ചെയ്യൽ
+ Restart Systems
+ ഇൻപുട്ട് കൈകാര്യം ചെയ്യൽ
+ നില പുനഃസജ്ജീകരണം
+ പുതിയ തുടക്കം
+ ഉപയോക്തൃ അനുഭവം
+ Polish Elements
+ സന്ദേശ പ്രദർശനം
+ മൃദുവായ മാറ്റങ്ങൾ
+ പിശക് തടയൽ
+ ആക്സസിബിലിറ്റി
+```
+## പ്രീ-ലെക്ക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/39)
+
+## ഗെയിം അവസാന നിബന്ധനകൾ മനസ്സിലാക്കൽ
+
+നിന്റെ ഗെയിം എപ്പോൾ അവസാനിക്കണം? ഈ അടിസ്ഥാന ചോദ്യമാണ് ആദ്യം ആർക്കേഡ് കാലഘട്ടം മുതൽ ഗെയിം ഡിസൈനെ രൂപപ്പെടുത്തിയിരിക്കുന്നത്. Pac-Man ഗHOSTS പിടിച്ചെടുക്കുമ്പോൾ അല്ലെങ്കിൽ എല്ലാ ഡോട്ടുകളും നീക്കം ചെയ്തപ്പോഴാണ് അവസാനിക്കുന്നത്, Space Invaders അലിയനുകൾ താഴേക്ക് അടിയുമ്പോൾ അല്ലെങ്കിൽ അവയെല്ലാം നശിപ്പിച്ചാൽ അവസാനിക്കുന്നു.
+
+ഗെയിം സൃഷ്ടിക്കാരനായി, നീ ജയത്തിലും തോൽവിയിലും നിബന്ധനകൾ നിർവ്വചിക്കുന്നു. നമ്മുടെ സ്പേസ്ഗെയിമിന്, ഇവിടെ ചില പരീക്ഷിച്ചുറപ്പുള്ള സമീപനങ്ങളുണ്ട്, അത് ആകർഷകമായ ഗെയിംപ്ലേ സൃഷ്ടിക്കുന്നു:
+
+```mermaid
+flowchart TD
+ A["🎮 ഗെയിം ആരംഭം"] --> B{"നിബന്ധനകൾ പരിശോധിക്കുക"}
+
+ B --> C["ശത്രുക്കളുടെ എണ്ണം"]
+ B --> D["ഹീറോയുടെ ജീവൻ"]
+ B --> E["സ്കോർ പരിധി"]
+ B --> F["നിലവിലെ പുരോഗതി"]
+
+ C --> C1{"ശത്രുക്കൾ = 0?"}
+ D --> D1{"ജീവൻ= 0?"}
+ E --> E1{"സ്കോർ ≥ ലക്ഷ്യം?"}
+ F --> F1{"ലക്ഷ്യങ്ങൾ പൂർത്തിയാക്കിയോ?"}
+
+ C1 -->|അതെ| G["🏆 വിജയകരം"]
+ D1 -->|അതെ| H["💀 പരാജയം"]
+ E1 -->|അതെ| G
+ F1 -->|അതെ| G
+
+ C1 -->|ഇല്ല| B
+ D1 -->|ഇല്ല| B
+ E1 -->|ഇല്ല| B
+ F1 -->|ഇല്ല| B
+
+ G --> I["🔄 വീണ്ടും തുടങ്ങാനുള്ള ഓപ്ഷൻ"]
+ H --> I
+
+ style G fill:#e8f5e8
+ style H fill:#ffebee
+ style I fill:#e3f2fd
+```
+- **`N` എനമി കപ്പലുകൾ നശിപ്പിച്ചതായിരിക്കും**: ഗെയിമിനെ വ്യത്യസ്ത ലെവലുകളായി വിഭജിക്കുന്നുവെങ്കിൽ, ഒരു ലെവൽ പൂരിപ്പിക്കാൻ `N` എനമി കപ്പലുകൾ നശിപ്പിക്കേണ്ടതുണ്ട് എന്നത് സാധാരണമാണ്
+- **നിന്റെ കപ്പൽ നശിച്ചു പോയിട്ടുണ്ട്**: നിന്റെ കപ്പൽ നശിച്ചാൽ നീ ഗെയിം നഷ്ടപ്പെടുത്തുന്ന ഗെയിമുകൾ ഉണ്ട്. മറ്റൊരു സാധാരണ സമീപനം, നീ *ലൈഫുകൾ* എന്ന ആശയം ഉപയോഗിക്കുന്നു. ഓരോ തവണയും നിന്റെ കപ്പൽ നശിക്കും പൊതു ഒരു ലെഫ് കുറയുന്നു. എല്ലാ ലൈഫുകളും നഷ്ടമായപ്പോഴാണ് നീ ഗെയിം നഷ്ടപ്പെടുന്നത്.
+- **`N` പോയിന്റുകൾ സമാഹരിച്ച് കഴിഞ്ഞിരിക്കുന്നു**: മറ്റൊരു സാധാരണ അവസാന നിബന്ധന, നീ പോയിന്റുകൾ സമാഹരിക്കുന്നതാണ്. നീ എങ്ങനെ പോയിന്റ് നേടും എന്നത് നിന്റെ ഇഷ്ടത്തിനാണ്, എന്നാൽ എനമി കപ്പൽ നശിപ്പിക്കൽ പോലുള്ള വിവിധ പ്രവർത്തനങ്ങൾക്ക് പോയിന്റുകൾ നൽകുന്നത് സാധാരണമാണ്. അല്ലെങ്കിൽ നശിപ്പിക്കുമ്പോൾ *മുഴുക്കുള്ള* വസ്തുക്കൾ ശേഖരിക്കാനും സാധിക്കും.
+- **ഒരു ലെവൽ പൂരിപ്പിക്കുക**: ഇതിൽ പല നിബന്ധനകളും ഉൾപ്പെടാം, ഉദാ. `X` എനമി കപ്പലുകൾ നശിപ്പിക്കൽ, `Y` പോയിന്റുകൾ ശേഖരിക്കൽ, അല്ലെങ്കിൽ ഒരു പ്രത്യേക വസ്തു ശേഖരിക്കൽ
+
+## ഗെയിം പുനരാരംഭ പ്രവർത്തനം നടപ്പിലാക്കൽ
+
+മികച്ച ഗെയിമുകൾ മൃദുവായ പുനരാരംഭ സംവിധാനത്തിലൂടെ വീണ്ടും കളിക്കാനായി പ്രോത്സാഹിപ്പിക്കുന്നു. കളിക്കാർ ഒരു ഗെയിം പൂർത്തിയാക്കിയാൽ (അല്ലെങ്കിൽ തോറ്റാൽ), Scores ഭേദഗതി ചെയ്യാനും പ്രകടനം മെച്ചപ്പെടുത്താനുമുള്ള ശ്രമം ഉടനെ തുടരാൻ ആഗ്രഹിക്കുന്നു.
+
+```mermaid
+stateDiagram-v2
+ [*] --> Playing: ഗെയിം ആരംഭിക്കുന്നു
+ Playing --> Victory: എല്ലാ ശത്രുക്കളും നശിച്ചു
+ Playing --> Defeat: ജീവൻ = 0
+
+ Victory --> MessageDisplay: ജയം സന്ദേശം പ്രദർശിപ്പിക്കുക
+ Defeat --> MessageDisplay: തോൽവി സന്ദേശം പ്രദർശിപ്പിക്കുക
+
+ MessageDisplay --> WaitingRestart: Enter അമർത്തുക പ്രോംപ്റ്റ്
+ WaitingRestart --> Resetting: Enter കീ അമർത്തിയതായി
+
+ Resetting --> CleanupMemory: ഇടവേളകൾ ഫലം
+ CleanupMemory --> ClearEvents: ശ്രോതാക്കളെ നീക്കംചെയ്യുക
+ ClearEvents --> InitializeGame: പുതിയ തുടക്കം
+ InitializeGame --> Playing: പുതിയ ഗെയിം ആരംഭിക്കുന്നു
+
+ note right of MessageDisplay
+ നിറം-കോഡ് ചെയ്ത ഫീഡ്ബാക്ക്:
+ പച്ച = വിജയം
+ ചുവപ്പ് = തോൽവി
+ end note
+
+ note right of Resetting
+ പൂർത്തിയാക്കിയ സ്റ്റേറ്റ് റീസെറ്റ്
+ മെമ്മറി ലേക്ക് പ്രതിരോധിക്കുന്നു
+ end note
+```
+Tetris ഇത് നന്നായി കാണിക്കുന്നു: നിന്റെ ബ്ലോകുകള് മുകളിൽ എത്തിയാൽ, ആശങ്കമില്ലാതെ പുതിയത് തത്സമയം തുടങ്ങാം. നാം സമാനമായ പുനരാരംഭ സംവിധാനം നിർമ്മിക്കും, ഇത് ഗെയിം സ്റ്റേറ്റ് സമർപ്പിച്ച് കളിക്കാർക്ക് ഉടനടി പ്രവർത്തനത്തിന് തിരികെ എത്താനുള്ള മാർഗം നൽകും.
+
+✅ **പരിശോധന**: നീ കളിച്ച ഗെയിമുകളെ കുറിച്ച് ചിന്തിക്കൂ. അവ എപ്പോൾ അവസനംബന്ധപ്പെട്ടു? പുനരാരംഭിക്കാൻ നിന്നെ എങ്ങനെയാണ് പ്രചോദിപ്പിക്കുന്നത്? മൃദുവായ പുനരാരംഭ അനുഭവം സൃഷ്ടിക്കുന്നത് എന്തുകൊണ്ടാണ്?
+
+## നീ അണിചേരുക
+
+നിന്റെ വികസന പരിസ്ഥിതി തയ്യാറാക്കാം. മുൻപുള്ള പാഠങ്ങളിൽ നിന്നുള്ള എല്ലാ സ്പേസ്ബേസ് ഗെയിം ഫയലുകളും ഉണ്ടായിരിക്കണം.
+
+**നിന്റെ പ്രോജക്റ്റ് ഇങ്ങനെ കാണുന്നിരിക്കണം:**
+
+```bash
+-| assets
+ -| enemyShip.png
+ -| player.png
+ -| laserRed.png
+ -| life.png
+-| index.html
+-| app.js
+-| package.json
+```
+
+**വികസന സർവറു തുടങ്ങുക:**
+
+```bash
+cd your-work
+npm start
+```
+
+**ഈ കമാൻഡ്:**
+- `http://localhost:5000` എന്ന ലൊക്കൽ സർവറിൽ പ്രവർത്തിക്കുന്നു
+- നിന്റെ ഫയലുകൾ ശരിയായി സർവ് ചെയ്യുന്നു
+- മാറ്റങ്ങൾ സംഭവിച്ചപ്പോൾ സ്വയം പുതുക്കുന്നു
+
+`http://localhost:5000` തുറന്ന് നിന്റെ ഗെയിം പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കൂ. നീ നീങ്ങാനും, ഷൂട്ട് ചെയ്യാനും, എനമികളെ ഇടപെടാനും കഴിയണം. ഉറപ്പായത് ശേഷം, നടപ്പാക്കലിലേക്ക് മുന്നോട്ട് പോകാം.
+
+> 💡 **പ്രോ ടിപ്പ്**: Visual Studio Code ലെ മുന്നറിയിപ്പുകൾ ഒഴിവാക്കാൻ, `gameLoopId` നിന്റെ ഫയലിന്റെ മുകളിലായി `let gameLoopId;` എന്ന് പ്രഖ്യാപിക്കുക, `window.onload` ഫംഗ്ഷനിനുള്ളിൽ പ്രഖ്യാപിക്കുന്നത് ഒഴിവാക്കുക. ഇത് ആധുനിക ജാവാസ्क്രിപ്റ്റ് ഏറ്റവും മികച്ച പ്രാക്ടീസുകൾ പാലിക്കുന്നു.
+
+```mermaid
+flowchart TD
+ A["1. നില നിലനിർത്തൽ"] --> B["2. ഇവന്റ് കൈകാര്യം ചെയ്യുന്നത്"]
+ B --> C["3. സന്ദേശ സ്ഥിരങ്ങൾ"]
+ C --> D["4. പുനരാരംഭ നിയന്ത്രണങ്ങൾ"]
+ D --> E["5. സന്ദേശ പ്രദർശനം"]
+ E --> F["6. സിസ്റ്റം പുനസംഘടനം"]
+
+ G["isHeroDead()\nisEnemiesDead()"] --> A
+ H["തകർപ്പൻ ഇവന്റുകൾ\nകളി അവസാന ഇവന്റുകൾ"] --> B
+ I["GAME_END_WIN\nGAME_END_LOSS"] --> C
+ J["ദിവസകീ\nപുനരാരംഭ ഉപദേശം"] --> D
+ K["വിജയം/പരാജയം\nനിറത്തിലുറപ്പിച്ച എഴുത്ത്"] --> E
+ L["സ്ഥിതി നിർബന്ധം\nപുതിയ ആരംഭം"] --> F
+
+ F --> M["🎮 സമ്പൂർണ്ണ ഗെയിം"]
+
+ style A fill:#e3f2fd
+ style B fill:#e8f5e8
+ style C fill:#fff3e0
+ style D fill:#f3e5f5
+ style E fill:#e0f2f1
+ style F fill:#fce4ec
+ style M fill:#e1f5fe
+```
+## നടപ്പാക്കൽ ഘട്ടങ്ങൾ
+
+### ഘട്ടം 1: അവസാന നിബന്ധനകൾ ട്രാക്ക് ചെയ്യുന്ന ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കുക
+
+ഗെയിം എപ്പോൾ അവസാനിക്കണമെന്ന് നിരീക്ഷിക്കാൻ ഫംഗ്ഷനുകൾ വേണം. അന്താരാഷ്ട്ര സ്പേസ് സ്റ്റേഷനിൽ കൃത്യമായി പ്രവർത്തിക്കുന്ന സെൻസറുകൾ പോലെ, ഈ ഫംഗ്ഷനുകൾ ഗെയിം സ്റ്റേറ്റ് തുടർച്ചയായി പരിശോധിക്കും.
+
+```javascript
+function isHeroDead() {
+ return hero.life <= 0;
+}
+
+function isEnemiesDead() {
+ const enemies = gameObjects.filter((go) => go.type === "Enemy" && !go.dead);
+ return enemies.length === 0;
+}
+```
+
+**ഇവിടെ എന്താണ് നടക്കുന്നത്:**
+- **നമ്മുടേരുടെ നായകൻ ലൈഫുകൾ കളയിച്ചിട്ടുണ്ടോ എന്നു പരിശോധിക്കുന്നു (ഓവ്!)**
+- **എത്ര എനമികൾ ജീവനോടെ തുടരുന്നു എന്ന് എണ്ണുന്നു**
+- **എനമികൾ അകറ്റിയപ്പോൾ `true` മടക്കുന്നു**
+- **സরাসരമായ true/false ലാജിക്ക് ഉപയോഗിക്കുന്നു**
+- **എല്ലാ ഗെയിം ഒബ്ജക്റ്റുകളും നോക്കി ജീവനുള്ളവർ കണ്ടെത്തുന്നു**
+
+### ഘട്ടം 2: അവസാന നിബന്ധനകളെ ഇവന്റ് ഹാൻഡ്ലറുകൾക്ക് അപ്ഡേറ്റ് ചെയ്യുക
+
+ഇപ്പോൾ ഈ നിബന്ധന പരിശോധനകൾ ഗെയിംയുടെ ഇവന്റ് സിസ്റ്റത്തോട് ബന്ധിപ്പിക്കാം. ഓരോ തവണയും ടക്കൊണ്ടു സംഭവിക്കുമ്പോൾ, അത് അവസാന നിബന്ധന ഉണ്ടാക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കും. ഇതോടെ അവബോധം ഉടനടി ലഭിക്കുന്നു.
+
+```mermaid
+sequenceDiagram
+ participant Collision
+ participant GameLogic
+ participant Conditions
+ participant EventSystem
+ participant Display
+
+ Collision->>GameLogic: ലേസർ ശത്രുവിനെയിടിച്ച്
+ GameLogic->>GameLogic: വസ്തുക്കൾ നശിപ്പിക്കുക
+ GameLogic->>Conditions: isEnemiesDead() പരിശോധിക്കുക
+
+ alt എല്ലാ ശത്രുക്കളും തോറ്റു
+ Conditions->>EventSystem: GAME_END_WIN പുറപ്പെടുവിക്കുക
+ EventSystem->>Display: വിജയം സന്ദേശം കാണിക്കുക
+ else ശത്രുക്കൾ ബാക്കിയുണ്ട്
+ Conditions->>GameLogic: ഗെയിം തുടരുക
+ end
+
+ Collision->>GameLogic: ശത്രു ഹീറോയെ കുത്തുന്നത്
+ GameLogic->>GameLogic: ജീവൻ കുറയ്ക്കുക
+ GameLogic->>Conditions: isHeroDead() പരിശോധിക്കുക
+
+ alt ജീവിതം = 0
+ Conditions->>EventSystem: GAME_END_LOSS പുറപ്പെടുവിക്കുക
+ EventSystem->>Display: പരാജയ സന്ദേശം കാണിക്കുക
+ else ജീവൻ ബാക്കിയുണ്ട്
+ GameLogic->>Conditions: isEnemiesDead() പരിശോധിക്കുക
+ alt എല്ലാ ശത്രുക്കളും തോറ്റു
+ Conditions->>EventSystem: GAME_END_WIN പുറപ്പെടുവിക്കുക
+ end
+ end
+```
+```javascript
+eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
+ first.dead = true;
+ second.dead = true;
+ hero.incrementPoints();
+
+ if (isEnemiesDead()) {
+ eventEmitter.emit(Messages.GAME_END_WIN);
+ }
+});
+
+eventEmitter.on(Messages.COLLISION_ENEMY_HERO, (_, { enemy }) => {
+ enemy.dead = true;
+ hero.decrementLife();
+ if (isHeroDead()) {
+ eventEmitter.emit(Messages.GAME_END_LOSS);
+ return; // വിജയം നേടുന്നതിന് മുമ്പുള്ള നഷ്ടം
+ }
+ if (isEnemiesDead()) {
+ eventEmitter.emit(Messages.GAME_END_WIN);
+ }
+});
+
+eventEmitter.on(Messages.GAME_END_WIN, () => {
+ endGame(true);
+});
+
+eventEmitter.on(Messages.GAME_END_LOSS, () => {
+ endGame(false);
+});
+```
+
+**ഇവിടെ നടന്നുകൂടിയ കാര്യങ്ങൾ:**
+- **ലേസർ എനമിയെ തട്ടി**: ഇരുവരും കാണാതാകുന്നു, നീ പോയിന്റുകൾ നേടുന്നു, ജയിച്ചോ എന്ന് പരിശോധിക്കുന്നു
+- **എനമി നിന്നെ തട്ടി**: നീ ഒരു ലൈഫ് നഷ്ടപ്പെടുന്നു, ഇതുവരെ ജീവിക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കുന്നു
+- **ബുദ്ധിയുള്ള ക്രമീകരണം**: ആദ്യം തോൽവിയെ പരിശോധിക്കുന്നു (അവനോട് ഒരുമിച്ച് ജയിക്കാനും തോൽക്കാനും ആഗ്രഹിക്കാറില്ല!)
+- **ആശയങ്ങൾ స్పందിക്കാൻ തയ്യാറായി**: എന്ത് പ്രധാനമുണ്ട് ഉടനെ അറിയുന്നു
+
+### ഘട്ടം 3: പുതിയ സന്ദേശ സ്ഥിരാങ്കങ്ങൾ ചേർക്കുക
+
+നിന്റെ `Messages` സ്ഥിരം ഒബ്ജക്റ്റിലേക്ക് പുതിയ സന്ദേശ തരം ചേർക്കണം. ഇത് തയ്യാറായി തുടരാൻ സഹായിക്കും, തെറ്റ് വരാതെ നടത്താൻ സഹായിക്കുന്നു.
+
+```javascript
+GAME_END_LOSS: "GAME_END_LOSS",
+GAME_END_WIN: "GAME_END_WIN",
+```
+
+**ഇവയിൽ നമ്മൾ:**
+- **ഗെയിം അവസാന ഇവന്റുകൾക്കായി സ്ഥിരങ്ങൾ ചേർത്തു** സാന്ദ്രത നിലനിർത്താൻ
+- **സംവേദനാത്മകമായ പേരുകൾ ഉപയോഗിച്ചു**, ഇവന്റിന്റെ ഉദ്ദേശം വ്യക്തമാക്കുന്നവ
+- **മുൻപ് ഉപയോഗിച്ച പേരിന്റെ നയങ്ങൾ പിന്തുടർന്നു**
+
+### ഘട്ടം 4: പുനരാരംഭ നിയന്ത്രണങ്ങൾ നടപ്പിലാക്കുക
+
+ഇപ്പോൾ കളിക്കാർക്ക് ഗെയിം പുനരാരംഭിക്കാനായി കീവണ കൾ ആഡ് ചെയ്യണം. Enter കീ സ്വാഭാവികമായ തിരഞ്ഞെടുപ്പാണ്, കാരണം അത് സാധാരണയായി കാൻഫേർമേഷൻ, പുതിയ ഗെയിം തുടങ്ങിയ գործողികൾക്കായി ഉപയോഗിക്കപ്പെടുന്നു.
+
+**നിന്റെ നിലവിലുള്ള keydown ഇവന്റ് ലിസിമർക്ക് Enter കീ സെൻസർ ചേർക്കുക:**
+
+```javascript
+else if(evt.key === "Enter") {
+ eventEmitter.emit(Messages.KEY_EVENT_ENTER);
+}
+```
+
+**പുതിയ സന്ദേശ സ്ഥിരം ചേർക്കുക:**
+
+```javascript
+KEY_EVENT_ENTER: "KEY_EVENT_ENTER",
+```
+
+**നീയറിയേണ്ടത്:**
+- **നിന്റെ ഇപ്പോഴുള്ള കീബോർഡ് ഇവന്റ് ഹാൻഡ്ലിങ്ങിനെ വികസിപ്പിക്കുന്നു**
+- **പുനരാരംഭത്തിന് Enter കീ ഉപയോഗിക്കുന്നു, അത് ഉപയോക്തൃ അനുഭവത്തിന് ഹിതം**
+- **ഇതാ പ്രത്യേക ഇവന്റ് പുറപ്പെടുവിക്കുന്നു, ഗെയിമിന്റെ മറ്റ് ഭാഗങ്ങൾ കേൾക്കാൻ കഴിയും**
+- **ഇതിന്റെ മാതൃകനുസരിച്ചു മറ്റു കീബോർഡ് നിയന്ത്രണങ്ങളുമായി പൊരുത്തപ്പെടുത്തി**
+
+### ഘട്ടം 5: സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്ന സിസ്റ്റം സൃഷ്ടിക്കുക
+
+നിന്റെ ഗെയിം വിജയവും പരാജയവും സ്പഷ്ടമായി അറിയിക്കണം. അതിനായി ഒരു സന്ദേശ സംവിധാനം ഉണ്ടാക്കാം, അതിൽ കളർ കോഡുചെയ്ത് ടെക്സ്റ്റായി കാണിക്കും, പഴയ കമ്പ്യൂട്ടർ ടെർമിനലുകളിലെ പോലെ - ഹരിതം വിജയത്തിനും ചുവപ്പ് തെറ്റിനും.
+
+**`displayMessage()` ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:**
+
+```javascript
+function displayMessage(message, color = "red") {
+ ctx.font = "30px Arial";
+ ctx.fillStyle = color;
+ ctx.textAlign = "center";
+ ctx.fillText(message, canvas.width / 2, canvas.height / 2);
+}
+```
+
+**വിശദീകരണം, നിനെന്താണ് നടക്കുന്നത്:**
+- **ഫോണ്ട് വലുപ്പവും കുടുംബവും സജ്ജമാക്കുന്നു, വ്യക്തമായ വായനയ്ക്കായി**
+- **കറുത്ത നിറം മുന്നറിയിപ്പിന് ഡീഫോൾട്ട് ഉപയോഗിച്ചു, കളർ പാരാമീറ്റർ സ്വീകരിക്കുന്നു**
+- **ടെക്സ്റ്റ് ക്യാൻവസ് കാനവാസിൽ ഒറ്റക്കെട്ടായി കേന്ദ്രമാക്കി**
+- **ജാവാസ്ക്രിപ്റ്റ് ഡീഫോൾട്ട് പാരാമ്വാഗ്യൻസുകൾ ഉപയോഗിച്ച് നിറം നിയന്ത്രണം**
+- **ക്യാൻവാസ് 2D കംടെക്സ്റ്റ് ഉപയോഗിച്ച് നേരിട്ട് ടെക്സ്റ്റ് വരയ്ക്കൽ**
+
+**`endGame()` ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:**
+
+```javascript
+function endGame(win) {
+ clearInterval(gameLoopId);
+
+ // യോജിച്ചുള്ള എല്ലാ റെൻഡറുകളും പൂർണമാകുന്നതിന് ഒരു വൈകിപ്പിക്കൽ സജ്ജമാക്കുക
+ setTimeout(() => {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ if (win) {
+ displayMessage(
+ "Victory!!! Pew Pew... - Press [Enter] to start a new game Captain Pew Pew",
+ "green"
+ );
+ } else {
+ displayMessage(
+ "You died !!! Press [Enter] to start a new game Captain Pew Pew"
+ );
+ }
+ }, 200)
+}
+```
+
+**ഈ ഫംഗ്ഷൻ ചെയ്യുന്നത്:**
+- **എല്ലാം നിർത്തുന്നു - കപ്പലുകളോ ലേസറുകളോ സഞ്ചര്യമില്ലാതെ**
+- **ചെറിയ ഒരു ഇടവേള (200ms) നൽകുന്നു, അവസാന ഫ്രെയിം വരയ്ക്കാൻ**
+- **സ്ക്രീൻ ശുചിയാക്കി കറുപ്പ് നിറത്താക്കി വിദ്ഗ്ധമാക്കുന്നു**
+- **ജയിച്ചവർക്കും തോറ്റവർക്കും വ്യത്യസ്ത സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്നു**
+- **പച്ചയും ചുവപ്പും ഉപയോഗിച്ച് സന്ദേശങ്ങളെ നിറകൊടുക്കുന്നു**
+- **പ്ലെയർമാർക്ക് പുനരാരംഭിക്കാനുള്ള പരിപാടികൾ വ്യക്തമാക്കുന്നു**
+
+### 🔄 **അധ്യാപന പരിശോധനം**
+**ഗെയിം സ്റ്റേറ്റ് മാനേജ്മെന്റ്**: പുനരാരംഭ പ്രവർത്തനം നടപ്പാക്കുന്നതിനു മുന്പ് മനസ്സിലാക്കേണ്ടതു്:
+- ✅ അവസാന നിബന്ധനകൾ എങ്ങനെ ഗെയിംപ്ലേ ലക്ഷ്യങ്ങൾ സൃഷ്ടിക്കുന്നു
+- ✅ കളിക്കാരന്റെ മനസിലാക്കലിന് ദൃശ്യ പ്രതികരണം എങ്ങനെ ആവശ്യമാണ്
+- ✅ മെമ്മറി ചോർച്ചകളെ തടയുന്നതിന് ശരിയായ ക്ലീൻഅപ്പ് നിർബന്ധമാണ്
+- ✅ ഇവന്റ്-ഡ്രിവൻ ആർക്കിടെക്ചർ എങ്ങനെ ശുദ്ധമായ സ്റ്റേറ്റ് മാറ്റങ്ങൾ അനുവദിക്കുന്നു
+
+**വേഗ പരിശോധന**: പുനസജ്ജീകരിക്കുമ്പോൾ ഇവന്റ് ലിസനറുകൾ നീക്കം ചെയ്യാത്തത് എന്താകും?
+*ഉത്തരം: മെമ്മറി ചോർച്ചയും ഇവന്റ് ഹാൻഡ്ലർ മടങ്ങും, അനിഷ്ടമായ പെരുമാറ്റം*
+
+**ഗെയിം ഡിസൈൻ സിദ്ധാന്തങ്ങൾ**: നീ ഇപ്പോൾ നടപ്പിലാക്കുന്നത്:
+- **വ്യക്തമായ ലക്ഷ്യങ്ങൾ**: വിജയവും പരാജയവും വ്യക്തമായിരിക്കുന്നു
+- **ഉടൻ പ്രതികരണം**: ഗെയിം സ്റ്റേറ്റുകൾ ഉടനെ അറിയിക്കുന്നു
+- **ഉപയോക്തൃ നിയന്ത്രണം**: കളിക്കാർക്ക് ആവശ്യമുള്ളപ്പോൾ പുനരാരംഭിക്കാൻ കഴിയും
+- **സിസ്റ്റം വിശ്വാസ്യത**: ശരിയായ ക്ലീൻ അപ്പ് ബഗുകളും പ്രകടന പ്രശ്നങ്ങളും തടയുന്നു
+
+### ഘട്ടം 6: ഗെയിം റിസെറ്റ് പ്രവർത്തനം നടപ്പിലാക്കുക
+
+റിസെറ്റ് സംവിധാനം നിലവിലുള്ള ഗെയിം സ്റ്റേറ്റ് പൂര്ണമായി ശുചിയാക്കി, പുതിയ ഗെയിം സെഷൻ ആരംഭിക്കണം. മുൻഗെയിമിൽ നിന്നുള്ള ഡാറ്റ അവശേഷിക്കാതെ സമയബന്ധിത തുടക്കം ലഭ്യമാകും.
+
+**`resetGame()` ഫംഗ്ഷൻ സൃഷ്ടിക്കുക:**
+
+```javascript
+function resetGame() {
+ if (gameLoopId) {
+ clearInterval(gameLoopId);
+ eventEmitter.clear();
+ initGame();
+ gameLoopId = setInterval(() => {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = "black";
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ drawPoints();
+ drawLife();
+ updateGameObjects();
+ drawGameObjects(ctx);
+ }, 100);
+ }
+}
+```
+
+**പ്രത്യേകാംശങ്ങൾ മനസ്സിലാക്കൂ:**
+- **ഗെയിം ലൂപ് ഇപ്പോൾ പോലെ പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കുന്നു**
+- **നിലവിലെ ഗെയിം ലൂപ് നശിപ്പിക്കുന്നു, എല്ലാ പ്രവർത്തനവും നിർത്തുന്നു**
+- **എല്ലാ ഇവന്റ് ലിസിൻറുകളും നീക്കം ചെയ്ത് മെമ്മറി ചോർച്ച ഒഴിവാക്കുന്നു**
+- **പുതിയ ഒബ്ജക്റ്റുകൾ, വേരിയബിളുകൾ ഉപയോഗിച്ച് ഗെയിം സ്റ്റേറ്റ് പുനഃസജ്ജമാക്കുന്നു**
+- **അവസാനം എല്ലാ ഗെയിം ഫംഗ്ഷനുകളും ചേർത്ത് പുതിയ ഗെയിം ലൂപ് പുരോഗമിപ്പിക്കുന്നു**
+- **ഓരോ 100ms ലും ഗെയിം ലെവലും തുടരുന്നു, സ്ഥിരതയ്ക്കായി**
+
+**നിന്റെ `initGame()` ഫംഗ്ഷനിൽ Enter കീ ഇവന്റ് ഹാൻഡ്ലർ ചേർക്കുക:**
+
+```javascript
+eventEmitter.on(Messages.KEY_EVENT_ENTER, () => {
+ resetGame();
+});
+```
+
+**നിന്റെ EventEmitter ക്ലാസിന് `clear()` മെത്തഡ് ചേർക്കുക:**
+
+```javascript
+clear() {
+ this.listeners = {};
+}
+```
+
+**പ്രധാന കാര്യങ്ങൾ:**
+- **Enter കീ അമർത്തൽ റിസെറ്റ് ഗെയിം പ്രവർത്തനത്തിൽ ബന്ധിപ്പിക്കുന്നു**
+- **ഗെയിം ഇൻഷോസ്യലൈസേഷനിൽ ഇത് റജിസ്റ്റർ ചെയ്യുന്നു**
+- **പുനരാരംഭത്തിനിടെ ഈവന്റ് ലിസൻറുകൾ നീക്കം ചെയ്യാനുള്ള ശുചിത്വ മാർഗം നൽകുന്നു**
+- **മറികഴിഞ്ഞ ഗെയിമുകളിൽ മെമ്മറി ചോർച്ച ഒഴിവാക്കുന്നു**
+- **നിലവിലെ ലിസനർ ഒബ്ജക്റ്റ് ശൂന്യമാക്കി പുതിയ തുടക്കത്തിനുള്ളതിനായി**
+
+## അഭിനന്ദനങ്ങൾ! 🎉
+
+👽 💥 🚀 നീ അടിസ്ഥാനം മുതൽ പൂര്ണ്ണമായ ഗെയിം നിർമ്മിച്ചു. 1970കളിലെ ആദ്യ വീഡിയോ ഗെയിമുകൾ സൃഷ്ടിച്ച പ്രോഗ്രാമർമാരുപോലെ, നീ കോഡ് വരികളിൽ നിന്ന് ഉൾപ്പടെയുള്ള ഗെയിം മെക്കാനിക്സുകളും ഉപയോക്തൃ പ്രതികരണവും ഉള്ള പിൻഗാമി അനുഭവമായി മാറ്റി. 🚀 💥 👽
+
+**നീ നേടിയതെല്ലാം:**
+- **പൂർണ്ണമായ ജയവും തോൽവിയും നിബന്ധനകളും ഉപയോക്തൃ പ്രതികരണവുമായിട്ടുണ്ടാക്കി**
+- **നിരന്തരമായ ഗെയിംപ്ലേയ്ക്കായി മൃദുവായ പുനരാരംഭ സംവിധാന നിർമ്മിച്ചു**
+- **ഗെയിം സ്റ്റേറ്റുകൾക്കായുള്ള വ്യക്തമായ ദൃശ്യ സംവരണം രൂപകൽപ്പന ചെയ്തു**
+- **സങ്കീർണ്ണമായ ഗെയിം സ്റ്റേറ്റ് മാറ്റങ്ങളും ക്ലീൻ അപ്പും മാനേജ് ചെയ്തു**
+- **എല്ലാ ഘടകങ്ങളും ചേർത്ത് ഏകോപിതവും കളിക്കാൻ കഴിയും ഗെയിം ഒരുമാക്കി**
+
+### 🔄 **അധ്യാപന പരിശോധനം**
+**പൂർണ്ണ ഗെയിം വികസന സംവിധാനം**: താങ്കളുടെ പൂർണ്ണ ഗെയിം വികസന ചക്രത്തിന്റെ പ്രാവീണ്യം ആഘോഷിക്കുക:
+- ✅ അവസാന നിബന്ധനകൾ എങ്ങനെ തൃപ്തികരമായ കളിക്കാരനുഭവങ്ങൾ സൃഷ്ടിക്കുന്നു?
+- ✅ ഗെയിം നിലനിൽപ്പിന്റെ കാര്യത്തിൽ ശരിയായ സ്റ്റേറ്റ് മാനേജ്മെന്റിന്റെ പ്രാധാന്യം എന്താണ്?
+- ✅ ദൃശ്യ പ്രതികരണം കളിക്കാരന്റെ മനസ്സിലാക്കൽ എങ്ങനെ മെച്ചപ്പെടുത്തുന്നു?
+- ✅ പുനരാരംഭ സംവിധാനം കളിക്കാരനെ ഒരിക്കൽ കൂടി തിന്നിപ്പിക്കുന്നതിന് എന്ത് സംഭാവന നൽകുന്നു?
+
+**സിസ്റ്റം പ്രാവീണ്യം**: നിന്റെ പൂർണ്ണ ഗെയിം:
+- **ഫുൾ-സ്റ്റാക്ക് ഗെയിം ഡവലപ്പ്മെന്റ്**: ഗ്രാഫിക്സ് മുതൽ ഇൻപുട്ട് വരെ സ്റ്റേറ്റ് മാനേജ്മെന്റുവരെ
+- **പ്രൊഫഷണൽ ആർക്കിടെക്ചർ**: ഇവന്റ്-ഡ്രിവൻ സിസ്റ്റങ്ങൾ ശരിയായ ക്ലീനപ്പോടുകൂടി
+- **ഉപയോക്തൃ അനുഭവ ഡിസൈൻ**: വ്യക്തമായ പ്രതികരണവും എളുപ്പത്തിലുള്ള നിയന്ത്രണവും
+- **പ്രകടന മെച്ചപ്പെടുത്തൽ**: കാര്യക്ഷമമായ റെൻഡറിംഗ്, മെമ്മറി മാനേജ്മെന്റ്
+- **പോളിഷ്വും പരിപൂർണതയും**: ഗെയിം പരിപൂർണമായ അനുഭവമാക്കുന്ന എല്ലാ വിശേഷങ്ങളിലും
+
+**വ്യവസായത്തിന് തയാറായത്തക്ക കഴിവുകൾ**: നീ നടപ്പിലാക്കിയവ:
+- **ഗെയിം ലൂപ് ആർക്കിടെക്ചർ**: യഥാർത്ഥ സമയ സിസ്റ്റങ്ങൾ സ്ഥിരതയുള്ള പ്രകടനത്തോടെ
+- **ഇവന്റ്-ഡ്രിവൻ പ്രോഗ്രാമിംഗ്**: ഡികപ്പ്ലഡ് സിസ്റ്റങ്ങൾ കാര്യക്ഷമമായി സ്ക്കെയ്ൽ ചെയ്യുന്നു
+- **സ്റ്റേറ്റ് മാനേജ്മെന്റ്**: സങ്കീർണ്ണമായ ഡാറ്റ കൈകാര്യം ചെയ്യലും ജീവിതചക്ര നിയന്ത്രണവും
+- **ഉപയോക്തൃ ഇന്റർഫേസ് ഡിസൈൻ**: വ്യക്തമായ സന്ദേശവും പ്രതികരണാർഹമായ നിയന്ത്രണങ്ങളും
+- **ടെസ്റ്റിംഗ്, ഡീബഗ്ഗിംഗ്**: പരിരക്ഷണമുള്ള വികസനവും പ്രശ്നപരിഹാരവും
+
+### ⚡ **അടുത്ത 5 മിനുട്ടിൽ ചെയ്യാവുന്ന കാര്യങ്ങൾ**
+- [ ] നീ നിർമിച്ച പൂർണ്ണ ഗെയിം കളിച്ച് എല്ലാ ജയ/തെറ്റു നിബന്ധനകളും പരീക്ഷിക്കുക
+- [ ] വ്യത്യസ്ത അവസാന നിബന്ധ നാപാമാനങ്ങളുമായി പരീക്ഷണം നടത്തുക
+- [ ] ഗെയിം സ്റ്റേറ്റ് മാറ്റം ട്രാക്ക് ചെയ്യാൻ console.log സ്റ്റേറ്റ്മെന്റുകൾ ചേർക്കാൻ ശ്രമിക്കുക
+- [ ] നിന്റെ ഗെയിം സുഹൃത്തുക്കളുമായി പങ്കുവെക്കൂ, അഭിപ്രായങ്ങൾ ശേഖരിക്കൂ
+
+### 🎯 **ഈ മണിക്കൂറിൽ പൂർത്തിയാക്കാം**
+- [ ] പാഠാനന്തര ക്വിസ് പൂർത്തിയാക്കി നിന്റെ ഗെയിം ഡവലപ്പ്മെന്റ് യാത്ര കുറിച്ച് ആലോചിക്കുക
+- [ ] വിജയത്തിനും പരാജയത്തിനും ഓഡിയോ എഫക്റ്റുകൾ ചേർക്കുക
+- [ ] സമയ പരിധികൾ പോലുള്ള അധിക അവസാന നിബന്ധനകൾ നടപ്പിലാക്കുക
+- [ ] വ്യത്യസ്ത എനമി എണ്ണങ്ങളുള്ള വിഷയ തീവ്രത ലെവലുകൾ സൃഷ്ടിക്കുക
+- [ ] മെച്ചപ്പെട്ട ഫോണ്ടുകൾ, നിറങ്ങൾ ഉപയോഗിച്ച് ദൃശ്യ പ്രദർശനം തിളപ്പിക്കുക
+
+### 📅 **നിന്റെ ഒരു ആഴ്ച നീണ്ട ഗെയിം ഡവലപ്പ്മെന്റ് പ്രാവീണ്യം**
+- [ ] ബഹു ലെവലുകളും പുരോഗതികളുമുള്ള ഉയർന്ന നിലവാരത്തിലുള്ള സ്പേസ്ബേസ് ഗെയിം പൂർത്തിയാക്കുക
+- [ ] പവർ-അപ്പ്, വ്യത്യസ്ത എനമി തരം, പ്രത്യേകആയുധങ്ങൾ പോലുള്ള പരിഷ്കരിച്ച ഫീച്ചറുകൾ ചേർക്കുക
+- [ ] സ്ഥിരമായ സ്റ്റോറേജ് ഉപയോഗിച്ച് ഹൈ സ്കോർ സംവിധാനം സൃഷ്ടിക്കുക
+- [ ] മെനുകൾ, സെറ്റിംഗ്സ്, ഗെയിം ഓപ്ഷനുകൾക്കുള്ള ഉപയോക്തൃ ഇന്റർഫേസ് രൂപകൽപ്പന ചെയ്യുക
+- [ ] വ്യത്യസ്ത ഉപകരണങ്ങൾക്കും ബ്രൗസറുകൾക്കും പ്രകടനം മെച്ചപ്പെടുത്തുക
+- [ ] ഗെയിം ഓൺലൈൻ റിലീസ് ചെയ്ത് സമൂഹത്തോടൊപ്പം പങ്കുവെക്കുക
+### 🌟 **നിങ്ങളുടെ ഒരു മാസത്തെ ഗെയിം ഡെവലപ്പ്മെന്റ് കരിയർ**
+- [ ] വ്യത്യസ്ത രീതികളും മെക്കാനിക്സും പരീക്ഷിച്ച് നിറഞ്ഞ പൂർണ്ണ ഗെയിമുകൾ നിർമ്മിക്കുക
+- [ ] Phaser അല്ലെങ്കിൽ Three.js പോലുള്ള ഉയർന്ന തലത്തിലുള്ള ഗെയിം ഡെവലപ്പ്മെന്റ് ഫ്രെയിംവർകുകൾ പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഗെയിം ഡെവലപ്പ്മെന്റ് പ്രോജക്ടുകളിൽ സംഭാവന നൽകുക
+- [ ] ഗെയിം ഡിസൈൻ സിദ്ധാന്തങ്ങൾക്കും പ്ലേയറൊരുടെ മനোবലം പഠിക്കുക
+- [ ] നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് দক্ষതകൾ പ്രദർശിപ്പിക്കുന്ന ഒരു പോർട്ട്ഫോളിയോ സൃഷ്ടിക്കുക
+- [ ] ഗെയിം ഡെവലപ്പ്മെന്റ് സമുദായത്തോടു ബന്ധപ്പെട്ടു കൂടി പഠനം തുടരെ നടത്തുക
+
+## 🎯 നിങ്ങളുടെ സകലഗെയിം ഡെവലപ്പ്മെന്റ് മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title ഗെയിം ഡെവലപ്പ്മെന്റ് പഠന പ്രക്രിയയുടെ പൂര്ണ്ണമായ പുരോഗതി
+
+ section അടിസ്ഥാനമാക്കല് (പാഠങ്ങള് 1-2)
+ Game Architecture: പ്രോജക്ടിന്റെ ഘടന
+ : ആസ്തി കൈകാര്യം
+ : കലണ്ടര് അടിസ്ഥാനങ്ങള്
+ : ഇവന്റ് സിസ്റ്റങ്ങള്
+
+ section ഇന്ററാക്ഷന് സിസ്റ്റങ്ങള് (പാഠങ്ങള് 3-4)
+ Player Control: ഇന്പുട്ട് കൈകാര്യം
+ : ചലന മെക്കാനിക്ക്സ്
+ : കൂട്ടിയിടിക്കല് കണ്ടെത്തല്
+ : ഭൗതിക അനുകരണം
+
+ section ഗെയിം മെക്കാനിക്സ് (പാഠം 5)
+ Feedback Systems: സ്കോറിംഗ് മെക്കാനിസങ്ങള്
+ : ജീവിതം കൈകാര്യം
+ : ദൃശ്യ കമ്മ്യൂണിക്കേഷന്
+ : പ്ലെയറുടെ പ്രേരണ
+
+ section ഗെയിം പൂര്ത്തീകരണം (പാഠം 6)
+ Polish & Flow: അവസാന അവസ്ഥകള്
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+ : റീസ്ടാര്ട്ട് സിസ്റ്റങ്ങള്
+ : ഉപയോക്തൃ അനുഭവം
+
+ section ഉയര്ന്ന സവിശേഷതകള് (1 ആഴ്ച)
+ Enhancement Skills: ഓഡിയോ സംയോജനം
+ : ദൃശ്യ ഫലങ്ങള്
+ : ലെവല് പുരോഗതി
+ : പ്രകടന മെച്ചപ്പെടുത്തല്
+
+ section പ്രൊഫഷണല് വികസനം (1 മാസം)
+ Industry Readiness: ഫ്രെയിംവര്ക്ക് മാസ്റ്ററി
+ : ടീം സഹകരണം
+ : പോര്ട്ട്ഫോളിയോ വികസനം
+ : കമ്മ്യൂണിറ്റി പങ്കാളിത്തം
+
+ section കരിയര് പുരോഗതി (3 മാസം)
+ Specialization: ഉയര്ന്ന ഗെയിം എഞ്ചിനുകള്
+ : പ്ലാറ്റ്ഫോം വിന്യാസം
+ : ലാഭമെടുപ്പ് നീതികള്
+ : വ്യവസായ നെട്വര്ക്കിംഗ്
+```
+### 🛠️ നിങ്ങളുടെ സകലഗെയിം ഡെവലപ്പ്മെന്റ് ടൂൾകിറ്റ് സംഗ്രഹം
+
+ഈ മുഴുവനായ സ്പേസ് ഗെയിം പരമ്പര പൂർത്തിയാക്കിയപ്പോൾ, നിങ്ങൾ ഇപ്പോൾ തകർത്തിട്ടുണ്ട്:
+- **ഗെയിം ആർക്കിടെക്ചർ**: ഇവന്റ്-ഡ്രിവൻ സിസ്റ്റങ്ങൾ, ഗെയിം ലൂപ്പുകൾ, സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+- **ഗ്രാഫിക് പ്രോഗ്രാമിംഗ്**: കാൻവാസ് API, സ്പ്രൈറ്റ് റെൻഡറിങ്, ദൃശ്യ ഫലങ്ങൾ
+- **ഇൻപുട്ട് സിസ്റ്റങ്ങൾ**: കീബോർഡ് കൈകാര്യം ചെയ്യൽ, കൂട്ടിയിടുപ്പ് കണ്ടെത്തൽ, പ്രതികരണക്ഷമമായ നിയന്ത്രണങ്ങൾ
+- **ഗെയിം ഡിസൈൻ**: പ്ലയർ ഫീഡ്ബാക്ക്, പ്രോഗ്രഷൻ സിസ്റ്റങ്ങൾ, ആകർഷകമായ മെക്കാനിക്സുകൾ
+- **പരിപാലന ഓപ്റ്റിമൈസേഷൻ**: ഫലപ്രദമായ റെൻഡറിങ്, മെമ്മറി മാനേജ്മെന്റ്, ഫ്രെയിം റേറ്റ് നിയന്ത്രണം
+- **ഉപയോക്തൃ അനുഭവം**: സുതാര്യമായ ആശയവിനിമയം, ചുരുങ്ങിയ നിയന്ത്രണങ്ങൾ, പൊളിഷ് വിശദാംശങ്ങൾ
+- **പ്രൊഫഷണൽ പാറ്റേണുകൾ**: ക്ലീൻ കോഡ്, ഡീബഗ്ഗിംഗ് സാങ്കേതികതകൾ, പ്രോജക്ട് ഓർഗനൈസേഷൻ
+
+**ഉയിര്ത്താവിലേക്കുള്ള പ്രയോഗങ്ങൾ**: നിങ്ങളുടെ ഗെയിം ഡെവലപ്പ്മെന്റ് കഴിവുകൾ നേരിട്ടായി പ്രയോഗിക്കാം:
+- **ഇന്ററാക്ടീവ് വെബ് അപ്ലിക്കേഷനുകൾ**: ഡൈനാമിക് ഇന്റർഫേസും റിയൽ-ടൈം സിസ്റ്റങ്ങളും
+- **ഡാറ്റ വിന്യാസവും**: പ്രാണവായു ചാർട്ടുകളും ഇന്ററാക്ടീവ് ഗ്രാഫിക്സും
+- **എജ്യൂക്കേഷൻ ടെക്നോളജി**: ഗെയിമിഫിക്കേഷൻ, ആകർഷകമായ പഠന അനുഭവങ്ങൾ
+- **മൊബൈൽ ഡെവലപ്പ്മെന്റ്**: ടച്ച്-അധിഷ്ഠിത ഇന്ററാക്ഷനുകളും പ്രകടന മെച്ചപ്പെടുത്തലും
+- **സിമുലേഷൻ സോഫ്റ്റ്വെയർ**: ഫിസിക്സ് എഞ്ചിനുകളും റിയൽ-ടൈം മാതൃകകളും
+- **സൃഷ്ടിപരമായ വ്യവസായങ്ങൾ**: ഇന്ററാക്ടീവ് ആർട്ട്, വിനോദം, ഡിജിറ്റൽ അനുഭവങ്ങൾ
+
+**പ്രൊഫഷണൽ കഴിവുകൾ**: ഇപ്പോൾ നിങ്ങൾക്ക് കഴിയും:
+- **ആർക്കിടെക്റ്റ്** സങ്കീർണ്ണ ഇന്ററാക്ടീവ് സിസ്റ്റങ്ങൾ പൂർത്തിയാക്കുക
+- **ഡീബഗ്** റിയൽ-ടൈം അപ്ലിക്കേഷനുകൾ സംവിധാനം ചെയ്ത രീതിയിൽ
+- **ഓപ്റ്റിമൈസ്** പ്രകടനം സുതാര്യമായ ഉപയോക്തൃ അനുഭവങ്ങൾക്ക്
+- **ഡിസൈൻ** ആകർഷകമായ ഉപയോക്തൃ ഇന്റർഫേസുകളും ഇടപെടൽ മാതൃകകളും
+- **സഹകരിക്കുക** സാങ്കേതിക പ്രോജക്ടുകളിൽ ശരിയായ കോഡ് ഓർഗനൈസേഷനോടെ
+
+**ഗെയിം ഡെവലപ്പ്മെന്റ് ആശയങ്ങൾ ദക്ഷിണമാക്കിയത്**:
+- **റിയൽ-ടൈം സിസ്റ്റങ്ങൾ**: ഗെയിം ലൂപ്പുകൾ, ഫ്രെയിം റേറ്റ് മാനേജ്മെന്റ്, പ്രകടനം
+- **ഇവന്റ്-ഡ്രിവൻ ആർക്കിടെക്ചർ**: വേർതിരിച്ച സിസ്റ്റങ്ങളും സന്ദേശ കൈമാറ്റവും
+- **സ്റ്റേറ്റ് മാനേജ്മെന്റ്**: സങ്കീർണ്ണ ഡാറ്റ കൈകാര്യംചെയ്യൽ, ലൈഫ് സൈക്കിൾ മാനേജ്മെന്റ്
+- **ഉപയോക്തൃ ഇന്റർഫേസ് പ്രോഗ്രാമിംഗ്**: കാൻവാസ് ഗ്രാഫിക്സ്, പ്രതികരണക്ഷമ ഡിസൈൻ
+- **ഗെയിം ഡിസൈൻ സിദ്ധാന്തം**: പ്ലേയർ മനശാസ്ത്രം, ആകർഷകമായ മെക്കാനിക്കുകൾ
+
+**അടുത്ത തലമുറ**: പുതിയ മികവുള്ള ഗെയിം ഫ്രെയിംവർക്ക്, 3D ഗ്രാഫിക്സ്, മൾട്ടിപ്ലെയർ സിസ്റ്റങ്ങൾ പരീക്ഷിക്കാമോ, അല്ലെങ്കിൽ പ്രൊഫഷണൽ ഗെയിം ഡെവലപ്പ്മെന്റ് ജോലികൾക്ക് കടക്കാനോ തയ്യാറാണ്!
+
+🌟 **വിജയം നേടി**: നിങ്ങൾ ഒരു പൂർണ്ണ ഗെയിം ഡെവലപ്പ്മെന്റ് യാത്ര പൂർത്തിയാക്കി, ഒരു പ്രൊഫഷണൽ നിലവാരത്തിലുള്ള ഇന്ററാക്ടീവ് അനുഭവം തകർന്ന് സമ്പാദിച്ചു!
+
+**ഗെയിം ഡെവലപ്പ്മെന്റ് സമുദായത്തിലേക്ക് സ്വാഗതം!** 🎮✨
+
+## GitHub Copilot ഏജന്റ് ചലഞ്ച് 🚀
+
+എജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെയുള്ള ചലഞ്ച് പൂർത്തിയാക്കുക:
+
+**വിവരണം:** സ്പേസ് ഗെയിം മെച്ചപ്പെടുത്തുക, ഉയരുന്ന ബുദ്ധിമുട്ടും ബോണസ് സവിശേഷതകളും ഉള്ള ഒരു ലെവൽ പ്രോഗ്രഷൻ സിസ്റ്റം നടപ്പിലാക്കുക.
+
+**പ്രമ്പ്റ്റ്:** ഓരോ ലെവലിലും അധിക എനമി ഷിപ്പുകൾ കൂടിയ വേഗതയോടെയും ആരോഗ്യത്തോടെയും ഉള്ള ഒരു മൾട്ടി-ലെവൽ സ്പേസ് ഗെയിം സിസ്റ്റം സൃഷ്ടിക്കുക. ഓരോ ലെവലിലും വർദ്ധിക്കുന്ന സ്കോറിംഗ് മൾട്ടിപ്ലയർ ഉൾപ്പെടുത്തുക, എനമികൾ തകർത്തപ്പോഴായി (റാപിഡ് ഫയർ അല്ലെങ്കിൽ ഷീൽഡ് പോലുള്ള) പവർ-അപ്പുകൾ പ്രയോഗിക്കുക. ലെവൽ പൂർത്തിയാക്കൽ ബോണസ് ഉൾപ്പെടുത്തുക, നിലവിലുള്ള സ്കോർ, ലൈഫ് എന്നിവയ്ക്കൊപ്പം നിലവിലെ ലെവൽ സ്ക്രീനിൽ പ്രദർശിപ്പിക്കുക.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) കുറിച്ച് കൂടുതൽ അറിയുക.
+
+## 🚀 ഓപ്ഷണൽ മെച്ചപ്പെടുത്തൽ ചലഞ്ച്
+
+**നിങ്ങളുടെ ഗെയിമിൽ ഓഡിയോ ചേർക്കുക**: ശബ്ദ ഫലങ്ങൾ പ്രയോഗിച്ച് നിങ്ങളുടെ കളി അനുഭവം മെച്ചപ്പെടുത്തൂ! അടുത്തുള്ള ശബ്ദങ്ങൾ ചേർക്കുക:
+
+- കളിക്കാരൻ ഷൂട്ട് ചെയ്യുമ്പോൾ **ലേസർ ഷോട്ടുകൾ**
+- എനമികൾ തകരുമ്പോൾ **എനമി നശീകരണം**
+- കളിക്കാരൻ പരിക്കു വരുമ്പോൾ **ഹീറോ ഡാമേജ്**
+- ഗെയിം ജയിച്ചപ്പോൾ **വിജയ സംഗീതം**
+- ഗെയിം തോറ്റപ്പോൾ **പരാജയ ശബ്ദം**
+
+**ഓഡിയോ പ്രയോഗ ഉദാഹരണം:**
+
+```javascript
+// ഓഡിയോ объക്ടുകള് സൃഷ്ടിക്കുക
+const laserSound = new Audio('assets/laser.wav');
+const explosionSound = new Audio('assets/explosion.wav');
+
+// ഗെയിം സംഭവങ്ങളുടെ സമയത്ത് ശബ്ദങ്ങള് പ്ലേ ചെയ്യുക
+function playLaserSound() {
+ laserSound.currentTime = 0; // ആരംഭത്തില് മടങ്ങി പോകൂ
+ laserSound.play();
+}
+```
+
+** നിങ്ങൾ അറിയേണ്ടത്:**
+- വിവിധ ശബ്ദ ഫലങ്ങൾക്ക് ഓഡിയോ ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കുന്നു
+- റാപിഡ് ഫയർ ശബ്ദങ്ങൾക്കായി `currentTime` പുനഃക്രമീകരിക്കുന്നു
+- യൂസർ ഇടപെടലുകളിൽ നിന്നു ശബ്ദം പടർത്തി ബ്രൗസർ ഓട്ടോപ്ലേ നയം കൈകാര്യം ചെയ്യുന്നു
+- മികച്ച ഗെയിം അനുഭവത്തിനായി ഓഡിയോ വോള്യും, സമയക്രമീകരണം നിയന്ത്രിക്കുന്നു
+
+> 💡 **പഠന വിഭവം**: ജാവാസ്ക്രിപ്റ്റ് ഗെയിമുകളിൽ ഓഡിയോ നടപ്പിലാക്കൽ പഠിക്കാന് ഈ [ഓഡിയോ സാൻഡ്ബോക്സ്](https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_audio_play) നോക്കുക.
+
+## ലക്ചർ കഴിഞ്ഞുള്ള ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/40)
+
+## റിവ്യൂ & സ്വയം പഠനം
+
+നിങ്ങളുടെ അസൈൻമെന്റ് പുതിയ ഒരു സാമ്പിൾ ഗെയിം സൃഷ്ടിക്കലാണ്, അതിനാൽ വിവിധ ആകർഷകമായ ഗെയിമുകൾ പരിശോധിച്ച് നിങ്ങൾ ഏത് തരത്തിലുള്ള ഗെയിം നിർമ്മിക്കാമെന്ന് കണ്ടെത്തുക.
+
+## അസൈൻമെന്റ്
+
+[Build a Sample Game](assignment.md)
+
+---
+
+
+**ശrevetിപ്പ്**:
+ഈ ഡോക്യുമെന്റ് AI തർജുമാൺ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തർജ്ജമ ചെയ്തതാണ്. നമുക്ക് ശരിയായ വിവർത്തനത്തിന് ശ്രമിച്ചിരുന്നതിനാലും ഓട്ടോമാറ്റിക് തർജുമാനങ്ങളിൽ പിശകുകളും അക്ഷതകളും ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. മാതൃഭാഷയിലുള്ള മൗലിക ഡോക്യുമെന്റാണ് പ്രാമാണിക സ്രോതസ്സെന്ന് കണക്കാക്കേണ്ടതാണ്. നിർണായകമായ വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യഭാഷ തർജുമാനെൻറെ സഹായം അഭ്യർത്ഥിക്കുകയാണ്. ഈ തർജുമാനത്തിന്റെ ഉപയോഗത്തിൽ സംഭവിക്കുന്ന എന്തെങ്കിലും തെറ്റിദ്ധാരണയ്ക്കോ ദുരവബോധത്തിനോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/6-end-condition/assignment.md b/translations/ml/6-space-game/6-end-condition/assignment.md
new file mode 100644
index 000000000..e28213633
--- /dev/null
+++ b/translations/ml/6-space-game/6-end-condition/assignment.md
@@ -0,0 +1,174 @@
+
+# ഒരു സാമ്പിൾ ഗെയിം നിർമ്മിക്കുക
+
+## അസൈൻമെന്റ് അവലോകനം
+
+നിങ്ങൾ സ്പേസ് ഗെയിമിലെ കളി അവസാനം നിബന്ധനകളും പുനരാരംഭ ഫംഗ്ഷണാലിറ്റിയും കൈകാര്യം ചെയ്യാൻ പഠിച്ചപ്പോൾ, ഇതേ ആശയങ്ങൾ പുതിയ ഒരു ഗെയിമിംഗ് അനുഭവത്തിൽ പ്രയോഗിക്കാൻ സമയം ആയിരിക്കുന്നു. വിവിധ അവസാനം നിബന്ധന പാറ്റേണുകളും പുനരാരംഭ മെക്കാനിക്സും പ്രദർശിപ്പിക്കുന്ന നിങ്ങളുടെ സ്വന്തമായ ഗെയിം രൂപകൽപ്പന ചെയ്ത് നിർമ്മിക്കേണ്ടതാണ്.
+
+ഈ അസൈൻമെന്റ് ഗെയിം ഡിസൈനിനെക്കുറിച്ചും നിങ്ങള് ഭാവനാശക്തിയോടെ ചിന്തിക്കുകയും നിങ്ങൾ പഠിച്ച സാങ്കേതിക കഴിവുകൾ അഭ്യസിക്കുകയും ചെയ്യാൻ പ്രേരിപ്പിക്കുന്നു. നിങ്ങൾ വിജയം നേടിയിടത്തെയും പരാജയം സംഭവിക്കുന്നിടത്തെയും വ്യത്യസ്ത രംഗങ്ങൾ പരിശോധിക്കുകയും, പ്ലെയർ പുരോഗതിയും ആകർഷകമായ പുനരാരംഭ അനുഭവവും സൃഷ്ടിക്കുകയും ചെയ്യും.
+
+## പ്രോജക്റ്റ് ആവശ്യകതകൾ
+
+### മൈത്രീഗെയിം ഫീച്ചറുകൾ
+
+നിങ്ങളുടെ ഗെയിമിൽ താഴെയുള്ള നിർബന്ധമായ ഘടകങ്ങൾ ഉൾപ്പെടുത്തണം:
+
+**അവസാന നിബന്ധന വൈവിധ്യം**: ഗെയിം അവസാനിക്കും കുറഞ്ഞത് രണ്ട് വ്യത്യസ്ത മാർഗങ്ങൾ നടപ്പാക്കുക:
+- **പോയിന്റ് ভিত্তിയിലുള്ള വിജയം**: പ്ലെയർ നിർദ്ദിഷ്ട സ്കോർ തട്ടുക അല്ലെങ്കിൽ പ്രത്യേക വസ്തുക്കൾ ശേഖരിക്കുക
+- **ജീവിതം-അടിസ്ഥാനമാക്കിയ പരാജയം**: പ്ലെയർ എല്ലാ ലഭ്യമായ ജീവനുകളും ആരോഗ്യം നിലനിൽക്കലുകളും നഷ്ടപ്പെടുക
+- **ലക്ഷ്യം പൂർത്തീകരിക്കൽ**: എല്ലാ ശത്രുക്കളും തോൽപ്പിക്കുക, നിർദ്ദിഷ്ട വസ്തുക്കൾ ശേഖരിക്കുക, അല്ലെങ്കിൽ ലക്ഷ്യങ്ങൾ കൈവരിക്കുക
+- **സമയം അടിസ്ഥാനമാക്കിയുള്ളത്**: നിശ്ചിത ദൈർഘ്യം കഴിഞ്ഞു അല്ലെങ്കിൽ കൗണ്ട്ഡൗൺ പൂർത്തിയായാൽ ഗെയിം അവസാനിക്കും
+
+**പുനരാരംഭ ഫംഗ്ഷണാലിറ്റി**:
+- **ഗെയിം സ്റ്റേറ്റ് ക്ലിയർ ചെയ്യുക**: മുൻ ഗെയിം ഒബ്ജെക്ടുകൾ എല്ലാം നീക്കം ചെയ്യുകയും വേരിയബിളുകൾ നിന്നു പുനഃസജ്ജമാക്കുകയും ചെയ്യുക
+- **സിസ്റ്റങ്ങൾ പുനഃസജ്ജമാക്കുക**: പുതിയ പ്ലെയർ സ്ഥിതിഗതികളും, ശത്രുക്കളും, ലക്ഷ്യങ്ങളും തുടങ്ങിയവ ഉപയോഗിച്ച് പുതിയ ഗെയിം ആരംഭിക്കുക
+- **ഉപയോഗപ്രദമായ നിയന്ത്രണങ്ങൾ**: ഗെയിം പുനരാരംഭിക്കാനുള്ള വ്യക്തമായ നിർദ്ദേശങ്ങൾ നൽകുക
+
+**പ്ലെയർ പ്രതികരണം**:
+- **വിജയ സന്ദേശങ്ങൾ**: പ്ലെയർ വിജയങ്ങളെ ആഘോഷിച്ച് പോസിറ്റീവ് പ്രതികരണം നൽകുക
+- **പരാജയ സന്ദേശങ്ങൾ**: പുനരവലോകനത്തിനും പ്രോത്സാഹനത്തിനും സഹായിക്കുന്ന സന്ദേശങ്ങൾ നൽകുക
+- **പുരോഗതി സൂചികകൾ**: നിലവിലുള്ള സ്കോർ, ജീവൻ, അല്ലെങ്കിൽ ലക്ഷ്യത്തിലെ സ്ഥിതി കാണിക്കുക
+
+### ഗെയിം ആശയങ്ങളും പ്രചോദനങ്ങളും
+
+ഈ ഗെയിം ആശയങ്ങളിൽ ഒരുവനെ തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ നിങ്ങളുടെ സ്വന്തം സൃഷ്ടിക്കുക:
+
+#### 1. കൺസോൾ അത്ഭുത ഗെയിം
+ടെക്സ്റ്റ് അടിസ്ഥാനമാക്കിയുള്ള അത്ഭുത ഗെയിം ഉണ്ടാക്കുക, യുദ്ധ യന്ത്രങ്ങൾ ഉൾപ്പെടുത്തി:
+
+```
+Hero> Strikes with broadsword - orc takes 3p damage
+Orc> Hits with club - hero takes 2p damage
+Hero> Kicks - orc takes 1p damage
+Game> Orc is defeated - Hero collects 2 coins
+Game> ****No more monsters, you have conquered the evil fortress****
+```
+
+**നടത്തേണ്ട പ്രധാന ഫീച്ചറുകൾ:**
+- **ടേൺ അടിസ്ഥാനത്തിലുള്ള യുദ്ധം** വ്യത്യസ്ത ആക്രമണ ഓപ്ഷനുകളോടെ
+- **ആരോഗ്യ പോയിന്റുകൾ** പ്ലെയറും ശത്രുക്കളും ഇരുവരും
+- **ഇൻവെൻററി സിസ്റ്റം** നാണയങ്ങൾ അല്ലെങ്കിൽ വസ്തുക്കൾ ശേഖരിക്കാൻ
+- **മൽട്ടിപ്പിൾ ശത്രു വര്ഗ്ഗങ്ങൾ** വ്യത്യസ്ത ബുദ്ധിമുട്ടുകളോടെ
+- **വിജയ нөхдение** എല്ലാ ശത്രുക്കളുമെല്ലാം തോൽപ്പിച്ചാൽ
+
+#### 2. ശേഖരണ ഗെയിം
+- **ലക്ഷ്യം**: തടസ്സങ്ങൾ ഒഴിവാക്കി പ്രത്യേക വസ്തുക്കൾ ശേഖരിക്കുക
+- **അവസാന നിബന്ധനകൾ**: ലക്ഷ്യം വസ്തു ശേഖരണ എണ്ണം പൂർത്തിയാക്കുക അല്ലെങ്കിൽ എല്ലാ ജീവൻ നഷ്ടപ്പെടുക
+- **പുരോഗതി**: ഗെയിം പുരോഗമിക്കുന്നതിനൊപ്പം വസ്തുക്കൾ ശേഖരിക്കാൻ കഠിനത വർദ്ധിക്കും
+
+#### 3. പസിൽ ഗെയിം
+- **ലക്ഷ്യം**: ഓരോ തലവും കൂടുതൽ കഠിനമായ പസിലുകൾ 풀ുക
+- **അവസാന നിബന്ധനകൾ**: എല്ലാ തലങ്ങളും പൂർത്തിയാക്കുക അല്ലെങ്കിൽ കളികൾ/സമയം കാര്യമായി തീർത്ത് പാകം
+- **പുനരാരംഭം**: ആദ്യ തലത്തിലേക്ക് റീസെറ്റ് ചെയ്ത് പുരോഗതി ശൂന്യമാക്കുക
+
+#### 4. പ്രതിരോധ ഗെയിം
+- **ലക്ഷ്യം**: ശത്രുക്കളുടെ തരംഗങ്ങളിൽനിന്ന് നിങ്ങളുടെ അടിസ്ഥാനം സംരക്ഷിക്കുക
+- **അവസാന നിബന്ധനകൾ**: എല്ലാ തരംഗവും ജീവിച്ച് രക്ഷപ്പെടുക (വിജയം) അല്ലെങ്കിൽ അടിസ്ഥാനം നശിക്കുക (പരാജയം)
+- **പുരോഗതി**: ശത്രു തരങ്ങൾ കൂടുതൽ ബുദ്ധിമുട്ടും സംഖ്യയിലും വർദ്ധിക്കും
+
+## നടപ്പാക്കൽ മാർഗനിർദ്ദേശങ്ങൾ
+
+### ആരംഭിക്കൽ
+
+1. **നിങ്ങളുടെ ഗെയിം ഡിസൈൻ പദ്ധതീകരിക്കുക**:
+ - അടിസ്ഥാന ഗെയിംപ്ലേ ലൂപ്പ് രേഖപ്പെടുത്തുക
+ - നിങ്ങളുടെ അവസാന നിബന്ധനകൾ വ്യക്തമായി നിർവചിക്കുക
+ - പുനരാരംഭത്തിൽ പുനഃസജ്ജമാക്കേണ്ട ഡാറ്റ തിരിച്ചറിയുക
+
+2. **നിങ്ങളുടെ പ്രോജക്ട് ഘടന ക്രമീകരിക്കുക**:
+ ```
+ my-game/
+ ├── index.html
+ ├── style.css
+ ├── game.js
+ └── README.md
+ ```
+
+3. **നിങ്ങളുടെ കോർ ഗെയിം ലൂപ്പ് സൃഷ്ടിക്കുക**:
+ - ഗെയിം സ്റ്റേറ്റ് ഇൻഷിയലൈസ് ചെയ്യുക
+ - ഉപയോക്തൃ ഇൻപുട്ട് കൈകാര്യം ചെയ്യുക
+ - ഗെയിം ലോജിക്ക് അപ്ഡേറ്റ് ചെയ്യുക
+ - അവസാന നിബന്ധനകൾ പരിശോധിക്കുക
+ - നിലവിലെ സ്ഥിതി റെണ്ടർ ചെയ്യുക
+
+### സാങ്കേതിക ആവശ്യകതകൾ
+
+**ആധുനിക ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിക്കുക**:
+- വേരിയബിളുകൾ പ്രഖ്യാപിക്കുമ്പോൾ `const` കൂടാതെ `let` ഉപയോഗിക്കുക
+- നിലവിലുള്ള സ്ഥാനങ്ങളിൽ ആറോ ഫംഗ്ഷനുകൾ ഉപയോഗിക്കുക
+- ടെംപ്ലേറ്റ് ലിറ്ററൽസ്, ഡിസട്രക്ടറിംഗ് തുടങ്ങിയ ES6+ ഫീച്ചറുകൾ പ്രയോഗിക്കുക
+
+**ഇവന്റ് ഡ്രിവൻ ആർകിടെക്ചർ**:
+- ഉപയോക്തൃ ഇടപെടലുകൾക്ക് ഇവന്റ് ഹാൻഡിലറുകൾ സൃഷ്ടിക്കുക
+- ഇവന്റുകൾ വഴിയായി ഗെയിം സ്റ്റേറ്റ് മാറ്റങ്ങൾ നടപ്പാക്കി
+- പുനരാരംഭ ഫംഗ്ഷണാലിറ്റിയുടെ ഭാഗമായ ഇവന്റ് ലിസണറുകൾ ഉപയോഗിക്കുക
+
+**വൈകല്യരഹിതമായ കോഡ്**:
+- ഒറ്റ പ്രവർത്തനങ്ങളുള്ള ഫംഗ്ഷനുകൾ എഴുതുക
+- വ്യാകരണപരവും വ്യക്തവുമായ വേരിയബിൾ, ഫംഗ്ഷൻ നാമങ്ങൾ ഉപയോഗിക്കുക
+- ഗെയിം ലോജിക്, നിബന്ധനകൾ വിശദീകരിക്കുന്ന കമന്റുകൾ ചേർക്കുക
+- കോഡ് ലാജിക്കൽ സെക്ഷനുകളായി ഓർഗനൈസ് ചെയ്യുക
+
+## സമർപ്പണ ആവശ്യകതകൾ
+
+### സമർപ്പിക്കേണ്ടവ
+
+1. **പൂർണ്ണ ഗെയിം ഫയലുകൾ**: ഗെയിം പ്രവർത്തിക്കാൻ ആവശ്യമായ എല്ലാ HTML, CSS, ജാവാസ്ക്രിപ്റ്റ് ഫയലുകളും
+2. **README.md**: വിശദീകരിക്കുന്ന ഡോക്ക്യുമെന്റേഷൻ:
+ - എങ്ങനെ ഗെയിം കളിക്കാം
+ - ഏത് അവസാന നിബന്ധനകൾ നടപ്പാക്കി
+ - പുനരാരംഭ നിർദ്ദേശങ്ങൾ
+ - പ്രത്യേക ഫീച്ചറുകളും മെക്കാനിക്കുകളും
+3. **കോഡ് കമന്റുകൾ**: നിങ്ങളുടെ ഗെയിം ലോജിക്, ആ算法ങ്ങൾ വ്യക്തമായി വിശദീകരിക്കുന്ന കമന്റുകൾ
+
+### പരീക്ഷണ പരിശോദന പട്ടിക
+
+സമർപ്പിച്ച ശേഷം, നിങ്ങളുടെ ഗെയിം പരിശോധിക്കുക:
+
+- [ ] ബ്രൗസർ കോൺസോളിൽ പിഴച്ചില്ലാതെ പ്രവർത്തിക്കുന്നുണ്ടോ
+- [ ] നിർദ്ദേശിച്ചപോലെ പല അവസാനം നിബന്ധനകളും നടപ്പിലാക്കിയിട്ടുണ്ടോ
+- [ ] ഗെയിം പുനരാരംഭം സുതാര്യമായി പ്രവർത്തിച്ചിട്ടുണ്ടോ
+- [ ] പ്ലെയർമാർക്ക് ഗെയിം നിലപാട് വ്യക്തമാക്കുന്ന പ്രതികരണം ലഭിക്കുന്നുണ്ടോ
+- [ ] ആധുനിക ജാവാസ്ക്രിപ്റ്റ് വാക്യസംരചനകളും മികച്ച പ്രവർത്തനരീതി പ്രയോഗിച്ചിട്ടുണ്ടോ
+- [ ] README.md ൽ സമഗ്രമായ ഡോക്ക്യുമെന്റേഷൻ ഉണ്ട്
+
+## വിലയിരുത്തൽ മാപകം
+
+| крИТЕРИЯ | ഉദാത്തമായ (4) | പ്രാവീണ്യമുള്ള (3) | വികസിപ്പിക്കുന്ന (2) | ആരംഭം (1) |
+|----------|----------------|-----------------|-----------------|--------------|
+| **ഗെയിം പ്രവര്ത്തനം** | അനേകം അവസാനം നിബന്ധനകളോടെ പൂർണ്ണ ഗെയിം, സുന്ദരമായ പുനരാരംഭം, മെച്ചപ്പെട്ട ഗെയിംപ്ലേ അനുഭവം | അടിസ്ഥാന അവസാന നിബന്ധനകളും പ്രവർത്തിക്കുന്ന പുനരാരംഭ സംവിധാനവും ഉള്ള പൂർണ്ണ ഗെയിം | ചില അവസാനം നിബന്ധനകൾ നടപ്പിലാക്കിയ ഭാഗിക ഗെയിം, പുനരാരംഭത്തിൽ ചെറിയ പ്രശ്നങ്ങൾ ഉണ്ടാകാം | പരിമിത പ്രവർത്തനക്ഷമതയുള്ള അപൂര്ണ്ണ ഗെയിം, സാരമായ പിശകുകൾ |
+| **കോഡ് ഗുണമേന്മ** | ആധുനിക ജാവാസ്ക്രിപ്റ്റ് പ്രയോഗിച്ച് ശുദ്ധവും ചിട്ടയുള്ള കോഡ്, സമഗ്ര കമന്റുകൾ, മികച്ച ഘടന | ആധുനിക സിന്തക്സും നല്ല കോഡ് സജ്ജീകരണവും ചേർന്ന നല്ല സ്റ്റൈൽ | ചില ആധുനിക രീതികളുള്ള അടിസ്ഥാന കോഡ്, കുറച്ച് കമന്റുകൾ | പഴയ സിന്തക്സും കോഡിലെയും ഘടനയിലും പിഴവുകൾ, കമന്റുകൾ ഇല്ലാതെ |
+| **ഉപയോക്തൃ അനുഭവം** | വ്യക്തതയുള്ള നിർദ്ദേശങ്ങളോടെ, മികച്ച പ്രതികരണവും ആകർഷകമായ അവസാനം/പുനരാരംഭം | മതിയായ നിർദ്ദേശങ്ങളും പ്രതികരണങ്ങളും ഉള്ള നല്ല ഗെയിംപ്ലേ | സൂക്ഷ്മ നിർദ്ദേശങ്ങളുമില്ല, ഗെയിം നിലപാട് സംബന്ധിച്ച കുറഞ്ഞ പ്രതികരണം | ആശയക്കുഴപ്പമുള്ള ഗെയിംപ്ലേ, അപ്രത്യാശിത ഉപയോക്തൃ പ്രതികരണം |
+| **സാങ്കേതിക നടപ്പിലാക്കൽ** | ഗെയിം വികസന സങ്കൽപ്പങ്ങളും ഇവന്റ് ഹാൻഡിലിംഗ്, സ്റ്റേറ്റ് മാനേജ്മെന്റ് എന്നിവയിൽ പൂർണമായ വിദഗ്ധത | ഗെയിം ആശയങ്ങളിൽ നല്ല ധാരണയോടെ ഊന്നിയ ഉൽപ്പാദനം | അടിസ്ഥാന ധാരണയും യോഗ്യമായ നടപ്പുകളും | പരിമിത ധാരണയോടെ വീഴ്ചയുള്ള ലളിത നടപ്പു |
+| **ഡോക്ക്യുമെന്റേഷൻ** | വ്യക്തവും സമഗ്രവുമായ README, മനസ്സിലാക്കാനാകുന്ന കോഡ്, കാര്യക്ഷമ പരിശോധനാ തെളിവുകൾ | വ്യക്തമായ നിർദ്ദേശങ്ങളുള്ള നല്ല ഡോക്ക്യുമെന്റേഷൻ | ലഘുവായ നിർദ്ദേശങ്ങളുള്ള അടിസ്ഥാന ഡോക്ക്യുമെന്റേഷൻ | ദയനീയമായ അല്ലെങ്കിൽ ഇല്ലാതിരുന്ന ഡോക്ക്യുമെന്റേഷൻ |
+
+### ഗ്രേഡിങ് സ്കെയിൽ
+- **ഉദാത്തമായ (16-20 പോയിന്റുകൾ)**: സ്രഷ്ടാവായ ഫീച്ചറുകളോടെ പ്രതീക്ഷകൾ ചാരിട്ടു മികവ് തെളിയിക്കൽ
+- **പ്രാവീണ്യമുള്ള (12-15 പോയിന്റുകൾ)**: എല്ലാ ആവശ്യകതകളും പൂരിപ്പിച്ച് സ്ഥിരതയുള്ള നടപ്പാക്കൽ
+- **വികസിപ്പിക്കുന്ന (8-11 പോയിന്റുകൾ)**: മിക്ക ആവശ്യകതകളും പൂരിപ്പിച്ചതുമായ ചെറിയ പ്രശ്നങ്ങളുള്ള
+- **ആരംഭം (4-7 പോയിന്റുകൾ)**: ചില ആവശ്യങ്ങൾ മാത്രമേ പൂർത്തിയാക്കു, ഏറെ മെച്ചപ്പെടുത്തൽ ആവശ്യമായത്
+
+## അധിക പഠന സാമഗ്രികൾ
+
+- [MDN ഗെയിം ഡെവലപ്പ്മെന്റ് ഗൈഡ്](https://developer.mozilla.org/en-US/docs/Games)
+- [JavaScript ഗെയിം ഡെവലപ്പ്മെന്റ് ട്യൂട്ടോറിയലുകൾ](https://developer.mozilla.org/en-US/docs/Games/Tutorials)
+- [Canvas API ഡോക്ക്യുമെന്റേഷൻ](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API)
+- [ഗെയിം ഡിസൈൻ പ്രിൻസിപ്പിൾസ്](https://www.gamasutra.com/blogs/)
+
+> 💡 **പ്രൊ ടിപ്പ്**: ലളിതമായി ആരംഭിച്ച് ഘടകങ്ങൾ ക്രമാനുസരണം കൂട്ടിച്ചേർക്കുക. പിഴവുകൾ ഇല്ലാത്ത നല്ല രീതിയിൽ പെയിന്റ് ചെയ്ത ലളിത ഗെയിം ഒരു സങ്കീർണ്ണ ഗെയിമിനെക്കാൾ മെച്ചമാണു!
+
+---
+
+
+**വ്യാഴിപ്പനം**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന എ.ഐ. തർജ്ജമ सेव ഉപയോഗിച്ച് തർജ്ജമ ചെയ്തതാണ്.ന്നാവശ്യത്തിൽ, ഞങ്ങൾ യഥാർത്ഥതയിലേക്ക് ശ്രമിക്കുന്നുവെങ്കിലും, ഓട്ടോമേറ്റഡ് തർജ്മയിൽ പിഴവുകൾ կամ അറിവുപിടിപ്പുകൾ ഉണ്ടായിരിക്കാം. ആരാധ്യമായ വിവരങ്ങൾക്കായി, പ്രൊഫഷണൽ മനുഷ്യ തർജ്മ നിർദ്ദേശിക്കപ്പെടുന്നു. ഈ തർജ്മയിൽ നിന്നുണ്ടാകുന്ന തെറ്റിദ്ധാരണകൾക്കും വ്യാഖ്യാനകേടുകൾക്കുമുള്ള ഉത്തരവാദിത്തം ഞങ്ങൾ ഏറ്റെടുക്കുന്നില്ല.
+മൂല രേഖ അതിന്റെ സ്വർണ്ണഭാഷയിലാണ് സുപ്രധാന സ്രീത്യം ആയി കണക്കാക്കപ്പെടുന്നതു.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/6-end-condition/solution/README.md b/translations/ml/6-space-game/6-end-condition/solution/README.md
new file mode 100644
index 000000000..f4386ff16
--- /dev/null
+++ b/translations/ml/6-space-game/6-end-condition/solution/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡറാണ്, മനസിലാക്കി ഫലവത്താക്കാൻ വെറുതെ ഒഴിഞ്ഞിട്ടുള്ളത്
+
+---
+
+
+**മായികുറിപ്പ്**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന AI വിവർത്തന സേവനം ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്കായി ശ്രമിച്ചിരിക്കുമ്പോഴും, സ്വയം പരീക്ഷിച്ച വിവർത്തനങ്ങളിൽ പിശകുകൾ ഉണ്ടായിരിക്കാം എന്നതിനുള്ള അറിവ് ആവശ്യമാണ്. പ്രাথমিক ഭാഷയിൽ ഉള്ള യഥാർത്ഥ രേഖ അവിശ്വസനീയമായ ഉറവിടമായി കണക്കാക്കപ്പെടണം. അത്യന്താപേക്ഷിതമായ വിവരങ്ങൾക്ക്, വിദഗ്ധ മനുഷ്യ വിവർത്തനം നിർദേശിക്കുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന യാതൊരു തെറ്റിദ്ധാരണയ്ക്കും അല്ലെങ്കിൽ വ്യാഖ്യാനക്കുറവിനും ഞങ്ങൾ ഉത്തരവാദിത്വം വഹിക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/6-end-condition/your-work/README.md b/translations/ml/6-space-game/6-end-condition/your-work/README.md
new file mode 100644
index 000000000..6d647ed25
--- /dev/null
+++ b/translations/ml/6-space-game/6-end-condition/your-work/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡറാണ്, ഉദ്ദേശപൂർവ്വം ഒഴിഞ്ഞവെച്ചു.
+
+---
+
+
+**വിവാദാരഹിത നിബന്ധനം**:
+ഈ രേഖ AI പരിഭാഷ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. ഞങ്ങൾ 정확തയ്ക്കായി ശ്രമിച്ചെങ്കിലും, സ്വയം നിയന്ത്രിത പരിഭാഷകളിൽ പിഴവുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. അസൽ രേഖ അതിന്റെ ജന്മഭാഷയിൽ ഒരു മാന്യമായ സ്രോതസ്സ് എന്ന നിലയിൽ പരിഗണിക്കപ്പെടേണ്ടതാണ്. പ്രധാനപ്പെട്ട വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മനുഷ്യ പരിഭാഷ ശിപാർശ ചെയ്യുന്നു. ഈ പരിഭാഷ ഉപയോഗിച്ച് ഉള്ള തെറ്റു രണ്ടാം അർത്ഥ വികസനങ്ങളോ തെറ്റായ മനഃപൂർവശാലीदോഷങ്ങളോ ഉണ്ടായാൽ ഞങ്ങൾ ബാധ്യതയുമായിരിക്കും എന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/README.md b/translations/ml/6-space-game/README.md
new file mode 100644
index 000000000..b9271f33e
--- /dev/null
+++ b/translations/ml/6-space-game/README.md
@@ -0,0 +1,47 @@
+
+# ഒരു സ്പേസ് ഗെയിം നിർമ്മിക്കുക
+
+വളരെ മുന്നേറ്റത്തിലുള്ള ജാവാസ്ക്രിപ്റ്റ് അടിസ്ഥാനങ്ങളെ പഠിപ്പിക്കാൻ ഒരു സ്പേസ് ഗെയിം
+
+ഈ പാഠത്തിൽ നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം സ്പേസ് ഗെയിം നിർമ്മിക്കാൻ പഠിക്കാം. നിങ്ങൾ "സ്പേസ് ഇൻവേഡേഴ്സ്" ഗെയിം കളിച്ചിട്ടുണ്ടെങ്കിൽ, ഈ ഗെയിമിനും ആ പഴയ ആശയമാണ്: ഒരു യാത്രാവാഹനം നിയന്ത്രിച്ച് മുകളിൽ നിന്നും ഇറങ്ങുന്ന മണ്ടന്മാരെ കുന്തിക്കൊണ്ടുപോകുക. പൂർത്തിയായ ഗെയിം ഇങ്ങനെ കാണപ്പെടും:
+
+
+
+ഈ ആറ് പാഠങ്ങളിൽ നിങ്ങൾ താഴെ പറയുന്നവ പഠിക്കും:
+
+- സ്ക്രീനിൽ ചിത്രങ്ങൾ വരയ്ക്കാൻ Canvas ഘടകവുമായി **ഇടപഴകുക**
+- കാർട്ടീഷ്യൻ കോർഡിനേറ്റ് സിസ്റ്റം **ബോധ്യപ്പെടുത്തുക**
+- പരിപാലനംക്കും വിപുലീകരിക്കാനും എളുപ്പമുള്ള ശബ്ദ ഗെയിം ഘടന സൃഷ്ടിക്കാൻ പബ്ലിഷ്-സബ്സ്ക്രൈബ് മാതൃക **പഠിക്കുക**
+- ഗെയിം വിഭവങ്ങൾ ലോഡ് ചെയ്യാൻ Async/Await **പ്രയോജനപ്പെടുത്തുക**
+- കീബോർഡ് ഇവന്റുകൾ ** കൈകാര്യം ചെയ്യുക**
+
+## അവലോകനം
+
+- സംവിധാനവും തിയറിയും
+ - [JavaScript ഉപയോഗിച്ച് ഗെയിമുകൾ നിർമ്മിക്കുന്നതിനുള്ള പരിചയം](1-introduction/README.md)
+- പ്രായോഗികം
+ - [Canvas-ലേക്ക് വരയ്ക്കൽ](2-drawing-to-canvas/README.md)
+ - [സ്ക്രീനിൽ ഘടകങ്ങൾ നീട്ടിക്കൊണ്ടിരിക്കുക](3-moving-elements-around/README.md)
+ - [ടक्कर കണ്ടെത്തൽ](4-collision-detection/README.md)
+ - [സ്കോർ സൂക്ഷിക്കൽ](5-keeping-score/README.md)
+ - [ഗെയിം അവസാനിപ്പിക്കൽും പുനരാരംഭവും](6-end-condition/README.md)
+
+## ക്രെഡിറ്റുകൾ
+
+ഇതിന് ഉപയോഗിച്ച അസറ്റുകൾ https://www.kenney.nl/ മുതലായവയിൽ നിന്നാണ്.
+നിങ്ങൾ ഗെയിം നിർമ്മിക്കുന്നതിൽ ആസ്വദിക്കുന്നുവെങ്കിൽ, ഇവ അതിസംവേദനാത്മകമായി നല്ല അസറ്റുകളാണ്, പലതും free ആണ്, ചിലത് paid ആണ്.
+
+---
+
+
+**അപരാഹ്നം**:
+ഈ രേഖ എഐ പരിഭാഷാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം കൃത്യതയ്ക്കായി ശ്രമിക്കുകയും ചെയ്താലും, സ്വയം പ്രവർത്തിക്കുന്ന വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ അസംവേദനസാധ്യതകൾ ഉണ്ടാകാൻ ഇടയുണ്ട് എന്നതിൽ ശ്രദ്ധിക്കുക. ഈ രേഖയുടെ ആദ്യഭാഷയിലുള്ള അതിന്റെ മേന്മയുള്ളത് ആയ പ്രമാണം ആബദ്ധമായ സൂത്രവാക്യമായിരിക്കണം. അത്യാവശ്യമുള്ള വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിനു് മൂലം ഉണ്ടാകുന്ന ഏത് തെറ്റിദ്ധാരണകൾക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/6-space-game/solution/README.md b/translations/ml/6-space-game/solution/README.md
new file mode 100644
index 000000000..a3cbe01ed
--- /dev/null
+++ b/translations/ml/6-space-game/solution/README.md
@@ -0,0 +1,17 @@
+
+ഇത് ഒരു പ്ലേസ്ഹോൾഡറാണ്, ഉദ്ദേശപൂർവ്വം ഒഴിക്തമാണ്
+
+---
+
+
+**അസാധുവാക്കൽ**:
+ഈ രേഖ [Co-op Translator](https://github.com/Azure/co-op-translator) എന്ന എഐ വിവർത്തന സേവനം ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം നിർവാഹിക്കുന്നതിനായി നിഷ്മയത്വം പാലിച്ചാലും, ഓട്ടോമേറ്റഡ് വിവർത്തനങ്ങളിൽ പിഴവുകളും വീഴ്ചകളും ഉണ്ടാകാം എന്ന തിരിച്ചറിയുക. പ്രഥമ ഭാഷയിലെ യഥാർഥ രേഖയാണ് വിശ്വസനീയമായ ഉറവിടം. നിർണ്ണായക വിവരങ്ങൾക്ക്, നിപുണ മനുഷ്യവിവർത്തനം നിർദ്ദേശിക്കുന്നു. ഈ വിവർത്തന ഉപയോഗത്തിൽ നിന്നുണ്ടാകാവുന്ന തെറ്റുപറച്ചിലുകൾക്കും തെറ്റായി വ്യാഖ്യാനിക്കുന്നതിനും ഞങ്ങൾ ഉത്തരവാദികളല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/7-bank-project/1-template-route/README.md b/translations/ml/7-bank-project/1-template-route/README.md
new file mode 100644
index 000000000..8f767553b
--- /dev/null
+++ b/translations/ml/7-bank-project/1-template-route/README.md
@@ -0,0 +1,832 @@
+
+# ബാങ്കിംഗ് ആപ്പ് നിർമ്മിക്കൽ ഭാഗം 1: വെബ് ആപ്ലിക്കേഷനിലെ HTML ടൈംപ്ലേറ്റുകളും റൂട്ടുകളും
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ബാങ്കിംഗ് ആപ്പ് വികസന യാത്ര
+ section SPA അടിസ്ഥാനങ്ങൾ
+ Single-page ആപ്പുകൾ മനസിലാക്കുക: 3: Student
+ ടെംപ്ലേറ്റ് ആശയങ്ങൾ പഠിക്കുക: 4: Student
+ DOM മാനിപ്പുലേഷൻ പകർന്നു വയ്ക്കുക: 4: Student
+ section റൗട്ടിംഗ് സിസ്റ്റങ്ങൾ
+ ക്ലയന്റ്-സൈഡ് റൗട്ടിംഗ് നടപ്പിലാക്കുക: 4: Student
+ ബ്രൗസർ ചരിത്രം കൈകാര്യം ചെയ്യുക: 5: Student
+ നാവിഗേഷൻ സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കുക: 5: Student
+ section പ്രൊഫഷണൽ പാറ്റേണുകൾ
+ മോഡ്യുലാർ ആർക്കിടെക്ചർ നിർമ്മിക്കുക: 5: Student
+ മികച്ച പ്രയോഗങ്ങൾ നടപ്പിലാക്കുക: 5: Student
+ ഉപയോക്തൃ അനുഭവങ്ങൾ സൃഷ്ടിക്കുക: 5: Student
+```
+1969-ൽ അപ്പോളോ 11-ന്റെ ഗൈഡൻസ് കമ്പ്യൂട്ടർ ചന്ദ്രനെ ലക്ഷ്യമിട്ട് നാവിഗേറ്റ് ചെയ്യുമ്പോൾ, സമഗ്ര സിസ്റ്റം പുനരാരംഭിക്കാതെ വിവിധ പ്രോഗ്രാമുകളിൽ മാറേണ്ടി വന്നു. ആധുനിക വെബ് ആപ്ലിക്കേഷനുകളും ഇതുപോലെയാണ് – നിങ്ങള് കാണുന്നതും പുനരാരോംഭിക്കാതെ മാറ്റുകയും ചെയ്യുന്നു. ഇത് ഉപയോക്താക്കൾ പ്രതീക്ഷിക്കുന്ന സുതാര്യവും പ്രതികരണക്ഷമവുമായ അനുഭവം സൃഷ്ടിക്കുന്നു.
+
+പരമ്പരാഗത വെബ്സൈറ്റുകളിൽ ഓരോ ഇടപെടലിനും മുഴുവൻ പേജ് പുനഃലോഡ് ചെയ്യുന്നതിന് പകരം, ആധുനിക വെബ് ആപ്ലിക്കേഷനുകൾ മാറ്റം ആവശ്യമുള്ള ഭാഗങ്ങൾ മാത്രമെ അപ്ഡേറ്റ് ചെയ്യൂ. മിഷൻ കൺട്രോൾ വിവിധ ഡിസ്പ്ലേകൾ തമ്മിൽ മാറുമ്പോൾ തുടർച്ചയായ കമ്മ്യൂണിക്കേഷൻ നിലനിർത്തുന്ന രീതിയിൽ, ഇത് ഒരുവട്ടയും സുതാര്യവും വേഗമേറിയ അനുഭവം ഒരുക്കുന്നു.
+
+ഈ വ്യത്യാസം നിർണായകം ആകുന്നത് ഇതാണ്:
+
+| പരമ്പരാഗത മൾട്ടി-പേജ് ആപ്ലിക്കേഷനുകൾ | ആധുനിക സിംഗിൾ-പേജ് ആപ്ലിക്കേഷനുകൾ |
+|----------------------------|-------------------------|
+| **നാവിഗേഷൻ** | ഓരോ സ്ക്രീൻ മുറുക്കി മുഴുവൻ പേജ് പുനഃലോഡ് ചെയ്യുന്നു | ഉടൻ ഉള്ളടക്കം മാറ്റം |
+| **പ്രകടനം** | സമ്പൂർണ്ണ HTML ഡൗൺലോഡ് കാരണം മന്ദം | ഭാഗിക അപ്ഡേറ്റ് കാരണം വേഗം |
+| **ഉപയോക്തൃ അനുഭവം** | പേജ് കത്തി മാറ്റങ്ങള് | സുതാര്യവും ആപ്പ് പോലുള്ള ട്രാൻസിഷനുകൾ |
+| **ഡാറ്റ പങ്കിടൽ** | പേജുകളിൽ കഠിനം | ലളിതമായ സ്റ്റേറ്റ് മാനേജ്മെന്റ് |
+| **ഡെവലപ്പ്മെന്റ്** | നിരവധി HTML ഫയലുകൾ നിയന്ത്രിക്കേണ്ടത് | ഡൈനാമിക് ടൈംപ്ലേറ്റുകളോടെ ഏകദേശം HTML |
+
+**ഭവന തകർക്കൽ മനസ്സിലാക്കൽ:**
+- **പരമ്പരാഗത ആപ്ലിക്കേഷനുകൾ** ഓരോ നാവിഗേഷനും സേർവറുമായി ഒരു അഭ്യർത്ഥന ആവശ്യപ്പെടുന്നു
+- **ആധുനിക SPAs** ഒരിക്കൽ ലോഡ് ചെയ്ത് ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ഉള്ളടക്കം ഡൈനാമിക് ആയി അപ്ഡേറ്റ് ചെയ്യുന്നു
+- **ഉപയോക്തൃ പ്രതീക്ഷകൾ** ഇപ്പോൾ ഉടന് സുതാര്യ ഇടപെടലുകളിലേക്ക് മാറിയിട്ടുണ്ട്
+- **പ്രകടന ലാഭം** ബാന്റ്വിഡ്ത് കുറഞ്ഞു വേഗത കൂടുന്നു
+
+ഈ പാഠത്തിൽ, പല സ്ക്രീനുകളുള്ള ഒരു ബാങ്കിംഗ് ആപ്പ് കെട്ടിയെടുക്കും, ഒന്നിലേറെ സ്ക്രീനുകൾ സഹായത്തോടെ സഹപ്രവഹനം സൃഷ്ടിക്കും. ശാസ്ത്രജ്ഞർ വിവിധ പരീക്ഷണങ്ങൾക്ക് പുനരഗ്ഗഠിക്കാവുന്ന ഘടകങ്ങൾ ഉപയോഗിക്കുന്നതുപോലെ, HTML ടൈംപ്ലേറ്റുകളെ പുനരുപയോഗ ശേഷിയുള്ള ഘടകങ്ങളായി ഉപയോഗിക്കും.
+
+നിങ്ങൾ HTML ടൈംപ്ലേറ്റുകളുമായി (വ്യത്യസ്ത സ്ക്രീനുകളിലെ പുനരുപയോഗ ബ്ലൂപ്രിന്റുകൾ), ജാവാസ്ക്രിപ്റ്റ് റൂട്ടിംഗ് (സ്ക്രീനുകൾ തമ്മിൽ മാറുന്ന സംവിധാനം) ഇങ്ങനെ പ്രവർത്തിക്കും; ബ്രൗസറിന്റെ ഹിസ്റ്ററി API (പിന്നോട്ട് ബട്ടൺ പ്രതീക്ഷിച്ചതുപോലെ പ്രവർത്തിക്കുന്നു) എന്നിവയുമായി പ്രവർത്തിക്കും. ഇങ്ങനെ പ്രവർത്തിക്കുന്നത് React, Vue, Angular പോലുള്ള ഫ്രെയിംവർക്ക് മാദ്ധ്യമങ്ങളുടേതും ആണ്.
+
+അവസാനിക്കുമ്പോൾ, താങ്കൾക്ക് പ്രൊഫഷണൽ സിംഗിൾ-പേജ് ആപ്ലിക്കേഷൻ സംവിധാനങ്ങൾ പ്രദർശിപ്പിക്കുന്ന ഒരു പ്രവർത്തിക്കുന്ന ബാങ്കിംഗ് ആപ്പ് ഉണ്ടാകും.
+
+```mermaid
+mindmap
+ root((ഒറ്റ-പേജ് ആപ്ലിക്കേഷനുകൾ))
+ Architecture
+ Template System
+ Client-side Routing
+ State Management
+ Event Handling
+ Templates
+ പുനഃഉപയോഗയോഗ്യമായ ഘടകങ്ങൾ
+ গতിസ്ില യുഗ്മം
+ DOM മാനിപ്പുലേഷൻ
+ ഉള്ളടക്കം മാറിവരവ്
+ Routing
+ URL മാനേജ്മെന്റ്
+ ചരിത്ര API
+ നാവിഗേഷൻ ലൊജിക്
+ ബ്രൗസർ ഇന്റഗ്രേഷൻ
+ User Experience
+ വേഗതയുള്ള നാവിഗേഷൻ
+ സ്മൂത്ത് ട്രാൻസിഷനുകൾ
+ സ്ഥിരമായ അവസ്ഥ
+ ആധുനിക ഇന്ററാക്ഷനുകൾ
+ Performance
+ കുറവായ സെർവർ അഭ്യർത്ഥനകൾ
+ വേഗതയുള്ള പേജ് ട്രാൻസിഷനുകൾ
+ കാര്യക്ഷമമായ സ്രോതസം ഉപയോഗം
+ മെച്ചപ്പെട്ട പ്രതികരണശേഷി
+```
+## പ്രീ-ലെക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/41)
+
+### നിങ്ങള്ക്കു വേണ്ടത് എന്ത്
+
+നമ്മുടെ ബാങ്കിംഗ് ആപ്പ് പരീക്ഷിക്കാൻ ഒരു ലോക്കൽ വെബ് സെർവർ ആവശ്യമാണ് – അത്രയെങ്കിലും ഭയപ്പെടേണ്ടതില്ല! നിങ്ങൾക്കു മുൻപ് സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, വെറും [Node.js](https://nodejs.org) ഇൻസ്റ്റാൾ ചെയ്ത് `npx lite-server` നിങ്ങളുടെയുള്ളോയുള്ള പ്രോജക്ട് ഫോൾഡറിൽ നിന്ന് പ്രവർത്തിപ്പിക്കൂ. ഈ കമാൻഡ് ഒരു ലോക്കൽ സെർവർ സ്റ്റാർട്ട് ചെയ്ത് ബ്രൗസറിൽ സ്വയം നിങ്ങളുടെ ആപ്പ് തുറക്കും.
+
+### തയ്യാറെടുപ്പ്
+
+നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ `bank` എന്ന ഫോൾഡർ സൃഷ്ടിച്ച് അതിന്റെ ഉള്ളിൽ `index.html` എന്ന ഫയൽ ഉണ്ടാക്കിയെടുക്കുക. നമുക്ക് ഈ HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code) ഉപയോഗിച്ച് ആരംഭിക്കാം:
+
+```html
+
+
+
+
+
+ Bank App
+
+
+
+
+
+```
+
+**ഈ ബോയിലർപ്ലേറ്റ് നിങ്ങൾക്ക് നൽകുന്നത്:**
+- **HTML5 ഡോക്യുമെന്റ് ഘടന** ശരിയായ DOCTYPE പ്രഖ്യാപനത്തോടുകൂടെ സ്ഥാപിക്കുന്നു
+- **ചരിത്രം എൻകോഡിംഗ്** UTF-8 ആയി ക്രമീകരിക്കുന്നു, രാജ്യാന്തര ടെക്സ്റ്റിനെ പിന്തുണയ്ക്കാൻ
+- **വിഭവത്തോടു ചേർന്ന് റിസ്പോൺസീവ് ഡിസൈൻ** viewport മെറ്റാ ടാഗ് ഉപയോഗിച്ച് ആക്ടിവേറ്റ് ചെയ്യുന്നു
+- **ബ്രൗസർ ടാബിൽ കാണിക്കുന്ന** വിവരണാത്മകമായ തലക്കെട്ട് സജ്ജമാക്കുന്നു
+- **ആപ്ലിക്കേഷനു വേണ്ടി ശുദ്ധമായ ബോഡി സെക്ഷൻ** സൃഷ്ടിക്കുന്നു
+
+> 📁 **പ്രോജക്റ്റ് ഘടനാരൂപരേഖ**
+>
+> **ഈ പാഠത്തിന്റെ അവസാനം, നിങ്ങളുടെ പ്രോജക്റ്റിൽ ഉണ്ടാകുന്നത്:**
+> ```
+> bank/
+> ├── index.html
+> ├── app.js
+> └── style.css
+> ```
+>
+> **ഫയൽ ഉത്തരവാദിത്വങ്ങൾ:**
+> - **index.html**: എല്ലാ ടൈംപ്ലേറ്റുകളും ആപ്പ് ഘടനയുമടങ്ങുന്നു
+> - **app.js**: റൂട്ടിംഗ്, നാവിഗേഷൻ, ടൈംപ്ലേറ്റ് മാനേജ്മെന്റ് കൈകാര്യം ചെയ്യുന്നു
+> - **Templates**: ലോഗിൻ, ഡാഷ്ബോർഡ്, മറ്റ് സ്ക്രീനുകളുടെ UI നിർവചിക്കുന്നു
+
+---
+
+## HTML Templates
+
+ടൈംപ്ലേറ്റുകൾ വെബ് ഡവലപ്പ്മെന്റിലെ ഒരു അസാമാന്യ പ്രശ്നം പരിഹരിക്കുന്നു. 1440 കളിൽ ഗൂട്ടൻബർഗ് മൂവബിള് ടൈപ്പ് പ്രിന്റിംഗ് കണ്ടുപിടിച്ചപ്പോൾ, പൂർണ്ണ പേജുകൾ ശില്പം ചെയ്യാതെ പുനരുപയോഗയോഗ്യമായ അക്ഷര ബ്ലോക്കുകൾ സൃഷ്ടിച്ച് ആവശ്യത്താലും ക്രമീകരിക്കാമെന്ന് കണ്ടെത്തി. HTML ടൈംപ്ലേറ്റ് അതേ സിദ്ധാന്തത്തിലാണ് – ഓരോ സ്ക്രീനും വേറിട്ട HTML ഫയലുകൾ തയ്യാറാക്കുന്നതിന് പകരം, പുനരുപയോഗയോഗ്യമായ ഘടനകൾ നിർവചിച്ച് അവ ആവശ്യപ്പെട്ടപ്പൊഴാണ് പ്രദർശിപ്പിക്കുന്നത്.
+
+```mermaid
+flowchart TD
+ A["📋 ടെംപ്ലേറ്റ് നിർവചനo"] --> B["💬 DOMൽ മറച്ചുവെച്ചിരിക്കുന്നു"]
+ B --> C["🔍 ജാവാസ്ക്രിപ്റ്റ് ടെംപ്ലേറ്റ് കണ്ടെത്തുന്നു"]
+ C --> D["📋 ടെംപ്ലേറ്റ് ഉള്ളടക്കം ക്ലോൺ ചെയ്യുക"]
+ D --> E["🔗 দৃശ്യമായ DOM-ലേക്ക് ബന്ധിപ്പിക്കുക"]
+ E --> F["👁️ ഉപയോക്താവ് ഉള്ളടക്കം കാണുന്നു"]
+
+ G["ലോഗിൻ ടെംപ്ലേറ്റ്"] --> A
+ H["ഡാഷ്ബോർഡ് ടെംപ്ലേറ്റ്"] --> A
+ I["ഭാവി ടെംപ്ലേറ്റുകൾ"] --> A
+
+ style A fill:#e3f2fd
+ style D fill:#e8f5e8
+ style F fill:#fff3e0
+ style B fill:#f3e5f5
+```
+ടൈംപ്ലേറ്റുകൾ നിങ്ങളുടെ ആപ്പിന്റെ വ്യത്യസ്ത ഭാഗങ്ങളിലേക്കുള്ള ബ്ലൂപ്രിന്റുകളായി വിചാരിക്കുക. ഒരു архитക്ട് ഒരേ ബ്ലൂപ്രിന്റ് പല തവണ ഉപയോഗിച്ച് ഒരേ തരത്തിലുള്ള മുറികൾ വീണ്ടും വരയ്ക്കാതിരിക്കാൻ ചെയ്യുന്നതുപോലെ, നാം ടൈംപ്ലേറ്റുകൾ ഒറ്റ തവണ സൃഷ്ടിച്ച് ആവശ്യമായി വന്നപ്പോഴാകും അത് ഉപയോഗിക്കുന്നത്. ജാവാസ്ക്രിപ്റ്റ് പ്രവർത്തിപ്പിക്കുന്നതുവരെ ബ്രൗസർ ഈ ടൈംപ്ലേറ്റുകൾ മറച്ചുവയ്ക്കുന്നു.
+
+ഒരു വെബ് പേജിന് നിരവധി സ്ക്രീനുകൾ സൃഷ്ടിക്കാൻ നിങ്ങള് ഒരു ഒറ്റ HTML ഫയൽ ഓരോ സ്ക്രീനിനും സൃഷ്ടിക്കാമെന്നതാണ് ഒരു പരിഹാരമെന്ന് വിചാരിക്കാം. എന്നാൽ, ഇത് ചില അസൗകര്യങ്ങളുണ്ടാക്കുന്നു:
+
+- സ്ക്രീൻ മാരുന്നതിന് മുഴുവൻ HTML പുനഃലോഡ് ചെയ്യേണ്ടി വരും, അതത് സമയം മാനസികത്തിൽ പതിയില്ല.
+- വ്യത്യസ്ത സ്ക്രീനുകൾക്കിടയിലെ ഡേറ്റ പങ്കുവെയ്ക്കുക ബുദ്ധിമുട്ടാണ്.
+
+മറ്റ് മാർഗമാണ് `` എന്ന എലമെന്റ് ഉപയോഗിച്ച് ഒറ്റ HTML ഫയലിൽ നിരവധി [HTML ടൈംപ്ലേറ്റുകൾ](https://developer.mozilla.org/docs/Web/HTML/Element/template) നിർവചിക്കുക. ടൈംപ്ലേറ്റ് ബ്രൗസർ പ്രദർശിപ്പിക്കാത്ത പുനരുപയോഗയോഗ്യമായ HTML ബ്ലോക്ക് ആണ്, അത് ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് റൺടൈമിൽ സൃഷ്ടിക്കപ്പെടേണ്ടതാണ്.
+
+### നമുക്ക് ഇത് നിർമ്മിക്കാം
+
+ഓരു ബാങ്ക് ആപ്പ് രണ്ടു പ്രധാന സ്ക്രീനുകൾക്കായി നിർമ്മിക്കാനാണ് നാം പോകുന്നത്: ലോഗിൻ പേജ് এবং ഡാഷ്ബോർഡ്. ആദ്യം, HTML ബോഡി-യിൽ ഒരു Placeholder ഘടകം ചേർക്കാം – ഇവിടെ നമ്മുടെ വിവിധ സ്ക്രീനുകൾ പ്രദർശിപ്പിക്കപ്പെടും:
+
+```html
+Loading...
+```
+
+**ഈ Placeholder മനസ്സിലാക്കാം:**
+- **"app" എന്ന ഐഡിയുള്ള ഒരു കണ്ടെയ്നർ സൃഷ്ടിക്കുന്നു, എല്ലാ സ്ക്രീനുകളും ഇവിടെ പ്രദർശിപ്പിക്കും**
+- **ജാവാസ്ക്രിപ്റ്റ് ആദ്യ സ്ക്രീൻ പ്രവർത്തിപ്പിക്കാൻ തയ്യാറാകുന്നത് വരെ ലോഡിംഗ് സന്ദേശം കാണിക്കുന്നു**
+- **ഡൈനാമിക് ഉള്ളടക്കത്തിന് ഏക വിസ്ഫോടക പോയിന്റ് ഒരുക്കുന്നു**
+- **`document.getElementById()` ഉപയോഗിച്ച് സൗകര്യമായി ലക്ഷ്യമിടാൻ സാധിക്കും**
+
+> 💡 **പ്രൊ ടിപ്പ്**: ഈ എലമെന്റിന്റെ ഉള്ളടക്കം മാറ്റപ്പെടും അതിനാൽ ആപ്പ് ലോഡ് ആകുന്നത് വരെ കാണിക്കാൻ ഒരു ലോഡിംഗ് സന്ദേശമോ സൂചകമോ ഇട്ടുകൂടാം.
+
+ഇതിനുശേഷം HTML ടൈംപ്ലേറ്റിൽ ലോഗിൻ പേജിനായി ഒരു ടൈംപ്ലേറ്റ് ചേർക്കാം. ഇപ്പോൾ തലക്കെട്ട് മാത്രം ഉണ്ട്, അതുപോലെ നാം നാവിഗേഷൻ നടത്താനായി ഒരു ലിങ്ക് ഉൾപ്പെടുത്തിയ ഒരു സെക്ഷൻ ചേർക്കും.
+
+```html
+
+ Bank App
+
+
+```
+
+**ലോഗിൻ ടൈംപ്ലേറ്റ് വിശകലനം:**
+- **ജാവാസ്ക്രിപ്റ്റ് ടാർഗറ്റിംഗിനായി "login" എന്ന യുണീക്ക് ഐഡിയുള്ള ടൈംപ്ലേറ്റ് നിർവചിക്കുന്നു**
+- **ആപ്പിന്റെ ബ്രാൻഡിംഗ് സ്ഥാപിക്കുന്ന പ്രധാന തലക്കെട്ട് ഉൾക്കൊള്ളുന്നു**
+- **ബന്ധപ്പെട്ട ഉള്ളടക്കം ഗ്രൂപ്പ് ചെയ്യാൻ ഒരു സെമാന്റിക് `` ഉപയോഗിക്കുന്നു**
+- **ഉപയോക്താക്കളെ ഡാഷ്ബോർഡിലേക്ക് റൂട്ടുചെയ്യാൻ നാവിഗേഷൻ ലിങ്ക് നൽകുന്നു**
+
+പിന്നീട് ഡാഷ്ബോർഡ് പേജിന്റെ മറ്റൊരു HTML ടൈംപ്ലേറ്റും ചേർക്കാം. ഈ പേജ് വിവിധ സെക്ഷനുകൾ അടങ്ങിയിരിക്കും:
+
+- തലക്കെട്ട്, ഒരു തലക്കെട്ടും ലോഗൗട്ട് ലിങ്കും ഉള്ള ഹെഡർ
+- ബാങ്ക് അക്കൗണ്ടിന്റെ നിലവിലെ ബാലൻസ്
+- ഇടപാടുകളുടെ പട്ടിക, ഒരു പട്ടികയിൽ പ്രദർശിപ്പിക്കുക
+
+```html
+
+
+
+
+ Transactions
+
+
+
+ Date
+ Object
+ Amount
+
+
+
+
+
+
+```
+
+**ഡാഷ്ബോർഡിന്റെ ഓരോ ഭാഗവും മനസ്സിലാക്കാം:**
+- **സെമാന്റിക് `` ഉൾക്കൊള്ളുന്ന പേജ് ഘടന സൃഷ്ടിക്കുന്നു, നാവിഗേഷൻ ഉൾപ്പെടെ**
+- **സ്ക്രീനുകളിൽ ബ്രാൻഡിങ്ങിനായി ആപ്പ് തലക്കെട്ട് സ്ഥിരമായി പ്രദർശിപ്പിക്കുന്നു**
+- **ലോഗൗട്ട് ലിങ്ക് വഴി ലോഗിൻ സ്ക്രീനിലേക്ക് റൂട്ടുചെയ്യുന്നു**
+- **നിലവിലെ അക്കൗണ്ട് ബാലൻസ് വിന്യാസ സെക്ഷനിൽ കാണിക്കുന്നു**
+- **വ്യവസായപ്പെട്ട HTML പട്ടികയിൽ ഇടപാട് ഡാറ്റ സംഘടിപ്പിക്കുന്നു**
+- **തിയതി, объект്, തുകയുള്ള പട്ടിക തലക്കെട്ടുകൾ നിർവചിക്കുന്നു**
+- **ഡൈനാമിക് ഉള്ളടക്കത്തിനായി പട്ടിക ശരീരം ശൂന്യമായി bırakുന്നു**
+
+> 💡 **പ്രൊ ടിപ്പ്**: HTML ടൈംപ്ലേറ്റുകൾ കാണാൻ ആഗ്രഹിക്കുന്നത് കാണാനായി `` എലമെന്റുകളുടെ ആറ് തലകുറighton `` ഉപയോഗിച്ച് കമന്റ് ചെയ്താൽ ദൃശ്യത്തിൽ കാണാം.
+
+### 🔄 **വിദ്യാഭ്യാസ പരിശോധന**
+**ടൈംപ്ലേറ്റ് സിസ്റ്റം മനസ്സിലാക്കുക**: ജാവാസ്ക്രിപ്റ്റ് നടപ്പിലാക്കുന്നതിന് മുമ്പ് ഇത് മനസ്സിലാക്കുക:
+- ✅ ടൈംപ്ലേറ്റുകൾ സാധാരണ HTML ഘടകങ്ങളിൽ നിന്ന് എങ്ങനെ വ്യത്യസ്തമാണെന്ന്
+- ✅ ടൈംപ്ലേറ്റുകൾ ജാവാസ്ക്രിപ്റ്റ് പ്രവർത്തിപ്പിക്കാൻ മുമ്പ് മറഞ്ഞതായി ഉണ്ടാകുന്നത്
+- ✅ ടൈംപ്ലേറ്റുകളുടെ സെമാന്റിക് HTML ഘടനയുടെ പ്രാധാന്യം
+- ✅ ടൈംപ്ലേറ്റുകൾ പുനരുപയോഗ UI ഘടകങ്ങൾ എങ്ങനെ സജ്ജീകരിക്കുന്നു
+
+**ത്വരിത സ്വയംപരിശോധന**: നിങ്ങളുടെ HTML-നു ചുറ്റുപാടുകളിൽ `` ടാഗുകൾ നീക്കം ചെയ്യുകയാണെങ്കിൽ എന്ത് സംഭവിക്കും?
+*ഉത്തരം: ഉള്ളടക്കം ഉടൻ കാണിക്കപ്പെടും, ടൈംപ്ലേറ്റ് ഫംഗ്ഷനാലിറ്റി നഷ്ടപ്പെടും*
+
+**ആർക്കിടെക്ചർ ലാഭം**: ടൈംപ്ലീറ്റുകൾ നൽകുന്നത്:
+- **പുനരുപയോഗം**: ഒറ്റ നിർവചനത്തിൽ നിരവധി ഉദാഹരണങ്ങൾ
+- **പ്രകടനം**: അനാവശ്യ HTML പാഴ്വവിലാസം ഇല്ലാതെ
+- **പരിപാലനം**: കേന്ദ്രീകൃത UI ഘടന
+- **സ്വകാര്യത**: ഡൈനാമിക് ഉള്ളടക്ക മാറ്റം
+
+✅ ടൈംപ്ലേറ്റുകളിൽ എന്ത് കൊണ്ട് `id` ഇവന്റുകൾ ഉപയോഗിക്കുന്നത് നിങ്ങൾക്ക് തോന്നുന്നു? ക്ലാസുകൾ പോലുള്ള മറ്റ് രീതികൾ ഉപയോഗിക്കാമോ?
+
+## ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് ടൈംപ്ലേറ്റുകൾ സജീവമാക്കുക
+
+ഇപ്പോൾ നമുക്ക് ടൈംപ്ലേറ്റുകൾ പ്രവർത്തനക്ഷമമാക്കാം. 3D പ്രിന്റർ ഒരു ഡിജിറ്റൽ ബ്ലൂപ്രിന്റ് എടുത്ത് ഭൗതിക വസ്തുവാക്കുന്നതുപോലെ, ജാവാസ്ക്രിപ്റ്റ് ഞങ്ങളുടെ മറഞ്ഞിരിക്കുന്ന ടൈംപ്ലേറ്റുകൾ എടുത്ത് ദൃശ്യമായ, ഇടപഴകാവുന്ന ഘടകങ്ങളാക്കി മാറ്റുന്നു.
+
+ഈ പ്രക്രിയ ആധുനിക വെബ് ഡവലപ്പ്മെന്റിന്റെ അടിസ്ഥാനമായ മൂന്ന് സ്ഥിരമായ ഘട്ടങ്ങളാൽ നടക്കുന്നു. ഈ രീതി മനസ്സിലാക്കുമ്പോൾ, നിങ്ങൾ വ്യത്യസ്ത ഫ്രെയിംവർക്കുകളിലും ലൈബ്രറികളിലും ഇതു കാണും.
+
+നിങ്ങളുടെ നിലവിലെ HTML ഫയൽ ബ്രൗസറിൽ പരീക്ഷിച്ചാൽ, അത് `Loading...` എന്ന സ്റ്റാറ്റിക് സന്ദേശത്തിൽ കുടുങ്ങിയതായി തോന്നും. കാരണം ജാവാസ്ക്രിപ്റ്റ് കോഡ് ചേർത്തുള്ള ടൈംപ്ലേറ്റുകൾ പ്രദർശിപ്പിക്കാൻ അതുപോലെ ഇല്ലെന്നതാണ്.
+
+ടൈംപ്ലേറ്റ് ഇൻസ്റ്റാൻഷ്യേറ്റ് ചെയ്യുന്നത് സാധാരണയായി മൂന്ന് ഘട്ടങ്ങളിലാകും:
+
+1. DOM-ൽ ടൈംപ്ലേറ്റ് എലമെന്റ് കണ്ടെത്തുക, ഉദാഹരണത്തിന് [`document.getElementById`](https://developer.mozilla.org/docs/Web/API/Document/getElementById) ഉപയോഗിച്ച്.
+2. ടൈംപ്ലേറ്റ് എലമെന്റ് ക്ലോൺ ചെയ്യുക, [`cloneNode`](https://developer.mozilla.org/docs/Web/API/Node/cloneNode) ഉപയോഗിച്ച്.
+3. ദൃശ്യമാകുന്ന എലമെന്റിൽ (DOM-ൽ) ചേർക്കുക, ഉദാഹരണത്തിന് [`appendChild`](https://developer.mozilla.org/docs/Web/API/Node/appendChild) ഉപയോഗിച്ച്.
+
+```mermaid
+flowchart TD
+ A[🔍 ഘട്ടം 1: ടെംപ്ലേറ്റ് കണ്ടെത്തുക] --> B[📋 ഘട്ടം 2: ടെംപ്ലേറ്റ് ക്ലോൺ ചെയ്യുക]
+ B --> C[🔗 ഘട്ടം 3: DOM-ലേക്ക് ചേർക്കുക]
+
+ A1["document.getElementById('login')"] --> A
+ B1["template.content.cloneNode(true)"] --> B
+ C1["app.appendChild(view)"] --> C
+
+ C --> D[👁️ ഉപയോക്താവിന് ടെംപ്ലേറ്റ് görün प्रमाणികരം]
+
+ style A fill:#e1f5fe
+ style B fill:#f3e5f5
+ style C fill:#e8f5e8
+ style D fill:#fff3e0
+```
+**പ്രക്രിയയുടെ ദൃശ്യ വിശദീകരണം:**
+- **ഘട്ടം 1** മറഞ്ഞിരിക്കുന്ന ടൈംപ്ലേറ്റ് DOM ഘടനയിൽ കണ്ടെത്തുന്നു
+- **ഘട്ടം 2** സുരക്ഷിതമായി മാറ്റാൻ കഴിയും എന്ന പ്രവർത്തനക്ഷമ കോപ്പി സൃഷ്ടിക്കുന്നു
+- **ഘട്ടം 3** കോപ്പി ദൃശ്യമായ പേജ് മേഖലയിലേക്ക് ചേർക്കുന്നു
+- **ഫലം** ഉപയോക്താക്കൾക്ക് ഇടപഴകാവുന്ന പ്രവർത്തനക്ഷമ സ്ക്രീൻ
+
+✅ ടൈംപ്ലേറ്റ് DOM-ൽ ചേർക്കുന്നതിന് മുൻപ് ക്ലോൺ ചെയ്യേണ്ടത് എന്തുകൊണ്ടാണ്? ഈ ഘട്ടം ഒഴിവാക്കി എങ്കിൽ എന്ത് സംഭവിക്കുമെന്നാണ് നിങ്ങൾക്ക് തോന്നുന്നത്?
+
+### പ്രവർത്തി
+
+നിങ്ങളുടെ പ്രോജക്ട് ഫോൾഡറിൽ ഒരു പുതിയ ഫയൽ `app.js` സൃഷ്ടിച്ച് അത് `` സെക്ഷനിൽ ഇറക്കുമതി ചെയ്യുക:
+
+```html
+
+```
+
+**ഈ സ്ക്രിപ്റ്റ് ഇറക്കുമതിയുടെ അർത്ഥം:**
+- **ജാവാസ്ക്രിപ്റ്റ് ഫയൽ HTML ഡോക്യുമെന്റുമായി ലിങ്ക് ചെയ്യുന്നു**
+- **`defer` ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് HTML പാഴ്സ് ചെയ്യൽ പൂർത്തിയാകുമ്പോൾ മാത്രമേ സ്ക്രിപ്റ്റ് ഓടൂ**
+- **DOM മുഴുവൻ ലോഡ് ചെയ്യപ്പെട്ടതിനാൽ എല്ലാ എലമെന്റുകളിലേയും ആക്സസ് ലഭ്യമാണ്**
+- **സ്ക്രിപ്റ്റ് ലോഡിംഗിന്റെയും പ്രകടനത്തിന്റെയും ആധുനിക ചിട്ടി പാലിക്കുന്നു**
+
+ഇപ്പോൾ `app.js`ൽ, പുതിയ ഫംഗ്ഷൻ `updateRoute` സൃഷ്ടിക്കും:
+
+```js
+function updateRoute(templateId) {
+ const template = document.getElementById(templateId);
+ const view = template.content.cloneNode(true);
+ const app = document.getElementById('app');
+ app.innerHTML = '';
+ app.appendChild(view);
+}
+```
+
+**ഈ ഘട്ടങ്ങളുടെ വിശദീകരണം:**
+- **ടൈംപ്ലേറ്റ് എലമെന്റ് അതിന്റെ ഐഡി ഉപയോഗിച്ച് കണ്ടെത്തുന്നു**
+- **`cloneNode(true)` ഉപയോഗിച്ച് ടൈംപ്ലേറ്റിന്റെ ഉള്ളടക്കം ആഴത്തിലുള്ള കോപ്പിയാക്കുന്നു**
+- **ഉള്ളടക്കം പ്രദർശിപ്പിക്കാനുള്ള ആപ് കണ്ടെയ്നർ കണ്ടെത്തുന്നു**
+- **ആപ് കണ്ടെയ്നറിൽ നിലവിലുള്ള ഉള്ളടക്കം മുഖത്ത് നീക്കം ചെയ്യുന്നു**
+- **ക്ലോൺ ചെയ്ത ടൈംപ്ലേറ്റ് ഉള്ളടക്കം DOM-ൽ സജ്ജമാക്കുന്നു**
+
+ഇപ്പോൾ ഈ ഫംഗ്ഷൻ ഒരു ടൈംപ്ലേറ്റ് ഐഡി ഉപയോഗിച്ച് വിളിച്ചു ഫലം നോക്കാം.
+
+```js
+updateRoute('login');
+```
+
+**ഈ ഫംഗ്ഷൻ വിളിയുടെ ലാഭം:**
+- **ലോഗിൻ ടൈംപ്ലേറ്റ് ഐഡി നൽകി സജീവമാക്കുന്നു**
+- **വ്യത്യസ്ത ആപ്പ് സ്ക്രീനുകൾക്കിടയിൽ പ്രോഗ്രാമാറ്റിക് മാറൽ കാണിക്കുന്നു**
+- **"Loading..." സന്ദേശത്തിന് പകരം ലോഗിൻ സ്ക്രീൻ പ്രദർശിപ്പിക്കുന്നു**
+
+✅ ഈ കോഡ് `app.innerHTML = '';` യുടെ ഉദ്ദേശം എന്താണ്? അതിന്റെ അഭാവത്തിൽ എന്ത് സംഭവിക്കും?
+
+## റൂട്ടുകൾ സൃഷ്ടിക്കൽ
+
+Routing എന്നത് URL-നെ ശരിയായ ഉള്ളടക്കത്തിലേക്ക് ബന്ധിപ്പിക്കുന്നതിന് വേണ്ടിയാണ്. മുന്കാല ഫോൺ ഓപ്പറേറ്റർമാർ സ്വിച്ച്ബോർഡുകൾ ഉപയോഗിച്ചു കോളുകൾ നടത്തുന്നത് പോലെ, വെബ് റൂട്ടിംഗ് URL അഭ്യർത്ഥനയെടുത്ത് ഇത് എവിടേക്ക് പോവണമെന്ന് തീരുമാനിക്കുന്നു.
+
+```mermaid
+flowchart LR
+ A["🌐 URL പാത /ഡാഷ്ബോർഡ്"] --> B["🗺️ റൂട്ടുകൾ ഒബ്ജക്റ്റ് തിരയൽ"]
+ B --> C["🎯 ടെംപ്ലേറ്റ് ഐഡി 'ഡാഷ്ബോർഡ്'"]
+ C --> D["📌 ടെംപ്ലേറ്റ് കണ്ടെത്തുക getElementById"]
+ D --> E["👁️ സ്ക്രീൻ പ്രദർശിപ്പിക്കുക ക്ളോൺ ചെയ്ത് ചേർക്കുക"]
+
+ F["📍 /ലോഗിൻ"] --> G["🎯 'ലോഗിൻ'"]
+ H["📍 /അപരിചിതം"] --> I["❌ കണ്ടെത്തിയില്ല"]
+ I --> J["🔄 /ലോഗിനിലേക്ക് റീഡയറക്റ്റ് ചെയ്യുക"]
+
+ style B fill:#e3f2fd
+ style E fill:#e8f5e8
+ style I fill:#ffebee
+ style J fill:#fff3e0
+```
+പരമ്പരാഗതമായി വെബ് സർവറുകൾ വിവിധ URL-ങ്ങൾക്ക് വ്യത്യസ്ത HTML ഫയലുകൾ സർവ് ചെയ്തു. നാം സിംഗിൾ പേജ് ആപ്പ് നിർമ്മിക്കുകയാണ്, അതിനാൽ ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് റൂട്ടിംഗ് ഞങ്ങള്ക്ക് തന്നെ കൈകാര്യം ചെയ്യേണ്ടതാണ്. ഇത് ഉപയോക്തൃ അനുഭവത്തിനും പ്രകടനത്തിനും കൂടുതൽ നിയന്ത്രണം നൽകുന്നു.
+
+```mermaid
+flowchart LR
+ A["🌐 URL പാത /dashboard"] --> B["🗺️ മാർഗ്ഗം ഒബ്ജക്റ്റ് ലുക്ക് അപ്"]
+ B --> C["🎯 ടെംപ്ലേറ്റ് ID 'dashboard'"]
+ C --> D["📄 ടെംപ്ലേറ്റ് കണ്ടെത്തുക getElementById"]
+ D --> E["👁️ സ്ക്രീൻ പ്രദർശിപ്പിക്കുക ക്ലോൺ & അപ്പ്എന്റ്"]
+
+ F["📍 /login"] --> G["🎯 'login'"]
+ H["📍 /unknown"] --> I["❌ കണ്ടെത്തിയില്ല"]
+ I --> J["🔄 /login ലേക്ക് റീഡൈരക്ട് ചെയ്യുക"]
+
+ style B fill:#e3f2fd
+ style E fill:#e8f5e8
+ style I fill:#ffebee
+ style J fill:#fff3e0
+```
+**റൂട്ടിംഗ് പ്രവാഹം മനസ്സിലാക്കുക:**
+- **URL മാറ്റങ്ങൾ റൂട്ടിംഗ് കോൺഫിഗറേഷൻ പരിശോധിക്കാൻ ട്രിഗർ ചെയ്യുന്നു**
+- **ശരിയായ റൂട്ടുകൾ പ്രത്യേക ടൈംപ്ലേറ്റ് ഐഡികൾക്ക് മാപ്പ് ചെയ്യുന്നു**
+- **തെറ്റായ റൂട്ടുകൾ റൂർച്ച് സ്റ്റേറ്റുകൾ തടയാൻ ഫാൾബാക്ക് ചെയ്തുവരുന്നു**
+- **ടൈംപ്ലേറ്റ് റൻഡറിംഗ് മുകളിൽ പഠിച്ച മൂന്ന് ഘട്ടങ്ങളനുസരിച്ച് നടപ്പിലാക്കുന്നു**
+
+വെബ് ആപ്പിനെക്കുറിച്ച് സംസാരിക്കുമ്പോൾ, ഞങ്ങൾ *Routing* എന്നത് **URLs**-നെ പ്രദർശിപ്പിക്കേണ്ട പ്രത്യേക സ്ക്രീനുകളുമായി യോജിപ്പിക്കുന്നതും എന്നാണ് പറയുന്നത്. നിരവധി HTML ഫയലുകളുള്ള വെബ്സൈറ്റിൽ, ഫയൽ പാത്തുകൾ URL-ൽ പ്രതിഫലിക്കപ്പെടുന്നതുകൊണ്ട് ഇത് സ്വയമേവ നടക്കും. ഉദാഹരണത്തിന്, നിങ്ങള്ക്കുണ്ട് ഈ ഫയലുകൾ:
+
+```
+mywebsite/index.html
+mywebsite/login.html
+mywebsite/admin/index.html
+```
+
+നിങ്ങൾ `mywebsite` എന്ന റൂട്ടുമായി ഒരു വെബ് സെർവർ ഉണ്ടാക്കിയാൽ, URL മാപ്പിംഗ് ഇങ്ങനെ ആയിരിക്കും:
+
+```
+https://site.com --> mywebsite/index.html
+https://site.com/login.html --> mywebsite/login.html
+https://site.com/admin/ --> mywebsite/admin/index.html
+```
+
+എങ്കിലും, ഞങ്ങളുടെ വെബ് ആപ്പ് ഒരു HTML ഫയലിൽ എല്ലാ സ്ക്രീനുകളും ഉള്ക്കൊള്ളുന്നതിനാൽ ഈ ഡിഫോൾട്ട് പെരുമാറ്റം സഹായിക്കില്ല. ഞങ്ങൾ ഈ മാപ്പ് സ്വയം സജ്ജമാക്കി ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് പ്രദർശിപ്പിക്കപ്പെട്ട ടൈംപ്ലേറ്റ് അപ്ഡേറ്റ് ചെയ്യേണ്ടതാണ്.
+
+### പ്രവർത്തി
+
+URL പാത്തുകളും ടൈംപ്ലേറ്റുകളുമായുള്ള [മാപ്പ്](https://en.wikipedia.org/wiki/Associative_array) ഒരു ലളിതമായ ഒബ്ജക്റ്റ് ഉപയോഗിച്ച് നടപ്പിലാക്കാം. ഈ ഒബ്ജക്റ്റ് `app.js` ഫയലിന്റെ മുകളിൽ ചേർക്കുക.
+
+```js
+const routes = {
+ '/login': { templateId: 'login' },
+ '/dashboard': { templateId: 'dashboard' },
+};
+```
+
+**ഈ റൂട്ടുകൾ കോൺഫിഗറേഷൻ മനസ്സിലാക്കുക:**
+- **URL പാത്തുകളും ടൈംപ്ലേറ്റുകൾക്കുമിടയിലെ മാപ്പിംഗ് നിർവ്വചിക്കുന്നു**
+- **കീസ് URL പാത്തുകളും വാല്യൂസ് ടൈംപ്ലേറ്റിന്റെ വിവരങ്ങളും ആണ്**
+- **URL അനുസരിച്ച് പ്രദർശിപ്പിക്കേണ്ട ടൈംപ്ലേറ്റ് എളുപ്പത്തിൽ കണ്ടെത്താൻ കഴിയുന്നു**
+- **പുതിയ റൂട്ടുകളും സാന്ദർഭികമായി കൂട്ടിച്ചേർക്കാനുള്ള വികാസനക്ഷമ ഘടന നൽകുന്നു**
+നമുക്ക് `updateRoute` ഫംഗ്ഷൻ കുറച്ചായി മാറ്റാം. നേരിട്ട് `templateId` പരാമർശിക്കാനുള്ള പകരം, ആദ്യം നിലവിലെ URL നോക്കി, പിന്നീട് നമ്മുടെ മാനപ്പെടുത്തിയത് ഉപയോഗിച്ച് അനുയോജ്യമായ template ID മൂല്യം എടുക്കണം. URL-യിൽ നിന്നും മാര്ഗഭാഗം മാത്രം എടുക്കാൻ ഉപയോഗിക്കാം [`window.location.pathname`](https://developer.mozilla.org/docs/Web/API/Location/pathname).
+
+```js
+function updateRoute() {
+ const path = window.location.pathname;
+ const route = routes[path];
+
+ const template = document.getElementById(route.templateId);
+ const view = template.content.cloneNode(true);
+ const app = document.getElementById('app');
+ app.innerHTML = '';
+ app.appendChild(view);
+}
+```
+
+**ഇവിടെ സംഭവിക്കുന്ന കാര്യങ്ങൾ പിരിവ്:**
+- **നിലവിലുള്ള പാത** ബ്രൗസറിന്റെ URL-യിൽ നിന്ന് `window.location.pathname` ഉപയോഗിച്ച് എടുക്കുന്നു
+- **അനുരൂപമായ റൂട്ടിന്റെ കോൺഫിഗറേഷൻ** routes ഒബ്ജക്ടിൽ നിന്നും നോക്കുന്നു
+- **റൂട്ടിന്റെ കോൺഫിഗറേഷനിൽ നിന്ന്** template ID പിന്വലിക്കുന്നു
+- **മുന്പുള്ളതുപോലെ** തന്നെ template rendering പ്രക്രിയ പിന്തുടരുന്നു
+- **URL മാറ്റങ്ങൾക്ക്** പ്രതികരിക്കുന്ന ഡൈനാമിക് സിസ്റ്റം സൃഷ്ടിക്കുന്നു
+
+നാം പ്രഖ്യാപിച്ച റൂട്ടുകൾ അനുയോജ്യമായ ടേംപ്ലേറ്റുകളിലേക്ക് കണക്ഷൻ ചെയ്യുന്നു. ബ്രൗസറിൽ URL മാനുവലായി മാറ്റി ഇത് ശരിയായി പ്രവർത്തിക്കുന്നുണ്ടെന്ന് പരീക്ഷിക്കാം.
+
+✅ URL-ൽ ഒരു അറിയപ്പെടാത്ത പാത നൽകി എങ്ങനെ പ്രതികരിക്കും? നമ്മൾ ഇത് എങ്ങനെ പരിഹരിക്കാമെന്ന് കണ്ടെത്താം.
+
+## നാവിഗേഷൻ ചേർക്കൽ
+
+റൂട്ടിംഗ് ഉറപ്പാക്കിയതിന് ശേഷം, ഉപയോക്താക്കൾക്ക് ആප් വഴി നീങ്ങാനുള്ള മാർഗം വേണം. പരമ്പരാഗത വെബ്സൈറ്റുകൾ, ലിങ്കുകൾ ക്ലിക്കുചെയ്യുമ്പോൾ പേജുകൾ പൂർണമായി റീലോഡ് ചെയ്യും, പക്ഷേ ഞങ്ങൾ URL യും ഉള്ളടക്കവും പേജിന്റെ പുനർലോഡിങ്ങില്ലാതെ അപ്ഡേറ്റ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു. ഇത് ഡെസ്ക്ക്ടോപ്പ് ആപ്ലിക്കേഷനുകൾ വ്യത്യസ്ത വ്യൂകൾക്കിടയിൽ നീങ്ങുന്നതുപോലെ നിശ്ചലമായ അനുഭവം സൃഷ്ടിക്കുന്നു.
+
+നമുക്ക് രണ്ട് കാര്യം ഏകോപിപ്പിക്കേണ്ടതാണ്: ഉപയോക്താക്കൾക്ക് പേജ് ബുക്ക്മാർക്ക് ചെയ്യാനും ലിങ്ക് പങ്കിടാനും അനുവദിക്കുന്നതിനായി ബ്രൗസറിന്റെ URL അപ്ഡേറ്റ് ചെയ്യൽ, ശരിയായ ഉള്ളടക്കം പ്രദർശിപ്പിക്കൽ. ശരിയായ രീതിയിൽ നടപ്പിലാക്കിയാൽ, മോടേൺ ആപ്ലിക്കേഷനുകളിൽ നിന്നും ഉപയോക്താക്കൾ പ്രതീക്ഷിക്കുന്ന സ്മൂത്ത് നാവിഗേഷൻ ലഭിക്കും.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant App
+ participant Template
+
+ User->>Browser: "ലോഗിൻ" ലിങ്കിൽ ക്ലിക്ക് ചെയ്യുന്നു
+ Browser->>App: onclick ഇവന്റ് ട്രിഗർ ചെയ്തു
+ App->>App: preventDefault() & navigate('/dashboard')
+ App->>Browser: history.pushState('/dashboard')
+ Browser->>Browser: URL /dashboard ആക്കുന്നു
+ App->>App: updateRoute() വിളിച്ചു
+ App->>Template: ഡാഷ്ബോർഡ് ടെംപ്ലേറ്റ് കണ്ടെത്തി ക്ലോൺ ചെയ്യുക
+ Template->>App: ക്ലോണുചെയ്ത ഉള്ളടക്കം തിരികെ നൽകുന്നു
+ App->>Browser: അപ്ലിക്കേഷൻ ഉള്ളടക്കം ടെംപ്ലേറ്റുമായി മാറ്റുക
+ Browser->>User: ഡാഷ്ബോർഡ് സ്ക്രീൻ പ്രദർശിപ്പിക്കുന്നു
+
+ Note over User,Template: ഉപയോക്താവ് ബ്രൗസർ തിരിച്ച് ബട്ടൺ ക്ലിക്ക് ചെയ്യുന്നു
+
+ User->>Browser: തിരിച്ച് ബട്ടൺ ക്ലിക്ക് ചെയ്യുന്നു
+ Browser->>Browser: ചരിത്രം /login ആക്കുന്നു
+ Browser->>App: popstate ഇവന്റ് ഫയര് ചെയ്യുന്നു
+ App->>App: updateRoute() ഓട്ടോമാറ്റിക്കായി വിളിക്കുന്നു
+ App->>Template: ലോഗിൻ ടെംപ്ലേറ്റ് കണ്ടെത്തി ക്ലോൺ ചെയ്യുക
+ Template->>App: ക്ലോണുചെയ്ത ഉള്ളടക്കം തിരികെ നൽകുന്നു
+ App->>Browser: അപ്ലിക്കേഷൻ ഉള്ളടക്കം ടെംപ്ലേറ്റുമായി മാറ്റുക
+ Browser->>User: ലോഗിൻ സ്ക്രീൻ പ്രദർശിപ്പിക്കുന്നു
+```
+### 🔄 **പാഠഭാഗം പരിശോധന**
+**സിംഗിൾ പേജ് ആപ്ലിക്കേഷൻ ആർക്കിടെക്ചർ**: സമ്പൂർണ സിസ്റ്റത്തിന്റെ മനസ്സിലാക്കലിന്:
+- ✅ ക്ലയന്റ്-സൈഡ് റൂട്ടിംഗ് പരമ്പരാഗത സർവർ-സൈഡ് റൂട്ടിംഗിനേക്കാൾ എങ്ങനെ വ്യത്യസ്തമാണ്?
+- ✅ SPA നാവിഗേഷനിൽ History API എന്തുകൊണ്ട് ആവശ്യമാണ്?
+- ✅ പേജിന്റെ പുനർലോഡിങ്ങില്ലാതെ മൊഡലാറ്റിവായി ഉള്ളടക്കം എങ്ങനെ ഉണ്ടാക്കാം?
+- ✅ നാവിഗേഷൻ തടയുന്നതിൽ ഇവന്റ് ഹാൻഡ്ലിംഗ് എന്ത് പങ്ക് വഹിക്കുന്നു?
+
+**സിസ്റ്റം സംയോജനം**: നിങ്ങളുടെ SPA ചെയ്യുന്നത്:
+- **ടേംപ്ലേറ്റ് മാനേജ്മെന്റ്**: ഡൈനാമിക് ഉള്ളടക്കമുള്ള പുനരുപയോഗ യോഗ്യമായ UI ഘടകങ്ങൾ
+- **ക്ലയന്റ്-സൈഡ് റൂട്ടിംഗ്**: സർവർ അഭ്യർത്ഥനകളില്ലാതെ URL മാനേജ്മെന്റ്
+- **ഇവന്റ്-ഡ്രിവൻ ആർക്കിടെക്ചർ**: പ്രതികരണാത്മക നാവിഗേഷൻ, ഉപയോക്തൃ ഇടപെടൽ
+- **ബ്രൗസർ സംയോജനം**: History API ഉപയോഗിച്ച് മുൻ/ശേഷം ബട്ടൺ പിന്തുണ
+- **പ്രധാനമാക്കൽ**: വേഗത്തിലുള്ള ട്രാൻസിഷനുകൾ, കുറഞ്ഞ സർവർ ഭാരം
+
+**പ്രൊഫഷണൽ പാറ്റേണുകൾ**: നിങ്ങൾ നടപ്പിലാക്കിയിരിക്കുന്നത്:
+- **മോഡൽ-വ്യൂ വേർതിരിക്കൽ**: ആപ്പ് ലോജിക് നിന്ന് വ്യത്യസ്തമായ ടേംപ്ലേറ്റുകൾ
+- **സ്റ്റേറ്റ് മാനേജ്മെന്റ്**: URL സ്റ്റേറ്റ് പ്രദർശിത ഉള്ളടക്കത്തിന് ഒത്തുചേരുന്നു
+- **പ്രോഗ്രസീവ് എൻഹാൻസ്മെന്റ്**: സാധാരണ HTML പ്രവർത്തനക്ഷമതയ്ക്ക് ജാവാസ്ക്രിപ്റ് ആധിക്യം
+- **ഉപയോക്തൃ അനുഭവം**: പേജിലെ പുനർലോഡിങ് ഇല്ലാതെ സ്മൂത്ത് അപ്ലിക്കേഷൻ പോലുള്ള നാവിഗേഷൻ
+
+> � **ആർക്കിടെക്ചർ വിവരം**: നാവിഗേഷൻ സിസ്റ്റം ഘടകങ്ങൾ
+>
+> **നിങ്ങൾ നിർമ്മിക്കുന്നത്:**
+> - **🔄 URL മാനേജ്മെന്റ്**: പേജ് റീ-ലോഡിങ്ങില്ലാതെ ബ്രൗസർ അഡ്രസ് ബാർ അപ്ഡേറ്റ് ചെയ്യുന്നു
+> - **📋 ടേംപ്ലേറ്റ് സിസ്റ്റം**: നിലവിലെ റൂട്ടിന്റെ അടിസ്ഥാനത്തിൽ ഉള്ളടക്കം ഡൈനാമിക് ആയി മാറുന്നു
+> - **📚 ഹിസ്റ്ററി സംയോജനം**: മുൻ/ശേഷം ബട്ടണുകളുടെ പ്രവർത്തനം സംരക്ഷിക്കുന്നു
+> - **🛡️ പിശക് കൈകാര്യം**: അസാധുവായ അല്ലെങ്കിൽ കാണാത്ത റൂട്ടുകൾക്കായുള്ള സൂക്ഷ്മ പിന്തുണ
+>
+> **ഘടകങ്ങൾ ഒരുമിച്ചുള്ള പ്രവർത്തനം:**
+> - **നാവിഗേഷൻ ഇവന്റുകൾ** (ക്ലിക്കുകൾ, ഹിസ്റ്ററി മാറ്റങ്ങൾ) കേൾക്കുന്നു
+> - **History API** ഉപയോഗിച്ച് URL അപ്ഡേറ്റ് ചെയ്യുന്നു
+> - **പുതിയ റൂട്ടിനുള്ള ടേംപ്ലേറ്റും** റെൻഡർ ചെയ്യുന്നു
+> - **നിരന്തരവും സുതാര്യവുമായ ഉപയോക്തൃ അനുഭവം** ഉറപ്പാക്കുന്നു
+
+ഞങ്ങളുടെ ആപ്പിന് അടുത്തത്, URL മാനുവലായി മാറ്റേണ്ടതില്ലാതെ പേജുകൾക്കിടയിൽ നാവിഗേറ്റ് ചെയ്തുകൊള്ളാനുള്ള സാധ്യത ചേർക്കൽ ആണ്. ഇതിന് രണ്ട് കാര്യങ്ങൾ ഉണ്ട്:
+
+ 1. നിലവിലെ URL അപ്ഡേറ്റ് ചെയ്യുക
+ 2. പുതിയത് ഉപയോഗിച്ചുള്ള URL അടിസ്ഥാനമാക്കി പ്രദർശിപ്പിക്കുന്ന ടേംപ്ലേറ്റ് അപ്ഡേറ്റ് ചെയ്യുക
+
+`updateRoute` ഫംഗ്ഷനോടെന്ന് രണ്ടാം ഭാഗത്തെ ഞങ്ങൾക്കായ് പരിഗണിച്ചിരുന്നു, ഇപ്പോൾ നിലവിലെ URL എടുക്കാനുള്ള തന്ത്രം കാണാം.
+
+നാം റീ-ലോഡിങ്ങ് കൂടാതെ URL അപ്ഡേറ്റ് സാധ്യമാക്കാൻ ജാവാസ്ക്രിപ്റ്റിലെ [`history.pushState`](https://developer.mozilla.org/docs/Web/API/History/pushState) ഉപയോഗിക്കേണ്ടതാണ്.
+
+> ⚠️ **പ്രധാന കുറിപ്പ്**: HTML ലിങ്ക് defining angle bracket `` സ്വയം ഉപയോഗിച്ച് ഹൈപ്പർലിങ്കുകൾ സൃഷ്ടിക്കാവുന്നതാണ്, പക്ഷേ ഇത് സാധാരണയായി പേജ് റീ-ലോഡ് ചെയ്യും. Routing കൈകാര്യം ചെയ്യുന്ന ദിശയിൽ, ഈ പേജ് റീലോഡ് തടയാൻ പ്രത്യേകമായി `preventDefault()` ഫംഗ്ഷൻ ലോറെ(click event) ഉപയോഗിക്കാൻ ആവശ്യമാണ്.
+
+### ടാസ്ക്
+
+നമുക്ക് ആപ്പിനുള്ളിൽ നാവിഗേറ്റ് ചെയ്യാൻ കഴിയുന്ന പുതിയ ഫംഗ്ഷൻ സൃഷ്ടിക്കാം:
+
+```js
+function navigate(path) {
+ window.history.pushState({}, path, path);
+ updateRoute();
+}
+```
+
+**ഈ നാവിഗേഷൻ ഫംഗ്ഷൻ മനസ്സിലാക്കൽ:**
+- **Browser URL** പുതിയ പാതയിലേക്ക് `history.pushState` ഉപയോഗിച്ച് അപ്ഡേറ്റ് ചെയ്യുന്നു
+- **Browser history stack**-ത്തിലേക്ക് പുതിയ എൻട്രി ചേർക്കുന്നു, മുൻ/ശേഷം ബട്ടൺ പിന്തുണയ്ക്കായി
+- **`updateRoute()`** വിളിച്ച് അനുയോജ്യമായ ടേംപ്ലേറ്റ് പ്രദർശിപ്പിക്കുന്നു
+- **പേജ് പുനർലോഡിങ്ങ് ഇല്ലാതെ** സിംഗിൾ പേജ് ആപ്പിന്റെ അനുഭവം തുടരുന്നു
+
+ഈ രീതിയിൽ ആദ്യം നിലവിലെ URL പത്തിനെ അടിസ്ഥാനമാക്കി അപ്ഡേറ്റ് ചെയ്യുന്നു, പിന്നീടു ടേംപ്ലേറ്റ് മാറുന്നു. `window.location.origin` പ്രോപ്പർട്ടി URL റൂട്ട് നൽകും, ഇതുപയോഗിച്ച് പൂർണ്ണ URL പുന:സൃഷ്ടി ചെയ്യാം.
+
+ഇപ്പോൾ ഈ ഫംഗ്ഷൻ ഉണ്ടെങ്കിൽ, നിർവ്വചിച്ച റൂട്ടിൽ പൊരുത്തപ്പെടാത്ത പാത എങ്കിൽ പരിഹാരമായി ഒരു ഫോള്ബാക്ക് ചേർത്തുകൊണ്ട് `updateRoute` മാറ്റാം.
+
+```js
+function updateRoute() {
+ const path = window.location.pathname;
+ const route = routes[path];
+
+ if (!route) {
+ return navigate('/login');
+ }
+
+ const template = document.getElementById(route.templateId);
+ const view = template.content.cloneNode(true);
+ const app = document.getElementById('app');
+ app.innerHTML = '';
+ app.appendChild(view);
+}
+```
+
+** സാഹിത്യമായി ശ്രദ്ധിക്കേണ്ടത്: **
+- നിലവിലെ പാതയ്ക്കായി റൂട്ടുണ്ടോ എന്ന് പരിശോധിക്കുന്നു
+- തെറ്റായ റൂട്ടിലേക്ക് നയിക്കുമ്പോൾ ലോഗിൻ പേജിലേക്ക് റീ-ഡയറക്ട് ചെയ്യുന്നു
+- തകരാറില്ലാത്ത നാവിഗേഷൻ അനുവദിക്കുന്ന ഫോള്ബാക്ക് സംവിധാനം നൽകുന്നു
+- തെറ്റായ URL ഉണ്ടെങ്കിലും ഉപയോക്താക്കൾക്ക് സാധുവായ പേജ് കാണിക്കുന്നു
+
+റൂട്ടുകൾ കണ്ടെത്താനായില്ലെങ്കിൽ ഇനി ലോഗിൻ പേജിലേക്ക് നയിക്കും.
+
+ഇപ്പോൾ ലിങ്കിന് ക്ലിക്ക് ചെയ്യുമ്പോൾ URL നേടാനും, ബ്രൗസറിന്റെ ഡീഫോൾട്ട് ലിങ്ക് പ്രവർത്തനം തടയാനുമായി ഫംഗ്ഷൻ സൃഷ്ടിക്കാം:
+
+```js
+function onLinkClick(event) {
+ event.preventDefault();
+ navigate(event.target.href);
+}
+```
+
+**ഈ ക്ലിക്ക് ഹാൻഡ്ലർ വിശദീകരണം:**
+- ബ്രൗസറിന്റെ ഡീഫോൾട്ട് ലിങ്ക് പ്രവർത്തനം `preventDefault()` ഉപയോഗിച്ച് തടയുന്നു
+- ക്ലിക്കുചെയ്ത ലിങ്കിൽ നിന്നും ലക്ഷ്യ URL എടുക്കുന്നു
+- പേജ് പുനർലോഡുചെയ്യാതെ നമുടെ നാവിഗേറ്റ് ഫംഗ്ഷൻ വിളിക്കുന്നു
+- സിംഗിൾ പേജ് ആപ്പ് സ്മൂത്ത് അനുഭവം നിലനിർത്തുന്നു
+
+```html
+ Login
+...
+Logout
+```
+
+**ഈ `onclick` ബൈൻഡിങ് നിർവ്വഹിക്കുന്നത്:**
+- ഓരോ ലിങ്കും നമുടെ കസ്റ്റം നാവിഗേഷൻ സിസ്റ്റത്തിലേക്ക് കണക്ട് ചെയ്യുന്നു
+- ക്ലിക് ഇവന്റ് നമ്മുടെ `onLinkClick` ഫംഗ്ഷനിലേക്ക് അയയ്ക്കുന്നു
+- പേജ് പുനർലോഡ് ഇല്ലാതെ സ്മൂത്ത് നാവിഗേഷൻ സാധ്യമാക്കുന്നു
+- ഉപയോക്താക്കൾക്ക് ബുക്ക്മാർക്ക് ചെയ്യാനും ലിങ്ക് പങ്കിടാനുമായി ശരിയായ URL ഘടന നിലനിർത്തുന്നു
+
+[`onclick`](https://developer.mozilla.org/docs/Web/API/GlobalEventHandlers/onclick) സവിശേഷത ജാവാസ്ക്രിപ്റ്റ് കോഡിന് ക്ലിക്ക് ഇവന്റ绑定ചെയ്യുന്നു, ഇവിടെ `navigate()` വിളിക്കാനുള്ള കോഡ്.
+
+ഇവയിൽ ക്ലിക്ക് ചെയ്ത്, ആപ്പിന്റെ വിവിധ സ്ക്രീനുകൾക്കിടയിൽ നീങ്ങാൻ സാധിക്കുന്നുവെന്ന് പരിശോധിക്കുക.
+
+✅ `history.pushState` HTML5 സ്റ്റാൻഡേർഡിൽ ഉൾപ്പെടുത്തിയെന്നും [ആധുനിക ബ്രൗസറുകളിൽ എല്ലായിടത്തും](https://caniuse.com/?search=pushState) പ്രവർത്തിക്കുന്നുവെന്നും ശ്രദ്ധിക്കുക. പഴക്കമുള്ള ബ്രൗസറുകൾക്കായി, URL പാതയ്ക്ക് മുമ്പ് [ഹാഷ് (#)](https://en.wikipedia.org/wiki/URI_fragment) ഉപയോഗിച്ച് റൂട്ടിംഗ് നടപ്പിലാക്കാം, ഇത് സാധാരണ എങ്കിൽ അങ്കർ നാവിഗേഷന്റെ ഭാഗമായാണ് പ്രവർത്തിക്കുന്നത്, പേജ് പുനർലോഡ് ആവുകയില്ല.
+
+## 'Back' & 'Forward' ബട്ടണുകൾ പ്രവർത്തിക്കാനാക്കൽ
+
+Back, forward ബട്ടണുകൾ വെബ് ബ്രൗസിംഗ്ക്കു അത്യന്താപേക്ഷിതമാണ്, ഇവിടെ NASA മിഷൻ കൺട്രോളർമാർ പഴയ സിസ്റ്റം നിലകൾ പരിശോധിക്കിവാനായി ഉപയോഗിക്കുമ്പോളുള്ള വിധം. ഉപയോക്താക്കൾ ഈ ബട്ടണുകൾ പ്രവർത്തിക്കണമെന്നു പ്രതീക്ഷിക്കുന്നു, അതായത് തിരക്ക് ഉണ്ടാകുമ്പോൾ ഇത് തകരാറു വരുത്തും.
+
+നമ്മുടെ SPA-യ്ക്കു ഇത് പിന്തുണ നൽകാൻ അധിക ക്രമീകരണം വേണം. ബ്രൗസറിൽ history stack ഉണ്ട് (`history.pushState` ഉപയോഗിച്ച് ഞങ്ങൾ ഇതിനകം ഇടുന്നുവെന്ന് കാണിച്ചു), ഉപയോക്താക്കളെ ഈ ചരിത്രത്തിലൂടെ നാവിഗേറ്റ് ചെയുമ്പോൾ, ആപ്പും പ്രദർശിപ്പിക്കുന്ന ഉള്ളടക്കം അപ്ഡേറ്റ് ചെയ്യണം.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant App
+ participant Template
+
+ User->>Browser: "ലോഗിൻ" ലിങ്ക് ക്ലിക്ക് ചെയ്യുന്നു
+ Browser->>App: onclick ഇവന്റ് ട്രിഗർ ചെയ്യപ്പെട്ടു
+ App->>App: preventDefault() & navigate('/dashboard')
+ App->>Browser: history.pushState('/dashboard')
+ Browser->>Browser: URL /dashboard ആയി അപ്ഡേറ്റ് ചെയ്യുന്നു
+ App->>App: updateRoute() വിളിക്കുന്നു
+ App->>Template: ഡാഷ്ബോർഡ് ടെംപ്ലേറ്റ് കണ്ടെത്തി ക്ലോൺ ചെയ്യുക
+ Template->>App: ക്ലോൺ ചെയ്ത ഉള്ളടക്കം മടങ്ങിച്ച് നൽകുന്നു
+ App->>Browser: ആപ്പ് ഉള്ളടക്കം ടെംപ്ലേറ്റോടെമാറ്റുക
+ Browser->>User: ഡാഷ്ബോർഡ് സ്ക്രീൻ പ്രദർശിപ്പിക്കുക
+
+ Note over User,Template: ഉപയോക്താവ് ബ്രൗസർ ബാക്ക് ബട്ടൺ ക്ലിക്ക് ചെയ്യുന്നു
+
+ User->>Browser: ബാക്ക് ബട്ടൺ ക്ലിക്ക് ചെയ്യുന്നു
+ Browser->>Browser: ഹ история /login-ലേക്ക് വീഴ്ചവഴി
+ Browser->>App: popstate ഇവന്റ് ഫയർ ചെയ്തു
+ App->>App: updateRoute() സ്വയം വിളിച്ചു
+ App->>Template: ലോഗിൻ ടെംപ്ലേറ്റ് കണ്ടെത്തി ക്ലോൺ ചെയ്യുക
+ Template->>App: ക്ലോൺ ചെയ്ത ഉള്ളടക്കം മടങ്ങിച്ച് നൽകുന്നു
+ App->>Browser: ആപ്പ് ഉള്ളടക്കം ടെംപ്ലേറ്റോടെമാറ്റുക
+ Browser->>User: ലോഗിൻ സ്ക്രീൻ പ്രദർശിപ്പിക്കുക
+```
+**പ്രധാന ഇടപെടലുകൾ:**
+- ഉപയോക്തൃ ഇടപെടലുകൾ (ക്ലിക്കുകൾ, ബ്രൗസർ ബട്ടണുകൾ) നാവിഗേഷൻ തുടങ്ങുന്നു
+- ആപ്പ് ലിങ്ക് ക്ലിക്കുകൾ തടഞ്ഞ് പേജ് പുനർലോഡിങ്ങുനടത്താതെ നിലനിർത്തുന്നു
+- History API URL മാറ്റങ്ങളും ബ്രൗസർ ചരിത്ര സ്റ്റാക്ക് മാനേജു ചെയ്യുന്നു
+- ടേംപ്ലേറ്റുകൾ ഓരോ സ്ക്രീനിനും ഉള്ളടക്ക ഘടന നൽകുന്നു
+- ഇവന്റ് ലിസനറുകൾ എല്ലാ നാവിഗേഷൻ ഘടകങ്ങൾക്കും പ്രതികരിച്ചു യ-haspopup തമ
+
+`history.pushState` ഉപയോഗിച്ചുകൊണ്ട് ബ്രൗസറിന്റെ നാവിഗേഷൻ ചരിത്രത്തിൽ പുതിയ എൻട്രികൾ സൃഷ്ടിക്കുന്നു. ബ്രൗസറിന്റെ പിന്നിലെ ബട്ടൺ നാളെ നീട്ടി നോക്കിയാൽ കാണാനാകും:
+
+
+
+പിന്നിലെ ബട്ടൺ കുറേക്കാലം അമർത്തി നോക്കിയാൽ നിലവിലെ URL മാറി, ചരിത്രം അപ്ഡേറ്റ് ആയാലും അടുത്ത ടേംപ്ലേറ്റ് ഒരുപോലെയാണ് കാണിക്കുന്നത്.
+
+ഇതിനോർക്കുവാൻ കാരണം, ആപ്പ് `updateRoute()` വിളിക്കേണ്ടതാണെന്ന് അറിയുന്നില്ല ചരിത്രം മാറിയപ്പോൾ. [`history.pushState` ഡോക്യുമെന്റേഷന്](https://developer.mozilla.org/docs/Web/API/History/pushState) പരിശോധിക്കുമ്പോൾ കണ്ടെത്താം, സ്റ്റേറ്റ് മാറ്റുമ്ബോൾ URL മാറുന്നതോടെ [`popstate`](https://developer.mozilla.org/docs/Web/API/Window/popstate_event) ഇവന്റ് ഉളവാകുന്നു. ഈ ഇവന്റ് ഉപയോഗിച്ച് ഈ പ്രശ്നം പരിഹരിക്കാം.
+
+### ടാസ്ക്
+
+ബ്രൗസർ ചരിത്രം മാറുമ്പോൾ ശരിയായ ടേംപ്ലേറ്റ് അപ്ഡേറ്റ് ആക്കാൻ, `updateRoute()` വിളിക്കുന്ന ഒരു ഫംഗ്ഷൻ പുതുക്കുക. ഇത് ഞങ്ങളുടെ `app.js` ഫയലിന്റെ അവസാനത്തിൽ ചേർക്കാം:
+
+```js
+window.onpopstate = () => updateRoute();
+updateRoute();
+```
+
+**ഇതിന്റെ ഹിസ്റ്ററി സംയോജന മനസ്സിലാക്കൽ:**
+- ഉപയോക്താക്കൾ ബ്രൗസർ ബട്ടണുകൾ ഉപയോഗിച്ച് നാവിഗേറ്റ് ചെയ്യുന്നപ്പോൾ ഉണ്ടാകുന്ന `popstate` ഇവന്റ് കേൾക്കുന്നു
+- സംക്ഷിപ്ത സിന്താക്സ് നൽകാൻ arrow function ഉപയോഗിക്കുന്നു
+- ചരിത്രം മാറുമ്പോൾ `updateRoute()` സ്വയം വിളിക്കുന്നു
+- പേജ് ആദ്യമായി ലോഡ് ചെയ്യുന്ന സമയത്ത് `updateRoute()` വിളിച്ച് ആപ്പ് ആരംഭിക്കുന്നു
+- ഉപയോക്താക്കൾ എങ്ങിനെയാണ് നാവിഗേറ്റ് ചെയ്താലും ശരിയായ ടേംപ്ലേറ്റ് പ്രദർശിപ്പിക്കുന്നതായി ഉറപ്പാക്കുന്നു
+
+> 💡 **പ്രൊ ടിപ്പ്**: ഇവിടെ `popstate` ഇവന്റ് ഹാൻഡ്ലറിനായി [arrow function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Arrow_functions) ഉപയോഗിച്ചതാണ്, ഡിസ്പ്രസിഷൻ കുറയ്ക്കാനായിരിക്കും, സാധാരണ ഫങ്ഷൻ ഉപയോഗിച്ചാലും സാരമാണ്.
+
+ഈ arrow function-യുടെ ഓര്മ്മപ്പെടുത്തൽ വീഡിയോ:
+
+[](https://youtube.com/watch?v=OP6eEbOj2sc "Arrow Functions")
+
+> 🎥 മുകളില് കാണുന്ന ചിത്രം ക്ലിക്ക് ചെയ്ത് arrow functions സംബന്ധിച്ച വീഡിയോ കാണാം.
+
+ഇപ്പോൾ നിങ്ങളുടെ ബ്രൗസറിന്റെ അടുത്തത്, പിന്നിൽ എന്നിവ ഉപയോഗിച്ച് പരീക്ഷിച്ച്, പ്രദർശിപ്പിക്കുന്ന റൂട്ടുകളെ ശരിയായി അപ്ഡേറ്റ് ചെയ്യുന്നതാണെന്ന് പരിശോധിക്കുക.
+
+### ⚡ **അടുത്ത 5 മിനിറ്റ് നിങ്ങള് ചെയ്യാവുന്നതെല്ലാം**
+- [ ] ബ്രൗസർ ബാക്ക്/ഫോർവേർഡ്ബട്ടണുകൾ ഉപയോഗിച്ച് ബാങ്കിങ്ങ് ആപ്പിന്റെ നാവിഗേഷൻ പരിശോധിക്കുക
+- [ ] അഡ്രസ് ബാറിൽ ഇൻപുട്ട് മാറ്റി റൂട്ടിംഗ് പരീക്ഷിക്കുക
+- [ ] ബ്രൗസർ ഡെവ്ടൂൾസ് തുറന്ന് ടേംപ്ലേറ്റുകൾ DOM-ലേക്ക് എങ്ങനെ ക്ലോൺ ചെയ്യുന്നു എന്ന് പരിശോധിക്കുക
+- [ ] റൂട്ടിംഗ് ഫ്ലോ ട്രാക്ക് ചെയ്യാൻ console.log ഉപയോഗിച്ച് പരീക്ഷണം നടത്തുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നേടാവുന്ന കാര്യങ്ങൾ**
+- [ ] പാഠത്തിന് ശേഷമുള്ള ക്വിസ് പൂർത്തിയാക്കി SPA ആർക്കിടെക്ചർ ആശയങ്ങൾ മനസ്സിലാക്കുക
+- [ ] ബാങ്കിങ് ആപ്പ് ടേംപ്ലേറ്റുകൾ സ്റ്റൈലിംഗോടെ പ്രൊഫഷണലാക്കുക
+- [ ] 404 പേജ് എറർ രക്ഷാധികാര പരീക്ഷണങ്ങൾ അടങ്ങുന്ന വിജയകരമായ എറർ ഹാൻഡ്ലിങ്
+- [ ] ക്രെഡിറ്റ്സ് പേജ് ചലഞ്ചും കൂടുതൽ റൂട്ടിംഗ് പ്രവർത്തനക്ഷമതയും
+- [ ] ലോഡിംഗ് സ്റ്റേറ്റുകളും ടേംപ്ലേറ്റ് സ്വിച്ച് ചെയ്യുന്ന ട്രാൻസിഷനുകളും ചേർക്കുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ചയോളം SPA വികസന യാത്ര**
+- [ ] ഫോർമുകൾ, ഡാറ്റ മാനേജ്മെന്റ്, സ്ഥിരത ചേരുന്ന മുഴുവൻ ബാങ്കിങ് ആപ്പ് പൂർത്തിയാക്കുക
+- [ ] റൂട്ടിംഗ് അധിക ഫീച്ചറുകൾ (പാരാമീറ്ററുകൾ, നേസ്റ്റഡ് റൂട്ടുകൾ) ചേർക്കുക
+- [ ] നാവിഗേഷൻ ഗാർഡുകളും പ്രാമാണീകരണ അടിസ്ഥാന റൂട്ടിംഗും നടപ്പിലാക്കുക
+- [ ] പുനരുപയോഗ യോഗ്യമായ ടേംപ്ലേറ്റ് ഘടകങ്ങളും കമ്പോണന്റ് ലൈബ്രറിയും സൃഷ്ടിക്കുക
+- [ ] അനിമേഷനുകളും ട്രാൻസിഷനുകളും ചേർത്ത് ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുക
+- [ ] SPA-хോസ്റ്റിങ്ങും റൂട്ടിംഗ് ക്രമീകരണവും
+
+### 🌟 **നിങ്ങളുടെ മാസംവഴിയുള്ള ഫ്രണ്ട് എൻഡ് ആർക്കിടെക്ചർ ക്ലാസുകൾ**
+- [ ] React, Vue, Angular പോലുള്ള ആധുനിക ഫ്രെയിംവർക്ക് ഉപയോഗിച്ച് ദുർഘടമായ SPA-കൾ നിർമ്മിക്കുക
+- [ ] State management പാറ്റേണുകളും ലൈബ്രറികളും പഠിക്കുക
+- [ ] SPA വികസനത്തിനുള്ള build tools, development workflows കൈകാര്യം ചെയ്യുക
+- [ ] പ്രോഗ്രസീവ് വെബ് ആപ്പിന്റെ offline പ്രവർത്തനവും ഉൾപ്പെടെ നടപ്പിലാക്കുക
+- [ ] വലിയ പ്രോജെക്ടുകളിലെ പ്രകടന മൂല്യനിർണയം പഠിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് SPA പ്രൊജക്ടുകളിൽ സംഭാവനകൾ ചെയ്യുക, അറിവ് പങ്കുവെക്കുക
+
+## 🎯 നിങ്ങളുടെ Single-Page Application നൈപുണ്യ മാപ്പ്
+
+```mermaid
+timeline
+ title SPA വികസനവും ആധുനിക വെബ് ആർക്കിടെക്ചറും പഠന പുരോഗതി
+
+ section അടിസ്ഥാനപരവും (20 മിനിറ്റ്)
+ ഫലക സമ്പ്രദായങ്ങൾ: HTML ഫലക ഘടകങ്ങൾ
+ : DOM മാനിപ്പുലേഷൻ
+ : ഉള്ളടക്കം ക്ലോണിംഗ്
+ : ഡൈനാമിക് റെൻഡറിംഗ്
+
+ section റൂട്ടിംഗ് അടിസ്ഥാനങ്ങൾ (30 മിനിറ്റ്)
+ ക്ലയന്റ്-സൈഡ് നാവിഗേഷൻ: URL നിയന്ത്രണം
+ : ചരിത്ര API
+ : റൂട്ടു മാപ്പിംഗ്
+ : ഇവന്റുകള് കൈകാര്യം ചെയ്യല്
+
+ section ഉപയോക്തൃ അനുഭവം (40 മിനിറ്റ്)
+ നാവിഗേഷൻ പൊളീഷ്: ബ്രൗസർ ഇന്റഗ്രേഷൻ
+ : ബാക്ക് ബട്ടൺ സഹായം
+ : പിശക് കൈകാര്യം ചെയ്യല്
+ : സ്മൂത്ത് ട്രാൻസിഷനുകൾ
+
+ section ആർക്കിടെക്ട് പാറ്റേണുകൾ (50 മിനിറ്റ്)
+ പ്രൊഫഷണൽ SPAs: ഘടക സമ്പ്രദായങ്ങൾ
+ : സ്റ്റേറ്റ് മാനേജ്മെന്റ്
+ : പ്രകടന മെച്ചപ്പെടുത്തല്
+ : പിശക് ബൗണ്ടറികൾ
+
+ section മുൻനിര സാങ്കേതിക വിദ്യകൾ (1 ആഴ്ച)
+ ഫ്രെയിംവർക് ഇന്റഗ്രേഷൻ: റിയാക്ട് റൗട്ടർ
+ : വ്യൂ റൗട്ടർ
+ : ആംഗുലർ റൗട്ടർ
+ : റ്റേറ്റ്ഡ് ലൈബ്രറികൾ
+
+ section ഉൽപ്പാദന കഴിവുകൾ (1 മാസം)
+ സംരംഭ വികസനം: ബിൽഡ് സിസ്റ്റങ്ങൾ
+ : പരിശോധനാ തന്ത്രങ്ങൾ
+ : ഡിപ്ലോയ്മെന്റ് പൈപ്പ്ലൈനുകൾ
+ : പ്രകടന നിരീക്ഷണം
+```
+### 🛠️ നിങ്ങളുടെ SPA വികസന ഉപകരണങ്ങൾ സംഗ്രഹം
+
+ഈ പാഠം പൂർത്തിയാക്കിയിട്ടു നിങ്ങൾ കൈവരിച്ചു ഒന്നാം:
+- **ടേംപ്ലേറ്റ് ആർക്കിടെക്ചർ**: ഡൈനാമിക് ഉള്ളടക്കും പുനരുപയോഗം ചെയ്യാവുന്ന HTML ഘടകങ്ങളും
+- **ക്ലയന്റ്-സൈഡ് റൂട്ടിംഗ്**: പേജ് റീ-ലോഡ് ഇല്ലാതെ URL മാനേജ്മെന്റ്
+- **ബ്രൗസർ സംയോജനം**: History API ഉപയോഗവും ബാക്ക്/ഫോർവേർഡ് ബട്ടൺ പിന്തുണയും
+- **ഇവന്റ്-ഡ്രിവൻ സിസ്റ്റം**: നാവിഗേഷൻ കൈകാര്യം ചെയ്യലും ഉപയോക്തൃ ഇടപെടലും
+- **DOM മാനിപുലേഷൻ**: ടേംപ്ലേറ്റ് ക്ലോണിംഗ്, ഉള്ളടക്കം മാറ്റിയലും ഘടക മാനേജ്മെന്റ്
+- **എറർ ഹാൻഡ്ലിംഗ്**: തെറ്റായ റൂട്ടുകളും കാണാത്ത ഉള്ളടക്കവും വശം വെയ്ക്കുന്ന വീഴ്ചകൾ
+- **പ്രകടനം പാറ്റേണുകൾ**: കാര്യക്ഷമ ഉള്ളടക്ക ലോഡിങ്ങും റെന്ററിങ്ങും
+
+**യഥാർത്ഥ പ്രയോജനം**: നിങ്ങളുടെ SPA വികസന കഴിവുകൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **ആധുനിക വെബ് ആപ്ലിക്കേഷനുകൾ**: React, Vue, Angular മറ്റ് ഫ്രെയിംവർക്ക് വികസനം
+- **പ്രോഗ്രസീവ് വെബ് ആപ്പുകൾ**: ഓഫ്ലൈന് സൗകര്യവുമുള്ള, ആപ്പ് പോലുള്ള അനുഭവങ്ങൾ
+- **എന്റർപ്രൈസ് ഡാഷ്ബോർഡുകൾ**: ബിസിനസ്സ് അപ്ലിക്കേഷനുകൾ ഒരു മുകളിൽ പ്രവർത്തനങ്ങളിലൂടെ
+- **ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോംസ്**: ഉൽപ്പന്ന കാറ്റലോഗുകൾ, ഷോപ്പിംഗ് കാർട്ടുകൾ, ചെക്കൗട്ട് ഫ്ലോകൾ
+- **ഉള്ളടക്കം മാനേജ്മെന്റ്**: ഡൈനാമിക് ഉള്ളടക്കം സൃഷ്ടിക്കുകയും പരിഷ്കരിക്കുകയും ചെയ്യുക
+- **മൊബൈൽ ഡെവലപ്പ്മെന്റ്**: ഹ്രിഡ് ആപ്പുകൾ വെബ് സാങ്കേതിക വിദ്യകൾ ഉപയോഗിച്ച്
+
+**പ്രൊഫഷണൽ കഴിവുകൾ**: ഇനി നിങ്ങളുടെ കഴിവ്:
+- **സ്ഥാപിക്കുക** ശ്രേഷ്ഠമായ വ്യത്യാസങ്ങളുമായി സിംഗിൾ-പേജ് ആപ്ലിക്കേഷനുകൾ
+- **പ്രവർത്തിപ്പിക്കുക** അപ്ലിക്കേഷൻ സങ്കീർണതയോടൊപ്പം സ്കെയിൽ ചെയ്യുന്ന ക്ലയന്റ്-സൈഡ് റൂട്ടിങ് സിസ്റ്റങ്ങൾ
+- **ഡിബഗ് ചെയ്യുക** ബ്രൗസർ ഡെവലപ്പർ ടൂൾസ് ഉപയോഗിച്ച് സങ്കീർണമായ നാവിഗേഷൻ ഫ്ളോകൾ
+- **ഒപ്റ്റിമൈസ് ചെയ്യുക** കാര്യക്ഷമമായ ടെംപ്ലേറ്റ് മാനേജ്മെന്റ് വഴിയാണ് ആപ്ലിക്കേഷൻ പ്രകടനം
+- **ഡിസൈൻ ചെയ്യുക** നേറ്റീവ് ആൻഡ് റെസ്പോൺസീവ് അനുഭവങ്ങൾ
+
+**ഫ്രണ്ട്എൻഡ് ഡെവലപ്പ്മെന്റ് ആശയങ്ങൾ കൈവശം വെച്ചിട്ടുണ്ട്**:
+- **കമ്പോണന്റ് ആർക്കിടെക്ചർ**: പുനരുപയോഗയോഗ്യമായ UI പാറ്റേണുകളും ടെംപ്ലേറ്റ് സിസ്റ്റങ്ങളും
+- **സ്റ്റേറ്റ് സിങ്ക്രണൈസേഷൻ**: URL സ്റ്റേറ്റ് മാനേജ്മെന്റും ബ്രൗസർ ഹിസ്റ്ററിയും
+- **ഇവന്റ്-ഡ്രിവൺ പ്രോഗ്രാമിംഗ്**: ഉപയോക്തൃ ഇടപെടൽ കൈകാര്യം ചെയ്യൽ, നാവിഗേഷൻ
+- **പെർഫോമൻസ് ഒപ്റ്റിമൈസേഷൻ**: കാര്യക്ഷമമായ DOM മാനിപ്പുലേഷനും ഉള്ളടക്കം ലോഡിംഗും
+- **ഉപയോക്തൃ അനുഭവ ഡിസൈൻ**: സ്മൂത്ത് ട്രാന്സിഷനുകളും ബുദ്ധിമുട്ടില്ലാത്ത നാവിഗേഷനും
+
+**അടുത്ത നില**: നിങ്ങൾ ആധുനിക ഫ്രണ്ട്എൻഡ് ഫ്രെയിംവർക്ക്സ്, ആധുനിക സ്റ്റേറ്റ് മാനേജ്മെന്റ്, അല്ലെങ്കിൽ സങ്കീർണ എന്റർപ്രൈസ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ സജ്ജമാണ്!
+
+🌟 **അഭിനന്ദനങ്ങൾ**: നിങ്ങൾ ആധുനിക വെബ് ആർക്കിടെക്ചർ പാറ്റേണുകളോടുകൂടിയ പ്രൊഫഷണൽ സിംഗിൾ-പേജ് ആപ്ലിക്കേഷൻ അടിസ്ഥാന രൂപപ്പെടുത്തിയിരിക്കുന്നു!
+
+---
+
+## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🚀
+
+എജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെയുള്ള വെല്ലുവിളി പൂരിപ്പിക്കുക:
+
+**വിവരണം:** ബാൻകിംഗ് ആപ്പ് മെച്ചപ്പെടുത്തുക, തെറ്റായ റൂട്ടുകൾക്കായി തകരാറുകൾ കൈകാര്യം ചെയ്യൽ, 404 പേജ് ടെംപ്ലേറ്റ് നടപ്പിലാക്കി, സാന്നിധ്യമില്ലാത്ത പേജുകളിലേക്ക് പോകുമ്പോൾ ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുക.
+
+**പ്രംപ്റ്റ്:** "not-found" ഐഡി ഉള്ള പുതിയ HTML ടെംപ്ലേറ്റ് സൃഷ്ടിക്കുക, ഉപയോഗിക്കാൻ സൗഹൃദപരമായ 404 പേജ് ശൈലി സഹിതം പ്രദർശിപ്പിയ്ക്കുന്നു. തുടർന്ന് ജാവാസ്ക്രിപ്റ്റ് റൂട്ടിങ് ലൊജിക് തിരുത്തി തെറ്റായ URL-കൾക്കായി ഈ ടെംപ്ലേറ്റ് കാണിക്കുക, "Go Home" ബട്ടൺ ചേർക്കുക, അത് ലോഗിൻ പേജിലേയ്ക്ക് തിരികെ നയിക്കും.
+
+[എജന്റ് മോഡ്](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) സംബന്ധിച്ച് കൂടുതൽ അറിയുക.
+
+## 🚀 വെല്ലുവിളി
+
+ഈ ആപ്പിന്റെ ക്രെഡിറ്റ്സ് കാണിക്കുന്ന മൂന്നാം പേജിനായി പുതിയ ടെംപ്ലേറ്റ്, റൂട്ടു ചേർക്കുക.
+
+**ചാലഞ്ച് ലക്ഷ്യങ്ങൾ:**
+- **പുതിയ HTML ടെംപ്ലേറ്റ് സൃഷ്ടിക്കുക** അനുയോജ്യമായ ഉള്ളടക്കം ഘടനയോടെ
+- **പുതിയ റൂട്ടു** നിങ്ങളുടെ റൂട്ടു കോൺഫിഗറേഷൻ ഒബ്ജക്റ്റിൽ ചേർക്കുക
+- **നാവിഗേഷൻ ലിങ്കുകൾ ഉൾപ്പെടുത്തുക** ക്രെഡിറ്റ്സ് പേജിലേക്കും അവിടെനിന്നും
+- **സാധുത പരിശോധിക്കുക** ബ്രൗസർ ഹിസ്റ്ററിയുമായി ശരിയായ നാവിഗേഷൻ
+
+## ലക്ചർ കഴിഞ്ഞു ക്വിസ്
+
+[ലക്ചർ കഴിഞ്ഞു ക്വിസ്](https://ff-quizzes.netlify.app/web/quiz/42)
+
+## അവലോകനവും സ്വയം പഠനവും
+
+റൂട്ടിങ് വെബ് ഡെവലപ്പ്മെന്റിലെ അത്ഭുതകരമായി സങ്കീർണമായ ഭാഗങ്ങളിലൊന്നാണ്, പ്രത്യേകിച്ചും വെബ് പേജിന്റെ റിഫ്രഷ് സ്വഭാവം സിംഗിൾ പേജ് ആപ്ലിക്കേഷനിലേക്ക് മാറുമ്പോൾ. [ആസ്യൂർ സ്റ്റാറ്റിക് വെബ് ആപ്പ് സേവനം റൂട്ടിങ് എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു](https://docs.microsoft.com/azure/static-web-apps/routes/?WT.mc_id=academic-77807-sagibbon) എന്നത് വായിക്കുക. ആ ഡോക്യുമെന്റിലെ ചില തീരുമാനങ്ങൾ എന്തുകൊണ്ട് ആവശ്യമാണ് എന്ന് വിശദീകരിക്കുവാൻ സാധിക്കുമോ?
+
+**കൂടുതൽ പഠന വിഭവങ്ങൾ:**
+- **പഠിക്കുക** React Router, Vue Router പോലുള്ള ജനപ്രിയ ഫ്രെയിംവർകുകൾ ക്ലയന്റ്-സൈഡ് റൂട്ടിങ് എങ്ങനെ നടപ്പിലാക്കുന്നു എന്ന്
+- **അന്വേഷിക്കുക** ഹാഷ്-ബേസ്ഡ് റൂട്ടിങും ഹിസ്റ്ററി API റൂട്ടിങും തമ്മിലുള്ള വ്യത്യാസങ്ങൾ
+- **ശിക്ഷിക്കുക** സെർവർ-സൈഡ് റെൻഡറിംഗിന്റെ (SSR) റൂട്ടിങ് നയങ്ങളിലെ സ്വാധീനം
+- **പഠിക്കുക** പ്രോഗ്രസ്സീവ് വെബ് ആപുകൾ (PWAs) റൂട്ടിങ്, നാവിഗേഷൻ എങ്ങനെ കൈകാര്യം ചെയ്യുന്നു
+
+## അസൈൻമെന്റ്
+
+[റൂട്ടിങ് മെച്ചപ്പെടുത്തുക](assignment.md)
+
+---
+
+
+**മൊഴിവാരം**:
+ഈ രേഖ AI വിവർത്തന സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തതാണ്. നാം ശരിതരം സാധിക്കുന്നതിനായി പരിശ്രമിക്കുന്നുവെങ്കിലും, സ്വയംഭരണ വിവർത്തനങ്ങളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാനിടയുള്ളതാണ്. മാനദണ്ഡപരമായ ഭാഷയിലാണ് യഥാർത്ഥ രേഖ നിലനിൽക്കുന്നത്. അത്യന്ത важാനമായ വിവരങ്ങൾക്കായി പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം നിർവഹിക്കുന്നതാണ് ശുപാർശ. ഈ വിവർത്തനം ഉപയോഗിച്ചതിലൂടെ ഉണ്ടായ ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾ അല്ലെങ്കിൽ തത്വമാറ്റങ്ങൾക്കായി ഞങ്ങൾ ഉത്തരവാദിത്വം വഹിക്കുന്നില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/7-bank-project/1-template-route/assignment.md b/translations/ml/7-bank-project/1-template-route/assignment.md
new file mode 100644
index 000000000..31d0523e0
--- /dev/null
+++ b/translations/ml/7-bank-project/1-template-route/assignment.md
@@ -0,0 +1,60 @@
+
+# റൂട്ടിംഗ് മെച്ചപ്പെടുത്തുക
+
+## നിർദ്ദേശങ്ങൾ
+
+നിങ്ങൾ അടിസ്ഥാന റൂട്ടിംഗ് സംവിധാനം നിർമാണം പൂർത്തിയാക്കിയിരിക്കുന്നു, ഇപ്പോൾ അത് ഉപഭോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുകയും മികച്ച ഡെവലപ്പർ ടൂൾസുകൾ നൽകുകയും ചെയ്യുന്ന പ്രൊഫഷണൽ ഫീച്ചറുകൾ ചേർത്തുകൊണ്ട് പ്രഗതി കൈക്കൊള്ളാൻ സമയം എത്തി. യഥാർത്ഥ ലോക അപ്ലിക്കേഷനുകൾക്ക് ഒരു ടെംപ്ലേറ്റ് മാറൽ മാത്രമല്ല, ഡൈനാമിക് പേജ് തലക്കെട്ടുകൾ, ലൈഫ്സൈക്കിൾ ഹൂക്കുകൾ, വിപുലമായ ആർക്കിടെക്ചറുകൾ എന്നിവ ആവശ്യമാണ്.
+
+ഈ അസൈൻമെന്റിൽ, നിർമ്മിത റൂട്ടിംഗ് ഇംപ്ലമെന്റേഷനിൽ സാധാരണ പ്രൊഡക്ഷൻ വെബ് അപ്ലിക്കേഷനുകളിൽ കാണപ്പെടുന്ന രണ്ട് മുഖ്യ ഫീച്ചറുകൾ ചേർക്കും. ഈ മെച്ചപ്പെടുത്തലുകൾ നിങ്ങളുടെ ബാങ്കിംഗ് ആപ്പ് കൂടുതൽ പ്രൊഫഷണലായി തോന്നുകയും ഭാവി ഫംഗ്ഷനാലിറ്റിക്ക് ഒരു അടിസ്ഥാനവും നൽകുകയും ചെയ്യും.
+
+റൂട്ടുകൾ പ്രഖ്യാപനത്തിൽ ഇപ്പോൾ ഉപയോഗിക്കാനുള്ള ടെംപ്ലേറ്റ് ഐഡി മാത്രമേ ഉണ്ടാകൂ. പക്ഷേ ഒരു പുതിയ പേജ് പ്രദർശിപ്പിക്കുമ്പോൾ.kannada ചില അധിക വിവരങ്ങൾ ആവശ്യമായേക്കാം. ഇരുവിഭാഗവും ചേർത്തുകൊണ്ട് നമ്മുടെ റൂട്ടിംഗ് പാലിക്കൽ മെച്ചപ്പെടുത്താം:
+
+### ഫീച്ചർ 1: ഡൈനാമിക് പേജ് തലക്കെട്ടുകൾ
+**വെല്ലുവിളി:** ഓരോ ടെംപ്ലേറ്റിനും തലക്കെട്ടുകൾ നൽകുക, ടെംപ്ലേറ്റ് മാറുമ്പോൾ വിൻഡോ തലക്കെട്ട് ഈ പുതിയ തലക്കെട്ടിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുക.
+
+**എന്തുകൊണ്ട് ഇത് മാത്രം:**
+- **ഉപഭോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുന്നു** വേർവിവരമുള്ള ബ്രൗസർ ടാബ് തലക്കെട്ടുകൾ കാണിച്ച്
+- **ആക്സസിബിലിറ്റി വർധിപ്പിക്കുന്നു** സ്ക്രീൻ റീഡർമാർക്കും സഹായകര സാങ്കേതിക വിദ്യകൾക്കും
+- **ഉത്തമമായ ബുക്ക്മാർകിംഗ്, ബ്രൗസർ ഹിസ്റ്ററി ഇടപെടലുകൾ നൽകുന്നു**
+- **പ്രൊഫഷണൽ വെബ് ഡെവലപ്പ്മെന്റ് മികച്ച രീതികളനുസരിക്കുന്നു**
+
+**ഇംപ്ലിമെന്റേഷൻ വീതി:**
+- **റൂട്ട്സ് ഒബ്ജക്ട് പരിധി വർദ്ധിപ്പിക്കുക** ഓരോ റൂട്ടിനും തലക്കെട്ട് വിവരങ്ങൾ ഉൾപ്പെടുത്തുക
+- **`updateRoute()` ഫംഗ്ഷൻ മാറ്റുക** ഡൈനാമിക് ആയി `document.title` അപ്ഡേറ്റ് ചെയ്യും
+- **ടീസ്റ്റുചെയ്യുക** സ്ക്രീനുകൾ മധ്യേ നാവിഗേറ്റ് ചെയ്താൽ തലക്കെട്ടുകൾ ശരിയായി മാറുന്നു എന്ന്
+
+### ഫീച്ചർ 2: റൂട്ടും ലൈഫ്സൈക്കിൾ ഹുക്കുകൾ
+**വെല്ലുവിളി:** ടെംപ്ലേറ്റ് മാറിയതിനു ശേഷം ചില കോഡ് എക്സിക്യൂട്ട് ചെയ്യാനുള്ള ഓപ്ഷൻ ചേർക്കുക. ഡെവലപ്പർ കോൺസോളിൽ ഓരോ തവണ ഡാഷ്ബോർഡ് പേജ് കാണുമ്പോഴും `'Dashboard is shown'` പ്രിന്റ് ചെയ്യണം.
+
+**എന്തുകൊണ്ട് ഇത് മാത്രം:**
+- **കസ്റ്റം ലജിക്ക് പ്രവർത്തിപ്പിക്കാൻ സഹായിക്കുന്നു** പ്രത്യേക റൂട്ടുകൾ ലോഡ് ചെയ്യുമ്പോൾ
+- **ആനലിറ്റിക്സ്, ലോഗിംഗ്, ഇൻഷ്യലൈസേഷൻ കോഡിനുള്ള ഹുക്കുകൾ നൽകുന്നു**
+- **കീഴിലെ കോംപ്ലക്സിറ്റി ഉള്ള റൂട്ടിങ് പെരുമാറ്റങ്ങൾക്കുള്ള നാമ്പ് സൃഷ്ടിക്കുന്നു**
+- **വെബ് ഡെവലപ്പ്മെന്റിലുള്ള ഓബ്സ്വർ പാറ്റേൺ കാണിക്കുന്നു**
+
+**ഇംപ്ലിമെന്റേഷൻ വീതി:**
+- **റൂട്ടിംഗ് കോൺഫിഗറേഷനുകളിൽ ഓപ്ഷണൽ കോൾബാക്ക് ഫംഗ്ഷൻ ചേർക്കുക**
+- **ടെംപ്ലേറ്റ് റേൻഡറിങ്ങ് കഴിഞ്ഞ് കോൾബാക്ക് ഫംഗ്ഷൻ എക്സിക്യൂട്ട് ചെയ്യുക (ഉണ്ടെങ്കിൽ)**
+- **കോൾബാക്ക് നിർവചിച്ചിരിക്കുന്ന ഏതൊരു റൂട്ടിനും ഈ ഫീച്ചർ പ്രവർത്തിക്കാൻ ഉറപ്പാക്കുക**
+- **ഡാഷ്ബോർഡ് സന്ദർശിക്കുമ്പോൾ കോൺസോളിൽ മെസേജ് കാണാനുണ്ടെന്ന് പരിശോദിക്കുക**
+
+## റുബ്രിക്
+
+| ക്രൈട്ടീരിയ | ഉത്തമം | നല്ലത് | മെച്ചപ്പെടുത്തേണ്ടത് |
+| -------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
+| | ഇരുവരും ഫീച്ചറുകളും വിജയംകരമായി പ്രവർത്തിക്കുന്നു. തലക്കെട്ടു, കോഡ് ചേർക്കൽ പുതിയ третьാം റൂട്ടിലും `routes` ഡിക്ലറേഷനിൽ ലഭ്യമാകുന്നു. | ഇരുവരും ഫീച്ചറുകൾ പ്രവർത്തിക്കുന്നു, പക്ഷേ അത് ഹാർഡ്കോഡായി മാത്രമേ ഉള്ളൂ; `routes` ഡിക്ലറേഷൻ വഴി കോൺഫിഗർ ചെയ്യാൻ കഴിയുന്നില്ല. മൂന്നാം റൂട്ടിൽ തലക്കെട്ട്, കോഡ് ചേർക്കൽ പൂർണമായും അല്ലെങ്കിൽ ഭാഗികമായി പ്രവർത്തിക്കുന്നില്ല. | ഒന്നാം ഫീച്ചർ ഇല്ലാത്തത് അല്ലെങ്കിൽ ശരിയായി പ്രവർത്തിക്കുന്നില്ല. |
+
+---
+
+
+**അസൂയാവാക്ക്**:
+ഈ രേഖ AI തര്ജ്ജമാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തര്ജ്ജമ ചെയ്തതാണ്. ഞങ്ങള് നിര്വ്വികാരതക്കും കൃത്യതക്കും പ്രയത്നം ചെയ്യും എങ്കിലും, ഓട്ടോമേറ്റഡ് തര്ജ്ജമയില് തെറ്റുകളോ അക്യുറസിയില്ലായ്മയോ ഉണ്ടായിരിക്കാന് സാധ്യതവുണ്ട്. സ്വദേശീയ ഭാഷയില് ഉള്ള അസ്തിത്വത്തിലുള്ള പകർപ്പ് പ്രാധാന്യത്തോടെ കാണണമെന്നും കരുതുക. പ്രധാനമായ വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ തര്ജ്ജമ ഉപയോഗിക്കണമെന്ന് ശിപാര്ശ ചെയ്യപ്പെടുന്നു. ഈ തര്ജ്ജമ ഉപയോഗിക്കുന്നതില്നിന്നുള്ള എളുപ്പമോ തെറ്റിദ്ധാരണയോ കാരണം ഞങ്ങൾക്ക് ഉത്തരവാദിത്വമില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/7-bank-project/2-forms/README.md b/translations/ml/7-bank-project/2-forms/README.md
new file mode 100644
index 000000000..0a51cb751
--- /dev/null
+++ b/translations/ml/7-bank-project/2-forms/README.md
@@ -0,0 +1,966 @@
+
+# ബാങ്കിങ് ആപ്പ് നിർമ്മിക്കുക ഭാഗം 2: ലോഗിൻ & രജിസ്ട്രേഷൻ ഫോർം നിർമ്മിക്കുക
+
+```mermaid
+journey
+ title നിങ്ങളുടെ ഫോം വികസന യാത്ര
+ section HTML അടിസ്ഥാനം
+ ഫോം ഘടകങ്ങൾ മനസ്സിലാക്കുക: 3: Student
+ ഇൻപുട്ട് തരം പഠിക്കുക: 4: Student
+ ആക്സസിബിലിറ്റിിട്ടിൽ പ്രാവിണ്യം നേടുക: 4: Student
+ section JavaScript സംയോജനം
+ ഫോം സമർപ്പണം കൈകാര്യം ചെയ്യുക: 4: Student
+ AJAX സംവാദം നടപ്പിലാക്കുക: 5: Student
+ സെർവർ പ്രതികരണങ്ങൾ പ്രോസസ്സ് ചെയ്യുക: 5: Student
+ section പരിശോധനാ സംവിധാനങ്ങൾ
+ ബഹുസ്വര പരിശോധന നിർമ്മിക്കുക: 5: Student
+ ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുക: 5: Student
+ ഡാറ്റയുടെ അഖണ്ഡത ഉറപ്പുവരുത്തുക: 5: Student
+```
+## പ്രീ-ലെക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/43)
+
+ഓൺലൈനിൽ ഫോർം പൂരിപ്പിച്ച് നിങ്ങളുടെ ഇമെയിൽ ഫോർമാറ്റ് തള്ളി മറികടന്നിട്ടുണ്ടോ? അല്ലെങ്കിൽ സബ്മിറ്റ് കണ്ണി അമർത്തിയപ്പോഴെല്ലാ വിവരങ്ങളും നഷ്ടപ്പെട്ടിട്ടുണ്ടോ? ഇവിടെയുണ്ട് നാം എല്ലാവരും നേരിട്ട അനുഭവങ്ങൾ.
+
+ഫോർമുകൾ നിങ്ങളുടെ ഉപയോക്താക്കളും ആപ്പിന്റെ പ്രവർത്തനങ്ങളും തമ്മിലുള്ള പാലമാണ്. വിമാനങ്ങളെത്തന്നെ സുരക്ഷിതമായി അവരുടെ ലക്ഷ്യസ്ഥാനത്തേക്ക് നയിക്കുന്ന വിമാന നിയന്ത്രകർ പോലുള്ള ചികിത്സാനിയമങ്ങൾ പോലെയാണ് നന്നായി രൂപകല്പ്പന ചെയ്ത ഫോറങ്ങൾ വ്യക്തമായ പ്രതികരണം നൽകുകയും ചെലവേറിയ പിഴവുകൾ തടയുകയും ചെയ്യുന്നത്. മോശമായ ഫോർമുകൾ, മറുവശത്ത്, തിരക്കുള്ള വിമാനത്താവളത്തിലെ തെറ്റായ ആശയവിനിമയത്തേക്കാൾ വേഗം ഉപയോക്താക്കളെ വിട്ടുമാറാൻ തുടങ്ങിയേക്കാം.
+
+ഈ പാഠത്തിൽ, നിങ്ങളുടെ സ്റ്റാറ്റിക് ബാങ്കിങ് ആപ്പിനെ ഇന്ററാക്ടീവ് ആപ്പായി മാറ്റാം. ഉപയോക്തൃ ഇൻപുട്ട് വാലിഡേറ്റ് ചെയ്യുന്ന, സർവറുകളുമായി സംവദിക്കുന്ന, സഹായകരമായ പ്രതികരണം നൽകുന്ന ഫോർമുകൾ നിർമ്മിക്കാൻ പഠിക്കാം. ഇതിനെ നിങ്ങളുടെ ആപ്പിന്റെ ഫീച്ചറുകൾ നയിക്കാൻ ഉപയോക്താക്കളെ സഹായിക്കുന്ന കൺട്രോൾ ഇന്റർഫേസ് നിർമ്മിക്കുന്നതെന്ന് കരുതുക.
+
+അവസാനത്തോടെ, വിജയത്തിനായി ഉപയോക്താക്കളെ മാന്ദ്യമാക്കാതെ നയിക്കുന്ന ഒരു പൂർത്തിയായ ലോഗിൻ & രജിസ്ട്രേഷൻ സിസ്റ്റം വാലിഡേഷൻ സഹിതം ഉണ്ടാകുമെന്ന് ഉറപ്പുവരുത്താം.
+
+```mermaid
+mindmap
+ root((ഫോം വികസനം))
+ HTML Foundation
+ Semantic Elements
+ Input Types
+ Accessibility
+ Label Association
+ User Experience
+ Validation Feedback
+ Error Prevention
+ Loading States
+ Success Messaging
+ JavaScript Integration
+ Event Handling
+ AJAX Communication
+ Data Processing
+ Error Management
+ Validation Layers
+ HTML5 Validation
+ Client-side Logic
+ Server-side Security
+ Progressive Enhancement
+ Modern Patterns
+ Fetch API
+ Async/Await
+ Form Data API
+ Promise Handling
+```
+## മുൻകൂട്ടി ആവശ്യശേഷികൾ
+
+ഫോർമുകൾ നിർമ്മിക്കുന്നതിനു മുൻപ്, നിങ്ങൾക്ക് എല്ലാ ഘടകങ്ങളും ശരിയായി സജ്ജീകരിച്ചിട്ടുണ്ടോ എന്ന് ഉറപ്പാക്കാം. ഈ പാഠം മുൻ പാഠത്തിൽ നിന്ന് തുടരുമെങ്കിൽ, നിങ്ങൾ മുന്നോട്ട് പോയെങ്കിൽ ആദ്യം അടിസ്ഥാനങ്ങൾ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക.
+
+### ആവശ്യമായ സജ്ജീകരണം
+
+| ഘടകം | സ്ഥിതി | വിവരണം |
+|-----------|--------|-------------|
+| [HTML ടെംപ്ലേറ്റുകൾ](../1-template-route/README.md) | ✅ ആവശ്യമായതം | നിങ്ങളുടെ അടിസ്ഥാന ബാങ്കിങ് ആപ്പ് ഘടന |
+| [Node.js](https://nodejs.org) | ✅ ആവശ്യമാണ് | സർവർക്ക് ജാവാസ്ക്രിപ്റ്റ് റൺടൈം |
+| [ബാങ്ക് API സർവർ](../api/README.md) | ✅ ആവശ്യമായത് | ഡാറ്റാ സ്റ്റോറേജിന് ബാക്ക്എൻഡ് സേവനം |
+
+> 💡 **ഡവലപ്പ്മെന്റ് ടിപ്പ്**: നിങ്ങൾ ഒരേസമയം രണ്ട് വേർതിരിച്ച സർവറുകൾ ഓടിക്കുന്നുണ്ട് – ഫ്രണ്ട് എന്റിനായി ഒരു ബാങ്കിങ് ആപ്പ്, ബാക്ക്എൻഡ് API-ക്കായി മറ്റുഒന്ന്. ഇത് യാഥാർത്ഥ്യവൽക്കരണ ഘടനയെ അനുകരിക്കുന്നു, ഫ്രണ്ട്എന്റ് & ബാക്ക്എൻഡ് സേവനങ്ങൾ സ്വതന്ത്രമായി പ്രവർത്തിക്കുമ്പോൾ.
+
+### സർവർ కాన്ഫിഗറേഷൻ
+
+**നിങ്ങളുടെ ഡവലപ്പ്മെന്റ് പരിസ്ഥിതി ഉൾപ്പെടുന്നത്:**
+- **ഫ്രണ്ട്എൻഡ് സർവർ**: നിങ്ങളുടെ ബാങ്കിങ് ആപ്പ് സേവനം (പൊതുയായി പോർട്ട് `3000`)
+- **ബാക്ക്എൻഡ് API സർവർ**: ഡാറ്റാ സംഭരണം & പുനരധിപതനം (പോർട്ട് `5000`)
+- **ഇരുവർഗവും** സങ്കടങ്ങളില്ലാതെ ഒരുപോലെ പ്രവർത്തിക്കാവുന്നവ
+
+**നിങ്ങളുടെ API കണക്ഷൻ ടെസ്റ്റ് ചെയ്യുക:**
+```bash
+curl http://localhost:5000/api
+# പ്രതീക്ഷിച്ച പ്രതിക്കരണം: "ബാംക് API v1.0.0"
+```
+
+**API പതിപ്പിന്റെ പ്രതികരണം കാണുകയാണെങ്കിൽ, നിങ്ങൾ മുന്നോട്ട് പോകാൻ തയ്യാറാണ്!**
+
+---
+
+## HTML ഫോമുകളും കൺറോളുകളും മനസിലാക്കുക
+
+HTML ഫോമുകൾ നിങ്ങളുടെ വെബ് ആപ്പുമായി ഉപയോക്താക്കൾ എങ്ങനെ സംവദിക്കുന്നു എന്നതാണ്. 19-ാം നൂറ്റാണ്ടിലെ ടെലിഗ്രാഫ് സംവിധാനത്തിന് സമാനമാണ് – ഉപയോക്തൃ ഉദ്ദേശവും ആപ്പ് പ്രതികരണവും തമ്മിലുള്ള ആശയവിനിമയ പ്രോട്ടോക്കോൾ. ചിന്താപൂർവം രൂപകല്പ്പന ചെയ്താൽ, പിഴവുകൾ പിടികൂടുന്നു, ഇൻപുട്ട് ഫോർമാറ്റിംഗ് നയിക്കുന്നു, സഹായക നിർദേശങ്ങൾ നൽകുന്നു.
+
+ആധുനിക ഫോമുകൾ അടിസ്ഥാന ടെക്സ്റ്റ് ഇൻപുട്ടുകളേക്കാൾ സങ്കീർണമാണ്. HTML5 വൈശിഷ്ട്യമർന്ന ഇൻപുട്ട് തരം പരിചയപ്പെടുത്തിയത് - ഇമെയിൽ വാലിഡേഷൻ, നമ്പർ ഫോർമാറ്റിംഗ്, തീയതി തിരഞ്ഞെടുപ്പു തുടങ്ങി സ്വതന്ത്രമായി കൈകാര്യം ചെയ്യുന്നു. ഈ വികസനങ്ങൾ ആക്സസിബിലിറ്റിക്കും മൊബൈൽ ഉപയോഗ അനുഭവങ്ങൾക്കും ഗുണകരമാണ്.
+
+### അനിവാര്യമായ ഫോർം ഘടകങ്ങൾ
+
+**ഓരോ ഫോമിനും ആവശ്യമായ കെട്ടുകെട്ട് ഘടകങ്ങൾ:**
+
+```html
+
+
+```
+
+**ഈ കോഡ് ചെയ്യുന്നത്:**
+- **ഒരിക്കൽപ്പെടുത്തുന്നു** പ്രത്യേക ഐഡിയിൽ ഫോർം കണ്ടെയ്നർ
+- **വ്യക്തമാക്കുന്നു** ഡാറ്റ സമർപ്പിക്കാൻ HTTP մեթഡ്
+- **ബന്ധിപ്പിക്കുന്നു** ലേബലുകൾ ഇൻപുട്ടുകൾക്കൊപ്പം ആക്സസിബിലിറ്റിക്ക്
+- **നിർവഹിക്കുന്നു** ഫോർം പ്രോസസ്സ് ചെയ്യാനുള്ള സബ്മിറ്റ് ബട്ടൺ
+
+### ആധുനിക ഇൻപുട്ട് തരം & കഴിവുകൾ
+
+| ഇൻപുട്ട് തരം | ഉപയോഗം | ഉദാഹരണം |
+|------------|---------|---------------|
+| `text` | പൊതുവായ ടെക്സ്റ്റ് എൻട്രി | ` ` |
+| `email` | ഇമെയിൽ പരിശോധന | ` ` |
+| `password` | മറഞ്ഞ ടെക്സ്റ്റ് എൻട്രി | ` ` |
+| `number` | സംഖ്യ ഇൻപുട്ട് | ` ` |
+| `tel` | ഫോൺ നമ്പറുകൾ | ` ` |
+
+> 💡 **ആധുനിക HTML5 പ്രയോജനം**: പ്രത്യേക ഇൻപുട്ട് തരം ഉപയോഗിക്കുന്നത് സ്വയം വാലിഡേഷൻ, അനുയോജ്യമായ മൊബൈൽ കീബോർഡ്, മികച്ച ആക്സസിബിലിറ്റി പിന്തുണ നൽകുന്നു, അധിക ജാവാസ്ക്രിപ്റ്റ് ഇല്ലാതെ!
+
+### ബട്ടൺ തരം & പ്രവർത്തനം
+
+```html
+
+Save Data
+Clear Form
+Custom Action
+```
+
+**ബട്ടൺ തരം ചെയ്യുന്നത്:**
+- **സബ്മിറ്റ് ബട്ടണുകൾ**: ഫോർം സമർപ്പനം ട്രിഗർ ചെയ്യുക, ഡാറ്റ എൻഡ്പോയിന്റിലേക്ക് അയയ്ക്കുക
+- **റിസെറ്റ് ബട്ടണുകൾ**: എല്ലാ ഫീൽഡുകളും ആദ്യം നിലയിലേക്ക് വീണ്ടെടുക്കുക
+- **രേദി ബട്ടണുകളും**: രീതി ഇല്ലാതെ പ്രവർത്തിച്ച്കാരണം കസ്റ്റം ജാവാസ്ക്രിപ്റ്റ് ആവശ്യമാണ്
+
+> ⚠️ **പ്രധാന കുറിപ്പ്**: ` ` ഒരു സ്വയം അടയ്ക്കുന്ന ഘടകമാണ്, ക്ലോസിംഗ് ടാഗ് ആവശ്യമില്ല. ആധുനിക ശൈലി ` ` ഇത്തരമാണ് എഴുതുന്നത്, സ്ളാഷ് ഇല്ലാതെ.
+
+### ലോഗിൻ ഫോർം നിർമ്മാണം
+
+ഇപ്പോൾ ആധുനിക HTML ഫോർം പ്രാക്ടിസുകൾ പ്രദർശിപ്പിക്കുന്ന പ്രായോഗിക ലോഗിൻ ഫോമിനെ ഉണ്ടാക്കാം. അടിസ്ഥാന ഘടനയിൽ തുടക്കി ആക്സസിബിലിറ്റി സവിശേഷതകളും വാലിഡേഷനും കൂട്ടിച്ചേർക്കാം.
+
+```html
+
+ Bank App
+
+
+```
+
+**ഇവിടെ സംഭവിക്കുന്നത്:**
+- **ഘടിപ്പിക്കുന്നു** സെമാന്റിക് HTML5 ഘടകങ്ങളെ കൈകാര്യം ചെയ്ത് ഫോർം അടിച്ചതായി
+- **ഗ്രൂപ്പുചെയ്യുന്നു** പ്രസക്തമായ ഘടകങ്ങൾ `div` കണ്ടെയ്നർ ക്ലാസ്സുകൾ ഉപയോഗിച്ച്
+- **ബന്ധിപ്പിക്കുന്നു** ലേബലുകളും ഇൻപുട്ടുകളും `for` & `id` ഉപയോഗിച്ച്
+- **ചേർക്കുന്നു** ആധുനിക ഗുണങ്ങൾ പോലെ `autocomplete`, `placeholder` മെച്ചപ്പെട്ട UX നു
+- **ഉള്ളടക്കുന്നു** `novalidate` ബ്രൗസർ ഡിഫോൾട്ട് മാറ്റി ജാവാസ്ക്രിപ്റ്റ് വാ്ലിഡേഷൻ നടത്താൻ
+
+### ശരിയായ ലേബലുകളുടെ ശക്തി
+
+**ആധുനിക വെബ് വികസനത്തിൽ ലേബലുകൾ എന്തുകൊണ്ട് പ്രധാനം:**
+
+```mermaid
+graph TD
+ A[ലേബൽ ഘടകം] --> B[സ്ക്രീൻ റീഡർ പിന്തുണ]
+ A --> C[ക്ലിക്ക് ലക്ഷ്യം വിപുലീകരണം]
+ A --> D[ഫോം പരിശ്രമം]
+ A --> E[എസ്ഇഒ ഗുണങ്ങൾ]
+
+ B --> F[എല്ലാ ഉപയോക്താക്കൾക്കും ലഭ്യമായ]
+ C --> G[മികച്ച മൊബൈൽ അനുഭവം]
+ D --> H[വ്യക്തമായ പിഴവ് സന്ദേശം]
+ E --> I[മികച്ച തിരച്ചിൽ റാങ്കിംഗ്]
+```
+**ശ്രദ്ധയോടെ ലേബലുകൾ നൽകുന്നത് ചെയ്യുന്നത്:**
+- **സ്ക്രീൻ റീഡറുകൾക്ക്** ഫോർം ഫീൽഡുകൾ മികച്ച രീതിയിൽ പ്രഖ്യാപിക്കാൻ
+- **ക്ലിക്കു പരിധി** വർദ്ധിപ്പിക്കുന്നു (ലേബൽ ക്ലിക്കുചെയ്യുമ്പോൾ ഇൻപുട്ടിൽ ഫോകസ്)
+- **മൊബൈൽ ഉപയോഗം മെച്ചപ്പെടുത്തി** കൂടുതൽ ടച്ച് ടാർഗെറ്റുകൾ നൽകുന്നു
+- **ഫോർം വാലിഡേഷൻ** സൗകര്യപ്രദം പിഴവ് സന്ദേശങ്ങളോടൊപ്പം
+- **SEO മെച്ചപ്പെടുത്തുന്നു** ഫോർം ഘടകങ്ങളിൽ സെമാന്റിക് അർത്ഥം നൽകിയും
+
+> 🎯 **ആക്സസിബിലിറ്റി ലക്ഷ്യം**: എല്ലാ ഫോർം ഇൻപുട്ടിനും അനുബന്ധമായ ലേബൽ വേണം. ഈ ലളിതമായ പാടവ് എല്ലാ ഉപയോക്താക്കൾക്കും, വിവിധ കഴിവുകൾ ഉള്ളവർക്കും നിങ്ങളുടെ ഫോമുകൾ പ്രയോജനപ്രദമാക്കും, അനുഭവം മെച്ചപ്പെടുത്തും.
+
+### രജിസ്ട്രേഷൻ ഫോർം നിർമ്മാണം
+
+പൂർണ്ണ ഉപയോക്തൃ അക്കൗണ്ട് സൃഷ്ടിക്കുവാൻ രജിസ്ട്രേഷൻ ഫോർത്തിൽ കൂടുതൽ വിശദ വിവരങ്ങൾ ആവശ്യമാണ്. മുഖ്യ ആധുനിക HTML5 സവിശേഷതകളും വളർത്തിയ ആക്സസിബിലിറ്റി സവിശേഷതകളും ഉൾപ്പെടുത്താം.
+
+```html
+
+Register
+
+```
+
+**ഇവിടെ ചെയ്തു:**
+- **ഫീൽഡുകൾ** ഓരോന്നും കണ്ടെയ്നർ ഡിവുകളിൽ ക്രമീകരിച്ച് മെച്ചപ്പെട്ട ലേ ഔട്ടിനായി
+- **ഉപയോഗിച്ചു** അനുയോജ്യമായ `autocomplete` ബ്രൗസർ ഓട്ടോഫിൽ പിന്തുണയ്ക്ക്
+- **ഉൾപ്പെടുത്തിയ** ഉപയോക്തൃ ഇൻപുട്ട് നയിക്കാൻ ഉപകാരപ്രദമായ പ്ലേര്ഹോൾഡർ ടെക്സ്റ്റ്
+- **നൽകി** യുക്തിപരമായ ഡീഫോൾറ്റ് മൂല്യം `value` ഉപയോഗിച്ച്
+- **പ്രയോഗിച്ചു** വാലിഡേഷൻ പ്രവർത്തനങ്ങൾ `required`, `maxlength`, `min`
+- **ഉപയോഗിച്ചു** ബേലൻസ് ഫീൽഡിനായ `type="number"` ഇൽ ഡെസിമൽ പിന്തുണ കൂടെ
+
+### ഇൻപുട്ട് തരം & പ്രവർത്തനം വിശകലനം
+
+**ആധുനിക ഇൻപുട്ട് തരം കൂടുതൽ കഴിവുകൾ നൽകുന്നു:**
+
+| സവിശേഷത | പ്രയോജനം | ഉദാഹരണം |
+|---------|---------|----------|
+| `type="number"` | മൊബൈൽ സംഖ്യ കീബോർഡ് | ലളിതമായ ബാലൻസ് ഇൻപുട്ടിലേക്ക് |
+| `step="0.01"` | ഡെസിമൽ നിർണ്ണയം | കറൻസിയിൽ സെന്റുകൾ അനുവദിക്കുന്നു |
+| `autocomplete` | ബ്രൗസർ ഓട്ടോഫിൽ | ഫോമുകൾ വേഗത്തിൽ പൂരിപ്പിക്കാൻ |
+| `placeholder` | പ്രസ്താവനാത്മക സൂചനകൾ | ഉപയോക്താവിന്റെ പ്രതീക്ഷകൾ നയിക്കുന്നു |
+
+> 🎯 **ആക്സസിബിലിറ്റി വെല്ലുവിളി**: ഫോമകൾ കീബോർഡ് മാത്രം ഉപയോഗിച്ച് സംവഹിക്കാൻ ശ്രമിക്കുക! `Tab` ഉപയോഗിക്കുക ഫീൽഡുകൾക്കിടയിൽ പോകാൻ, `Space` ബോക്സുകൾ പരിശോധിക്കാൻ, `Enter` സമർപ്പിക്കാൻ. ഇത് സ്ക്രീൻ റീഡർ ഉപയോക്താക്കൾ ഫോമുകൾക്ക് എങ്ങനെ സമീപിക്കുന്നു എന്ന് മനസ്സിലാക്കാൻ സഹായിക്കും.
+
+### 🔄 **ഫലിതപരമായ പരിശോധന**
+**ഫോം അടിസ്ഥാന سمجھല്:**
+ജാവാസ്ക്രിപ്റ്റ് പ്രവർത്തിപ്പിക്കാതെ മുൻപ് ഉറപ്പാക്കുക:
+- ✅ സെമാന്റിക് HTML ആക്സസിബിള് ഫോമുകൾ സൃഷ്ടിക്കുന്നു
+- ✅ ഇൻപുട്ട് തരം മൊബൈൽ കീബോർഡ് & വാലിഡേഷന് പ്രാധാന്യം
+- ✅ ലേബലുകളും ഫോർം കൺട്രോളുകളും ബന്ധം
+- ✅ ഫോർം അറ്റ്രിബ്യൂട്ടുകൾ ബ്രൗസർ ഡിഫോൾട്ട് പ്രവർത്തനത്തെ എങ്ങനെ ബാധിക്കുന്നു
+
+**ത്വരിത സ്വയം പരിശോദനം**: ജാവാസ്ക്രിപ്റ്റ് ഇല്ലാതെ ഫോർം സമർപ്പിച്ചാൽ എന്ത് സംഭവിക്കും?
+*ഉത്തരം: ബ്രൗസർ ഡിഫോൾട്ട് സമർപ്പണം നടത്തും, സാധാരണയായി ആക്ഷൻ URL-ൽ റീഡയറക്ട് ചെയ്യും*
+
+**HTML5 ഫോർം ഗുണങ്ങൾ**:
+- **അകമ്പടി വാലിഡേഷൻ**: സ്വതന്ത്ര ഇമെയിൽ & നമ്പർ ഫോർമാറ്റ് പരിശോധന
+- **മൊബൈൽ സൗഹൃദം**: അനുസൃത കീബോർഡുകൾ
+- **ആക്സസിബിലിറ്റി**: സ്ക്രീൻ റീഡർ പിന്തുണ & കീബോർഡ് നയനം
+- **പ്രോഗ്രസീവ് എൻഹാൻസ്മെന്റ്**: ജാവാസ്ക്രിപ്റ്റ് ഇല്ലാതെ പോലും പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്നത്
+
+## ഫോർം സമർപ്പിക്കൽ രീതികൾ മനസിലാക്കുക
+
+ആയിരിക്കും അടുത്തുള്ളപ്പോൾ, അപേക്ഷ ഫോർം പൂരിപ്പിച്ച് സബ്മിറ്റ് ചെയ്തപ്പോൾ, ആ ഡാറ്റ എവിടെ പോകുന്നു – സാധാരണയായി ഒരു സർവറിലേക്ക് പോകും, അത് ഡാറ്റയെ സംരക്ഷിക്കുന്നു. ഇത് വിവിധ രീതികളിൽ നടക്കാം, ശരിയായ ഒരു വഴిని തിരഞ്ഞെടുക്കുന്നത് ഭാവിയിൽ സുഖകരമാക്കും.
+
+സബ്മിറ്റ് ബട്ടൺ ഞെക്കുമ്പോൾ എന്ത് സംഭവിക്കുന്നു എന്ന് നോക്കാം.
+
+### ഡിഫോൾട്ട് ഫോർം പ്രവർത്തനം
+
+ആദ്യം, അടിസ്ഥാന ഫോർം സമർപ്പണം എന്ത് സംഭവിക്കുന്നു എന്നും നോക്കുക:
+
+**നിങ്ങളുടെ നിലവിലെ ഫോമുകൾ പരീക്ഷിക്കുക:**
+1. നിങ്ങളുടെ ഫോമിൽ *Register* ബട്ടൺ അമർത്തുക
+2. ബ്രൗസറിന്റെ അഡ്രസ് ബാറിലെ മാറ്റം ശ്രദ്ധിക്കുക
+3. പേജ് റീലോഡ് ആകുകയും URL-ൽ ഡാറ്റ കാണപ്പെടുകയും ചെയ്യുന്നുവെന്ന് ശ്രദ്ധിക്കുക
+
+
+
+### HTTP മെഥഡുകൾ താരതമ്യം
+
+```mermaid
+graph TD
+ A[ഫോം സമർപ്പിക്കൽ] --> B{HTTP രീതി}
+ B -->|GET| C[URL-ൽ ഡാറ്റ]
+ B -->|POST| D[അർജിത ദേഹം ഡാറ്റ]
+
+ C --> E[അഡ്രസ് ബാറിൽ കാണപ്പെടുന്നു]
+ C --> F[പരിമിത ഡാറ്റ വലുപ്പം]
+ C --> G[ബുക്ക്മാർക്കുചെയ്യാവുന്നത്]
+
+ D --> H[URL-ൽ നിന്ന് മറച്ചുകാഷ്]
+ D --> I[വലിയ ഡാറ്റ ശേഷി]
+ D --> J[കൂടുതൽ സുരക്ഷിതം]
+```
+**വ്യത്യാസങ്ങൾ മനസ്സിലാക്കുക:**
+
+| മെഥഡ് | ഉപയോഗം | ഡാറ്റ സ്ഥലം | സുരക്ഷാ നില | വലിപ്പ പരിധി |
+|--------|----------|---------------|----------------|-------------|
+| `GET` | തിരയൽ, ഫിൽറ്ററുകൾ | URL പാരാമീറ്ററുകൾ | താഴ്ന്നത് (കാണാവുന്നത്) | ~2000 അക്ഷരങ്ങൾ |
+| `POST` | ഉപയോക്തൃ അക്കൗണ്ടുകൾ, സംവേദനാത്മക ഡാറ്റ | അഭ്യർത്ഥന ശരീരം | ഉയർന്നത് (മറഞ്ഞത്) | യഥാർത്ഥപരിധിയില്ല |
+
+**പ്രധാന വ്യത്യാസങ്ങൾ:**
+- **GET**: ഫോർം ഡാറ്റ URL ക്വറി പാരാമീറ്ററുകളായി ചേർക്കുന്നു (തിരയൽ പ്രക്രിയകൾക്ക് അനുയോജ്യം)
+- **POST**: ഡാറ്റ അന്വേഷണം ശരീരത്തിലേക്ക് ഉൾക്കൊള്ളുന്നു (സർവേദനാത്മക വിവരങ്ങൾക്ക് പ്രധാനമാണ്)
+- **GET-ന് പരിമിതികൾ**: വലിപ്പ പരിധി, കാഴ്ച, ബ്രൗസർ ചരിത്രം
+- **POST-ന് ആനുകൂല്യങ്ങൾ**: വലിയ ഡാറ്റ കൈകാര്യം ചെയ്യൽ, സ്വകാര്യത, ഫയൽ അപ്ലോഡ് പിന്തുണ
+
+> 💡 **മിക്കവ് നല്ലതാകേണം**: തിരയൽ ഫോമുകൾക്ക് GET ഉപയോഗിക്കുക (ഡാറ്റ ഉയർത്തൽ), രജിസ്ട്രേഷൻ, ലോഗിൻ തുടങ്ങിയതിനായി POST ഉപയോഗിക്കുക.
+
+### ഫോർം സമർപ്പിക്കൽ ക്രമീകരിക്കൽ
+
+നിങ്ങളുടെ രജിസ്ട്രേഷൻ ഫോർം POST മെഥഡ് ഉപയോഗിച്ച് ബാക്ക്എൻഡ് API-യുമായി ശരിയായി ആശയവിനിമയം നടത്തും രീതിയിൽ ക്രമീകരിക്കാം:
+
+```html
+
+```
+
+**വർദ്ധിപ്പിച്ച സാധുത പരിശോധനിന്റെ മനസ്സിലാക്കൽ:**
+- **ആവശ്യമായ ഫീൽഡ് സൂചനകളുമായി** സംയോജിപ്പിക്കുന്നു
+- **ഫോർമാറ്റ് സാധുതക്കായി** `pattern` ആട്രിബ്യൂട്ടുകൾ ഉൾപ്പെടുത്തുന്നു
+- **ആക്സസിബിലിറ്റി, ടൂൾടിപ്പുകൾക്കായി** `title` ആട്രിബ്യൂട്ടുകൾ നൽകുന്നു
+- **ഉപയോക്തൃ ഇൻപുട്ട് വഴി പിന്തുണയ്ക്കാൻ** സഹായക വാചകം ചേർക്കുന്നു
+- **മികച്ച ആക്സസിബിലിറ്റിക്ക്** സെമാന്റിക് HTML ഘടന ഉപയോഗിക്കുന്നു
+
+### ഉയർന്ന നിലവാരത്തിലുള്ള സാധുത പരിശോധന നിയമങ്ങൾ
+
+**പ്രത്യേകമുള്ള സാധുത നിയമങ്ങൾ എന്തു നടത്തുന്നു:**
+
+| ഫീൽഡ് | സാധുത നിയമങ്ങൾ | ഉപയോക്തൃ ഗുണം |
+|-------|------------------|--------------|
+| യൂസർനെയിം | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | ശരിയായ, പ്രത്യേകം തിരിച്ചറിയാവുന്ന ഐഡന്റിഫയർ ഉറപ്പാക്കുന്നു |
+| കറൻസി | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | സാധാരണ കറൻസി ചിഹ്നങ്ങൾ സ്വീകരിക്കുന്നു |
+| ബാലൻസ് | `min="0"`, `step="0.01"`, `type="number"` | നെഗറ്റീവ് ബാലൻസ് തടയുന്നു |
+| വിവരണം | `maxlength="100"` | യുക്തമായ നീള പരിധി |
+
+### സാധുത പരിശോധന പെരുമാറ്റം പരീക്ഷിക്കുക
+
+**പരീക്ഷണങ്ങൾക്ക്:**
+1. **അപൂർണ്ണ ആവശ്യമായ ഫീൽഡുകൾ ഉള്ള രൂപം സബ്മിറ്റ് ചെയ്യു**
+2. **3 അക്ഷരങ്ങൾക്കു താഴെയുള്ള യൂസർനെയിം നൽകുക**
+3. **യൂസർനെയിം ഫീൽഡിൽ പ്രത്യേക ചിഹ്നങ്ങൾ ഉപയോഗിക്കാൻ ശ്രമിക്കുക**
+4. **നെഗറ്റീവ് ബാലൻസ് നൽകുക**
+
+
+
+**നിങ്ങൾ കാണുന്നതെന്താണെന്ന്:**
+- **ബ്രൗസർ സ്വതന്ത്ര സാധുത സന്ദേശങ്ങൾ പ്രദർശിപ്പിക്കുന്നു**
+- **`:valid` കോളും `:invalid` അധിഷ്ഠിതമായ സ്റ്റൈലിംഗ് മാറ്റങ്ങൾ**
+- **സകല സാധുതകൾ പാസ്സാകുന്നതുവരെ ഫോർം സബ്മിഷൻ തടയുന്നു**
+- **സ്വയം ഫോക്കസ് ആദ്യം തെറ്റായ ഫീൽഡിലേയ്ക്ക് മാറുന്നു**
+
+### ക്ലയന്റ്-സൈഡ് vs സെർവർ-സൈഡ് സാധുത പരിശോധന
+
+```mermaid
+graph LR
+ A[ക്ലയന്റ്-സൈഡ് වලിഡേഷന്] --> B[തത്സമയ ഫീഡ്ബാക്ക്]
+ A --> C[ഉത്തമ UX]
+ A --> D[സര്വര് ലോഡ് കുറവ്]
+
+ E[സര്വര്-സൈഡ് വെരിഫിക്കേഷന്] --> F[സുരക്ഷ]
+ E --> G[ഡേറ്റാ സമഗ്രത]
+ E --> H[ബിസിനസ് നിയമങ്ങള്]
+
+ A -.-> I[രണ്ടും ആവശ്യമാണ്]
+ E -.-> I
+```
+**രണ്ടു പാളികളും ആവശ്യമായ കാരണം:**
+- **ക്ലയന്റ്-സൈഡ് സാധുത പരിശോധന**: ഉടൻ പ്രതികരണം നൽകുന്നു, ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്തുന്നു
+- **സെർവർ-സൈഡ് സാധുത പരിശോധന**: സുരക്ഷ ഉറപ്പാക്കുകയും സങ്കീർണ്ണ ബിസിനസ് നിയമങ്ങൾ കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു
+- **കൂട്ടിച്ചേർത്ത സമീപനം**: ശക്തമായ, ഉപയോക്തൃ സൗഹൃദമുള്ള, സുരക്ഷിത ആപ്ലിക്കേഷനുകൾ സൃഷ്ടിക്കുന്നു
+- **പ്രോഗ്രസീവ് എൻഹാൻസ്മെന്റ്**: ജാവാസ്ക്രിപ്റ്റ് അപ്രാപ്യമാകുമ്പോഴും പ്രവർത്തിക്കുന്നു
+
+> 🛡️ **സുരക്ഷാ ഓർമപ്പെടുത്തൽ**: ക്ലയന്റ്-സൈഡ് സാധുത പരിശോധനം മാത്രം എപ്പോഴും വിശ്വസിക്കരുത്! ഒറ്റപ്പാടുള്ളർ ഈ പരിശോധനകൾ മറികടക്കാമെന്ന് അറിയണം, അക്കാര്യത്തിൽ സുരക്ഷയ്ക്ക് സെർവർ-പക്ഷം സാധുത പരിശോധന നിർണ്ണായകം.
+
+### ⚡ **അടുത്ത 5 മിനിറ്റിൽ നിങ്ങൾ ചെയ്യാവുന്നത്**
+- [ ] നിങ്ങളുടെ ഫോം തെറ്റായ ഡാറ്റയോടെ ടെസ്റ്റ് ചെയ്ത് സാധുത സന്ദേശങ്ങൾ കണ്ടു നോക്കുക
+- [ ] ജാവാസ്ക്രിപ്റ്റ് അപ്രാപ്യമാക്കി ഫോം സബ്മിറ്റ് ചെയ്ത് HTML5 സാധുത പരിശോധന കാണുക
+- [ ] ബ്രൗസർ ഡെവ് ടൂൾസ് തുറന്ന് സെർവറിലേക്ക് പോകുന്ന ഫോർം ഡാറ്റ പരിശോധിക്കുക
+- [ ] വ്യത്യസ്ത ഇൻപുട്ട് തരങ്ങൾ പരീക്ഷിച്ച് മൊബൈൽ കീബോർഡ് മാറ്റങ്ങൾ കാണുക
+
+### 🎯 **ഈ മണിക്കൂറിൽ നിങ്ങൾ ചെയ്യാനാകുന്നത്**
+- [ ] പാഠശേഷം ക്വിസ് പൂർത്തിയാക്കി ഫോർം കൈകാര്യം സമ്പ്രദായങ്ങൾ മനസ്സിലാക്കുക
+- [ ] യഥാർത്ഥ സമയ ഫീഡ്ബാക്ക് ഉള്ള സമഗ്ര സാധുത പരിശോധന പരീക്ഷിക്കുക
+- [ ] CSS സ്റ്റൈലിംഗ് ചേർത്ത് പ്രൊഫഷണൽ രൂപത്തിലുള്ള ഫോമുകൾ സൃഷ്ടിക്കുക
+- [ ] ഡ്യൂപ്ലിക്കേറ്റ് യൂസർനെയിംകൾക്കും സെർവർ പിശകുകൾക്കും തെറ്റ് കൈകാര്യനം ചേർക്കുക
+- [ ] പാസ്സ്വേർഡ് സ്ഥിരീകരണ ഫീൽഡുകൾ ചേർക്കുകയും പൊരുത്തപ്പെടുന്ന പരിശോധന നടത്തുക
+
+### 📅 **നിങ്ങളുടെ ആഴ്ച ലംഘിച്ച ഫോർം മാസ്റ്ററി യാത്ര**
+- [ ] പ്രഗത്ഭതയേറിയ ഫീച്ചറുകൾ ഉള്ള പൂർണ്ണമായ ബാങ്കിംഗ് ആപ്പ് നിർമ്മിക്കുക
+- [ ] പ്രൊഫൈൽ ചിത്രങ്ങൾ അല്ലെങ്കിൽ രേഖകൾ അപ്ലോഡ് ചെയ്യാനുള്ള പ്രവർത്തനങ്ങൾ നടപ്പാക്കുക
+- [ ] പുരോഗതി സൂചികകളും സംസ്ഥാന നിയന്ത്രണവും ഉള്ള മൾട്ടി-സ്റ്റെപ്പ് ഫോമുകൾ ചേർക്കുക
+- [ ] ഉപയോക്തൃ തിരഞ്ഞെടുപ്പിനെ അടിസ്ഥാനമാക്കി രൂപങ്ങൾ പ്രതിരൂപിപ്പിക്കുന്ന ഡൈനാമിക് ഫോമുകൾ സൃഷ്ടിക്കുക
+- [ ] മെച്ചപ്പെട്ട ഉപയോക്തൃ അനുഭവത്തിനായി ഫോർം ഓട്ടോസേവ്, റിക്കവറി സംവിധാനം നടപ്പാക്കുക
+- [ ] ഇമെയിൽ സ്ഥിരീകരണം, ഫോൺ നമ്പർ ഫോർമാറ്റിംഗ് പോലുള്ള ഉയർന്ന ശരിതപ്പുള്ള സാധുത ചേർക്കുക
+
+### 🌟 **നിങ്ങളുടെ മാസം നീണ്ട ഫ്രണ്ട്എന്റ് വികസന മാസ്റ്ററി**
+- [ ] നിലവാരുള്ള തർക്കങ്ങൾ, പ്രവാഹങ്ങൾ, ലോജിക്كلاتുമായി സങ്കീർണ്ണ ഫോർം ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുക
+- [ ] വേഗത്തിലുള്ള വികസനത്തിനായി ഫോർം ലൈബ്രറികളും ഫ്രെയിംവർക്കുകളും പഠിക്കുക
+- [ ] ആക്സസിബിലിറ്റി മാർഗനിർദേശങ്ങളും ഉൾക്കൊള്ളുന്ന ഡിസൈൻ സിദ്ധാന്തങ്ങളും മികവുറ്റ രീതിയിൽ അഭ്യസിക്കുക
+- [ ] ആഗോള ഫോമുകൾക്കായി അന്തർദേശീയവൽക്കരണം, കമ്മ്യൂണിക്കേഷൻ പാടവം വരുത്തുക
+- [ ] പുനരുപയോഗയോഗ്യമായ ഫോർം ഘടക ലൈബ്രറികൾ, ഡിസൈൻ സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കുക
+- [ ] ഓപ്പൺ സോഴ്സ് ഫോർം പ്രോജക്റ്റുകളിൽ സംഭാവന നൽകി മികച്ച പ്രവൃത്തികളുമായി പങ്കുവെക്കുക
+
+## 🎯 നിങ്ങളുടെ ഫോർം ഡവലപ്പ്മെന്റ് മാസ്റ്ററി ടൈംലൈൻ
+
+```mermaid
+timeline
+ title ഫോം വികസനവും ഉപയോക്തൃ അനുഭവ പഠന പുരോഗതിയും
+
+ section HTML അടിസ്ഥാനങ്ങൾ (15 മിനിറ്റ്)
+ സെമാന്റിക് ഫോമുകൾ: ഫോം ഘടകങ്ങൾ
+ : ഇൻപുട്ട് തരം
+ : ലേബലുകൾ и ആക്സസിബിലിറ്റി
+ : പ്രോഗ്രസീവ് എൻഹാൻസ്മെന്റ്
+
+ section ജാവാസ്ക്രിപ്റ്റ് ഇൻറഗ്രേഷൻ (25 മിനിറ്റ്)
+ ഇവന്റ് ഹാൻഡ്ലിംഗ്: ഫോം സമർപ്പണം
+ : ഡാറ്റ ശേഖരണം
+ : AJAX കമ്മ്യൂണിക്കേഷൻ
+ : Async/await പാറ്റേണുകൾ
+
+ section വാലിഡേഷൻ സിസ്റ്റങ്ങൾ (35 മിനിറ്റ്)
+ മൾട്ടി-ലെയർ സുരക്ഷ: HTML5 വാലിഡേഷൻ
+ : ക്ലയന്റ്-സൈഡ് ലോഗിക്
+ : സര്വര്-സൈഡ് സ്ഥിരീകരണം
+ : പിശക് കൈകാര്യംചെയ്യൽ
+
+ section ഉപയോക്തൃ അനുഭവം (45 മിനിറ്റ്)
+ ഇന്റർഫേസ് പൊളിഷ്: ലോഡിംഗ് സ്റ്റേറ്റുകൾ
+ : വിജയം സന്ദേശം
+ : പിശക് ഗതിഗതി
+ : ആക്സസിബിലിറ്റി സവിശേഷതകൾ
+
+ section അഡ്വാൻസ്ഡ് പാറ്റേണുകൾ (1 ആഴ്ച)
+ പ്രൊഫഷണൽ ഫോമുകൾ: ഡയനാമിക് വാലിഡേഷൻ
+ : മൾട്ടി-സ്റ്റപ്പ് വർക്ക്ഫ്ലോകൾ
+ : ഫയൽ അപ്ലോഡുകൾ
+ : റിയൽ-ടൈം ഫീഡ്ബാക്ക്
+
+ section എന്റർപ്രൈസ് പ്രാവീണ്യം (1 മാസം)
+ പ്രൊഡക്ഷൻ അപ്ലിക്കേഷനുകൾ: ഫോം ലൈബ്രറികൾ
+ : ടെസ്റ്റിങ് നയങ്ങൾ
+ : പ്രകടനം മെച്ചപ്പെടുത്തൽ
+ : സുരക്ഷ മികച്ച പ്രാക്ടിസുകൾ
+```
+### 🛠️ നിങ്ങളുടെ ഫോർം ഡവലപ്പ്മെന്റ് ടൂൾകിറ്റ് സംഗ്രഹം
+
+ഈ പാഠം പൂർത്തിയാക്കിയാൽ നിങ്ങൾ ഇപ്പോൾ കൈപ്പറ്റിയിരിക്കുന്നു:
+- **HTML5 ഫോമുകൾ**: സെമാന്റ്റിക് ഘടന, ഇൻപുട്ട് തരം, ആക്സസിബിലിറ്റി ഫീച്ചറുകൾ
+- **ജാവാസ്ക്രിപ്റ്റ് ഫോർം കൈകാര്യം**: ഇവന്റ് മാനേജ്മെന്റ്, ഡാറ്റ ശേഖരണം, AJAX സംവാദം
+- **സാധുത അടിസ്ഥാനഘടന**: സുരക്ഷക്കും ഉപയോക്തൃ അനുഭവത്തിനും മൾട്ടി-ലെവൽ സാധുത പരിശോധന
+- **അസിങ്ക്രണസ് പ്രോഗ്രാമിംഗ്**: ആധുനിക Fetch API, async/await പാറ്റേണുകൾ
+- **പിശക് നിയന്ത്രണം**: സമഗ്രമായ പിശക് കൈകാര്യം, ഉപയോക്തൃ ഫീഡ്ബാക്ക് സിസ്റ്റങ്ങൾ
+- **ഉപയോക്തൃ അനുഭവ ഡിസൈൻ**: ലോഡിംഗ് ഘട്ടങ്ങൾ, വിജയ/പിശക് സന്ദേശങ്ങൾ, പിശക് പുനരുദ്ധാരം
+- **പ്രോഗ്രസീവ് എൻഹാൻസ്മെന്റ്**: എല്ലു ബ്രൗസറുകളിലും സജ്ജമായ ഫോമുകൾ
+
+**യഥാർത്ഥ ലോക ആപ്ലിക്കേഷനുകൾ**: നിങ്ങളുടെ ഫോർം ഡവലപ്പ്മെന്റ് കഴിവുകൾ നേരിട്ട് ബാധിക്കുന്നു:
+- **ഇ-കൊമേഴ്സ് ആപ്ലിക്കേഷനുകൾ**: ചതുപ്പുചെയ്യൽ പ്രക്രിയകൾ, അക്കൗണ്ട് രജിസ്ട്രേഷൻ, പേയ്മെന്റ് ഫോമുകൾ
+- **എന്റർപ്രൈസ് സോഫ്റ്റ്വെയർ**: ഡാറ്റ എൻട്രി സിസ്റ്റങ്ങൾ, റിപ്പോർട്ടിംഗ് ഇന്റർഫേസുകൾ, പ്രവാഹ ആപ്ലിക്കേഷനുകൾ
+- **കണ്ടന്റ് മാനേജ്മെന്റ്**: പ്രസിദ്ധീകരണ പ്ലാറ്റ്ഫോമുകൾ, ഉപയോക്തൃ സൃഷ്ടിച്ച ഉള്ളടക്കം, അഡ്മിനിസ്ട്രേറ്റീവ് ഇന്റർഫേസുകൾ
+- **ഫിനാൻഷ്യൽ ആപ്ലിക്കേഷനുകൾ**: ബാങ്കിംഗ് ഇന്ററൈസുകൾ, നിക്ഷേപ പ്ലാറ്റ്ഫോമുകൾ, ഇടപാട് സിസ്റ്റങ്ങൾ
+- **ഹെൽത്ത്കെയർ സിസ്റ്റങ്ങൾ**: രോഗി പോർട്ടലുകൾ, അപ്പോയിൻമെന്റ് ഷെഡ്യൂളിംഗ്, മെഡിക്കൽ രേഖ ഫോമുകൾ
+- **വിദ്യാഭ്യാസ പ്ലാറ്റ്ഫോമുകൾ**: കോഴ്സ് രജിസ്ട്രേഷൻ, ആസെസ്മെന്റ് ടൂൾസ്, ലേണിംഗ് മാനേജ്മെന്റ്
+
+**പ്രൊഫഷണൽ അഭിനിവേശങ്ങൾ**: നിങ്ങൾക്കു കഴിയും:
+- **സൗകര്യമുള്ള ഫോമുകൾ ഡിസൈൻ ചെയ്യുക** - വൈകല്യം ഉള്ളവ ഉൾപ്പെടെ എല്ലാ ഉപയോക്താക്കൾക്കും ഉപയോഗപ്രദം
+- **സുരക്ഷിതമായ ഫോർം സാധുത നടപ്പാക്കുക** - ഡാറ്റ അബദ്ധം, സുരക്ഷാ ദുർബലതകൾ തടയുന്നു
+- **പ്രതികരിക്കുന്ന UI സൃഷ്ടിക്കുക** - വ്യക്തമായ ഫീഡ്ബാക്കും മാർഗനിർദ്ദേശവും നൽകുന്നു
+- **ബ്രൗസർ ഡെവലപ്പർ ടൂളുകളും നെറ്റ്വർക്ക് വിശകലനവും ഉപയോഗിച്ച് സങ്കീർണ്ണ ഫോർം ഇടപെടലുകൾ ഡീബഗ് ചെയ്യുക**
+- **ക്ഷമതയുള്ള ഡാറ്റ കൈകാര്യം, സാധുത നിരീക്ഷണ തന്ത്രങ്ങളെക്കായി ഫോർം പ്രകടനം പ്രവര്ത്തനക്ഷമമാക്കുക**
+
+**ഫ്രണ്ട്എന്റ് ഡവലപ്പ്മെന്റ് ആശയങ്ങൾ കൈവിട്ടു:**
+- **ഇവന്റ്-ഡ്രിവൻ ഘടന**: ഉപയോക്തൃ ഇടപാട് കൈകാര്യം, പ്രതികരണം സംവിധാനങ്ങൾ
+- **അസിന്ക്രോണസ് പ്രോഗ്രാമിംഗ്**: ബ്ലോക്ക് ചെയ്യാത്ത സെർവർ സംവാദവും പിശക് കൈകാര്യംചെയ്യലും
+- **ഡാറ്റ സാധുത**: ക്ലയന്റ്-സൈഡ്, സെർവർ-സൈഡ് സുരക്ഷയും സമഗ്രതയും
+- **ഉപയോക്തൃ അനുഭവ ഡിസൈൻ**: ഉപയോക്താവിനെ വിജയത്തിലേക്ക് നയിക്കുന്ന സുനിരവധി ഇന്റർഫേസുകൾ
+- **ആക്സസിബിലിറ്റി എഞ്ചിനീയർ**: വ്യത്യസ്ത ആവശ്യങ്ങളെ അനുയോജ്യമായി പ്രവർത്തിക്കുന്ന ഉൾക്കൊള്ളുന്ന ഡിസൈൻ
+
+**അടുത്ത നില**: നിങ്ങൾക്ക് ആഴത്തിലുള്ള ഫോർം ലൈബ്രറികൾ, സങ്കീർണ്ണ സാധുത നിയമങ്ങൾ നടപ്പാക്കണമെങ്കിൽ, അല്ലെങ്കിൽ എന്റർപ്രൈസ് ഗ്രേഡ് ഡാറ്റ ശേഖരണ സംവിധാനങ്ങൾ നിർമ്മിക്കണമെങ്കിൽ സജ്ജരാണ്!
+
+🌟 **പ്രാപ്തി നേടി**: നിങ്ങൾ പ്രൊഫഷണൽ സാധുത പരിശോധന, പിശക് കൈകാര്യനം, ഉപയോക്തൃ അനുഭവ മാതൃകകളുമായി ഒരു സമ്പൂർണ ഫോർം കൈകാര്യം സിസ്റ്റം നിർമ്മിച്ചു!
+
+---
+
+
+
+---
+
+## GitHub Copilot ഏജന്റ് ചാലഞ്ച് 🚀
+
+ഏജന്റ് മോഡ് ഉപയോഗിച്ച് താഴെ കാണുന്ന ചാലഞ്ച് പൂർത്തിയാക്കുക:
+
+**വിവരണം:** രജിസ്ട്രേഷൻ ഫോർമിൽ സമഗ്രമായ ക്ലയന്റ്-സൈഡ് സാധുത പരിശോധനയും ഉപയോക്തൃ പ്രതികരണവും വർദ്ധിപ്പിക്കുക. ഈ ചാലഞ്ച് ഫോർം സാധുത, പിശക് കൈകാര്യനം, പരസ്പര പ്രവർത്തനാത്മക ഫീഡ്ബാക്കുമായി ഉപയോക്തൃ അനുഭവം മെച്ചപ്പെടുത്താനുള്ള പരിശീലനം നൽകും.
+**പ്രോംപ്ട്:** രജിസ്ട്രേഷൻ ഫോം പൂർണ്ണമായും ഫോർം സ്ഥിരീകരണ സംവിധാനമാക്കി സൃഷ്ടിക്കുക, ഇതിൽ ഉൾപ്പെടുന്നത്: 1) ഉപയോക്താവ് ടൈപ്പ് ചെയ്യുമ്പോൾ ഓരോ ഫീൽഡിനും സംവേദന-സമയം സ്ഥിരീകരണ പ്രതികരണം, 2) ഓരോ ഇൻപുട്ട് ഫീൽഡിന് താഴെ കസ്റ്റം സ്ഥിരീകരണ സന്ദേശങ്ങൾ, 3) പാസ്വേഡ് സ്ഥിരീകരണ ഫീൽഡ് മാച്ചിംഗ് സ്ഥിരീകരണത്തോടെ, 4) ദൃശ്യ സൂചനകൾ (സമാനമായ ഫീൽഡിനുള്ള പച്ച ചെക്ക്മാർക്കും തെറ്റ് ഫീൽഡിനുള്ള ചുവന്ന മുന്നറിയിപ്പുകൾക്ക്), 5) എല്ലാ സ്ഥിരീകരണങ്ങളും കടന്നുവന്ന ശേഷം മാത്രമേ സബ്മിറ്റ് ബട്ടൺ സജീവമാവൂ. HTML5 സ്ഥിരീകരണഗുണങ്ങൾ ഉപയോഗിക്കുക, പരിശോധനാ അവസ്ഥകൾ ക്ലാസ് ഉപയോഗിച്ച് സ്റ്റൈൽ ചെയ്യുക, മൾട്ടിഫംഗ്ഷണൽ പെരുമാറ്റം ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് സൃഷ്ടിക്കുക.
+
+[agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) എന്നതിനെക്കുറിച്ച് കൂടുതൽ അറിയൂ.
+
+## 🚀 ചാലഞ്ച്
+
+ഉപയോക്താവ് ഇതിനകം നിലവിലുള്ള പക്ഷം, HTML-ൽ ഒരു പിശക് സന്ദേശം കാണിക്കുക.
+
+ചെറിയൊരു സ്റ്റൈലിങ്ങ് ചെയ്ത് അവസാന ലോഗിൻ പേജ് നോക്കിനോക്കൂ:
+
+
+
+## പോസ്റ്റ് ലക്ചർ ക്വിസ്
+
+[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/44)
+
+## അവലോകനവും സ്വയംപഠനവും
+
+ഡവലപ്പർമാർ അവരുടെ ഫോർം നിർമ്മാണ ശ്രമങ്ങളിൽ വളരെ സൃഷ്ടിപരമായ സമീപനം സ്വീകരിച്ചിട്ടുണ്ട്, പ്രത്യേകിച്ച് സ്ഥിരീകരണ തന്ത്രങ്ങൾ സംബന്ധിച്ച്. വ്യത്യസ്ത ഫോർം ഫ്ളോകളെക്കുറിച്ച് അറിവ് നേടാൻ [CodePen](https://codepen.com) പരിശോധിക്കുക; നിങ്ങൾക്ക് ചില രോചനയുള്ള, പ്രചോദനമാർന്ന ഫോമുകൾ കണ്ടെത്താനാകും.
+
+## അസൈൻമെന്റ്
+
+[Style your bank app](assignment.md)
+
+---
+
+
+**പരിഭവകര്യം**:
+ഈ രേഖ AI പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് ഭാഷാന്തരപ്പെടുത്തപ്പെട്ടതാണ്. നിശ്ചിതത്വത്തിനായി ഞങ്ങൾ ശ്രമിച്ചിരിക്കുമ്പോഴും, സ്വയമേഖലാ (ഓട്ടോമേറ്റഡ്) പരിഭാഷകളിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റുകൾ ഉണ്ടാകാൻ സാധ്യതയുള്ളതാണ്. പ്രാഥമികമായി, ഈ രേഖയുടെ മൂലഭാഷയിൽ ഉള്ള പതിപ്പ് അധികാരപരമായ ഉറവിടമായി കണക്കാക്കണമെന്നും ശ്രദ്ധിക്കുക. നിർണ്ണായക വിവരങ്ങൾക്കായി വിദഗ്ദ്ധമായ മനുഷ്യ പരിഭാഷ ശുപാർശ ചെയ്യുന്നു. ഈ പരിഭാഷ ഉപയോഗിക്കുന്നതിൽ നിന്നുണ്ടാകുന്ന യാതൊരു തെറ്റിദ്ധാരണകളിനും ഞങ്ങൾ ഉത്തരവാദിയല്ല.
+
\ No newline at end of file
diff --git a/translations/ml/7-bank-project/2-forms/assignment.md b/translations/ml/7-bank-project/2-forms/assignment.md
new file mode 100644
index 000000000..79962db48
--- /dev/null
+++ b/translations/ml/7-bank-project/2-forms/assignment.md
@@ -0,0 +1,166 @@
+
+# നിങ്ങളുടെ ബാങ്ക് ആപ്പ് ആധുനിക CSS ഉപയോഗിച്ച് സ്റ്റൈൽ ചെയ്യുക
+
+## പ്രോജക്ട് അവലോകനം
+
+നിങ്ങളുടെ പ്രവർത്തനക്ഷമമായ ബാങ്കിങ് ആപ്പിനെ ആകർഷകവുമായ, പ്രൊഫഷണൽ ലുക്കുള്ള വെബ് ആപ്പായി മാറ്റാൻ ആധുനിക CSS സാങ്കേതിക വിദ്യകൾ ഉപയോഗിക്കുക. ഒരു ഏകോപിത ഡിസൈൻ സിസ്റ്റം സൃഷ്ടിച്ച് ഉപയോഗകാർക്ക് മെച്ചപ്പെട്ട അനുഭവം നൽകുകയും ആക്സസിലബിലിറ്റിയും പ്രതികരണശേഷിയുള്ള ഡിസൈനും പാലിക്കുകയും ചെയ്യുക.
+
+ഈ അസൈൻമെന്റ് നിങ്ങൾക്കെതിരെ ആധുനിക വെബ് ഡിസൈൻ പാറ്റേണുകൾ പ്രയോഗിക്കാൻ, സ്ഥിരതയുള്ള ദൃശ്യ ഐഡന്റിറ്റി നടപ്പാക്കാൻ, ഉപയോക്താക്കൾക്ക് ആകർഷകവും സുഖപ്രദവുമായ ഇന്റർഫേസ് സൃഷ്ടിക്കാൻ വെല്ലുവിളിയാക്കുന്നു.
+
+## നിർദ്ദേശങ്ങൾ
+
+### ഘട്ടം 1: നിങ്ങളുടെ സ്റ്റൈൽഷീറ്റ് സജ്ജമാക്കുക
+
+**നിങ്ങളുടെ CSS അടിസ്ഥാന നിർമ്മിക്കുക:**
+
+1. പ്രോജക്ട് റൂട്ടിൽ `styles.css` എന്ന പേരിൽ പുതിയ ഫയൽ **സൃഷ്ടിക്കുക**
+2. നിങ്ങളുടെ `index.html` ഫയലിൽ സ്റ്റൈൽഷീറ്റ് **ലിങ്ക് ചെയ്യുക**:
+ ```html
+
+ ```
+3. CSS റിസെറ്റും ആധുനിക ഡിഫോൾട്ടുകളും **ആരംഭിക്കുക**:
+ ```css
+ /* Modern CSS reset and base styles */
+ * {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ }
+
+ body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+ line-height: 1.6;
+ color: #333;
+ }
+ ```
+
+### ഘട്ടം 2: ഡിസൈൻ സിസ്റ്റം ആവശ്യങ്ങൾ
+
+**അദ്ദേഹം അവശ്യമായ ഡിസൈൻ ഘടകങ്ങൾ നടപ്പിലാക്കുക:**
+
+#### കളർ പാളറ്റ്
+- **പ്രധാന നിറം**: ബട്ടണുകൾക്കും ഹൈലൈറ്റുകൾക്കും പ്രൊഫഷണൽ നിറം തിരഞ്ഞെടുക്കുക
+- **സെക്കണ്ടറി നിറം**: അക്ഷന്റുകൾക്കും സെക്കൻഡറി ആക്ഷനുകൾക്കുമായി സമചതുര നിറം
+- **ന്യൂട്രൽ നിറങ്ങൾ**: വാചകങ്ങൾ, ബോർഡറുകൾ, പശ്ചാത്തലങ്ങൾ എന്നിവയ്ക്കായി ഗ്രേ കളർ
+- **സക്സസ്/തെറ്റുകൾ നിറങ്ങൾ**: വിജയാവസ്ഥകൾക്കായി പച്ച, തെറ്റുകൾക്കായി ചുവപ്പ്
+
+#### ടൈപ്പോഗ്രാഫി
+- **ഹെഡിംഗ് ഹയറാർക്കി**: H1, H2, H3 ഘടകങ്ങൾക്കിടയിലെ വ്യക്തമായ വ്യത്യാസം
+- **ബോഡി ടെക്സ്റ്റ്**: വായിക്കാൻ അനുയോജ്യമായ ഫോണ്ട് വലുപ്പം (കുറഞ്ഞത് 16px)യും യോജിച്ച വരിയിലെ ഉയരും
+- **ഫോം ലേബലുകൾ**: വ്യക്തമായ, ആക്സസിബിൾ വാചക സ്റ്റൈലിംഗ്
+
+#### ലേയൗട്ട് & സ്പേസിംഗ്
+- **സ്ഥിരമായ സ്പേസിംഗ്**: സ്പേസിംഗ് സ്കെയിൽ ഉപയോഗിക്കുക (8px, 16px, 24px, 32px)
+- **ഗ്രിഡ് സിസ്റ്റം**: ഫോംകളും ഉള്ളടക്ക സെക്ഷനുകളുമായി ക്രമഘടിതമായ ലേയൗട്ട്
+- **റിസ്പോൺസീവ് ഡിസൈൻ**: മൊബൈൽ-ഫസ്റ്റ് സമീപനം ബ്രേക്ക്പോയിന്റുകളും
+
+### ഘട്ടം 3: കമ്ബോണന്റ് സ്റ്റൈലിംഗ്
+
+**ഈ പ്രത്യേക ഘടകങ്ങളെ സ്റ്റൈൽ ചെയ്യുക:**
+
+#### ഫോങ്ങൾ
+- **ഇൻപുട്ട് ഫീൽഡുകൾ**: പ്രൊഫഷണൽ ബോർഡറുകൾ, ഫോകസ് സ്റ്റേറ്റുകൾ, വിശദീകരണ സ്റ്റൈലിംഗ്
+- **ബട്ടണുകൾ**: ഹോവർ ഇഫക്ട്സ്, ഡിസേബിൾഡ് സ്റ്റേറ്റുകൾ, ലോഡിംഗ് സൂചനകൾ
+- **ലേബലുകൾ**: വ്യക്തമായ പൊസിഷനിങ്ങും ആവശ്യമായ ഫീൽഡ് ഇൻഡിക്കേറ്ററുകളും
+- **തെറ്റ് സന്ദേശങ്ങൾ**: ദൃശ്യമാകുന്ന തെറ്റ് സ്റ്റൈലിംഗ്, സഹായകരമായ സന്ദേശങ്ങൾ
+
+#### നാവിഗേഷൻ
+- **ഹെഡർ**: സുതാര്യവും ബ്രാൻഡഡ് നാവിഗേഷൻ ഏരിയ
+- **ലിങ്കുകൾ**: വ്യക്തമായ ഹോവർ സ്റ്റേറ്റുകളും ആക്ടീവ് ഇൻഡിക്കേറ്ററുകളും
+- **ലോഗോ/ടൈറ്റിൽ**: വ്യത്യസ്തമായ ബ്രാൻഡിംഗ് ഘടകം
+
+#### ഉള്ളടക്ക മേഖലകൾ
+- **സെക്ഷനുകൾ**: വിവിധ മേഖലയെക്കിടയിൽ വ്യക്തമായ ദൃശ്യ വ്യത്യാസം
+- **കാർഡുകൾ**: കാർഡ് അടിസ്ഥാന ലേയൗട്ടുകൾ ഉപയോഗിക്കുന്ന പക്ഷം, ഷാഡോകളും ബോർഡറുകളും ഉൾപ്പെടുത്തുക
+- **പശ്ചാത്തലങ്ങൾ**: ശ്വാസകോശം നിറഞ്ഞ സ്ഥലവും സോഫ്റ്റ് പശ്ചാത്തലങ്ങളും അനുയോജ്യമായി ഉപയോഗിക്കുക
+
+### ഘട്ടം 4: വികസിത ഫീച്ചറുകൾ (ഐച്ഛികം)
+
+**ഈ ഉന്നത ഫീച്ചറുകൾ പരിഗണിക്കുക:**
+- **ഡാർക്ക് മോഡ്**: ലൈറ്റ്, ഡാർക്ക് തീമുകൾ തമ്മിൽ ടോഗിൾ ചെയ്യുക
+- **അനിമേഷനുകൾ**: സോഫ്റ്റ് ട്രാൻസിഷനുകളും മൈക്രോ-ഇന്ററാക്ഷനുകളും
+- **ലോഡിംഗ് സ്റ്റേറ്റുകൾ**: ഫോം സമർപ്പണ സമയത്ത് ദൃശ്യ പ്രതികരണം
+- **റിസ്പോൺസീവ് ഇമേജുകൾ**: വ്യത്യസ്ത സ്ക്രീൻ വലുപ്പങ്ങൾക്കായി ഓപ്റ്റിമൈസഡ് ഇമേജുകൾ
+
+## ഡിസൈൻ പ്രേരണ
+
+**ആധുനിക ബാങ്കിങ് ആപ്പിന്റെ സവിശേഷതകൾ:**
+- **ശുദ്ധവും ലഘുവുമായ ഡിസൈൻ** ധാരാളം വെള്ളിയിടം ഉപയോഗിച്ച്
+- **പ്രൊഫഷണൽ നിറം പദ്ധതികൾ** (നീല, പച്ച, അല്ലെങ്കിൽ സോപാന ഗ്രീഷ്മരമായ ന്യൂട്രൽ കളറുകൾ)
+- **വൈദഗ്ധ്യമുള്ള ദൃശ്യ പാളികൾ** വ്യക്തമായ കോള്യൂടു-ആക്ഷൻ ബട്ടണുകളോടെ
+- **ആക്സസിബിൾ കണ്ട്രാസ്റ്റ് അനുപാതങ്ങൾ** WCAG മാർഗ്ഗനിർദ്ദേശങ്ങൾ പാലിച്ച്
+- **മൊബൈൽ-റിസ്പോൺസീവ് ലേയൗട്ടുകൾ** എല്ലാ ഉപകരണങ്ങളിലും പ്രവർത്തിക്കുന്നു
+
+## സാങ്കേതിക ആവശ്യങ്ങൾ
+
+### CSS ഓർഗനൈസേഷൻ
+```css
+/* 1. CSS Custom Properties (Variables) */
+:root {
+ --primary-color: #007bff;
+ --secondary-color: #6c757d;
+ /* Add more variables */
+}
+
+/* 2. Base Styles */
+/* Reset, typography, general elements */
+
+/* 3. Layout */
+/* Grid, flexbox, positioning */
+
+/* 4. Components */
+/* Forms, buttons, cards */
+
+/* 5. Utilities */
+/* Helper classes, responsive utilities */
+
+/* 6. Media Queries */
+/* Responsive breakpoints */
+```
+
+### ആക്സസിബിലിറ്റി ആവശ്യങ്ങൾ
+- **നിറം കണ്ട്രാസ്റ്റ്**: സാധാരണ വാചകത്തിനായി കുറഞ്ഞത് 4.5:1 അനുപാതം ഉറപ്പാക്കുക
+- **ഫോകസ് ഇൻഡിക്കേറ്റർ**: കീബോർഡ് നാവിഗേഷനിനായി ദൃശ്യമാകുന്ന ഫോകസ് സ്റ്റേറ്റുകൾ
+- **ഫോം ലേബലുകൾ**: ഇൻപുട്ടുകൾക്ക് ശരിയായി അസോസിയേറ്റ് ചെയ്തിട്ടുള്ളവ
+- **റിസ്പോൺസീവ് ഡിസൈൻ**: 320px മുതൽ 1920px വരെ ഉള്ള സ്ക്രീനുകളിൽ ഉപയോഗയോഗ്യമായത്
+
+## മೌಲ്യനിർണയ ക്രൈറ്റീരിയ
+
+| ക്രൈറ്റീരിയ | ഉദാത്തം (A) | പ്രൊഫിഷ്യന്റ് (B) | വികസിച്ചു കൊണ്ടിരിക്കുന്നത് (C) | മെച്ചപ്പെടുത്തേണ്ടത് (F) |
+|----------|---------------|----------------|----------------|----------------------|
+| **ഡിസൈൻ സിസ്റ്റം** | സ്ഥിരമായ നിറങ്ങൾ, ടൈപ്പോഗ്രാഫി, സ്പേസിംഗ് എന്നിവയോട് കൂടിയ സമഗ്ര ഡിസൈൻ സിസ്റ്റം നടപ്പാക്കുന്നു | വ്യക്തമായ ഡിസൈൻ പാറ്റേണുകളും നല്ല ദൃശ്യ പാളിയും ഉള്ള സ്ഥിരമായ സ്റ്റൈലിംഗ് ഉപയോഗിക്കുന്നു | അടിസ്ഥാന സ്റ്റൈലിംഗ് ചില സ്ഥിരതാ പ്രശ്നങ്ങളോടെയോ ഡിസൈൻ ഘടകങ്ങൾ മറന്നോ ഉള്ളത് | കുറഞ്ഞ സ്റ്റൈലിംഗ്, സ്ഥിരതയില്ലാത്ത അല്ലെങ്കിൽ വിരുദ്ധ ഡിസൈൻ തിരഞ്ഞെടുപ്പുകൾ |
+| **ഉപയോക്തൃ അനുഭവം** | ലളിതവും പ്രൊഫഷണൽ ഇന്റർഫേസ്, മികച്ച ഉപയോഗസൗകര്യവും ദൃശ്യ ആകർഷണവും | വ്യക്തമായ നാവിഗേഷനും വായനയോഗ്യമായ ഉള്ളടക്കവും ഉള്ള നല്ല അനുഭവം നൽകുന്നു | അടിസ്ഥാന ഉപയോഗ സൌകര്യം, ചില UX മെച്ചപ്പെടുത്തലുകൾ ആവശ്യം | കുറവ് ഉപയോഗസൗകര്യം, നാവിഗിക്കാനും വായിക്കാനും പ്രയാസം |
+| **സാങ്കേതിക നടപ്പാക്കൽ** | ആധുനിക CSS സാങ്കേതികതകൾ, നന്നായി ഓർഗനൈസ്ഡ് കോഡ് ഘടന, മികച്ച പ്രാക്ടീസുകൾ പാലിക്കുന്നു | CSS ഫലപ്രദമായി നടപ്പിലാക്കി നല്ല ഓർഗനൈസേഷനും അനുയോജ്യമായ സാങ്കേതിക വിദ്യകളും | CSS ശരിയായി പ്രവർത്തിക്കുന്നു, പക്ഷേ ഓർഗനൈസേഷനിൽ കുറവോ ആധുനിക സമീപനങ്ങളിൽ കുറവോ | തെറ്റായ CSS നടപ്പാക്കൽ, സാങ്കേതിക പ്രശ്നങ്ങളോ ബ്രൗസർ പൊരുത്തക്കേടുകളോ |
+| **റിസ്പോൺസീവ് ഡിസൈൻ** | എല്ലാ ഉപകരണ വലുപ്പങ്ങളിലും മനോഹരമായി പ്രവർത്തിക്കുന്ന പൂർണ്ണ റിസ്പോൺസീവ് ഡിസൈൻ | ചെറിയ ചില പ്രശ്നങ്ങളോടെയുള്ള നല്ല റിസ്പോൺസീവ് വ്യവഹാരം | ചില ലേയൗട്ട് പ്രശ്നങ്ങളോടൊത്ത് അടിസ്ഥാന റിസ്പോൺസീവ് നടപ്പാക്കൽ | റിസ്പോൺസീവ് അല്ല, മൊബൈൽ ഉപകരണങ്ങളിൽ ഗൗരവമുള്ള പ്രശ്നങ്ങൾ |
+| **ആക്സസിബിലിറ്റി** | മികച്ച കീബോർഡ് നാവിഗേഷനും സ്ക്രീൻ റീഡർ പിന്തുണയും ഉള്ള WCAG മാർഗ്ഗനിർദേശങ്ങൾ പാലിക്കുന്നു | ശരിയായ കണ്ട്രാസ്റ്റും ഫോക്കസ് ഇൻഡിക്കേറ്ററുകളും ഉള്ള നല്ല ആക്സസിബിലിറ്റി | ചില ഘടകങ്ങൾ കുറവായിട്ടുള്ള അടിസ്ഥാന ആക്സസിബിലിറ്റി പരിഗണനകൾ | ദുർബല ഉപയോക്താക്കൾക്ക് പ്രയാസമുള്ള കുറവായ ആക്സസിബിലിറ്റി |
+
+## സമർപ്പണ നിർദ്ദേശങ്ങൾ
+
+**നിങ്ങളുടെ സമർപ്പണത്തിൽ ഉൾപ്പെടുത്തുക:**
+- **styles.css**: നിങ്ങളുടെ പൂര്ണ സ്റ്റൈൽഷീറ്റ്
+- **പുതുക്കിയ HTML**: നിങ്ങൾ ചെയ്ത ഏതെങ്കിലും HTML മാറ്റങ്ങൾ
+- **സ്ക്രീൻഷോട്ട്**: ഡെസ്ക്ടോപ്പിലും മൊബൈലിലും നിങ്ങളുടെ ഡിസൈൻ കാണിക്കുന്ന ചിത്രങ്ങൾ
+- **README**: നിങ്ങളുടെ ഡിസൈൻ തിരഞ്ഞെടുപ്പുകളും കളർ പാളറ്റും സംബന്ധിച്ച സാരാംശം
+
+**ബോൺസ് പോയിന്റുകൾ:**
+- **CSS കസ്റ്റം പ്രോപർട്ടികൾ** പരിപാലനയോഗ്യമായ തീമിങ്ങിനായി
+- **Grid, Flexbox അല്ലെങ്കിൽ CSS അനിമേഷനുകൾ പോലുള്ള** പുരോഗമനസൗകര്യങ്ങൾ
+- **ഓപ്റ്റിമൈസ്ഡ് CSS, കുറഞ്ഞ ഫയർസൈസ് പോലുള്ള** പെർഫോമൻസ് പരിഗണനകൾ
+- **വിവിധ ബ്രൗസറുകളിൽ പൊരുത്തം ഉറപ്പാക്കുന്ന** ക്രോസ്-ബ്രൗസർ ടെസ്റ്റിംഗ്
+
+> 💡 **പ്രൊ ടിപ്**: ആദ്യം മൊബൈൽ ഡിസൈൻ ആമുഖമാക്കുക, പിന്നീട് വലിയ സ്ക്രീനുകൾക്കായി മെച്ചപ്പെടുത്തുക. ഈ മൊബൈൽ-ഫസ്റ്റ് സമീപനം നിങ്ങളുടെ ആപ്പ് എല്ലാ ഉപകരണങ്ങളിലും മികച്ചതായി പ്രവർത്തിക്കുന്നതും ആധുനിക വെബ് ഡെവലപ്പ്മെന്റ് മികച്ച പ്രാക്ടീസുകൾ പിന്തുടരുന്നതുമാണ്.
+
+---
+
+
+**അസൂയാചിത്രം**:
+ഈ ഡോക്യുമെന്റ് AI തർജ്ജമ സേവനമായ [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് തർജമചെയ്തതാണ്. നാം കൃത്യത തുടരാൻ ശ്രമിക്കുന്നുവെങ്കിലും, സ്വയമേവ പ്രവർത്തിക്കുന്ന തർജ്ജമയിൽ പിശകുകൾ അല്ലെങ്കിൽ തെറ്റായ വിവരങ്ങൾ ഉൾപ്പെടാം എന്നതിനെ ശ്രദ്ധിക്കുക. യാഥാർത്ഥ്യ ഭാഷയിലെ മൗലിക ഡോക്യുമെന്റ് മാത്രമാണ് നിർണ്ണായക ഉറവിടം. പ്രധാന വിവരങ്ങൾക്ക് പ്രൊഫഷണൽ മാനവ തർജ്ജമ നിർദ്ദേശിക്കുന്നു. ഈ തർജ്ജമ ഉപയോഗിച്ചതിൽ നിന്നുണ്ടാകുന്ന തെറ്റിദ്ധാരണകളോ വ്യാഖ്യാന പിഴവുകളോക്കായി ഞങ്ങൾ ഏത് ബാധ്യതയും ഏറ്റെടുക്കുന്നതില്ല.
+
\ No newline at end of file
diff --git a/translations/ml/7-bank-project/3-data/README.md b/translations/ml/7-bank-project/3-data/README.md
new file mode 100644
index 000000000..b139fda8a
--- /dev/null
+++ b/translations/ml/7-bank-project/3-data/README.md
@@ -0,0 +1,970 @@
+
+# ബാങ്കിംഗ് ആപ്പ് നിർമ്മിക്കൽ ഭാഗം 3: ഡാറ്റ സ്വീകരിക്കുകയും ഉപയോഗിക്കുകയും ചെയ്യാനുള്ള രീതികൾ
+
+സ്റ്റാർ ട്രെക്കിലെ എന്റർപ്രൈസിന്റെ കമ്പ്യൂട്ടർ ചിന്തിക്കുക - ക്യാപ്റ്റൻ പिकार്ഡ് കപ്പൽ നിലവ് ചോദിച്ചാൽ, സമ്പൂർണ ഇന്റർഫേസ് അടച്ച് പുനഃസംഘടിപ്പിക്കാതെ ഉടൻ തന്നെ വിവരം പ്രത്യക്ഷപ്പെടുന്നു. ഈ സുതാര്യമായ വിവര പ്രവാഹം ആണ് നാം ഇവിടെ ഡയനാമിക് ഡാറ്റ ഫെച്ചിംഗിലൂടെ നിർമ്മിക്കുന്നത്.
+
+ഇപ്പോൾ, നിങ്ങളുടെ ബാങ്കിംഗ് ആപ്പ് അച്ചടിച്ച ന്യൂസ്പേപ്പർ പോലെയാണ് - വിവരപ്രദമായിരുന്നാലും സ്റ്റാറ്റിക് ആണ്. നാം ഇത് NASAയിലെ മിഷൺ കൺട്രോളിനെ പോലെ മാറ്റാൻ പോകുന്നു, എവിടെ ഡാറ്റ കൃത്യസമയം വ്യത്യസ്തമായി ഒഴുകി ഉപയോക്താവിന്റെ പ്രവാഹം തടസ്സപ്പെടുത്താതെ പുതുക്കുന്നു.
+
+നിങ്ങൾ സർവർസുമായി അസിങ്ക്രോണസ് ആയി ആശയവിനിമയം ചെയ്യാൻ, വ്യത്യസ്ത സമയങ്ങളിൽ ലഭിക്കുന്ന ഡാറ്റ കൈകാര്യം ചെയ്യാൻ, അവയെ അർത്ഥവത്തായ വിവരങ്ങളായി മാറ്റാൻ പഠിക്കും. ഇത് ഡെമോയും പ്രൊഡക്ഷൻ റെഡി സോഫ്റ്റ്വെയറിനുമിടയിലെ വ്യത്യാസം ആണ്.
+
+## ⚡ അടുത്ത 5 മിനിറ്റിൽ നിങ്ങൾ ചെയ്യാൻ കഴിയുന്നത്
+
+**നിശ്ചിത സമയമുള്ള ഡെവലപ്പർമാർക്കുള്ള ക്വിക്ക് സ്റ്റാർട്ട് മാർഗ്ഗം**
+
+```mermaid
+flowchart LR
+ A[⚡ 5 മിനിറ്റ്] --> B[API സർവർ സജ്ജീകരിക്കുക]
+ B --> C[curl ഉപയോഗിച്ച് ഫച്ച് പരിശോധിക്കുക]
+ C --> D[ലോഗിൻ ഫങ്ഷൻ സൃഷ്ടിക്കുക]
+ D --> E[ഡാറ്റ പ്രവർത്തനത്തിൽ കാണുക]
+```
+- **മിനിറ്റ് 1-2**: നിങ്ങളുടെ API സർവർ ആരംഭിക്കുക (`cd api && npm start`)യും കണക്ഷൻ പരിശോധിക്കുക
+- **മിനിറ്റ് 3**: fetch ഉപയോഗിച്ച് ഒരു അടിസ്ഥാന `getAccount()` ഫങ്ഷൻ സൃഷ്ടിക്കുക
+- **മിനിറ്റ് 4**: login ഫോമിൽ `action="javascript:login()"` വയർ ചെയ്യുക
+- **മിനിറ്റ് 5**: ലോഗിൻ പരീക്ഷിച്ച് അക്കൗന്റ് ഡാറ്റ കൺസോളിൽ പ്രത്യക്ഷപ്പെടുന്നത് കാണുക
+
+**ക്വിക്ക് ടെസ്റ്റ് കമാൻഡുകൾ**:
+```bash
+# API പ്രവർത്തിക്കുന്നുണ്ടെന്ന് സൂചിപ്പിക്കുക
+curl http://localhost:5000/api
+
+# അക്കൗണ്ട് ഡാറ്റ എടുത്ത് പരിശോധിക്കുക
+curl http://localhost:5000/api/accounts/test
+```
+
+**ഇത് എവിടെ പ്രയോജനപ്പെടുന്നു**: 5 മിനിറ്റിനുള്ളിൽ, പരസ്പരം കാത്തു നിൽക്കാതെ ഡാറ്റ സ്വീകരിക്കുന്ന അസിങ്ക്രോണസ് ഫെച്ചിംഗിന്റെ മായാജാലം നിങ്ങള് കാണും. ഇത് എല്ലാ ആധുനിക വെബ് ആപ്പുകൾക്ക് പ്രതികരണശീലവും സജീവതയും നൽകുന്ന അടിസ്ഥാനം ആണ്.
+
+## 🗺️ ഡാറ്റാ-ഓര്യൻറഡ് വെബ് ആപ്പുകളുടെ നിങ്ങളുടെ പഠനയാത്ര
+
+```mermaid
+journey
+ title സ്റ്റാറ്റിക് പേജുകളിൽ നിന്നുള്ള ഡൈനാമിക് ആപ്ലിക്കേഷനുകളിലേക്കുo
+ section വികാസം മനസിലാക്കൽ
+ പരമ്പരാഗത പേജ് റീലോഡുകൾ: 3: You
+ AJAX/SPA ലാഭങ്ങൾ കണ്ടെത്തൽ: 5: You
+ Fetch API മാതൃകകൾ കൈകാര്യം ചെയ്യൽ: 7: You
+ section ഓതന്റിക്കേഷൻ നിർമ്മാണം
+ ലോഗിൻ ഫംഗ്ഷനുകൾ സൃഷ്ടിക്കൽ: 4: You
+ അസിങ്ക് പ്രവർത്തനങ്ങൾ കൈകാര്യം ചെയ്യൽ: 6: You
+ ഉപയോക്തൃ സെഷനുകൾ നിയന്ത്രണം: 8: You
+ section ഡൈനാമിക് UI അപ്ഡേറ്റുകൾ
+ DOM മാനിപ്പുലേഷൻ പഠനം: 5: You
+ ട്രാൻസാക്ഷൻ പ്രദർശനങ്ങൾ സൃഷ്ടിക്കൽ: 7: You
+ പ്രതികരണപരമായ ഡാഷ്ബോർഡുകൾ സൃഷ്ടിക്കൽ: 9: You
+ section പ്രൊഫഷണൽ മാതൃകകൾ
+ ടെംപ്ലേറ്റ് അധിഷ്ഠിത റൻഡറിംഗ്: 6: You
+ പിശക് കൈകാര്യം ചെയ്യുന്ന തന്ത്രങ്ങൾ: 7: You
+ പ്രകടന മെച്ചപ്പെടുത്തൽ: 8: You
+```
+**നിങ്ങളുടെ പഠനലക്ഷ്യം**: ഈ പാഠം പൂര്ത്തിയാക്കുമ്പോൾ, ആധുനിക വെബ് ആപ്പുകൾ ഡാറ്റ എങ്ങനെ ഫെച്ച് ചെയ്ത് പ്രോസസ്സ് ചെയ്ത് ഗുണമേന്മയുള്ള ഉപയോക്തൃാനുഭവങ്ങൾ സൃഷ്ടിക്കുന്നുവെന്ന് നിങ്ങൾ മനസ്സിലാക്കും.
+
+## പ്രിലക്ചർ ക്വിസ്
+
+[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/45)
+
+### മുൻകൂട്ടി requisito കളും
+
+ഡാറ്റ ഫെച്ചിയ്ക്ക് മുമ്പ്, ഈ ഘടകങ്ങൾ തയ്യാറാക്കുക:
+
+- **മുൻപത്തെ പാഠം**: [Login and Registration Form](../2-forms/README.md) പൂർത്തിയാക്കിയിരിക്കണം - ഇതിൽ നിന്ന് തുടർച്ചയായും നിർമ്മിക്കാം
+- **ലോകൽ സർവർ**: [Node.js](https://nodejs.org) ഇൻസ്റ്റാൾ ചെയ്ത് [API സർവർ](../api/README.md) റൺ ചെയ്യുക, അക്കൗണ്ട് ഡാറ്റ ലഭ്യമാക്കാൻ
+- **API കണക്ഷൻ**: താഴെയുള്ള കമാൻഡ് ഉപയോഗിച്ച് സർവർ കണക്ഷൻ പരിശോധിക്കുക:
+
+```bash
+curl http://localhost:5000/api
+# പ്രതീക്ഷിക്കുന്ന പ്രതികരണം: "ബാങ്ക് API v1.0.0"
+```
+
+ഈ ക്വിക് ടെസ്റ്റ് എല്ലാ ഘടകങ്ങളും ശരിയായി കമ്മ്യൂണിക്കേറ്റ് ചെയ്യുന്നതാണ് ഉറപ്പാക്കുന്നത്:
+- നിങ്ങളുടെ സിസ്റ്റത്തിൽ Node.js ശരിയായി പ്രവർത്തിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുന്നു
+- API സർവർ സജീവവും പ്രതികരിക്കുകയുമാണ്
+- നിങ്ങളുടെ ആപ്പ് സർവറിനെ എത്താൻ കഴിയുന്നു (മിഷനിനു മുൻപ് റേഡിയോ കോൺടാക്റ്റ് പരിശോധിക്കുന്നതുപോലെ)
+
+## 🧠 ഡാറ്റ മാനേജ്മെന്റ് പരിസ്ഥിതി അവലോകനം
+
+```mermaid
+mindmap
+ root((ഡാറ്റ മാനേജ്മെന്റ്))
+ Authentication Flow
+ Login Process
+ ഫോമിന്റെ പരിശോധന
+ ക്രെഡൻഷ്യൽ പരിശോധന
+ സെഷൻ മാനേജ്മെന്റ്
+ User State
+ ഗ്ലോബൽ അക്കൗണ്ട് ഒബ്ജക്റ്റ്
+ നാവിഗേഷൻ ഗാർഡുകൾ
+ പിശക് കൈകാര്യം ചെയ്യൽ
+ API Communication
+ Fetch Patterns
+ GET അഭ്യർത്ഥനകൾ
+ POST അഭ്യർത്ഥനകൾ
+ പിശക് പ്രതികരണങ്ങൾ
+ Data Formats
+ JSON പ്രോസസ്സിങ്ങ്
+ URL എൻകോഡിംഗ്
+ പ്രതികരണം പാഴ്സിംഗ്
+ Dynamic UI Updates
+ DOM Manipulation
+ സുരക്ഷിത ടെക്സ്റ്റ് അപ്ഡേറ്റുകൾ
+ ഘടക നിർമ്മാണം
+ ടെംപ്ലേറ്റ് ക്ലോണിങ്
+ User Experience
+ റിയൽ ടൈം അപ്ഡേറ്റുകൾ
+ പിശക് സന്ദേശങ്ങൾ
+ ലോഡിംഗ് സ്റ്റേറ്റുകൾ
+ Security Considerations
+ XSS Prevention
+ textContent ഉപയോഗം
+ ഇൻപുട്ട് ശുദ്ധീകരണം
+ സുരക്ഷിത HTML സൃഷ്ടി
+ CORS Handling
+ ക്രോസ്-ഒറിജിൻ അഭ്യർത്ഥനകൾ
+ ഹെഡർ കോൺഫിഗറേഷൻ
+ ഡെവലപ്പ്മെന്റ് സെറ്റപ്പ്
+```
+**മുല്യവദ്ധി പ്രിൻസിപ്പിൾ**: ആധുനിക വെബ് ആപ്പുകൾ ഡാറ്റ സംഘാടക സംവിധാനങ്ങളാണ് - ഉപയോക്തൃ ഇന്റർഫേസുകൾ, സർവർ APIകൾ, ബ്രൗസർ സെക്യൂരിറ്റി മോഡലുകൾ എന്നിവ തമ്മിൽ ഏകോപിപ്പിച്ചും സുതാര്യവും പ്രതികരണക്ഷമവുമായ അനുഭവങ്ങൾ സൃഷ്ടിക്കുന്നു.
+
+---
+
+## ആധുനിക വെബ് ആപ്പുകളിൽ ഡാറ്റ ഫെച്ചിംഗ് മനസ്സിലാക്കുക
+
+കഴിഞ്ഞ ഇരുപതു വർഷത്തിലേയ്ക്ക് വെബ് ആപ്പുകൾ ഡാറ്റ കൈകാര്യം ചെയ്യാനുള്ള രീതി നाटകീയമായി മാറിയിട്ടുണ്ട്. ഈ പരിണാമം മനസ്സിലാക്കുന്നത് AJAX, Fetch API തുടങ്ങിയ ആധുനിക സാങ്കേതിക വിദ്യകൾ എത്രത്തോളം ശക്തമാണെന്ന് നിങ്ങളെ അറിഞ്ഞുതരാനാണ് സഹായിക്കുക.
+
+പരമ്പരാഗത വെബ്സൈറ്റുകൾ എങ്ങനെ പ്രവർത്തിച്ചിരുന്നുവെന്ന് കൊള്ളാം സയതിദ്ധാർഥമായി ഇന്ന് നാം നിർമ്മിക്കുന്ന ഡൈനാമിക്, പ്രതികരണക്ഷമ ആപ്പുകൾക്ക് എതിരെ.
+
+### പരമ്പരാഗത മൾട്ടി-പേജ് ആപ്ലിക്കേഷനുകൾ (MPA)
+
+പഴയ വെബിലെ എല്ലാ ക്ലിക്കുകളും പഴയ ഒരു ടിവി ചാനല് മാറ്റുന്നത് പോലെ ആയിരുന്നു - സ്ക്രീൻ ശൂന്യം ആക്കി പിന്നെ പുതിയ ഉള്ളടക്കം ട്യൂൺ ചെയ്തു. ഇതായിരുന്നു തുടക്കകാല വെബ് ആപ്പുകളുടെ യാഥാർത്ഥ്യം, ഓരോ ഇന്ററാക്ഷനും പേജിന്റെ മുഴുവൻ ഭാഗം പുനഃസംഘടിപ്പിക്കുന്നത് നിർബന്ധമായിരുന്നു.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant Server
+
+ User->>Browser: ലിങ്ക് ക്ലിക്കുചെയ്യുന്നു അല്ലെങ്കിൽ ഫോമിൽ സമർപ്പിക്കുന്നു
+ Browser->>Server: പുതിയ HTML പേജ് അഭ്യർത്ഥിക്കുന്നു
+ Note over Browser: പേജ് ശൂന്യമായി മാറുന്നു
+ Server->>Browser: പൂർണ്ണമായ HTML പേജ് തിരിച്ചുവരിക്കുന്നു
+ Browser->>User: പുതിയ പേജ് പ്രദർശിപ്പിക്കുന്നു (ഫ്ലാഷ്/പുതുക്കൽ)
+```
+
+
+**ഇപ്പോൾ ഈ രീതിയെന്തുകൊണ്ട് ബുദ്ധിമുട്ടായി തോന്നി:**
+- ഓരോ ക്ലിക്കിനും പേജ് മുഴുവൻ പുനർനിർമ്മണം വേണമെന്ന് ആവശ്യപ്പെട്ടു
+- ഉപയോക്താക്കൾ വിചാരത്തിലെ ഇടവേളകൾക്ക് പേജിന്റെ അപ്രത്യക്ഷമായ പടങ്ങൾ കൊണ്ട് ഇടപെട്ടു
+- നിങ്ങൾക് ഒരേ ഹെഡറും ഫൂട്ടറും നാനൂറു തവണ ഡൗൺലോഡ് ചെയ്യേണ്ടിവന്നു
+- ആപ്പുകൾ സോഫ്റ്റ്വെയർ ഉപയോഗിക്കാതെ ഫയൽ കാബിനറ്റ് വഴിയുള്ള ക്ലിക്കുകളായിരുന്നു
+
+### ആധുനിക സിംഗിൾ-പേജ് ആപ്ലിക്കേഷനുകൾ (SPA)
+
+AJAX (Asynchronous JavaScript and XML) ഈ പാരഡൈം പൂർണമായി മാറ്റി കളഞ്ഞു. അന്താരാഷ്ട്ര സ്പേസ് സ്റ്റേഷനിലെ മോഡൂളാർ ഡിസൈൻ പോലെ, അവിടെ ഒരു ഘടകം പുനഃസംഘടിപ്പിക്കാതെ മാറ്റാൻ സാധിക്കുന്നത് പോലെയാണ് AJAX വെബ്പേജിന്റെ പ്രത്യേക ഭാഗങ്ങൾ അപ്ഡേറ്റ് ചെയ്യാൻ അനുവദിക്കുന്നത്. XML എന്ന് പേര് പറയുന്നുവെങ്കിലും, ഇന്ന് JSON ആണ് കൂടുതലായി ഉപയോഗിക്കുന്നത്, എന്നാൽ പ്രിൻസിപ്പിൾ ഒറ്റ - ഈ മാറ്റങ്ങൾ മാത്രം പുതുക്കുക എന്നതാണ്.
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Browser
+ participant JavaScript
+ participant Server
+
+ User->>Browser: പേജ് പാരസ്പര്യവത്ക്കരിക്കുന്നു
+ Browser->>JavaScript: ഇവന്റ് ഹാൻഡ്ലർ ട്രിഗർ ചെയ്യുന്നു
+ JavaScript->>Server: ആവശ്യമായ ഡാറ്റ മാത്രം നേടുന്നു
+ Server->>JavaScript: JSON ഡാറ്റ മടക്കുന്നു
+ JavaScript->>Browser: പ്രത്യേക പേജ് ഘടകങ്ങൾ അപ്ഡേറ്റ് ചെയ്യുന്നു
+ Browser->>User: അപ്ഡേറ്റു ചെയ്ത ഉള്ളടക്കം കാണിക്കുന്നു (റീലോഡ് ഇല്ലാതെ)
+```
+
+
+**SPAകൾക്ക് ഇത് എവിടെ ഫണ്ട് നൽകുന്നു:**
+- വെറും മാറ്റപ്പെട്ട ഭാഗങ്ങൾ മാത്രം പുതുക്കുന്നു (അർത്ഥശാസ്ത്രപരമായ രീതിയിലാണ്)
+- കടുത്ത ഇടപെടലുകൾ ഇല്ല - ഉപയോക്താക്കൾ പിന്തുടർന്ന് ഇരിക്കാം
+- നെറ്റ്വർക്ക് വഴി കുറഞ്ഞ ഡാറ്റയൊഴുകുന്നു, അത്കൊണ്ട് ലോഡ് സമയവും കുറഞ്ഞു
+- അപ്ലിക്കേഷനുകൾ നിങ്ങളുടെ ഫോണിലേതുപോലെ പെട്ടെന്ന് പ്രതികരിക്കുന്നു
+
+### ആധുനിക Fetch API യിലേക്ക് പരിണാമം
+
+ആധുനിക ബ്രൗസറുകൾ [`Fetch` API](https://developer.mozilla.org/docs/Web/API/Fetch_API) നൽകുന്നു, ഇത് പഴയ [`XMLHttpRequest`](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest)നെ മാറ്റിവെക്കുന്നു. ടെലിഗ്രാഫ് പ്രവർത്തിപ്പിക്കുന്നതിനും ഇമെയിൽ ഉപയോഗിക്കുന്നതിനുമിടയിലെ വ്യത്യാസം പോലെയാണ്, Fetch API വാഗ്ദാനങ്ങൾ ഉപയോഗിച്ച് അസിങ്ക്രോണസ് കോഡ് ക്ലീനാക്കുകയും JSON നേരിട്ട് കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു.
+
+| സവിശേഷത | XMLHttpRequest | Fetch API |
+|---------|----------------|----------|
+| **സിന്താക്സ്** | കോംപ്ലക്സായ കാൾബാക്ക് ശക്തി | ക്ലീനായ വാഗ്ദാനം അടിസ്ഥാനമാക്കി |
+| **JSON കൈകാര്യം** | മാനുവൽ പാർസിങ് വേണം | ഓഫ്ഷണായി `.json()` മെത്തിൽ ഉണ്ട |
+| **പിശക് കൈകാര്യം** | പരിമിതമായ പിശക് വിവരങ്ങൾ | വിപുലമായ പിശക് വിശദാംശങ്ങൾ |
+| **ആധുനിക പിന്തുണ** | പഴയ വെർഷനുകൾക്കും | ES6+ വാഗ്ദാനങ്ങളും async/await ഉപയോഗവും |
+
+> 💡 **ബ്രൗസർ പൊരുത്തക്കേട്**: നല്ല വാർത്ത - Fetch API ആധുനിക എല്ലാ ബ്രൗസറുകളിലും പ്രവർത്തിക്കുന്നു! പ്രത്യേക പതിപ്പുകൾക്ക് [caniuse.com](https://caniuse.com/fetch) വഴി മുഴുവൻ പൊരുത്തക്കേട് അറിയാം.
+>
+**താഴെ സാരാംശം:**
+- ക്രോം, ഫയർഫോക്സ്, സ്വിഫ്റ്റ്, എഡ്ജ് മുഴുവനും പ്രവർത്തിക്കുന്നു (ഉപയോക്താക്കൾക്കിടയിൽ അടിവസ്ത്രമാകുന്നു)
+- ഇന്റർനെറ്റ് എക്സ്പ്ലോറർ മാത്രമാണ് കൂടുതൽ സഹായം ആവശ്യപ്പെടുന്നത് (ഇപ്പോൾ IE വിടേണ്ട സമയമായിരിക്കുന്നു)
+- പിന്നീട് ഉപയോഗിക്കുന്ന async/await പാറ്റേണുകളിലേക്ക് മികച്ച തുടക്കം നൽകുന്നു
+
+### ഉപയോക്തൃ ലോഗിൻ এবং ഡാറ്റ റിറ്റ്രീവൽ നടപ്പിലാക്കൽ
+
+ഇപ്പോൾ നിങ്ങളുടെ ബാങ്കിംഗ് ആപ്പ് സ്റ്റാറ്റിക് ഡിസ്പ്ലേയിൽ നിന്നു പ്രവർത്തനക്ഷമ ആപ്പായി മാറ്റുന്ന ലോഗിൻ സിസ്റ്റം നടപ്പിലാക്കാം. സൈനിക സുരക്ഷാ സൗകര്യങ്ങളിൽ ഉപയോഗിക്കുന്ന ഉറപ്പ് പ്രോട്ടോക്കോളുകൾ പോലെയാണ് നാം ഉപയോക്തൃ ക്രെഡൻഷ്യലുകൾ ശരിയായതായി പരിശോധിച്ച് അവരുടേതായ ഡാറ്റ നൽകുക.
+
+നാം ഇത് ക്രമേണ നിർമ്മിക്കുക, ആദ്യം അടിസ്ഥാന പഠനപരമായ മുറികൾ ഉണ്ടാക്കി പിന്നെ ഡാറ്റ ഫെച്ചിങ് പ്രവർത്തനമാണ് കൂട്ടുക.
+
+#### ഘട്ടം 1: ലോഗിൻ ഫങ്ഷന്റെ അടിസ്ഥാനം സൃഷ്ടിക്കുക
+
+നിങ്ങളുടെ `app.js` ഫയൽ തുറന്ന് പുതിയ `login` ഫങ്ഷൻ ചേർക്കുക. ഇത് ഉപയോക്തൃ സ്ഥിരീകരണം കൈകാര്യം ചെയ്യും:
+
+```javascript
+async function login() {
+ const loginForm = document.getElementById('loginForm');
+ const user = loginForm.user.value;
+}
+```
+
+**ഇത് വിശദീകരിക്കുന്നു:**
+- ആ `async` കീവേഡ് എന്തിന്? — ജാവാസ്ക്രിപ്റ്റിന് "ഈ ഫങ്ഷൻ കാത്തിരിക്കേണ്ടി വരാം" എന്ന് പറയുകയായിരുന്നു
+- ഫോം പേജ് നിന്നും പിടിക്കുന്നു (സ്വാഭാവികമായും, ID ഉപയോഗിച്ച്)
+- പിന്നീട് ഉപയോക്താവ് എഴുതിയ ഉപയോക്തൃനാമം നേടുന്നു
+- നന്നായൊരു മാർഗം: നിങ്ങളുടെ ഫോമിലെ ഏതെങ്കിലും ഇൻപുട്ട് `name` ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് നേരിട്ട് ആക്സസ് ചെയ്യാം - getElementById ആവശ്യം ഇല്ല!
+
+> 💡 **ഫോമിൽ ആക്സസ് ചെയ്യാനുള്ള മാതൃക**: ഓരോ ഫോമിന്റെ കൺട്രോൾ നീങ്ങുന്നിടത്ത് `name` ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് അതിന്റെ പ്രോപ്പർട്ടിയായി ആക്സസ് ചെയ്യാം. ഇത് ക്ലിയർ, വായിക്കാൻ സുഖമുള്ള മാർഗമാണ്.
+
+#### ഘട്ടം 2: അക്കൗണ്ട് ഡാറ്റ ഫെച്ചിങ് ഫങ്ഷൻ സൃഷ്ടിക്കുക
+
+അടുത്തതായി, സെർവർ നിന്ന് അക്കൗണ്ട് ഡാറ്റ സ്വീകരിക്കാൻ പ്രത്യേകം ഒരു ഫങ്ഷൻ നിർമ്മിക്കാം. ഇത് മുൻപ് ചെയ്ത രജിസ്ട്രേഷൻ ഫങ്ഷന്റെ പോലെ തന്നെ ആഗിരണം ചെയ്യുന്നു, പക്ഷേ ഡാറ്റ റിട്ട്രീവലിൽ കേന്ദ്രീകരിക്കുന്നു:
+
+```javascript
+async function getAccount(user) {
+ try {
+ const response = await fetch('//localhost:5000/api/accounts/' + encodeURIComponent(user));
+ return await response.json();
+ } catch (error) {
+ return { error: error.message || 'Unknown error' };
+ }
+}
+```
+
+**ഈ കോഡ് നേടുന്നത്:**
+- ആധുനിക `fetch` API ഉപയോഗിച്ച് അസിങ്ക്രോണസ് ഡാറ്റ അഭ്യർത്ഥിക്കുന്നു
+- ഉപയോക്തൃനാമം പാരാമീറ്ററായി ഉൾപ്പെടുത്തി GET അഭ്യർത്ഥന URL നിർമ്മിക്കുന്നു
+- URLs ൽ സ്പെഷ്യൽ കരക്ടറുകൾ സുരക്ഷിതമായി കൈകാര്യം ചെയ്യാൻ `encodeURIComponent()` ഉപയോഗിക്കുന്നു
+- ജോൺസൺ ഫോർമാറ്റിലേക്ക് മറിക്കുന്നു
+- പിശകുകൾ മെനജ്മെന്റ് gracefully ചെയ്ത് പോലും എറർ ഒബ്ജക്ട് തിരിച്ചുവിടുന്നു
+
+> ⚠️ **സുരക്ഷാ നോട്ടീസ്**: `encodeURIComponent()`funkചൻ URLs ൽ പ്രത്യേക ചിഹ്നങ്ങൾ "#", "&" തുടങ്ങിയവ തെറ്റായി വ്യാഖ്യാനിക്കുന്നതിൽ നിന്നും സംരക്ഷിക്കുന്നു. കപ്പലിൽ നാവിക ആശയവിനിമയം പോലെ, സന്ദേശം നിശ്ചിതമായ രൂപത്തിൽ എത്തിക്കുന്നതു ഉറപ്പാക്കുന്നു.
+>
+**ഇത് എന്തുകൊണ്ട് പ്രസക്തമാണ്:**
+- URLs പൊളിക്കാൻ പ്രത്യേക ഗ്രതികൾ തടയുന്നു
+- URL മാൻപുലേഷൻ അറ്റാക്കുകളിൽ നിന്നും സംരക്ഷിക്കുന്നു
+- നിങ്ങളുടെ സർവർ തദ്ദേശീയ ഡാറ്റ ലഭിക്കും
+- സുരക്ഷിത കോഡിങ്ങ് പ്രാക്ടീസുകൾ പിന്തുടരുന്നു
+
+#### HTTP GET അഭ്യർത്ഥനകൾ മനസ്സിലാക്കുക
+
+നിങ്ങൾ `fetch` ഏതെങ്കിലും അധിക ഓപ്ഷനുകൾ ഇല്ലാതെ ഉപയോഗിക്കുമ്പോൾ, അത് തനിക്കും [`GET`](https://developer.mozilla.org/docs/Web/HTTP/Methods/GET) അഭ്യർത്ഥന സൃഷ്ടിക്കുന്നു. ഇത് നമ്മുടെ ആവശ്യത്തിനോട് വളരെ അനുയോജ്യമാണ് - "നിൻ്റെ ഉപയോക്തൃ അക്കൗണ്ട് ഡാറ്റ കാണാമോ?" എന്നാണ് സർവറിനെ ചോദിക്കുന്നത്.
+
+GET അഭ്യർത്ഥനകൾ ഒരു ലൈബ്രറിയിൽ നിന്നു പുസ്തകം കടം എടുക്കുന്നതുപോലെയാണ് - മുമ്പ് തന്നെ ഉള്ളതുള്ളത് കാണണമെന്ന്. POST അഭ്യർത്ഥനകൾ (നാം രജിസ്ട്രേഷനിൽ ഉപയോഗിച്ചത്) പുതിയ പുസ്തകം ഒരു ശേഖരത്തിലേക്ക് അയക്കുന്നതാണ്.
+
+| GET അഭ്യർത്ഥന | POST അഭ്യർത്ഥന |
+|-------------|-------------|
+| **ഉദ്ദേശ്യം** | നിലവിലുള്ള ഡാറ്റ വീണ്ടെടുക്കുക | പുതിയ ഡാറ്റ സർവറിലേക്ക് അയയ്ക്കുക |
+| **പാരാമീറ്റർ** | URL പാത്തിലും ക്വറി സ്ട്രിംഗിലും | അഭ്യർത്ഥന ബോഡിയിലായുള്ളത് |
+| **കാഷിംഗ്** | ബ്രൗസറുകൾ കാഷ് ചെയ്യാം | സാധാരണ കാഷിംഗ് ആവശ്യമില്ല |
+| **സുരക്ഷ** | URL / ലോഗിൽ ദൃശ്യമാകും | അഭ്യർത്ഥന ബോഡിയിൽ ദൃശ്യമല്ല |
+
+```mermaid
+sequenceDiagram
+ participant B as ബ്രൗസർ
+ participant S as സെർവർ
+
+ Note over B,S: GET അഭ്യർത്ഥന (ഡേറ്റാ വീണ്ടെടുക്കൽ)
+ B->>S: GET /api/accounts/test
+ S-->>B: 200 OK + അക്കൗണ്ട് ഡേറ്റ
+
+ Note over B,S: POST അഭ്യർത്ഥന (ഡേറ്റാ സമർപ്പണം)
+ B->>S: POST /api/accounts + പുതിയ അക്കൗണ്ട് ഡേറ്റ
+ S-->>B: 201 സൃഷ്ടി സ്ഥിരീകരണം
+
+ Note over B,S: പിശക് കൈകാര്യം ചെയ്യൽ
+ B->>S: GET /api/accounts/nonexistent
+ S-->>B: 404 കണ്ടെത്തിയില്ല + പിശക് സന്ദേശം
+```
+#### ഘട്ടം 3: എല്ലാം ചേർക്കുന്നു
+
+ഇപ്പോൾ രസകരമായ ഭാഗം - നിങ്ങളുടെ അക്കൗണ്ട് ഫെച്ചിംഗ് ഫങ്ഷനെ ലോഗിൻ പ്രക്രിയയുമായി ബന്ധിപ്പിക്കുക. എല്ലാം പാടലമായി പൊരുത്തപ്പെടുന്നിടം:
+
+```javascript
+async function login() {
+ const loginForm = document.getElementById('loginForm');
+ const user = loginForm.user.value;
+ const data = await getAccount(user);
+
+ if (data.error) {
+ return console.log('loginError', data.error);
+ }
+
+ account = data;
+ navigate('/dashboard');
+}
+```
+
+ഈ ഫങ്ഷൻ ഒരു കൃത്യമായ ക്രമത്തിൽ പ്രവർത്തിക്കുന്നു:
+- ഫോം ഇന്പുട്ടിൽ നിന്നുള്ള ഉപയോക്തൃനാമം എടുക്കുന്നു
+- സെർവറിൽ നിന്നും ആ ഉപയോക്താവിന്റെ അക്കൗണ്ട് ഡാറ്റ അഭ്യർത്ഥിക്കുന്നു
+- പിശകുകൾ സംഭവിച്ചാൽ അത് കൈകാര്യം ചെയ്യുന്നു
+- വിജയപ്രാപ്തിയോടെ അക്കൗണ്ട് ഡാറ്റ സംഭരിച്ചു ഡാഷ്ബോർഡിലേക്ക് പോകുന്നു
+
+> 🎯 **Async/Await മാതൃക**: `getAccount` അസിങ്ക്രോണസ് ഫങ്ഷനാകുന്നതിനാൽ സെർവർ പ്രതികരിക്കാൻ പ്രോഗ്രാം കാത്തിരിക്കുവാൻ `await` കീവേഡ് ഉപയോഗിക്കുന്നു. ഇതിലൂടെ അർത്ഥമില്ലാത്ത ഡാറ്റ കൊണ്ട് കോഡ് മുന്നോട്ട് പോകരുത്.
+
+#### ഘട്ടം 4: നിങ്ങളുടെ ഡാറ്റയ്ക്ക് ഒരു ഹോം ചെയ്യുക
+
+ലോഡ് ചെയ്ത അക്കൗണ്ട് വിവരങ്ങൾ ഓർമ്മിക്കാൻ നിങ്ങളുടെ ആപ്പിന് ഒരു സ്ഥലം വേണം. ഇത് നിങ്ങളുടെ ആപ്പ് ഷോർട്ട്-ടേം മെമ്മറിയായി ചിന്തിക്കുക - നിലവിലെ ഉപയോക്തൃ ഡാറ്റ എളുപ്പത്തിൽ കൈകാര്യം ചെയ്യാനുള്ള സ്ഥലം. നിങ്ങളുടെ `app.js` ഫയലിന്റെ മുകളിൽ ഈ ലൈൻ ചേർക്കുക:
+
+```javascript
+// ഇത് നിലവിലെ ഉപയോക്താവിന്റെ അക്കൗണ്ട് ഡാറ്റയാണ്
+let account = null;
+```
+
+**എന്തുകൊണ്ട് ഇത് വേണം:**
+- ആപ്പിന്റെ എവിടെയും അക്കൗണ്ട് ഡാറ്റ ലഭ്യമാക്കുന്നു
+- ആദ്യം `null` ആയതായി സൂചിപ്പിക്കുന്നത് "യാർക്കും ഇപ്പോൾ ലോഗിൻ ചെയ്തിട്ടില്ല" എന്ന്
+- ഒരാൾ വിജയകരമായി ലോഗിൻ ചെയ്താൽ അല്ലെങ്കിൽ രജിസ്റ്റർ ചെയ്താൽ അപ്ഡേറ്റ് ചെയ്യപ്പെടും
+- ഒരു ഏക സത്യം ഉറപ്പാക്കുന്ന ഉറവിടം പോലെ പ്രവർത്തിക്കുന്നു - ആരാണ് ലോഗിൻ ചെയ്തത് ഒരുപാട് ആശയക്കുഴപ്പമില്ല
+
+#### ഘട്ടം 5: ഫോമിന് വയർ ചെയ്യുക
+
+ഇപ്പോൾ നിങ്ങളുടെ പുതിയ ലോഗിൻ ഫങ്ഷനെ HTML ഫോമുമായി ബന്ധിപ്പിക്കുക. നിങ്ങളുടെ form ടാഗ് ഇങ്ങനെ അപ്ഡേറ്റ് ചെയ്യുക:
+
+```html
+
+```
+
+**ഈ ചെറിയ മാറ്റം എന്തുപകരുന്നു**:
+- ഫോമിന്റെ "പേജ് റീലോഡ് ചെയ്യൽ" സ്വാഭാവിക പ്രവർത്തനം തടയുന്നു
+- കോഡ് നിങ്ങളുടെ കസ്റ്റം ജാവാസ്ക്രിപ്റ്റ് ഫങ്ഷൻ വിളിക്കുന്നു
+- എല്ലാം അടങ്ങിയ, സിംഗിൾ-പേജ് ആപ്പ് പോലെയാണ് പ്രവർത്തിക്കുന്നത്
+- ഉപയോക്താക്കൾ "Login" ബട്ടൺ അമർത്തുമ്പോൾ എന്ത് ഉണ്ടാകണമെന്ന് നിങ്ങളുടെ നിയന്ത്രണത്തിലാക്കുന്നു
+
+#### ഘട്ടം 6: രജിസ്റ്റർ ഫങ്ഷൻ മെച്ചപ്പെടുത്തുക
+
+സുസ്ഥിരതയ്ക്കായി, നിങ്ങളുടെ `register` ഫങ്ഷനും അക്കൗണ്ട് ഡാറ്റ സംഭരിച്ച് ഡാഷ്ബോർഡിലേക്ക് തിരിയാൻ അപ്ഡേറ്റ് ചെയ്യുക:
+
+```javascript
+// നിങ്ങളുടെ രജിസ്റ്റർ ഫംഗ്ഷന്റെ അവസാനം ഈ വരികൾ ചേർക്കുക
+account = result;
+navigate('/dashboard');
+```
+
+**ഈ മെച്ചപ്പെടുത്തലുകൾ നൽകുന്നത്:**
+- **മসൃണം** രജിസ്ട്രേഷനും ഡാഷ്ബോർഡിലേക്കുള്ള ട്രാൻസിഷൻ
+- **സുസ്ഥിരമായ** ഉപയോക്തൃ അനുഭവം ലോഗിൻ, രജിസ്ട്രേഷൻ ഫ്ലോകൾക്ക് ഇടയിൽ
+- **ഏറ്റവും നേരത്തെ** അക്കൗണ്ട് ഡാറ്റ ലഭ്യമാക്കൽ വിജയകരമായ ശേഷം
+
+#### നിങ്ങളുടെ പ്രവർത്തനം പരിശോധിക്കൽ
+
+```mermaid
+flowchart TD
+ A[ഉപയോക്താവ് ക്രെഡൻഷ്യലുകൾ നൽകുന്നു] --> B[ലോഗിൻ ഫങ്ഷൻ വിളിച്ചു]
+ B --> C[സർവറിൽ നിന്നൊരു അക്കൗണ്ട് ഡാറ്റ തിരിക്കുക]
+ C --> D{ഡാറ്റ വിജയകരമായി ലഭിച്ചോ?}
+ D -->|അതെ| E[ആകൗണ്ട് ഡാറ്റ ഗ്ലോബലായി സംഭരിക്കുക]
+ D -->|ഇല്ല| F[പിശക് സന്ദേശം പ്രദർശിപ്പിക്കുക]
+ E --> G[ഡ്ശ്ബോർഡ് പ്രദർശിപ്പിക്കാൻ നേവിഗേറ്റ് ചെയ്യുക]
+ F --> H[ഉപയോക്താവ് ലോഗിൻ പേജ് തന്നെ തുടരുന്നു]
+```
+**ഇപ്പോൾ പരീക്ഷിക്കാൻ സമയമായി:**
+1. ഒരു പുതിയ അക്കൗണ്ട് സൃഷ്ടിച്ച് എല്ലാം പ്രവർത്തിക്കുന്നതായി ഉറപ്പാക്കുക
+2. അതേ ക്രെഡൻഷ്യലുകളിൽ ലോഗിൻ പരീക്ഷിക്കുക
+3. ബ്രൗസർ കൺസോൾ (F12) നോക്കുക എന്തെങ്കിലും തകരാറുണ്ടോ എന്ന്
+4. വിജയകരമായ ലോഗിൻ ശേഷം ഡാഷ്ബോർഡിലേക്കെത്തുന്നത് ഉറപ്പാക്കുക
+
+എന്തെങ്കിലും പ്രവർത്തിക്കുന്നില്ലങ്കിലൊഴിച്ച എളുപ്പത്തിലെ പിശകുകൾ - സംവിധാനം ഓടാത്തത്, ടൈപ്പോ മുതലായവ.
+
+#### ക്രോസ്-ഓറിജിൻ മാജിക്ക് കുറിച്ച് ചെറിയ കുറിപ്പ്
+
+നിങ്ങൾക്ക് സംശയമുണ്ടാകാം: "എന്താണ് വ്യത്യസ്ത പോർട്ടുകളിൽ പ്രവർത്തിക്കുന്ന ഈ API സർവറുമായി എന്റെ വെബ് ആപ്പ് സംസാരിക്കുന്നത് എങ്ങനെ?” മികച്ച ചോദ്യം! എല്ലാ വെബ് ഡെവലപ്പർമാരും ഏറ്റവും ഒടുവിൽ നേരിടുന്ന വിഷയം.
+
+> 🔒 **ക്രോസ്-ഓറിജിൻ സെക്യൂരിറ്റി**: ബ്രൗസറുകൾ "സേം-ഓറിജിൻ നയം" നടപ്പിലാക്കുന്നു വ്യത്യസ്ത ഡൊമെയ്നുകൾക്ക് അനധികൃത ആശയവിനിമയം തടയാൻ. പേന്റഗണിലെ ചെക്ക്പോയിന്റ് പോലെയാണ്, ഇത് ബന്ധപ്പെട്ട ആശയവിനിമയം അംഗീകരിച്ചിരിക്കുകയാണ് എന്നത് പരിശോധിക്കുന്നു.
+>
+**നമ്മൾ ക്രമീകരിച്ചത്:**
+- നിങ്ങളുടെ വെബ് ആപ്പ് `localhost:3000` ൽ പ്രവർത്തിക്കുന്നു (ഡെവലപ്പ്മെന്റ് സർവർ)
+- API സർവർ `localhost:5000` ൽ (ബാക്ക്എന്റ് സർവർ)
+- API സർവർ [CORS ഹെഡറുകൾ](https://developer.mozilla.org/docs/Web/HTTP/CORS) ഉൾപ്പെടുത്തിയിരിക്കുന്നു, വെബ് ആപ്പിൽ നിന്ന് അനുമതി നൽകി ആശയവിനിമയം അനുവദിക്കുന്നത്
+
+ഫ്രണ്ട്എൻഡ്, ബാക്ക്എൻഡ് ആപ്ലിക്കേഷനുകൾ സാധാരണയായി വേർതിരിച്ച് പ്രവർത്തിക്കുന്ന യാഥാർത്ഥ്യവുമായുള്ള താരതമ്യം.
+
+> 📚 **കൂടുതൽ പഠിക്കുക**: APIകളെയും ഡാറ്റ ഫെച്ചിങ്ങിനെയും സംബന്ധിച്ച് കൂടുതൽ പഠിക്കാൻ ഈ സമഗ്രമായ [Microsoft Learn API മോഡ്യൂൾ](https://docs.microsoft.com/learn/modules/use-apis-discover-museum-art/?WT.mc_id=academic-77807-sagibbon) സന്ദർശിക്കുക.
+
+## നിങ്ങളുടെ ഡാറ്റ HTML-ൽ ജീവൻ പകരുക
+
+ഇപ്പോൾ നാം ഫെച്ച് ചെയ്ത ഡാറ്റ ഉപഭോക്താക്കൾക്ക് ദൃശ്യമായ രീതിയിൽ DOM മാനിപ്പുലേഷൻ മുഖേന കാണിക്കാൻ പോകുന്നു. ഡാർക്ക് റൂമിലെ ഫോട്ടോഗ്രഫി വികസന പ്രക്രിയ പോലെയാണ്, അപ്രത്യക്ഷമായ ഡാറ്റയെ മനുഷ്യർ കാണാനും ഇടപഴിക്കാനുമുള്ള രൂപത്തിലാക്കുന്നു.
+DOM മാനിപ്പുലേഷൻ എന്നത് സ്റ്റാറ്റിക് വെബ് പേജുകളെ ഡൈനാമിക് ആപ്പ്ലിക്കേഷനുകളാക്കി മാറ്റുന്ന സാങ്കേതിക വിദ്യയാണ്, ഇത് ഉപയോക്തൃ ഇടപെടലുകൾക്കും സെർവർ പ്രതികരണങ്ങൾക്കും ആധാരമായി ഉള്ളടക്കം അപ്ഡേറ്റ് ചെയ്യുന്നു.
+
+### ജോലിക്കായി അനുയോജ്യമായ ഉപകരണം തിരഞ്ഞെടുക്കൽ
+
+ജാവാസ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് നിങ്ങളുടെ HTML അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ, നിങ്ങൾക്ക് പല തിരഞ്ഞെടുപ്പുകളും ഉണ്ട്. ഇവ toolbox-ലുള്ള വ്യത്യസ്ത ഉപകരണങ്ങളെ പോലെ പരിഗണിക്കാം - ഓരോന്നും പ്രത്യേക ജോലികൾക്കായി പാടുള്ളതാണ്:
+
+| വിധി | എന്തിന് ഉത്തമം | എപ്പോൾ ഉപയೋಗിക്കണം | സുരക്ഷാ നില |
+|--------|---------------------|----------------|--------------|
+| `textContent` | ഉപയോക്തൃ ഡാറ്റ സുരക്ഷിതമായി പ്രദർശിപ്പിക്കൽ | നിങ്ങൾ ടെക്സ്റ്റ് കാണിക്കുമ്പോൾ എപ്പോഴും | ✅ ഉറപ്പുള്ളത് |
+| `createElement()` + `append()` | സങ്കീർണ്ണ ലേഔട്ടുകൾ നിർമ്മിക്കൽ | പുതിയ സെക്ഷനുകൾ/ലിസ്റ്റുകൾ സൃഷ്ടിക്കുമ്പോൾ | ✅ ഉറപ്പുള്ളത് |
+| `innerHTML` | HTML ഉള്ളടക്കം സജ്ജമാക്കൽ | ⚠️ ഇത് ഒഴിവാക്കാൻ ശ്രമിക്കുക | ❌ അപകടകരം |
+
+#### ടെക്സ്റ്റ് സുരക്ഷിതമായി കാണിക്കുന്ന മാർഗ്ഗം: textContent
+
+[`textContent`](https://developer.mozilla.org/docs/Web/API/Node/textContent) പ്രോപ്പർടി ഉപയോക്തൃ ഡാറ്റ പ്രദർശിപ്പിക്കുമ്പോൾ നിങ്ങളുടെ ഏറ്റവും നല്ല കൂട്ടുകാരനാണ്. ഇത് നിങ്ങളുടെ വെബ് പേജിന് ഒരു ബൗൺസറായി കാര്യക്ഷമമാണ് - ഒരു അപകടകരമായത് കടക്കാൻ അനുവദിക്കുന്നില്ല:
+
+```javascript
+// എഴുത്ത് പുതുക്കുന്നതിനുള്ള സുരക്ഷിതവും വിശ്വസനീയവുമായ മാർഗം
+const balanceElement = document.getElementById('balance');
+balanceElement.textContent = account.balance;
+```
+
+**textContent-ന്റെ ഗുണങ്ങൾ:**
+- എല്ലാം പ്ളെയിന് ടെക്സ്റ്റായി പരിഗണിക്കുന്നു (സ്ക്രിപ്റ്റ് എക്സിക്യൂഷൻ തടയുന്നു)
+- നിലവിലുള്ള ഉള്ളടക്കം ഓട്ടോമാറ്റിക് ക്ലിയർ ചെയ്യുന്നു
+- ലളിതമായ ടെക്സ്റ്റ് അപ്ഡേറ്റുകൾക്കായി കാര്യക്ഷമം
+- ദുഷ്ട ഉള്ളടക്കത്തിൽ നിന്നുള്ള സുരക്ഷ നൽകുന്നു
+
+#### ഡൈനാമിക് HTML എഴുക്കൾ സൃഷ്ടിക്കൽ
+
+കൂടുതൽ സങ്കീർണ്ണ ഉള്ളടക്കങ്ങൾക്കായി [`document.createElement()`](https://developer.mozilla.org/docs/Web/API/Document/createElement) നെ [`append()`](https://developer.mozilla.org/docs/Web/API/ParentNode/append) എന്ന രീതിയുമായി കൂട്ടിച്ചേർത്തു ഉപയോഗിക്കുക:
+
+```javascript
+// പുതിയ ഘടകങ്ങൾ സൃഷ്ടിക്കുന്നതിന് സുരക്ഷിതമായ മാർഗ്ഗം
+const transactionItem = document.createElement('div');
+transactionItem.className = 'transaction-item';
+transactionItem.textContent = `${transaction.date}: ${transaction.description}`;
+container.append(transactionItem);
+```
+
+**ഈ സമീപനം മനസ്സിലാക്കൽ:**
+- ഒരു പ്രോഗ്രാമാറ്റിക് വിധത്തിൽ പുതിയ DOM ഘടകങ്ങൾ സൃഷ്ടിക്കുന്നു
+- ഘടകങ്ങളുടെ അടയാളങ്ങളും ഉള്ളടക്കവും പൂർണ്ണ നിയന്ത്രണം നിലനിർത്തുന്നു
+- സങ്കീർണ്ണമായ, ന喜്ചിത ഘടക ഘടനകൾ അനുവദിക്കുന്നു
+- ഘടനയും ഉള്ളടക്കവും വേർതിരിച്ച് സുരക്ഷ ഉറപ്പാക്കുന്നു
+
+> ⚠️ **സുരക്ഷ പരിഗണന**: പല ട്യൂട്ടോറിയലുകളിലും [`innerHTML`](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) കാണപ്പെടുമ്പോൾ, ഇത് ഉൾക്കൊള്ളിച്ച സ്ക്രിപ്റ്റുകൾ പ്രവർത്തിപ്പിക്കാമെന്ന അഭയം ഉണ്ട്. CERN-ന്റെ അനധികൃത കോഡ് പ്രവർത്തനം തടയുന്ന സുരക്ഷാ പ്രോട്ടോകോളുകൾ പോലെ, `textContent`യും `createElement`ഉം കൂടുതൽ സുരക്ഷിതവും നല്ല സംവിധാനങ്ങളും നൽകുന്നു.
+>
+**innerHTML-ന്റെ അപകടങ്ങൾ:**
+- ഉപയോക്തൃ ഡാറ്റയിലെ `
+
+
+```
+
+**HTML ഘടകങ്ങളും അവയുടെ ലക്ഷ്യങ്ങളും മനസ്സിലാക്കൽ:**
+
+#### ഡോക്യൂമെന്റ് ഘടന
+- **``**: ബ്രൗസർക്ക് ഇത് ആധുനിക HTML5 ആണെന്ന് അറിയിക്കുന്നു
+- **``**: പേജ് ഭാഷ സവിശേഷീകരിച്ച് സ്ക്രീൻ റീഡറുകൾക്കും ട്രാൻസ്ലേഷൻ ഉപകരണങ്ങൾക്കും സഹായിക്കുന്നു
+- **` `**: അന്താരാഷ്ട്ര എഴുത്തിനായി ശരിയായ കറക്ടർ എൻകോഡിംഗ് ഉറപ്പു്
+- **` `**: മൊബൈൽ-റെസ്പോൺസീവ് ആക്കാൻ സ്ര്തെയിൻ ചൂണ്ടി കാണികയും സ്കെയിലും നിയന്ത്രിക്കുകയും ചെയ്യുന്നു
+
+#### സെമാന്റിക് ഘടകങ്ങൾ
+- **``**: ടൈറ്റിലും വിവരണവും ഉൾപ്പെടുന്ന മുകളിൽ ഉള്ള പ്രദേശം വ്യക്തമായി തിരിച്ചറിയിക്കുന്നു
+- **``**: പ്രധാന ഉള്ളടക്ക പ്രദേശം (സംവാദങ്ങൾ നടക്കുന്ന സ്ഥലം)
+- **`