From 1d705572ad9f3b0a66cb4684e742c72a4017ce23 Mon Sep 17 00:00:00 2001 From: Peter Foster Date: Sat, 21 Mar 2026 09:48:46 +0000 Subject: [PATCH] =?UTF-8?q?Rebrand:=20UK=20AI=20Automation=20=E2=80=94=20n?= =?UTF-8?q?ew=20domain,=20logo,=20indigo=20colour=20scheme,=20AI=20service?= =?UTF-8?q?s=20content?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .email-config.php | 66 +- .htaccess | 198 +- .htaccess-advanced | 280 - .htaccess-enhanced | 205 - .well-known/acme-challenge/test | 1 + 403.php | 6 +- 404.php | 4 +- 500.php | 10 +- META_TAGS_TEMPLATE.php | 422 -- about.php | 271 +- add_inline_css.php | 4 +- admin/spam-dashboard.php | 10 +- admin/view-submissions.php | 8 +- api/fetch-robots.php | 2 +- api/lead-capture.php | 2 +- assets/css/cro-enhancements.css | 22 +- assets/css/main.css | 222 +- assets/css/main.min.css | 4548 +---------------- assets/images/ukaiautomation-logo-white.svg | 18 + assets/images/ukaiautomation-logo.svg | 32 + backup-db-commit.sh | 39 - backups/.htaccess.pre-csrf-fix | 171 - ...ndustries-benefit-most-web-scraping-uk.php | 20 +- blog/articles/ai-powered-data-extraction.php | 20 +- blog/articles/ai-web-scraping-2026.php | 32 +- blog/articles/airflow-alternatives-python.php | 10 +- ...ligence-consultants-uk-selection-guide.php | 16 +- ...business-intelligence-dashboard-design.php | 26 +- .../cloud-native-scraping-architecture.php | 26 +- .../competitive-intelligence-roi-metrics.php | 14 +- ...itoring-software-build-vs-buy-analysis.php | 16 +- ...ompanies-london-top-providers-compared.php | 30 +- ...ta-automation-strategies-uk-businesses.php | 36 +- ...tion-impact-assessment-web-scraping-uk.php | 20 +- .../data-protection-impact-assessments.php | 38 +- .../data-quality-validation-pipelines.php | 28 +- .../data-subject-rights-management.php | 20 +- .../database-optimization-big-data.php | 20 +- blog/articles/ecommerce-trends-uk-2025.php | 20 +- ...financial-services-data-transformation.php | 32 +- blog/articles/fintech-market-analysis-uk.php | 20 +- .../free-web-scraping-tools-launch.php | 38 +- .../gdpr-data-minimisation-practices.php | 26 +- blog/articles/handling-captchas-scraping.php | 26 +- .../healthcare-research-data-collection.php | 22 +- ...-99-8-percent-data-accuracy-uk-clients.php | 20 +- .../international-data-transfers-uk.php | 20 +- .../javascript-heavy-sites-scraping.php | 24 +- ...ormance-evaluation-real-time-streaming.php | 14 +- .../kubernetes-scraping-deployment.php | 20 +- .../manufacturing-data-transformation.php | 20 +- ...anufacturing-supply-chain-optimization.php | 24 +- .../media-content-aggregation-platform.php | 24 +- ...ation-apache-kafka-real-time-streaming.php | 14 +- .../predictive-analytics-customer-churn.php | 28 +- .../property-data-aggregation-success.php | 24 +- blog/articles/python-airflow-alternatives.php | 14 +- .../python-data-pipeline-tools-2025.php | 24 +- .../python-scrapy-enterprise-guide.php | 26 +- .../real-time-analytics-streaming-data.php | 32 +- .../real-time-analytics-streaming.php | 2 +- ...traction-technical-guide-uk-businesses.php | 16 +- .../retail-competitor-monitoring-case.php | 14 +- .../retail-price-monitoring-strategies.php | 26 +- .../selenium-vs-playwright-comparison.php | 28 +- .../sql-analytics-advanced-techniques.php | 26 +- blog/articles/uk-cookie-law-compliance.php | 10 +- .../uk-property-market-data-trends.php | 26 +- ...ng-regulations-businesses-need-to-know.php | 26 +- .../web-scraping-compliance-uk-guide.php | 38 +- .../web-scraping-lead-generation-uk.php | 34 +- blog/articles/web-scraping-rate-limiting.php | 26 +- ...ping-services-uk-complete-buyers-guide.php | 22 +- .../what-is-real-time-data-streaming.php | 14 +- ...-are-ranked-1-uk-web-scraping-services.php | 24 +- blog/authors/alex-kumar.php | 24 +- blog/authors/david-martinez.php | 24 +- blog/authors/emma-richardson.php | 22 +- blog/authors/james-wilson.php | 24 +- blog/authors/michael-thompson.php | 24 +- blog/authors/sarah-chen.php | 24 +- blog/categories/business-intelligence.php | 28 +- blog/categories/case-studies.php | 24 +- blog/categories/compliance.php | 24 +- blog/categories/data-analytics.php | 24 +- blog/categories/industry-insights.php | 24 +- blog/categories/technology.php | 24 +- blog/categories/web-scraping.php | 24 +- blog/index.php | 40 +- blog/search.php | 20 +- case-studies/ecommerce-price-intelligence.php | 26 +- case-studies/financial-data-migration.php | 24 +- case-studies/index.php | 598 +-- case-studies/property-market-intelligence.php | 28 +- contact-handler.php | 956 ++-- cookie-policy.php | 44 +- create-images.sh | 128 - data-analytics-consultancy-london.php | 12 +- data-analytics-services-london.php | 12 +- data-analytics-services.php | 10 +- data-scraping-services/index.php | 6 +- data-services-london.php | 10 +- db-config.php | 6 +- docker/apache-config.conf | 107 - docker/php.ini | 67 - email-config.php | 8 +- faq-enhanced.php | 28 +- faq.php | 42 +- fix-mysql.bat | 30 - gdpr-compliance.php | 50 +- includes/article-footer.php | 2 +- includes/article-footer.php.bak.20260222 | 115 - includes/author-bio.php | 30 +- includes/breadcrumb-schema.php | 2 +- includes/canonical.php | 6 +- includes/components/location-cta.php | 6 +- includes/components/related-services.php | 6 +- includes/footer.php | 133 +- includes/meta-tags.php | 20 +- includes/nav.php | 11 +- includes/schema/article-schema.php | 24 +- includes/schema/local-business-schema.php | 12 +- includes/schema/organization-schema.php | 24 +- includes/schema/review-schema.php | 12 +- includes/schema/service-schema.php | 26 +- includes/url-config.php | 72 +- index.php | 490 +- locations/birmingham.php | 38 +- locations/london.php | 38 +- locations/manchester.php | 36 +- locations/web-scraping-bristol.php | 38 +- locations/web-scraping-cardiff.php | 38 +- locations/web-scraping-edinburgh.php | 38 +- locations/web-scraping-leeds.php | 38 +- price-monitoring-services.php | 10 +- privacy-policy.php | 42 +- project-types.php | 64 +- quote-handler.php | 18 +- quote.php | 114 +- redis/redis.conf | 65 - services/competitive-intelligence.php | 76 +- services/csharp-development-services.php | 10 +- services/data-analysis-services.php | 8 +- services/data-analytics-london.php | 20 +- services/data-analytics-services-uk.php | 18 +- services/data-cleaning.php | 26 +- services/data-processing-services.php | 10 +- services/data-scraping.php | 44 +- services/ecommerce-price-scraping.php | 18 +- services/financial-data-services.php | 44 +- services/price-monitoring.php | 60 +- services/property-data-extraction.php | 42 +- services/web-scraping-companies.php | 58 +- services/web-scraping.php | 44 +- sitemap.php | 52 +- start-website.bat | 30 - terms-of-service.php | 40 +- thank-you.php | 56 +- tools/cost-calculator.php | 26 +- tools/data-converter.php | 24 +- tools/index.php | 32 +- tools/robots-analyzer.php | 26 +- tools/scrapeability-checker.php | 28 +- web-scraping-services/index.php | 6 +- 164 files changed, 2870 insertions(+), 9819 deletions(-) delete mode 100644 .htaccess-advanced delete mode 100644 .htaccess-enhanced create mode 100644 .well-known/acme-challenge/test delete mode 100644 META_TAGS_TEMPLATE.php create mode 100644 assets/images/ukaiautomation-logo-white.svg create mode 100644 assets/images/ukaiautomation-logo.svg delete mode 100755 backup-db-commit.sh delete mode 100644 backups/.htaccess.pre-csrf-fix delete mode 100644 create-images.sh delete mode 100644 docker/apache-config.conf delete mode 100644 docker/php.ini delete mode 100644 fix-mysql.bat delete mode 100644 includes/article-footer.php.bak.20260222 delete mode 100644 redis/redis.conf delete mode 100644 start-website.bat diff --git a/.email-config.php b/.email-config.php index 82d27f2..09faa81 100644 --- a/.email-config.php +++ b/.email-config.php @@ -1,34 +1,34 @@ - \ No newline at end of file diff --git a/.htaccess b/.htaccess index d6f92f2..4ab1d7e 100644 --- a/.htaccess +++ b/.htaccess @@ -1,6 +1,6 @@ # Redirect www to non-www RewriteEngine On -RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC] +RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [L,R=301] # Custom error pages @@ -8,20 +8,17 @@ ErrorDocument 403 /403.php ErrorDocument 404 /404.php ErrorDocument 500 /500.php -# Security Rules for UK Data Services - -# Protect sensitive files and configs +# Protect sensitive files Require all denied -# Protect contact handlers from direct browser access (POST only) +# Protect handlers (POST only) Require all denied - Require all denied @@ -34,221 +31,74 @@ ErrorDocument 500 /500.php Header always set X-Frame-Options "SAMEORIGIN" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()" - - # CRITICAL: No caching for form pages (contain session-specific CSRF tokens) Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0" Header set Pragma "no-cache" - Header set Expires "Sat, 01 Jan 2000 00:00:00 GMT" -# Enhanced Gzip compression +# Compression - 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 - - 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 + AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/json image/svg+xml font/woff font/woff2 -# 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 +# Caching 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" - - # Regular HTML/PHP - 1 hour (but form pages are excluded above) - - Header set Cache-Control "max-age=3600, public, must-revalidate" - - - # Keep-alive Header set Connection keep-alive -# HTTP/2 Server Push - - - 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 +ServerSignature Off -# Prevent access to logs and database directories RewriteEngine On - # Block known scanner IPs - RewriteCond %{REMOTE_ADDR} ^(20\.63\.96\.50|4\.193\.248\.52)$ - RewriteRule ^ - [F,L] - - # Block requests for PHP files that don't exist (webshell scanners) + # Block requests for non-existent PHP files (webshell scanners) RewriteCond %{REQUEST_FILENAME} !-f RewriteRule \.php$ - [F,L] - # Skip already processed .php files - RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^services/.*\.php$ - [L] - - # Explicitly allow existing service pages - RewriteRule ^services/competitive-intelligence/?$ /services/competitive-intelligence.php [L] - RewriteRule ^services/data-cleaning/?$ /services/data-cleaning.php [L] - RewriteRule ^services/financial-data-services/?$ /services/financial-data-services.php [L] - RewriteRule ^services/price-monitoring/?$ /services/price-monitoring.php [L] - RewriteRule ^services/property-data-extraction/?$ /services/property-data-extraction.php [L] - RewriteRule ^services/web-scraping/?$ /services/web-scraping.php [L] - RewriteRule ^services/csharp-development-services/?$ /services/csharp-development-services.php [L] - RewriteRule ^services/data-processing-services/?$ /services/data-processing-services.php [L] - - # Redirect /services index to project-types - RewriteRule ^services/?$ /project-types [R=301,L] - - RewriteRule ^services/data-analytics-london/?$ /services/data-analytics-london.php [L] - RewriteRule ^services/data-analytics-consultancy-london/?$ /services/data-analytics-consultancy-london.php [L] - RewriteRule ^services/data-validation-cleaning/?$ /services/data-validation-cleaning.php [L] - RewriteRule ^services/data-analytics-services-uk/?$ /services/data-analytics-services-uk.php [L] - RewriteRule ^services/web-scraping-companies/?$ /services/web-scraping [R=301,L] - RewriteRule ^services/data-scraping/?$ /services/web-scraping [R=301,L] - RewriteRule ^web-scraping-services/?$ /services/web-scraping [R=301,L] - RewriteRule ^data-scraping-services/?$ /services/web-scraping [R=301,L] - # Redirect unknown service pages to project-types - RewriteRule ^services/(.+)$ /project-types [R=301,L] - - # 301 Redirects for renamed pages - RewriteRule ^blog/articles/data-analytics-companies-london-top-providers/?$ /blog/articles/data-analytics-companies-london-top-providers-compared [R=301,L] - RewriteRule ^blog/articles/gdpr-compliance-web-scraping-uk-guide/?$ /blog/articles/web-scraping-compliance-uk-guide [R=301,L] - RewriteRule ^blog/articles/airflow-alternatives-python/?$ /blog/articles/python-airflow-alternatives [R=301,L] - RewriteRule ^blog/articles/kafka-performance-evaluation-real-time-streaming/?$ /blog/articles/performance-evaluation-apache-kafka-real-time-streaming [R=301,L] - RewriteRule ^blog/articles/real-time-analytics-streaming/?$ /blog/articles/real-time-analytics-streaming-data [R=301,L] + # Redirect old pages to homepage + RewriteRule ^services(/.*)?$ / [R=301,L] + RewriteRule ^locations(/.*)?$ / [R=301,L] + RewriteRule ^tools(/.*)?$ / [R=301,L] + RewriteRule ^project-types/?$ / [R=301,L] + RewriteRule ^web-scraping-services(/.*)?$ / [R=301,L] + RewriteRule ^data-scraping-services(/.*)?$ / [R=301,L] + RewriteRule ^price-monitoring-services(/.*)?$ / [R=301,L] + RewriteRule ^data-analytics-services(/.*)?$ / [R=301,L] + RewriteRule ^data-analytics-consultancy-london(/.*)?$ / [R=301,L] + RewriteRule ^data-analytics-services-london(/.*)?$ / [R=301,L] + RewriteRule ^data-services-london(/.*)?$ / [R=301,L] # Clean URL rewriting - remove .php extension RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [END] - - # Security rules - RewriteRule ^logs(/.*)?$ - [F,L] - RewriteRule ^database(/.*)?$ - [F,L] + + # Block access to sensitive directories + RewriteRule ^(logs|database|docker)(/.*)?$ - [F,L] RewriteRule ^\.git(/.*)?$ - [F,L] - RewriteRule ^docker(/.*)?$ - [F,L] - - -# Disable server signature -ServerSignature Off - -# === Page Speed Optimizations === - -# Enable Gzip compression - - AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/json image/svg+xml - - -# Browser caching - - ExpiresActive On - ExpiresByType image/jpg "access plus 1 year" - ExpiresByType image/jpeg "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 text/css "access plus 1 month" - ExpiresByType application/javascript "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" - ExpiresByType application/pdf "access plus 1 month" - ExpiresByType image/x-icon "access plus 1 year" - ExpiresDefault "access plus 2 days" - - -# Cache-Control headers - - # Images only — long cache is safe since filenames don't change - - Header set Cache-Control "max-age=31536000, public" - - # CSS and JS — short cache + must-revalidate so edits propagate within 1 hour - - Header set Cache-Control "max-age=3600, public, must-revalidate" - - - Header set Cache-Control "max-age=600, private, must-revalidate" - - - -# Keep-Alive - - Header set Connection keep-alive diff --git a/.htaccess-advanced b/.htaccess-advanced deleted file mode 100644 index 5d84475..0000000 --- a/.htaccess-advanced +++ /dev/null @@ -1,280 +0,0 @@ -# UK Data Services - Advanced .htaccess Configuration -# Enhanced Security, Performance & SEO Optimizations - -# ================================================================== -# SECURITY HEADERS & PROTECTION -# ================================================================== - -# Security Headers - - # Prevent MIME type sniffing - Header always set X-Content-Type-Options "nosniff" - - # Prevent page from being displayed in frames (clickjacking protection) - Header always set X-Frame-Options "DENY" - - # Enable XSS protection - Header always set X-XSS-Protection "1; mode=block" - - # Force HTTPS (HSTS) - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" - - # Referrer Policy - Header always set Referrer-Policy "strict-origin-when-cross-origin" - - # Permissions Policy (formerly Feature Policy) - Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), screen-wake-lock=()" - - # Content Security Policy - Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com https://analytics.google.com https://www.clarity.ms https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https: blob:; connect-src 'self' https://www.google-analytics.com https://analytics.google.com https://www.clarity.ms; frame-src 'none'; object-src 'none'; base-uri 'self'; form-action 'self'" - - # Remove Server Information - Header always unset Server - Header always unset X-Powered-By - - # Cache Control for Static Assets - - Header set Cache-Control "public, max-age=31536000, immutable" - Header set Expires "Thu, 31 Dec 2025 23:59:59 GMT" - - - # Cache Control for HTML files - - Header set Cache-Control "private, max-age=0, no-cache, no-store, must-revalidate" - Header set Expires "0" - - - -# ================================================================== -# RATE LIMITING & DDOS PROTECTION -# ================================================================== - - - DOSHashTableSize 3000 - DOSPageCount 5 - DOSPageInterval 1 - DOSSiteCount 100 - DOSSiteInterval 1 - DOSBlockingPeriod 3600 - DOSLogDir "/var/log/apache2/dos_logs" - DOSEmailNotify security@ukdataservices.co.uk - - -# Limit request size (10MB) -LimitRequestBody 10485760 - -# ================================================================== -# PERFORMANCE OPTIMIZATIONS -# ================================================================== - -# Enable Compression - - # Compress HTML, CSS, JavaScript, Text, XML and fonts - AddOutputFilterByType DEFLATE application/javascript - AddOutputFilterByType DEFLATE application/rss+xml - AddOutputFilterByType DEFLATE application/vnd.ms-fontobject - AddOutputFilterByType DEFLATE application/x-font - AddOutputFilterByType DEFLATE application/x-font-opentype - AddOutputFilterByType DEFLATE application/x-font-otf - AddOutputFilterByType DEFLATE application/x-font-truetype - AddOutputFilterByType DEFLATE application/x-font-ttf - AddOutputFilterByType DEFLATE application/x-javascript - AddOutputFilterByType DEFLATE application/xhtml+xml - AddOutputFilterByType DEFLATE application/xml - AddOutputFilterByType DEFLATE font/opentype - AddOutputFilterByType DEFLATE font/otf - AddOutputFilterByType DEFLATE font/ttf - AddOutputFilterByType DEFLATE image/svg+xml - AddOutputFilterByType DEFLATE image/x-icon - AddOutputFilterByType DEFLATE text/css - AddOutputFilterByType DEFLATE text/html - AddOutputFilterByType DEFLATE text/javascript - AddOutputFilterByType DEFLATE text/plain - AddOutputFilterByType DEFLATE text/xml - - # Remove browser bugs (only needed for very old 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/json application/xml - AddOutputFilterByType BROTLI_COMPRESS application/rss+xml application/atom+xml - AddOutputFilterByType BROTLI_COMPRESS image/svg+xml - - -# Enable Expires Headers - - ExpiresActive On - - # Default expiration: 1 hour after request - ExpiresDefault "access plus 1 hour" - - # CSS and JavaScript: 1 year - ExpiresByType text/css "access plus 1 year" - ExpiresByType application/javascript "access plus 1 year" - ExpiresByType text/javascript "access plus 1 year" - - # Images: 1 year - ExpiresByType image/png "access plus 1 year" - ExpiresByType image/jpg "access plus 1 year" - ExpiresByType image/jpeg "access plus 1 year" - ExpiresByType image/gif "access plus 1 year" - ExpiresByType image/svg+xml "access plus 1 year" - ExpiresByType image/webp "access plus 1 year" - ExpiresByType image/avif "access plus 1 year" - ExpiresByType image/x-icon "access plus 1 year" - - # Fonts: 1 year - ExpiresByType font/woff "access plus 1 year" - ExpiresByType font/woff2 "access plus 1 year" - ExpiresByType font/ttf "access plus 1 year" - ExpiresByType font/otf "access plus 1 year" - ExpiresByType application/font-woff "access plus 1 year" - ExpiresByType application/font-woff2 "access plus 1 year" - - # Documents: 1 week - ExpiresByType application/pdf "access plus 1 week" - - # Data: 1 day - ExpiresByType application/json "access plus 1 day" - ExpiresByType application/xml "access plus 1 day" - ExpiresByType text/xml "access plus 1 day" - - # HTML: 1 hour - ExpiresByType text/html "access plus 1 hour" - - -# ================================================================== -# SEO OPTIMIZATIONS -# ================================================================== - -# Remove trailing slashes from URLs (except directories) -RewriteEngine On -RewriteCond %{REQUEST_FILENAME} !-d -RewriteCond %{THE_REQUEST} /+[^\s]*?/{2,}[?\s] [OR] -RewriteCond %{THE_REQUEST} /+[^\s]*?/[?\s] -RewriteRule ^(.*)$ https://ukdataservices.co.uk/$1 [R=301,L] - -# Force HTTPS -RewriteCond %{HTTPS} off -RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] - -# Force www (optional - uncomment if you want to enforce www) -# RewriteCond %{HTTP_HOST} ^ukdataservices\.co\.uk [NC] -# RewriteRule ^(.*)$ https://www.ukdataservices.co.uk/$1 [L,R=301] - -# PHP Extensions Hidden -RewriteCond %{REQUEST_FILENAME} !-d -RewriteCond %{REQUEST_FILENAME} !-f -RewriteRule ^([^\.]+)$ $1.php [NC,L] - -# Custom Error Pages -ErrorDocument 400 /400.php -ErrorDocument 401 /401.php -ErrorDocument 403 /403.php -ErrorDocument 404 /404.php -ErrorDocument 500 /500.php -ErrorDocument 503 /503.php - -# ================================================================== -# SECURITY RESTRICTIONS -# ================================================================== - -# Block access to sensitive files - - Require all denied - - -# Block access to .htaccess - - Require all denied - - -# Block access to sensitive directories - - Require all denied - - -# Block WordPress attack patterns -RewriteCond %{QUERY_STRING} \.\./\.\. [OR] -RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] -RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] -RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR] -RewriteCond %{QUERY_STRING} proc/self/environ [OR] -RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] -RewriteCond %{QUERY_STRING} base64_(en|de)code\(.*\) [OR] -RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ĂȘ|"|;|\?|\*|=$).* [NC] -RewriteRule ^(.*)$ - [F,L] - -# Block SQL injection attempts -RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] -RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] -RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) -RewriteRule ^(.*)$ index.php [F,L] - -# Block common exploit attempts -RewriteCond %{REQUEST_URI} ^/(wp-admin|wp-includes|wp-content)/.*$ [OR] -RewriteCond %{REQUEST_URI} ^.*(\.php/|config\.php|phpinfo\.php|php\.ini).*$ [OR] -RewriteCond %{REQUEST_URI} ^.*/(xmlrpc\.php|wp-config\.php|install\.php).*$ -RewriteRule ^(.*)$ - [F,L] - -# ================================================================== -# LOGGING & MONITORING -# ================================================================== - -# Custom log format for security monitoring -LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %D" ukds_combined - -# Block common bot patterns (optional) - - RewriteCond %{HTTP_USER_AGENT} ^$ [OR] - RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget|libwww-perl|python|nikto|scan|winhttp|HTTrack|clshttp|loader|email|harvest|extract|grab|miner) [NC,OR] - RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|scan|winhttp|clshttp|loader).*$ [NC] - RewriteRule .* - [F,L] - - -# ================================================================== -# ADDITIONAL MIME TYPES -# ================================================================== - - - # Web fonts - AddType application/font-woff .woff - AddType application/font-woff2 .woff2 - AddType application/vnd.ms-fontobject .eot - AddType font/ttf .ttf - AddType font/otf .otf - - # Modern image formats - AddType image/webp .webp - AddType image/avif .avif - - # Manifest files - AddType application/manifest+json .webmanifest - AddType application/json .json - - # Video formats - AddType video/mp4 .mp4 - AddType video/webm .webm - - -# ================================================================== -# HOTLINK PROTECTION (optional) -# ================================================================== - -# RewriteCond %{HTTP_REFERER} !^$ -# RewriteCond %{HTTP_REFERER} !^https?://(www\.)?ukdataservices\.co\.uk [NC] -# RewriteRule \.(jpg|jpeg|png|gif|svg|css|js)$ - [F,L] - -# ================================================================== -# MAINTENANCE MODE (uncomment when needed) -# ================================================================== - -# RewriteCond %{REQUEST_URI} !/maintenance.html$ -# RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.012$ # Your IP address -# RewriteRule $ /maintenance.html [R=302,L] \ No newline at end of file diff --git a/.htaccess-enhanced b/.htaccess-enhanced deleted file mode 100644 index 590f4e3..0000000 --- a/.htaccess-enhanced +++ /dev/null @@ -1,205 +0,0 @@ -# =================================================================== -# UK Data Services - Enhanced Security .htaccess -# =================================================================== - -# Enable RewriteEngine -RewriteEngine On - -# =================================================================== -# 🔒 SECURITY HEADERS -# =================================================================== - - - # Prevent MIME type sniffing - Header always set X-Content-Type-Options "nosniff" - - # Prevent clickjacking - Header always set X-Frame-Options "DENY" - - # Enable XSS filtering - Header always set X-XSS-Protection "1; mode=block" - - # HSTS (HTTP Strict Transport Security) - Forces HTTPS - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" - - # Referrer Policy - Header always set Referrer-Policy "strict-origin-when-cross-origin" - - # Permissions Policy (formerly Feature Policy) - Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" - - # Content Security Policy (Enhanced) - Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com https://www.clarity.ms; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https://www.google-analytics.com; connect-src 'self' https://www.google-analytics.com https://analytics.google.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" - - # Remove server signature - Header unset Server - Header unset X-Powered-By - - # Cache control for sensitive files - - Header set Cache-Control "no-cache, no-store, must-revalidate" - Header set Pragma "no-cache" - Header set Expires "0" - - - -# =================================================================== -# đŸš« BLOCK ACCESS TO SENSITIVE FILES -# =================================================================== - -# Block access to sensitive files and directories - - Require all denied - - -# Block access to specific file extensions - - Require all denied - - -# Block access to common backup and temporary files - - Require all denied - - -# Block access to logs directory - - Require all denied - - -# =================================================================== -# 🔐 DISABLE DANGEROUS PHP FUNCTIONS -# =================================================================== - - - php_admin_value disable_functions "exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,highlight_file" - - -# =================================================================== -# đŸš« DIRECTORY SECURITY -# =================================================================== - -# Disable directory browsing -Options -Indexes - -# Disable server signature -ServerTokens Prod -ServerSignature Off - -# Prevent access to .git directory - - Require all denied - - -# =================================================================== -# 📁 FILE UPLOAD RESTRICTIONS -# =================================================================== - -# Block execution of uploaded files in uploads directory (if created) - - - SetHandler default-handler - RemoveHandler .php .phtml .php3 .php4 .php5 .php6 .phps .cgi .pl .py .js .jsp .sh .bat - RemoveType .php .phtml .php3 .php4 .php5 .php6 .phps .cgi .pl .py .js .jsp .sh .bat - php_flag engine off - - - -# =================================================================== -# 🔒 FORCE HTTPS (Uncomment when SSL is enabled) -# =================================================================== - -# RewriteCond %{HTTPS} off -# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] - -# =================================================================== -# đŸ›Ąïž ADDITIONAL SECURITY MEASURES -# =================================================================== - -# Limit request size (10MB) -LimitRequestBody 10485760 - -# Timeout settings -Timeout 60 -KeepAliveTimeout 15 - -# Prevent hotlinking (uncomment if needed) -# RewriteCond %{HTTP_REFERER} !^$ -# RewriteCond %{HTTP_REFERER} !^https://(www\.)?ukdataservices\.co\.uk/ [NC] -# RewriteRule \.(jpg|jpeg|png|gif|svg|css|js)$ - [F,L] - -# =================================================================== -# 📧 EMAIL SECURITY -# =================================================================== - -# Prevent email injection - - RewriteCond %{QUERY_STRING} (\[|\]|\(|\)|<|>|%0A|%0D|%22|%27|%3C|%3E|%00) [NC,OR] - RewriteCond %{QUERY_STRING} (javascript:|vbscript:|onload|onerror|onclick) [NC] - RewriteRule ^(.*)$ - [F,L] - - -# =================================================================== -# 🔍 BLOCK COMMON ATTACK PATTERNS -# =================================================================== - -# Block SQL injection attempts - - RewriteCond %{QUERY_STRING} (union|select|insert|delete|update|drop|create|alter|exec|execute) [NC] - RewriteRule ^(.*)$ - [F,L] - - # Block XSS attempts - RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] - RewriteCond %{QUERY_STRING} (<|%3C)([^e]*e)+mbed.*(>|%3E) [NC,OR] - RewriteCond %{QUERY_STRING} (<|%3C)([^o]*o)+bject.*(>|%3E) [NC,OR] - RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC] - RewriteRule ^(.*)$ - [F,L] - - -# =================================================================== -# đŸ€– BLOCK BAD BOTS AND SCRAPERS -# =================================================================== - -# Block known bad bots (add more as needed) - - RewriteCond %{HTTP_USER_AGENT} (bot|crawler|spider|scraper|harvest|extract|grab|scan|copy|wget|curl) [NC] - RewriteCond %{HTTP_USER_AGENT} !(googlebot|bingbot|facebookexternalhit|linkedinbot|twitterbot|whatsapp|telegrambot) [NC] - RewriteCond %{HTTP_USER_AGENT} !^$ [NC] - RewriteRule ^(.*)$ - [F,L] - - -# =================================================================== -# 📊 PERFORMANCE & CACHING -# =================================================================== - -# Enable compression - - AddOutputFilterByType DEFLATE text/plain - AddOutputFilterByType DEFLATE text/html - AddOutputFilterByType DEFLATE text/xml - AddOutputFilterByType DEFLATE text/css - AddOutputFilterByType DEFLATE application/xml - AddOutputFilterByType DEFLATE application/xhtml+xml - AddOutputFilterByType DEFLATE application/rss+xml - AddOutputFilterByType DEFLATE application/javascript - AddOutputFilterByType DEFLATE application/x-javascript - - -# Set cache headers for static files - - ExpiresActive On - ExpiresByType image/jpg "access plus 1 month" - ExpiresByType image/jpeg "access plus 1 month" - ExpiresByType image/gif "access plus 1 month" - ExpiresByType image/png "access plus 1 month" - ExpiresByType text/css "access plus 1 month" - ExpiresByType application/pdf "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" - ExpiresByType application/javascript "access plus 1 month" - ExpiresByType application/x-javascript "access plus 1 month" - ExpiresByType image/x-icon "access plus 1 year" - - -# =================================================================== -# END OF ENHANCED SECURITY CONFIGURATION -# =================================================================== diff --git a/.well-known/acme-challenge/test b/.well-known/acme-challenge/test new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/.well-known/acme-challenge/test @@ -0,0 +1 @@ +test diff --git a/403.php b/403.php index 05c6a6f..8e703b8 100644 --- a/403.php +++ b/403.php @@ -9,7 +9,7 @@ http_response_code(403); - Access Forbidden - UK Data Services + Access Forbidden - UK AI Automation @@ -18,7 +18,7 @@ http_response_code(403); font-family: 'Arial', sans-serif; margin: 0; padding: 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; min-height: 100vh; display: flex; @@ -77,7 +77,7 @@ http_response_code(403);

