HEX
Server: nginx/1.24.0
System: Linux 0c1023d6c65e 6.8.0-137-generic #137-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 17 20:28:23 UTC 2026 x86_64
User: root (0)
PHP: 8.3.33
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/mu-plugins/ethnic-docker-containerization-services-page.php
<?php
/**
 * Plugin Name: Ethnic Docker Containerization Services Page
 * Description: Creates and renders the Docker Containerization Services sub-service page under DevOps Services.
 * Version: 1.0.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ( ! function_exists( 'ethnic_docker_containerization_page_parent_id' ) ) {
	function ethnic_docker_containerization_page_parent_id() {
		static $parent_id = null;

		if ( null !== $parent_id ) {
			return $parent_id;
		}

		$page = function_exists( 'ethnic_devops_services_page_get_target_page' )
			? ethnic_devops_services_page_get_target_page()
			: get_page_by_path( 'services/devops-services' );

		if ( $page instanceof WP_Post ) {
			$parent_id = (int) $page->ID;
		} else {
			$fallback  = get_page_by_path( 'devops-services' );
			$parent_id = $fallback instanceof WP_Post ? (int) $fallback->ID : 0;
		}

		return $parent_id;
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_get_target_page' ) ) {
	function ethnic_docker_containerization_page_get_target_page() {
		static $page = false;

		if ( false !== $page ) {
			return $page instanceof WP_Post ? $page : null;
		}

		$page = get_page_by_path( 'services/devops-services/docker-containerization-services' );

		if ( ! ( $page instanceof WP_Post ) ) {
			$fallback = get_page_by_path( 'docker-containerization-services' );

			if ( $fallback instanceof WP_Post && (int) $fallback->post_parent === ethnic_docker_containerization_page_parent_id() ) {
				$page = $fallback;
			}
		}

		return $page instanceof WP_Post ? $page : null;
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_ensure_page' ) ) {
	function ethnic_docker_containerization_page_ensure_page() {
		static $did_run = false;

		if ( $did_run ) {
			return;
		}

		$did_run   = true;
		$parent_id = ethnic_docker_containerization_page_parent_id();

		if ( ! $parent_id ) {
			return;
		}

		$postarr = array(
			'post_type'      => 'page',
			'post_title'     => 'Docker Containerization Services',
			'post_name'      => 'docker-containerization-services',
			'post_parent'    => $parent_id,
			'post_status'    => 'publish',
			'post_content'   => '',
			'comment_status' => 'closed',
			'ping_status'    => 'closed',
		);

		$page = get_page_by_path( 'services/devops-services/docker-containerization-services' );

		if ( $page instanceof WP_Post ) {
			$needs_update = 'Docker Containerization Services' !== $page->post_title
				|| (int) $page->post_parent !== $parent_id
				|| 'publish' !== $page->post_status;

			if ( $needs_update ) {
				wp_update_post(
					array_merge(
						$postarr,
						array(
							'ID' => (int) $page->ID,
						)
					)
				);
				clean_post_cache( (int) $page->ID );
			}

			return;
		}

		$fallback = get_page_by_path( 'docker-containerization-services' );

		if ( $fallback instanceof WP_Post ) {
			wp_update_post(
				array_merge(
					$postarr,
					array(
						'ID' => (int) $fallback->ID,
					)
				)
			);
			clean_post_cache( (int) $fallback->ID );
			return;
		}

		wp_insert_post( $postarr );
	}

	add_action( 'init', 'ethnic_docker_containerization_page_ensure_page', 5 );
}

if ( ! function_exists( 'ethnic_docker_containerization_page_is_target' ) ) {
	function ethnic_docker_containerization_page_is_target() {
		if ( is_admin() ) {
			return false;
		}

		$page = ethnic_docker_containerization_page_get_target_page();

		if ( ! ( $page instanceof WP_Post ) ) {
			return false;
		}

		return (int) get_queried_object_id() === (int) $page->ID || is_page( (int) $page->ID );
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_url' ) ) {
	function ethnic_docker_containerization_page_url( $path ) {
		return home_url( '/' . ltrim( (string) $path, '/' ) . '/' );
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_contact_url' ) ) {
	function ethnic_docker_containerization_page_contact_url( $args = array() ) {
		return ethnic_consultation_route_contact_url( $args, ethnic_docker_containerization_page_url( 'contact-us' ) );
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_parent_url' ) ) {
	function ethnic_docker_containerization_page_parent_url() {
		$parent_id = ethnic_docker_containerization_page_parent_id();

		if ( $parent_id ) {
			$permalink = get_permalink( $parent_id );

			if ( $permalink ) {
				return $permalink;
			}
		}

		return ethnic_docker_containerization_page_url( 'services/devops-services' );
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_data' ) ) {
	function ethnic_docker_containerization_page_data() {
		static $data = null;

		if ( null !== $data ) {
			return $data;
		}

		$data = array(
			'metaTitle'       => 'Docker Containerization Services | Application Packaging & Environment Consistency',
			'metaDescription' => 'Looking for Docker containerization services? We help businesses package applications, improve environment consistency, support modernization, and create more reliable delivery workflows.',
			'heroTitle'       => 'Docker Containerization Services',
			'heroText'        => 'We help businesses package applications more reliably, standardize environments, improve deployment consistency, and modernize delivery workflows with practical Docker containerization services built around operational use.',
			'heroPoints'      => array(
				'Reliable application packaging',
				'Consistent environments across development and production',
				'Container-based modernization and delivery improvement',
			),
			'overviewParagraphs' => array(
				'Our Docker containerization services support startups, SMBs, and enterprise teams that need a more dependable way to package applications, improve release consistency, and prepare systems for modern infrastructure workflows.',
				'That includes practical help with containerizing existing applications, shaping container-first delivery for newer builds, and creating clearer operational foundations for portability, repeatable deployment, and long-term maintainability.',
				'From assessment and implementation through optimization and ongoing operational use, we focus on containerization services that help teams ship with more confidence instead of adding unnecessary infrastructure complexity.',
			),
			'overviewFeatures' => array(
				array(
					'icon'  => 'package',
					'title' => 'Reliable Application Packaging',
					'copy'  => 'Package code, dependencies, and runtime requirements into cleaner Docker images that are easier to move, review, and release.',
				),
				array(
					'icon'  => 'compare',
					'title' => 'Consistent Runtime Environments',
					'copy'  => 'Reduce drift between local, QA, staging, and production so teams can work from a more standardized operating model.',
				),
				array(
					'icon'  => 'pipeline',
					'title' => 'Modern Delivery Foundations',
					'copy'  => 'Support CI/CD readiness, delivery repeatability, and container-based workflows that make releases easier to trust.',
				),
				array(
					'icon'  => 'modernize',
					'title' => 'Practical Container Adoption',
					'copy'  => 'Adopt Docker in a measured way that supports modernization, portability, and operational reliability without overengineering.',
				),
			),
			'whyParagraphs' => array(
				'Containerization helps standardize how applications run across environments. Instead of relying on machine-by-machine setup differences, teams can move toward a clearer runtime definition that is easier to test, share, and deploy.',
				'For businesses adopting modern DevOps workflows, Docker containerization services often become a foundational step because they improve portability, reduce environment mismatch, and support more predictable release behavior across development, QA, staging, and production.',
			),
			'whyChecklist' => array(
				'Standardized runtime behavior across environments',
				'Clearer alignment between development, QA, staging, and production',
				'Stronger release confidence and fewer environment-driven surprises',
			),
			'whyHighlights' => array(
				array(
					'icon'  => 'deploy',
					'title' => 'More Predictable Deployments',
					'copy'  => 'Container-based releases help make deployment steps more repeatable and easier to validate before production changes go live.',
				),
				array(
					'icon'  => 'container',
					'title' => 'Better Portability Across Environments',
					'copy'  => 'Portable Docker images make it easier to move workloads between machines, stages, and hosting setups with less friction.',
				),
				array(
					'icon'  => 'compare',
					'title' => 'Reduced Environment Mismatch',
					'copy'  => 'Teams spend less time chasing machine-specific differences when applications run from a more consistent container setup.',
				),
				array(
					'icon'  => 'chart',
					'title' => 'Stronger Delivery Consistency',
					'copy'  => 'Standardized packaging and runtime behavior create a cleaner base for repeatable release workflows and operational control.',
				),
				array(
					'icon'  => 'workflow',
					'title' => 'Foundation for Modern DevOps Workflows',
					'copy'  => 'Containerization supports the next layer of maturity around automation, CI/CD, hosting flexibility, and orchestration readiness.',
				),
			),
			'packagingParagraphs' => array(
				'Docker can package applications and their dependencies into portable containers, making setup, deployment, and delivery easier to manage across teams and environments.',
				'Our application packaging work is shaped around maintainability and operational use, whether the goal is containerizing a new service, modernizing an older system, or preparing multi-service applications for cleaner release workflows.',
			),
			'packagingAreas' => array(
				array(
					'icon'  => 'package',
					'title' => 'Web Application Containerization',
					'copy'  => 'Package web applications into delivery-ready containers with cleaner setup, dependency handling, and release structure.',
				),
				array(
					'icon'  => 'runtime',
					'title' => 'API and Backend Service Packaging',
					'copy'  => 'Containerize APIs and backend services so runtime behavior is easier to standardize across testing and production workflows.',
				),
				array(
					'icon'  => 'container',
					'title' => 'Multi-Service Application Support',
					'copy'  => 'Support applications that depend on multiple services with clearer container boundaries and more practical delivery organization.',
				),
				array(
					'icon'  => 'dependency',
					'title' => 'Dependency and Runtime Packaging',
					'copy'  => 'Bring application dependencies and runtime requirements into a more portable packaging model that reduces setup friction.',
				),
				array(
					'icon'  => 'pipeline',
					'title' => 'Delivery-Ready Container Setup',
					'copy'  => 'Prepare Docker images and supporting workflows so containers fit naturally into build, validation, and deployment pipelines.',
				),
				array(
					'icon'  => 'toolbox',
					'title' => 'Container Structure for Maintainability',
					'copy'  => 'Keep containerization work understandable and supportable with cleaner image structure, naming, and ongoing operational use in mind.',
				),
			),
			'consistencyParagraphs' => array(
				'One of the biggest benefits of Docker is reducing works-on-my-machine style problems. Containerization helps teams move toward more consistent development, testing, staging, and production behavior by packaging the runtime more clearly.',
				'That kind of environment consistency improves collaboration, reduces deployment friction, and supports more reliable releases for both growing engineering teams and businesses that need stronger operational stability.',
			),
			'consistencyWithout' => array(
				'Inconsistent setup across machines',
				'Dependency mismatch between environments',
				'Release friction during deployment',
				'Harder onboarding for new contributors',
			),
			'consistencyWith' => array(
				'Standardized runtime behavior',
				'Clearer deployment process',
				'Better testing consistency',
				'Smoother team collaboration',
			),
			'modernizationParagraphs' => array(
				'Containerization can help modernize legacy or traditionally deployed applications without forcing every team into unnecessary complexity on day one. Docker often becomes a practical first step because it improves packaging discipline, release structure, and infrastructure flexibility.',
				'Our Docker modernization support can prepare applications for CI/CD, scalable hosting, orchestration readiness, and more structured environment management while helping businesses improve delivery maturity over time.',
			),
			'modernizationPath' => array(
				array(
					'title' => 'Assess the Current Delivery Model',
					'copy'  => 'Review deployment steps, hosting dependencies, environment drift, and operational pain points before containerizing the application.',
				),
				array(
					'title' => 'Package and Standardize',
					'copy'  => 'Create Docker-based packaging that improves portability, clarity, and consistency across the environments the business depends on.',
				),
				array(
					'title' => 'Prepare for Modern Workflows',
					'copy'  => 'Align containerized applications with CI/CD, cleaner validation, scalable hosting, and better operational structure where it adds value.',
				),
			),
			'modernizationThemes' => array(
				array(
					'icon'  => 'modernize',
					'title' => 'Legacy Application Modernization Support',
					'copy'  => 'Containerization helps older deployment models move toward a cleaner, more portable delivery foundation.',
				),
				array(
					'icon'  => 'pipeline',
					'title' => 'Better Deployment Workflows',
					'copy'  => 'Docker packaging can simplify how applications move through build, validation, and release workflows.',
				),
				array(
					'icon'  => 'cloud',
					'title' => 'Cloud-Readiness Improvement',
					'copy'  => 'Container-based packaging supports infrastructure flexibility and easier movement toward modern hosting patterns.',
				),
				array(
					'icon'  => 'workflow',
					'title' => 'CI/CD Enablement Support',
					'copy'  => 'Standardized container workflows give automation pipelines a cleaner and more predictable application artifact to work with.',
				),
				array(
					'icon'  => 'toolbox',
					'title' => 'Cleaner Operational Structure',
					'copy'  => 'Containerization can bring more clarity to runtime requirements, deployment steps, and environment management practices.',
				),
				array(
					'icon'  => 'server',
					'title' => 'Scalable Infrastructure Alignment',
					'copy'  => 'Docker images create a better bridge toward scalable infrastructure decisions as application delivery matures.',
				),
			),
			'ctaTitle'      => 'Looking for Docker Containerization Services?',
			'ctaText'       => 'Talk with us about application packaging, environment consistency challenges, Docker adoption, modernization goals, or container-based delivery improvements that support more reliable releases.',
			'ctaHighlights' => array(
				'Docker containerization services shaped around practical delivery and operational reliability goals',
				'Support for application packaging, environment consistency, and Docker modernization without unnecessary complexity',
				'Clear next steps for container adoption, release improvement, and long-term delivery readiness',
			),
			'ctaSteps'      => array(
				array(
					'title' => 'Review the application and environment challenges',
					'copy'  => 'Share where packaging, setup drift, deployment friction, or modernization pressure is slowing delivery.',
				),
				array(
					'title' => 'Define the right containerization path',
					'copy'  => 'We help map the Docker containerization services, packaging priorities, and rollout approach that fit your delivery model.',
				),
				array(
					'title' => 'Plan implementation and operational use',
					'copy'  => 'Leave with clearer direction for application packaging, environment consistency, and container-based workflow improvement.',
				),
			),
		);

		return $data;
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_heading' ) ) {
	function ethnic_docker_containerization_page_heading( $eyebrow, $title, $copy = '' ) {
		ob_start();
		?>
		<div class="ethnic-docker-heading">
			<?php if ( $eyebrow ) : ?>
				<p class="ethnic-docker-heading__eyebrow"><?php echo esc_html( $eyebrow ); ?></p>
			<?php endif; ?>
			<h2 class="ethnic-docker-heading__title"><?php echo esc_html( $title ); ?></h2>
			<?php if ( $copy ) : ?>
				<p class="ethnic-docker-heading__copy"><?php echo esc_html( $copy ); ?></p>
			<?php endif; ?>
		</div>
		<?php

		return ob_get_clean();
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_icon' ) ) {
	function ethnic_docker_containerization_page_icon( $icon ) {
		ob_start();

		switch ( $icon ) {
			case 'package':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<path d="m12 3.8 7.2 3.7v9L12 20.2l-7.2-3.7v-9Z" />
					<path d="M12 3.8v8.9" />
					<path d="m4.8 7.5 7.2 3.7 7.2-3.7" />
				</svg>
				<?php
				break;

			case 'container':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<rect x="4.2" y="6" width="6.2" height="4.4" rx="1" />
					<rect x="11" y="6" width="6.2" height="4.4" rx="1" />
					<rect x="7.6" y="13.4" width="8.8" height="4.4" rx="1" />
					<path d="M10.4 8.2H11" />
					<path d="M12 10.4v3" />
				</svg>
				<?php
				break;

			case 'runtime':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<rect x="4.2" y="5.2" width="15.6" height="13.6" rx="2" />
					<path d="M8 9.2h8" />
					<path d="M8 13h4.8" />
					<circle cx="16.1" cy="13.2" r="1.6" />
				</svg>
				<?php
				break;

			case 'pipeline':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<circle cx="6.2" cy="12" r="2" />
					<circle cx="12" cy="12" r="2" />
					<circle cx="17.8" cy="12" r="2" />
					<path d="M8.2 12H10" />
					<path d="M14 12h1.8" />
				</svg>
				<?php
				break;

			case 'compare':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<rect x="4" y="6" width="6.5" height="12" rx="1.5" />
					<rect x="13.5" y="6" width="6.5" height="12" rx="1.5" />
					<path d="M10.5 12h3" />
				</svg>
				<?php
				break;

			case 'dependency':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<circle cx="7" cy="7" r="2.1" />
					<circle cx="17" cy="7" r="2.1" />
					<circle cx="12" cy="17" r="2.1" />
					<path d="M8.8 8.2 10.8 15" />
					<path d="M15.2 8.2 13.2 15" />
					<path d="M9.2 7h5.6" />
				</svg>
				<?php
				break;

			case 'modernize':
				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<rect x="4.5" y="11" width="8" height="8" rx="1.6" />
					<path d="M12.6 11.4 19.2 4.8" />
					<path d="M14.6 4.8h4.6v4.6" />
				</svg>
				<?php
				break;

			default:
				if ( function_exists( 'ethnic_devops_services_page_icon' ) ) {
					ob_end_clean();
					return ethnic_devops_services_page_icon( $icon );
				}

				?>
				<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
					<circle cx="12" cy="12" r="8.5" />
					<path d="M8.6 12.3 10.8 14.5 15.4 9.9" />
				</svg>
				<?php
				break;
		}

		return ob_get_clean();
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_has_supplemental_content' ) ) {
	function ethnic_docker_containerization_page_has_supplemental_content( $content ) {
		if ( ! is_string( $content ) && ! is_numeric( $content ) ) {
			return false;
		}

		$content = (string) $content;

		if ( '' === trim( $content ) ) {
			return false;
		}

		$text_content = wp_strip_all_tags( html_entity_decode( $content, ENT_QUOTES, get_bloginfo( 'charset' ) ) );
		$text_content = preg_replace( '/(?:\x{00A0}|&nbsp;|&#160;|\s)+/u', '', (string) $text_content );

		if ( '' !== trim( (string) $text_content ) ) {
			return true;
		}

		foreach ( array( '<img', '<iframe', '<video', '<figure', 'elementor' ) as $needle ) {
			if ( false !== stripos( $content, $needle ) ) {
				return true;
			}
		}

		return false;
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_render' ) ) {
	function ethnic_docker_containerization_page_render( $extra_content = '' ) {
		$data             = ethnic_docker_containerization_page_data();
		$consultation_url = ethnic_docker_containerization_page_contact_url(
			array(
				'intent'  => 'consultation',
				'service' => 'docker-containerization-services',
			)
		);
		$team_url         = ethnic_docker_containerization_page_contact_url(
			array(
				'intent'  => 'team',
				'service' => 'docker-containerization-services',
			)
		);
		$quote_url        = ethnic_docker_containerization_page_contact_url(
			array(
				'intent'  => 'quote',
				'service' => 'docker-containerization-services',
			)
		);
		$parent_url       = ethnic_docker_containerization_page_parent_url();
		$has_extra_content = ethnic_docker_containerization_page_has_supplemental_content( $extra_content );
		$case_studies      = function_exists( 'ethnic_shared_service_case_studies' )
			? ethnic_shared_service_case_studies( array(), 3 )
			: array();

		ob_start();
		?>
		<div class="ethnic-docker-page">
			<section class="ethnic-docker-section ethnic-docker-section--hero">
				<div class="ethnic-docker-shell">
					<div class="ethnic-docker-hero">
						<div class="ethnic-docker-hero__copy">
							<p class="ethnic-docker-breadcrumb">
								<a href="<?php echo esc_url( $parent_url ); ?>">DevOps Services</a>
								<span>/</span>
								<span>Docker Containerization</span>
							</p>
							<p class="ethnic-docker-kicker">Container Delivery Foundations</p>
							<h1 class="ethnic-docker-hero__title"><?php echo esc_html( $data['heroTitle'] ); ?></h1>
							<p class="ethnic-docker-hero__lead"><?php echo esc_html( $data['heroText'] ); ?></p>
							<div class="ethnic-docker-actions">
								<a class="ethnic-docker-button ethnic-docker-button--primary" href="<?php echo esc_url( $consultation_url ); ?>">Book a Free Consultation</a>
								<a class="ethnic-docker-button ethnic-docker-button--secondary" href="<?php echo esc_url( $team_url ); ?>">Talk to Our Team</a>
							</div>
							<ul class="ethnic-docker-hero__points" aria-label="Docker containerization highlights">
								<?php foreach ( (array) $data['heroPoints'] as $point ) : ?>
									<li><?php echo esc_html( $point ); ?></li>
								<?php endforeach; ?>
							</ul>
						</div>

						<div class="ethnic-docker-hero__visual" aria-hidden="true">
							<div class="ethnic-docker-visual">
								<div class="ethnic-docker-visual__window">
									<div class="ethnic-docker-visual__window-bar">
										<span></span>
										<span></span>
										<span></span>
									</div>
									<div class="ethnic-docker-visual__window-body">
										<div class="ethnic-docker-visual__nav">
											<span>Dockerfile</span>
											<span>Image Build</span>
											<span>Runtime</span>
										</div>
										<div class="ethnic-docker-visual__hero-card">
											<div class="ethnic-docker-visual__product-shot ethnic-docker-visual__product-shot--docker">
												<div class="ethnic-docker-stack">
													<div class="ethnic-docker-stack__layer">
														<span>Application Code</span>
														<small>Layer 01</small>
													</div>
													<div class="ethnic-docker-stack__layer">
														<span>Dependencies</span>
														<small>Layer 02</small>
													</div>
													<div class="ethnic-docker-stack__layer">
														<span>Runtime Setup</span>
														<small>Layer 03</small>
													</div>
													<div class="ethnic-docker-stack__flow">
														<span>Build</span>
														<span>Package</span>
														<span>Release</span>
													</div>
												</div>
											</div>
											<div class="ethnic-docker-visual__product-copy">
												<span class="ethnic-docker-visual__eyebrow">Container packaging mockup</span>
												<strong>Package once, validate clearly, and move toward more dependable delivery across environments.</strong>
												<p>Placeholder Docker workflow visuals represent application packaging, environment standardization, and release-ready container delivery foundations.</p>
												<div class="ethnic-docker-visual__tags">
													<span>Application packaging</span>
													<span>Environment consistency</span>
													<span>Modernization support</span>
												</div>
											</div>
										</div>
										<div class="ethnic-docker-visual__catalog">
											<div class="ethnic-docker-visual__catalog-item">
												<small>Packaging lane</small>
												<strong>Docker image structure built for clarity, portability, and operational use</strong>
											</div>
											<div class="ethnic-docker-visual__catalog-item">
												<small>Release lane</small>
												<strong>Container workflow aligned to build, validation, deployment, and repeatable environment behavior</strong>
											</div>
										</div>
									</div>
								</div>
								<div class="ethnic-docker-visual__floating ethnic-docker-visual__floating--ops">
									<p class="ethnic-docker-visual__floating-label">Environment map</p>
									<strong>One container workflow carried through development, QA, staging, and production.</strong>
									<div class="ethnic-docker-visual__envs">
										<span>Dev</span>
										<span>QA</span>
										<span>Staging</span>
										<span>Prod</span>
									</div>
									<div class="ethnic-docker-visual__progress">
										<span></span>
										<span></span>
										<span></span>
									</div>
								</div>
								<div class="ethnic-docker-visual__floating ethnic-docker-visual__floating--checkout">
									<p class="ethnic-docker-visual__floating-label">Delivery focus</p>
									<strong>Containerize applications in a way that supports real deployment workflows, not just local experiments.</strong>
									<ul>
										<li>Cleaner image definitions</li>
										<li>Portable runtime packaging</li>
										<li>More predictable releases</li>
									</ul>
								</div>
							</div>
						</div>
					</div>
				</div>
			</section>

			<section class="ethnic-docker-section" id="overview">
				<div class="ethnic-docker-shell">
					<?php echo ethnic_docker_containerization_page_heading( 'Service Overview', 'Docker containerization services built for reliable application packaging, cleaner releases, and dependable environment behavior.', 'We help businesses containerize applications in a practical way so container adoption improves delivery instead of creating more operational confusion.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
					<div class="ethnic-docker-overview">
						<div class="ethnic-docker-prose">
							<?php foreach ( (array) $data['overviewParagraphs'] as $paragraph ) : ?>
								<p><?php echo esc_html( $paragraph ); ?></p>
							<?php endforeach; ?>
						</div>
						<div class="ethnic-docker-card-grid ethnic-docker-card-grid--overview">
							<?php foreach ( (array) $data['overviewFeatures'] as $feature ) : ?>
								<article class="ethnic-docker-card">
									<div class="ethnic-docker-card__icon">
										<?php echo ethnic_docker_containerization_page_icon( $feature['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
									</div>
									<h3><?php echo esc_html( $feature['title'] ); ?></h3>
									<p><?php echo esc_html( $feature['copy'] ); ?></p>
								</article>
							<?php endforeach; ?>
						</div>
					</div>
				</div>
			</section>

			<section class="ethnic-docker-section ethnic-docker-section--soft" id="why-containerization-matters">
				<div class="ethnic-docker-shell">
					<?php echo ethnic_docker_containerization_page_heading( 'Why Containerization Matters', 'Containerization helps businesses run applications more predictably across environments and move toward cleaner delivery workflows.', 'For both technical teams and business stakeholders, the value often comes from consistency, portability, and release confidence rather than novelty.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
					<div class="ethnic-docker-why">
						<div class="ethnic-docker-why__copy">
							<?php foreach ( (array) $data['whyParagraphs'] as $paragraph ) : ?>
								<p><?php echo esc_html( $paragraph ); ?></p>
							<?php endforeach; ?>
							<ul class="ethnic-docker-checklist" aria-label="Why containerization matters">
								<?php foreach ( (array) $data['whyChecklist'] as $item ) : ?>
									<li><?php echo esc_html( $item ); ?></li>
								<?php endforeach; ?>
							</ul>
						</div>
						<div class="ethnic-docker-card-grid ethnic-docker-card-grid--why">
							<?php foreach ( (array) $data['whyHighlights'] as $highlight ) : ?>
								<article class="ethnic-docker-card ethnic-docker-card--highlight">
									<div class="ethnic-docker-card__icon">
										<?php echo ethnic_docker_containerization_page_icon( $highlight['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
									</div>
									<h3><?php echo esc_html( $highlight['title'] ); ?></h3>
									<p><?php echo esc_html( $highlight['copy'] ); ?></p>
								</article>
							<?php endforeach; ?>
						</div>
					</div>
				</div>
			</section>

			<section class="ethnic-docker-section" id="application-packaging">
				<div class="ethnic-docker-shell">
					<?php echo ethnic_docker_containerization_page_heading( 'Application Packaging', 'Docker application packaging services that support maintainability, portability, and delivery readiness.', 'We containerize applications and related services with real operational use in mind so the result is easier to maintain, test, and release.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
					<div class="ethnic-docker-prose ethnic-docker-prose--narrow">
						<?php foreach ( (array) $data['packagingParagraphs'] as $paragraph ) : ?>
							<p><?php echo esc_html( $paragraph ); ?></p>
						<?php endforeach; ?>
					</div>
					<div class="ethnic-docker-card-grid ethnic-docker-card-grid--packaging">
						<?php foreach ( (array) $data['packagingAreas'] as $area ) : ?>
							<article class="ethnic-docker-card ethnic-docker-card--packaging">
								<div class="ethnic-docker-card__icon">
									<?php echo ethnic_docker_containerization_page_icon( $area['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
								</div>
								<h3><?php echo esc_html( $area['title'] ); ?></h3>
								<p><?php echo esc_html( $area['copy'] ); ?></p>
							</article>
						<?php endforeach; ?>
					</div>
				</div>
			</section>

			<section class="ethnic-docker-section ethnic-docker-section--soft" id="environment-consistency">
				<div class="ethnic-docker-shell">
					<?php echo ethnic_docker_containerization_page_heading( 'Environment Consistency', 'Reduce environment-related friction with a clearer container-based path from development into production.', 'Environment consistency matters because stable delivery depends on more than code quality alone. The runtime also needs to behave in a predictable way.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
					<div class="ethnic-docker-consistency">
						<div class="ethnic-docker-consistency__copy">
							<?php foreach ( (array) $data['consistencyParagraphs'] as $paragraph ) : ?>
								<p><?php echo esc_html( $paragraph ); ?></p>
							<?php endforeach; ?>
						</div>
						<div class="ethnic-docker-compare">
							<div class="ethnic-docker-compare__cards">
								<article class="ethnic-docker-compare-card ethnic-docker-compare-card--without">
									<p class="ethnic-docker-compare-card__eyebrow">Without Containerization</p>
									<h3>Inconsistent setups create avoidable delivery risk.</h3>
									<ul>
										<?php foreach ( (array) $data['consistencyWithout'] as $item ) : ?>
											<li><?php echo esc_html( $item ); ?></li>
										<?php endforeach; ?>
									</ul>
								</article>
								<article class="ethnic-docker-compare-card ethnic-docker-compare-card--with">
									<p class="ethnic-docker-compare-card__eyebrow">With Containerization</p>
									<h3>Standardized runtimes improve clarity and release confidence.</h3>
									<ul>
										<?php foreach ( (array) $data['consistencyWith'] as $item ) : ?>
											<li><?php echo esc_html( $item ); ?></li>
										<?php endforeach; ?>
									</ul>
								</article>
							</div>
							<div class="ethnic-docker-compare__runtime">
								<div class="ethnic-docker-compare__runtime-head">
									<div class="ethnic-docker-card__icon ethnic-docker-compare__runtime-icon">
										<?php echo ethnic_docker_containerization_page_icon( 'container' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
									</div>
									<div>
										<h3>Shared container behavior across the delivery lifecycle</h3>
										<p>Docker supports a more uniform runtime model so teams can collaborate with fewer setup surprises and a clearer deployment path.</p>
									</div>
								</div>
								<div class="ethnic-docker-compare__environments" aria-label="Environment consistency flow">
									<span><strong>Development</strong><small>Shared image baseline</small></span>
									<span><strong>QA</strong><small>Consistent validation path</small></span>
									<span><strong>Staging</strong><small>Clearer release rehearsal</small></span>
									<span><strong>Production</strong><small>More dependable runtime behavior</small></span>
								</div>
							</div>
						</div>
					</div>
				</div>
			</section>

			<section class="ethnic-docker-section" id="modernization-benefits">
				<div class="ethnic-docker-shell">
					<?php echo ethnic_docker_containerization_page_heading( 'Modernization Benefits', 'Docker containerization supports modernization by improving packaging discipline, delivery structure, and infrastructure flexibility over time.', 'For many teams, Docker modernization is a practical first move that creates cleaner foundations for CI/CD, scalable hosting, and better operational maturity.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
					<div class="ethnic-docker-modernization">
						<div class="ethnic-docker-modernization__copy">
							<?php foreach ( (array) $data['modernizationParagraphs'] as $paragraph ) : ?>
								<p><?php echo esc_html( $paragraph ); ?></p>
							<?php endforeach; ?>
							<div class="ethnic-docker-modernization__path">
								<p class="ethnic-docker-modernization__eyebrow">Modernization path</p>
								<ol class="ethnic-docker-modernization__steps">
									<?php foreach ( (array) $data['modernizationPath'] as $index => $step ) : ?>
										<li class="ethnic-docker-modernization__step">
											<span class="ethnic-docker-modernization__step-number"><?php echo esc_html( sprintf( '%02d', $index + 1 ) ); ?></span>
											<div class="ethnic-docker-modernization__step-copy">
												<strong><?php echo esc_html( $step['title'] ); ?></strong>
												<p><?php echo esc_html( $step['copy'] ); ?></p>
											</div>
										</li>
									<?php endforeach; ?>
								</ol>
							</div>
						</div>
						<div class="ethnic-docker-card-grid ethnic-docker-card-grid--modernization">
							<?php foreach ( (array) $data['modernizationThemes'] as $theme ) : ?>
								<article class="ethnic-docker-card ethnic-docker-card--modernization">
									<div class="ethnic-docker-card__icon">
										<?php echo ethnic_docker_containerization_page_icon( $theme['icon'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
									</div>
									<h3><?php echo esc_html( $theme['title'] ); ?></h3>
									<p><?php echo esc_html( $theme['copy'] ); ?></p>
								</article>
							<?php endforeach; ?>
						</div>
					</div>
				</div>
			</section>

			<?php if ( ! empty( $case_studies ) && function_exists( 'ethnic_shared_case_study_showcase_render' ) ) : ?>
			<section class="ethnic-docker-section ethnic-docker-section--contrast" id="docker-case-studies">
				<div class="ethnic-docker-shell">
					<?php echo ethnic_docker_containerization_page_heading( 'Case Studies', 'Containerization and delivery examples aligned to real infrastructure and release outcomes.', 'These examples show the kind of modernization, packaging, and operational improvements supported through our Docker containerization services.' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
					<?php echo ethnic_shared_case_study_showcase_render( $case_studies, array( 'carousel_label' => 'Docker containerization case studies showcase' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
				</div>
			</section>
			<?php endif; ?>

			<?php if ( $has_extra_content ) : ?>
			<section class="ethnic-docker-section ethnic-docker-section--supplemental" id="page-content">
				<div class="ethnic-docker-editor-content">
					<?php echo $extra_content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
				</div>
			</section>
			<?php endif; ?>

			<section class="ethnic-docker-section ethnic-docker-section--cta" id="cta">
				<div class="ethnic-docker-shell">
					<div class="ethnic-docker-cta">
						<div class="ethnic-docker-cta__copy">
							<div class="ethnic-docker-cta__intro">
								<p class="ethnic-docker-kicker ethnic-docker-kicker--light">Ready to Talk</p>
								<p class="ethnic-docker-cta__note">Planning around application packaging, environment consistency, Docker adoption, and modernization goals.</p>
							</div>
							<h2><?php echo esc_html( $data['ctaTitle'] ); ?></h2>
							<p class="ethnic-docker-cta__lead"><?php echo esc_html( $data['ctaText'] ); ?></p>
							<div class="ethnic-docker-actions">
								<a class="ethnic-docker-button ethnic-docker-button--primary" href="<?php echo esc_url( $team_url ); ?>">Talk to Our Team</a>
								<a class="ethnic-docker-button ethnic-docker-button--secondary" href="<?php echo esc_url( $quote_url ); ?>">Get a Free Quote</a>
							</div>
							<ul class="ethnic-docker-cta__highlights" aria-label="Docker containerization CTA highlights">
								<?php foreach ( (array) $data['ctaHighlights'] as $highlight ) : ?>
									<li><?php echo esc_html( $highlight ); ?></li>
								<?php endforeach; ?>
							</ul>
						</div>

						<aside class="ethnic-docker-cta__panel" aria-label="What happens next">
							<div class="ethnic-docker-cta__panel-header">
								<p class="ethnic-docker-cta__panel-eyebrow">What Happens Next</p>
								<h3 class="ethnic-docker-cta__panel-title">Turn Docker containerization into a more reliable delivery advantage</h3>
							</div>
							<ol class="ethnic-docker-cta__steps">
								<?php foreach ( (array) $data['ctaSteps'] as $index => $step ) : ?>
									<li class="ethnic-docker-cta__step">
										<span class="ethnic-docker-cta__step-number"><?php echo esc_html( sprintf( '%02d', $index + 1 ) ); ?></span>
										<div class="ethnic-docker-cta__step-copy">
											<strong><?php echo esc_html( $step['title'] ); ?></strong>
											<p><?php echo esc_html( $step['copy'] ); ?></p>
										</div>
									</li>
								<?php endforeach; ?>
							</ol>
							<div class="ethnic-docker-cta__panel-note"><strong>Focus:</strong> application packaging, environment consistency, Docker modernization, release workflow improvement, and long-term container use.</div>
						</aside>
					</div>
				</div>
			</section>
		</div>
		<?php

		return ob_get_clean();
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_styles' ) ) {
	function ethnic_docker_containerization_page_styles() {
		$base_styles = '';

		if ( function_exists( 'ethnic_devops_services_page_styles' ) ) {
			$base_styles = ethnic_devops_services_page_styles();
			$base_styles = str_replace(
				array(
					'ethnic-devops-development-target',
					'ethnic-devops-services-target',
					'ethnic-devops',
				),
				array(
					'ethnic-docker-containerization-target',
					'ethnic-docker-containerization-target',
					'ethnic-docker',
				),
				$base_styles
			);
		} elseif ( function_exists( 'ethnic_ecommerce_development_page_styles' ) ) {
			$base_styles = str_replace(
				array(
					'ethnic-ecommerce-development-target',
					'ethnic-ecommerce',
				),
				array(
					'ethnic-docker-containerization-target',
					'ethnic-docker',
				),
				ethnic_ecommerce_development_page_styles()
			);
		}

		return $base_styles . <<<'CSS'
.ethnic-docker-page {
	--ethnic-docker-accent: #2496ed;
	--ethnic-docker-accent-dark: #0f5f9b;
	--ethnic-docker-cyan: #7dd3fc;
	--ethnic-docker-lime: #d7f1ff;
}

.ethnic-docker-section--contrast {
	padding: clamp(42px, 5vw, 58px) 0;
	background:
		radial-gradient(circle at 16% 20%, rgba(36, 150, 237, 0.18), transparent 24%),
		radial-gradient(circle at 84% 18%, rgba(125, 211, 252, 0.1), transparent 20%),
		linear-gradient(180deg, rgba(7, 19, 38, 0.99), rgba(12, 28, 54, 0.99));
}

.ethnic-docker-section--contrast .ethnic-docker-heading__title,
.ethnic-docker-section--contrast .ethnic-docker-heading__copy,
.ethnic-docker-section--contrast .ethnic-docker-heading__eyebrow {
	color: #ffffff !important;
	-webkit-text-fill-color: #ffffff;
}

.ethnic-docker-section--contrast .ethnic-docker-heading__copy {
	opacity: 0.78;
}

.ethnic-docker-section--contrast .ethnic-docker-heading__eyebrow {
	background: rgba(255, 255, 255, 0.08);
	border-color: rgba(255, 255, 255, 0.14);
}

.ethnic-docker-section--hero {
	background:
		radial-gradient(circle at 18% 18%, rgba(36, 150, 237, 0.22), transparent 24%),
		radial-gradient(circle at 84% 18%, rgba(125, 211, 252, 0.16), transparent 18%),
		linear-gradient(180deg, #08131f, #0c2335 56%, #10324a);
}

.ethnic-docker-hero__title {
	max-width: 10ch;
}

.ethnic-docker-hero__lead {
	max-width: 61ch;
}

.ethnic-docker-breadcrumb {
	display: inline-flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px;
	margin: 0 0 18px;
	color: rgba(255, 255, 255, 0.72);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.12em;
	line-height: 1.4;
	text-transform: uppercase;
}

.ethnic-docker-breadcrumb a {
	color: #ffffff;
	text-decoration: none;
}

.ethnic-docker-breadcrumb a:hover,
.ethnic-docker-breadcrumb a:focus-visible {
	color: rgba(255, 255, 255, 0.82);
}

.ethnic-docker-breadcrumb span:last-child {
	color: rgba(255, 255, 255, 0.82);
}

.ethnic-docker-visual__window-body {
	background:
		radial-gradient(circle at top right, rgba(36, 150, 237, 0.16), transparent 28%),
		linear-gradient(180deg, rgba(255, 255, 255, 0.97), rgba(241, 248, 253, 0.97));
}

.ethnic-docker-visual__nav span,
.ethnic-docker-visual__tags span {
	background: rgba(36, 150, 237, 0.08);
	color: #0f5f9b;
}

.ethnic-docker-visual__product-shot {
	background:
		radial-gradient(circle at 28% 28%, rgba(255, 255, 255, 0.92), transparent 22%),
		linear-gradient(150deg, rgba(36, 150, 237, 0.16), rgba(125, 211, 252, 0.12)),
		linear-gradient(180deg, #eff7ff, #dceefe);
}

.ethnic-docker-visual__product-shot::before {
	background: linear-gradient(180deg, #ffffff, #eff8ff);
	border: 1px solid rgba(36, 150, 237, 0.14);
}

.ethnic-docker-visual__product-shot::after {
	background: rgba(36, 150, 237, 0.12);
}

.ethnic-docker-visual__product-shot--docker {
	display: grid;
	place-items: center;
	overflow: hidden;
}

.ethnic-docker-stack {
	position: relative;
	z-index: 1;
	display: grid;
	gap: 10px;
	width: min(100%, 230px);
}

.ethnic-docker-stack__layer {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	min-height: 42px;
	padding: 0 14px 0 16px;
	border-radius: 14px;
	background: rgba(255, 255, 255, 0.92);
	border: 1px solid rgba(36, 150, 237, 0.12);
	box-shadow: 0 12px 26px rgba(15, 23, 42, 0.08);
}

.ethnic-docker-stack__layer span {
	color: #0f172a;
	font-size: 13px;
	font-weight: 700;
	line-height: 1.3;
}

.ethnic-docker-stack__layer small {
	color: var(--ethnic-docker-accent-dark);
	font-size: 10px;
	font-weight: 800;
	letter-spacing: 0.12em;
	line-height: 1;
	text-transform: uppercase;
}

.ethnic-docker-stack__flow {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 8px;
	margin-top: 2px;
}

.ethnic-docker-stack__flow span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 32px;
	padding: 0 8px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.74);
	border: 1px solid rgba(36, 150, 237, 0.12);
	color: #0f5f9b;
	font-size: 11px;
	font-weight: 800;
	letter-spacing: 0.06em;
	line-height: 1;
	text-transform: uppercase;
}

.ethnic-docker-visual__eyebrow {
	color: var(--ethnic-docker-accent-dark);
}

.ethnic-docker-visual__envs {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 18px;
}

.ethnic-docker-visual__envs span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 30px;
	padding: 0 12px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.12);
	border: 1px solid rgba(255, 255, 255, 0.1);
	color: #ffffff;
	font-size: 12px;
	font-weight: 700;
	line-height: 1;
}

.ethnic-docker-visual__floating li::before,
.ethnic-docker-checklist li::before,
.ethnic-docker-cta__highlights li::before,
.ethnic-docker-compare-card li::before {
	background: var(--ethnic-docker-accent);
	box-shadow: 0 0 0 5px rgba(36, 150, 237, 0.14);
}

.ethnic-docker-visual__floating--ops {
	background:
		linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.04)),
		linear-gradient(180deg, #103247, #0c2230);
}

.ethnic-docker-card__icon,
.ethnic-docker-platform-card__icon {
	background: rgba(36, 150, 237, 0.08);
	color: var(--ethnic-docker-accent-dark);
}

.ethnic-docker-dashboard,
.ethnic-docker-faq__marker,
.ethnic-docker-dashboard__journey-step span {
	background-color: rgba(36, 150, 237, 0.08);
	color: var(--ethnic-docker-accent-dark);
}

.ethnic-docker-dashboard {
	background:
		radial-gradient(circle at top right, rgba(36, 150, 237, 0.14), transparent 30%),
		linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(248, 250, 252, 0.96));
}

.ethnic-docker-cta::before {
	background:
		linear-gradient(90deg, rgba(36, 150, 237, 0.05) 1px, transparent 1px),
		linear-gradient(0deg, rgba(36, 150, 237, 0.05) 1px, transparent 1px);
}

.ethnic-docker-cta .ethnic-docker-kicker--light,
.ethnic-docker-heading__eyebrow {
	border-color: rgba(36, 150, 237, 0.18);
	color: var(--ethnic-docker-accent-dark) !important;
	-webkit-text-fill-color: var(--ethnic-docker-accent-dark);
}

.ethnic-docker-cta .ethnic-docker-kicker--light {
	color: #0f5f9b !important;
	-webkit-text-fill-color: #0f5f9b;
	box-shadow: 0 14px 36px rgba(36, 150, 237, 0.14);
}

.ethnic-docker-editor-content {
	display: block;
}

.ethnic-docker-editor-content > :first-child {
	margin-top: 0;
}

.ethnic-docker-editor-content > :last-child {
	margin-bottom: 0;
}

.ethnic-docker-overview,
.ethnic-docker-why,
.ethnic-docker-consistency,
.ethnic-docker-modernization {
	display: grid;
	gap: clamp(28px, 4vw, 44px);
	align-items: start;
}

.ethnic-docker-overview,
.ethnic-docker-modernization {
	grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
}

.ethnic-docker-why {
	grid-template-columns: minmax(0, 0.84fr) minmax(0, 1.16fr);
}

.ethnic-docker-card-grid--why {
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

.ethnic-docker-card-grid--packaging,
.ethnic-docker-card-grid--modernization {
	grid-template-columns: repeat(3, minmax(0, 1fr));
}

.ethnic-docker-card--highlight,
.ethnic-docker-card--packaging,
.ethnic-docker-card--modernization {
	height: 100%;
}

.ethnic-docker-consistency__copy {
	max-width: 62ch;
}

.ethnic-docker-compare {
	display: grid;
	gap: 18px;
}

.ethnic-docker-compare__cards {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 18px;
}

.ethnic-docker-compare-card,
.ethnic-docker-modernization__path {
	border-radius: 28px;
	border: 1px solid var(--ethnic-docker-border);
	box-shadow: var(--ethnic-docker-shadow);
}

.ethnic-docker-compare-card {
	padding: 24px;
}

.ethnic-docker-compare-card--without {
	background:
		radial-gradient(circle at top right, rgba(245, 158, 11, 0.08), transparent 26%),
		linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(255, 249, 240, 0.98));
}

.ethnic-docker-compare-card--with {
	background:
		radial-gradient(circle at top right, rgba(36, 150, 237, 0.1), transparent 26%),
		linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(241, 248, 253, 0.98));
}

.ethnic-docker-compare-card__eyebrow,
.ethnic-docker-modernization__eyebrow {
	display: inline-flex;
	align-items: center;
	min-height: 32px;
	margin: 0;
	padding: 8px 14px;
	border-radius: 999px;
	background: rgba(36, 150, 237, 0.08);
	border: 1px solid rgba(36, 150, 237, 0.12);
	color: var(--ethnic-docker-accent-dark);
	font-size: 12px;
	font-weight: 800;
	letter-spacing: 0.12em;
	line-height: 1;
	text-transform: uppercase;
}

.ethnic-docker-compare-card h3,
.ethnic-docker-modernization__step-copy strong {
	color: var(--ethnic-docker-text);
	font-family: "Plus Jakarta Sans", "Figtree", sans-serif;
}

.ethnic-docker-compare-card h3 {
	margin: 18px 0 0;
	font-size: 24px;
	font-weight: 700;
	line-height: 1.25;
	letter-spacing: -0.04em;
}

.ethnic-docker-compare-card ul {
	display: grid;
	gap: 12px;
	padding: 0;
	margin: 18px 0 0;
	list-style: none;
}

.ethnic-docker-compare-card li {
	position: relative;
	padding-left: 22px;
	color: var(--ethnic-docker-text);
	font-size: 14px;
	font-weight: 600;
	line-height: 1.6;
}

.ethnic-docker-compare-card li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.38em;
	width: 10px;
	height: 10px;
	border-radius: 50%;
}

.ethnic-docker-compare__runtime {
	padding: 24px;
	border-radius: 28px;
	border: 1px solid var(--ethnic-docker-border);
	background:
		radial-gradient(circle at top right, rgba(36, 150, 237, 0.1), transparent 28%),
		linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(243, 248, 252, 0.98));
	box-shadow: var(--ethnic-docker-shadow);
}

.ethnic-docker-compare__runtime-head {
	display: grid;
	grid-template-columns: 52px 1fr;
	gap: 16px;
	align-items: start;
}

.ethnic-docker-compare__runtime-icon {
	margin-top: 2px;
}

.ethnic-docker-compare__runtime h3 {
	margin: 0;
	color: var(--ethnic-docker-text);
	font-family: "Plus Jakarta Sans", "Figtree", sans-serif;
	font-size: 24px;
	font-weight: 700;
	line-height: 1.2;
	letter-spacing: -0.04em;
}

.ethnic-docker-compare__runtime p {
	margin: 10px 0 0;
}

.ethnic-docker-compare__environments {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 10px;
	margin-top: 20px;
}

.ethnic-docker-compare__environments span {
	display: grid;
	gap: 6px;
	padding: 14px;
	border-radius: 18px;
	background: rgba(36, 150, 237, 0.08);
	border: 1px solid rgba(36, 150, 237, 0.12);
}

.ethnic-docker-compare__environments strong {
	color: var(--ethnic-docker-text);
	font-size: 13px;
	font-weight: 700;
	line-height: 1.3;
}

.ethnic-docker-compare__environments small {
	color: var(--ethnic-docker-accent-dark);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.04em;
	line-height: 1.4;
}

.ethnic-docker-modernization__copy {
	display: grid;
	gap: 0;
}

.ethnic-docker-modernization__path {
	padding: 24px;
	margin-top: 12px;
	background:
		radial-gradient(circle at top right, rgba(36, 150, 237, 0.08), transparent 24%),
		linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(244, 249, 253, 0.98));
}

.ethnic-docker-modernization__steps {
	display: grid;
	gap: 0;
	padding: 0;
	margin: 18px 0 0;
	list-style: none;
}

.ethnic-docker-modernization__step {
	display: grid;
	grid-template-columns: 46px 1fr;
	gap: 16px;
	padding: 16px 0;
	align-items: start;
}

.ethnic-docker-modernization__step + .ethnic-docker-modernization__step {
	border-top: 1px solid rgba(15, 23, 42, 0.08);
}

.ethnic-docker-modernization__step-number {
	display: inline-grid;
	place-items: center;
	width: 46px;
	height: 46px;
	border-radius: 16px;
	background: rgba(36, 150, 237, 0.1);
	color: var(--ethnic-docker-accent-dark);
	font-size: 12px;
	font-weight: 800;
	letter-spacing: 0.12em;
	line-height: 1;
	text-transform: uppercase;
}

.ethnic-docker-modernization__step-copy strong {
	display: block;
	font-size: 16px;
	font-weight: 700;
	line-height: 1.4;
}

.ethnic-docker-modernization__step-copy p {
	margin: 8px 0 0;
	font-size: 14px;
	line-height: 1.7;
}

@media (max-width: 1200px) {
	.ethnic-docker-overview,
	.ethnic-docker-why,
	.ethnic-docker-consistency,
	.ethnic-docker-modernization {
		grid-template-columns: 1fr;
	}

	.ethnic-docker-card-grid--packaging,
	.ethnic-docker-card-grid--modernization {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 1024px) {
	.ethnic-docker-card-grid--why,
	.ethnic-docker-compare__cards,
	.ethnic-docker-compare__environments {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 767px) {
	.ethnic-docker-breadcrumb {
		gap: 6px;
		font-size: 11px;
	}

	.ethnic-docker-card-grid--why,
	.ethnic-docker-card-grid--packaging,
	.ethnic-docker-card-grid--modernization,
	.ethnic-docker-compare__cards,
	.ethnic-docker-compare__environments {
		grid-template-columns: 1fr;
	}

	.ethnic-docker-stack {
		width: 100%;
	}

	.ethnic-docker-stack__layer {
		padding-right: 12px;
		padding-left: 14px;
	}

	.ethnic-docker-stack__flow {
		grid-template-columns: 1fr;
	}

	.ethnic-docker-compare__runtime-head,
	.ethnic-docker-modernization__step {
		grid-template-columns: 1fr;
	}

	.ethnic-docker-modernization__step-number {
		width: 42px;
		height: 42px;
	}
}
CSS;
	}
}

if ( ! function_exists( 'ethnic_docker_containerization_page_body_class' ) ) {
	function ethnic_docker_containerization_page_body_class( $classes ) {
		if ( ethnic_docker_containerization_page_is_target() ) {
			$classes[] = 'ethnic-docker-containerization-target';
		}

		return $classes;
	}

	add_filter( 'body_class', 'ethnic_docker_containerization_page_body_class' );
}

if ( ! function_exists( 'ethnic_docker_containerization_page_print_head_assets' ) ) {
	function ethnic_docker_containerization_page_print_head_assets() {
		if ( ! ethnic_docker_containerization_page_is_target() ) {
			return;
		}

		$data = ethnic_docker_containerization_page_data();
		?>
		<style id="ethnic-docker-containerization-page-inline-css" type="text/css">
			<?php echo ethnic_docker_containerization_page_styles(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
		</style>
		<meta name="description" content="<?php echo esc_attr( $data['metaDescription'] ); ?>" />
		<?php
	}

	add_action( 'wp_head', 'ethnic_docker_containerization_page_print_head_assets', 120 );
}

if ( ! function_exists( 'ethnic_docker_containerization_page_document_title' ) ) {
	function ethnic_docker_containerization_page_document_title( $title ) {
		if ( ethnic_docker_containerization_page_is_target() ) {
			$data = ethnic_docker_containerization_page_data();
			return $data['metaTitle'];
		}

		return $title;
	}

	add_filter( 'pre_get_document_title', 'ethnic_docker_containerization_page_document_title', 50 );
}

if ( ! function_exists( 'ethnic_docker_containerization_page_replace_content' ) ) {
	function ethnic_docker_containerization_page_replace_content( $content ) {
		if ( ! ethnic_docker_containerization_page_is_target() || ! in_the_loop() || ! is_main_query() ) {
			return $content;
		}

		static $rendered = false;

		if ( $rendered ) {
			return $content;
		}

		$rendered = true;

		return ethnic_docker_containerization_page_render( $content );
	}

	add_filter( 'the_content', 'ethnic_docker_containerization_page_replace_content', 1000 );
}