Question

 

 Explain how browsers handle web pages when frame support is not available.

14 Feb 2026
Answer :
Word Count : 230
When frame support is not available in a browser, the content inside the `` tag is displayed instead of the framed layout. Frames were introduced in HTML to divide the browser window into multiple sections, each capable of loading a separate HTML document using `<frameset>` and `<frame>` tags. However, older browsers or certain modern environments may not support frames, and some users may disable them due to usability or accessibility concerns. To handle such situations, web developers include </div><span id='fullanswer'> ___ ________ _________ _______ ________ ________ ____ ____ _________ __________.<br> ________ __________ ____ ____ _________.<br> _______ __________ __________ ________ ________ _____.<br> ________ ____ _________ _________ _________ _________ _________ _______ ___.<br> _________ _________ _____ _______ _____ _____ ___ ___ ________ ___ ____.<br> ____ _________ _______ _____ ________ ____ ______ ____ ____ ___ ______ _____.<br> ____ ______ ____ _______ _______ __________ _________ _________.<br> _______ _________ ________ _________ ____ ______ ________ ___.<br> _____ _______ __________ ____ ____.<br> ____ _______ _____ ________ ______ _____ _____ ____ ____.<br> ____ ____ __________ ______ __________ ______ __________ _________ _______.<br> ______ _________ ____ _________ _________.<br> _________ __________ _________ _________ ___ ______ ___ __________.<br> ________ ___ _______ _____ __________ _________ _________ ______ ___.<br> _______ __________ ________ ______ ________ _______ _________ ______ ___.<br> ___ ____ ____ ________ ___ ______ __________ __________ ____ _________ ___ ____.<br> ___ ________ ________ ______ ________ ______ _________ _________ _______ ______.<br> ________ ___ _____ _________ ____ ________ ____.<br></span><style>/* ============================================================ IGNOU ACADEMY &mdash; 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 &mdash; 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">&times;</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 &bull; PREPARE &bull; 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 &mdash; 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"> &#10003; Free access<br> &#10003; Unlock up to 60% of the answer<br> &#10003; 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=-html-lists-tables-and-formatting-1152584509'><p>&nbsp;</p><p>HTML Lists, Tables, and Formatting</p></a><a href='/?ques=-explain-the-purpose-of-hidden-fields-in-forms-and-demonstra-1152584515'><p>&nbsp;</p><p>Explain the purpose of hidden fields in forms and demonstrate their use with an example scenario.</p></a><a href='/?ques=javascript-events-and-validation-a-write-a-javascript-progra-1152584518'><p>&nbsp;JavaScript Events and Validation</p><p>&nbsp;</p><p>a) Write a JavaScript program to change the color of text dynamically based on user interaction.</p><p>&nbsp;</p><p>b) Design a JavaScript-based form validation script that checks for empty input fields and alerts the user.</p></a><a href='/?ques=-create-an-html-document-displaying-personal-details-such-as-1152584508'><p>&nbsp;</p><p>&nbsp;Create an HTML document displaying personal details such as name, enrolment number, address, and contact information in a structured format.</p></a><a href='/?ques=-create-an-html-page-showing-an-ordered-list-and-an-unordere-1152584510'><p>&nbsp;</p><p>&nbsp;Create an HTML page showing an ordered list and an unordered list with appropriate headings.</p></a><a href='/?ques=xml-and-css-concepts-a-create-a-simple-xml-document-to-store-1152584519'><p>XML and CSS Concepts</p><p>a) Create a simple XML document to store structured data and explain its components.</p><p>b) Explain how Cascading Style Sheets (CSS) can be used to enhance the presentation of HTML pages.</p></a><a href='/?ques=design-an-html-table-with-multiple-rows-and-columns-includin-1152584511'><p>Design an HTML table with multiple rows and columns, including the use of dummy data.</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')" >&#10006;</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: &#8377;200 &#8377;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(/&#8377;/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 = '&#8377;' + amount.toFixed(2); } if (totalElement) { totalElement.textContent = '&#8377;' + 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 &amp; Conditions"><i class="fas fa-file-contract" aria-hidden="true">></i> Terms &amp; 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 &amp; Returns"><i class="fas fa-times" aria-hidden="true">></i> Cancel &amp; 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 &amp; Query"><i class="fas fa-comment" aria-hidden="true">></i> Doubt &amp; 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;">&copy; 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>&#128222;</span> </div> <div class="neo-contact-content"> <strong>Call Support</strong> <small>Instant phone assistance IGNOU BCSL 147 2026 - &nbsp;&nbsp;Explain how browsers handle web pages when frame suppo | IGNOU Academy</small> </div> <div class="neo-arrow">&rarr;</div> </a> <a href="https://wa.me/919199852182?text=Hello%20Sir%2C%0D%0A%0D%0AI%20want%20more%20information%20about%20IGNOU%20BCSL%20147%202026%20-%20%C2%A0%0D%0A%0D%0A%C2%A0Explain%20how%20browsers%20handle%20web%20pages%20when%20frame%20suppo%20%7C%20IGNOU%20Academy.%0D%0A%0D%0APlease%20contact%20me." target="_blank" class="neo-contact-item"> <div class="neo-icon-wrap whatsapp"> <span>&#128994;</span> </div> <div class="neo-contact-content"> <strong>WhatsApp Chat</strong> <small>Fast live messaging</small> </div> <div class="neo-arrow">&rarr;</div> </a> <a href="mailto:myabhasolutions@gmail.com?subject=Enquiry%20for%20IGNOU%20BCSL%20147%202026%20-%20%C2%A0%0D%0A%0D%0A%C2%A0Explain%20how%20browsers%20handle%20web%20pages%20when%20frame%20suppo%20%7C%20IGNOU%20Academy&body=Hello%20Sir%2C%0D%0A%0D%0AI%20am%20interested%20in%20IGNOU%20BCSL%20147%202026%20-%20%C2%A0%0D%0A%0D%0A%C2%A0Explain%20how%20browsers%20handle%20web%20pages%20when%20frame%20suppo%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>&#9993;</span> </div> <div class="neo-contact-content"> <strong>Email Us</strong> <small>Business enquiries & support</small> </div> <div class="neo-arrow">&rarr;</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">&#10005;</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 = "&#9888;"; 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>