403

Access Forbidden

diff --git a/404.php b/404.php index 2243410..5c278e6 100644 --- a/404.php +++ b/404.php @@ -1,7 +1,7 @@ @@ -41,7 +41,7 @@ $page_description = "The page you're looking for doesn't exist. Explore our data .error-code { font-size: 8rem; font-weight: 700; - color: #144784; + color: #7c3aed; margin-bottom: 20px; line-height: 1; } diff --git a/500.php b/500.php index deba5f7..d33d784 100644 --- a/500.php +++ b/500.php @@ -12,7 +12,7 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER[' - Service Temporarily Unavailable - UK Data Services + Service Temporarily Unavailable - UK AI Automation @@ -21,7 +21,7 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER[' font-family: 'Arial', sans-serif; margin: 0; padding: 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; min-height: 100vh; display: flex; @@ -87,7 +87,7 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER['

500

Service Temporarily Unavailable

@@ -95,13 +95,13 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER['

Need Immediate Assistance?

Phone:
- Email: info@ukdataservices.co.uk

+ Email: info@ukaiautomation.co.uk

diff --git a/META_TAGS_TEMPLATE.php b/META_TAGS_TEMPLATE.php deleted file mode 100644 index fb032ec..0000000 --- a/META_TAGS_TEMPLATE.php +++ /dev/null @@ -1,422 +0,0 @@ - tag - * Replace variables with page-specific content - * Ensure character limits are respected: - * - Title: 50-60 characters - * - Description: 150-160 characters - */ - -// =========================================================================== -// HOMEPAGE / MAIN PAGES TEMPLATE -// =========================================================================== -?> - - - - - - - - - - - <?php echo htmlspecialchars($page_title); ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<?php echo htmlspecialchars($page_title); ?> - - - - - - - - - - - - - - - - - - - - - - - -<?php echo htmlspecialchars($page_title); ?> - - - - - - - - - - - - - - - - - - - - - - - - - -<?php echo htmlspecialchars($page_title); ?> - - - - - - - - - - - - - - - - - - - - - - - "https://schema.org", - "@type" => "Organization", - "@id" => "https://ukdataservices.co.uk#organization", - "name" => "UK Data Services", - "url" => "https://ukdataservices.co.uk", - "logo" => "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png", - "description" => "Professional web scraping and data analytics services", - "sameAs" => [ - "https://twitter.com/ukdataservices", - "https://www.linkedin.com/company/uk-data-services", - "https://www.facebook.com/ukdataservices" - ] -]; -?> - - - - - - - - - - diff --git a/about.php b/about.php index 5d087bf..f582bb9 100644 --- a/about.php +++ b/about.php @@ -2,9 +2,9 @@ // Enhanced security headers header('Strict-Transport-Security: max-age=31536000; includeSubDomains'); -$page_title = "About Our UK Web Scraping Company | UK Data Services"; -$page_description = "Meet the experts at UK Data Services, a leading UK web scraping company. We are GDPR compliant, and committed to delivering 99.8% accura..."; -$canonical_url = "https://ukdataservices.co.uk/about"; +$page_title = "About | UK AI Automation - Python & AI Automation Consultant"; +$page_description = "Peter Foster — UK-based AI automation consultant with 10+ years experience. I help legal and consultancy firms automate manual data and research workflows."; +$canonical_url = "https://ukaiautomation.co.uk/about"; // Breadcrumb navigation $breadcrumbs = [ @@ -19,8 +19,8 @@ $breadcrumbs = [ <?php echo htmlspecialchars($page_title); ?> - - + + @@ -29,7 +29,7 @@ $breadcrumbs = [ - + @@ -37,7 +37,7 @@ $breadcrumbs = [ - + @@ -51,14 +51,14 @@ $breadcrumbs = [ { "@context": "https://schema.org", "@type": "AboutPage", - "@id": "https://ukdataservices.co.uk/about#webpage", - "url": "https://ukdataservices.co.uk/about", - "name": "About UK Data Services", - "description": "Learn about UK Data Services, our expert team, values, and commitment to delivering professional data solutions since 2013.", + "@id": "https://ukaiautomation.co.uk/about#webpage", + "url": "https://ukaiautomation.co.uk/about", + "name": "About UK AI Automation", + "description": "Learn about UK AI Automation, our expert team, values, and commitment to delivering professional data solutions since 2013.", "mainEntity": { "@type": "Organization", - "@id": "https://ukdataservices.co.uk#organization", - "name": "UK Data Services", + "@id": "https://ukaiautomation.co.uk#organization", + "name": "UK AI Automation", "foundingDate": "2013", "description": "Professional data solutions provider specializing in web scraping, data extraction, and business intelligence services.", "knowsAbout": [ @@ -86,7 +86,7 @@ $breadcrumbs = [ "name": "Senior Data Engineers", "jobTitle": "Data Engineering Team", "worksFor": { - "@id": "https://ukdataservices.co.uk#organization" + "@id": "https://ukaiautomation.co.uk#organization" } } ] @@ -99,7 +99,7 @@ $breadcrumbs = [ \ No newline at end of file diff --git a/admin/spam-dashboard.php b/admin/spam-dashboard.php index 2e41725..d7348f9 100644 --- a/admin/spam-dashboard.php +++ b/admin/spam-dashboard.php @@ -83,16 +83,16 @@ $spamPatterns['top_ips'] = array_slice($ipCounts, 0, 10, true); - Spam Analysis Dashboard - UK Data Services + Spam Analysis Dashboard - UK AI Automation diff --git a/admin/view-submissions.php b/admin/view-submissions.php index 76ca5ae..89f63a4 100644 --- a/admin/view-submissions.php +++ b/admin/view-submissions.php @@ -26,7 +26,7 @@ if (!isset($_SESSION['authenticated']) || $_SESSION['authenticated'] !== true) { body { font-family: Arial, sans-serif; background: #f5f5f5; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; } .login-form { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } input[type="password"] { padding: 10px; width: 200px; margin-bottom: 10px; } - button { padding: 10px 20px; background: #179e83; color: white; border: none; border-radius: 4px; cursor: pointer; } + button { padding: 10px 20px; background: #6d28d9; color: white; border: none; border-radius: 4px; cursor: pointer; } .error { color: red; margin-bottom: 10px; } @@ -133,7 +133,7 @@ if (isset($_GET['export']) && $_GET['export'] === 'csv') { .stat-value { font-size: 36px; font-weight: bold; - color: #179e83; + color: #6d28d9; } .stat-label { color: #666; @@ -162,7 +162,7 @@ if (isset($_GET['export']) && $_GET['export'] === 'csv') { font-size: 14px; } .submission-email { - color: #179e83; + color: #6d28d9; font-weight: 500; } .submission-details { @@ -184,7 +184,7 @@ if (isset($_GET['export']) && $_GET['export'] === 'csv') { } .btn { padding: 10px 20px; - background: #179e83; + background: #6d28d9; color: white; text-decoration: none; border-radius: 4px; diff --git a/api/fetch-robots.php b/api/fetch-robots.php index c082bba..4aa1f53 100644 --- a/api/fetch-robots.php +++ b/api/fetch-robots.php @@ -80,7 +80,7 @@ if (preg_match("/^(::1|fe80:|fc00:|fd00:)/i", $ip)) { $context = stream_context_create([ "http" => [ "timeout" => 10, - "user_agent" => "UK Data Services Robots Analyzer (+https://ukdataservices.co.uk/tools/robots-analyzer)", + "user_agent" => "UK AI Automation Robots Analyzer (+https://ukaiautomation.co.uk/tools/robots-analyzer)", "follow_location" => true, "max_redirects" => 3 ], diff --git a/api/lead-capture.php b/api/lead-capture.php index 8ac39d7..ddfdd35 100644 --- a/api/lead-capture.php +++ b/api/lead-capture.php @@ -31,6 +31,6 @@ $log_entry = date("Y-m-d H:i:s") . " | $email | $source | $page\n"; file_put_contents("/var/www/ukds/api/leads.log", $log_entry, FILE_APPEND | LOCK_EX); // Send notification email (optional - uncomment if you want email alerts) -// mail("peter.foster@ukdataservices.co.uk", "New Lead: $email", "Source: $source\nPage: $page"); +// mail("peter.foster@ukaiautomation.co.uk", "New Lead: $email", "Source: $source\nPage: $page"); echo json_encode(["success" => true, "message" => "Lead captured"]); diff --git a/assets/css/cro-enhancements.css b/assets/css/cro-enhancements.css index 842134a..1ac891a 100644 --- a/assets/css/cro-enhancements.css +++ b/assets/css/cro-enhancements.css @@ -1,15 +1,15 @@ /* Mid-Article CTA Box */ .inline-cta { - background: linear-gradient(135deg, #f0f7ff 0%, #e8f4fd 100%); + background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%); padding: 24px 28px; - border-left: 4px solid #0066cc; + border-left: 4px solid #4f46e5; margin: 40px 0; border-radius: 0 8px 8px 0; box-shadow: 0 2px 8px rgba(0,102,204,0.1); } .inline-cta h4 { margin: 0 0 12px 0; - color: #0066cc; + color: #4f46e5; font-size: 1.1em; } .inline-cta p { @@ -19,7 +19,7 @@ } .inline-cta .cta-link { display: inline-block; - background: #0066cc; + background: #4f46e5; color: #fff !important; padding: 12px 24px; border-radius: 6px; @@ -28,7 +28,7 @@ transition: all 0.2s; } .inline-cta .cta-link:hover { - background: #0052a3; + background: #4338ca; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0,102,204,0.3); } @@ -39,7 +39,7 @@ bottom: 0; left: 0; right: 0; - background: linear-gradient(90deg, #1a1a2e 0%, #16213e 100%); + background: linear-gradient(90deg, #1e1b4b 0%, #1e1b4b 100%); padding: 12px 20px; display: flex; justify-content: center; @@ -117,7 +117,7 @@ } .exit-popup h3 { margin: 0 0 15px 0; - color: #1a1a2e; + color: #1e1b4b; font-size: 1.5em; } .exit-popup p { @@ -145,12 +145,12 @@ box-sizing: border-box; } .exit-popup input[type="email"]:focus { - border-color: #0066cc; + border-color: #4f46e5; outline: none; } .exit-popup .btn-primary { width: 100%; - background: #0066cc; + background: #4f46e5; color: #fff; padding: 14px; border: none; @@ -160,7 +160,7 @@ cursor: pointer; } .exit-popup .btn-primary:hover { - background: #0052a3; + background: #4338ca; } .exit-popup .no-thanks { display: block; @@ -206,7 +206,7 @@ color: #333; } .case-study-inline .content a { - color: #0066cc; + color: #4f46e5; font-weight: 600; } diff --git a/assets/css/main.css b/assets/css/main.css index 0ebeedb..bfd0001 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -64,19 +64,19 @@ input[type="number"], textarea, [contenteditable="true"] { display: inline-flex; align-items: center; justify-content: center; - background: #148069; + background: #4f46e5; color: white; } .btn-primary { - background: #148069; + background: #4f46e5; color: white !important; text-decoration: none !important; } .btn-primary:hover { transform: translateY(-2px); - background: #11725e; + background: #4338ca; box-shadow: 0 4px 16px rgba(23, 158, 131, 0.3); color: white !important; text-decoration: none !important; @@ -84,13 +84,13 @@ input[type="number"], textarea, [contenteditable="true"] { .btn-secondary { background: white; - color: #144784 !important; - border: 2px solid #144784; + color: #7c3aed !important; + border: 2px solid #7c3aed; text-decoration: none !important; } .btn-secondary:hover { - background: #144784; + background: #7c3aed; color: white !important; transform: translateY(-2px); text-decoration: none !important; @@ -101,7 +101,7 @@ input[type="number"], textarea, [contenteditable="true"] { } .highlight { - background: linear-gradient(135deg, #179e83, #1bbc9b); + background: linear-gradient(135deg, #6d28d9, #1bbc9b); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; @@ -171,13 +171,13 @@ input[type="number"], textarea, [contenteditable="true"] { transition: color 0.3s ease; } -.nav-link.active { color: #148069; font-weight: 600; border-bottom: 2px solid #148069; padding-bottom: 2px;} +.nav-link.active { color: #4f46e5; font-weight: 600; border-bottom: 2px solid #4f46e5; padding-bottom: 2px;} .nav-link:hover { - color: #0d3a6e; + color: #1e1b4b; } .nav-link.cta-button { - background: #148069; + background: #4f46e5; color: white; padding: 10px 20px; border-radius: 6px; @@ -186,7 +186,7 @@ input[type="number"], textarea, [contenteditable="true"] { .nav-link.cta-button:hover { transform: translateY(-2px); - background: #11725e; + background: #4338ca; box-shadow: 0 4px 16px rgba(23, 158, 131, 0.3); } @@ -214,7 +214,7 @@ input[type="number"], textarea, [contenteditable="true"] { /* Hero Section */ .hero { padding: 120px 0 80px; - background: linear-gradient(135deg, #252d3b 0%, #144784 100%); + background: linear-gradient(135deg, #1e1b4b 0%, #7c3aed 100%); min-height: 100vh; display: flex; align-items: center; @@ -460,7 +460,7 @@ input[type="number"], textarea, [contenteditable="true"] { content: '✓'; position: absolute; left: 0; - color: #148069; + color: #4f46e5; font-weight: bold; } @@ -487,7 +487,7 @@ input[type="number"], textarea, [contenteditable="true"] { } .step-number { - background: #148069; + background: #4f46e5; color: white; width: 60px; height: 60px; @@ -611,7 +611,7 @@ input[type="number"], textarea, [contenteditable="true"] { } .contact-item a { - color: #148069; + color: #4f46e5; text-decoration: none; } @@ -654,7 +654,7 @@ input[type="number"], textarea, [contenteditable="true"] { .form-group select:focus, .form-group textarea:focus { outline: none; - border-color: #148069; + border-color: #4f46e5; box-shadow: 0 0 0 3px rgba(23, 158, 131, 0.1); } @@ -692,7 +692,7 @@ input[type="number"], textarea, [contenteditable="true"] { /* Footer */ .footer { - background: #151f25; + background: #1e1b4b; color: white; padding: 60px 0 30px; } @@ -726,7 +726,7 @@ input[type="number"], textarea, [contenteditable="true"] { } .footer-section a:hover { - color: #148069; + color: #4f46e5; } .footer-logo img { @@ -1120,7 +1120,7 @@ img { } .article-meta .category { - background: #148069; + background: #4f46e5; color: white; padding: 5px 12px; border-radius: 15px; @@ -1162,7 +1162,7 @@ img { } .featured-article h3 a:hover { - color: #148069; + color: #4f46e5; } .featured-article p { @@ -1181,14 +1181,14 @@ img { } .article-footer .read-more { - color: #148069; + color: #4f46e5; text-decoration: none; font-weight: 500; transition: color 0.3s ease; } .article-footer .read-more:hover { - color: #144784; + color: #7c3aed; text-decoration: underline; } @@ -1240,7 +1240,7 @@ img { } .article-card h3 a:hover { - color: #148069; + color: #4f46e5; } .article-card p { @@ -1264,7 +1264,7 @@ img { .blog-newsletter { padding: 80px 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; text-align: center; } @@ -1379,17 +1379,17 @@ img { } .article-share a { - color: #148069; + color: #4f46e5; text-decoration: none; font-weight: 500; padding: 8px 16px; - border: 1px solid #179e83; + border: 1px solid #6d28d9; border-radius: 6px; transition: all 0.3s ease; } .article-share a:hover { - background: #148069; + background: #4f46e5; color: white; } @@ -1435,19 +1435,19 @@ img { .article-toc li::before { content: counter(toc-counter) ". "; - color: #148069; + color: #4f46e5; font-weight: 600; } .article-toc a { - color: #144784; + color: #7c3aed; text-decoration: none; font-weight: 500; transition: color 0.3s ease; } .article-toc a:hover { - color: #0b6b54; + color: #3730a3; text-decoration: underline; } @@ -1511,7 +1511,7 @@ img { position: absolute; top: 10px; right: 10px; - background: #148069; + background: #4f46e5; color: white; padding: 5px 10px; border-radius: 4px; @@ -1522,11 +1522,11 @@ img { .article-content pre[data-copied]:hover::before { content: '✅ Copied!'; - background: #10b981; + background: #818cf8; } .article-content pre:hover { - border-color: #148069; + border-color: #4f46e5; box-shadow: 0 2px 8px rgba(23, 158, 131, 0.1); } @@ -1535,7 +1535,7 @@ img { font-weight: 600; margin: 40px 0 20px; color: #1a1a1a; - border-bottom: 2px solid #179e83; + border-bottom: 2px solid #6d28d9; padding-bottom: 10px; } @@ -1543,7 +1543,7 @@ img { font-size: 1.5rem; font-weight: 600; margin: 30px 0 15px; - color: #0d3a6e; + color: #1e1b4b; } .article-content p { @@ -1563,18 +1563,18 @@ img { } .article-content a { - color: #0b6b54; + color: #3730a3; text-decoration: underline; transition: color 0.3s ease; } .article-content a:hover { - color: #0d3a6e; + color: #1e1b4b; } .callout-box { background: #f8f9fa; - border-left: 4px solid #179e83; + border-left: 4px solid #6d28d9; padding: 20px; margin: 30px 0; border-radius: 0 8px 8px 0; @@ -1610,13 +1610,13 @@ img { .comparison-item h4 { margin-bottom: 15px; - color: #144784; + color: #7c3aed; font-size: 1.2rem; } .best-practice-box { background: linear-gradient(135deg, #e8f5f3 0%, #f0f9ff 100%); - border: 1px solid #179e83; + border: 1px solid #6d28d9; border-radius: 12px; padding: 25px; margin: 30px 0; @@ -1624,7 +1624,7 @@ img { .best-practice-box h3 { margin-top: 0; - color: #0d3a6e; + color: #1e1b4b; } /* Image optimization */ @@ -1654,7 +1654,7 @@ a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible { - outline: 2px solid #179e83; + outline: 2px solid #6d28d9; outline-offset: 2px; box-shadow: 0 0 0 4px rgba(23, 158, 131, 0.1); } @@ -1666,14 +1666,14 @@ textarea:focus-visible { left: 0; width: 0%; height: 3px; - background: linear-gradient(90deg, #179e83, #144784); + background: linear-gradient(90deg, #6d28d9, #7c3aed); z-index: 999; transition: width 0.3s ease; } /* Category link styles */ .category-link { - background: #148069; + background: #4f46e5; color: white !important; padding: 5px 12px; border-radius: 15px; @@ -1683,7 +1683,7 @@ textarea:focus-visible { } .category-link:hover { - background: #144784; + background: #7c3aed; color: white !important; text-decoration: none; } @@ -1697,7 +1697,7 @@ textarea:focus-visible { height: 20px; margin: -10px 0 0 -10px; border: 2px solid #f3f3f3; - border-top: 2px solid #179e83; + border-top: 2px solid #6d28d9; border-radius: 50%; animation: spin 1s linear infinite; } @@ -1724,7 +1724,7 @@ textarea:focus-visible { } .notification-success { - background: #10b981; + background: #818cf8; } .notification-error { @@ -1768,7 +1768,7 @@ textarea:focus-visible { height: 50px; border: none; border-radius: 50%; - background: linear-gradient(135deg, #179e83 0%, #144784 100%); + background: linear-gradient(135deg, #6d28d9 0%, #7c3aed 100%); color: white; font-size: 20px; cursor: pointer; @@ -1809,7 +1809,7 @@ textarea:focus-visible { .form-group.success input, .form-group.success select, .form-group.success textarea { - border-color: #10b981; + border-color: #818cf8; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } @@ -1914,7 +1914,7 @@ input:focus, select:focus, textarea:focus, a:focus { - outline: 2px solid #179e83; + outline: 2px solid #6d28d9; outline-offset: 2px; } @@ -1960,7 +1960,7 @@ input:focus-visible, select:focus-visible, textarea:focus-visible, a:focus-visible { - outline: 2px solid #179e83; + outline: 2px solid #6d28d9; outline-offset: 2px; box-shadow: 0 0 0 4px rgba(23, 158, 131, 0.1); } @@ -1970,7 +1970,7 @@ a:focus-visible { position: absolute; top: -40px; left: 6px; - background: #148069; + background: #4f46e5; color: white; padding: 8px; border-radius: 4px; @@ -2013,7 +2013,7 @@ a:focus-visible { .form-group input:focus + label, .form-group select:focus + label, .form-group textarea:focus + label { - color: #148069; + color: #4f46e5; } /* Status indicators */ @@ -2026,7 +2026,7 @@ a:focus-visible { } .status-online { - background: #10b981; + background: #818cf8; box-shadow: 0 0 0 2px rgba(16, 185, 129, 0.3); animation: pulse-green 2s infinite; } @@ -2101,14 +2101,14 @@ a:focus-visible { } .breadcrumb a { - color: #144784; + color: #7c3aed; text-decoration: none; font-weight: 500; transition: color 0.3s ease; } .breadcrumb a:hover { - color: #0b6b54; + color: #3730a3; text-decoration: underline; } @@ -2119,7 +2119,7 @@ a:focus-visible { /* Page Hero Section */ .page-hero { - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; padding: 120px 0 80px; text-align: center; @@ -2208,7 +2208,7 @@ a:focus-visible { /* Service Hero Section */ .service-hero { - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; padding: 120px 0 80px; text-align: center; @@ -2319,7 +2319,7 @@ a:focus-visible { content: '✓'; position: absolute; left: 0; - color: #148069; + color: #4f46e5; font-weight: bold; } @@ -2362,7 +2362,7 @@ a:focus-visible { font-size: 1.3rem; font-weight: 600; margin-bottom: 12px; - color: #0d3a6e; + color: #1e1b4b; } .industry-card p { @@ -2403,7 +2403,7 @@ a:focus-visible { } .pricing-card.featured { - border-color: #148069; + border-color: #4f46e5; transform: scale(1.05); box-shadow: 0 8px 40px rgba(23, 158, 131, 0.15); } @@ -2414,7 +2414,7 @@ a:focus-visible { top: -12px; left: 50%; transform: translateX(-50%); - background: #148069; + background: #4f46e5; color: white; padding: 8px 20px; border-radius: 20px; @@ -2432,7 +2432,7 @@ a:focus-visible { .pricing-card .price { font-size: 3rem; font-weight: 700; - color: #148069; + color: #4f46e5; margin-bottom: 30px; line-height: 1; } @@ -2501,7 +2501,7 @@ a:focus-visible { } .faq-item h3 { - background: #144784; + background: #7c3aed; color: white; padding: 20px; margin: 0; @@ -2559,7 +2559,7 @@ a:focus-visible { font-size: 1.3rem; font-weight: 600; margin-bottom: 12px; - color: #0d3a6e; + color: #1e1b4b; } .category-card p { @@ -2583,7 +2583,7 @@ a:focus-visible { font-weight: 600; margin-bottom: 40px; color: #1a1a1a; - border-bottom: 3px solid #179e83; + border-bottom: 3px solid #6d28d9; padding-bottom: 10px; } @@ -2613,7 +2613,7 @@ a:focus-visible { .faq-question[aria-expanded="true"], .faq-question.active { - background: #148069; + background: #4f46e5; color: white; } @@ -2663,7 +2663,7 @@ a:focus-visible { .faq-cta { padding: 80px 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; text-align: center; } @@ -2732,7 +2732,7 @@ a:focus-visible { /* CTA Section */ .cta { padding: 80px 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); color: white; text-align: center; } @@ -2771,7 +2771,7 @@ a:focus-visible { } .case-study.featured { - border: 2px solid #179e83; + border: 2px solid #6d28d9; box-shadow: 0 8px 40px rgba(23, 158, 131, 0.15); } @@ -2824,7 +2824,7 @@ a:focus-visible { font-size: 1.2rem; font-weight: 600; margin-bottom: 15px; - color: #0d3a6e; + color: #1e1b4b; } .results-grid { @@ -2844,7 +2844,7 @@ a:focus-visible { .result-number { font-size: 2rem; font-weight: 700; - color: #148069; + color: #4f46e5; display: block; margin-bottom: 5px; } @@ -2860,7 +2860,7 @@ a:focus-visible { padding: 30px; border-radius: 12px; margin-top: 30px; - border-left: 4px solid #179e83; + border-left: 4px solid #6d28d9; } .testimonial p { @@ -2940,13 +2940,13 @@ a:focus-visible { font-size: 1.3rem; font-weight: 600; margin-bottom: 15px; - color: #0d3a6e; + color: #1e1b4b; } .industry-stat .stat-number { font-size: 2.5rem; font-weight: 700; - color: #148069; + color: #4f46e5; display: block; margin-bottom: 5px; } @@ -3021,11 +3021,11 @@ aside.related-articles { .related-card h3 a:hover, .related-card h4 a:hover { - color: #148069; + color: #4f46e5; } .related-card .category { - background: #148069; + background: #4f46e5; color: white; padding: 4px 12px; border-radius: 20px; @@ -3047,7 +3047,7 @@ aside.related-articles { } .related-card .read-time { - color: #148069; + color: #4f46e5; font-size: 14px; font-weight: 500; } @@ -3110,7 +3110,7 @@ aside.related-articles { /* Expert Consultation CTA */ .expert-consultation-cta { background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); - border: 2px solid #179e83; + border: 2px solid #6d28d9; border-radius: 12px; padding: 40px; text-align: center; @@ -3121,7 +3121,7 @@ aside.related-articles { } .expert-consultation-cta h3 { - color: #144784; + color: #7c3aed; font-size: 1.5rem; margin-bottom: 15px; font-weight: 600; @@ -3178,7 +3178,7 @@ aside.related-articles { top: -10px; left: 30px; font-size: 4rem; - color: #148069; + color: #4f46e5; font-family: serif; line-height: 1; } @@ -3412,10 +3412,10 @@ aside.related-articles { .technology-showcase h2 { text-align: center; margin-bottom: 50px; - color: #1a202c; + color: #1e1b4b; font-size: 2.5rem; font-weight: 700; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; @@ -3448,7 +3448,7 @@ aside.related-articles { left: 0; right: 0; height: 4px; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); + background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%); transform: scaleX(0); transition: transform 0.3s ease; } @@ -3478,7 +3478,7 @@ aside.related-articles { } .tech-card h3 { - color: #1a202c; + color: #1e1b4b; font-size: 1.5rem; font-weight: 600; margin: 0 0 15px 0; @@ -3486,7 +3486,7 @@ aside.related-articles { } .tech-card:hover h3 { - color: #0d3a6e; + color: #1e1b4b; } .tech-card p { @@ -3540,7 +3540,7 @@ aside.related-articles { padding: 30px; border-radius: 12px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border-left: 4px solid #179e83; + border-left: 4px solid #6d28d9; transition: all 0.3s ease; position: relative; overflow: hidden; @@ -3549,11 +3549,11 @@ aside.related-articles { .capability-card:hover { transform: translateY(-4px); box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12); - border-left-color: #0d3a6e; + border-left-color: #1e1b4b; } .capability-card h3 { - color: #1a202c; + color: #1e1b4b; font-size: 1.3rem; font-weight: 600; margin: 0 0 15px 0; @@ -3561,7 +3561,7 @@ aside.related-articles { } .capability-card:hover h3 { - color: #0d3a6e; + color: #1e1b4b; } .capability-card p { @@ -3588,7 +3588,7 @@ aside.related-articles { content: '✓'; position: absolute; left: 0; - color: #148069; + color: #4f46e5; font-weight: bold; font-size: 1rem; } @@ -3596,7 +3596,7 @@ aside.related-articles { /* Technology badges/tags styling */ .tech-tag { display: inline-block; - background: #148069; + background: #4f46e5; color: white; padding: 6px 12px; border-radius: 20px; @@ -3607,7 +3607,7 @@ aside.related-articles { } .tech-tag:hover { - background: #11725e; + background: #4338ca; transform: translateY(-2px); box-shadow: 0 2px 8px rgba(23, 158, 131, 0.3); } @@ -3720,14 +3720,14 @@ main > .project-types-hero:first-child { /* CSS Variables for Brand Consistency */ :root { - --color-primary: #148069; - --color-primary-dark: #11725e; - --color-secondary: #144784; - --color-secondary-light: #1a5a9e; - --color-accent: #1a5a9e; - --gradient-hero: linear-gradient(135deg, #144784 0%, #179e83 100%); - --gradient-hero-alt: linear-gradient(135deg, #144784 0%, #1a5a9e 100%); - --gradient-cta: linear-gradient(135deg, #144784 0%, #179e83 100%); + --color-primary: #4f46e5; + --color-primary-dark: #4338ca; + --color-secondary: #7c3aed; + --color-secondary-light: #8b5cf6; + --color-accent: #6d28d9; + --gradient-hero: linear-gradient(135deg, #1e1b4b 0%, #4f46e5 100%); + --gradient-hero-alt: linear-gradient(135deg, #1e1b4b 0%, #7c3aed 100%); + --gradient-cta: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%); --color-text: #444444; --color-text-dark: #1a1a1a; --color-text-light: #666666; @@ -4068,7 +4068,7 @@ main > .project-types-hero:first-child { .certifications-section .section-header h2 { font-size: 2.5rem; - color: #144784; + color: #7c3aed; margin-bottom: 16px; } @@ -4115,7 +4115,7 @@ main > .project-types-hero:first-child { .certification-badge h3 { font-size: 1.3rem; - color: #144784; + color: #7c3aed; margin-bottom: 12px; font-weight: 600; } @@ -4279,7 +4279,7 @@ body { font-size: 17px; } /* Fix 1: Trust badges as styled pills */ .trust-signals-hero .trust-badges .badge { - background: linear-gradient(135deg, #144784, #1a5298); + background: linear-gradient(135deg, #7c3aed, #8b5cf6); color: #fff; border: none; padding: 0.65rem 1.5rem; @@ -4371,7 +4371,7 @@ body { font-size: 17px; } /* Override the big teal quote mark on sidebar testimonial-card */ .quote-sidebar .testimonial-card { background: #f8f9fa; - border-left: 4px solid #144784; + border-left: 4px solid #7c3aed; border-top: none; border-right: none; border-bottom: none; @@ -4440,10 +4440,10 @@ body { font-size: 17px; } .footer-bottom p, .footer-bottom .company-details, .trust-badge-text span { - color: #d1d5db; /* ~9:1 on #151f25 */ + color: #d1d5db; /* ~9:1 on #1e1b4b */ } .footer-section a { - color: #93c5fd; /* light blue — ~7.5:1 on #151f25 */ + color: #93c5fd; /* light blue — ~7.5:1 on #1e1b4b */ } .footer-section a:hover { color: #bfdbfe; @@ -4620,7 +4620,7 @@ body { font-size: 17px; } background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); border-radius: 12px; margin: 40px 0; - border-left: 4px solid #179e83; + border-left: 4px solid #6d28d9; } .bio-avatar img { @@ -4628,7 +4628,7 @@ body { font-size: 17px; } height: 80px; border-radius: 50%; object-fit: cover; - border: 3px solid #179e83; + border: 3px solid #6d28d9; } .bio-info { @@ -4639,7 +4639,7 @@ body { font-size: 17px; } font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.5px; - color: #144784; + color: #7c3aed; margin: 0 0 8px 0; font-weight: 600; } @@ -4736,6 +4736,6 @@ body { font-size: 17px; } font-weight: 700; letter-spacing: 2px; text-transform: uppercase; - color: #148069; + color: #4f46e5; margin-bottom: 8px; } diff --git a/assets/css/main.min.css b/assets/css/main.min.css index 522becb..bc5abdd 100644 --- a/assets/css/main.min.css +++ b/assets/css/main.min.css @@ -1,4547 +1 @@ -/* CSS Reset and Base Styles */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html { - scroll-behavior: smooth; - cursor: default; -} - -body { - font-family: 'Roboto Slab', 'Lato', sans-serif; - line-height: 1.6; - color: #333333; - background-color: #ffffff; - cursor: default; -} - - -/* Force cursor inheritance - guarantees arrow cursor cross-browser */ -*, *::before, *::after { - cursor: inherit; -} - -/* Restore pointer for interactive elements */ -a, button, [role="button"], label, select, -input[type="submit"], input[type="button"], input[type="reset"], -input[type="checkbox"], input[type="radio"], -.btn, summary { - cursor: pointer; -} - -/* Restore text cursor for inputs */ -input[type="text"], input[type="email"], input[type="search"], -input[type="password"], input[type="url"], input[type="tel"], -input[type="number"], textarea, [contenteditable="true"] { - cursor: text; -} -/* Utility Classes */ -.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 0.3s ease; - box-shadow: 0 2px 8px rgba(0, 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; - background: #148069; - color: white; -} - -.btn-primary { - background: #148069; - color: white !important; - text-decoration: none !important; -} - -.btn-primary:hover { - transform: translateY(-2px); - background: #11725e; - box-shadow: 0 4px 16px rgba(23, 158, 131, 0.3); - color: white !important; - text-decoration: none !important; -} - -.btn-secondary { - background: white; - color: #144784 !important; - border: 2px solid #144784; - text-decoration: none !important; -} - -.btn-secondary:hover { - background: #144784; - color: white !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: #555; - max-width: 600px; - margin: 0 auto; -} - -/* Navigation */ -.navbar { - position: fixed; - top: 0; - width: 100%; - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(10px); - border-bottom: 1px solid rgba(0, 0, 0, 0.1); - z-index: 1000; - transition: all 0.3s ease; -} - -.navbar.scrolled { - background: rgba(255, 255, 255, 0.98); - box-shadow: 0 2px 20px rgba(0, 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 0.3s ease; -} - -.nav-link.active { color: #148069; font-weight: 600; border-bottom: 2px solid #148069; padding-bottom: 2px;} -.nav-link:hover { - color: #144784; -} - -.nav-link.cta-button { - background: #148069; - color: white; - padding: 10px 20px; - border-radius: 6px; - transition: all 0.3s ease; -} - -.nav-link.cta-button:hover { - transform: translateY(-2px); - background: #11725e; - box-shadow: 0 4px 16px rgba(23, 158, 131, 0.3); -} - -.nav-toggle { - display: none; - flex-direction: column; - cursor: pointer; - background: none; - border: none; - padding: 8px; - min-width: 48px; - min-height: 48px; - justify-content: center; - align-items: center; -} - -.bar { - width: 25px; - height: 3px; - background: #1a1a1a; - margin: 3px 0; - transition: 0.3s; -} - -/* Hero Section */ -.hero { - padding: 120px 0 80px; - background: linear-gradient(135deg, #252d3b 0%, #144784 100%); - min-height: 100vh; - display: flex; - align-items: center; - color: white; - 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(0px); } - 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: #ffffff; -} - -.hero-subtitle { - font-size: 1.3rem; - font-weight: 500; - color: #ffffff; - margin-bottom: 40px; - line-height: 1.6; - opacity: 0.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: #ffffff; -} - -.stat-label { - display: block; - font-size: 0.9rem; - color: #ffffff; - 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, 0.1)); -} - -/* Hero Graphic Animations */ -.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 0.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(0deg); } - 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: 0.7; transform: scale(1); } - 50% { opacity: 1; transform: scale(1.1); } -} - -.hero-img { - width: 100%; - height: auto; - max-width: 500px; -} - -/* Services Section */ -.services { - padding: 100px 0; - background: white; -} - -.services-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); - gap: 30px; -} - -.service-card { - background: white; - padding: 40px; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; - border: 1px solid #f0f0f0; -} - -.service-card:hover { - transform: translateY(-8px); - box-shadow: 0 8px 40px rgba(0, 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: #555; - 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: #148069; - font-weight: bold; -} - -/* Process Section */ -.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 0.6s ease; -} - -.step:last-child { - margin-bottom: 0; -} - -.step-number { - background: #148069; - color: white; - 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: #555; - line-height: 1.6; -} - -/* Why Us Section */ -.why-us { - padding: 100px 0; - background: white; -} - -.features-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 40px; -} - -.feature { - text-align: center; - padding: 30px; - animation: fadeInUp 0.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: #555; - line-height: 1.6; -} - -/* Contact Section */ -.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: #555; - 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: #555; -} - -.contact-item a { - color: #148069; - text-decoration: none; -} - -.contact-item a:hover { - text-decoration: underline; -} - -/* Form Styles */ -.contact-form { - background: white; - padding: 40px; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 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 0.3s ease; - background: white; -} - -.form-group input:focus, -.form-group select:focus, -.form-group textarea:focus { - outline: none; - border-color: #148069; - box-shadow: 0 0 0 3px rgba(23, 158, 131, 0.1); -} - -.form-group textarea { - resize: vertical; - min-height: 120px; -} - -/* Form validation states */ -.form-group input[aria-invalid="true"], -.form-group select[aria-invalid="true"], -.form-group textarea[aria-invalid="true"] { - border-color: #dc2626; - box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1); -} - -.form-group input[aria-invalid="true"]:focus, -.form-group select[aria-invalid="true"]:focus, -.form-group textarea[aria-invalid="true"]:focus { - border-color: #dc2626; - box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.2); -} - -.form-error { - display: block; - color: #dc2626; - font-size: 0.875rem; - margin-top: 6px; - min-height: 1.25rem; -} - -.form-error:empty { - display: none; -} - -/* Footer */ -.footer { - background: #151f25; - color: white; - 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: white; -} - -.footer-section ul { - list-style: none; -} - -.footer-section li { - margin-bottom: 12px; -} - -.footer-section a { - color: #ccc; - text-decoration: none; - transition: color 0.3s ease; -} - -.footer-section a:hover { - color: #148069; -} - -.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 0.3s ease; -} - -.social-links a:hover img { - filter: invert(0.7) sepia(1) saturate(2) hue-rotate(240deg); -} - -/* Animations */ -@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(0px); } - 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); - } -} - -/* Animation Classes */ -.animate-on-scroll { - opacity: 0; - transform: translateY(30px); - transition: all 0.8s ease-out; -} - -.animate-on-scroll.animated { - opacity: 1; - transform: translateY(0); -} - -.service-card { - animation: slideInFromBottom 0.6s ease-out forwards; - animation-delay: var(--animation-delay, 0s); -} - -.feature { - animation: fadeInUp 0.6s ease-out forwards; - animation-delay: var(--animation-delay, 0s); -} - -.step { - animation: fadeInLeft 0.6s ease-out forwards; - animation-delay: var(--animation-delay, 0s); -} - -/* Blog responsive styles */ -@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; - } -} - -/* Responsive Design */ -@media (max-width: 768px) { - .nav-menu { - position: fixed; - left: -100%; - top: 70px; - flex-direction: column; - background-color: white; - width: 100%; - text-align: center; - transition: 0.3s; - box-shadow: 0 10px 27px rgba(0, 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:nth-child(1) { - 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; - } - - .service-card, - .contact-form { - padding: 30px 20px; - } - - .step { - flex-direction: column; - text-align: center; - } - - .step-number { - margin: 0 0 20px 0; - } -} - -/* Performance Optimizations */ -img { - max-width: 100%; - height: auto; - loading: lazy; -} - -/* Logo specific styles */ -.logo { - height: auto; - max-height: 50px; - width: auto; -} - -.footer-logo img { - height: 40px; - width: auto; -} - -/* Favicon links don't need display properties */ - -/* Loading states */ -.loading { - opacity: 0.6; - pointer-events: none; -} - -/* Blog-specific styles */ -.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: white; -} - -.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: white; - border-radius: 16px; - overflow: hidden; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #f0f0f0; - transition: all 0.3s ease; -} - -.featured-article:hover { - transform: translateY(-5px); - box-shadow: 0 8px 40px rgba(0, 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 0.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: #148069; - color: white; - padding: 5px 12px; - border-radius: 15px; - font-weight: 500; - text-decoration: none; -} - -.article-meta .category a { - color: white; - text-decoration: none; -} - -.article-meta .category a:hover { - color: white; - text-decoration: none; -} - -.article-meta time { - color: #555; - font-weight: 500; -} - -.article-meta .read-time { - color: #555; - 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 0.3s ease; -} - -.featured-article h3 a:hover { - color: #148069; -} - -.featured-article p { - color: #555; - 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: #148069; - text-decoration: none; - font-weight: 500; - transition: color 0.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: white; - padding: 30px; - border-radius: 12px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #f0f0f0; - transition: all 0.3s ease; -} - -.article-card:hover { - transform: translateY(-5px); - box-shadow: 0 8px 40px rgba(0, 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 0.3s ease; -} - -.article-card h3 a:hover { - color: #148069; -} - -.article-card p { - color: #555; - 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: #555; - font-weight: 500; -} - -.blog-newsletter { - padding: 80px 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); - color: white; - text-align: center; -} - -.newsletter-content h2 { - font-size: 2.5rem; - font-weight: 600; - margin-bottom: 20px; - color: white; -} - -.newsletter-content p { - font-size: 1.2rem; - margin-bottom: 40px; - opacity: 0.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, 0.95); - color: #333; -} - -.newsletter-form .btn { - padding: 15px 30px; - border-radius: 50px; - white-space: nowrap; -} - -.newsletter-privacy { - font-size: 14px; - opacity: 0.8; - max-width: 400px; - margin: 0 auto; -} - -.newsletter-privacy a { - color: white; - text-decoration: underline; -} - -/* Blog article styles */ -.blog-article { - padding: 110px 0 80px; - background: white; - 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: #555; - 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: #555; - margin: 0; - font-size: 14px; -} - -.article-share a { - color: #148069; - text-decoration: none; - font-weight: 500; - padding: 8px 16px; - border: 1px solid #179e83; - border-radius: 6px; - transition: all 0.3s ease; -} - -.article-share a:hover { - background: #148069; - color: white; -} - -.article-image { - max-width: 1000px; - margin: 0 auto 40px; - border-radius: 16px; - overflow: hidden; - box-shadow: 0 8px 40px rgba(0, 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: #148069; - font-weight: 600; -} - -.article-toc a { - color: #144784; - text-decoration: none; - font-weight: 500; - transition: color 0.3s ease; -} - -.article-toc a:hover { - color: #148069; - text-decoration: underline; -} - -.article-content { - max-width: 800px; - margin: 0 auto; - line-height: 1.7; - background: white; - 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: transparent; - 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: 0.9em; - color: #d63384; -} - -.article-content pre code { - background: transparent; - padding: 20px; - color: #495057; -} - -/* Code block copy button */ -.article-content pre { - position: relative; - cursor: pointer; -} - -.article-content pre:hover::before { - content: '📋 Copy'; - position: absolute; - top: 10px; - right: 10px; - background: #148069; - color: white; - 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: #148069; - box-shadow: 0 2px 8px rgba(23, 158, 131, 0.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 ul, -.article-content ol { - margin-bottom: 20px; - padding-left: 25px; -} - -.article-content li { - margin-bottom: 8px; - color: #444; -} - -.article-content a { - color: #148069; - text-decoration: underline; - transition: color 0.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: white; - padding: 25px; - border-radius: 12px; - border: 1px solid #e1e5e9; - box-shadow: 0 2px 8px rgba(0, 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; -} - -/* Image optimization */ -img { - height: auto; - max-width: 100%; -} - -/* Lazy loading support */ -img[loading="lazy"] { - opacity: 0; - transition: opacity 0.3s ease; -} - -img[loading="lazy"].loaded { - opacity: 1; -} - -/* WebP support with fallbacks */ -picture img { - width: 100%; - height: auto; -} - -/* Focus improvements for keyboard navigation */ -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, 0.1); -} - -/* Reading progress bar */ -.reading-progress { - position: fixed; - top: 70px; - left: 0; - width: 0%; - height: 3px; - background: linear-gradient(90deg, #179e83, #144784); - z-index: 999; - transition: width 0.3s ease; -} - -/* Category link styles */ -.category-link { - background: #148069; - color: white !important; - padding: 5px 12px; - border-radius: 15px; - font-weight: 500; - text-decoration: none; - transition: background 0.3s ease; -} - -.category-link:hover { - background: #144784; - color: white !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(0deg); } - 100% { transform: rotate(360deg); } -} - -/* Notification styles */ -.notification { - position: fixed; - top: 20px; - right: 20px; - z-index: 10000; - max-width: 400px; - padding: 16px 20px; - border-radius: 8px; - color: white; - font-family: 'Roboto Slab', sans-serif; - font-size: 14px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - transition: all 0.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: none; - border: none; - color: white; - font-size: 18px; - cursor: pointer; - padding: 12px; - width: 48px; - height: 48px; - min-width: 48px; - min-height: 48px; - display: flex; - align-items: center; - justify-content: center; - margin: -12px -12px -12px 0; -} - -/* Scroll to top button */ -.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: white; - font-size: 20px; - cursor: pointer; - opacity: 0; - visibility: hidden; - transition: all 0.3s ease; - z-index: 1000; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); -} - -.scroll-top-btn:hover { - transform: translateY(-3px); - box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); -} - -/* Tooltip styles */ -.tooltip { - position: absolute; - background: #1a1a1a; - color: white; - padding: 8px 12px; - border-radius: 6px; - font-size: 14px; - white-space: nowrap; - z-index: 10000; - pointer-events: none; - transition: opacity 0.3s ease; -} - -/* Form validation states */ -.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, 0.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, 0.1); -} - -.form-error-message { - color: #ef4444; - font-size: 12px; - margin-top: 4px; - display: block; -} - -/* Image loading states */ -img.loading { - background: #f0f0f0; - opacity: 0.7; -} - -img.loaded { - transition: opacity 0.3s ease; - opacity: 1; -} - -/* Enhanced button hover effects */ -.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, 0.2), transparent); - transition: left 0.5s; -} - -.btn:not(.btn-primary):not(.btn-secondary):not(.cta-btn):hover { - transform: translateY(-2px); - box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2); - text-decoration: none; -} - -.btn:hover::before { - left: 100%; -} - -/* Print styles */ -@media print { - .navbar, - .footer, - .scroll-top-btn, - .notification { - display: none !important; - } - - .hero { - background: white !important; - color: black !important; - } - - .page-hero, - .service-hero { - background: white !important; - color: black !important; - } - - body { - font-size: 12pt; - line-height: 1.4; - } - - h1, h2, h3, h4, h5, h6 { - color: black !important; - page-break-after: avoid; - } - - .container { - max-width: none; - margin: 0; - padding: 0; - } -} - -/* Accessibility */ -.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; -} - -/* Focus styles for accessibility */ -button:focus, -input:focus, -select:focus, -textarea:focus, -a:focus { - outline: 2px solid #179e83; - outline-offset: 2px; -} - -/* High contrast mode support */ -@media (prefers-contrast: high) { - .btn-primary { - background: #000; - border: 2px solid #000; - } - - .highlight { - background: #000; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - } -} - -/* Reduced motion support */ -@media (prefers-reduced-motion: reduce) { - *, - *::before, - *::after { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - scroll-behavior: auto !important; - } -} - -/* Dark mode support */ -@media (prefers-color-scheme: dark) { - :root { - --bg-primary: #1a1a1a; - --bg-secondary: #2d2d2d; - --text-primary: #ffffff; - --text-secondary: #cccccc; - } -} - -/* Focus visible improvements */ -.btn:focus-visible, -input:focus-visible, -select:focus-visible, -textarea:focus-visible, -a:focus-visible { - outline: 2px solid #179e83; - outline-offset: 2px; - box-shadow: 0 0 0 4px rgba(23, 158, 131, 0.1); -} - -/* Skip to content link for accessibility */ -.skip-to-content { - position: absolute; - top: -40px; - left: 6px; - background: #148069; - color: white; - padding: 8px; - border-radius: 4px; - text-decoration: none; - z-index: 100000; - transition: top 0.3s; -} - -.skip-to-content:focus { - top: 6px; -} - -/* Screen reader only content */ -.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 page specific improvements */ -.error-container { - position: relative; -} - -/* Improved form styling */ -.form-group { - position: relative; -} - -.form-group label { - transition: all 0.3s ease; -} - -.form-group input:focus + label, -.form-group select:focus + label, -.form-group textarea:focus + label { - color: #148069; -} - -/* Status indicators */ -.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, 0.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, 0.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, 0.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); - } -} - -/* NEW COMPONENT STYLES - Missing CSS for enhanced pages */ - -/* Breadcrumb Navigation */ -.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: #555; - font-weight: 500; -} - -.breadcrumb a { - color: #144784; - text-decoration: none; - font-weight: 500; - transition: color 0.3s ease; -} - -.breadcrumb a:hover { - color: #148069; - text-decoration: underline; -} - -.breadcrumb li[aria-current="page"] span { - color: #555; - font-weight: 500; -} - -/* Page Hero Section */ -.page-hero { - background: linear-gradient(135deg, #144784 0%, #179e83 100%); - color: white; - 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: white; - line-height: 1.2; -} - -.page-hero .hero-subtitle { - font-size: 1.25rem; - margin-bottom: 30px; - opacity: 0.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 form { - position: relative; - display: block; -} - -.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, 0.95); - color: #333; - box-sizing: border-box; -} - -.page-hero .hero-search button { - position: absolute; - right: 15px; - top: 50%; - transform: translateY(-50%); - background: none; - border: none; - font-size: 18px; - cursor: pointer; - color: #555; - transition: color 0.3s ease; -} - -.page-hero .hero-search button:hover { - color: #333; -} - -/* Service Hero Section */ -.service-hero { - background: linear-gradient(135deg, #144784 0%, #179e83 100%); - color: white; - 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: 0.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 Section */ -.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: white; - padding: 40px; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; - border: 1px solid #f0f0f0; -} - -.feature-card:hover { - transform: translateY(-8px); - box-shadow: 0 8px 40px rgba(0, 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: #555; - 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: #148069; - font-weight: bold; -} - -/* Industries Section */ -.industries { - padding: 80px 0; - background: white; -} - -.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 0.3s ease; - border: 1px solid #e1e5e9; -} - -.industry-card:hover { - transform: translateY(-5px); - box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); -} - -.industry-card h3 { - font-size: 1.3rem; - font-weight: 600; - margin-bottom: 12px; - color: #144784; -} - -.industry-card p { - color: #555; - line-height: 1.6; -} - -/* Pricing Section */ -.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: white; - padding: 40px 30px; - border-radius: 16px; - text-align: center; - position: relative; - border: 2px solid #e1e5e9; - transition: all 0.3s ease; -} - -.pricing-card.featured { - border-color: #148069; - transform: scale(1.05); - box-shadow: 0 8px 40px rgba(23, 158, 131, 0.15); -} - -.pricing-card.featured::before { - content: 'Most Popular'; - position: absolute; - top: -12px; - left: 50%; - transform: translateX(-50%); - background: #148069; - color: white; - 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: #148069; - margin-bottom: 30px; - line-height: 1; -} - -.pricing-card .price span { - font-size: 1rem; - color: #555; - font-weight: 400; -} - -.pricing-card ul { - list-style: none; - padding: 0; - margin-bottom: 30px; -} - -.pricing-card li { - padding: 10px 0; - color: #555; - 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 Sections */ -.faq { - padding: 80px 0; - background: white; -} - -.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: white; - padding: 20px; - margin: 0; - font-size: 1.2rem; - font-weight: 600; -} - -.faq-item p { - padding: 20px; - margin: 0; - color: #555; - line-height: 1.6; -} - -/* Enhanced FAQ Components */ -.faq-categories { - padding: 60px 0; - background: white; -} - -.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 0.3s ease; - border: 1px solid #e1e5e9; -} - -.category-card:hover { - transform: translateY(-5px); - background: white; - box-shadow: 0 8px 25px rgba(0, 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: #555; - 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: white; - 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 0.3s ease; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); -} - -.faq-question:hover { - background: #f8f9fa; - transform: translateX(5px); -} - -.faq-question[aria-expanded="true"], -.faq-question.active { - background: #148069; - color: white; -} - -.faq-icon { - font-size: 1.5rem; - font-weight: bold; - transition: transform 0.3s ease; -} - -.faq-question[aria-expanded="true"] .faq-icon, -.faq-question.active .faq-icon { - transform: rotate(180deg); -} - -.faq-answer { - background: white; - padding: 0 20px; - max-height: 0; - overflow: hidden; - transition: max-height 0.3s ease, padding 0.3s ease; - border-radius: 0 0 8px 8px; - border-top: 1px solid #e1e5e9; - margin-bottom: 20px; -} - -.faq-answer.active { - padding: 20px; - max-height: 1000px; -} - -.faq-answer p { - margin-bottom: 15px; - color: #555; - line-height: 1.6; -} - -.faq-answer ul { - margin-left: 20px; - margin-bottom: 15px; -} - -.faq-answer li { - margin-bottom: 8px; - color: #555; - line-height: 1.5; -} - -.faq-cta { - padding: 80px 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); - color: white; - text-align: center; -} - -.faq-cta h2 { - font-size: 2.5rem; - font-weight: 600; - margin-bottom: 20px; - color: white; -} - -.faq-cta p { - font-size: 1.2rem; - margin-bottom: 40px; - opacity: 0.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: white; -} - -.contact-option p { - margin: 0; - opacity: 0.9; -} - -.contact-option a { - color: white; - text-decoration: none; -} - -.contact-option a:hover { - text-decoration: underline; -} - -/* CTA Section */ -.cta { - padding: 80px 0; - background: linear-gradient(135deg, #144784 0%, #179e83 100%); - color: white; - text-align: center; -} - -.cta-content h2 { - font-size: 2.5rem; - font-weight: 600; - margin-bottom: 20px; - color: white; -} - -.cta-content p { - font-size: 1.2rem; - margin-bottom: 40px; - opacity: 0.95; - max-width: 600px; - margin-left: auto; - margin-right: auto; -} - -.cta-buttons { - display: flex; - justify-content: center; - gap: 20px; - flex-wrap: wrap; -} - -/* Case Studies Specific */ -.case-study { - background: white; - border-radius: 16px; - padding: 40px; - margin-bottom: 40px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #f0f0f0; -} - -.case-study.featured { - border: 2px solid #179e83; - box-shadow: 0 8px 40px rgba(23, 158, 131, 0.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: #555; - 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: #555; - margin-bottom: 30px; - line-height: 1.6; -} - -.challenge, -.solution, -.results { - margin-bottom: 30px; -} - -.challenge h4, -.solution h4, -.results 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: #148069; - display: block; - margin-bottom: 5px; -} - -.result-label { - font-size: 14px; - color: #555; - 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: #555; - 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 */ -.industries-overview { - padding: 80px 0; - background: white; -} - -.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 0.3s ease; -} - -.industry-stat:hover { - transform: translateY(-5px); - background: white; - box-shadow: 0 8px 25px rgba(0, 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: #148069; - display: block; - margin-bottom: 5px; -} - -.industry-stat .stat-label { - font-size: 14px; - color: #555; - font-weight: 500; -} - -/* Related Articles Section */ -.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; -} - -/* Handle both aside and section elements */ -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: white; - padding: 30px; - border-radius: 12px; - box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08); - border: 1px solid #e1e5e9; - transition: all 0.3s ease; -} - -.related-card:hover { - transform: translateY(-5px); - box-shadow: 0 8px 30px rgba(0, 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 0.3s ease; -} - -.related-card h3 a:hover, -.related-card h4 a:hover { - color: #148069; -} - -.related-card .category { - background: #148069; - color: white; - padding: 4px 12px; - border-radius: 20px; - font-size: 0.8rem; - font-weight: 500; - display: inline-block; - margin-bottom: 12px; -} - -.related-card span.category { - display: inline-block; - margin-bottom: 12px; -} - -.related-card p { - color: #555; - line-height: 1.6; - margin-bottom: 15px; -} - -.related-card .read-time { - color: #148069; - font-size: 14px; - font-weight: 500; -} - -/* Category links section */ -.category-links { - display: flex; - gap: 1rem; - justify-content: center; - flex-wrap: wrap; - margin-top: 2rem; - width: 100%; -} - -.category-links .btn { - min-width: 200px; -} - -/* Mobile responsive for category links */ -@media (max-width: 768px) { - .category-links { - flex-direction: column; - align-items: center; - } - - .category-links .btn { - width: 100%; - max-width: 300px; - } -} - -/* Button text visibility fix */ -.btn * { - color: inherit; - text-decoration: inherit; -} - -.btn:visited, -.btn:link, -.btn:active, -.btn:hover { - color: white; - text-decoration: none; -} - -.btn-primary, -.btn-primary:visited, -.btn-primary:link, -.btn-primary:active { - color: white !important; - text-decoration: none !important; -} - -.btn-primary:hover, -.btn-primary:focus { - color: white !important; - text-decoration: none !important; -} - -/* Expert Consultation CTA */ -.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: #555; - 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 Grid */ -.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: white; - padding: 40px; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #f0f0f0; - position: relative; -} - -.testimonial-card::before { - content: '"'; - position: absolute; - top: -10px; - left: 30px; - font-size: 4rem; - color: #148069; - 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: #555; - 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: 0.7; -} - -/* Social Proof Section */ -.social-proof { - padding: 80px 0; - background: white; -} - -.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 0.3s ease; -} - -.logo-item:hover { - background: white; - box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); - transform: translateY(-2px); -} - -/* Responsive Updates for New Components */ -@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; - } - - .service-hero .hero-stats, - .page-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 Section */ -.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: 0.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: white; - padding: 40px 30px; - border-radius: 16px; - text-align: center; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - transition: all 0.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 0.3s ease; -} - -.tech-card:hover::before { - transform: scaleX(1); -} - -.tech-card:hover { - transform: translateY(-8px); - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15); - border-color: #cbd5e0; -} - -.tech-icon { - font-size: 3rem; - margin-bottom: 20px; - display: block; - line-height: 1; - filter: grayscale(0.2); - transition: all 0.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 0.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; -} - -/* Responsive Design for Technology Showcase */ -@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 (used in project-types.php) */ -.capabilities-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 40px; - margin: 40px 0; -} - -.capability-card { - background: white; - padding: 30px; - border-radius: 12px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border-left: 4px solid #179e83; - transition: all 0.3s ease; - position: relative; - overflow: hidden; -} - -.capability-card:hover { - transform: translateY(-4px); - box-shadow: 0 8px 30px rgba(0, 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 0.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: 0.95rem; -} - -.capability-card li::before { - content: '✓'; - position: absolute; - left: 0; - color: #148069; - font-weight: bold; - font-size: 1rem; -} - -/* Technology badges/tags styling */ -.tech-tag { - display: inline-block; - background: #148069; - color: white; - padding: 6px 12px; - border-radius: 20px; - font-size: 0.9rem; - margin: 4px 8px 4px 0; - font-weight: 500; - transition: all 0.3s ease; -} - -.tech-tag:hover { - background: #11725e; - transform: translateY(-2px); - box-shadow: 0 2px 8px rgba(23, 158, 131, 0.3); -} - -/* Responsive design for capabilities grid */ -@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; - } -} - -/* ===== NAVBAR SPACING FIX (consistent across all pages) ===== */ -/* Navbar is position:fixed, height 70px */ - -/* Hero pages: all hero variants get 120px top padding (70px navbar + 50px space) */ -.hero, -.page-hero, -.about-hero, -.faq-hero, -.service-hero, -.project-types-hero, -.tools-hero, -.quote-hero { - padding-top: 120px !important; -} - -/* Non-hero pages with
: push content below navbar */ -main { - padding-top: 90px; /* 70px navbar + 20px breathing room */ -} - -/* But if main contains a hero, don't double-pad */ -main > .hero:first-child, -main > .page-hero:first-child, -main > .about-hero:first-child, -main > .faq-hero:first-child, -main > .service-hero:first-child, -main > .project-types-hero:first-child { - margin-top: -90px; /* Cancel out the main padding */ -} - -/* Legal content pages (no hero, text-heavy) */ -.legal-content { - padding-top: 100px !important; /* 70px navbar + 30px breathing room */ -} - -/* Tool sub-pages and standalone pages (no
, no hero) */ -.calculator-container, -.analyzer-container, -.converter-container, -.checker-container, -.thank-you-container { - padding-top: 100px !important; /* 70px navbar + 30px breathing room */ -} - -/* Generic page-content class */ -.page-content { - padding-top: 90px; -} - -/* Hide reCAPTCHA badge */ -.grecaptcha-badge { - visibility: hidden !important; -} - -/* Additional hero graphic animations */ -.hero-graphic .data-line-1, -.hero-graphic .data-line-2, -.hero-graphic .data-line-3, -.hero-graphic .data-line-4, -.hero-graphic .data-line-5, -.hero-graphic .data-line-6 { - animation: data-pulse 3s ease-in-out infinite; -} - -.hero-graphic .data-line-2 { - animation-delay: 0.5s; -} - -.hero-graphic .data-line-3 { - animation-delay: 1s; -} - -.hero-graphic .data-line-4 { - animation-delay: 1.5s; -} - -.hero-graphic .data-line-5 { - animation-delay: 2s; -} - -.hero-graphic .data-line-6 { - animation-delay: 2.5s; -} - -/* ============================================ - UNIFIED COMPONENT STYLES - Added for UI consistency across all pages - ============================================ */ - -/* CSS Variables for Brand Consistency */ -:root { - --color-primary: #148069; - --color-primary-dark: #11725e; - --color-secondary: #144784; - --color-secondary-light: #1a5a9e; - --color-accent: #1a5a9e; - --gradient-hero: linear-gradient(135deg, #144784 0%, #179e83 100%); - --gradient-hero-alt: linear-gradient(135deg, #144784 0%, #1a5a9e 100%); - --gradient-cta: linear-gradient(135deg, #144784 0%, #179e83 100%); - --color-text: #444444; - --color-text-dark: #1a1a1a; - --color-text-light: #666666; - --color-border: #e1e5e9; - --color-bg-light: #f8f9fa; - --star-color: #f0c14b; -} - -/* Dark Testimonials Section (Homepage) */ -.testimonials-section-dark { - padding: 80px 0; - background: var(--gradient-hero-alt); - color: white; -} - -.testimonials-section-dark .section-header { - text-align: center; - margin-bottom: 50px; -} - -.testimonials-section-dark .section-header h2 { - color: white; - font-size: 2.2rem; - margin-bottom: 16px; -} - -.testimonials-section-dark .section-header p { - color: rgba(255, 255, 255, 0.9); - max-width: 600px; - margin: 0 auto; -} - -.testimonials-dark-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); - gap: 30px; -} - -.testimonial-card-dark { - background: rgba(255, 255, 255, 0.1); - padding: 35px; - border-radius: 12px; - backdrop-filter: blur(10px); - transition: all 0.3s ease; -} - -.testimonial-card-dark:hover { - background: rgba(255, 255, 255, 0.15); - transform: translateY(-5px); -} - -.testimonial-stars { - display: flex; - gap: 5px; - margin-bottom: 20px; -} - -.testimonial-stars .star { - color: var(--star-color); - font-size: 1.3rem; -} - -.testimonial-card-dark .testimonial-text { - font-style: italic; - margin-bottom: 25px; - line-height: 1.7; - font-size: 1.05rem; - color: white; -} - -.testimonial-author-dark { - display: flex; - align-items: center; - gap: 15px; -} - -.testimonial-avatar { - width: 50px; - height: 50px; - background: var(--color-primary); - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-weight: 700; - font-size: 1.2rem; - color: white; -} - -.testimonial-author-info .author-name { - font-weight: 600; - margin: 0; - color: white; -} - -.testimonial-author-info .author-role { - opacity: 0.8; - margin: 0; - font-size: 0.9rem; - color: white; -} - -.testimonials-cta { - text-align: center; - margin-top: 40px; -} - -.testimonials-cta .btn-white { - background: white; - color: var(--color-secondary); - padding: 14px 28px; - border-radius: 8px; - text-decoration: none; - font-weight: 600; - display: inline-block; - transition: all 0.3s ease; -} - -.testimonials-cta .btn-white:hover { - transform: translateY(-2px); - box-shadow: 0 4px 16px rgba(255, 255, 255, 0.3); -} - -/* Unified Location Hero (for location pages) */ -.location-hero { - background: var(--gradient-hero); - color: white; - padding: 120px 0 80px; - text-align: center; - position: relative; -} - -.location-hero .hero-content { - max-width: 900px; - margin: 0 auto; - position: relative; - z-index: 2; -} - -.location-hero h1 { - font-size: 3rem; - font-weight: 700; - margin-bottom: 20px; - line-height: 1.2; -} - -.location-hero .hero-subtitle { - font-size: 1.25rem; - margin-bottom: 40px; - opacity: 0.95; - line-height: 1.6; -} - -.location-hero .hero-stats { - display: flex; - justify-content: center; - gap: 40px; - margin: 40px 0; -} - -.location-hero .hero-cta { - display: flex; - justify-content: center; - gap: 20px; - flex-wrap: wrap; -} - -/* Unified Breadcrumb Styling */ -.breadcrumb-nav { - background: var(--color-bg-light); - padding: 15px 0; - border-bottom: 1px solid var(--color-border); -} - -.breadcrumb-nav .breadcrumb-list { - display: flex; - list-style: none; - margin: 0; - padding: 0; - align-items: center; - gap: 8px; - max-width: 1200px; - margin: 0 auto; - padding: 0 20px; -} - -.breadcrumb-nav .breadcrumb-item { - display: flex; - align-items: center; -} - -.breadcrumb-nav .breadcrumb-item:not(:last-child)::after { - content: '>'; - margin-left: 8px; - color: var(--color-text-light); - font-weight: 500; -} - -.breadcrumb-nav .breadcrumb-link { - color: var(--color-secondary); - text-decoration: none; - font-weight: 500; - transition: color 0.3s ease; -} - -.breadcrumb-nav .breadcrumb-link:hover { - color: var(--color-primary); - text-decoration: underline; -} - -.breadcrumb-nav .breadcrumb-current { - color: var(--color-text-light); - font-weight: 500; -} - -/* Unified Card Styles with Top Border Accent */ -.unified-card { - background: white; - padding: 40px; - border-radius: 16px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); - border: 1px solid #f0f0f0; - border-top: 4px solid var(--color-primary); - transition: all 0.3s ease; -} - -.unified-card:hover { - transform: translateY(-8px); - box-shadow: 0 8px 40px rgba(0, 0, 0, 0.12); -} - -.unified-card h3 { - font-size: 1.5rem; - font-weight: 600; - margin-bottom: 16px; - color: var(--color-text-dark); -} - -.unified-card p { - color: var(--color-text-light); - margin-bottom: 20px; - line-height: 1.6; -} - -/* Unified CTA Section */ -.unified-cta { - padding: 80px 0; - background: var(--gradient-cta); - color: white; - text-align: center; -} - -.unified-cta h2 { - font-size: 2.5rem; - font-weight: 600; - margin-bottom: 20px; - color: white; -} - -.unified-cta p { - font-size: 1.2rem; - margin-bottom: 40px; - opacity: 0.95; - max-width: 600px; - margin-left: auto; - margin-right: auto; -} - -.unified-cta .cta-buttons { - display: flex; - justify-content: center; - gap: 20px; - flex-wrap: wrap; -} - -/* Responsive adjustments for unified components */ -@media (max-width: 768px) { - .testimonials-dark-grid { - grid-template-columns: 1fr; - } - - .testimonials-section-dark { - padding: 60px 0; - } - - .testimonials-section-dark .section-header h2 { - font-size: 1.8rem; - } - - .location-hero h1 { - font-size: 2.2rem; - } - - .location-hero .hero-stats { - flex-direction: column; - gap: 20px; - } - - .location-hero .hero-cta { - flex-direction: column; - align-items: center; - } - - .unified-cta h2 { - font-size: 2rem; - } - - .unified-cta .cta-buttons { - flex-direction: column; - align-items: center; - } -} - -@media (max-width: 480px) { - .testimonial-card-dark { - padding: 25px; - } - - .testimonial-card-dark .testimonial-text { - font-size: 1rem; - } - - .unified-card { - padding: 30px 20px; - } -} - -/* Certifications & Trust Badges Section */ -.certifications-section { - padding: 80px 0; - background: #f8f9fa; -} - -.certifications-section .section-header { - text-align: center; - margin-bottom: 60px; -} - -.certifications-section .section-header h2 { - font-size: 2.5rem; - color: #144784; - margin-bottom: 16px; -} - -.certifications-section .section-header p { - color: #555; - max-width: 700px; - margin: 0 auto; - font-size: 1.1rem; -} - -.certifications-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 40px; - max-width: 1100px; - margin: 0 auto; -} - -.certification-badge { - text-align: center; - padding: 40px 30px; - background: white; - border-radius: 12px; - box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08); - transition: all 0.3s ease; -} - -.certification-badge:hover { - transform: translateY(-8px); - box-shadow: 0 8px 25px rgba(20, 71, 132, 0.15); -} - -.certification-badge .badge-icon { - margin-bottom: 25px; - display: flex; - justify-content: center; - align-items: center; -} - -.certification-badge .badge-icon svg { - width: 80px; - height: 80px; -} - -.certification-badge h3 { - font-size: 1.3rem; - color: #144784; - margin-bottom: 12px; - font-weight: 600; -} - -.certification-badge p { - color: #555; - font-size: 0.95rem; - line-height: 1.6; - margin: 0; -} - -/* Responsive Design for Certifications */ -@media (max-width: 1024px) { - .certifications-grid { - grid-template-columns: repeat(2, 1fr); - gap: 30px; - } -} - -@media (max-width: 768px) { - .certifications-section { - padding: 60px 0; - } - - .certifications-section .section-header h2 { - font-size: 2rem; - } - - .certifications-grid { - grid-template-columns: 1fr; - gap: 25px; - } - - .certification-badge { - padding: 30px 25px; - } -} - -@media (max-width: 480px) { - .certifications-section .section-header h2 { - font-size: 1.75rem; - } - - .certification-badge h3 { - font-size: 1.15rem; - } - - .certification-badge p { - font-size: 0.9rem; - } -} - -/* Trust Signals Below Hero */ -.trust-signals-hero { - background: #f8f9fa; - padding: 2rem 0; - text-align: center; -} -.trust-signals-hero .trust-heading { - font-size: 0.95rem; - color: #5c6370; - text-transform: uppercase; - letter-spacing: 1px; - margin-bottom: 1.5rem; -} -.trust-signals-hero .trust-logos { - display: flex; - justify-content: center; - align-items: center; - gap: 2rem; - flex-wrap: wrap; - margin-bottom: 1.5rem; -} -.trust-signals-hero .trust-logo-placeholder { - width: 120px; - height: 50px; - background: #e9ecef; - border-radius: 6px; -} -.trust-signals-hero .trust-badges { - display: flex; - justify-content: center; - gap: 1.5rem; - flex-wrap: wrap; -} -.trust-signals-hero .trust-badges .badge { - background: #fff; - border: 1px solid #dee2e6; - padding: 0.5rem 1rem; - border-radius: 20px; - font-size: 0.9rem; - color: #495057; -} - -/* Quote Page Layout */ -.quote-page-layout { - display: grid; - grid-template-columns: 1fr 350px; - gap: 2rem; - max-width: 1100px; - margin: 0 auto; - padding: 2rem 0; -} -@media (max-width: 768px) { - .quote-page-layout { - grid-template-columns: 1fr; - } -} -.quote-sidebar { - position: sticky; - top: 100px; - align-self: start; -} -.quote-sidebar .testimonial-card { - background: #f8f9fa; - border-left: 4px solid #0d6efd; - padding: 1.5rem; - border-radius: 8px; - margin-bottom: 1.5rem; -} -.quote-sidebar .testimonial-card blockquote p { - font-style: italic; - margin-bottom: 0.5rem; -} -.quote-sidebar .what-happens-next { - background: #fff; - border: 1px solid #dee2e6; - padding: 1.5rem; - border-radius: 8px; -} -.quote-sidebar .what-happens-next ol { - padding-left: 1.2rem; -} -.quote-sidebar .what-happens-next li { - margin-bottom: 0.75rem; -} -.optional { - color: #5c6370; - font-weight: normal; - font-size: 0.85em; -} -.form-group input.error, -.form-group select.error { - border-color: #dc3545; -} -.form-buttons { - display: flex; - gap: 1rem; - margin-top: 1.5rem; -} -} - - -/* ===== VISUAL FIXES 2026-02-08 v2 ===== */ - -/* Fix 10: Increase base font size */ -body { font-size: 17px; } - -/* Fix 11: Widen containers */ -.container { max-width: 1320px; } - -/* Fix 1: Trust badges as styled pills */ -.trust-signals-hero .trust-badges .badge { - background: linear-gradient(135deg, #144784, #1a5298); - color: #fff; - border: none; - padding: 0.65rem 1.5rem; - font-size: 0.95rem; - font-weight: 600; - letter-spacing: 0.5px; - border-radius: 24px; - box-shadow: 0 2px 8px rgba(20, 71, 132, 0.25); - display: inline-flex; - align-items: center; - gap: 0.4rem; -} -.trust-signals-hero .trust-badges .badge::before { - content: '✓'; - font-weight: 700; - font-size: 0.85rem; -} -.trust-signals-hero .trust-badges { - gap: 1.2rem; - margin-top: 0.5rem; -} -.trust-signals-hero .trust-heading { - margin-bottom: 1rem; - font-size: 1rem; -} - -/* Fix 2: Service cards breathing room */ -.service-card { padding: 42px; } -.service-card p { - font-size: 1.05rem; - line-height: 1.75; - margin-bottom: 22px; -} -.service-card li { - padding: 9px 0; - font-size: 1.02rem; - padding-left: 24px; - line-height: 1.55; -} -.service-card ul { margin-top: 8px; } -.service-card h3 { font-size: 1.4rem; } - -/* Fix 3: Stats row labels bigger */ -.hero-stats .stat-label { font-size: 1.05rem; } -.hero-stats .stat-number { font-size: 2.4rem; } - -/* Fix 4: Consistent card heights */ -.services-grid { - grid-template-columns: repeat(3, 1fr); -} -.services-grid .service-card { - display: flex; - flex-direction: column; -} -.services-grid .service-card p { flex-shrink: 0; } -.services-grid .service-card ul { flex-grow: 1; } -@media (max-width: 1100px) { - .services-grid { grid-template-columns: repeat(2, 1fr); } -} -@media (max-width: 700px) { - .services-grid { grid-template-columns: 1fr; } -} - -/* Fix 5: About values grid 3-col */ -.values-grid { - grid-template-columns: repeat(3, 1fr); - justify-items: stretch; -} -@media (max-width: 900px) { - .values-grid { grid-template-columns: repeat(2, 1fr); } -} -@media (max-width: 600px) { - .values-grid { grid-template-columns: 1fr; } -} - -/* Fix 6: About stats grid 3-col */ -.stats-grid { grid-template-columns: repeat(3, 1fr); } -@media (max-width: 768px) { - .stats-grid { grid-template-columns: repeat(2, 1fr); } -} - -/* Fix 7: Team bio cards equal height */ -.values-grid .value-card { - display: flex; - flex-direction: column; -} - -/* Fix 8: Consistent testimonial style on quote page */ -/* Override the big teal quote mark on sidebar testimonial-card */ -.quote-sidebar .testimonial-card { - background: #f8f9fa; - border-left: 4px solid #144784; - border-top: none; - border-right: none; - border-bottom: none; - padding: 1.5rem; - border-radius: 8px; - margin-bottom: 1.5rem; - box-shadow: none; -} -.quote-sidebar .testimonial-card::before { - display: none; -} -.quote-sidebar .testimonial-card blockquote p { - font-style: italic; - margin-bottom: 0.5rem; - line-height: 1.6; - color: #333; -} -.quote-sidebar .testimonial-card blockquote cite { - color: #555; - font-size: 0.9rem; -} - -/* Fix 9: FAQ full width below form & sidebar */ -.quote-faq-section { - grid-column: 1 / -1; - margin-top: 2rem; - padding-top: 2rem; - border-top: 1px solid #e0e0e0; -} - -/* Features grid improvements */ -.features-grid { - grid-template-columns: repeat(3, 1fr); -} -@media (max-width: 1100px) { - .features-grid { grid-template-columns: repeat(2, 1fr); } -} -@media (max-width: 700px) { - .features-grid { grid-template-columns: 1fr; } -} - -/* ===== END VISUAL FIXES ===== */ - - -/* ===== VISUAL FIXES 2026-02-11 ===== */ - -/* 1. Equal-height capability cards on project-types page */ -.capabilities-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 30px; - align-items: stretch; -} -.capability-card { - display: flex; - flex-direction: column; - height: 100%; -} -.capability-card p { - flex-grow: 1; -} - -/* 2. Footer contrast improvements — WCAG AA */ -.footer-section p, -.footer-section li, -.footer-bottom p, -.footer-bottom .company-details, -.trust-badge-text span { - color: #d1d5db; /* ~9:1 on #151f25 */ -} -.footer-section a { - color: #93c5fd; /* light blue — ~7.5:1 on #151f25 */ -} -.footer-section a:hover { - color: #bfdbfe; -} -.footer-section h3 { - color: #f3f4f6; -} -.footer-bottom p, -.footer-bottom .company-details { - color: #9ca3af; /* muted but still 4.6:1 */ -} -.footer-logo img { - filter: brightness(1.2); -} - -/* 3. Mobile text sizing & layout */ -@media (max-width: 768px) { - body { - font-size: 16px; - } - - /* Project-types hero */ - .project-types-hero h1 { - font-size: 1.8rem; - line-height: 1.3; - } - .project-types-hero p { - font-size: 1rem; - } - - /* Capability cards single column on mobile */ - .capabilities-grid { - grid-template-columns: 1fr; - } - - /* Industry grid single column */ - .industry-grid { - grid-template-columns: 1fr; - } - - /* Project category headings */ - .project-category h2 { - font-size: 1.6rem; - } - .project-category h3 { - font-size: 1.2rem; - } - .project-description { - font-size: 1rem; - } - - /* Footer content single column (already done but ensure) */ - .footer-content { - grid-template-columns: 1fr; - } - - /* Footer bottom stack */ - .footer-bottom, - .footer-bottom .footer-bottom-content { - flex-direction: column; - gap: 15px; - text-align: center; - } -} - -@media (max-width: 480px) { - .project-types-hero h1 { - font-size: 1.5rem; - } - .project-types-hero { - padding: 100px 0 40px; - } - .project-category { - padding: 40px 0; - } - .project-category h2 { - font-size: 1.4rem; - } -} - -/* 4. General polish */ -/* project-types-hero padding now in unified block above */ - -/* Tech tags wrapping fix */ -.tech-tags { - display: flex; - flex-wrap: wrap; - gap: 8px; -} - -/* ===== END VISUAL FIXES 2026-02-11 ===== */ - -/* Fix: constrain author-bio and article-footer outside .container (Feb 2026) */ -.blog-article .author-bio, -.blog-article .article-cta, -.blog-article .related-articles { - max-width: 1200px; - margin-left: auto; - margin-right: auto; - box-sizing: border-box; -} +*{margin:0;padding:0;box-sizing:border-box;}html{scroll-behavior:smooth;cursor:default;}body{font-family:'Roboto Slab','Lato',sans-serif;line-height:1.6;color:#333333;background-color:#ffffff;cursor:default;}*,*::before,*::after{cursor:inherit;}a,button,[role="button"],label,select,input[type="submit"],input[type="button"],input[type="reset"],input[type="checkbox"],input[type="radio"],.btn,summary{cursor:pointer;}input[type="text"],input[type="email"],input[type="search"],input[type="password"],input[type="url"],input[type="tel"],input[type="number"],textarea,[contenteditable="true"]{cursor:text;}.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 0.3s ease;box-shadow:0 2px 8px rgba(0,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;background:#4f46e5;color:white;}.btn-primary{background:#4f46e5;color:white !important;text-decoration:none !important;}.btn-primary:hover{transform:translateY(-2px);background:#4338ca;box-shadow:0 4px 16px rgba(23,158,131,0.3);color:white !important;text-decoration:none !important;}.btn-secondary{background:white;color:#7c3aed !important;border:2px solid #7c3aed;text-decoration:none !important;}.btn-secondary:hover{background:#7c3aed;color:white !important;transform:translateY(-2px);text-decoration:none !important;}.btn-full{width:100%;}.highlight{background:linear-gradient(135deg,#6d28d9,#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:#555;max-width:600px;margin:0 auto;}.navbar{position:fixed;top:0;width:100%;background:rgba(255,255,255,0.95);backdrop-filter:blur(10px);border-bottom:1px solid rgba(0,0,0,0.1);z-index:1000;transition:all 0.3s ease;}.navbar.scrolled{background:rgba(255,255,255,0.98);box-shadow:0 2px 20px rgba(0,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 0.3s ease;}.nav-link.active{color:#4f46e5;font-weight:600;border-bottom:2px solid #4f46e5;padding-bottom:2px;}.nav-link:hover{color:#1e1b4b;}.nav-link.cta-button{background:#4f46e5;color:white;padding:10px 20px;border-radius:6px;transition:all 0.3s ease;}.nav-link.cta-button:hover{transform:translateY(-2px);background:#4338ca;box-shadow:0 4px 16px rgba(23,158,131,0.3);}.nav-toggle{display:none;flex-direction:column;cursor:pointer;background:none;border:none;padding:8px;min-width:48px;min-height:48px;justify-content:center;align-items:center;}.bar{width:25px;height:3px;background:#1a1a1a;margin:3px 0;transition:0.3s;}.hero{padding:120px 0 80px;background:linear-gradient(135deg,#1e1b4b 0%,#7c3aed 100%);min-height:100vh;display:flex;align-items:center;color:white;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(0px);}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:#ffffff;}.hero-subtitle{font-size:1.3rem;font-weight:500;color:#ffffff;margin-bottom:40px;line-height:1.6;opacity:0.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:#ffffff;}.stat-label{display:block;font-size:0.9rem;color:#ffffff;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,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 0.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(0deg);}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:0.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:white;}.services-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:30px;}.service-card{background:white;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,0.08);transition:all 0.3s ease;border:1px solid #f0f0f0;}.service-card:hover{transform:translateY(-8px);box-shadow:0 8px 40px rgba(0,0,0,0.12);}.service-icon{width:60px;height:60px;margin-bottom:24px;}.service-icon img{width:100%;height:100%;}.service-card h3,.service-card h2{font-size:1.5rem;font-weight:600;margin-bottom:16px;color:#1a1a1a;}.service-card p{color:#555;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:#4f46e5;font-weight:bold;}.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 0.6s ease;}.step:last-child{margin-bottom:0;}.step-number{background:#4f46e5;color:white;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:#555;line-height:1.6;}.why-us{padding:100px 0;background:white;}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:40px;}.feature{text-align:center;padding:30px;animation:fadeInUp 0.6s ease;}.feature-icon{width:80px;height:80px;margin:0 auto 24px;}.feature-icon img{width:100%;height:100%;}.feature h3,.feature h2{font-size:1.3rem;font-weight:600;margin-bottom:16px;color:#1a1a1a;}.feature p{color:#555;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:#555;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:#555;}.contact-item a{color:#4f46e5;text-decoration:none;}.contact-item a:hover{text-decoration:underline;}.contact-form{background:white;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,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 0.3s ease;background:white;}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:#4f46e5;box-shadow:0 0 0 3px rgba(23,158,131,0.1);}.form-group textarea{resize:vertical;min-height:120px;}.form-group input[aria-invalid="true"],.form-group select[aria-invalid="true"],.form-group textarea[aria-invalid="true"]{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,0.1);}.form-group input[aria-invalid="true"]:focus,.form-group select[aria-invalid="true"]:focus,.form-group textarea[aria-invalid="true"]:focus{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,0.2);}.form-error{display:block;color:#dc2626;font-size:0.875rem;margin-top:6px;min-height:1.25rem;}.form-error:empty{display:none;}.footer{background:#1e1b4b;color:white;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:white;}.footer-section ul{list-style:none;}.footer-section li{margin-bottom:12px;}.footer-section a{color:#ccc;text-decoration:none;transition:color 0.3s ease;}.footer-section a:hover{color:#4f46e5;}.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 0.3s ease;}.social-links a:hover img{filter:invert(0.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(0px);}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 0.8s ease-out;}.animate-on-scroll.animated{opacity:1;transform:translateY(0);}.service-card{animation:slideInFromBottom 0.6s ease-out forwards;animation-delay:var(--animation-delay,0s);}.feature{animation:fadeInUp 0.6s ease-out forwards;animation-delay:var(--animation-delay,0s);}.step{animation:fadeInLeft 0.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:white;width:100%;text-align:center;transition:0.3s;box-shadow:0 10px 27px rgba(0,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:nth-child(1){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;}.service-card,.contact-form{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:0.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:white;}.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:white;border-radius:16px;overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,0.08);border:1px solid #f0f0f0;transition:all 0.3s ease;}.featured-article:hover{transform:translateY(-5px);box-shadow:0 8px 40px rgba(0,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 0.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:#4f46e5;color:white;padding:5px 12px;border-radius:15px;font-weight:500;text-decoration:none;}.article-meta .category a{color:white;text-decoration:none;}.article-meta .category a:hover{color:white;text-decoration:none;}.article-meta time{color:#555;font-weight:500;}.article-meta .read-time{color:#555;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 0.3s ease;}.featured-article h3 a:hover{color:#4f46e5;}.featured-article p{color:#555;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:#4f46e5;text-decoration:none;font-weight:500;transition:color 0.3s ease;}.article-footer .read-more:hover{color:#7c3aed;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:white;padding:30px;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,0.08);border:1px solid #f0f0f0;transition:all 0.3s ease;}.article-card:hover{transform:translateY(-5px);box-shadow:0 8px 40px rgba(0,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 0.3s ease;}.article-card h3 a:hover{color:#4f46e5;}.article-card p{color:#555;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:#555;font-weight:500;}.blog-newsletter{padding:80px 0;background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:white;text-align:center;}.newsletter-content h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:white;}.newsletter-content p{font-size:1.2rem;margin-bottom:40px;opacity:0.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,0.95);color:#333;}.newsletter-form .btn{padding:15px 30px;border-radius:50px;white-space:nowrap;}.newsletter-privacy{font-size:14px;opacity:0.8;max-width:400px;margin:0 auto;}.newsletter-privacy a{color:white;text-decoration:underline;}.blog-article{padding:110px 0 80px;background:white;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:#555;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:#555;margin:0;font-size:14px;}.article-share a{color:#4f46e5;text-decoration:none;font-weight:500;padding:8px 16px;border:1px solid #6d28d9;border-radius:6px;transition:all 0.3s ease;}.article-share a:hover{background:#4f46e5;color:white;}.article-image{max-width:1000px;margin:0 auto 40px;border-radius:16px;overflow:hidden;box-shadow:0 8px 40px rgba(0,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:#4f46e5;font-weight:600;}.article-toc a{color:#7c3aed;text-decoration:none;font-weight:500;transition:color 0.3s ease;}.article-toc a:hover{color:#3730a3;text-decoration:underline;}.article-content{max-width:800px;margin:0 auto;line-height:1.7;background:white;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:transparent;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:0.9em;color:#d63384;}.article-content pre code{background:transparent;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:#4f46e5;color:white;padding:5px 10px;border-radius:4px;font-size:12px;cursor:pointer;z-index:10;}.article-content pre[data-copied]:hover::before{content:'✠Copied!';background:#818cf8;}.article-content pre:hover{border-color:#4f46e5;box-shadow:0 2px 8px rgba(23,158,131,0.1);}.article-content h2{font-size:2rem;font-weight:600;margin:40px 0 20px;color:#1a1a1a;border-bottom:2px solid #6d28d9;padding-bottom:10px;}.article-content h3{font-size:1.5rem;font-weight:600;margin:30px 0 15px;color:#1e1b4b;}.article-content p{margin-bottom:20px;color:#444;}.article-content ul,.article-content ol{margin-bottom:20px;padding-left:25px;}.article-content li{margin-bottom:8px;color:#444;}.article-content a{color:#3730a3;text-decoration:underline;transition:color 0.3s ease;}.article-content a:hover{color:#1e1b4b;}.callout-box{background:#f8f9fa;border-left:4px solid #6d28d9;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:white;padding:25px;border-radius:12px;border:1px solid #e1e5e9;box-shadow:0 2px 8px rgba(0,0,0,0.05);}.comparison-item h4{margin-bottom:15px;color:#7c3aed;font-size:1.2rem;}.best-practice-box{background:linear-gradient(135deg,#e8f5f3 0%,#f0f9ff 100%);border:1px solid #6d28d9;border-radius:12px;padding:25px;margin:30px 0;}.best-practice-box h3{margin-top:0;color:#1e1b4b;}img{height:auto;max-width:100%;}img[loading="lazy"]{opacity:0;transition:opacity 0.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 #6d28d9;outline-offset:2px;box-shadow:0 0 0 4px rgba(23,158,131,0.1);}.reading-progress{position:fixed;top:70px;left:0;width:0%;height:3px;background:linear-gradient(90deg,#6d28d9,#7c3aed);z-index:999;transition:width 0.3s ease;}.category-link{background:#4f46e5;color:white !important;padding:5px 12px;border-radius:15px;font-weight:500;text-decoration:none;transition:background 0.3s ease;}.category-link:hover{background:#7c3aed;color:white !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 #6d28d9;border-radius:50%;animation:spin 1s linear infinite;}@keyframes spin{0%{transform:rotate(0deg);}100%{transform:rotate(360deg);}}.notification{position:fixed;top:20px;right:20px;z-index:10000;max-width:400px;padding:16px 20px;border-radius:8px;color:white;font-family:'Roboto Slab',sans-serif;font-size:14px;box-shadow:0 4px 12px rgba(0,0,0,0.15);transition:all 0.3s ease;}.notification-success{background:#818cf8;}.notification-error{background:#ef4444;}.notification-info{background:#3b82f6;}.notification-content{display:flex;justify-content:space-between;align-items:center;gap:12px;}.notification-close{background:none;border:none;color:white;font-size:18px;cursor:pointer;padding:12px;width:48px;height:48px;min-width:48px;min-height:48px;display:flex;align-items:center;justify-content:center;margin:-12px -12px -12px 0;}.scroll-top-btn{position:fixed;bottom:30px;right:30px;width:50px;height:50px;border:none;border-radius:50%;background:linear-gradient(135deg,#6d28d9 0%,#7c3aed 100%);color:white;font-size:20px;cursor:pointer;opacity:0;visibility:hidden;transition:all 0.3s ease;z-index:1000;box-shadow:0 4px 12px rgba(0,0,0,0.15);}.scroll-top-btn:hover{transform:translateY(-3px);box-shadow:0 6px 20px rgba(0,0,0,0.2);}.tooltip{position:absolute;background:#1a1a1a;color:white;padding:8px 12px;border-radius:6px;font-size:14px;white-space:nowrap;z-index:10000;pointer-events:none;transition:opacity 0.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,0.1);}.form-group.success input,.form-group.success select,.form-group.success textarea{border-color:#818cf8;box-shadow:0 0 0 3px rgba(16,185,129,0.1);}.form-error-message{color:#ef4444;font-size:12px;margin-top:4px;display:block;}img.loading{background:#f0f0f0;opacity:0.7;}img.loaded{transition:opacity 0.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,0.2),transparent);transition:left 0.5s;}.btn:not(.btn-primary):not(.btn-secondary):not(.cta-btn):hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,0.2);text-decoration:none;}.btn:hover::before{left:100%;}@media print{.navbar,.footer,.scroll-top-btn,.notification{display:none !important;}.hero{background:white !important;color:black !important;}.page-hero,.service-hero{background:white !important;color:black !important;}body{font-size:12pt;line-height:1.4;}h1,h2,h3,h4,h5,h6{color:black !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;}button:focus,input:focus,select:focus,textarea:focus,a:focus{outline:2px solid #6d28d9;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){*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !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,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid #6d28d9;outline-offset:2px;box-shadow:0 0 0 4px rgba(23,158,131,0.1);}.skip-to-content{position:absolute;top:-40px;left:6px;background:#4f46e5;color:white;padding:8px;border-radius:4px;text-decoration:none;z-index:100000;transition:top 0.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 0.3s ease;}.form-group input:focus+label,.form-group select:focus+label,.form-group textarea:focus+label{color:#4f46e5;}.status-indicator{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:8px;}.status-online{background:#818cf8;box-shadow:0 0 0 2px rgba(16,185,129,0.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,0.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,0.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:#555;font-weight:500;}.breadcrumb a{color:#7c3aed;text-decoration:none;font-weight:500;transition:color 0.3s ease;}.breadcrumb a:hover{color:#3730a3;text-decoration:underline;}.breadcrumb li[aria-current="page"] span{color:#555;font-weight:500;}.page-hero{background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:white;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:white;line-height:1.2;}.page-hero .hero-subtitle{font-size:1.25rem;margin-bottom:30px;opacity:0.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 form{position:relative;display:block;}.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,0.95);color:#333;box-sizing:border-box;}.page-hero .hero-search button{position:absolute;right:15px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:18px;cursor:pointer;color:#555;transition:color 0.3s ease;}.page-hero .hero-search button:hover{color:#333;}.service-hero{background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:white;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:0.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:white;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,0.08);transition:all 0.3s ease;border:1px solid #f0f0f0;}.feature-card:hover{transform:translateY(-8px);box-shadow:0 8px 40px rgba(0,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:#555;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:#4f46e5;font-weight:bold;}.industries{padding:80px 0;background:white;}.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 0.3s ease;border:1px solid #e1e5e9;}.industry-card:hover{transform:translateY(-5px);box-shadow:0 8px 25px rgba(0,0,0,0.15);}.industry-card h3{font-size:1.3rem;font-weight:600;margin-bottom:12px;color:#1e1b4b;}.industry-card p{color:#555;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:white;padding:40px 30px;border-radius:16px;text-align:center;position:relative;border:2px solid #e1e5e9;transition:all 0.3s ease;}.pricing-card.featured{border-color:#4f46e5;transform:scale(1.05);box-shadow:0 8px 40px rgba(23,158,131,0.15);}.pricing-card.featured::before{content:'Most Popular';position:absolute;top:-12px;left:50%;transform:translateX(-50%);background:#4f46e5;color:white;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:#4f46e5;margin-bottom:30px;line-height:1;}.pricing-card .price span{font-size:1rem;color:#555;font-weight:400;}.pricing-card ul{list-style:none;padding:0;margin-bottom:30px;}.pricing-card li{padding:10px 0;color:#555;border-bottom:1px solid #f0f0f0;}.pricing-card li:last-child{border-bottom:none;}.pricing-card .pricing-note{font-size:14px;color:#6b7280;margin-top:20px;font-style:italic;}.pricing-cta{text-align:center;margin-top:50px;}.faq{padding:80px 0;background:white;}.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:#7c3aed;color:white;padding:20px;margin:0;font-size:1.2rem;font-weight:600;}.faq-item p{padding:20px;margin:0;color:#555;line-height:1.6;}.faq-categories{padding:60px 0;background:white;}.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 0.3s ease;border:1px solid #e1e5e9;}.category-card:hover{transform:translateY(-5px);background:white;box-shadow:0 8px 25px rgba(0,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:#1e1b4b;}.category-card p{color:#555;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 #6d28d9;padding-bottom:10px;}.faq-question{width:100%;background:white;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 0.3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.05);}.faq-question:hover{background:#f8f9fa;transform:translateX(5px);}.faq-question[aria-expanded="true"],.faq-question.active{background:#4f46e5;color:white;}.faq-icon{font-size:1.5rem;font-weight:bold;transition:transform 0.3s ease;}.faq-question[aria-expanded="true"] .faq-icon,.faq-question.active .faq-icon{transform:rotate(180deg);}.faq-answer{background:white;padding:0 20px;max-height:0;overflow:hidden;transition:max-height 0.3s ease,padding 0.3s ease;border-radius:0 0 8px 8px;border-top:1px solid #e1e5e9;margin-bottom:20px;}.faq-answer.active{padding:20px;max-height:1000px;}.faq-answer p{margin-bottom:15px;color:#555;line-height:1.6;}.faq-answer ul{margin-left:20px;margin-bottom:15px;}.faq-answer li{margin-bottom:8px;color:#555;line-height:1.5;}.faq-cta{padding:80px 0;background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:white;text-align:center;}.faq-cta h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:white;}.faq-cta p{font-size:1.2rem;margin-bottom:40px;opacity:0.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:white;}.contact-option p{margin:0;opacity:0.9;}.contact-option a{color:white;text-decoration:none;}.contact-option a:hover{text-decoration:underline;}.cta{padding:80px 0;background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:white;text-align:center;}.cta-content h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:white;}.cta-content p{font-size:1.2rem;margin-bottom:40px;opacity:0.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:white;border-radius:16px;padding:40px;margin-bottom:40px;box-shadow:0 4px 20px rgba(0,0,0,0.08);border:1px solid #f0f0f0;}.case-study.featured{border:2px solid #6d28d9;box-shadow:0 8px 40px rgba(23,158,131,0.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:#555;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:#555;margin-bottom:30px;line-height:1.6;}.challenge,.solution,.results{margin-bottom:30px;}.challenge h4,.solution h4,.results h4{font-size:1.2rem;font-weight:600;margin-bottom:15px;color:#1e1b4b;}.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:#4f46e5;display:block;margin-bottom:5px;}.result-label{font-size:14px;color:#555;font-weight:500;}.testimonial{background:#f8f9fa;padding:30px;border-radius:12px;margin-top:30px;border-left:4px solid #6d28d9;}.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:#555;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:white;}.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 0.3s ease;}.industry-stat:hover{transform:translateY(-5px);background:white;box-shadow:0 8px 25px rgba(0,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:#1e1b4b;}.industry-stat .stat-number{font-size:2.5rem;font-weight:700;color:#4f46e5;display:block;margin-bottom:5px;}.industry-stat .stat-label{font-size:14px;color:#555;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:white;padding:30px;border-radius:12px;box-shadow:0 4px 15px rgba(0,0,0,0.08);border:1px solid #e1e5e9;transition:all 0.3s ease;}.related-card:hover{transform:translateY(-5px);box-shadow:0 8px 30px rgba(0,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 0.3s ease;}.related-card h3 a:hover,.related-card h4 a:hover{color:#4f46e5;}.related-card .category{background:#4f46e5;color:white;padding:4px 12px;border-radius:20px;font-size:0.8rem;font-weight:500;display:inline-block;margin-bottom:12px;}.related-card span.category{display:inline-block;margin-bottom:12px;}.related-card p{color:#555;line-height:1.6;margin-bottom:15px;}.related-card .read-time{color:#4f46e5;font-size:14px;font-weight:500;}.category-links{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;margin-top:2rem;width:100%;}.category-links .btn{min-width:200px;}@media (max-width:768px){.category-links{flex-direction:column;align-items:center;}.category-links .btn{width:100%;max-width:300px;}}.btn *{color:inherit;text-decoration:inherit;}.btn:visited,.btn:link,.btn:active,.btn:hover{color:white;text-decoration:none;}.btn-primary,.btn-primary:visited,.btn-primary:link,.btn-primary:active{color:white !important;text-decoration:none !important;}.btn-primary:hover,.btn-primary:focus{color:white !important;text-decoration:none !important;}.expert-consultation-cta{background:linear-gradient(135deg,#f8f9fa 0%,#e9ecef 100%);border:2px solid #6d28d9;border-radius:12px;padding:40px;text-align:center;margin:40px 0;clear:both;width:100%;box-sizing:border-box;}.expert-consultation-cta h3{color:#7c3aed;font-size:1.5rem;margin-bottom:15px;font-weight:600;}.expert-consultation-cta p{color:#555;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:white;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,0.08);border:1px solid #f0f0f0;position:relative;}.testimonial-card::before{content:'"';position:absolute;top:-10px;left:30px;font-size:4rem;color:#4f46e5;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:#555;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:0.7;}.social-proof{padding:80px 0;background:white;}.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:#6b7280;font-weight:500;text-align:center;transition:all 0.3s ease;}.logo-item:hover{background:white;box-shadow:0 4px 15px rgba(0,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;}.service-hero .hero-stats,.page-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:0.3;pointer-events:none;}.technology-showcase .container{position:relative;z-index:1;}.technology-showcase h2{text-align:center;margin-bottom:50px;color:#1e1b4b;font-size:2.5rem;font-weight:700;background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 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:white;padding:40px 30px;border-radius:16px;text-align:center;box-shadow:0 4px 20px rgba(0,0,0,0.08);transition:all 0.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,#7c3aed 0%,#6d28d9 100%);transform:scaleX(0);transition:transform 0.3s ease;}.tech-card:hover::before{transform:scaleX(1);}.tech-card:hover{transform:translateY(-8px);box-shadow:0 12px 40px rgba(0,0,0,0.15);border-color:#cbd5e0;}.tech-icon{font-size:3rem;margin-bottom:20px;display:block;line-height:1;filter:grayscale(0.2);transition:all 0.3s ease;}.tech-card:hover .tech-icon{transform:scale(1.1);filter:grayscale(0);}.tech-card h3{color:#1e1b4b;font-size:1.5rem;font-weight:600;margin:0 0 15px 0;transition:color 0.3s ease;}.tech-card:hover h3{color:#1e1b4b;}.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:white;padding:30px;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,0.08);border-left:4px solid #6d28d9;transition:all 0.3s ease;position:relative;overflow:hidden;}.capability-card:hover{transform:translateY(-4px);box-shadow:0 8px 30px rgba(0,0,0,0.12);border-left-color:#1e1b4b;}.capability-card h3{color:#1e1b4b;font-size:1.3rem;font-weight:600;margin:0 0 15px 0;transition:color 0.3s ease;}.capability-card:hover h3{color:#1e1b4b;}.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:0.95rem;}.capability-card li::before{content:'✓';position:absolute;left:0;color:#4f46e5;font-weight:bold;font-size:1rem;}.tech-tag{display:inline-block;background:#4f46e5;color:white;padding:6px 12px;border-radius:20px;font-size:0.9rem;margin:4px 8px 4px 0;font-weight:500;transition:all 0.3s ease;}.tech-tag:hover{background:#4338ca;transform:translateY(-2px);box-shadow:0 2px 8px rgba(23,158,131,0.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;}}.hero,.page-hero,.about-hero,.faq-hero,.service-hero,.project-types-hero,.tools-hero,.quote-hero{padding-top:120px !important;}main{padding-top:90px;}main>.hero:first-child,main>.page-hero:first-child,main>.about-hero:first-child,main>.faq-hero:first-child,main>.service-hero:first-child,main>.project-types-hero:first-child{margin-top:-90px;}.legal-content{padding-top:100px !important;}.calculator-container,.analyzer-container,.converter-container,.checker-container,.thank-you-container{padding-top:100px !important;}.page-content{padding-top:90px;}.grecaptcha-badge{visibility:hidden !important;}.hero-graphic .data-line-1,.hero-graphic .data-line-2,.hero-graphic .data-line-3,.hero-graphic .data-line-4,.hero-graphic .data-line-5,.hero-graphic .data-line-6{animation:data-pulse 3s ease-in-out infinite;}.hero-graphic .data-line-2{animation-delay:0.5s;}.hero-graphic .data-line-3{animation-delay:1s;}.hero-graphic .data-line-4{animation-delay:1.5s;}.hero-graphic .data-line-5{animation-delay:2s;}.hero-graphic .data-line-6{animation-delay:2.5s;}:root{--color-primary:#4f46e5;--color-primary-dark:#4338ca;--color-secondary:#7c3aed;--color-secondary-light:#8b5cf6;--color-accent:#6d28d9;--gradient-hero:linear-gradient(135deg,#1e1b4b 0%,#4f46e5 100%);--gradient-hero-alt:linear-gradient(135deg,#1e1b4b 0%,#7c3aed 100%);--gradient-cta:linear-gradient(135deg,#4f46e5 0%,#7c3aed 100%);--color-text:#444444;--color-text-dark:#1a1a1a;--color-text-light:#666666;--color-border:#e1e5e9;--color-bg-light:#f8f9fa;--star-color:#f0c14b;}.testimonials-section-dark{padding:80px 0;background:var(--gradient-hero-alt);color:white;}.testimonials-section-dark .section-header{text-align:center;margin-bottom:50px;}.testimonials-section-dark .section-header h2{color:white;font-size:2.2rem;margin-bottom:16px;}.testimonials-section-dark .section-header p{color:rgba(255,255,255,0.9);max-width:600px;margin:0 auto;}.testimonials-dark-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:30px;}.testimonial-card-dark{background:rgba(255,255,255,0.1);padding:35px;border-radius:12px;backdrop-filter:blur(10px);transition:all 0.3s ease;}.testimonial-card-dark:hover{background:rgba(255,255,255,0.15);transform:translateY(-5px);}.testimonial-stars{display:flex;gap:5px;margin-bottom:20px;}.testimonial-stars .star{color:var(--star-color);font-size:1.3rem;}.testimonial-card-dark .testimonial-text{font-style:italic;margin-bottom:25px;line-height:1.7;font-size:1.05rem;color:white;}.testimonial-author-dark{display:flex;align-items:center;gap:15px;}.testimonial-avatar{width:50px;height:50px;background:var(--color-primary);border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1.2rem;color:white;}.testimonial-author-info .author-name{font-weight:600;margin:0;color:white;}.testimonial-author-info .author-role{opacity:0.8;margin:0;font-size:0.9rem;color:white;}.testimonials-cta{text-align:center;margin-top:40px;}.testimonials-cta .btn-white{background:white;color:var(--color-secondary);padding:14px 28px;border-radius:8px;text-decoration:none;font-weight:600;display:inline-block;transition:all 0.3s ease;}.testimonials-cta .btn-white:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(255,255,255,0.3);}.location-hero{background:var(--gradient-hero);color:white;padding:120px 0 80px;text-align:center;position:relative;}.location-hero .hero-content{max-width:900px;margin:0 auto;position:relative;z-index:2;}.location-hero h1{font-size:3rem;font-weight:700;margin-bottom:20px;line-height:1.2;}.location-hero .hero-subtitle{font-size:1.25rem;margin-bottom:40px;opacity:0.95;line-height:1.6;}.location-hero .hero-stats{display:flex;justify-content:center;gap:40px;margin:40px 0;}.location-hero .hero-cta{display:flex;justify-content:center;gap:20px;flex-wrap:wrap;}.breadcrumb-nav{background:var(--color-bg-light);padding:15px 0;border-bottom:1px solid var(--color-border);}.breadcrumb-nav .breadcrumb-list{display:flex;list-style:none;margin:0;padding:0;align-items:center;gap:8px;max-width:1200px;margin:0 auto;padding:0 20px;}.breadcrumb-nav .breadcrumb-item{display:flex;align-items:center;}.breadcrumb-nav .breadcrumb-item:not(:last-child)::after{content:'>';margin-left:8px;color:var(--color-text-light);font-weight:500;}.breadcrumb-nav .breadcrumb-link{color:var(--color-secondary);text-decoration:none;font-weight:500;transition:color 0.3s ease;}.breadcrumb-nav .breadcrumb-link:hover{color:var(--color-primary);text-decoration:underline;}.breadcrumb-nav .breadcrumb-current{color:var(--color-text-light);font-weight:500;}.unified-card{background:white;padding:40px;border-radius:16px;box-shadow:0 4px 20px rgba(0,0,0,0.08);border:1px solid #f0f0f0;border-top:4px solid var(--color-primary);transition:all 0.3s ease;}.unified-card:hover{transform:translateY(-8px);box-shadow:0 8px 40px rgba(0,0,0,0.12);}.unified-card h3{font-size:1.5rem;font-weight:600;margin-bottom:16px;color:var(--color-text-dark);}.unified-card p{color:var(--color-text-light);margin-bottom:20px;line-height:1.6;}.unified-cta{padding:80px 0;background:var(--gradient-cta);color:white;text-align:center;}.unified-cta h2{font-size:2.5rem;font-weight:600;margin-bottom:20px;color:white;}.unified-cta p{font-size:1.2rem;margin-bottom:40px;opacity:0.95;max-width:600px;margin-left:auto;margin-right:auto;}.unified-cta .cta-buttons{display:flex;justify-content:center;gap:20px;flex-wrap:wrap;}@media (max-width:768px){.testimonials-dark-grid{grid-template-columns:1fr;}.testimonials-section-dark{padding:60px 0;}.testimonials-section-dark .section-header h2{font-size:1.8rem;}.location-hero h1{font-size:2.2rem;}.location-hero .hero-stats{flex-direction:column;gap:20px;}.location-hero .hero-cta{flex-direction:column;align-items:center;}.unified-cta h2{font-size:2rem;}.unified-cta .cta-buttons{flex-direction:column;align-items:center;}}@media (max-width:480px){.testimonial-card-dark{padding:25px;}.testimonial-card-dark .testimonial-text{font-size:1rem;}.unified-card{padding:30px 20px;}}.certifications-section{padding:80px 0;background:#f8f9fa;}.certifications-section .section-header{text-align:center;margin-bottom:60px;}.certifications-section .section-header h2{font-size:2.5rem;color:#7c3aed;margin-bottom:16px;}.certifications-section .section-header p{color:#555;max-width:700px;margin:0 auto;font-size:1.1rem;}.certifications-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:40px;max-width:1100px;margin:0 auto;}.certification-badge{text-align:center;padding:40px 30px;background:white;border-radius:12px;box-shadow:0 4px 15px rgba(0,0,0,0.08);transition:all 0.3s ease;}.certification-badge:hover{transform:translateY(-8px);box-shadow:0 8px 25px rgba(20,71,132,0.15);}.certification-badge .badge-icon{margin-bottom:25px;display:flex;justify-content:center;align-items:center;}.certification-badge .badge-icon svg{width:80px;height:80px;}.certification-badge h3{font-size:1.3rem;color:#7c3aed;margin-bottom:12px;font-weight:600;}.certification-badge p{color:#555;font-size:0.95rem;line-height:1.6;margin:0;}@media (max-width:1024px){.certifications-grid{grid-template-columns:repeat(2,1fr);gap:30px;}}@media (max-width:768px){.certifications-section{padding:60px 0;}.certifications-section .section-header h2{font-size:2rem;}.certifications-grid{grid-template-columns:1fr;gap:25px;}.certification-badge{padding:30px 25px;}}@media (max-width:480px){.certifications-section .section-header h2{font-size:1.75rem;}.certification-badge h3{font-size:1.15rem;}.certification-badge p{font-size:0.9rem;}}.trust-signals-hero{background:#f8f9fa;padding:2rem 0;text-align:center;}.trust-signals-hero .trust-heading{font-size:0.95rem;color:#5c6370;text-transform:uppercase;letter-spacing:1px;margin-bottom:1.5rem;}.trust-signals-hero .trust-logos{display:flex;justify-content:center;align-items:center;gap:2rem;flex-wrap:wrap;margin-bottom:1.5rem;}.trust-signals-hero .trust-logo-placeholder{width:120px;height:50px;background:#e9ecef;border-radius:6px;}.trust-signals-hero .trust-badges{display:flex;justify-content:center;gap:1.5rem;flex-wrap:wrap;}.trust-signals-hero .trust-badges .badge{background:#fff;border:1px solid #dee2e6;padding:0.5rem 1rem;border-radius:20px;font-size:0.9rem;color:#495057;}.quote-page-layout{display:grid;grid-template-columns:1fr 350px;gap:2rem;max-width:1100px;margin:0 auto;padding:2rem 0;}@media (max-width:768px){.quote-page-layout{grid-template-columns:1fr;}}.quote-sidebar{position:sticky;top:100px;align-self:start;}.quote-sidebar .testimonial-card{background:#f8f9fa;border-left:4px solid #0d6efd;padding:1.5rem;border-radius:8px;margin-bottom:1.5rem;}.quote-sidebar .testimonial-card blockquote p{font-style:italic;margin-bottom:0.5rem;}.quote-sidebar .what-happens-next{background:#fff;border:1px solid #dee2e6;padding:1.5rem;border-radius:8px;}.quote-sidebar .what-happens-next ol{padding-left:1.2rem;}.quote-sidebar .what-happens-next li{margin-bottom:0.75rem;}.optional{color:#5c6370;font-weight:normal;font-size:0.85em;}.form-group input.error,.form-group select.error{border-color:#dc3545;}.form-buttons{display:flex;gap:1rem;margin-top:1.5rem;}}body{font-size:17px;}.container{max-width:1320px;}.trust-signals-hero .trust-badges .badge{background:linear-gradient(135deg,#7c3aed,#8b5cf6);color:#fff;border:none;padding:0.65rem 1.5rem;font-size:0.95rem;font-weight:600;letter-spacing:0.5px;border-radius:24px;box-shadow:0 2px 8px rgba(20,71,132,0.25);display:inline-flex;align-items:center;gap:0.4rem;}.trust-signals-hero .trust-badges .badge::before{content:'✓';font-weight:700;font-size:0.85rem;}.trust-signals-hero .trust-badges{gap:1.2rem;margin-top:0.5rem;}.trust-signals-hero .trust-heading{margin-bottom:1rem;font-size:1rem;}.service-card{padding:42px;}.service-card p{font-size:1.05rem;line-height:1.75;margin-bottom:22px;}.service-card li{padding:9px 0;font-size:1.02rem;padding-left:24px;line-height:1.55;}.service-card ul{margin-top:8px;}.service-card h3,.service-card h2{font-size:1.4rem;}.hero-stats .stat-label{font-size:1.05rem;}.hero-stats .stat-number{font-size:2.4rem;}.services-grid{grid-template-columns:repeat(3,1fr);}.services-grid .service-card{display:flex;flex-direction:column;}.services-grid .service-card p{flex-shrink:0;}.services-grid .service-card ul{flex-grow:1;}@media (max-width:1100px){.services-grid{grid-template-columns:repeat(2,1fr);}}@media (max-width:700px){.services-grid{grid-template-columns:1fr;}}.values-grid{grid-template-columns:repeat(3,1fr);justify-items:stretch;}@media (max-width:900px){.values-grid{grid-template-columns:repeat(2,1fr);}}@media (max-width:600px){.values-grid{grid-template-columns:1fr;}}.stats-grid{grid-template-columns:repeat(3,1fr);}@media (max-width:768px){.stats-grid{grid-template-columns:repeat(2,1fr);}}.values-grid .value-card{display:flex;flex-direction:column;}.quote-sidebar .testimonial-card{background:#f8f9fa;border-left:4px solid #7c3aed;border-top:none;border-right:none;border-bottom:none;padding:1.5rem;border-radius:8px;margin-bottom:1.5rem;box-shadow:none;}.quote-sidebar .testimonial-card::before{display:none;}.quote-sidebar .testimonial-card blockquote p{font-style:italic;margin-bottom:0.5rem;line-height:1.6;color:#333;}.quote-sidebar .testimonial-card blockquote cite{color:#555;font-size:0.9rem;}.quote-faq-section{grid-column:1 / -1;margin-top:2rem;padding-top:2rem;border-top:1px solid #e0e0e0;}.features-grid{grid-template-columns:repeat(3,1fr);}@media (max-width:1100px){.features-grid{grid-template-columns:repeat(2,1fr);}}@media (max-width:700px){.features-grid{grid-template-columns:1fr;}}.capabilities-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:30px;align-items:stretch;}.capability-card{display:flex;flex-direction:column;height:100%;}.capability-card p{flex-grow:1;}.footer-section p,.footer-section li,.footer-bottom p,.footer-bottom .company-details,.trust-badge-text span{color:#d1d5db;}.footer-section a{color:#93c5fd;}.footer-section a:hover{color:#bfdbfe;}.footer-section h3{color:#f3f4f6;}.footer-bottom p,.footer-bottom .company-details{color:#9ca3af;}.footer-logo img{filter:brightness(1.2);}@media (max-width:768px){body{font-size:16px;}.project-types-hero h1{font-size:1.8rem;line-height:1.3;}.project-types-hero p{font-size:1rem;}.capabilities-grid{grid-template-columns:1fr;}.industry-grid{grid-template-columns:1fr;}.project-category h2{font-size:1.6rem;}.project-category h3{font-size:1.2rem;}.project-description{font-size:1rem;}.footer-content{grid-template-columns:1fr;}.footer-bottom,.footer-bottom .footer-bottom-content{flex-direction:column;gap:15px;text-align:center;}}@media (max-width:480px){.project-types-hero h1{font-size:1.5rem;}.project-types-hero{padding:100px 0 40px;}.project-category{padding:40px 0;}.project-category h2{font-size:1.4rem;}}.tech-tags{display:flex;flex-wrap:wrap;gap:8px;}.article-cta{background:linear-gradient(135deg,#1a3c5e 0%,#2a5f8f 100%);border-radius:12px;margin:2.5rem 0;padding:2rem 2.5rem;}.article-cta .cta-inner{display:flex;align-items:center;justify-content:space-between;gap:2rem;flex-wrap:wrap;}.article-cta .cta-text h3{color:#fff;font-size:1.4rem;margin:0 0 0.5rem;}.article-cta .cta-text p{color:rgba(255,255,255,0.85);font-size:0.95rem;margin:0;max-width:520px;}.article-cta .cta-actions{display:flex;gap:1rem;flex-shrink:0;flex-wrap:wrap;}.cta-btn{display:inline-flex;align-items:center;justify-content:center;padding:0.75rem 1.5rem;border-radius:6px;font-weight:700;font-size:0.95rem;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background 0.2s,border-color 0.2s;line-height:1.2;}.cta-btn-primary{background:#f59e0b;color:#1a1a1a;border:2px solid #f59e0b;}.cta-btn-primary:hover{background:#fbbf24;border-color:#fbbf24;color:#1a1a1a;text-decoration:none;}.cta-btn-outline{background:transparent;color:#ffffff;border:2px solid rgba(255,255,255,0.8);}.cta-btn-outline:hover{background:rgba(255,255,255,0.12);border-color:#ffffff;color:#ffffff;text-decoration:none;}@media (max-width:640px){.article-cta{padding:1.5rem;}.article-cta .cta-inner{flex-direction:column;}.article-cta .cta-actions{width:100%;}.cta-btn{text-align:center;flex:1;width:100%;}}.author-bio{display:flex;gap:20px;padding:24px;background:linear-gradient(135deg,#f8f9fa 0%,#e9ecef 100%);border-radius:12px;margin:40px 0;border-left:4px solid #6d28d9;}.bio-avatar img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:3px solid #6d28d9;}.bio-info{flex:1;}.bio-header{font-size:0.85rem;text-transform:uppercase;letter-spacing:0.5px;color:#7c3aed;margin:0 0 8px 0;font-weight:600;}.bio-name{font-size:1.25rem;font-weight:700;color:#1a1a1a;margin:0 0 4px 0;}.bio-role{font-size:0.95rem;color:#666;margin:0 0 12px 0;font-weight:500;}.bio-description{font-size:0.95rem;color:#444;line-height:1.6;margin:0 0 16px 0;}.bio-expertise{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px;}.expertise-label{font-size:0.85rem;font-weight:600;color:#555;}.expertise-tag{font-size:0.8rem;padding:4px 10px;background:#fff;border:1px solid #ddd;border-radius:16px;color:#555;}.bio-social .linkedin-link{display:inline-flex;align-items:center;gap:6px;color:#0077b5;text-decoration:none;font-size:0.9rem;font-weight:500;transition:color 0.2s;}.bio-social .linkedin-link:hover{color:#005885;text-decoration:underline;}@media (max-width:600px){.author-bio{flex-direction:column;text-align:center;}.bio-avatar{margin:0 auto;}.bio-expertise{justify-content:center;}}.blog-article .author-bio,.blog-article .article-cta,.blog-article .related-articles{max-width:1200px;margin-left:auto;margin-right:auto;box-sizing:border-box;}.section-label{font-size:0.85rem;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#4f46e5;margin-bottom:8px;} \ No newline at end of file diff --git a/assets/images/ukaiautomation-logo-white.svg b/assets/images/ukaiautomation-logo-white.svg new file mode 100644 index 0000000..7c46421 --- /dev/null +++ b/assets/images/ukaiautomation-logo-white.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + UK AI + AUTOMATION + diff --git a/assets/images/ukaiautomation-logo.svg b/assets/images/ukaiautomation-logo.svg new file mode 100644 index 0000000..81874a2 --- /dev/null +++ b/assets/images/ukaiautomation-logo.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UK AI + AUTOMATION + diff --git a/backup-db-commit.sh b/backup-db-commit.sh deleted file mode 100755 index 0767199..0000000 --- a/backup-db-commit.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# Database configuration -DB_USER="root" -DB_PASS="Piglet1969!!" -DB_NAME="ukdataservices" -DB_HOST="localhost" - -# Backup filename with timestamp -BACKUP_FILE="db_backup_$(date +%y%m%d_%H%M%S).sql" - -echo "Starting database backup..." - -# Create database backup -mysqldump -u"$DB_USER" -p"$DB_PASS" -h"$DB_HOST" "$DB_NAME" > "$BACKUP_FILE" - -if [ $? -eq 0 ]; then - echo "Database backup created: $BACKUP_FILE" - - # Add all changes to git - echo "Adding changes to git..." - git add -A - - # Commit with timestamp - COMMIT_MSG="Backup database and code changes - $(date '+%Y-%m-%d %H:%M:%S')" - git commit -m "$COMMIT_MSG" - - if [ $? -eq 0 ]; then - echo "Changes committed successfully!" - echo "Commit message: $COMMIT_MSG" - else - echo "No changes to commit or commit failed" - fi -else - echo "Database backup failed!" - exit 1 -fi - -echo "Script completed." diff --git a/backups/.htaccess.pre-csrf-fix b/backups/.htaccess.pre-csrf-fix deleted file mode 100644 index 8e88e9f..0000000 --- a/backups/.htaccess.pre-csrf-fix +++ /dev/null @@ -1,171 +0,0 @@ -# Security Rules for UK Data Services - -# Protect sensitive files and configs - - Require all denied - - -# Protect contact handlers from direct browser access (POST only) - - - Require all denied - - - - - - Require all denied - - - -# Security headers - - Header always set X-Content-Type-Options "nosniff" - Header always set X-Frame-Options "SAMEORIGIN" - Header always set X-XSS-Protection "1; mode=block" - Header always set Referrer-Policy "strict-origin-when-cross-origin" - - -# Enhanced Gzip compression - - # 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 - -# Prevent access to logs and database directories - - RewriteEngine On - - # Skip already processed .php files - RewriteCond %{REQUEST_FILENAME} -f - RewriteRule ^services/.*\.php$ - [L] - - # Explicitly allow existing service pages (skip redirects) - RewriteRule ^services/competitive-intelligence/?$ /services/competitive-intelligence.php [L] - RewriteRule ^services/data-cleaning/?$ /services/data-cleaning.php [L] - RewriteRule ^services/financial-data-services/?$ /services/financial-data-services.php [L] - RewriteRule ^services/price-monitoring/?$ /services/price-monitoring.php [L] - RewriteRule ^services/property-data-extraction/?$ /services/property-data-extraction.php [L] - RewriteRule ^services/web-scraping/?$ /services/web-scraping.php [L] - - # Redirect /services index to project-types - RewriteRule ^services/?$ /project-types [R=301,L] - - # Redirect unknown service pages to project-types - RewriteRule ^services/(.+)$ /project-types [R=301,L] - - # Clean URL rewriting - remove .php extension - RewriteCond %{REQUEST_FILENAME} !-d - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME}.php -f - RewriteRule ^(.+?)/?$ $1.php [L] - - # Security rules - RewriteRule ^logs(/.*)?$ - [F,L] - RewriteRule ^database(/.*)?$ - [F,L] - RewriteRule ^\.git(/.*)?$ - [F,L] - RewriteRule ^docker(/.*)?$ - [F,L] - - -# Disable server signature -ServerSignature Off \ No newline at end of file diff --git a/blog/articles/5-industries-benefit-most-web-scraping-uk.php b/blog/articles/5-industries-benefit-most-web-scraping-uk.php index ec1563a..c177b92 100644 --- a/blog/articles/5-industries-benefit-most-web-scraping-uk.php +++ b/blog/articles/5-industries-benefit-most-web-scraping-uk.php @@ -8,14 +8,14 @@ header('Strict-Transport-Security: max-age=31536000; includeSubDomains'); header('Referrer-Policy: strict-origin-when-cross-origin'); // SEO and performance optimisations -$page_title = "5 Industries That Benefit Most from Web Scraping in the UK | UK Data Services"; +$page_title = "5 Industries That Benefit Most from Web Scraping in the UK | UK AI Automation"; $page_description = "Discover which UK industries get the biggest competitive advantage from web scraping — from property and e-commerce to energy and financial services."; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/5-industries-benefit-most-web-scraping-uk"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/5-industries-benefit-most-web-scraping-uk"; $keywords = "web scraping industries UK, property data scraping, e-commerce price monitoring UK, financial data scraping, energy price scraping UK"; -$author = "UK Data Services Editorial Team"; +$author = "UK AI Automation Editorial Team"; $published_date = "2026-02-27"; $modified_date = "2026-02-27"; -$og_image = "https://ukdataservices.co.uk/assets/images/blog/industries-web-scraping-uk.png"; +$og_image = "https://ukaiautomation.co.uk/assets/images/blog/industries-web-scraping-uk.png"; ?> @@ -44,7 +44,7 @@ $og_image = "https://ukdataservices.co.uk/assets/images/blog/industries-web-scra - + @@ -74,14 +74,14 @@ $og_image = "https://ukdataservices.co.uk/assets/images/blog/industries-web-scra "image": "", "author": { "@type": "Organization", - "name": "UK Data Services" + "name": "UK AI Automation" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png" + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png" } }, "datePublished": "T09:00:00+00:00", @@ -130,7 +130,7 @@ $og_image = "https://ukdataservices.co.uk/assets/images/blog/industries-web-scra

Learn more about our financial data services.

Learn more about our price monitoring service.

@@ -245,7 +245,7 @@ $og_image = "https://ukdataservices.co.uk/assets/images/blog/industries-web-scra
diff --git a/blog/articles/business-intelligence-consultants-uk-selection-guide.php b/blog/articles/business-intelligence-consultants-uk-selection-guide.php index 7ba6ef3..c9a78f1 100644 --- a/blog/articles/business-intelligence-consultants-uk-selection-guide.php +++ b/blog/articles/business-intelligence-consultants-uk-selection-guide.php @@ -4,12 +4,12 @@ header('Strict-Transport-Security: max-age=31536000; includeSubDomains'); // SEO and performance optimizations -$page_title = "Business Intelligence Consultants UK: How to Choose the Right Partner 2025 | UK Data Services"; +$page_title = "Business Intelligence Consultants UK: How to Choose the Right Partner 2025 | UK AI Automation"; $page_description = "Expert guide to selecting business intelligence consultants in the UK. Compare providers, understand pricing, ROI expectations, and implementation best practices for BI success."; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/business-intelligence-consultants-uk-selection-guide"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/business-intelligence-consultants-uk-selection-guide"; $keywords = "business intelligence consultants UK, BI consultants, data warehouse consultants, business intelligence firms, BI implementation services"; -$author = "UK Data Services Editorial Team"; -$og_image = "https://ukdataservices.co.uk/assets/images/blog/business-intelligence-consultants-uk.png"; +$author = "UK AI Automation Editorial Team"; +$og_image = "https://ukaiautomation.co.uk/assets/images/blog/business-intelligence-consultants-uk.png"; $published_date = "2025-08-08"; $modified_date = "2025-08-08"; ?> @@ -71,14 +71,14 @@ $modified_date = "2025-08-08"; "image": "", "author": { "@type": "Organization", - "name": "UK Data Services" + "name": "UK AI Automation" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png" + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png" } }, "datePublished": "T09:00:00+00:00", @@ -126,7 +126,7 @@ $modified_date = "2025-08-08";

Business Intelligence Consultants UK: How to Choose the Right Partner

Master the selection process with our comprehensive guide to choosing BI consultants. Learn evaluation criteria, ROI expectations, and implementation best practices.

diff --git a/blog/articles/business-intelligence-dashboard-design.php b/blog/articles/business-intelligence-dashboard-design.php index cf8aab7..c97096c 100644 --- a/blog/articles/business-intelligence-dashboard-design.php +++ b/blog/articles/business-intelligence-dashboard-design.php @@ -7,10 +7,10 @@ $article_title = "BI Dashboard Design: 2025 UX Best Practices"; $article_description = "How to design effective business intelligence dashboards that turn complex data into clear decisions. Practical guide for UK data teams."; $article_keywords = "business intelligence dashboard, BI dashboard design, data visualisation, dashboard UX, analytics dashboard, KPI dashboard"; $article_author = "David Martinez"; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/business-intelligence-dashboard-design.php"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/business-intelligence-dashboard-design.php"; $article_published = "2025-06-08T09:00:00+00:00"; $article_modified = "2025-06-08T14:30:00+00:00"; -$og_image = "https://ukdataservices.co.uk/assets/images/ukds-social-card.png"; +$og_image = "https://ukaiautomation.co.uk/assets/images/ukds-social-card.png"; $read_time = 12; ?> @@ -18,7 +18,7 @@ $read_time = 12; - <?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + <?php echo htmlspecialchars($article_title); ?> | UK AI Automation Blog @@ -80,14 +80,14 @@ $read_time = 12; "author": { "@type": "Organization", "name": "", - "url": "https://ukdataservices.co.uk" + "url": "https://ukaiautomation.co.uk" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png", + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png", "width": 300, "height": 100 } @@ -1220,9 +1220,9 @@ $read_time = 12; @@ -406,9 +406,9 @@ END;
diff --git a/blog/articles/predictive-analytics-customer-churn.php b/blog/articles/predictive-analytics-customer-churn.php index f0cb265..ea86ff2 100644 --- a/blog/articles/predictive-analytics-customer-churn.php +++ b/blog/articles/predictive-analytics-customer-churn.php @@ -7,10 +7,10 @@ $article_title = "Customer Churn Prediction Guide | Predictive Analytics for UK $article_description = "How to predict and reduce customer churn using predictive analytics. Covers ML models, key indicators, retention strategies and real-world results for UK businesses."; $article_keywords = "customer churn prediction, predictive analytics, machine learning, customer retention, churn model, data science"; $article_author = "David Martinez"; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/predictive-analytics-customer-churn.php"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/predictive-analytics-customer-churn.php"; $article_published = "2025-06-08T10:30:00+00:00"; $article_modified = "2025-06-08T15:45:00+00:00"; -$og_image = "https://ukdataservices.co.uk/assets/images/ukds-social-card.png"; +$og_image = "https://ukaiautomation.co.uk/assets/images/ukds-social-card.png"; $read_time = 14; ?> @@ -18,7 +18,7 @@ $read_time = 14; - <?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + <?php echo htmlspecialchars($article_title); ?> | UK AI Automation Blog @@ -80,14 +80,14 @@ $read_time = 14; "author": { "@type": "Organization", "name": "", - "url": "https://ukdataservices.co.uk" + "url": "https://ukaiautomation.co.uk" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png", + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png", "width": 300, "height": 100 } @@ -198,7 +198,7 @@ $read_time = 14;

🎯 Need Help Building Your Churn Model?

We have built ML-powered churn prediction systems for 50+ B2B SaaS companies. Our models typically identify at-risk customers 90 days before they churn.

- Get a Free 30-Minute Consultation or Try Our Cost Calculator → + Get a Free 30-Minute Consultation or Try Our Cost Calculator →

Churn Rate Benchmarks by Industry

@@ -1614,9 +1614,9 @@ $read_time = 14; diff --git a/blog/articles/python-data-pipeline-tools-2025.php b/blog/articles/python-data-pipeline-tools-2025.php index 6cae045..55ff1f6 100644 --- a/blog/articles/python-data-pipeline-tools-2025.php +++ b/blog/articles/python-data-pipeline-tools-2025.php @@ -28,7 +28,7 @@ $breadcrumbs = [ - <?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + <?php echo htmlspecialchars($article_title); ?> | UK AI Automation Blog @@ -36,8 +36,8 @@ $breadcrumbs = [ - - + + @@ -45,9 +45,9 @@ $breadcrumbs = [ - + - + @@ -62,7 +62,7 @@ $breadcrumbs = [ "@type": "BlogPosting", "headline": "", "description": "", - "image": "https://ukdataservices.co.uk", + "image": "https://ukaiautomation.co.uk", "datePublished": "T09:00:00+00:00", "dateModified": "T09:00:00+00:00", "author": { @@ -71,15 +71,15 @@ $breadcrumbs = [ }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/logo.svg" + "url": "https://ukaiautomation.co.uk/assets/images/logo.svg" } }, "mainEntityOfPage": { "@type": "WebPage", - "@id": "https://ukdataservices.co.uk/blog/articles/" + "@id": "https://ukaiautomation.co.uk/blog/articles/" }, "keywords": "" } @@ -103,7 +103,7 @@ $breadcrumbs = [

Why Your Orchestrator Choice Matters

-

The right data pipeline tool is the engine of modern data operations. At UK Data Services, we build robust data solutions for our clients, often integrating these powerful orchestrators with our custom web scraping services. An efficient pipeline ensures the timely delivery of accurate, mission-critical data, directly impacting your ability to make informed decisions. This comparison is born from our hands-on experience delivering enterprise-grade data projects for UK businesses.

+

The right data pipeline tool is the engine of modern data operations. At UK AI Automation, we build robust data solutions for our clients, often integrating these powerful orchestrators with our custom web scraping services. An efficient pipeline ensures the timely delivery of accurate, mission-critical data, directly impacting your ability to make informed decisions. This comparison is born from our hands-on experience delivering enterprise-grade data projects for UK businesses.

At a Glance: 2026 Orchestrator Comparison

@@ -188,7 +188,7 @@ $breadcrumbs = [

How do I choose the right data pipeline tool?

-

Consider factors like: 1) Team skills (Python, K8s), 2) Workflow type (static ETL vs. dynamic), 3) Scalability needs, and 4) Observability requirements. If you need expert guidance, contact UK Data Services for a consultation on your data architecture.

+

Consider factors like: 1) Team skills (Python, K8s), 2) Workflow type (static ETL vs. dynamic), 3) Scalability needs, and 4) Observability requirements. If you need expert guidance, contact UK AI Automation for a consultation on your data architecture.

