Question

Explain XML in detail.

14 Feb 2026
Answer :
Word Count : 901
XML (eXtensible Markup Language) is a flexible, text-based format used for structuring, storing, and exchanging data between systems, especially over the internet. Unlike traditional markup languages such as HTML, which are used to display data, XML is designed to describe data in a structured manner, making it easier to transport and interpret across diverse systems. At its core, XML is a way to represent information in a hierarchical structure of elements, attributes, and data. The data in XML is enclosed within user-defined tags, which allows the structure to be both human-readable and machine-readable. The tags provide metadata about the data, giving context and meaning to the content they enclose. One of the fundamental features of XML is that it is extensible, meaning that users can define their own tags according to the needs of the data being represented. An XML document starts with a declaration line, often defining the version of XML being used and the character encoding. For example: ```xml ``` Following this declaration, the document consists of elements enclosed in angle brackets, where each element has an opening tag, content, and a closing tag. Elements can be nested within each other, allowing the creation of a tree-like structure. For example, consider the following XML snippet: ```xml Web Application Testing John Doe 2025 ``` In this example, the `` element is the root element, containing child elements such as ``, `<author>`, and `<year>`. Each of these child </div><span id='fullanswer'> _____ _______ _________ ____ ______ _____ _________.<br> ___ _____ _____ ___ ______ ________ _______ _______.<br> ______ ___ _______ ____ _______ ________ _______ ______ ______ ____ ______.<br> __________ ___ _________ ________ ___ ________ _____.<br> __________ ________ ________ _________ ______ ____ _______ ___ ______ _____ ___ _______.<br> ___ ________ ________ ________ _________.<br> _________ ______ ____ _______ _______ _______ _______ __________ ______ ______ _______.<br> _____ ___ ________ _______ ____ ___.<br> ______ _________ _____ _____ ______.<br> __________ _____ ____ ____ ____ ________ _____ __________ ____ ____ ____ ___.<br> _______ ____ ______ __________ ____ __________ ________ ___ _______ _____ ___.<br> _____ ________ ______ _______ ________ __________ _____ _______.<br> ________ ____ ______ _____ ____ ____ ____ _____ _____.<br> ________ ___ _____ ______ _____ ______.<br> _______ _____ _____ __________ _______ ______ _____ ____ ____ ____ ________ __________.<br> ___ ________ _________ _____ _______ ____ ____ _____ ___ _____.<br> _________ ____ ___ ________ ___ _____ ______ ____ ____ ______ ________ _______.<br> ________ __________ _______ _____ ______.<br> _______ ___ ______ ________ ___ ___.<br> _____ ____ ___ ___ ____ _________ ________.<br> _________ _________ ___ _________ __________ ____ ________ ________.<br> __________ ____ ________ _______ _________ __________ ______ ___ _____ ___ ________.<br> ____ ______ ________ _____ _______.<br> _____ _______ __________ ______ _________ ________ _________ ______ _____ ____.<br> _______ ___ ____ ________ _____ __________ _______ _________ ________ _________.<br> __________ ____ ___ ____ __________ ______ _____ ___ _____ ______ ___.<br> ________ ____ __________ ______ ______ ______ ___.<br> ________ _____ _____ ______ ______.<br> __________ ________ _________ __________ _________ _____ _____ ___.<br> _________ ______ ______ __________ ______ _________.<br> ___ _____ _________ _________ _________ ________ __________ _____ ______ __________.<br> __________ _______ _________ _______ __________ __________ _____ ____ _________ ___ __________.<br> ________ __________ ___ ________ _________ _________ __________ _____ _________.<br> ______ _______ ______ _______ ______ ___ ___ __________.<br> _______ ____ __________ ____ ______ ____ _____.<br> ________ ___ _____ ______ ____ _____ ___ _______.<br> ___ ______ ______ _____ ___ _______.<br> __________ __________ ______ _______ _______ __________.<br> ___ _____ _____ ___ ______ _____ ___ ______ ___ ______ __________.<br> ___ ____ ___ _________ _______.<br> _________ _______ _________ _____ _________ _______ ______ ____ ____ ____ _______ __________.<br> _______ _______ ________ ______ ____ ____ ____ ___ _______ ____.<br> _______ _____ ______ _________ ____ _____ ___.<br> ___ ______ ________ _____ __________ ______ ___ ____.<br> _____ __________ _____ ___ ___ ____ __________ __________ __________ ___.<br> _________ __________ __________ ______ _____ ___ ________ _________ ________.<br> __________ _______ ________ __________ _________ _______ ___ ____ _______.<br> ___ ___ _____ ________ ___ _____ ____.<br> ____ __________ ________ ____ __________ ______ _________.<br> _____ _______ _____ _________ ________ ___ _____.<br> ________ _________ __________ ______ _______ ________.<br> _____ _____ ___ ____ ______.<br> __________ __________ ______ _______ ___ ___ _____ ______.<br> __________ ______ __________ __________ __________ _____ ________ ________ _____ ____ ______ _________.<br> ___ _________ ____ _____ ______ ___ _____ ____ _________ ______.<br> __________ _________ ______ __________ __________ __________.<br> _____ _________ ________ ________ _____ ___ _______ ____ ________.<br> _______ _____ ____ ____ ________ __________ ______ ____ ____ ________.<br> ______ _________ _________ _______ __________ ___ ________ _________ ______ _______.<br> ___ _______ _________ ______ _______ ______ _______ ____.<br> ___ _________ ____ ______ __________ ___ _______ _________.<br> __________ ___ __________ ________ ___ _______ ___ _____ _______ ____ ______ ___.<br> _________ _______ __________ __________ ____ ________ _______.<br> ___ ___ ________ ____ ____ ________ _____ __________.<br> _______ _____ ______ ________ ______ _____ _____ ____ __________ _________ __________ _________.<br> _______ ___ ____ ________ ____ __________ __________ __________ ____ ______ __________.<br> _________ __________ __________ ______ ____ ________ ____ ____ ____ ___ ___ ________.<br> __________ _____ ___ ___ ____ __________ ____ ______ ____.<br> ___ _______ ________ ______ ____ ________ _____ _______.<br> ________ ___ ________ ____ ____ _____ ______ ____ ______.<br> ________ ___ __________ ______ _____ _____ ____.<br> ________ ________ _____ _______ ___.<br> ____ ________ _______ __________ ______ _________ __________ _____ __________.<br> _______ ____ ____ _______ _______ ________.<br> ____ ______ _______ ______ _______ ___ ___ ____ _______ _________.<br> _______ _______ __________ ____ _____ ___ _______ ____ _____ __________ ____ _________.<br> ____ ________ _____ _________ ______ __________ ________.<br> ______ ________ __________ _____.<br></span><style>/* ============================================================ IGNOU ACADEMY — BESPOKE MODERN BRAND OVERLAY Custom Typography | Crisp Vector Icons | Smooth Entrance============================================================ */#iaBrandIntro { --bg-overlay: rgba(255, 255, 255, 0.92); --card-bg: #ffffff; --card-border: #e2e8f0; --ink-primary: #0f172a; --ink-secondary: #64748b; --accent: #2563eb; --accent-light: #eff6ff; --whatsapp: #10b981; --whatsapp-hover: #059669; --shadow-card: 0 20px 40px -15px rgba(15, 23, 42, 0.08); position: fixed; inset: 0; z-index: 999999; display: flex; align-items: center; justify-content: center; overflow: hidden; visibility: hidden; opacity: 0; pointer-events: none; background: var(--bg-overlay); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); transition: opacity .35s cubic-bezier(0.16, 1, 0.3, 1), visibility .35s ease; }#iaBrandIntro.ia-active { visibility: visible; opacity: 1; pointer-events: auto;}/* Ambient Subtle Background Lights */.ia-brand-glow { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.12; pointer-events: none;}.ia-glow-1 { width: 380px; height: 380px; background: #2563eb; left: -5%; top: -5%;}.ia-glow-2 { width: 320px; height: 320px; background: #4f46e5; right: -5%; bottom: -5%;}/* Central Card Structure */.ia-brand-content { position: relative; z-index: 5; width: min(500px, 90vw); padding: 36px 28px; display: flex; flex-direction: column; align-items: center; text-align: center; background: var(--card-bg); border: 1px solid var(--card-border); border-radius: 24px; box-shadow: var(--shadow-card); opacity: 0; transform: scale(0.92) translateY(16px);}#iaBrandIntro.ia-active .ia-brand-content { animation: iaCardZoomIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards;}@keyframes iaCardZoomIn { 0% { opacity: 0; transform: scale(0.92) translateY(16px); } 100% { opacity: 1; transform: scale(1) translateY(0); }}/* Branding & Headers */.ia-brand-ignou { display: block; color: var(--ink-primary); font-size: clamp(38px, 7vw, 56px); line-height: 1; font-weight: 900; letter-spacing: -0.03em; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-ignou { animation: iaZoomIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.1s forwards;}.ia-brand-academy { display: block; margin-top: 4px; color: var(--accent); font-size: 12px; font-weight: 800; letter-spacing: 0.35em; text-transform: uppercase; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-academy { animation: iaFadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.2s forwards;}.ia-brand-tagline { margin-top: 10px; color: var(--ink-secondary); font-size: 14.5px; font-weight: 400; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-tagline { animation: iaFadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.3s forwards;}/* Services Grid with Custom Tick Mark Badges */.ia-brand-services { list-style: none; margin: 22px 0; padding: 0; width: 100%; display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px;}.ia-brand-services li { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: #f8fafc; border: 1px solid #f1f5f9; border-radius: 12px; font-size: 13px; font-weight: 600; color: var(--ink-primary); text-align: left; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-services li:nth-child(1) { animation: iaPopUp 0.45s cubic-bezier(0.16, 1, 0.3, 1) 0.40s forwards; }#iaBrandIntro.ia-active .ia-brand-services li:nth-child(2) { animation: iaPopUp 0.45s cubic-bezier(0.16, 1, 0.3, 1) 0.48s forwards; }#iaBrandIntro.ia-active .ia-brand-services li:nth-child(3) { animation: iaPopUp 0.45s cubic-bezier(0.16, 1, 0.3, 1) 0.56s forwards; }#iaBrandIntro.ia-active .ia-brand-services li:nth-child(4) { animation: iaPopUp 0.45s cubic-bezier(0.16, 1, 0.3, 1) 0.64s forwards; }.ia-tick-icon { display: flex; align-items: center; justify-content: center; width: 20px; height: 20px; background: #dbeafe; color: var(--accent); border-radius: 50%; font-size: 10px; flex-shrink: 0;}/* Call to Action Buttons */.ia-brand-contact { width: 100%; display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-contact { animation: iaFadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.72s forwards;}.ia-contact-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 44px; border-radius: 12px; text-decoration: none; font-size: 13px; font-weight: 700; transition: transform 0.2s ease, background-color 0.2s ease;}.ia-contact-call { color: var(--accent); background: var(--accent-light); border: 1px solid rgba(37, 99, 235, 0.2);}.ia-contact-call:hover { background: var(--accent); color: #ffffff; transform: translateY(-2px);}.ia-contact-whatsapp { color: #ffffff; background: var(--whatsapp);}.ia-contact-whatsapp:hover { background: var(--whatsapp-hover); transform: translateY(-2px);}/* Footer Accent */.ia-brand-footer { margin-top: 20px; font-size: 9px; font-weight: 800; letter-spacing: 0.16em; text-transform: uppercase; color: #94a3b8; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-footer { animation: iaFadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.8s forwards;}/* Close Icon Button */.ia-brand-close { position: absolute; top: 16px; right: 16px; width: 32px; height: 32px; border: 1px solid var(--card-border); border-radius: 50%; background: #ffffff; color: var(--ink-secondary); font-size: 18px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 0.2s ease; opacity: 0;}#iaBrandIntro.ia-active .ia-brand-close { animation: iaPopUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) 0.3s forwards;}.ia-brand-close:hover { color: var(--ink-primary); background: #f8fafc; transform: rotate(90deg);}/* Bottom Floating Skip Trigger */.youtube-skip-btn { position: fixed; left: 20px; bottom: 20px; display: flex; align-items: center; gap: 8px; padding: 0 16px; height: 38px; background: var(--ink-primary); color: #ffffff; border-radius: 20px; font-size: 12px; font-weight: 600; text-decoration: none; box-shadow: 0 10px 20px -5px rgba(0,0,0,0.15); z-index: 99999; opacity: 0; transform: translateY(12px); transition: transform 0.2s ease, background-color 0.2s ease;}#iaBrandIntro.ia-active .youtube-skip-btn { animation: iaFadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.85s forwards;}.youtube-skip-btn:hover { background: #1e293b; transform: translateY(-2px);}.youtube-skip-btn svg { width: 13px; height: 13px;}/* Shared Reusable Keyframes */@keyframes iaZoomIn { 0% { opacity: 0; transform: scale(0.7); } 100% { opacity: 1; transform: scale(1); }}@keyframes iaPopUp { 0% { opacity: 0; transform: scale(0.88) translateY(12px); } 100% { opacity: 1; transform: scale(1) translateY(0); }}@keyframes iaFadeUp { 0% { opacity: 0; transform: translateY(12px); } 100% { opacity: 1; transform: translateY(0); }}/* Mobile Adjustments */@media (max-width: 580px) { .ia-brand-content { padding: 28px 18px; border-radius: 20px; } .ia-brand-services, .ia-brand-contact { grid-template-columns: 1fr; gap: 8px; } .youtube-skip-btn { left: 50%; transform: translateX(-50%) translateY(12px); bottom: 14px; } #iaBrandIntro.ia-active .youtube-skip-btn { animation: iaMobileSkip 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.85s forwards; }}@keyframes iaMobileSkip { 0% { opacity: 0; transform: translateX(-50%) translateY(12px); } 100% { opacity: 1; transform: translateX(-50%) translateY(0); }}</style><!-- ============================================================ IGNOU ACADEMY — OVERLAY CONTENT============================================================ --><div id="iaBrandIntro"> <div class="ia-brand-glow ia-glow-1"></div> <div class="ia-brand-glow ia-glow-2"></div> <div class="ia-brand-content"> <button type="button" class="ia-brand-close" id="iaBrandClose" aria-label="Close">×</button> <div class="ia-brand-name"> <span class="ia-brand-ignou">IGNOU</span> <span class="ia-brand-academy">ACADEMY</span> </div> <div class="ia-brand-tagline"> Your IGNOU journey, made easier. </div> <ul class="ia-brand-services"> <li> <span class="ia-tick-icon"><i class="fa-solid fa-check"></i></span> <span>Solved Assignments</span> </li> <li> <span class="ia-tick-icon"><i class="fa-solid fa-check"></i></span> <span>Study Notes</span> </li> <li> <span class="ia-tick-icon"><i class="fa-solid fa-check"></i></span> <span>Guess Papers</span> </li> <li> <span class="ia-tick-icon"><i class="fa-solid fa-check"></i></span> <span>Question Papers</span> </li> </ul> <div class="ia-brand-contact"> <a href="tel:+919199852182" class="ia-contact-btn ia-contact-call"> <i class="fa-solid fa-phone"></i> Call Us </a> <a href="https://wa.me/919199852182" class="ia-contact-btn ia-contact-whatsapp" target="_blank" rel="noopener" style="background-color:#10b981";> <i class="fa-brands fa-whatsapp"></i> WhatsApp </a> </div> <div class="ia-brand-footer"> STUDY • PREPARE • SUCCEED </div> </div> <a href="#answer-gate" id="youtubeSkipBtn" class="youtube-skip-btn" style="background-color:#000;"> <span id="youtubeSkipText">Skip in 10</span> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M4 5v14l10-7L4 5zm11 0h3v14h-3V5z"/> </svg> </a></div><script>(function () { "use strict"; const FIRST_DELAY = 3000; const REPEAT_DELAY = 40000; const MAX_SHOWS = 10; const DISPLAY_TIME = 8000; const intro = document.getElementById("iaBrandIntro"); const close = document.getElementById("iaBrandClose"); if (!intro) return; let showCount = 0; let hideTimer = null; let repeatTimer = null; function showBrand() { if (showCount >= MAX_SHOWS) { if (repeatTimer) clearInterval(repeatTimer); return; } showCount++; intro.classList.remove("ia-active"); void intro.offsetWidth; intro.classList.add("ia-active"); clearTimeout(hideTimer); hideTimer = setTimeout(hideBrand, DISPLAY_TIME); } function hideBrand() { intro.classList.remove("ia-active"); } if (close) { close.addEventListener("click", function () { clearTimeout(hideTimer); hideBrand(); }); } document.addEventListener("keydown", function (event) { if (event.key === "Escape" && intro.classList.contains("ia-active")) { hideBrand(); } }); setTimeout(function () { showBrand(); repeatTimer = setInterval(showBrand, REPEAT_DELAY); }, FIRST_DELAY);})();(function () { let seconds = 10; const skipText = document.getElementById('youtubeSkipText'); const skipBtn = document.getElementById('youtubeSkipBtn'); if (!skipText || !skipBtn) return; const timer = setInterval(function () { seconds--; if (seconds > 0) { skipText.textContent = 'Skip in ' + seconds; } else { clearInterval(timer); skipText.textContent = 'Skip'; } }, 1000); skipBtn.addEventListener('click', function (e) { e.preventDefault(); const target = document.getElementById('answer-gate'); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'center' }); } });})();</script><div class="google-login-box" id="google-login-box"> <div class="google-login-title"> Continue Reading — It's Free </div> <div class="google-login-text"> Sign in with Google to unlock more of this answer. </div> <div class="google-login-benefits"> ✓ Free access<br> ✓ Unlock up to 60% of the answer<br> ✓ No payment required </div> <div id="googleBtn"></div> <div class="google-login-note"> Quick Google sign-in. No separate registration form. </div></div><script src="https://accounts.google.com/gsi/client" async defer></script><script>(function(){ function handleAuth(response) { if ( !response || !response.credential ) { return; } let fd = new FormData(); fd.append( 'action', 'google_login' ); fd.append( 'id_token', response.credential ); fetch( 'ajax.php?type=0&method=0&app=login&mysociallogin', { method: 'POST', body: fd, credentials: 'same-origin' } ) .then(function(res){ return res.json(); }) .then(function(data){ if ( data && data.status === 'success' ) { /* * Reload the current question. * * The server will now detect and * serve the member cache / 60% version. */ window.location.reload(); } else { alert( data.message || 'Google login could not be completed. Please try again.' ); } }) .catch(function(error){ console.error( 'Google login error:', error ); alert( 'Unable to complete Google login. Please try again.' ); }); } window.handleAuth = handleAuth; function initGoogleLogin() { const googleBtn = document.getElementById( 'googleBtn' ); if (!googleBtn) { return; } if ( typeof google === 'undefined' || !google.accounts || !google.accounts.id ) { setTimeout( initGoogleLogin, 500 ); return; } google.accounts.id.initialize({ client_id: '18322582717-qirlpqhrbtg1hr9rfa47o703u9enk1e4.apps.googleusercontent.com', callback: handleAuth }); google.accounts.id.renderButton( googleBtn, { theme: 'outline', size: 'large', width: 300 } ); } initGoogleLogin();})();</script><?php if (!empty($myid)) {echo $buttonText2; } else {echo $buttonText3; } ?></div></div><div class='right'><div class='card related'><b>Related Questions</b><a href='/?ques=-explain-models-of-web-application-components-1152584376'><p> </p><p>Explain models of Web Application Components.</p></a><a href='/?ques=what-are-the-different-ways-to-authenticate-a-web-applicatio-1152584381'><p>What are the different ways to authenticate a web application?</p></a><a href='/?ques=describe-methodologies-for-session-management-testing-1152584379'><p>Describe Methodologies for Session Management Testing.</p></a><a href='/?ques=discuss-internet-security-protocols-1152584382'><p>Discuss Internet Security Protocols.</p></a><a href='/?ques=explain-xml-in-detail-1152584378'><p>Explain XML in detail.</p></a><a href='/?ques=describe-set-protocols-with-its-working-1152584377'><p>Describe SET Protocols with its working.</p></a><a href='/?ques=describe-architecture-and-characteristics-of-web-services-1152584380'><p>Describe architecture and characteristics of Web services.</p></a></div></div></div></div><script>function showAnswer(){ document.getElementById('fullanswer').style.display = 'block';}</script><!-- your HTML here --><script> function addToCart(id, type, action, oldPrice, newPrice, cdno, qtid, l, w) { /* alert("Adding to cart: " + id + " " + type + " " + action + " " + oldPrice + " " + newPrice + " " + cdno + " " + qtid + " " + l + " " + w); */ var formData = { id: id, type: type, action: action, oldPrice: oldPrice, newPrice: newPrice, cdno: cdno, qtid: qtid, l:l, w:w }; $.post("query.php?type=1&method=0&lr=0&app=401&addtocart", formData, function(response) { /* $("#mycartproduct").html("jjj"); */ showToast("Product Added"); toggleModal('cartModal'); loadmyproduct(); let el = document.getElementById("noitemincart");el.innerHTML = parseInt(el.innerHTML) + 1; document.getElementById("noitems").style.display = "none"; document.getElementById("checkout-btn").style.display = "block"; }).fail(function() { $("#mycartproduct").html("<br>Error occurred during process."); }); }</script><script>function removeproduct(m) { var formData = { m: m }; var mm = "pi" + m; $.post( "query.php?type=1&method=0&lr=0&app=401&action=removeproduct", formData, function(response) { $("#outputc").html(response); showToast("Product Removed"); /* document.getElementById(mm).style.display = "none"; */ rvfi(m); let el = document.getElementById("noitemincart");let count = parseInt(el.textContent) || 0;el.textContent = Math.max(0, count - 1);loadmyproduct(); } ).fail(function(xhr, status, error) { console.log(xhr.responseText); $("#outputc").html("<br>Error occurred during process."); });}</script><script> /* function rvfi(valueToRemove) { const input = document.getElementById("fpi"); input.value = input.value .split(",") .filter(v => v.trim() !== String(valueToRemove)) .join(","); if(input.value == "") { document.getElementById("noitems").style.display = "block"; document.getElementById("checkout-btn").style.display = "none"; } var k = document.getElementById("gpi").value + "," + valueToRemove; document.getElementById("gpi").value = k.replace(/^,/, '');}*/function rvfi(valueToRemove) { const input = document.getElementById("fpi"); const gpi = document.getElementById("gpi"); if (input) { input.value = input.value .split(",") .filter(v => v.trim() !== String(valueToRemove)) .join(","); if (input.value === "") { /* let noitems = document.getElementById("noitems"); */ let checkoutBtn = document.getElementById("checkout-btn"); /* if (noitems) noitems.style.display = "block"; */ if (checkoutBtn) checkoutBtn.style.display = "none"; } } if (gpi) { var k = gpi.value + "," + valueToRemove; gpi.value = k.replace(/^,/, ''); }}</script><script> function removeItem(button) { const item = button.closest(".cart-item"); const price = parseFloat(item.dataset.price || "0"); item.remove(); updateTotals(); } function updateTotals() { let total = 0; document.querySelectorAll(".cart-item").forEach(item => { total += parseFloat(item.dataset.price || "0"); }); if(total == 0) { document.getElementById("cart-footer").style.display = "none"; } document.getElementById("subtotal").textContent = `${total.toFixed(0)}`; document.getElementById("total").textContent = `${total.toFixed(0)}`; }</script> <script> function showToast(msg) { let toast = document.createElement("div"); toast.innerText = msg; toast.style.position = "fixed"; toast.style.bottom = "20px"; toast.style.left = "50%"; toast.style.transform = "translateX(-50%)"; toast.style.background = "#000"; toast.style.color = "#fff"; toast.style.padding = "10px 20px"; toast.style.borderRadius = "5px"; toast.style.zIndex = "9999999999"; document.body.appendChild(toast); setTimeout(() => { toast.remove(); }, 2000);} </script> <script>function loadmyproduct() { fetch("query.php?type=1&method=0&lr=0&app=401&mycartproduct=1") .then(response => response.text()) .then(html => { document.getElementById("mycartproduct").innerHTML = html; updateTotals(); }) .catch(error => { console.error("Error loading cart product:", error); });}</script><div class="ii-neo-wrap noprintflex"> <div class="ii-neo-bar"> <a href="/ignou-solved-assignments.html" class="ii-neo-btn ii-neo-btn--blue"> <span class="ii-neo-full">IGNOU Solved Assignments</span> <span class="ii-neo-short">Assignments</span> </a> <a href="/ignou-projects.html" class="ii-neo-btn ii-neo-btn--cyan"> <span class="ii-neo-full">Ignou Projects</span> <span class="ii-neo-short">Project</span> </a> <a href="/ignou-previous-year-solved-papers.html" class="ii-neo-btn ii-neo-btn--orange"> <span class="ii-neo-full">Previous Year Solved</span> <span class="ii-neo-short">Exam Papers</span> </a> <a href="/ignou-notes.html" class="ii-neo-btn ii-neo-btn--orange"> <span class="ii-neo-full">Notes</span> <span class="ii-neo-short">Notes</span> </a> <a href="/ignou-sample-question-papers.html" class="ii-neo-btn ii-neo-btn--orange"> <span class="ii-neo-full">Sample Question Papers</span> <span class="ii-neo-short">Sample Question Papers</span> </a> </div></div><script>window.addEventListener("scroll", function () { const bar = document.querySelector(".ii-neo-wrap"); if (!bar) return; if (window.scrollY > 10) { bar.classList.add("scrolled"); } else { bar.classList.remove("scrolled"); }});</script><div class="zm-footer-wrap"> <div class="zm-footer-grid"> <a href="/?login" class="zm-footer-btn zm-footer-blue" aria-label="Login"> <span class="zm-footer-full"> Login </span> <span class="zm-footer-short" aria-hidden="true"> <i class="fas fa-user"></i> </span> </a> <button type="button" class="zm-footer-btn zm-footer-cyan" onclick="toggleModal('cartModal'); loadmyproduct();" aria-label="Shopping cart"> <span class="zm-footer-full"> Cart </span> <span class="zm-footer-short" aria-hidden="true"> <i class="fas fa-cart-arrow-down"></i> </span> </button> </div></div><script> (function() { function getCookie(n){let v=document.cookie.match('(^|;) ?'+n+'=([^;]*)(;|$)');return v?v[2]:null;} let vid = getCookie("ut_vid"); if(!vid){ vid = 'v_' + Math.random().toString(36).substr(2, 9) + Date.now().toString(36); document.cookie = "ut_vid=" + vid + ";path=/;max-age=31536000;SameSite=Lax"; } const params = new URLSearchParams(window.location.search); let utm = { source: params.get('utm_source'), medium: params.get('utm_medium'), campaign: params.get('utm_campaign') }; let startTime = Date.now(); let clickBuffer = []; const send = (type, extra = {}) => { let data = { vid: vid, url: window.location.href.split('#')[0], title: document.title, ref: document.referrer, ua: navigator.userAgent, w: window.screen.width, vw: window.innerWidth, ts: new Date().toISOString(), type: type, utm: utm, ...extra }; if (clickBuffer.length > 0) { data.clicks = clickBuffer; clickBuffer = []; } let blob = new Blob([JSON.stringify(data)], {type: 'application/json'}); const endpoint = '/noajax.php?type=1&method=0&lr=0&app=usertracking&myusertracking'; if (type === 'unload' && navigator.sendBeacon) { navigator.sendBeacon(endpoint, blob); } else { fetch(endpoint, { method: 'POST', body: JSON.stringify(data), keepalive: true }).catch(() => {}); } }; window.trackEvent = (cat, act, lbl = null, val = 0) => { send('event', { category: cat, action: act, label: lbl, value: val }); }; document.addEventListener('click', (e) => { if(clickBuffer.length < 10) { clickBuffer.push({ x: e.pageX, y: e.pageY }); } }); setInterval(() => { let dur = Math.floor((Date.now() - startTime) / 1000); send('heartbeat', { duration: dur }); }, 15000); document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') { let dur = Math.floor((Date.now() - startTime) / 1000); send('unload', { duration: dur }); } }); send('view');})();</script></main><style>/* ========================= CART MODAL========================= */#cartModal { position: fixed; inset: 0; z-index: 999999999; display: none; background: rgba(0,0,0,.45); align-items: stretch; justify-content: flex-end;}#cartModal.active { display: flex;}/* ========================= CART PANEL========================= */#cartModal .modal-content { width: 97%; max-width: 600px; height: 100vh; height: 100dvh; background: #fff; display: flex; flex-direction: column; overflow: hidden; box-sizing: border-box; animation: cartSlide .3s ease forwards;}@keyframes cartSlide { from { transform: translateX(100%); } to { transform: translateX(0); }}/* ========================= HEADER========================= */#cartModal .modal-header { flex: 0 0 auto; min-height: 58px; padding: 10px 14px; display: flex; align-items: center; justify-content: space-between; box-sizing: border-box; background: #fff; color: #111; font-size: 19px; font-weight: 700; border-bottom: 1px solid #ddd;}/* ========================= CLOSE========================= */#cartModal .close-modal { width: 40px; height: 40px; border: 0; border-radius: 50%; background: transparent; color: #222; font-size: 20px; cursor: pointer; display: flex; align-items: center; justify-content: center;}/* ========================= PRODUCTS========================= */#mycartproduct { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; padding: 10px; box-sizing: border-box;}/* ========================= AJAX CONTENT========================= */#mycartproduct > * { max-width: 100%; box-sizing: border-box;}/* ========================= CART ITEM========================= */#mycartproduct .cart-item { position: relative; width: 100%; display: flex; gap: 10px; padding: 10px; margin-bottom: 10px; box-sizing: border-box; background: #0795f9; border-radius: 12px; color: #fff; overflow: visible;}/* ========================= IMAGE========================= */#mycartproduct .item-img { width: 60px; height: 60px; min-width: 60px; object-fit: cover; border-radius: 10px; flex-shrink: 0;}/* ========================= DETAILS========================= */#mycartproduct .item-details { min-width: 0; flex: 1; overflow-wrap: anywhere;}#mycartproduct .item-title { font-size: 13px; line-height: 1.4; font-weight: 600; overflow-wrap: anywhere;}#mycartproduct .item-meta { font-size: 12px; margin-top: 5px;}#mycartproduct .item-price { font-size: 15px; font-weight: 700; color: #ffeb3b;}/* ========================= REMOVE========================= */#mycartproduct .remove-product { position: absolute; top: -5px; right: -5px; width: 26px; height: 26px; border: 0; border-radius: 50%; background: rgba(0,0,0,.7); color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 10;}/* ========================= FOOTER========================= */#cartModal .cart-footer { flex: 0 0 auto; width: 100%; box-sizing: border-box; padding: 12px; background: #000; border-top: 1px solid #333; padding-bottom: calc(12px + env(safe-area-inset-bottom));}/* ========================= TOTAL LINE========================= */#cartModal .totals-line { width: 100%; display: flex; align-items: center; justify-content: space-between; box-sizing: border-box; margin: 0 0 7px 0; color: #fff; font-size: 14px;}/* ========================= CHECKOUT========================= */#cartModal .checkout-btn { width: 100%; min-height: 46px; padding: 11px; box-sizing: border-box; border: 0; border-radius: 10px; background: linear-gradient( 90deg, #00c6ff, #0072ff ); color: #fff; font-size: 14px; font-weight: 700; cursor: pointer;}/* ========================= EMPTY CART========================= */#noitems { display: none; padding: 15px; text-align: center; color: #555; font-size: 14px;}/* ========================= SMALL PHONES========================= */@media(max-width:480px) { #cartModal .modal-content { width: 100%; max-width: 100%; } #cartModal .modal-header { min-height: 54px; font-size: 17px; } #mycartproduct { padding: 8px; } #mycartproduct .cart-item { padding: 8px; } #mycartproduct .item-img { width: 55px; height: 55px; min-width: 55px; } #cartModal .cart-footer { padding: 10px; }}/* ========================= VERY SMALL PHONE========================= */@media(max-width:360px) { #mycartproduct .item-img { width: 50px; height: 50px; min-width: 50px; } #mycartproduct .item-title { font-size: 12px; } #cartModal .checkout-btn { font-size: 13px; }}/* ========================= STOP BACKGROUND SCROLL========================= */body.cart-open { overflow: hidden;}</style><div class="modal" id="cartModal"> <div class="modal-content"> <!-- HEADER --> <div class="modal-header"> <span>Cart</span> <button type="button" class="close-modal" onclick="toggleModal('cartModal')" >✖</button> </div> <!-- ONLY THIS AREA IS AJAX LOADED --> <div id="mycartproduct"> <div id="loadmycart"></div> </div> <input type="hidden" value="310,309" id="fpi" > <input type="hidden" value="" id="gpi" > <div id="noitems"> Please Buy Any 1 item to Proceed </div> </div></div><script>/* ========================================================= OPEN / CLOSE CART========================================================= */function toggleModal(modalId) { const modal = document.getElementById(modalId); if (!modal) { return; } modal.classList.toggle('active'); if (modal.classList.contains('active')) { document.body.classList.add('cart-open'); loadmyproduct(); } else { document.body.classList.remove('cart-open'); }}/* ========================================================= LOAD CART========================================================= */function loadmyproduct() { const container = document.getElementById('mycartproduct'); if (!container) { return; } /* IMPORTANT: We do NOT replace #mycartproduct anymore. Only #loadmycart is replaced. */ const loader = document.getElementById('loadmycart'); if (!loader) { return; } loader.innerHTML = '<div style="padding:30px;text-align:center;">Loading...</div>'; fetch( "query.php?type=1&method=0&lr=0&app=401&mycartproduct=1", { method: "GET", cache: "no-store" } ) .then(function(response) { if (!response.ok) { throw new Error( "HTTP " + response.status ); } return response.text(); }) .then(function(html) { loader.innerHTML = html; /* Your existing function, if available. */ if (typeof updateTotals === "function") { updateTotals(); } else { calculateCartTotal(); } }) .catch(function(error) { console.error( "Cart loading error:", error ); loader.innerHTML = '<div style="padding:20px;text-align:center;color:red;">Unable to load cart.</div>'; });}/* ========================================================= CALCULATE TOTAL========================================================= */function calculateCartTotal() { let subtotal = 0; /* Looks for .item-price inside AJAX products. Examples accepted: ₹200 ₹200.00 Rs 200 Rs. 200 200 200.00 */ const prices = document.querySelectorAll( '#loadmycart .item-price' ); prices.forEach(function(element) { let text = element.textContent || ''; text = text .replace(/₹/g, '') .replace(/Rs\.?/gi, '') .replace(/,/g, '') .trim(); let value = parseFloat(text); if (!isNaN(value)) { subtotal += value; } }); updateCartDisplay(subtotal);}/* ========================================================= UPDATE TOTAL DISPLAY========================================================= */function updateCartDisplay(total) { const subtotalElement = document.getElementById('subtotal'); const totalElement = document.getElementById('total'); const checkoutButton = document.getElementById('checkoutButton'); const noItems = document.getElementById('noitems'); const amount = Number(total) || 0; if (subtotalElement) { subtotalElement.textContent = '₹' + amount.toFixed(2); } if (totalElement) { totalElement.textContent = '₹' + amount.toFixed(2); } /* EMPTY CART */ if (amount <= 0) { if (checkoutButton) { checkoutButton.style.display = 'none'; } if (noItems) { noItems.style.display = 'block'; } } else { if (checkoutButton) { checkoutButton.style.display = 'block'; } if (noItems) { noItems.style.display = 'none'; } }}/* ========================================================= CLOSE BY CLICKING OUTSIDE========================================================= */document.addEventListener( 'click', function(event) { const modal = document.getElementById('cartModal'); if (!modal || !modal.classList.contains('active')) { return; } if (event.target === modal) { toggleModal('cartModal'); } });/* ========================================================= ESC========================================================= */document.addEventListener( 'keydown', function(event) { if (event.key !== 'Escape') { return; } const modal = document.getElementById('cartModal'); if ( modal && modal.classList.contains('active') ) { toggleModal('cartModal'); } });</script> <style> .back-to-top { position: fixed; opacity:0.85; bottom: 160px; right: 15px; background-color: #f90; color: #fff; width: 60px; /* Fixed width */ max-height: 60px; /* Fixed height */ display: flex; /* Flexbox for centering */ align-items: center; /* Vertically center the text */ justify-content: center; /* Horizontally center the text */ border-radius: 50%; /* Make it circular */ font-size: 16px; /* Font size for the text */ font-weight: bold; /* Bold text for visibility */ cursor: pointer; /* Hand cursor on hover */ display: none; /* Hidden by default */ z-index: 30; /* Ensure it stays on top */ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); /* Subtle shadow */ transition: transform 0.3s ease, background-color 0.3s ease, color 0.3s ease; text-align:center; padding:20px 0; } /* Hover Animation */ .back-to-top:hover { background-color: #232f3e; color: #f90; transform: scale(1.2); /* Slightly enlarge on hover */ } /* Button Animation on Appearance */ .back-to-top.show { display: flex; /* Make it visible */ animation: fadeInUp 0.5s ease; /* Smooth fade-in effect */ } /* Fade-in Animation */ @keyframes fadeInUp { 0% { opacity: 0; transform: translateY(20px); } 100% { opacity: 1; transform: translateY(0); } } /* General Styles for Footer */.footer { background-color: #B41140; color: #fff; font-family: 'Arial', sans-serif; padding: 40px 20px; font-size: 14px; margin-top:100px; margin-bottom:10px;}.footer .footer-container { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 30px;}/* Footer Sections */.footer-section { flex: 1; min-width: 180px;}.footer-section h3 { font-size: 16px; font-weight: 700; color: #fff; margin-bottom: 15px;}.footer-section ul { list-style: none; padding: 0; margin: 0;}.footer-section ul li { margin: 10px 0;}.footer-section ul li a { color: #fff; font-weight:400; text-decoration: none; transition: color 0.3s; }.footer-section ul li a:hover { color: #f90;}/* Social Media Icons */.social-icons { /* display: flex; gap: 20px; */}.social-icons a { color: #fff; font-size: 32px; transition: color 0.3s; margin-left: 16px;}.social-icons a:hover { color: #f90;}/* Footer Bottom */@media (min-width: 768px) {.footer-bottom { text-align: center; margin-top: 30px; font-size: 13px; color: #ccc;}}.footer-bottom a { color: #ccc; text-decoration: none; margin: 0 5px;}.footer-bottom a:hover { color: #f90;}/* Responsive Design */@media (max-width: 768px) { .footer-container { flex-direction: column; align-items: center; } .footer-section { margin-bottom: 20px; text-align: center; } .footer-bottom { text-align: center; margin-top: 30px; font-size: 13px; color: #ccc; height:200px;}}/* Floating WhatsApp Chat Button */.whatsapp-chat-btn { position: fixed; bottom: 20px; left: 20px; background-color: #25D366; border-radius: 50%; padding: 15px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); cursor: pointer; z-index: 9999;}.whatsapp-chat-btn img { width: 30px; height: 30px;}/* WhatsApp Chat Box */.whatsapp-chat-box { position: fixed; bottom: 0; right: 0; width: 300px; height: 80%; background-color: #fff; box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1); border-radius: 10px 10px 0 0; z-index: 9999; display: none; flex-direction: column; transition: bottom 0.3s ease; }.chat-header { background-color: #25D366; color: white; padding: 10px; display: flex; justify-content: space-between; align-items: center; border-radius: 10px 10px 0 0;}.chat-title { display: flex; align-items: center;}.chat-title img { width: 25px; margin-right: 10px;}.chat-body { flex: 1; padding: 10px; overflow-y: auto;}.chat-messages { display: flex; flex-direction: column; gap: 10px;}.chat-footer { padding: 10px; background-color: #f1f1f1; display: flex; align-items: center; margin-bottom:40px;}.chat-footer input { width: 80%; padding: 10px; border: 1px solid #ddd; border-radius: 20px;}.chat-footer button { width: 15%; background-color: #25D366; color: white; border: none; border-radius: 50%; padding: 12px; margin-left: 10px; cursor: pointer;}.chat-footer button:hover { background-color: #128C7E;}/* Responsive adjustments */@media (max-width: 600px) { .whatsapp-chat-btn { bottom: 90px; left: 10px; } .whatsapp-chat-box { width: 100%; max-width: 400px; }}/* User and Support Message Styles */.user-message { background-color: #dcf8c6; padding: 10px; border-radius: 20px; max-width: 80%; align-self: flex-end;}.support-message { background-color: #f1f1f1; padding: 10px; border-radius: 20px; max-width: 80%; align-self: flex-start;}/* Scrollbar styling */.chat-body::-webkit-scrollbar { width: 6px;}.chat-body::-webkit-scrollbar-thumb { background-color: #25D366; border-radius: 10px;}.chat-body::-webkit-scrollbar-track { background-color: #f1f1f1;}/* Close Chat Button */.close-chat { background: transparent; border: none; font-size: 30px; color: #fff; cursor: pointer; padding: 0; margin: 0; font-weight: bold; transition: color 0.3s ease;}.close-chat:hover { color: #128C7E; /* Change color when hovered */}/* Optional: For a more defined look, you can add a background to the button */.chat-header { background-color: #25D366; color: white; padding: 10px; display: flex; justify-content: space-between; align-items: center; border-radius: 10px 10px 0 0;}i { color:#B41140;}footer i { color:#ededed;} .submit-btn { width: 100%; background-color: #B41140; color: white; padding: 10px; font-size: 1rem; border: none; border-radius: 5px; cursor: pointer; } .submit-btn:hover { background-color: #0056b3; }</style><footer class="footer noprintflex"> <div class="footer-container"> <!-- Quick Links Section --> <div class="footer-container"><div class="footer-section"><h3>About Us</h3><ul><li><a href="/aboutus" aria-label="About IGNOU Academy"><i class="fas fa-info-circle" aria-hidden="true">></i> About IGNOU Academy</a></li><li><a href="/termsncondition" aria-label="Terms & Conditions"><i class="fas fa-file-contract" aria-hidden="true">></i> Terms & Conditions</a></li><li><a href="/privacypolicy" aria-label="Privacy Policy"><i class="fas fa-user-shield" aria-hidden="true">></i> Privacy Policy</a></li><li><a href="/cancelnreturns" aria-label="Cancel & Returns"><i class="fas fa-times" aria-hidden="true">></i> Cancel & Returns</a></li></ul></div><div class="footer-section"><h3>Link</h3><ul><li><a href="/?stu=ignou-study-material" aria-label="Study Material"><i class="fas fa-download" aria-hidden="true">></i> Study Material</a></li><li><a href="/?m=ignoudoubtsquery" aria-label="Doubt & Query"><i class="fas fa-comment" aria-hidden="true">></i> Doubt & Query</a></li><li><a href="/?m=questionblog" aria-label="Question Blog"><i class="fas fa-question-circle" aria-hidden="true">></i> Question Blog</a></li><li><a href="/blog" aria-label="Blog"><i class="fab fa-blogger-b" aria-hidden="true">></i> Blog</a></li><li><a href="/sitemap" aria-label="Sitemap"><i class="fas fa-sitemap" aria-hidden="true">></i> Sitemap</a></li></ul></div><div class="footer-section"><h3>Online Classes</h3><ul><li><a href="/teachers" aria-label="Teachers"><i class="fas fa-person-chalkboard" aria-hidden="true">></i> Teachers</a></li><li><a href="/classes" aria-label="Classes"><i class="fas fa-school" aria-hidden="true">></i> Classes</a></li><li><a href="/tuition" aria-label="Tuition"><i class="fas fa-cog" aria-hidden="true">></i> Tuition</a></li></ul></div><div class="footer-section"><h3>Social Link</h3><div class="social-icons"><a href="https://www.facebook.com/ignouacademy" aria-label="facebook"> <i class="fab fa-facebook" aria-hidden="true"></i> </a><a href="https://www.instagram.com/ignou.academy" aria-label="instagram"> <i class="fab fa-instagram" aria-hidden="true"></i> </a></div></div></div> </div> <!-- Footer Bottom Section --> <div class="footer-bottom noprint"> <p style="color:#fff;font-size:10px;">© 2026 IGNOU Academy. All Rights Reserved.</p> <p><div class="footer-bottom"><a href="/new2025">2025 New</a></div></p> </div></footer><div class="back-to-top noprintflex" id="backToTop" onclick="scrollToTop()"> Top</div><script> /* Back to Top button functionality */window.onscroll = function () { var button = document.querySelector('.back-to-top'); if (document.body.scrollTop > 50 || document.documentElement.scrollTop > 50) { button.style.display = "block"; } else { button.style.display = "none"; }};function scrollToTop() { /* Smooth scroll to the top */ window.scrollTo({ top: 0, /* Scroll to the top */ behavior: "smooth" /* Smooth scrolling effect */ });}</script> <!-- ===================================================== ULTRA ENTERPRISE CONTACT FAB v3 Glassmorphism + Magnetic Animation + Ripple Effects ===================================================== --><div class="neo-contact-system noprintflex"> <!-- BACKDROP --> <div class="neo-contact-backdrop" id="neoBackdrop"></div> <!-- CONTACT PANEL --> <div class="neo-contact-panel" id="neoContactPanel"> <a href="tel:+919199852182" class="neo-contact-item"> <div class="neo-icon-wrap call"> <span>📞</span> </div> <div class="neo-contact-content"> <strong>Call Support</strong> <small>Instant phone assistance IGNOU MSE 33 2026 - Explain XML in detail. | IGNOU Academy</small> </div> <div class="neo-arrow">→</div> </a> <a href="https://wa.me/919199852182?text=Hello%20Sir%2C%0D%0A%0D%0AI%20want%20more%20information%20about%20IGNOU%20MSE%2033%202026%20-%20Explain%20XML%20in%20detail.%20%7C%20IGNOU%20Academy.%0D%0A%0D%0APlease%20contact%20me." target="_blank" class="neo-contact-item"> <div class="neo-icon-wrap whatsapp"> <span>🟢</span> </div> <div class="neo-contact-content"> <strong>WhatsApp Chat</strong> <small>Fast live messaging</small> </div> <div class="neo-arrow">→</div> </a> <a href="mailto:myabhasolutions@gmail.com?subject=Enquiry%20for%20IGNOU%20MSE%2033%202026%20-%20Explain%20XML%20in%20detail.%20%7C%20IGNOU%20Academy&body=Hello%20Sir%2C%0D%0A%0D%0AI%20am%20interested%20in%20IGNOU%20MSE%2033%202026%20-%20Explain%20XML%20in%20detail.%20%7C%20IGNOU%20Academy.%0D%0A%0D%0APlease%20share%20more%20details.%0D%0A%0D%0AThanks." class="neo-contact-item"> <div class="neo-icon-wrap email"> <span>✉</span> </div> <div class="neo-contact-content"> <strong>Email Us</strong> <small>Business enquiries & support</small> </div> <div class="neo-arrow">→</div> </a> </div> <!-- MAIN BUTTON --> <button class="neo-fab" id="neoFab"> <div class="neo-ring"></div> <div class="neo-ring ring2"></div> <div class="neo-fab-inner"> <span class="neo-open-icon"><i class="fas fa-phone"></i></span> <span class="neo-close-icon">✕</span> </div> </button></div><style>/* ===================================================== ROOT ===================================================== */:root{ --neo-dark:#0f172a; --neo-primary:#2563eb; --neo-white:#ffffff; --neo-shadow:0 20px 60px rgba(0,0,0,.22); --neo-radius:24px; --neo-transition:all .45s cubic-bezier(.22,1,.36,1);}/* ===================================================== SYSTEM WRAP ===================================================== */.neo-contact-system{ position:fixed; right:12px; bottom:70px; z-index:40;}/* ===================================================== BACKDROP ===================================================== */.neo-contact-backdrop{ position:fixed; inset:0; background:rgba(0,0,0,.72); backdrop-filter:blur(2px); opacity:0; visibility:hidden; transition:all .35s ease;}.neo-contact-backdrop.show{ opacity:1; visibility:visible;}/* ===================================================== MAIN FAB ===================================================== */.neo-fab{ width:60px; height:60px; border:none; border-radius:50%; cursor:pointer; position:relative; overflow:hidden; background:linear-gradient(135deg,#2563eb,#1d4ed8); box-shadow: 0 12px 35px rgba(37,99,235,.35), inset 0 1px 0 rgba(255,255,255,.25); transition:var(--neo-transition); color:#ffdf00;text-shadow: 0 0 8px rgba(255,223,0,.55), 0 0 18px rgba(255,223,0,.35);}@media(max-width:480px){.neo-fab{ width:50px; height:50px;}}/* Hover Magnetic */.neo-fab:hover{ transform:translateY(-6px) scale(1.05);}/* Active */.neo-fab.active{ transform:rotate(180deg); background:linear-gradient(135deg,#ef4444,#dc2626);}/* ===================================================== FAB INNER ===================================================== */.neo-fab-inner{ position:relative; width:100%; height:100%; display:flex; align-items:center; justify-content:center; color:#fff; font-size:20px; z-index:5;}/* ICONS */.neo-open-icon,.neo-close-icon{ position:absolute; transition:all .35s ease;}.neo-close-icon{ opacity:0; transform:scale(.5) rotate(-90deg);}.neo-fab.active .neo-open-icon{ opacity:0; transform:scale(.5) rotate(90deg);}.neo-fab.active .neo-close-icon{ opacity:1; transform:scale(1) rotate(0deg);}/* ===================================================== PULSE RINGS ===================================================== */.neo-ring{ position:absolute; inset:0; border-radius:50%; border:2px solid rgba(37,99,235,.25); animation:neoPulse 2.4s infinite;}.neo-ring.ring2{ animation-delay:1.2s;}.neo-fab.active .neo-ring{ display:none;}@keyframes neoPulse{ 0%{ transform:scale(1); opacity:.8; } 100%{ transform:scale(1.9); opacity:0; }}/* ===================================================== CONTACT PANEL ===================================================== */.neo-contact-panel{ position:absolute; bottom:95px; right:0; width:340px; opacity:0; visibility:hidden; transform: translateY(40px) scale(.82) rotateX(15deg); transition:var(--neo-transition); transform-origin:bottom right;}/* SHOW PANEL */.neo-contact-panel.show{ opacity:1; visibility:visible; transform: translateY(0) scale(1) rotateX(0deg);}/* ===================================================== CONTACT ITEM ===================================================== */.neo-contact-item{ position:relative; display:flex; align-items:center; gap:16px; text-decoration:none; color:#111827; padding:14px; margin-bottom:16px; border-radius:24px; background:rgba(255,255,255,.78); backdrop-filter:blur(18px); border:1px solid rgba(255,255,255,.4); box-shadow: 0 10px 35px rgba(0,0,0,.08), inset 0 1px 0 rgba(255,255,255,.4); overflow:hidden; transition:var(--neo-transition);}/* Shine Animation */.neo-contact-item::before{ content:""; position:absolute; top:0; left:-120%; width:120%; height:100%; background: linear-gradient( 90deg, transparent, rgba(255,255,255,.55), transparent ); transition:all .8s ease;}.neo-contact-item:hover::before{ left:130%;}/* Hover */.neo-contact-item:hover{ transform: translateY(-6px) scale(1.02); box-shadow: 0 18px 50px rgba(0,0,0,.14);}/* ===================================================== ICONS ===================================================== */.neo-icon-wrap{ width:58px; height:58px; border-radius:18px; display:flex; align-items:center; justify-content:center; font-size:24px; flex-shrink:0; transition:var(--neo-transition);}.neo-contact-item:hover .neo-icon-wrap{ transform:rotate(-8deg) scale(1.08);}.neo-icon-wrap.call{ background:linear-gradient(135deg,#dcfce7,#bbf7d0);}.neo-icon-wrap.whatsapp{ background:linear-gradient(135deg,#dcfce7,#86efac);}.neo-icon-wrap.email{ background:linear-gradient(135deg,#dbeafe,#bfdbfe);}/* ===================================================== CONTENT ===================================================== */.neo-contact-content{ flex:1;}.neo-contact-content strong{ display:block; font-size:16px; font-weight:700; margin-bottom:4px;}.neo-contact-content small{ color:#6b7280; font-size:13px;}/* ===================================================== ARROW ===================================================== */.neo-arrow{ font-size:20px; opacity:.35; transition:var(--neo-transition);}.neo-contact-item:hover .neo-arrow{ transform:translateX(6px); opacity:1;}/* ===================================================== MOBILE ===================================================== */@media(max-width:768px){ .neo-contact-system{ right:15px; bottom:70px; } .neo-contact-panel{ width:300px; } .neo-fab{ width:66px; height:66px; }}</style><script>/* ===================================================== ENTERPRISE CONTACT FAB SYSTEM ===================================================== */(function(){ const fab = document.getElementById("neoFab"); const panel = document.getElementById("neoContactPanel"); const backdrop = document.getElementById("neoBackdrop"); let isOpen = false; /* =============================== TOGGLE PANEL =============================== */ function togglePanel(){ isOpen = !isOpen; fab.classList.toggle("active", isOpen); panel.classList.toggle("show", isOpen); backdrop.classList.toggle("show", isOpen); } fab.addEventListener("click", function(e){ e.stopPropagation(); createRipple(e); togglePanel(); }); /* =============================== CLOSE OUTSIDE =============================== */ backdrop.addEventListener("click", closePanel); document.addEventListener("keydown", function(e){ if(e.key === "Escape"){ closePanel(); } }); function closePanel(){ isOpen = false; fab.classList.remove("active"); panel.classList.remove("show"); backdrop.classList.remove("show"); } /* =============================== RIPPLE EFFECT =============================== */ function createRipple(e){ const ripple = document.createElement("span"); const rect = fab.getBoundingClientRect(); const size = Math.max(rect.width, rect.height); ripple.style.width = ripple.style.height = size + "px"; ripple.style.left = (e.clientX - rect.left - size / 2) + "px"; ripple.style.top = (e.clientY - rect.top - size / 2) + "px"; ripple.classList.add("neo-ripple"); fab.appendChild(ripple); setTimeout(() => ripple.remove(), 700); } /* Ripple CSS */ const style = document.createElement("style"); style.innerHTML = ` .neo-ripple{ position:absolute; border-radius:50%; transform:scale(0); background:rgba(255,255,255,.45); animation:neoRipple .7s linear; pointer-events:none; z-index:3; } @keyframes neoRipple{ to{ transform:scale(4); opacity:0; } } `; document.head.appendChild(style);})();</script><script>/*(function(){ const imgs = document.querySelectorAll('img.lazy'); if('IntersectionObserver' in window){ const io = new IntersectionObserver(entries=>{ entries.forEach(e=>{ if(e.isIntersecting){ const img = e.target; img.src = img.dataset.src; img.onload = ()=> img.parentElement.classList.add('loaded'); io.unobserve(img); } }); },{ rootMargin:'200px' }); imgs.forEach(img=>io.observe(img)); } else { imgs.forEach(img=>{ img.src = img.dataset.src; img.onload = ()=> img.parentElement.classList.add('loaded'); }); }})();*/</script><script>/*document.addEventListener("DOMContentLoaded", function () { const imgs = document.querySelectorAll("img.lazy"); if ("IntersectionObserver" in window) { const io = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.onload = function () { img.classList.add("loaded"); }; observer.unobserve(img); } }); }, { rootMargin: "200px 0px" }); imgs.forEach(img => io.observe(img)); } else { imgs.forEach(img => { img.src = img.dataset.src; }); }});*/</script><script>document.addEventListener("DOMContentLoaded", function () { const images = document.querySelectorAll("img.lazy"); if ("IntersectionObserver" in window) { const observer = new IntersectionObserver((entries, obs) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.onload = () => { img.parentElement.classList.add("loaded"); }; obs.unobserve(img); } }); }, { rootMargin: "0px", threshold: 0.1 }); images.forEach(img => observer.observe(img)); } else { images.forEach(img => { img.src = img.dataset.src; img.onload = () => { img.parentElement.classList.add("loaded"); }; }); }});</script><script>(function() {const CACHE_PREFIX = 'fa-local-v2-';const ASSETS_PATH = 'assets/icons/';const ALIASES = { 'search': 'magnifying-glass', 'cog': 'gear', 'cogs': 'gears', 'home-alt': 'house', 'home': 'house', 'user-circle-o': 'circle-user', 'facebook-f': 'facebook'};if (!document.getElementById('local-fa-styles')) { const style = document.createElement('style'); style.id = 'local-fa-styles'; style.textContent = ` svg.fab, svg.fas, svg.far { width: 1em; height: 1em; vertical-align: -0.125em; fill: currentColor; display: inline-block; } `; document.head.appendChild(style);}function injectSvg(icon, svgContent) { try { const parser = new DOMParser(); const doc = parser.parseFromString(svgContent, "image/svg+xml"); const svg = doc.querySelector("svg"); if (!svg) throw new Error("Invalid SVG"); svg.setAttribute("class", icon.className); svg.setAttribute("role", "img"); icon.replaceWith(svg); return true; } catch (e) { console.warn("SVG injection failed:", e); return false; }}function loadIcon(icon) { if (icon.dataset.faLoaded === "true") return; const classes = Array.from(icon.classList); let folder = 'solid'; if (classes.includes('fab') || classes.includes('fa-brands')) folder = 'brands'; else if (classes.includes('far') || classes.includes('fa-regular')) folder = 'regular'; const nameClass = classes.find(c => /^fa-[a-z0-9-]+$/.test(c) && !['fa-solid','fa-regular','fa-brands','fa-spin','fa-pulse','fa-fw', 'fa-stack','fa-lg','fa-2x','fa-3x','fa-4x'].includes(c) ); if (!nameClass) return; let iconName = nameClass.replace('fa-', ''); if (ALIASES[iconName]) iconName = ALIASES[iconName]; const cacheKey = CACHE_PREFIX + folder + '-' + iconName; const path = `${ASSETS_PATH}${folder}/${iconName}.svg`; console.log("Loading:", path); const cached = localStorage.getItem(cacheKey); if (cached) { if (injectSvg(icon, cached)) { icon.dataset.faLoaded = "true"; console.log("Loaded from cache:", path); return; } else { localStorage.removeItem(cacheKey); } } fetch(path) .then(res => { console.log("Fetching:", path, res.status); if (!res.ok) throw new Error("Not found"); return res.text(); }) .then(svg => { if (!svg.includes("<svg")) throw new Error("Invalid SVG"); const success = injectSvg(icon, svg); if (success) { icon.dataset.faLoaded = "true"; try { localStorage.setItem(cacheKey, svg); } catch(e){} } }) .catch(err => { console.warn("Icon failed:", path); icon.innerText = "⚠"; icon.style.color = "red"; });}function init() { const icons = document.querySelectorAll("i[class*='fa-']"); icons.forEach(loadIcon); if ('IntersectionObserver' in window) { const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { loadIcon(entry.target); observer.unobserve(entry.target); } }); }, { rootMargin: "200px" }); icons.forEach(icon => observer.observe(icon)); }}if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init);} else { init();}})();</script></body></html>