diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 742a15e..48dbd2f 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -26,7 +26,11 @@ "Bash(then echo \"✓ $file - EXISTS\")", "Bash(else echo \"✗ $file - MISSING\")", "Bash(fi)", - "Bash(done)" + "Bash(done)", + "Bash(sudo apt-get:*)", + "Bash(sudo apt-get install:*)", + "Bash(npm install:*)", + "Bash(terser:*)" ], "deny": [] } diff --git a/.htaccess b/.htaccess index bed900b..42f4e33 100644 --- a/.htaccess +++ b/.htaccess @@ -26,14 +26,109 @@ Header always set Referrer-Policy "strict-origin-when-cross-origin" -# Basic compression (if mod_deflate is available) +# Enhanced Gzip compression - AddOutputFilterByType DEFLATE text/plain - AddOutputFilterByType DEFLATE text/html - AddOutputFilterByType DEFLATE text/css - AddOutputFilterByType DEFLATE application/javascript + # Enable compression for all text-based files + AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript + AddOutputFilterByType DEFLATE application/javascript application/x-javascript + AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml + AddOutputFilterByType DEFLATE application/json application/ld+json + AddOutputFilterByType DEFLATE image/svg+xml + AddOutputFilterByType DEFLATE font/ttf font/otf font/eot font/woff font/woff2 + + # Remove browser bugs for older browsers + BrowserMatch ^Mozilla/4 gzip-only-text/html + BrowserMatch ^Mozilla/4\.0[678] no-gzip + BrowserMatch \bMSIE !no-gzip !gzip-only-text/html + Header append Vary User-Agent +# Enable Brotli compression if available + + AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript + AddOutputFilterByType BROTLI_COMPRESS application/javascript application/x-javascript + AddOutputFilterByType BROTLI_COMPRESS application/xml application/xhtml+xml application/rss+xml + AddOutputFilterByType BROTLI_COMPRESS application/json application/ld+json + AddOutputFilterByType BROTLI_COMPRESS image/svg+xml + AddOutputFilterByType BROTLI_COMPRESS font/ttf font/otf font/woff font/woff2 + + +# Browser Caching Headers + + ExpiresActive On + + # Images - 1 year + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/jpg "access plus 1 year" + ExpiresByType image/gif "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/webp "access plus 1 year" + ExpiresByType image/svg+xml "access plus 1 year" + ExpiresByType image/x-icon "access plus 1 year" + ExpiresByType image/ico "access plus 1 year" + + # Fonts - 1 year + ExpiresByType font/ttf "access plus 1 year" + ExpiresByType font/otf "access plus 1 year" + ExpiresByType font/woff "access plus 1 year" + ExpiresByType font/woff2 "access plus 1 year" + ExpiresByType application/font-woff "access plus 1 year" + ExpiresByType application/font-woff2 "access plus 1 year" + + # CSS and JavaScript - 1 month + ExpiresByType text/css "access plus 1 month" + ExpiresByType application/javascript "access plus 1 month" + ExpiresByType text/javascript "access plus 1 month" + ExpiresByType application/x-javascript "access plus 1 month" + + # HTML and PHP - 1 hour + ExpiresByType text/html "access plus 1 hour" + ExpiresByType application/xhtml+xml "access plus 1 hour" + + # Data - no cache + ExpiresByType application/json "access plus 0 seconds" + ExpiresByType application/xml "access plus 0 seconds" + ExpiresByType text/xml "access plus 0 seconds" + + # Default - 1 week + ExpiresDefault "access plus 1 week" + + +# Cache-Control Headers + + # Static assets - 1 year + + Header set Cache-Control "max-age=31536000, public, immutable" + + + # CSS and JS - 1 month + + Header set Cache-Control "max-age=2592000, public" + + + # HTML/PHP - 1 hour + + Header set Cache-Control "max-age=3600, public, must-revalidate" + + + # Keep-alive + Header set Connection keep-alive + + +# HTTP/2 Server Push + + # Push critical resources + + Header add Link "; rel=preload; as=style" + Header add Link "; rel=preload; as=image" + Header add Link "; rel=preload; as=script" + + + +# ETags +FileETag None +Header unset ETag + # Disable directory browsing Options -Indexes diff --git a/about.php b/about.php index cceb413..23a0721 100644 --- a/about.php +++ b/about.php @@ -199,7 +199,7 @@ $canonical_url = "https://ukdataservices.co.uk/about.php";
-

About UK Data Services

+

About UK Data Services - Expert Web Scraping & Business Intelligence

Your trusted partner for professional data solutions since 2018