lity, and operational efficiency.

@@ -460,7 +460,7 @@ $breadcrumbs = [

Expert Data Pipeline Implementation

-

Choosing and implementing the right data pipeline tools requires deep understanding of both technology capabilities and business requirements. UK Data Services provides comprehensive consulting services for data pipeline architecture, tool selection, and implementation to help organisations build robust, scalable data infrastructure.

+

Choosing and implementing the right data pipeline tools requires deep understanding of both technology capabilities and business requirements. UK AI Automation provides comprehensive consulting services for data pipeline architecture, tool selection, and implementation to help organisations build robust, scalable data infrastructure.

Get Pipeline Consultation
diff --git a/blog/articles/python-scrapy-enterprise-guide.php b/blog/articles/python-scrapy-enterprise-guide.php index b04541a..ca2ba4f 100644 --- a/blog/articles/python-scrapy-enterprise-guide.php +++ b/blog/articles/python-scrapy-enterprise-guide.php @@ -7,10 +7,10 @@ $article_title = "Python Scrapy Enterprise Guide: Scaling Web Scraping Operation $article_description = "Master Scrapy for enterprise-scale web scraping operations. Learn advanced techniques, best practices, and optimization strategies for production deployments."; $article_keywords = "Python Scrapy enterprise, web scraping framework, Scrapy best practices, enterprise web scraping, Python data extraction, Scrapy optimization"; $article_author = "Michael Thompson"; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/python-scrapy-enterprise-guide"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/python-scrapy-enterprise-guide"; $article_published = "2025-05-15T09:00:00+00:00"; $article_modified = "2025-05-15T09:00:00+00:00"; -$og_image = "https://ukdataservices.co.uk/assets/images/ukds-social-card.png"; +$og_image = "https://ukaiautomation.co.uk/assets/images/ukds-social-card.png"; $read_time = 12; ?> @@ -18,7 +18,7 @@ $read_time = 12; - <?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + <?php echo htmlspecialchars($article_title); ?> | UK AI Automation Blog @@ -76,15 +76,15 @@ $read_time = 12; "image": "", "author": { "@type": "Organization", - "name": "UK Data Services", - "url": "https://ukdataservices.co.uk" + "name": "UK AI Automation", + "url": "https://ukaiautomation.co.uk" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png" + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png" } }, "datePublished": "", @@ -689,7 +689,7 @@ spec:

Scale Your Scrapy Operations

-

UK Data Services provides enterprise Scrapy development and deployment services. Let our experts help you build robust, scalable web scraping solutions.

+

UK AI Automation provides enterprise Scrapy development and deployment services. Let our experts help you build robust, scalable web scraping solutions.

Get Scrapy Consultation
@@ -724,9 +724,9 @@ spec: diff --git a/blog/articles/real-time-analytics-streaming.php b/blog/articles/real-time-analytics-streaming.php index d9dacf5..76d81bc 100644 --- a/blog/articles/real-time-analytics-streaming.php +++ b/blog/articles/real-time-analytics-streaming.php @@ -1,4 +1,4 @@ @@ -71,14 +71,14 @@ $modified_date = "2025-08-08"; "image": "", "author": { "@type": "Organization", - "name": "UK Data Services" + "name": "UK AI Automation" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png" + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png" } }, "datePublished": "T09:00:00+00:00", @@ -126,7 +126,7 @@ $modified_date = "2025-08-08";

