ChatGPT Prompt Engineering for Developers in 2025 (We Shared all the Secrets)
You can use ChatGPT for content creation, but what about development tasks such as coding, security, web, and debugging? We […]
You can use ChatGPT for content creation, but what about development tasks such as coding, security, web, and debugging? We […]
================================================================ */ (function () { 'use strict';var targets = document.querySelectorAll( '.spv2-hero-inner, .spv2-logos-wrap, ' + '.spv2-sec-header, .spv2-fw-card, ' + '.spv2-prob-card, .spv2-svc-card, ' + '.spv2-cta-inner' );/* Add reveal class to everything */ targets.forEach(function (el) { el.classList.add('spv2-reveal'); });/* Stagger delays for grid cards */ document.querySelectorAll('.spv2-prob-card').forEach(function (el, i) { el.classList.add('spv2-d' + (i % 4 + 1)); }); document.querySelectorAll('.spv2-svc-card').forEach(function (el, i) { el.classList.add('spv2-d' + (i % 4 + 1)); });/* IntersectionObserver */ if ('IntersectionObserver' in window) { var obs = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add('spv2-visible'); obs.unobserve(entry.target); } }); }, { threshold: 0.1 });targets.forEach(function (el) { obs.observe(el); }); } else { targets.forEach(function (el) { el.classList.add('spv2-visible'); }); }/* Immediately reveal anything already in viewport on load */ setTimeout(function () { targets.forEach(function (el) { var r = el.getBoundingClientRect(); if (r.top < window.innerHeight) { el.classList.add('spv2-visible'); } }); }, 80);}());(function () { 'use strict';/* ── Add reveal class to header + each card ── */ var headers = document.querySelectorAll('.mmv-header'); var cards = document.querySelectorAll('.mmv-card');headers.forEach(function (el) { el.classList.add('mmv-reveal'); });cards.forEach(function (el, i) { el.classList.add('mmv-reveal'); /* Stagger by card position within its row of 4 */ el.classList.add('mmv-d' + ((i % 4) + 1)); });/* ── IntersectionObserver: reveal on scroll ── */ if ('IntersectionObserver' in window) { var obs = new IntersectionObserver( function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { entry.target.classList.add('mmv-visible'); obs.unobserve(entry.target); } }); }, { threshold: 0.10 } );headers.forEach(function (el) { obs.observe(el); }); cards.forEach(function (el) { obs.observe(el); });} else { /* Fallback for very old browsers */ headers.forEach(function (el) { el.classList.add('mmv-visible'); }); cards.forEach(function (el) { el.classList.add('mmv-visible'); }); }/* ── Immediately reveal anything already visible on page load ── */ setTimeout(function () { document.querySelectorAll('.mmv-header, .mmv-card').forEach(function (el) { var r = el.getBoundingClientRect(); if (r.top < window.innerHeight) { el.classList.add('mmv-visible'); } }); }, 80);}());/* ── Portfolio ── */ const io = new IntersectionObserver( e => e.forEach(x => { if (x.isIntersecting) { x.target.classList.add('on'); io.unobserve(x.target); } }), { threshold: 0.08 } ); document.querySelectorAll('.sr').forEach(el => io.observe(el));const bo = new IntersectionObserver( e => e.forEach(x => { if (x.isIntersecting) { x.target.querySelectorAll('.fbar-f').forEach(b => { const w = b.style.width; b.style.width = '0'; setTimeout(() => b.style.width = w, 300); }); bo.unobserve(x.target); } }), { threshold: 0.3 } ); document.querySelectorAll('.fvis').forEach(el => bo.observe(el));