diff --git a/assets/css/main.min.css b/assets/css/main.min.css new file mode 100644 index 0000000..8d546d5 --- /dev/null +++ b/assets/css/main.min.css @@ -0,0 +1 @@ +*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:'Roboto Slab',Lato,sans-serif;line-height:1.6;color:#444;background-color:#fff}.container{max-width:1200px;margin:0 auto;padding:0 20px}.btn{display:inline-block;padding:14px 28px;border:none;border-radius:8px;text-decoration:none;font-weight:500;font-size:16px;text-align:center;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px rgba(0,0,0,.1);font-family:inherit;line-height:1.4;white-space:nowrap;min-height:48px;display:inline-flex;align-items:center;justify-content:center}.btn-primary{background:#179e83;color:#fff!important;text-decoration:none!important}.btn-primary:hover{transform:translateY(-2px);background:#11725e;box-shadow:0 4px 16px rgba(23,158,131,.3);color:#fff!important;text-decoration:none!important}.btn-secondary{background:#fff;color:#144784!important;border:2px solid #144784;text-decoration:none!important}.btn-secondary:hover{background:#144784;color:#fff!important;transform:translateY(-2px);text-decoration:none!important}.btn-full{width:100%}.highlight{background:linear-gradient(135deg,#179e83,#1bbc9b);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.section-header{text-align:center;margin-bottom:60px}.section-header h2{font-size:2.5rem;font-weight:600;margin-bottom:16px;color:#1a1a1a}.section-header p{font-size:1.2rem;color:#666;max-width:600px;margin:0 auto}.navbar{position:fixed;top:0;width:100%;background:rgba(255,255,255,.95);backdrop-filter:blur(10px);border-bottom:1px solid rgba(0,0,0,.1);z-index:1000;transition:all .3s ease}.navbar.scrolled{background:rgba(255,255,255,.98);box-shadow:0 2px 20px rgba(0,0,0,.1)}.nav-container{max-width:1200px;margin:0 auto;padding:0 20px;display:flex;justify-content:space-between;align-items:center;height:70px}.nav-logo img{height:40px;width:auto}.nav-menu{display:flex;align-items:center;gap:30px}.nav-link{text-decoration:none;color:#1a1a1a;font-weight:500;transition:color .3s ease}.nav-link:hover{color:#144784}.nav-link.cta-button{background:#179e83;color:#fff;padding:10px 20px;border-radius:6px;transition:all .3s ease}.nav-link.cta-button:hover{transform:translateY(-2px);background:#11725e;box-shadow:0 4px 16px rgba(23,158,131,.3)}.nav-toggle{display:none;flex-direction:column;cursor:pointer}.bar{width:25px;height:3px;background:#1a1a1a;margin:3px 0;transition:.3s}.hero{padding:120px 0 80px;background:linear-gradient(135deg,#252d3b 0,#144784 100%);min-height:100vh;display:flex;align-items:center;color:#fff;position:relative;overflow:hidden}.hero::before{content:'';position:absolute;top:0;right:0;width:50%;height:100%;background:url('data:image/svg+xml,') no-repeat center;background-size:contain;animation:float 6s ease-in-out infinite}@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-20px)}}.hero-container{max-width:1200px;margin:0 auto;padding:0 20px;display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:center}.hero-content{animation:fadeInUp 1s ease}.hero-title{font-size:3.5rem;font-weight:700;line-height:1.2;margin-bottom:24px;color:#fff}.hero-subtitle{font-size:1.3rem;color:#fff;margin-bottom:40px;line-height:1.6;opacity:.9}.hero-buttons{display:flex;gap:20px;margin-bottom:60px}.hero-stats{display:flex;gap:40px}.stat{text-align:center}.stat-number{display:block;font-size:2rem;font-weight:700;color:#fff}.stat-label{display:block;font-size:.9rem;color:#fff;font-weight:500}.hero-image{animation:fadeInRight 1s ease;position:relative;z-index:2}.hero-graphic{width:100%;height:auto;max-width:500px;animation:float 6s ease-in-out infinite}.hero-graphic svg{width:100%;height:auto;filter:drop-shadow(0 10px 30px rgba(0, 0, 0, .1))}.hero-graphic .bg-circle-1{animation:rotate 20s linear infinite;transform-origin:center}.hero-graphic .bg-circle-2{animation:rotate 15s linear infinite reverse;transform-origin:center}.hero-graphic .browser-main{animation:pulse 4s ease-in-out infinite}.hero-graphic .database{animation:pulse 6s ease-in-out infinite}.hero-graphic .dashboard{animation:pulse 5s ease-in-out infinite}.hero-graphic .chart-bar-1{animation:grow-bar 3s ease-in-out infinite}.hero-graphic .chart-bar-2{animation:grow-bar 3s ease-in-out infinite .5s}.hero-graphic .chart-bar-3{animation:grow-bar 3s ease-in-out infinite 1s}.hero-graphic .chart-bar-4{animation:grow-bar 3s ease-in-out infinite 1.5s}.hero-graphic .chart-bar-5{animation:grow-bar 3s ease-in-out infinite 2s}.hero-graphic .extraction-path{stroke-dasharray:200;stroke-dashoffset:200;animation:draw-line 4s ease-in-out infinite}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes grow-bar{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.3)}}@keyframes draw-line{0%{stroke-dashoffset:200}50%{stroke-dashoffset:0}100%{stroke-dashoffset:-200}}@keyframes data-pulse{0%,100%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.1)}}.hero-img{width:100%;height:auto;max-width:500px}.services{padding:100px 0;background:#fff}.services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:30px}.service-card{background:#fff;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,.08);transition:all .3s ease;border:1px solid #f0f0f0}.service-card:hover{transform:translateY(-8px);box-shadow:0 8px 40px rgba(0,0,0,.12)}.service-icon{width:60px;height:60px;margin-bottom:24px}.service-icon img{width:100%;height:100%}.service-card h3{font-size:1.5rem;font-weight:600;margin-bottom:16px;color:#1a1a1a}.service-card p{color:#666;margin-bottom:20px;line-height:1.6}.service-card ul{list-style:none}.service-card li{padding:8px 0;color:#555;position:relative;padding-left:20px}.service-card li:before{content:'✓';position:absolute;left:0;color:#179e83;font-weight:700}.process{padding:100px 0;background:#f8f9fa}.process-steps{max-width:800px;margin:0 auto}.step{display:flex;align-items:flex-start;margin-bottom:50px;animation:fadeInUp .6s ease}.step:last-child{margin-bottom:0}.step-number{background:#179e83;color:#fff;width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1.2rem;margin-right:30px;flex-shrink:0}.step-content h3{font-size:1.4rem;font-weight:600;margin-bottom:12px;color:#1a1a1a}.step-content p{color:#666;line-height:1.6}.why-us{padding:100px 0;background:#fff}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:40px}.feature{text-align:center;padding:30px;animation:fadeInUp .6s ease}.feature-icon{width:80px;height:80px;margin:0 auto 24px}.feature-icon img{width:100%;height:100%}.feature h3{font-size:1.3rem;font-weight:600;margin-bottom:16px;color:#1a1a1a}.feature p{color:#666;line-height:1.6}.contact{padding:100px 0;background:#f8f9fa}.contact-content{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:start}.contact-info h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:#1a1a1a}.contact-info p{font-size:1.2rem;color:#666;margin-bottom:40px;line-height:1.6}.contact-details{display:flex;flex-direction:column;gap:30px}.contact-item{display:flex;align-items:center;gap:20px}.contact-item img{width:40px;height:40px}.contact-item strong{display:block;font-weight:600;color:#1a1a1a;margin-bottom:4px}.contact-item p{margin:0;color:#666}.contact-item a{color:#179e83;text-decoration:none}.contact-item a:hover{text-decoration:underline}.contact-form{background:#fff;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,.08)}.form-group{margin-bottom:24px}.form-group label{display:block;font-weight:500;margin-bottom:8px;color:#1a1a1a}.form-group input,.form-group select,.form-group textarea{width:100%;padding:14px 16px;border:2px solid #e1e5e9;border-radius:8px;font-size:16px;transition:border-color .3s ease;background:#fff}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:0;border-color:#179e83;box-shadow:0 0 0 3px rgba(23,158,131,.1)}.form-group textarea{resize:vertical;min-height:120px}.footer{background:#151f25;color:#fff;padding:60px 0 30px}.footer-content{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:40px;margin-bottom:40px}.footer-section h3{font-size:1.2rem;font-weight:600;margin-bottom:20px;color:#fff}.footer-section ul{list-style:none}.footer-section li{margin-bottom:12px}.footer-section a{color:#ccc;text-decoration:none;transition:color .3s ease}.footer-section a:hover{color:#179e83}.footer-logo img{height:40px;margin-bottom:20px}.footer-section p{color:#ccc;line-height:1.6}.footer-bottom{border-top:1px solid #333;padding-top:30px;display:flex;justify-content:space-between;align-items:center}.social-links{display:flex;gap:20px}.social-links a{display:block;width:40px;height:40px}.social-links img{width:100%;height:100%;filter:invert(1);transition:filter .3s ease}.social-links a:hover img{filter:invert(.7) sepia(1) saturate(2) hue-rotate(240deg)}@keyframes fadeInUp{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInRight{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeInLeft{from{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-20px)}}@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes slideInFromBottom{from{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}.animate-on-scroll{opacity:0;transform:translateY(30px);transition:all .8s ease-out}.animate-on-scroll.animated{opacity:1;transform:translateY(0)}.service-card{animation:slideInFromBottom .6s ease-out forwards;animation-delay:var(--animation-delay, 0s)}.feature{animation:fadeInUp .6s ease-out forwards;animation-delay:var(--animation-delay, 0s)}.step{animation:fadeInLeft .6s ease-out forwards;animation-delay:var(--animation-delay, 0s)}@media (max-width:768px){.featured-grid{grid-template-columns:1fr}.featured-article.main-feature{grid-row:span 1}.articles-grid{grid-template-columns:1fr}.newsletter-form .form-group{flex-direction:column}.article-title{font-size:2.2rem}.article-author{flex-direction:column;text-align:center;gap:15px}.blog-categories h2,.blog-featured h2,.blog-recent h2{font-size:2rem}}@media (max-width:768px){.nav-menu{position:fixed;left:-100%;top:70px;flex-direction:column;background-color:#fff;width:100%;text-align:center;transition:.3s;box-shadow:0 10px 27px rgba(0,0,0,.05);padding:40px 0;gap:20px}.nav-menu.active{left:0}.nav-toggle{display:flex}.nav-toggle.active .bar:nth-child(2){opacity:0}.nav-toggle.active .bar:first-child{transform:translateY(8px) rotate(45deg)}.nav-toggle.active .bar:nth-child(3){transform:translateY(-8px) rotate(-45deg)}.hero-container{grid-template-columns:1fr;gap:40px;text-align:center}.hero-title{font-size:2.5rem}.hero-buttons{flex-direction:column;align-items:center}.hero-stats{justify-content:center;gap:30px}.section-header h2{font-size:2rem}.services-grid{grid-template-columns:1fr}.features-grid{grid-template-columns:1fr}.contact-content{grid-template-columns:1fr;gap:40px}.footer-content{grid-template-columns:1fr;gap:30px;text-align:center}.footer-bottom{flex-direction:column;gap:20px;text-align:center}}@media (max-width:480px){.container{padding:0 15px}.hero{padding:100px 0 60px}.hero-title{font-size:2rem}.hero-subtitle{font-size:1.1rem}.btn{padding:12px 24px;font-size:14px}.contact-form,.service-card{padding:30px 20px}.step{flex-direction:column;text-align:center}.step-number{margin:0 0 20px 0}}img{max-width:100%;height:auto;loading:lazy}.logo{height:auto;max-height:50px;width:auto}.footer-logo img{height:40px;width:auto}.loading{opacity:.6;pointer-events:none}.blog-categories{padding:80px 0;background:#f8f9fa}.blog-categories h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.blog-featured{padding:80px 0;background:#fff}.blog-featured h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.featured-grid{display:grid;grid-template-columns:2fr 1fr 1fr;gap:30px}.featured-article{background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,.08);border:1px solid #f0f0f0;transition:all .3s ease}.featured-article:hover{transform:translateY(-5px);box-shadow:0 8px 40px rgba(0,0,0,.12)}.featured-article.main-feature{grid-row:span 2}.featured-article .article-image{height:200px;overflow:hidden}.featured-article.main-feature .article-image{height:300px}.featured-article .article-image img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.featured-article:hover .article-image img{transform:scale(1.05)}.featured-article .article-content{padding:30px}.article-meta{display:flex;align-items:center;gap:15px;margin-bottom:15px;font-size:14px}.article-meta .category{background:#179e83;color:#fff;padding:5px 12px;border-radius:15px;font-weight:500;text-decoration:none}.article-meta time{color:#666;font-weight:500}.article-meta .read-time{color:#666;font-weight:500}.featured-article h3{font-size:1.4rem;font-weight:600;margin-bottom:15px;line-height:1.3}.featured-article h3 a{color:#1a1a1a;text-decoration:none;transition:color .3s ease}.featured-article h3 a:hover{color:#179e83}.featured-article p{color:#666;line-height:1.6;margin-bottom:20px}.article-footer{display:flex;justify-content:space-between;align-items:center;border-top:1px solid #f0f0f0;padding-top:15px;margin-top:15px}.article-footer .read-more{color:#179e83;text-decoration:none;font-weight:500;transition:color .3s ease}.article-footer .read-more:hover{color:#144784;text-decoration:underline}.blog-recent{padding:80px 0;background:#f8f9fa}.blog-recent h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.articles-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:30px;margin-bottom:50px}.article-card{background:#fff;padding:30px;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.08);border:1px solid #f0f0f0;transition:all .3s ease}.article-card:hover{transform:translateY(-5px);box-shadow:0 8px 40px rgba(0,0,0,.12)}.article-card h3{font-size:1.3rem;font-weight:600;margin-bottom:15px;line-height:1.3}.article-card h3 a{color:#1a1a1a;text-decoration:none;transition:color .3s ease}.article-card h3 a:hover{color:#179e83}.article-card p{color:#666;line-height:1.6;margin-bottom:20px}.blog-pagination{display:flex;justify-content:center;align-items:center;gap:20px;margin-top:40px}.pagination-info{color:#666;font-weight:500}.blog-newsletter{padding:80px 0;background:linear-gradient(135deg,#144784 0,#179e83 100%);color:#fff;text-align:center}.newsletter-content h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:#fff}.newsletter-content p{font-size:1.2rem;margin-bottom:40px;opacity:.95;max-width:600px;margin-left:auto;margin-right:auto}.newsletter-form .form-group{display:flex;max-width:500px;margin:0 auto 20px;gap:15px}.newsletter-form input{flex:1;padding:15px 20px;border:none;border-radius:50px;font-size:16px;background:rgba(255,255,255,.95);color:#333}.newsletter-form .btn{padding:15px 30px;border-radius:50px;white-space:nowrap}.newsletter-privacy{font-size:14px;opacity:.8;max-width:400px;margin:0 auto}.newsletter-privacy a{color:#fff;text-decoration:underline}.blog-article{padding:40px 0 80px;background:#fff;position:relative;clear:both;width:100%}.blog-article .container{max-width:1200px;margin:0 auto;padding:0 20px;position:relative}.article-header{max-width:800px;margin:0 auto 40px;text-align:center}.article-title{font-size:3rem;font-weight:700;margin-bottom:20px;color:#1a1a1a;line-height:1.2}.article-subtitle{font-size:1.3rem;color:#666;margin-bottom:30px;line-height:1.6}.article-author{display:flex;justify-content:space-between;align-items:center;margin-top:30px;text-align:left}.author-info strong{color:#1a1a1a;font-weight:600;display:block;margin-bottom:5px}.author-info p{color:#666;margin:0;font-size:14px}.article-share a{color:#179e83;text-decoration:none;font-weight:500;padding:8px 16px;border:1px solid #179e83;border-radius:6px;transition:all .3s ease}.article-share a:hover{background:#179e83;color:#fff}.article-image{max-width:1000px;margin:0 auto 40px;border-radius:16px;overflow:hidden;box-shadow:0 8px 40px rgba(0,0,0,.12)}.article-image img{width:100%;height:auto;display:block}.article-toc{max-width:800px;margin:0 auto 40px;background:#f8f9fa;padding:30px;border-radius:12px;border:1px solid #e1e5e9}.article-toc h2{font-size:1.3rem;font-weight:600;margin-bottom:20px;color:#1a1a1a}.article-toc ol{list-style:none;counter-reset:toc-counter}.article-toc li{counter-increment:toc-counter;margin-bottom:10px}.article-toc li::before{content:counter(toc-counter) ". ";color:#179e83;font-weight:600}.article-toc a{color:#144784;text-decoration:none;font-weight:500;transition:color .3s ease}.article-toc a:hover{color:#179e83;text-decoration:underline}.article-content{max-width:800px;margin:0 auto;line-height:1.7;background:#fff;position:relative;z-index:1}.article-content pre{background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;padding:0;margin:25px 0;overflow-x:auto;position:relative}.article-content pre code{display:block;background:0 0;border:none;border-radius:0;padding:20px;font-family:Monaco,Menlo,'Ubuntu Mono',Consolas,'Courier New',monospace;font-size:14px;line-height:1.6;color:#495057;white-space:pre;overflow-x:auto;margin:0}.article-content code{background:#f1f3f4;padding:2px 6px;border-radius:4px;font-family:Monaco,Menlo,'Ubuntu Mono',Consolas,'Courier New',monospace;font-size:.9em;color:#d63384}.article-content pre code{background:0 0;padding:20px;color:#495057}.article-content pre{position:relative;cursor:pointer}.article-content pre:hover::before{content:'📋 Copy';position:absolute;top:10px;right:10px;background:#179e83;color:#fff;padding:5px 10px;border-radius:4px;font-size:12px;cursor:pointer;z-index:10}.article-content pre[data-copied]:hover::before{content:'✅ Copied!';background:#10b981}.article-content pre:hover{border-color:#179e83;box-shadow:0 2px 8px rgba(23,158,131,.1)}.article-content h2{font-size:2rem;font-weight:600;margin:40px 0 20px;color:#1a1a1a;border-bottom:2px solid #179e83;padding-bottom:10px}.article-content h3{font-size:1.5rem;font-weight:600;margin:30px 0 15px;color:#144784}.article-content p{margin-bottom:20px;color:#444}.article-content ol,.article-content ul{margin-bottom:20px;padding-left:25px}.article-content li{margin-bottom:8px;color:#444}.article-content a{color:#179e83;text-decoration:underline;transition:color .3s ease}.article-content a:hover{color:#144784}.callout-box{background:#f8f9fa;border-left:4px solid #179e83;padding:20px;margin:30px 0;border-radius:0 8px 8px 0}.callout-box.legal-warning{background:#fff3cd;border-left-color:#f59e0b}.callout-box h3{margin-top:0;margin-bottom:15px;color:#1a1a1a}.comparison-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;margin:30px 0;width:100%;clear:both}.comparison-item{background:#fff;padding:25px;border-radius:12px;border:1px solid #e1e5e9;box-shadow:0 2px 8px rgba(0,0,0,.05)}.comparison-item h4{margin-bottom:15px;color:#144784;font-size:1.2rem}.best-practice-box{background:linear-gradient(135deg,#e8f5f3 0,#f0f9ff 100%);border:1px solid #179e83;border-radius:12px;padding:25px;margin:30px 0}.best-practice-box h3{margin-top:0;color:#144784}img{height:auto;max-width:100%}img[loading=lazy]{opacity:0;transition:opacity .3s ease}img[loading=lazy].loaded{opacity:1}picture img{width:100%;height:auto}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid #179e83;outline-offset:2px;box-shadow:0 0 0 4px rgba(23,158,131,.1)}.reading-progress{position:fixed;top:70px;left:0;width:0%;height:3px;background:linear-gradient(90deg,#179e83,#144784);z-index:999;transition:width .3s ease}.category-link{background:#179e83;color:#fff!important;padding:5px 12px;border-radius:15px;font-weight:500;text-decoration:none;transition:background .3s ease}.category-link:hover{background:#144784;color:#fff!important;text-decoration:none}.loading::after{content:'';position:absolute;top:50%;left:50%;width:20px;height:20px;margin:-10px 0 0 -10px;border:2px solid #f3f3f3;border-top:2px solid #179e83;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.notification{position:fixed;top:20px;right:20px;z-index:10000;max-width:400px;padding:16px 20px;border-radius:8px;color:#fff;font-family:'Roboto Slab',sans-serif;font-size:14px;box-shadow:0 4px 12px rgba(0,0,0,.15);transition:all .3s ease}.notification-success{background:#10b981}.notification-error{background:#ef4444}.notification-info{background:#3b82f6}.notification-content{display:flex;justify-content:space-between;align-items:center;gap:12px}.notification-close{background:0 0;border:none;color:#fff;font-size:18px;cursor:pointer;padding:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center}.scroll-top-btn{position:fixed;bottom:30px;right:30px;width:50px;height:50px;border:none;border-radius:50%;background:linear-gradient(135deg,#179e83 0,#144784 100%);color:#fff;font-size:20px;cursor:pointer;opacity:0;visibility:hidden;transition:all .3s ease;z-index:1000;box-shadow:0 4px 12px rgba(0,0,0,.15)}.scroll-top-btn:hover{transform:translateY(-3px);box-shadow:0 6px 20px rgba(0,0,0,.2)}.tooltip{position:absolute;background:#1a1a1a;color:#fff;padding:8px 12px;border-radius:6px;font-size:14px;white-space:nowrap;z-index:10000;pointer-events:none;transition:opacity .3s ease}.form-group.error input,.form-group.error select,.form-group.error textarea{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,.1)}.form-group.success input,.form-group.success select,.form-group.success textarea{border-color:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.1)}.form-error-message{color:#ef4444;font-size:12px;margin-top:4px;display:block}img.loading{background:#f0f0f0;opacity:.7}img.loaded{transition:opacity .3s ease;opacity:1}.btn{position:relative;overflow:hidden}.btn::before{content:'';position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.btn:hover::before{left:100%}@media print{.footer,.navbar,.notification,.scroll-top-btn{display:none!important}.hero{background:#fff!important;color:#000!important}.page-hero,.service-hero{background:#fff!important;color:#000!important}body{font-size:12pt;line-height:1.4}h1,h2,h3,h4,h5,h6{color:#000!important;page-break-after:avoid}.container{max-width:none;margin:0;padding:0}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}a:focus,button:focus,input:focus,select:focus,textarea:focus{outline:2px solid #179e83;outline-offset:2px}@media (prefers-contrast:high){.btn-primary{background:#000;border:2px solid #000}.highlight{background:#000;-webkit-background-clip:text;-webkit-text-fill-color:transparent}}@media (prefers-reduced-motion:reduce){*,::after,::before{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important;scroll-behavior:auto!important}}@media (prefers-color-scheme:dark){:root{--bg-primary:#1a1a1a;--bg-secondary:#2d2d2d;--text-primary:#ffffff;--text-secondary:#cccccc}}.btn:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid #179e83;outline-offset:2px;box-shadow:0 0 0 4px rgba(23,158,131,.1)}.skip-to-content{position:absolute;top:-40px;left:6px;background:#179e83;color:#fff;padding:8px;border-radius:4px;text-decoration:none;z-index:100000;transition:top .3s}.skip-to-content:focus{top:6px}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.error-container{position:relative}.form-group{position:relative}.form-group label{transition:all .3s ease}.form-group input:focus+label,.form-group select:focus+label,.form-group textarea:focus+label{color:#179e83}.status-indicator{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:8px}.status-online{background:#10b981;box-shadow:0 0 0 2px rgba(16,185,129,.3);animation:pulse-green 2s infinite}.status-offline{background:#ef4444}.status-pending{background:#f59e0b;animation:pulse-yellow 2s infinite}@keyframes pulse-green{0%{box-shadow:0 0 0 0 rgba(16,185,129,.7)}70%{box-shadow:0 0 0 6px rgba(16,185,129,0)}100%{box-shadow:0 0 0 0 rgba(16,185,129,0)}}@keyframes pulse-yellow{0%{box-shadow:0 0 0 0 rgba(245,158,11,.7)}70%{box-shadow:0 0 0 6px rgba(245,158,11,0)}100%{box-shadow:0 0 0 0 rgba(245,158,11,0)}}.breadcrumb{background:#f8f9fa;padding:20px 0;border-bottom:1px solid #e1e5e9}.breadcrumb nav{max-width:1200px;margin:0 auto;padding:0 20px}.breadcrumb ol{display:flex;list-style:none;margin:0;padding:0;align-items:center;gap:8px}.breadcrumb li{display:flex;align-items:center}.breadcrumb li:not(:last-child)::after{content:'>';margin-left:8px;color:#666;font-weight:500}.breadcrumb a{color:#179e83;text-decoration:none;font-weight:500;transition:color .3s ease}.breadcrumb a:hover{color:#144784;text-decoration:underline}.breadcrumb li[aria-current=page] span{color:#666;font-weight:500}.page-hero{background:linear-gradient(135deg,#144784 0,#179e83 100%);color:#fff;padding:120px 0 80px;text-align:center;position:relative;overflow:hidden}.page-hero::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:url('data:image/svg+xml,') no-repeat bottom;background-size:cover}.page-hero .hero-content{position:relative;z-index:2;max-width:800px;margin:0 auto}.page-hero h1{font-size:3rem;font-weight:700;margin-bottom:20px;color:#fff;line-height:1.2}.page-hero .hero-subtitle{font-size:1.25rem;margin-bottom:30px;opacity:.95;line-height:1.6}.page-hero .hero-stats{display:flex;justify-content:center;gap:40px;margin-top:40px}.page-hero .hero-search{max-width:500px;margin:30px auto 0;position:relative}.page-hero .hero-search input{width:100%;padding:15px 50px 15px 20px;border:none;border-radius:50px;font-size:16px;background:rgba(255,255,255,.95);color:#333}.page-hero .hero-search button{position:absolute;right:15px;top:50%;transform:translateY(-50%);background:0 0;border:none;font-size:18px;cursor:pointer;color:#666}.service-hero{background:linear-gradient(135deg,#144784 0,#179e83 100%);color:#fff;padding:120px 0 80px;text-align:center;position:relative}.service-hero .hero-content{max-width:900px;margin:0 auto}.service-hero h1{font-size:3rem;font-weight:700;margin-bottom:20px;line-height:1.2}.service-hero .hero-subtitle{font-size:1.25rem;margin-bottom:40px;opacity:.95;line-height:1.6}.service-hero .hero-stats{display:flex;justify-content:center;gap:40px;margin:40px 0}.service-hero .hero-cta{display:flex;justify-content:center;gap:20px;flex-wrap:wrap}.service-features{padding:80px 0;background:#f8f9fa}.service-features h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.service-features .features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:30px;max-width:1200px;margin:0 auto}.feature-card{background:#fff;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,.08);transition:all .3s ease;border:1px solid #f0f0f0}.feature-card:hover{transform:translateY(-8px);box-shadow:0 8px 40px rgba(0,0,0,.12)}.feature-card .feature-icon{font-size:3rem;margin-bottom:20px;display:block}.feature-card h3{font-size:1.5rem;font-weight:600;margin-bottom:16px;color:#1a1a1a}.feature-card p{color:#666;margin-bottom:20px;line-height:1.6}.feature-card ul{list-style:none;padding:0}.feature-card li{padding:8px 0;color:#555;position:relative;padding-left:20px}.feature-card li:before{content:'✓';position:absolute;left:0;color:#179e83;font-weight:700}.industries{padding:80px 0;background:#fff}.industries h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.industries-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:30px;max-width:1200px;margin:0 auto}.industry-card{background:#f8f9fa;padding:30px;border-radius:12px;transition:all .3s ease;border:1px solid #e1e5e9}.industry-card:hover{transform:translateY(-5px);box-shadow:0 8px 25px rgba(0,0,0,.1);background:#fff}.industry-card h3{font-size:1.3rem;font-weight:600;margin-bottom:12px;color:#144784}.industry-card p{color:#666;line-height:1.6}.pricing{padding:80px 0;background:#f8f9fa}.pricing h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.pricing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:30px;max-width:1000px;margin:0 auto}.pricing-card{background:#fff;padding:40px 30px;border-radius:16px;text-align:center;position:relative;border:2px solid #e1e5e9;transition:all .3s ease}.pricing-card.featured{border-color:#179e83;transform:scale(1.05);box-shadow:0 8px 40px rgba(23,158,131,.15)}.pricing-card.featured::before{content:'Most Popular';position:absolute;top:-12px;left:50%;transform:translateX(-50%);background:#179e83;color:#fff;padding:8px 20px;border-radius:20px;font-size:14px;font-weight:600}.pricing-card h3{font-size:1.5rem;font-weight:600;margin-bottom:20px;color:#1a1a1a}.pricing-card .price{font-size:3rem;font-weight:700;color:#179e83;margin-bottom:30px;line-height:1}.pricing-card .price span{font-size:1rem;color:#666;font-weight:400}.pricing-card ul{list-style:none;padding:0;margin-bottom:30px}.pricing-card li{padding:10px 0;color:#666;border-bottom:1px solid #f0f0f0}.pricing-card li:last-child{border-bottom:none}.pricing-card .pricing-note{font-size:14px;color:#999;margin-top:20px;font-style:italic}.pricing-cta{text-align:center;margin-top:50px}.faq{padding:80px 0;background:#fff}.faq h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.faq-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:30px;max-width:1200px;margin:0 auto}.faq-item{background:#f8f9fa;border-radius:12px;overflow:hidden;border:1px solid #e1e5e9}.faq-item h3{background:#144784;color:#fff;padding:20px;margin:0;font-size:1.2rem;font-weight:600}.faq-item p{padding:20px;margin:0;color:#666;line-height:1.6}.faq-categories{padding:60px 0;background:#fff}.categories-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:30px;max-width:1200px;margin:0 auto}.category-card{background:#f8f9fa;padding:30px;border-radius:12px;text-align:center;text-decoration:none;color:inherit;transition:all .3s ease;border:1px solid #e1e5e9}.category-card:hover{transform:translateY(-5px);background:#fff;box-shadow:0 8px 25px rgba(0,0,0,.1);color:inherit;text-decoration:none}.category-icon{font-size:3rem;margin-bottom:20px;display:block}.category-card h3{font-size:1.3rem;font-weight:600;margin-bottom:12px;color:#144784}.category-card p{color:#666;line-height:1.4;margin:0}.faq-content{padding:60px 0;background:#f8f9fa}.faq-section{max-width:1000px;margin:0 auto 60px}.faq-section h2{font-size:2rem;font-weight:600;margin-bottom:40px;color:#1a1a1a;border-bottom:3px solid #179e83;padding-bottom:10px}.faq-question{width:100%;background:#fff;border:none;padding:20px;text-align:left;cursor:pointer;display:flex;justify-content:space-between;align-items:center;font-size:1.1rem;font-weight:600;color:#1a1a1a;border-radius:8px;margin-bottom:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,.05)}.faq-question:hover{background:#f8f9fa;transform:translateX(5px)}.faq-question[aria-expanded=true]{background:#179e83;color:#fff}.faq-icon{font-size:1.5rem;font-weight:700;transition:transform .3s ease}.faq-question[aria-expanded=true] .faq-icon{transform:rotate(45deg)}.faq-answer{display:none;background:#fff;padding:20px;border-radius:0 0 8px 8px;border-top:1px solid #e1e5e9;margin-bottom:20px}.faq-answer p{margin-bottom:15px;color:#666;line-height:1.6}.faq-answer ul{margin-left:20px;margin-bottom:15px}.faq-answer li{margin-bottom:8px;color:#666;line-height:1.5}.faq-cta{padding:80px 0;background:linear-gradient(135deg,#144784 0,#179e83 100%);color:#fff;text-align:center}.faq-cta h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:#fff}.faq-cta p{font-size:1.2rem;margin-bottom:40px;opacity:.95}.faq-cta .cta-buttons{display:flex;justify-content:center;gap:20px;margin-bottom:50px;flex-wrap:wrap}.contact-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:30px;max-width:800px;margin:0 auto}.contact-option{display:flex;align-items:center;justify-content:center;gap:15px;text-align:left}.contact-icon{font-size:2rem}.contact-option strong{display:block;margin-bottom:5px;color:#fff}.contact-option p{margin:0;opacity:.9}.contact-option a{color:#fff;text-decoration:none}.contact-option a:hover{text-decoration:underline}.cta{padding:80px 0;background:linear-gradient(135deg,#144784 0,#179e83 100%);color:#fff;text-align:center}.cta-content h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:#fff}.cta-content p{font-size:1.2rem;margin-bottom:40px;opacity:.95;max-width:600px;margin-left:auto;margin-right:auto}.cta-buttons{display:flex;justify-content:center;gap:20px;flex-wrap:wrap}.case-study{background:#fff;border-radius:16px;padding:40px;margin-bottom:40px;box-shadow:0 4px 20px rgba(0,0,0,.08);border:1px solid #f0f0f0}.case-study.featured{border:2px solid #179e83;box-shadow:0 8px 40px rgba(23,158,131,.15)}.case-study-content{display:grid;grid-template-columns:2fr 1fr;gap:40px;align-items:start}.case-study-meta{display:flex;gap:15px;margin-bottom:20px}.case-study-meta span{background:#f0f0f0;color:#666;padding:5px 12px;border-radius:15px;font-size:14px;font-weight:500}.case-study h3{font-size:1.8rem;font-weight:600;margin-bottom:15px;color:#1a1a1a;line-height:1.3}.case-study-intro{font-size:1.1rem;color:#666;margin-bottom:30px;line-height:1.6}.challenge,.results,.solution{margin-bottom:30px}.challenge h4,.results h4,.solution h4{font-size:1.2rem;font-weight:600;margin-bottom:15px;color:#144784}.results-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:20px;margin:20px 0}.result-item{text-align:center;padding:20px;background:#f8f9fa;border-radius:12px}.result-number{font-size:2rem;font-weight:700;color:#179e83;display:block;margin-bottom:5px}.result-label{font-size:14px;color:#666;font-weight:500}.testimonial{background:#f8f9fa;padding:30px;border-radius:12px;margin-top:30px;border-left:4px solid #179e83}.testimonial p{font-style:italic;font-size:1.1rem;color:#444;margin-bottom:20px;line-height:1.6}.testimonial cite{display:block;font-style:normal}.testimonial cite strong{color:#1a1a1a;font-weight:600;display:block;margin-bottom:5px}.testimonial cite span{color:#666;font-size:14px}.case-study-visual{background:#f8f9fa;padding:30px;border-radius:12px;text-align:center}.chart-container h5{font-size:1.1rem;font-weight:600;margin-bottom:20px;color:#1a1a1a}.industries-overview{padding:80px 0;background:#fff}.industries-overview h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.industry-stat{text-align:center;padding:30px;background:#f8f9fa;border-radius:12px;transition:all .3s ease}.industry-stat:hover{transform:translateY(-5px);background:#fff;box-shadow:0 8px 25px rgba(0,0,0,.1)}.industry-icon{font-size:3rem;margin-bottom:20px;display:block}.industry-stat h3{font-size:1.3rem;font-weight:600;margin-bottom:15px;color:#144784}.industry-stat .stat-number{font-size:2.5rem;font-weight:700;color:#179e83;display:block;margin-bottom:5px}.industry-stat .stat-label{font-size:14px;color:#666;font-weight:500}.related-articles{padding:60px 0;background:#f8f9fa;border-top:1px solid #e1e5e9;margin-top:60px}.related-articles h2,.related-articles h3{font-size:2rem;font-weight:600;margin-bottom:40px;color:#1a1a1a;text-align:center}aside.related-articles{padding:40px 0;background:#f8f9fa;border-top:1px solid #e1e5e9;margin-top:40px}.related-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:30px;max-width:1000px;margin:0 auto}.related-card{background:#fff;padding:30px;border-radius:12px;box-shadow:0 4px 15px rgba(0,0,0,.08);border:1px solid #e1e5e9;transition:all .3s ease}.related-card:hover{transform:translateY(-5px);box-shadow:0 8px 30px rgba(0,0,0,.12)}.related-card h3,.related-card h4{font-size:1.3rem;font-weight:600;margin-bottom:15px;line-height:1.3}.related-card h3 a,.related-card h4 a{color:#1a1a1a;text-decoration:none;transition:color .3s ease}.related-card h3 a:hover,.related-card h4 a:hover{color:#179e83}.related-card .category{background:#179e83;color:#fff;padding:4px 12px;border-radius:20px;font-size:.8rem;font-weight:500;display:inline-block;margin-bottom:12px}.related-card span.category{display:inline-block;margin-bottom:12px}.related-card p{color:#666;line-height:1.6;margin-bottom:15px}.related-card .read-time{color:#179e83;font-size:14px;font-weight:500}.btn *{color:inherit;text-decoration:inherit}.btn:active,.btn:link,.btn:visited{color:inherit;text-decoration:none}.btn-primary,.btn-primary:active,.btn-primary:link,.btn-primary:visited{color:#fff!important;text-decoration:none!important}.btn-primary:focus,.btn-primary:hover{color:#fff!important;text-decoration:none!important}.expert-consultation-cta{background:linear-gradient(135deg,#f8f9fa 0,#e9ecef 100%);border:2px solid #179e83;border-radius:12px;padding:40px;text-align:center;margin:40px 0;clear:both;width:100%;box-sizing:border-box}.expert-consultation-cta h3{color:#144784;font-size:1.5rem;margin-bottom:15px;font-weight:600}.expert-consultation-cta p{color:#666;margin-bottom:25px;font-size:1.1rem;line-height:1.6}.expert-consultation-cta .btn{font-size:1.1rem;padding:15px 30px;min-width:200px;font-weight:600}.testimonials{padding:80px 0;background:#f8f9fa}.testimonials h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.testimonials-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:30px;max-width:1200px;margin:0 auto}.testimonial-card{background:#fff;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,.08);border:1px solid #f0f0f0;position:relative}.testimonial-card::before{content:'"';position:absolute;top:-10px;left:30px;font-size:4rem;color:#179e83;font-family:serif;line-height:1}.testimonial-content p{font-style:italic;font-size:1.1rem;color:#444;margin-bottom:30px;line-height:1.6}.testimonial-author{display:flex;justify-content:space-between;align-items:center}.author-info strong{color:#1a1a1a;font-weight:600;display:block;margin-bottom:5px}.author-info span{color:#666;font-size:14px}.company-logo{width:60px;height:40px;display:flex;align-items:center;justify-content:center}.company-logo img{max-width:100%;max-height:100%;filter:grayscale(100%);opacity:.7}.social-proof{padding:80px 0;background:#fff}.social-proof h2{text-align:center;font-size:2.5rem;font-weight:600;margin-bottom:60px;color:#1a1a1a}.client-logos{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:30px;margin:40px 0 60px;padding:40px 0;border-top:1px solid #e1e5e9;border-bottom:1px solid #e1e5e9}.logo-item{display:flex;align-items:center;justify-content:center;padding:20px;background:#f8f9fa;border-radius:8px;min-height:80px;color:#999;font-weight:500;text-align:center;transition:all .3s ease}.logo-item:hover{background:#fff;box-shadow:0 4px 15px rgba(0,0,0,.1);transform:translateY(-2px)}@media (max-width:768px){.case-study-content{grid-template-columns:1fr;gap:30px}.results-grid{grid-template-columns:repeat(2,1fr);gap:15px}.pricing-grid{grid-template-columns:1fr}.pricing-card.featured{transform:none;margin:20px 0}.categories-grid{grid-template-columns:repeat(2,1fr);gap:20px}.contact-options{grid-template-columns:1fr;gap:20px}.contact-option{justify-content:flex-start}.faq-grid{grid-template-columns:1fr}.page-hero h1,.service-hero h1{font-size:2.2rem}.breadcrumb ol{flex-wrap:wrap}.client-logos{grid-template-columns:repeat(2,1fr);gap:20px}}@media (max-width:480px){.categories-grid{grid-template-columns:1fr}.results-grid{grid-template-columns:1fr}.case-study{padding:30px 20px}.page-hero .hero-stats,.service-hero .hero-stats{flex-direction:column;gap:20px}.hero-cta{flex-direction:column;align-items:center}.cta-buttons{flex-direction:column;align-items:center}.related-grid{grid-template-columns:1fr;gap:20px}.related-card{padding:25px 20px}.expert-consultation-cta{padding:30px 20px;margin:30px 0}.article-content pre{margin:20px -20px;border-radius:0;border-left:none;border-right:none}.article-content pre code{padding:15px 20px;font-size:13px}.article-content pre:hover::before{top:5px;right:5px;font-size:11px;padding:4px 8px}}.technology-showcase{padding:80px 0;background:linear-gradient(135deg,#f8fafc 0,#e2e8f0 100%);position:relative}.technology-showcase::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:url('data:image/svg+xml,');opacity:.3;pointer-events:none}.technology-showcase .container{position:relative;z-index:1}.technology-showcase h2{text-align:center;margin-bottom:50px;color:#1a202c;font-size:2.5rem;font-weight:700;background:linear-gradient(135deg,#144784 0,#179e83 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.tech-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:30px;max-width:1000px;margin:0 auto}.tech-card{background:#fff;padding:40px 30px;border-radius:16px;text-align:center;box-shadow:0 4px 20px rgba(0,0,0,.08);transition:all .3s ease;border:1px solid #e2e8f0;position:relative;overflow:hidden}.tech-card::before{content:'';position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(135deg,#144784 0,#179e83 100%);transform:scaleX(0);transition:transform .3s ease}.tech-card:hover::before{transform:scaleX(1)}.tech-card:hover{transform:translateY(-8px);box-shadow:0 12px 40px rgba(0,0,0,.15);border-color:#cbd5e0}.tech-icon{font-size:3rem;margin-bottom:20px;display:block;line-height:1;filter:grayscale(.2);transition:all .3s ease}.tech-card:hover .tech-icon{transform:scale(1.1);filter:grayscale(0)}.tech-card h3{color:#1a202c;font-size:1.5rem;font-weight:600;margin:0 0 15px 0;transition:color .3s ease}.tech-card:hover h3{color:#144784}.tech-card p{color:#64748b;font-size:1rem;line-height:1.6;margin:0;font-weight:500}@media (max-width:768px){.technology-showcase{padding:60px 0}.technology-showcase h2{font-size:2rem;margin-bottom:40px}.tech-grid{grid-template-columns:1fr;gap:20px}.tech-card{padding:30px 20px}.tech-icon{font-size:2.5rem;margin-bottom:15px}.tech-card h3{font-size:1.3rem}}.capabilities-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:40px;margin:40px 0}.capability-card{background:#fff;padding:30px;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.08);border-left:4px solid #179e83;transition:all .3s ease;position:relative;overflow:hidden}.capability-card:hover{transform:translateY(-4px);box-shadow:0 8px 30px rgba(0,0,0,.12);border-left-color:#144784}.capability-card h3{color:#1a202c;font-size:1.3rem;font-weight:600;margin:0 0 15px 0;transition:color .3s ease}.capability-card:hover h3{color:#144784}.capability-card p{color:#64748b;line-height:1.6;margin:0 0 20px 0}.capability-card ul{list-style:none;padding:0;margin:0}.capability-card li{color:#4a5568;margin:8px 0;padding-left:20px;position:relative;font-size:.95rem}.capability-card li::before{content:'✓';position:absolute;left:0;color:#179e83;font-weight:700;font-size:1rem}.tech-tag{display:inline-block;background:linear-gradient(135deg,#144784 0,#179e83 100%);color:#fff;padding:6px 12px;border-radius:20px;font-size:.9rem;margin:4px 8px 4px 0;font-weight:500;transition:all .3s ease}.tech-tag:hover{transform:scale(1.05);box-shadow:0 2px 8px rgba(20,71,132,.3)}@media (max-width:768px){.capabilities-grid{grid-template-columns:1fr;gap:20px;margin:30px 0}.capability-card{padding:25px 20px}.capability-card h3{font-size:1.2rem}} \ No newline at end of file diff --git a/assets/images/certificate-icon.webp b/assets/images/certificate-icon.webp new file mode 100644 index 0000000..65df793 Binary files /dev/null and b/assets/images/certificate-icon.webp differ diff --git a/assets/images/chart-icon.webp b/assets/images/chart-icon.webp new file mode 100644 index 0000000..21ce6f5 Binary files /dev/null and b/assets/images/chart-icon.webp differ diff --git a/assets/images/client-gambling-commission.webp b/assets/images/client-gambling-commission.webp new file mode 100644 index 0000000..e504673 Binary files /dev/null and b/assets/images/client-gambling-commission.webp differ diff --git a/assets/images/client-gdp.webp b/assets/images/client-gdp.webp new file mode 100644 index 0000000..211f2ac Binary files /dev/null and b/assets/images/client-gdp.webp differ diff --git a/assets/images/client-homesupply.webp b/assets/images/client-homesupply.webp new file mode 100644 index 0000000..214ba13 Binary files /dev/null and b/assets/images/client-homesupply.webp differ diff --git a/assets/images/client-incite.webp b/assets/images/client-incite.webp new file mode 100644 index 0000000..b9b4262 Binary files /dev/null and b/assets/images/client-incite.webp differ diff --git a/assets/images/client-pragma.webp b/assets/images/client-pragma.webp new file mode 100644 index 0000000..0f43d29 Binary files /dev/null and b/assets/images/client-pragma.webp differ diff --git a/assets/images/client-replay.webp b/assets/images/client-replay.webp new file mode 100644 index 0000000..b5c4b0a Binary files /dev/null and b/assets/images/client-replay.webp differ diff --git a/assets/images/favicon-original.webp b/assets/images/favicon-original.webp new file mode 100644 index 0000000..51984b2 Binary files /dev/null and b/assets/images/favicon-original.webp differ diff --git a/assets/images/rocket-icon.webp b/assets/images/rocket-icon.webp new file mode 100644 index 0000000..88611a8 Binary files /dev/null and b/assets/images/rocket-icon.webp differ diff --git a/assets/images/ukds-main-logo.webp b/assets/images/ukds-main-logo.webp new file mode 100644 index 0000000..424bdd7 Binary files /dev/null and b/assets/images/ukds-main-logo.webp differ diff --git a/assets/js/main.js b/assets/js/main.js index 7c4a530..2ce3dca 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -736,4 +736,75 @@ document.addEventListener('DOMContentLoaded', function() { console.log(`Blog pagination initialized: ${totalPages} pages, ${allArticles.length} articles`); } + + // Viewport-based Image Loading Optimization + function initializeViewportImageLoading() { + // Intersection Observer for lazy loading optimization + const imageObserver = new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + const img = entry.target; + + // Load high-quality version when in viewport + if (img.dataset.src) { + img.src = img.dataset.src; + img.removeAttribute('data-src'); + } + + // Load WebP for supported browsers + if (img.dataset.webp && supportsWebP()) { + img.src = img.dataset.webp; + } + + observer.unobserve(img); + } + }); + }, { + rootMargin: '50px 0px', + threshold: 0.01 + }); + + // Observe all images with data-src + document.querySelectorAll('img[data-src]').forEach(img => { + imageObserver.observe(img); + }); + + // WebP support detection + function supportsWebP() { + return new Promise(resolve => { + const webP = new Image(); + webP.onload = webP.onerror = () => resolve(webP.height === 2); + webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA'; + }); + } + } + + // Touch Target Optimization for Mobile + function optimizeTouchTargets() { + const minTouchSize = 44; // 44px minimum touch target + + // Check and optimize button sizes + document.querySelectorAll('button, .btn, a[role="button"]').forEach(element => { + const rect = element.getBoundingClientRect(); + if (rect.width < minTouchSize || rect.height < minTouchSize) { + element.style.minWidth = minTouchSize + 'px'; + element.style.minHeight = minTouchSize + 'px'; + element.style.display = 'inline-flex'; + element.style.alignItems = 'center'; + element.style.justifyContent = 'center'; + } + }); + + // Add touch-friendly spacing + document.querySelectorAll('.nav-menu a, .social-links a').forEach(element => { + element.style.padding = '12px 16px'; + element.style.margin = '4px'; + }); + } + + // Initialize optimizations + initializeViewportImageLoading(); + if ('ontouchstart' in window) { + optimizeTouchTargets(); + } }); \ No newline at end of file diff --git a/assets/js/main.min.js b/assets/js/main.min.js new file mode 100644 index 0000000..5bd2193 --- /dev/null +++ b/assets/js/main.min.js @@ -0,0 +1 @@ +document.addEventListener("DOMContentLoaded",(function(){const e=document.getElementById("rotating-text"),t=document.getElementById("hero-subtitle");if(e&&t){const E=[{title:"Voted UK's No.1 Web Scraping Service",subtitle:"We are experts in web scraping, data analysis and competitor price monitoring."},{title:"UK-based Team",subtitle:"Our team is based in the UK for a clearer, faster response."},{title:"Professional Price Monitoring",subtitle:"Let us monitor your competitor's pricing and product ranges."},{title:"Bespoke Software Solutions",subtitle:"Let our experts build your ideal scraping solution."}];let S=0;function n(){e.style.opacity="0",t.style.opacity="0",setTimeout((()=>{e.textContent=E[S].title,t.textContent=E[S].subtitle,e.style.opacity="1",t.style.opacity="1",S=(S+1)%E.length}),500)}e.style.transition="opacity 0.5s ease-in-out",t.style.transition="opacity 0.5s ease-in-out",setTimeout((()=>{n(),setInterval(n,4e3)}),2e3),console.log("Hero text rotation initialized")}else console.log("Rotating text elements not found");const o=document.getElementById("nav-toggle"),s=document.getElementById("nav-menu");if(o&&s){o.addEventListener("click",(function(){s.classList.toggle("active"),o.classList.toggle("active")}));document.querySelectorAll(".nav-link").forEach((e=>{e.addEventListener("click",(()=>{s.classList.remove("active"),o.classList.remove("active")}))}))}const i=document.getElementById("navbar");function a(){window.scrollY>50?i.classList.add("scrolled"):i.classList.remove("scrolled")}window.addEventListener("scroll",a);document.querySelectorAll('a[href^="#"]').forEach((e=>{e.addEventListener("click",(function(e){e.preventDefault();const t=this.getAttribute("href"),n=document.querySelector(t);if(n){const e=80,t=n.getBoundingClientRect().top+window.pageYOffset-e;window.scrollTo({top:t,behavior:"smooth"})}}))}));const r=document.querySelectorAll(".animate-on-scroll, .service-card, .feature, .step"),c=new IntersectionObserver((function(e){e.forEach((e=>{e.isIntersecting&&(e.target.classList.add("animated"),e.target.style.opacity="1",e.target.style.transform="translateY(0)",c.unobserve(e.target))}))}),{threshold:.1,rootMargin:"0px 0px -50px 0px"});r.forEach(((e,t)=>{e.style.opacity="0",e.style.transform="translateY(30px)",e.style.transition=`opacity 0.8s ease-out ${.1*t}s, transform 0.8s ease-out ${.1*t}s`,c.observe(e)}));document.querySelectorAll(".service-card").forEach((e=>{e.addEventListener("mouseenter",(function(){this.style.transform="translateY(-10px) scale(1.02)",this.style.boxShadow="0 20px 40px rgba(0, 0, 0, 0.15)"})),e.addEventListener("mouseleave",(function(){this.style.transform="translateY(0) scale(1)",this.style.boxShadow="0 4px 20px rgba(0, 0, 0, 0.08)"}))}));document.querySelectorAll(".btn-primary").forEach((e=>{e.addEventListener("mouseenter",(function(){this.style.animation="pulse 0.5s ease-in-out"})),e.addEventListener("mouseleave",(function(){this.style.animation="none"}))})),console.log("Enhanced animations initialized");const l=document.querySelector(".contact-form form");function d(e,t="info"){const n=document.querySelector(".notification");n&&n.remove();const o=document.createElement("div");o.className=`notification notification-${t}`,o.innerHTML=`\n
\n ${e}\n \n
\n `,o.style.cssText=`\n position: fixed;\n top: 20px;\n right: 20px;\n z-index: 10000;\n background: ${"success"===t?"#10b981":"error"===t?"#ef4444":"#3b82f6"};\n color: white;\n padding: 16px 20px;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n max-width: 400px;\n font-family: 'Inter', sans-serif;\n font-size: 14px;\n opacity: 0;\n transform: translateX(100%);\n transition: all 0.3s ease;\n `,o.querySelector(".notification-content").style.cssText="\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n ",o.querySelector(".notification-close").style.cssText="\n background: none;\n border: none;\n color: white;\n font-size: 18px;\n cursor: pointer;\n padding: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n ",document.body.appendChild(o),setTimeout((()=>{o.style.opacity="1",o.style.transform="translateX(0)"}),100),o.querySelector(".notification-close").addEventListener("click",(()=>{u(o)})),setTimeout((()=>{document.body.contains(o)&&u(o)}),5e3)}function u(e){e.style.opacity="0",e.style.transform="translateX(100%)",setTimeout((()=>{document.body.contains(e)&&e.remove()}),300)}l&&l.addEventListener("submit",(function(e){e.preventDefault();const t=new FormData(this),n=t.get("name"),o=t.get("email"),s=t.get("message");let i=!0;const a=[];if((!n||n.trim().length<2)&&(a.push("Please enter a valid name"),i=!1),o&&function(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}(o)||(a.push("Please enter a valid email address"),i=!1),(!s||s.trim().length<10)&&(a.push("Please provide more details about your project (minimum 10 characters)"),i=!1),i){const e=this.querySelector('button[type="submit"]'),n=e.textContent;e.textContent="Sending...",e.disabled=!0,fetch("contact-handler.php",{method:"POST",body:t}).then((e=>e.json())).then((e=>{e.success?(d("Message sent successfully! We'll get back to you soon.","success"),this.reset()):d("There was an error sending your message. Please try again.","error")})).catch((e=>{console.error("Error:",e),d("There was an error sending your message. Please try again.","error")})).finally((()=>{e.textContent=n,e.disabled=!1}))}else d(a.join("
"),"error")}));const p=document.querySelectorAll(".stat-number");function m(){p.forEach((e=>{const t=e.textContent.trim();if(console.log("Animating stat:",t),!t.includes("£2.5M+"))if(t.includes("99.8%"))!function(e,t,n,o=""){let s=t;const i=(n-t)/60,a=setInterval((()=>{s+=i,s>=n&&(s=n,clearInterval(a)),e.textContent=s.toFixed(1)+o}),50)}(e,0,99.8,"%");else if(t.includes("ISO 27001"))return}))}const g=document.querySelector(".hero-stats");if(g){const L=new IntersectionObserver((function(e){e.forEach((e=>{e.isIntersecting&&(console.log("Stats section is visible, starting animation"),setTimeout((()=>{m()}),500),L.unobserve(e.target))}))}),{threshold:.3});L.observe(g)}else console.log("Stats section not found");const y=document.querySelectorAll('img[loading="lazy"]');function f(){const e=document.createElement("canvas");return e.width=1,e.height=1,-1!==e.toDataURL("image/webp").indexOf("webp")}if("IntersectionObserver"in window){const A=new IntersectionObserver((function(e){e.forEach((e=>{if(e.isIntersecting){const t=e.target;t.dataset.src&&(t.src=t.dataset.src),t.dataset.webp&&f()&&(t.src=t.dataset.webp),t.classList.add("loaded"),t.style.opacity="1",A.unobserve(t)}}))}),{rootMargin:"50px 0px",threshold:.1});y.forEach((e=>{"lazy"===e.loading&&(e.style.opacity="0",e.style.transition="opacity 0.3s ease"),A.observe(e)}))}const h=document.createElement("button");function b(){window.scrollY>500?(h.style.opacity="1",h.style.visibility="visible"):(h.style.opacity="0",h.style.visibility="hidden")}let v;h.innerHTML="↑",h.className="scroll-top-btn",h.style.cssText="\n position: fixed;\n bottom: 30px;\n right: 30px;\n width: 50px;\n height: 50px;\n border: none;\n border-radius: 50%;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n font-size: 20px;\n cursor: pointer;\n opacity: 0;\n visibility: hidden;\n transition: all 0.3s ease;\n z-index: 1000;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n ",document.body.appendChild(h),h.addEventListener("click",(()=>{window.scrollTo({top:0,behavior:"smooth"})})),window.addEventListener("scroll",b);const x=[a,b];function w(e,t="image",n=null){const o=document.createElement("link");o.rel="preload",o.href=e,o.as=t,n&&(o.type=n),document.head.appendChild(o)}window.removeEventListener("scroll",a),window.removeEventListener("scroll",b),window.addEventListener("scroll",(function(){v||(v=setTimeout((()=>{x.forEach((e=>e())),v=null}),16))})),["assets/images/ukds-main-logo.png","assets/images/hero-data-analytics.svg"].forEach((e=>{f()?w(e.replace(/\.(jpg|jpeg|png)$/i,".webp"),"image","image/webp"):w(e,"image")}));document.querySelectorAll("[data-tooltip]").forEach((e=>{e.addEventListener("mouseenter",(function(){const e=this.getAttribute("data-tooltip"),t=document.createElement("div");t.className="tooltip",t.textContent=e,t.style.cssText="\n position: absolute;\n background: #1a1a1a;\n color: white;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 14px;\n white-space: nowrap;\n z-index: 10000;\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n ",document.body.appendChild(t);const n=this.getBoundingClientRect();t.style.left=n.left+n.width/2-t.offsetWidth/2+"px",t.style.top=n.top-t.offsetHeight-10+"px",setTimeout((()=>{t.style.opacity="1"}),100),this.addEventListener("mouseleave",(function(){t.style.opacity="0",setTimeout((()=>{document.body.contains(t)&&t.remove()}),300)}),{once:!0})}))})),"serviceWorker"in navigator&&window.addEventListener("load",(()=>{navigator.serviceWorker.register("/sw.js").then((e=>{console.log("SW registered: ",e)})).catch((e=>{console.log("SW registration failed: ",e)}))})),"performance"in window&&window.addEventListener("load",(function(){setTimeout((()=>{const e=performance.getEntriesByType("navigation")[0];e&&console.log("Page Load Performance:",{"DNS Lookup":Math.round(e.domainLookupEnd-e.domainLookupStart),"TCP Connection":Math.round(e.connectEnd-e.connectStart),"Request/Response":Math.round(e.responseEnd-e.requestStart),"DOM Processing":Math.round(e.domComplete-e.domLoading),"Total Load Time":Math.round(e.loadEventEnd-e.navigationStart)})}),0)})),console.log("UK Data Services website initialized successfully"),console.log("Performance optimizations: Lazy loading, WebP support, and preloading enabled"),function(){const e=document.querySelector(".blog-pagination"),t=document.querySelector(".articles-grid");if(!e||!t)return;const n=e.querySelector("button:first-child"),o=e.querySelector("button:last-child"),s=e.querySelector(".pagination-info");if(!n||!o||!s)return;const i=new URLSearchParams(window.location.search);let a=parseInt(i.get("page"))||1;const r=Array.from(t.querySelectorAll(".article-card")),c=Math.ceil(r.length/6);if(c<=1)return void(e.style.display="none");function l(e){r.forEach((e=>{e.style.display="none"}));const i=6*(e-1),a=i+6;for(let e=i;e=c;const l=new URL(window.location);e>1?l.searchParams.set("page",e):l.searchParams.delete("page"),window.history.replaceState({},"",l),t.scrollIntoView({behavior:"smooth",block:"start"})}n.addEventListener("click",(function(e){e.preventDefault(),a>1&&(a--,l(a))})),o.addEventListener("click",(function(e){e.preventDefault(),a{e.forEach((e=>{if(e.isIntersecting){const n=e.target;n.dataset.src&&(n.src=n.dataset.src,n.removeAttribute("data-src")),n.dataset.webp&&new Promise((e=>{const t=new Image;t.onload=t.onerror=()=>e(2===t.height),t.src="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA"}))&&(n.src=n.dataset.webp),t.unobserve(n)}}))}),{rootMargin:"50px 0px",threshold:.01});document.querySelectorAll("img[data-src]").forEach((t=>{e.observe(t)}))}(),"ontouchstart"in window&&(document.querySelectorAll('button, .btn, a[role="button"]').forEach((e=>{const t=e.getBoundingClientRect();(t.width<44||t.height<44)&&(e.style.minWidth="44px",e.style.minHeight="44px",e.style.display="inline-flex",e.style.alignItems="center",e.style.justifyContent="center")})),document.querySelectorAll(".nav-menu a, .social-links a").forEach((e=>{e.style.padding="12px 16px",e.style.margin="4px"})))})); \ No newline at end of file diff --git a/blog/articles/python-scrapy-enterprise-guide.php b/blog/articles/python-scrapy-enterprise-guide.php index fe3a464..993833c 100644 --- a/blog/articles/python-scrapy-enterprise-guide.php +++ b/blog/articles/python-scrapy-enterprise-guide.php @@ -94,6 +94,79 @@ $read_time = 12; "dateModified": "" } + + + diff --git a/db_backup_250608_171630.sql b/db_backup_250608_183559.sql similarity index 99% rename from db_backup_250608_171630.sql rename to db_backup_250608_183559.sql index 5521897..96ecca9 100644 --- a/db_backup_250608_171630.sql +++ b/db_backup_250608_183559.sql @@ -697,4 +697,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-06-08 17:16:31 +-- Dump completed on 2025-06-08 18:35:59 diff --git a/faq-enhanced.php b/faq-enhanced.php index 3f32a6d..05b78dd 100644 --- a/faq-enhanced.php +++ b/faq-enhanced.php @@ -101,7 +101,7 @@ $keywords = "UK data services FAQ, web scraping questions, data cleaning help, b
-

Frequently Asked Questions

+

Web Scraping & Data Services FAQ - UK Data Services

Get instant answers to common questions about our data services, processes, pricing, and more. Can't find what you're looking for? Contact our experts.