Real-Time Data Extraction: Technical Guide for UK Businesses

Master the technologies, architectures, and best practices for implementing real-time data extraction systems that deliver instant insights and competitive advantage.

diff --git a/blog/articles/retail-competitor-monitoring-case.php b/blog/articles/retail-competitor-monitoring-case.php index 0e2de31..e0e23fe 100644 --- a/blog/articles/retail-competitor-monitoring-case.php +++ b/blog/articles/retail-competitor-monitoring-case.php @@ -7,10 +7,10 @@ $article_title = "Retail Competitor Monitoring: How UK Fashion Brand Increased R $article_description = "Discover how a leading UK fashion retailer used automated competitor monitoring to optimise pricing strategy and increase revenue by 28% in six months."; $article_keywords = "retail competitor monitoring, pricing strategy, fashion retail case study, competitive intelligence, UK retail success"; $article_author = "David Martinez"; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/retail-competitor-monitoring-case"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/retail-competitor-monitoring-case"; $article_published = "2025-05-30T09:00:00+00:00"; $article_modified = "2025-05-30T09:00:00+00:00"; -$og_image = "https://ukdataservices.co.uk/assets/images/ukds-social-card.png"; +$og_image = "https://ukaiautomation.co.uk/assets/images/ukds-social-card.png"; $read_time = 9; ?> @@ -18,7 +18,7 @@ $read_time = 9; - <?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + <?php echo htmlspecialchars($article_title); ?> | UK AI Automation Blog @@ -234,12 +234,12 @@ $read_time = 9;
@@ -252,7 +252,7 @@ $read_time = 9; border-radius: 12px; padding: 2rem; margin: 2rem 0; - border-left: 5px solid #179e83; + border-left: 5px solid #6d28d9; } .stats-grid { @@ -272,7 +272,7 @@ $read_time = 9; .stat-item h3 { font-size: 2.5rem; - color: #179e83; + color: #6d28d9; margin: 0 0 0.5rem 0; font-weight: bold; } diff --git a/blog/articles/retail-price-monitoring-strategies.php b/blog/articles/retail-price-monitoring-strategies.php index 00bb453..ca498b8 100644 --- a/blog/articles/retail-price-monitoring-strategies.php +++ b/blog/articles/retail-price-monitoring-strategies.php @@ -7,10 +7,10 @@ $article_title = "Advanced Price Monitoring Strategies for UK Retailers"; $article_description = "Discover how leading British retailers leverage automated price monitoring to maintain competitive advantage and optimise pricing strategies in 2025."; $article_keywords = "retail price monitoring UK, competitive pricing strategy, price tracking automation, UK retail analytics, pricing intelligence, ecommerce price monitoring"; $article_author = "David Martinez"; -$canonical_url = "https://ukdataservices.co.uk/blog/articles/retail-price-monitoring-strategies"; +$canonical_url = "https://ukaiautomation.co.uk/blog/articles/retail-price-monitoring-strategies"; $article_published = "2025-06-03T09:00:00+00:00"; $article_modified = "2025-06-03T09:00:00+00:00"; -$og_image = "https://ukdataservices.co.uk/assets/images/ukds-social-card.png"; +$og_image = "https://ukaiautomation.co.uk/assets/images/ukds-social-card.png"; $read_time = 10; ?> @@ -18,7 +18,7 @@ $read_time = 10; - <?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + <?php echo htmlspecialchars($article_title); ?> | UK AI Automation Blog @@ -76,15 +76,15 @@ $read_time = 10; "image": "", "author": { "@type": "Organization", - "name": "UK Data Services", - "url": "https://ukdataservices.co.uk" + "name": "UK AI Automation", + "url": "https://ukaiautomation.co.uk" }, "publisher": { "@type": "Organization", - "name": "UK Data Services", + "name": "UK AI Automation", "logo": { "@type": "ImageObject", - "url": "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png" + "url": "https://ukaiautomation.co.uk/assets/images/ukds-main-logo.png" } }, "datePublished": "", @@ -242,7 +242,7 @@ $read_time = 10;

Ready to Transform Your Pricing Strategy?

-

UK Data Services provides comprehensive price monitoring solutions tailored to British retailers. Our advanced systems track competitor prices across all major UK marketplaces and retailer websites.

+

UK AI Automation provides comprehensive price monitoring solutions tailored to British retailers. Our advanced systems track competitor prices across all major UK marketplaces and retailer websites.

Request a Consultation
@@ -277,9 +277,9 @@ $read_time = 10;