.alovesinh-center {
	display: grid;
	place-items: center;
}

/* The source design has two row utilities: one centres its children, one leaves them to stretch.
	Centring is the common case, so it is the default and the button and social rows opt out. */
.alovesinh-row {
	display: flex;
	align-items: var(--alv-row-align, center);
	gap: var(--alv-sp-2);
	flex-wrap: var(--alv-row-wrap, nowrap);
}

.alovesinh-column {
	display: flex;
	flex-direction: column;
	gap: var(--alv-column-gap, var(--alv-sp-2));
}

/* Every top-level block takes both vertical paddings from the one section variable, so every block
	carries the same space above and below its content. No class sets the variable again. The rule sits
	ahead of every narrower .e-con selector in this sheet so the cascade reads in order of weight. */
.elementor > .e-con {
	--padding-top: var(--alv-section-pad-block);
	--padding-bottom: var(--alv-section-pad-block);
}

/* display itself, not Elementor's --display: the post CSS writes --display on every container from its
	own id, which a class never outranks. The class wins `.e-con` by loading after elementor-frontend. */
.alovesinh-grid {
	display: grid;
	grid-template-columns: repeat(var(--alv-grid-cols-sm, 1), 1fr);
	gap: var(--alv-grid-gap-md, var(--alv-grid-gap, var(--alv-sp-3)));
	width: min(100%, var(--alv-grid-width, var(--alv-w-grid)));
	margin-inline: auto;
}

/* The five-across grid of the source design, type included: at five cards to a row the titles
	break mid-phrase unless the leading tightens and the copy drops a step, so the wording that
	goes with the grid travels with it instead of being set again on every card inside. */
.alovesinh-grid-five {
	--alv-grid-cols: 5;
	--alv-grid-cols-md: 3;
	--alv-grid-width: var(--alv-w-grid-five);
}

.alovesinh-grid-five .alovesinh-card :is(h3, h4) {
	line-height: var(--alv-lh-snug);
	letter-spacing: var(--alv-tr-card-title);
}

.alovesinh-grid-four {
	--alv-grid-cols: 4;
	--alv-grid-cols-md: 2;
}

.alovesinh-grid-pair {
	--alv-grid-cols: 2;
	--alv-grid-cols-md: 2;
	--alv-grid-gap: var(--alv-sp-2);
	--alv-grid-width: 100%;
}

.alovesinh-split {
	display: grid;
	grid-template-columns: var(--alv-split-cols-md, 1fr);
	gap: var(--alv-split-gap-md, var(--alv-sp-4));
	align-items: var(--alv-split-align, center);
}

.alovesinh-card {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: var(--alv-sp-2);
	height: 100%;
	padding: var(--alv-card-pad, var(--alv-sp-4));
	border: var(--alv-bd-hairline) solid var(--alv-card-border);
	border-radius: var(--alv-r-4);
	background: var(--alv-card-bg);
	box-shadow: var(--alv-card-shadow);
	transition:
		transform var(--alv-dur-3) ease,
		border-color var(--alv-dur-3) ease,
		background var(--alv-dur-3) ease,
		box-shadow var(--alv-dur-3) ease;
}

.alovesinh-card:hover {
	border-color: var(--alv-card-border-hover);
	background: var(--alv-card-bg-hover, var(--alv-card-bg));
	box-shadow: var(--alv-card-shadow-hover);
	transform: translateY(calc(-1 * var(--alv-sp-0d)));
}

.alovesinh-card h3,
.alovesinh-card h4 {
	margin: 0;
	color: var(--alv-card-title);
}

.alovesinh-card p {
	margin: 0;
	line-height: var(--alv-lh-copy);
	color: var(--alv-card-text);
}

.alovesinh-card-image {
	gap: 0;
	overflow: hidden;
	padding: 0;
}

/* Elementor's `.elementor img { height: auto }` outranks one class, so the frame's height is held
	through min-height and max-height, which that rule leaves alone. */
.alovesinh-image-fill {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	min-height: 100%;
	max-height: 100%;
	object-fit: cover;
}

.alovesinh-btn {
	--alv-btn-pad-y: var(--alv-sp-2b);
	--alv-btn-pad-x: var(--alv-sp-3a);
	--alv-btn-radius: var(--alv-r-2);
	--alv-btn-font-size: var(--alv-fs-cta);
	--alv-btn-icon: var(--alv-fs-4);
	display: inline-flex;
	align-items: center;
	gap: var(--alv-sp-2);
	padding: var(--alv-btn-pad-y) var(--alv-btn-pad-x);
	border-radius: var(--alv-btn-radius);

	/* Floored: white on a -strong fill passes only from --alv-fs-cta bold, so no block may ask smaller. */
	font-size: max(var(--alv-btn-font-size), var(--alv-fs-cta));
	font-weight: var(--alv-fw-bold);
	transition:
		transform var(--alv-dur-1) ease,
		background var(--alv-dur-1) ease,
		box-shadow var(--alv-dur-1) ease;
}

/* An icon picked in the builder carries no width, height or fill of its own, so without this it
	grows to fill its box and paints itself black. Left free to shrink, as the source design leaves
	every inline mark, so a phone-width label wraps where the design's own label wraps. */
.alovesinh-btn svg,
.alovesinh-btn i {
	width: var(--alv-btn-icon);
	height: var(--alv-btn-icon);
	font-size: var(--alv-btn-icon);
	line-height: 1;
	fill: currentcolor;
}

.alovesinh-btn-large {
	--alv-btn-pad-y: var(--alv-sp-2d);
	--alv-btn-pad-x: var(--alv-sp-3d);
	--alv-btn-radius: var(--alv-r-3);
	--alv-btn-font-size: var(--alv-fs-4);
	--alv-btn-icon: var(--alv-fs-4b);
}

.alovesinh-btn:hover {
	transform: translateY(calc(-1 * var(--alv-sp-0b)));
}

.alovesinh-btn-primary,
.alovesinh-btn-gradient {
	color: var(--alv-c-white);
	background: var(--alv-c-accent-strong);
}

/* Core Button's colour controls take a picker or a Kit colour, never var() (color.php:46-58), and its hover
	animations hold no 2px lift (button-trait.php:459-466): fills with no Kit colour and the lift stay here. */
.alovesinh-button-primary .elementor-button {
	background: var(--alv-c-accent-strong);
}

/* The skin sits on the button component, which is what outranks Elementor's `.elementor a { box-shadow: none }`
	(0-1-1): a filled button inside a container keeps its lift. */
.alovesinh-btn.alovesinh-btn-primary,
.alovesinh-btn.alovesinh-btn-gradient {
	box-shadow: var(--alv-sh-lift);
}

.alovesinh-btn.alovesinh-btn-primary:hover,
.alovesinh-btn.alovesinh-btn-gradient:hover {
	box-shadow: var(--alv-sh-lift-hover);
}

/* The network's own blue, not a brand tint: this button is the one people recognise by colour
	before they read it, and repainting it in the theme's palette loses that. */
.alovesinh-btn-zalo {
	color: var(--alv-c-white);
	background: var(--alv-c-zalo);
}

.alovesinh-btn-outline {
	border: var(--alv-bd-hairline) solid var(--alv-c-border);
	color: var(--alv-c-ink);
	background: var(--alv-c-white);
}

.alovesinh-btn-outline:hover {
	border-color: var(--alv-c-brand);
	color: var(--alv-c-brand-deep);
}

/* Two ways in, one set of values: a block whose ground is dark sets the context and every outline
	button inside follows, while a panel painted its own colour asks for the skin by name. Written
	twice, the two would drift the first time the tint changes. */
.alovesinh-btn-outline-dark,
.alovesinh-dark .alovesinh-btn-outline {
	border: var(--alv-bd-hairline) solid var(--alv-c-glass-border);
	color: var(--alv-c-white);
	background: var(--alv-c-glass-rule);
}

.alovesinh-danh-muc-dich-vu .alovesinh-btn-outline {
	--alv-btn-icon: var(--alv-fs-2a);
}

.alovesinh-giac-ngu-yen .alovesinh-btn-outline {
	border-color: var(--alv-c-orange-light);
}

.alovesinh-khuyen-mai-50-suat-nut .alovesinh-btn-outline {
	border-color: var(--alv-c-glass-veil);
	background: transparent;
}

.alovesinh-btn-outline-dark:hover,
.alovesinh-dark .alovesinh-btn-outline:hover {
	border-color: var(--alv-c-white);
	color: var(--alv-c-white);
	background: var(--alv-c-glass-fill);
}

.alovesinh-button-outline-dark .elementor-button {
	border-color: var(--alv-c-glass-border);
	background: var(--alv-c-glass-rule);
}

.alovesinh-button-outline-dark .elementor-button:hover {
	background: var(--alv-c-glass-fill);
}

.alovesinh-badge {
	display: inline-flex;
	align-items: center;
	gap: var(--alv-sp-1);
	padding: var(--alv-sp-1) var(--alv-sp-2);
	border-radius: var(--alv-r-pill);
	font-size: var(--alv-fs-2);
	font-weight: var(--alv-fw-bold);
	letter-spacing: var(--alv-tr-wide-2);
	text-transform: uppercase;
	color: var(--alv-badge-text);
	background: var(--alv-badge-bg);
}

/* Brand by default rather than currentcolor: currentcolor would tint it with whatever the badge
	tone sets, and four blocks need the dot on a hue the text does not carry. */
.alovesinh-badge::before {
	content: '';
	width: var(--alv-badge-dot-size, var(--alv-sp-1));
	height: var(--alv-badge-dot-size, var(--alv-sp-1));
	border-radius: var(--alv-r-pill);
	background: var(--alv-badge-dot, var(--alv-c-brand));
	box-shadow: var(--alv-badge-dot-ring, none);
}

.alovesinh-badge-no-dot::before {
	content: none;
}

/* No border unless a block asks for one: a transparent 1px default would widen every chip on the
	site by two pixels, so the box writes the whole shorthand instead of a colour. */
.alovesinh-pill {
	display: inline-flex;
	align-items: center;
	gap: var(--alv-sp-1);
	padding: var(--alv-sp-1) var(--alv-sp-2);
	border: var(--alv-pill-border, 0);
	border-radius: var(--alv-r-pill);
	font-size: var(--alv-fs-2);
	font-weight: var(--alv-fw-bold);
	white-space: nowrap;

	/* Both colours inherit by default so a pill dropped into a tinted block takes that block's ink. */
	color: var(--alv-pill-text, inherit);
	background: var(--alv-pill-bg, transparent);
}

/* An icon picked in the builder carries no size of its own, so a chip printed with one collapses
	the mark to nothing until it is given these three. */
.alovesinh-badge svg,
.alovesinh-badge i,
.alovesinh-pill svg,
.alovesinh-pill i {
	width: var(--alv-pill-icon, var(--alv-sp-2d));
	height: var(--alv-pill-icon, var(--alv-sp-2d));
	font-size: var(--alv-pill-icon, var(--alv-sp-2d));
	line-height: 1;
	fill: currentcolor;
}

.alovesinh-card-post-dot,
.alovesinh-post-meta-dot {
	flex-shrink: 0;
	width: var(--alv-sp-0d);
	height: var(--alv-sp-0d);
	border-radius: var(--alv-r-circle);
	background: var(--alv-c-on-dark);
}

.alovesinh-icon-box {
	display: grid;
	place-items: center;
	flex-shrink: 0;
	width: var(--alv-icon-box, var(--alv-sp-5));
	height: var(--alv-icon-box, var(--alv-sp-5));
	border-radius: var(--alv-icon-radius, var(--alv-r-2));
	color: var(--alv-icon-color, var(--alv-c-brand-deep));
	background: var(--alv-icon-bg, var(--alv-c-brand-tint));
}

.alovesinh-icon-box svg,
.alovesinh-icon-box i {
	width: var(--alv-icon-size, var(--alv-sp-3a));
	height: var(--alv-icon-size, var(--alv-sp-3a));
	font-size: var(--alv-icon-size, var(--alv-sp-3a));
	line-height: 1;
	fill: currentcolor;
}

.alovesinh-initial {
	display: grid;
	place-items: center;
	flex-shrink: 0;
	width: var(--alv-initial-size, var(--alv-sp-4f));
	height: var(--alv-initial-size, var(--alv-sp-4f));
	border-radius: var(--alv-r-circle);
	font-size: var(--alv-initial-font, var(--alv-fs-3));
	font-weight: var(--alv-fw-extrabold);
	letter-spacing: var(--alv-tr-wide-1);
	color: var(--alv-initial-text, var(--alv-c-brand-deep));
	background: var(--alv-initial-bg, var(--alv-c-brand-wash));
}

.alovesinh-bar {
	overflow: hidden;
	height: var(--alv-bar-height, var(--alv-sp-1a));
	border-radius: var(--alv-bar-radius, var(--alv-r-1));
	background: var(--alv-bar-track, var(--alv-c-bg-light));
}

/* The box writes its figure unchecked: below zero the width turns invalid and the fill spans the track. */
.alovesinh-bar-fill {
	display: block;
	width: clamp(0%, var(--alv-bar-ratio, 0%), 100%);
	height: 100%;
	border-radius: inherit;
	background: var(--alv-bar-color, var(--alv-c-brand));
}

/* Worn by a container as well as by a widget's own div, so the box writes the properties themselves:
	Elementor's --padding-* and --border-radius would reach the container only. */
.alovesinh-bordered-box {
	padding: var(--alv-box-pad, var(--alv-sp-3));
	border: var(--alv-bd-hairline) solid var(--alv-c-border);
	border-radius: var(--alv-box-radius, var(--alv-r-3));
	background: var(--alv-c-white);
}

/* A white pane on a deep ground reads as a hole punched in the block, so on the dark skin the box
	becomes a lift of the ground itself - the same two values the source design gives the contact
	cells of the process pages. */
.alovesinh-dark .alovesinh-bordered-box {
	border-color: var(--alv-c-glass-seam);
	background: var(--alv-c-glass-tint);
}

/* Laid out as a flex row so the newline the template writes between two marks is not rendered as a
	word space: the source design sets the five marks touching, and four stray spaces widen the row
	by a fifth wherever it is measured by its content rather than by the box around it. */
.alovesinh-star-row {
	display: flex;
	position: relative;
	z-index: 1;
	font-size: var(--alv-star-size, var(--alv-fs-3));
	letter-spacing: var(--alv-star-tracking, var(--alv-tr-px-2));
	color: var(--alv-star-color, var(--alv-c-warning));
}

.alovesinh-star-empty {
	opacity: var(--alv-op-star-empty);
}

.alovesinh-glow::before,
.alovesinh-glow::after {
	content: '';
	position: absolute;
	aspect-ratio: 1;
	border-radius: var(--alv-r-circle);
	pointer-events: none;
}

.alovesinh-glow::before {
	inset: var(--alv-glow-one-inset, var(--alv-inset-glow-one));
	width: var(--alv-glow-one-size, var(--alv-w-corner-glow));
	background: radial-gradient(
		circle at var(--alv-glow-at, var(--alv-pos-glow)),
		var(--alv-glow-one, var(--alv-c-brand-flare)),
		transparent var(--alv-glow-fade, var(--alv-stop-glow))
	);
}

.alovesinh-glow::after {
	inset: var(--alv-glow-two-inset, var(--alv-inset-glow-two));
	width: var(--alv-glow-two-size, var(--alv-w-glow-two));
	background: radial-gradient(
		circle at var(--alv-glow-at, var(--alv-pos-glow)),
		var(--alv-glow-two, var(--alv-c-accent-edge)),
		transparent var(--alv-glow-fade, var(--alv-stop-glow))
	);
}

/* The waiting class is added and removed by script, never set in the markup, so a visitor without
	JavaScript is served every row already in place instead of a blank band. The clip is horizontal
	only: overflow: hidden would cut the lifted shadow the photographs cast below themselves. */
.alovesinh-reveal {
	overflow-x: clip;
}

/* The clip is horizontal only: overflow: hidden would cut the lifted shadow the photographs cast below themselves. */
.alovesinh-cau-chuyen-mot-dem-moc .alovesinh-split {
	overflow-x: clip;
}

/* Drawn on ::after so the block keeps ::before for Elementor's own background overlay, and lifted
	out at z-index -1 inside an isolated block so the wash lands under the content without every
	child in the block needing a z-index of its own. */
.alovesinh-wash {
	position: relative;
	isolation: isolate;
}

.alovesinh-wash::after {
	content: '';
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		var(--alv-scene-wash-brand),
		radial-gradient(
			var(--alv-shape-wash-accent),
			color-mix(
				in srgb,
				var(--alv-c-accent) var(--alv-wash-accent, var(--alv-mix-wash-accent)),
				transparent
			),
			transparent var(--alv-stop-wash)
		);
	pointer-events: none;
}

/* A kit gradient holds two stops and this band runs three, so it is one class for the eight blocks
	that paint it rather than a background typed on each container. */
.alovesinh-dark-band {
	background: var(--alv-scene-dark-band);
}

/* Horizontal only: hidden cuts the frame's shadow at the lower edge. */
.alovesinh-banner {
	overflow-x: clip;
	background: var(--alv-scene-banner);
}

/* The opening banner of the home page and of the process pages does not take the section padding: it
	fills the screen under the bar, and its space above and below the content is what that leaves, split
	evenly by the centring. The padding is only the floor that keeps the content off the bar and the next
	block. The bar is the compact one here and the full one from the next screen up. The article, blog and
	search heads share the banner class but not this: filling the screen would push the article and the
	results below it. */
.e-con:is(.alovesinh-banner-hai-cot, .alovesinh-quy-trinh-banner) {
	--min-height: calc(100svh - var(--alv-h-header-compact));
	--padding-top: var(--alv-sp-4);
	--padding-bottom: var(--alv-sp-4);
	--justify-content: center;
}

/* The service pages and the blog share these rules and differ only in the space under the lead,
	which is why that one space is a variable. */
.alovesinh-banner-centred {
	text-align: center;
}

.alovesinh-banner-centred .alovesinh-heading {
	margin: var(--alv-sp-2c) 0 var(--alv-sp-2b);
}

.alovesinh-banner-centred .alovesinh-paragraph {
	width: min(100%, var(--alv-w-lead));
	margin: 0 auto var(--alv-banner-lead-gap, var(--alv-sp-3d));
	line-height: var(--alv-lh-loose);
}

.alovesinh-banner-lead-wide {
	--alv-banner-lead-gap: var(--alv-sp-4);
}

/* A heading already colours its em, but the opening headline paints two different words in two
	different colours, which one hook cannot do. */
.alovesinh-ink-brand {
	color: var(--alv-c-brand-text);
}

.alovesinh-ink-accent {
	color: var(--alv-c-accent-text);
}

.alovesinh-draw-light {
	fill: var(--alv-c-white);
}

.alovesinh-draw-line-light {
	stroke: var(--alv-c-white);
}

.alovesinh-draw-ground {
	fill: var(--alv-c-brand-wash);
}

.alovesinh-draw-line-rule {
	stroke: var(--alv-c-brand-wash);
}

.alovesinh-draw-main {
	fill: var(--alv-c-brand);
}

.alovesinh-draw-line-main {
	stroke: var(--alv-c-brand);
}

.alovesinh-draw-deep {
	fill: var(--alv-c-brand-deep);
}

.alovesinh-draw-line-deep {
	stroke: var(--alv-c-brand-deep);
}

.alovesinh-draw-mute {
	fill: var(--alv-c-text-muted-dark);
}

.alovesinh-draw-line-mute {
	stroke: var(--alv-c-text-muted-dark);
}

.alovesinh-draw-warm {
	fill: var(--alv-c-accent);
}

.alovesinh-draw-line-warm {
	stroke: var(--alv-c-accent);
}

.alovesinh-draw-done {
	fill: var(--alv-c-success);
}

.alovesinh-draw-line-done {
	stroke: var(--alv-c-success);
}

.alovesinh-draw-ink {
	fill: var(--alv-c-ink);
}

.alovesinh-draw-ink-soft {
	fill: var(--alv-c-text-muted);
}

.alovesinh-draw-warm-deep {
	fill: var(--alv-c-accent-strong);
}

.alovesinh-draw-soil {
	fill: var(--alv-c-soil);
}

.alovesinh-draw-soil-pale {
	fill: var(--alv-c-soil-pale);
}

.alovesinh-draw-dust {
	fill: var(--alv-c-dust);
}

.alovesinh-draw-line-rinse {
	stroke: var(--alv-c-rinse);
}

.alovesinh-draw-line-river {
	stroke: var(--alv-c-river);
}

.alovesinh-draw-line-river-pale {
	stroke: var(--alv-c-river-pale);
}

.alovesinh-draw-stop-soil-deep {
	stop-color: var(--alv-c-soil-deep);
}

.alovesinh-draw-stop-soil-dark {
	stop-color: var(--alv-c-soil-dark);
}

.alovesinh-draw-stop-stain-deep {
	stop-color: var(--alv-c-stain-deep);
}

.alovesinh-draw-stop-stain {
	stop-color: var(--alv-c-stain);
}

.alovesinh-draw-stop-rinse-pale {
	stop-color: var(--alv-c-rinse-pale);
}

.alovesinh-draw-stop-rinse {
	stop-color: var(--alv-c-rinse);
}

.alovesinh-draw-stop-linen {
	stop-color: var(--alv-c-linen);
}

.alovesinh-draw-stop-linen-shade {
	stop-color: var(--alv-c-linen-shade);
}

.alovesinh-draw-stop-sky-pale {
	stop-color: var(--alv-c-sky-pale);
}

.alovesinh-draw-stop-sky-soft {
	stop-color: var(--alv-c-sky-soft);
}

.alovesinh-draw-stop-orange-lightest {
	stop-color: var(--alv-c-orange-lightest);
}

.alovesinh-draw-stop-orange-light {
	stop-color: var(--alv-c-orange-light);
}

/* The article body is written as running prose in the editor, not assembled from widgets, so the
	whole typographic contract has to live on one class the editor's own text widget can wear. */
.alovesinh-prose h2 {
	margin: var(--alv-sp-5) 0 var(--alv-gap-heading);
	font-size: clamp(var(--alv-fs-5), var(--alv-fs-grow-0a), var(--alv-fs-6));
}

.alovesinh-prose h2:first-child {
	margin-top: 0;
}

.alovesinh-prose h3 {
	margin: var(--alv-sp-4) 0 var(--alv-sp-2);
}

.alovesinh-prose p {
	margin-bottom: var(--alv-sp-3);
	font-size: var(--alv-fs-3b);
	line-height: var(--alv-lh-prose);
}

.alovesinh-prose ul {
	display: flex;
	flex-direction: column;
	gap: var(--alv-sp-2);
	margin-bottom: var(--alv-sp-4);
	padding: 0;
	list-style: none;
}

/* Room on the left for the disc, which is positioned rather than laid out: a writer types plain
	list items in the editor and never a marker, so the tick has to be drawn by the stylesheet.
	Bullet lists only: an ordered list keeps its numbers and would print a tick beside each one. */
.alovesinh-prose ul > li {
	--alv-prose-disc: var(--alv-sp-3);
	--alv-prose-tick: var(--alv-sp-2);
	position: relative;
	padding-left: var(--alv-sp-4);
	font-size: var(--alv-fs-3);
	line-height: var(--alv-lh-body);
	color: var(--alv-c-text-2);
}

.alovesinh-prose ul > li::before {
	content: '';
	position: absolute;
	top: calc((1lh - var(--alv-prose-disc)) / 2);
	left: 0;
	width: var(--alv-prose-disc);
	height: var(--alv-prose-disc);
	border-radius: var(--alv-r-circle);
	background: var(--alv-c-brand-tint);
}

/* The source design's own tick, painted through a mask so the colour stays the token's: two turned
	borders only approximate that polyline. */
.alovesinh-prose ul > li::after {
	content: '';
	position: absolute;
	top: calc((1lh - var(--alv-prose-tick)) / 2);
	left: calc((var(--alv-prose-disc) - var(--alv-prose-tick)) / 2);
	width: var(--alv-prose-tick);
	height: var(--alv-prose-tick);
	background: var(--alv-c-brand-deep);
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E")
		center / contain no-repeat;
}

/* One shape for a quote however it reached the page: the widget prints the class, a writer's
	post content prints a bare blockquote. Written twice, the two drift the day one is tuned.
	The rule and the wash stay variables so the widget's colour boxes still repaint them. */
.alovesinh-blockquote,
.alovesinh-prose blockquote {
	margin: var(--alv-sp-4) 0;
	padding: var(--alv-sp-3) var(--alv-sp-3) var(--alv-sp-3) var(--alv-sp-4);
	border-left: var(--alv-bd-bold) solid var(--alv-quote-rule, var(--alv-c-brand));
	border-radius: var(--alv-r-3);
	font-size: var(--alv-fs-4);
	line-height: var(--alv-lh-relaxed);
	color: var(--alv-c-ink);
	background: var(--alv-quote-bg, var(--alv-c-brand-wash));
}

/* The editor's text block ends the article, and its closing paragraph keeps a bottom margin that
	the widget boundary stops from collapsing into the share row's own, so the two stack up. */
.alovesinh-prose > :first-child > :last-child {
	margin-bottom: 0;
}

/* Elementor zeroes a figure's margin at 0-4-1 in every widget but its own content widgets; this widget
	prints the post body too, so the same ancestry takes the block spacing back by loading after it. */
.elementor .alovesinh-prose .elementor-widget.elementor-widget-alovesinh-post-content figure {
	margin: 0 0 var(--alv-sp-4);
}

/* Cropped to the design's frame rather than left at whatever the writer uploaded: a portrait
	photograph dropped into the editor runs the column a third of a screen longer and pushes
	everything under it out of step with the rail standing beside it. */
.alovesinh-prose figure img {
	display: block;
	width: 100%;
	aspect-ratio: var(--alv-ratio-cover);
	object-fit: cover;
	border-radius: var(--alv-r-3);
}

.alovesinh-prose figcaption {
	margin-top: var(--alv-sp-2);
	font-size: var(--alv-fs-2);
	text-align: center;
	color: var(--alv-c-text-muted);
}

/* The frame clips, which is the only thing that keeps the head row's tint inside the rounded
	corner instead of squaring it off. The block editor's own table wrapper is named alongside it:
	a writer inserts a table block and never a div, and the frame has to find it either way. */
.alovesinh-prose-table,
.alovesinh-prose .wp-block-table,
.alovesinh-table-plain-frame {
	overflow: auto hidden;
	margin-bottom: var(--alv-sp-4);
	border: var(--alv-bd-hairline) solid var(--alv-table-border, var(--alv-c-border));
	border-radius: var(--alv-r-3);
}

/* The caution box of an article. The mark is drawn rather than marked up for the same reason the
	list tick is: a writer types a paragraph inside a group block and no icon comes with it. */
.alovesinh-prose-note {
	display: flex;
	gap: var(--alv-sp-2);
	margin-bottom: var(--alv-sp-4);
	padding: var(--alv-sp-3);
	border: var(--alv-bd-hairline) solid var(--alv-c-warning-edge);
	border-radius: var(--alv-r-3);
	background: var(--alv-c-warning-pale);
}

/* Masked rather than printed as a glyph, because the design's mark is an open triangle on the 24
	grid and no character carries that shape. The mask paints the token colour through it, so the
	caution ink stays the one the palette names. */
.alovesinh-prose-note::before {
	content: '';
	flex-shrink: 0;
	width: var(--alv-sp-3a);
	height: var(--alv-sp-3a);
	background: var(--alv-c-warning-text);
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z'/%3E%3Cline x1='12' y1='9' x2='12' y2='13'/%3E%3Cline x1='12' y1='17' x2='12.01' y2='17'/%3E%3C/svg%3E")
		center / contain no-repeat;
}

/* A step down from the running copy around it: the caution is an aside, and set at the body size
	it reads as another paragraph of the article rather than a note pinned beside it. */
.alovesinh-prose-note p {
	font-size: var(--alv-fs-3);
	line-height: var(--alv-lh-relaxed);
	color: var(--alv-c-text-2);
}

/* The editor wraps quoted text in a paragraph, which would otherwise take the running-prose size
	and leave the quote set a step smaller than the box it was pulled out of. */
.alovesinh-prose blockquote p {
	margin: 0;
	font-size: inherit;
	line-height: inherit;
}

.alovesinh-prose-note p:last-child {
	margin-bottom: 0;
}

.alovesinh-grid-five .alovesinh-card p {
	font-size: var(--alv-fs-3);
	line-height: var(--alv-lh-body);
}

.alovesinh-prose table {
	width: 100%;
	border-collapse: collapse;
}

/* The design rules a table across in one weight only. The block editor's own sheet loads after this
	one, boxing every cell and laying a heavy rule under the head, so `table` stands in these three
	selectors to outweigh it. */
.alovesinh-prose table thead {
	border: 0;
}

.alovesinh-prose table th {
	padding: var(--alv-sp-2) var(--alv-sp-3);
	border: 0;
	border-bottom: var(--alv-bd-hairline) solid var(--alv-c-border);
	font-size: var(--alv-fs-2);
	font-weight: var(--alv-fw-semibold);
	letter-spacing: var(--alv-tr-wide-1);
	text-align: left;
	text-transform: uppercase;
	color: var(--alv-c-text-muted);
	background: var(--alv-c-bg-light);
}

.alovesinh-prose table td {
	padding: var(--alv-sp-2b) var(--alv-sp-3);
	border: 0;
	border-bottom: var(--alv-bd-hairline) solid var(--alv-c-border);
	font-size: var(--alv-fs-3);
	color: var(--alv-c-text-2);
}

.alovesinh-prose tbody tr:last-child td {
	border-bottom: 0;
}

/* A panel that hangs below the bar spans the whole content frame, so the frame has to be the
	element it measures from. Elementor makes every widget wrapper relative, which would otherwise
	trap the panel inside the width of the menu itself. */
.alovesinh-anchor {
	position: relative;
}

.alovesinh-anchor .elementor-widget-alovesinh-mega-menu {
	position: static;
}

.alovesinh-quy-trinh-banner {
	--alv-banner-lead-gap: var(--alv-sp-3a);
}

.alovesinh-quy-trinh-banner .alovesinh-paragraph {
	font-size: var(--alv-fs-3a);
}

:where(.alovesinh-quy-trinh-banner, .alovesinh-quy-trinh-lien-he, .alovesinh-banner-chu)
	.alovesinh-button-row
	.alovesinh-btn {
	flex: 1 1 100%;
	justify-content: center;
}

/* The frame scrolls rather than the table shrinking: three columns of wording squeezed into a
	phone width wrap to two lines a cell and the rows stop reading across. */
.alovesinh-prose table,
.alovesinh-table-plain {
	min-width: var(--alv-w-table-min);
}

/* The table's own drawn marks and ticks carry strokes; icons picked in the builder are filled glyphs. */
.alovesinh-so-sanh-3-cot .alovesinh-table-compare-cell-no svg {
	stroke-width: var(--alv-stroke-5);
}

.alovesinh-so-sanh-3-cot .alovesinh-table-compare-cell-yes svg {
	stroke-width: var(--alv-stroke-6);
}

.alovesinh-bang-gia-3-goi .alovesinh-price-tier-features svg,
.alovesinh-danh-gia-nen-toi .alovesinh-rating-line-verified svg {
	stroke-linejoin: round;
}

.alovesinh-thong-so-ky-thuat .alovesinh-btn {
	--alv-btn-icon: var(--alv-fs-3a);
}

.alovesinh-tang-tai-lieu .alovesinh-form-submit {
	--alv-btn-icon: var(--alv-fs-4);
}

.alovesinh-bao-hanh-3-lop .alovesinh-list-lead-item .alovesinh-icon-box {
	--alv-icon-size: var(--alv-sp-3a);
}

/* The rule under the bar is drawn inside it rather than as a border, which would add its width to the
	space below the row and leave less above it than below. The row is centred in the bar's floor height
	for the same reason: a floor taller than the row would otherwise fall entirely under it. */
.alovesinh-dau-trang {
	--alv-dau-trang-min-height: var(--alv-h-header-compact);
	box-shadow: inset 0 calc(-1 * var(--alv-bd-hairline)) 0 0 var(--alv-c-border);
}

/* The bar is the one block that does not take the section padding: its space above and below the row
	is the floor height less the row, split evenly by the centring, so the floor is its only source. */
.e-con.alovesinh-dau-trang {
	--padding-top: 0px;
	--padding-bottom: 0px;
	justify-content: center;
}

/* The header row fills its frame to the pixel; at the 19px floor the call to action gives its width
	back from its own sides, or every menu label beside it breaks onto two lines. */
.alovesinh-dau-trang .alovesinh-btn {
	--alv-btn-pad-x: var(--alv-sp-2);
	white-space: nowrap;
}

.alovesinh-chan-trang {
	--alv-block-accent: var(--alv-c-white);
	--alv-block-accent-small: var(--alv-c-river);
	--alv-block-text: var(--alv-c-on-dark);
	--alv-footer-quickbar-columns: 1;
	--alv-footer-quickbar-rows: 3;
	--alv-footer-quickbar-row-size: calc(
		(var(--alv-fs-3a) + 2 * var(--alv-fs-2)) * var(--alv-lh-copy) + 2 * var(--alv-sp-1a)
	);
	--alv-footer-quickbar-rows-total: calc(
		var(--alv-footer-quickbar-row-size) * var(--alv-footer-quickbar-rows)
	);
	--alv-footer-quickbar-block-size: calc(
		var(--alv-footer-quickbar-rows-total) + 2 * var(--alv-sp-1a) + 2 * var(--alv-bd-hairline)
	);
	--alv-footer-content-gap: var(--alv-sp-3e);
	--alv-footer-quickbar-radius: var(--alv-r-3);
	--alv-footer-tier-one-columns: minmax(0, 1fr);
	--alv-footer-tier-two-columns: minmax(0, 1fr);
	--alv-footer-service-columns: minmax(0, 1fr);
	--alv-footer-major-gap: var(--alv-sp-3b);
	--alv-footer-service-gap: var(--alv-sp-3b);
	--alv-footer-section-pad: var(--alv-sp-4);
	position: relative;
	color: var(--alv-c-on-dark);
	background: var(--alv-c-brand-deepest);
}

/* The quick bar straddles the footer's top edge with its middle on that edge: it climbs back over
	the section padding and half its own height while staying in the flow, so the rows below it
	keep their distance to it on every screen. The widget class outranks Elementor's own
	.elementor-widget.elementor-widget reset, which prints later and would zero that distance. */
.alovesinh-chan-trang .alovesinh-chan-trang-thanh-nhanh.elementor-widget {
	width: min(var(--alv-w-footer-quickbar), calc(100% - 2 * var(--alv-w-gutter)));
	max-width: none;
	margin-top: calc(
		-1 * (var(--alv-section-pad-block) + var(--alv-footer-quickbar-block-size) / 2)
	);
	margin-inline: auto;
	margin-bottom: var(--alv-footer-content-gap);
}

.alovesinh-chan-trang-thanh-nhanh .alovesinh-contact-actions {
	width: 100%;
}

.alovesinh-chan-trang
	:is(.alovesinh-chan-trang-luoi, .alovesinh-chan-trang-tang-duoi, .alovesinh-chan-trang-cuoi) {
	width: min(100%, calc(var(--alv-w-footer) - 2 * var(--alv-w-gutter)));
	margin-inline: auto;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi {
	--alv-footer-item-row-size: auto;
	--alv-footer-item-row-gap: var(--alv-sp-2);
	--alv-footer-item-pad-block: 0px;
	--alv-footer-item-pad-inline: 0px;
	--alv-footer-body-size: var(--alv-fs-2a);
	--alv-footer-body-line: var(--alv-lh-copy);
	display: grid;
	grid-template-columns: var(--alv-footer-tier-one-columns);
	grid-template-rows: minmax(var(--alv-sp-3b), max-content) auto;
	grid-auto-rows: auto;
	column-gap: var(--alv-footer-major-gap);
	row-gap: var(--alv-sp-2c);
	align-content: start;
	align-items: stretch;
}

.alovesinh-chan-trang-tang-duoi > .e-con {
	min-width: 0;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi > .e-con {
	display: grid;
	grid-row: span 2;
	grid-template-columns: minmax(0, 1fr);
	grid-template-rows: subgrid;
	row-gap: inherit;
	align-items: start;
	min-width: 0;
	padding: 0;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi > .e-con > .elementor-widget {
	min-width: 0;
	margin: 0;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi > .e-con > .elementor-widget:first-child {
	align-self: start;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi :is(.alovesinh-heading, .alovesinh-brand-logo) {
	margin: 0;
}

.alovesinh-chan-trang .alovesinh-brand-logo {
	--alv-brand-mark-size: var(--alv-sp-3b);
	--alv-initial-size: var(--alv-brand-mark-size);
}

.alovesinh-chan-trang .alovesinh-brand-logo-name {
	font-size: var(--alv-fs-3a);
	line-height: var(--alv-lh-base);
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	:is(.alovesinh-business-details, .alovesinh-contact-actions-grid, .alovesinh-list-link) {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	grid-template-rows: repeat(var(--alv-footer-item-count, 1), var(--alv-footer-item-row-size));
	align-content: start;
	row-gap: var(--alv-footer-item-row-gap);
	width: 100%;
	margin: 0;
	padding: 0;
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	:is(
		.alovesinh-business-details > .alovesinh-list-check-item,
		.alovesinh-contact-actions-grid > .alovesinh-contact-actions-action,
		.alovesinh-list-link > .alovesinh-list-link-item
	) {
	box-sizing: border-box;
	min-width: 0;
	min-height: 0;
	border-radius: 0;
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	:is(
		.alovesinh-business-details > .alovesinh-list-check-item,
		.alovesinh-contact-actions-action,
		.alovesinh-list-link > .alovesinh-list-link-item > a
	) {
	box-sizing: border-box;
	min-width: 0;
	min-height: 0;
	padding: 0;
	font-size: var(--alv-footer-body-size);
	line-height: var(--alv-footer-body-line);
	color: var(--alv-c-on-dark);
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-business-details {
	--alv-check-size: var(--alv-sp-2d);
	--alv-check-offset: var(--alv-sp-0c);
	--alv-check-color: var(--alv-c-river);
	grid-template-columns: var(--alv-check-size) max-content minmax(0, 1fr);
	column-gap: var(--alv-sp-1a);
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	.alovesinh-business-details
	> .alovesinh-list-check-item {
	display: grid;
	grid-column: 1 / -1;
	grid-template-columns: subgrid;
	column-gap: inherit;
	align-items: start;
	font-size: var(--alv-fs-2);
	line-height: var(--alv-lh-base);
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	.alovesinh-business-details
	.alovesinh-list-check-lead {
	grid-column: 2;
	white-space: nowrap;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-business-details-value {
	grid-column: 3;
	min-width: 0;
	overflow-wrap: anywhere;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-contact-actions {
	--alv-card-pad: 0px;
	--alv-card-bg: transparent;
	--alv-card-bg-hover: var(--alv-card-bg);
	--alv-card-border: transparent;
	--alv-card-border-hover: var(--alv-card-border);
	--alv-card-shadow: none;
	--alv-card-shadow-hover: var(--alv-card-shadow);
	display: block;
	height: auto;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: var(--alv-card-bg);
	box-shadow: var(--alv-card-shadow);
	transform: none;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-contact-actions-action {
	align-items: center;
	border: 0;
	border-radius: var(--alv-r-2);
	background: transparent;
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-contact-actions-icon {
	--alv-icon-box: var(--alv-sp-4a);
	--alv-icon-size: var(--alv-sp-3);
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-contact-actions-title {
	font-size: var(--alv-footer-body-size);
	color: var(--alv-c-white);
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	.alovesinh-contact-actions-action-hotline
	.alovesinh-contact-actions-title {
	font-size: var(--alv-fs-4);
	color: var(--alv-c-warning);
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-contact-actions-description {
	color: var(--alv-c-on-dark);
}

.alovesinh-chan-trang-chinh-sach .alovesinh-list-link {
	font-size: var(--alv-fs-2);
	line-height: var(--alv-lh-copy);
}

.alovesinh-chan-trang-chinh-sach .alovesinh-list-link-item a {
	font-weight: var(--alv-fw-semibold);
}

.alovesinh-chan-trang .alovesinh-chan-trang-luoi .alovesinh-list-link-item > a {
	display: flex;
	align-items: center;
	width: 100%;
	border-radius: inherit;
	text-decoration: none;
	overflow-wrap: anywhere;
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	:is(
		.alovesinh-contact-actions-action,
		.alovesinh-contact-actions-title,
		.alovesinh-list-link-item > a
	) {
	transition:
		color var(--alv-dur-2) ease,
		transform var(--alv-dur-2) ease;
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	:is(.alovesinh-contact-actions-action, .alovesinh-list-link-item > a):hover {
	color: var(--alv-c-river);
	transform: translateX(var(--alv-sp-0c));
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	.alovesinh-contact-actions-action:hover
	.alovesinh-contact-actions-title {
	color: var(--alv-c-river);
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-luoi
	:is(.alovesinh-contact-actions-action, .alovesinh-list-link-item > a):focus-visible {
	outline: var(--alv-bd-heavy) solid var(--alv-c-warning);
	outline-offset: var(--alv-sp-0c);
}

.alovesinh-chan-trang .alovesinh-chan-trang-tang-duoi {
	display: grid;
	grid-template-columns: var(--alv-footer-tier-two-columns);
	gap: var(--alv-footer-major-gap);
	margin-top: var(--alv-footer-major-gap);
	padding: var(--alv-footer-section-pad) 0;
	border-top: var(--alv-bd-hairline) solid var(--alv-c-glass-rule);
}

.alovesinh-chan-trang .alovesinh-chan-trang-tang-duoi .alovesinh-heading {
	margin: 0 0 var(--alv-sp-2c);
	padding-top: var(--alv-sp-2c);
}

.alovesinh-chan-trang-tang-duoi .alovesinh-list-link {
	gap: var(--alv-sp-2);
}

.alovesinh-chan-trang .alovesinh-chan-trang-tang-duoi .alovesinh-list-link-item > a {
	min-height: 0;
	padding: 0;
	font-size: var(--alv-fs-2);
	line-height: var(--alv-lh-base);
	color: var(--alv-c-on-dark);
	text-decoration: none;
	transition:
		color var(--alv-dur-2) ease,
		transform var(--alv-dur-2) ease;
}

.alovesinh-chan-trang-tang-duoi .alovesinh-list-link-item > a:hover {
	color: var(--alv-c-river);
	transform: translateX(var(--alv-sp-0c));
}

.alovesinh-chan-trang-danh-muc {
	display: grid;
	grid-template-columns: var(--alv-footer-service-columns);
	gap: var(--alv-footer-service-gap);
}

.alovesinh-chan-trang-danh-muc > .elementor-element {
	min-width: 0;
}

.alovesinh-chan-trang-tang-duoi .alovesinh-chan-trang-danh-muc .alovesinh-list-link {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--alv-sp-3b);
}

.alovesinh-chan-trang-danh-muc .alovesinh-list-link > .alovesinh-list-link-item {
	display: grid;
	gap: var(--alv-sp-1a);
	align-content: start;
}

.alovesinh-chan-trang-tang-duoi
	.alovesinh-chan-trang-danh-muc
	.alovesinh-list-link
	> .alovesinh-list-link-item
	> a {
	min-height: 0;
	padding: 0 0 0 var(--alv-sp-1a);
	border-left: var(--alv-bd-thick) solid var(--alv-c-river);
	margin-bottom: var(--alv-sp-1a);
	font-size: var(--alv-fs-2);
	font-weight: var(--alv-fw-bold);
	line-height: var(--alv-lh-copy);
	letter-spacing: var(--alv-tr-wide-1);
	text-transform: uppercase;
	color: var(--alv-c-river);
}

.alovesinh-chan-trang-danh-muc :is(.sub-menu, .alovesinh-list-link-children) {
	display: grid;
	gap: var(--alv-sp-2);
	align-self: start;
	align-content: start;
	margin: 0;
	padding: 0;
	font-size: var(--alv-fs-2);
	line-height: var(--alv-lh-copy);
	list-style: none;
}

.alovesinh-chan-trang-danh-muc
	.alovesinh-list-link
	> .alovesinh-list-link-item:not(:last-child)
	> :is(.sub-menu, .alovesinh-list-link-children) {
	margin-bottom: var(--alv-sp-2c);
}

.alovesinh-chan-trang-thong-tin {
	margin-bottom: var(--alv-sp-3b);
}

.alovesinh-chan-trang .alovesinh-chan-trang-tai-nguyen-tieu-de .alovesinh-heading {
	margin-bottom: var(--alv-sp-2c);
}

.alovesinh-chan-trang-chinh-sach {
	align-self: start;
	padding: var(--alv-sp-2c);
	border: var(--alv-bd-hairline) solid var(--alv-c-glass-rule);
	border-radius: var(--alv-r-2);
	background: var(--alv-c-glass-trace);
}

.alovesinh-chan-trang-chinh-sach-tieu-de {
	display: flex;
	align-items: center;
	gap: var(--alv-sp-1a);
	margin-bottom: var(--alv-sp-2c);
}

.alovesinh-chan-trang-chinh-sach-tieu-de > .elementor-element {
	width: auto;
}

.alovesinh-chan-trang .alovesinh-chan-trang-chinh-sach-tieu-de .alovesinh-heading {
	margin: 0;
	padding: 0;
	color: var(--alv-c-warning);
}

.alovesinh-chan-trang
	.alovesinh-chan-trang-chinh-sach-bieu-tuong.elementor-view-default
	.elementor-icon {
	display: flex;
	font-size: var(--alv-sp-2d);
	color: var(--alv-c-warning);
}

.alovesinh-chan-trang-cuoi {
	border-top: var(--alv-bd-hairline) solid var(--alv-c-glass-rule);
}

.alovesinh-chan-trang-cuoi .alovesinh-site-credit {
	font-size: var(--alv-fs-2);
}

.alovesinh-quy-trinh-lien-he .alovesinh-grid {
	--alv-grid-gap: var(--alv-sp-2c);
	--alv-grid-width: var(--alv-w-contact-grid);
	--alv-stacked-label-gap: var(--alv-sp-1);
	--alv-stacked-label-tracking: var(--alv-tr-label-lg);
	--alv-stacked-label-size: var(--alv-fs-3b);
	--alv-stacked-label-line: var(--alv-lh-snug);
}

.alovesinh-bai-viet-than {
	--alv-split-cols: minmax(0, 1fr) var(--alv-w-article-aside);
	--alv-split-gap-md: var(--alv-sp-5);
	--alv-split-align: start;
	justify-content: start;
	align-content: start;
}

.alovesinh-bai-viet-chia-se {
	border-top: var(--alv-bd-hairline) solid var(--alv-c-border);
}

.alovesinh-bai-viet-cot-phu {
	position: sticky;
	top: var(--alv-sticky-top);
}

.alovesinh-bai-viet-the-dat-lich {
	--alv-card-pad: var(--alv-sp-3b);
	--alv-card-bg: var(--alv-scene-booking-card);
	--alv-card-border: transparent;
	--alv-card-title: var(--alv-c-white);
	--alv-card-text: var(--alv-c-on-dark);
}

.alovesinh-bai-viet-the-dat-lich .alovesinh-btn {
	justify-content: center;
}

.alovesinh-bang-lien-he .alovesinh-cta-row {
	margin-top: var(--alv-sp-3);
}

.alovesinh-banner-hinh {
	aspect-ratio: auto;
}

.alovesinh-banner-hai-cot {
	--alv-banner-gap: var(--alv-sp-4);
	--alv-banner-chu-width: 100%;
	--alv-banner-hinh-width: 100%;
}

/* The one section padding, read by .elementor > .e-con at the top of this sheet. A device box in
	Elementor prints only as a max-width query, so the value lives here and steps up once at the tablet
	breakpoint further down. */
.elementor {
	--alv-section-pad-block: var(--alv-sp-6);
	--alv-quy-trinh-buoc-gap: var(--alv-sp-3);
	--alv-bai-noi-bat-offset: 0px;
}

.alovesinh-banner-the {
	inset: auto;
	background: var(--alv-scene-warm);
	box-shadow: 0 var(--alv-sp-2c) var(--alv-sp-4) 0 var(--alv-c-ink-cloud);
}

.alovesinh-khuyen-mai-dem-nguoc-the {
	--alv-km-the-pad-block: var(--alv-sp-4);
	--alv-km-the-pad-inline: var(--alv-sp-4);
	--alv-km-noi-dung-width: 100%;
	--alv-km-dong-ho-width: 100%;
	--alv-badge-bg: var(--alv-c-glass-border);
	--alv-badge-text: var(--alv-c-white);
	--alv-badge-dot: var(--alv-c-white);
	--alv-pill-bg: var(--alv-c-glass-border);
	--alv-pill-text: var(--alv-c-white);
	color: var(--alv-c-white);
	background: var(--alv-scene-countdown-card);
	box-shadow: var(--alv-sh-lift);
}

.alovesinh-khuyen-mai-dem-nguoc-the::after {
	content: '';
	position: absolute;
	inset: 0;
	background: var(--alv-scene-countdown-glow);
	pointer-events: none;
}

.alovesinh-cau-chuyen-mot-dem-moc,
.alovesinh-cau-chuyen-mot-dem-ket {
	--alv-block-accent: var(--alv-c-orange-soft);
	--alv-block-accent-small: var(--alv-c-orange-soft);
}

.alovesinh-cau-chuyen-mot-dem-moc {
	--alv-split-gap-md: var(--alv-sp-3);
}

.alovesinh-cau-chuyen-mot-dem-ket {
	--alv-cau-chuyen-ket-width: min(100%, var(--alv-w-grid));
	padding-top: var(--alv-sp-5c);
	border-top: var(--alv-bd-hairline) solid var(--alv-c-glass-rule);
}

.alovesinh-cau-chuyen-mot-dem-ket .alovesinh-btn {
	--alv-btn-icon: var(--alv-fs-4);
	padding: var(--alv-sp-2c) var(--alv-sp-3e);
}

.alovesinh-giac-ngu-yen,
.alovesinh-khuyen-mai-50-suat {
	--alv-block-accent: var(--alv-c-accent-text);
}

.alovesinh-giac-ngu-yen {
	background-color: var(--alv-c-bg-warm);
}

/* One ground for the block and the ticket's notches: the notches read as holes only while they match it. */
.alovesinh-khuyen-mai-50-suat {
	--alv-khuyen-mai-nen: var(--alv-c-white);
	background-color: var(--alv-khuyen-mai-nen);
}

/* The fifty-slot ticket keeps the source design's 16px sides on every screen; its space above and below
	is the section padding like every other block's. */
.e-con.alovesinh-khuyen-mai-50-suat {
	--padding-left: var(--alv-w-gutter-tight);
	--padding-right: var(--alv-w-gutter-tight);
}

/* The four story photographs open wide on a phone and take the source design's taller cut from the
	tablet breakpoint, where they sit beside their copy. */
.alovesinh-cau-chuyen-mot-dem .alovesinh-image {
	aspect-ratio: var(--alv-ratio-card);
}

.alovesinh-bang-gia-loai-nem-khung {
	--alv-box-pad: 0;
	--alv-box-radius: var(--alv-r-4);
	box-shadow: var(--alv-sh-2);
}

/* A tighter gutter gives the spec table the 16px it needs to keep each row on one line; the head steps back to 24. */
.alovesinh-thong-so-ky-thuat {
	--alv-thong-so-pad-inline: var(--alv-w-gutter-tight);
	--alv-thong-so-head-inline: var(--alv-sp-1a);
}

.alovesinh-cau-tao-nem {
	--alv-cau-tao-pad-inline: var(--alv-w-gutter-tight);
	--alv-cau-tao-head-inline: var(--alv-sp-1a);
}

.alovesinh-thong-so-ky-thuat-tai-lieu {
	--alv-spec-sheet-max: var(--alv-w-sheet);
	--alv-thong-so-doc-inline: max(var(--alv-sp-1a), (100% - var(--alv-spec-sheet-max)) / 2);
	width: auto;
	padding: var(--alv-sp-4) var(--alv-sp-4a);
	background: var(--alv-c-ink);
}

.alovesinh-phan-loai-khung-hinh {
	display: grid;
	place-items: center;
	aspect-ratio: var(--alv-ratio-classic);
	background: var(--alv-scene-warm);
}

.alovesinh-phan-loai-luu-y {
	--alv-paragraph-color: var(--alv-c-ink);
	--alv-paragraph-size: var(--alv-fs-2);
	padding: var(--alv-sp-1c) var(--alv-sp-2b);
	border-left: var(--alv-bd-heavy) solid var(--alv-c-warning);
	background: var(--alv-c-warning-pale);
}

.alovesinh-logo-loi-khen-luoi {
	--alv-grid-cols-sm: 2;
	--alv-grid-gap: var(--alv-sp-1);
	--alv-grid-width: 100%;
	--alv-box-pad: var(--alv-sp-2);
	--alv-box-radius: var(--alv-r-4);
	background: var(--alv-c-bg-light);
	box-shadow: var(--alv-sh-1);
}

.alovesinh-danh-muc-dich-vu-tu-van {
	--alv-box-pad: var(--alv-sp-4);
	--alv-box-radius: var(--alv-r-4);
	--text-align: center;
	background: var(--alv-c-bg-light);
}

.alovesinh-khach-tieu-bieu .alovesinh-grid-pair {
	--alv-grid-cols-sm: 2;
}

.alovesinh-dat-lich-nhanh-the {
	--alv-dat-lich-the-pad: var(--alv-sp-3);
	border: var(--alv-bd-hairline) solid var(--alv-c-border);
	background: var(--alv-scene-quick-booking);
	box-shadow: var(--alv-sh-2);
}

.alovesinh-tang-tai-lieu .alovesinh-split {
	--alv-tang-tai-lieu-split-width: min(100%, var(--alv-w-split));
	margin-inline: auto;
}

.alovesinh-tang-tai-lieu-danh-gia {
	--alv-box-pad: var(--alv-sp-2b) var(--alv-sp-2c);
	--alv-box-radius: var(--alv-r-2);
}

.alovesinh-bao-hanh-3-lop .alovesinh-grid {
	--alv-grid-cols-md: 1;
}

.alovesinh-bao-hanh-3-lop-hop-dong {
	--alv-box-pad: var(--alv-sp-3a) var(--alv-sp-3d);
	--alv-bao-hanh-hop-dong-width: min(100%, var(--alv-w-grid));
}

/* Isolated so the disc at z-index -1 paints over the card's own ground and under every child. */
.alovesinh-khuyen-mai-nem-sofa-the {
	--alv-khuyen-mai-the-width: min(100%, var(--alv-w-grid));
	isolation: isolate;
	padding: var(--alv-sp-4) var(--alv-sp-3b);
	border: var(--alv-bd-hairline) solid var(--alv-c-border);
	background: var(--alv-c-white);
	box-shadow: 0 var(--alv-sp-3e) var(--alv-sp-5c) calc(-1 * var(--alv-sp-3))
		var(--alv-c-brand-deepest-glow);
}

.alovesinh-khuyen-mai-nem-sofa-the::before {
	content: '';
	position: absolute;
	top: calc(-1 * var(--alv-sp-7a));
	right: calc(-1 * var(--alv-sp-7a));
	z-index: -1;
	width: var(--alv-w-promo-disc);
	height: var(--alv-w-promo-disc);
	border-radius: var(--alv-r-circle);
	background: var(--alv-scene-promo-disc);
	pointer-events: none;
}

.alovesinh-khuyen-mai-nem-sofa-the .alovesinh-btn {
	--alv-btn-icon: var(--alv-fs-4a);
	justify-content: center;
	width: 100%;
}

.alovesinh-khuyen-mai-nem-sofa-hinh {
	background: var(--alv-scene-promo-photo);
}

.alovesinh-dat-lich-day-du {
	--alv-glow-at: var(--alv-pos-center);
	--alv-glow-fade: var(--alv-stop-glow-fade);
	--alv-glow-one-inset: calc(-1 * var(--alv-sp-7b)) auto auto calc(-1 * var(--alv-sp-7b));
	--alv-glow-one-size: var(--alv-w-glow);
	--alv-glow-one: var(--alv-c-brand-halo);
	--alv-glow-two-inset: auto calc(-1 * var(--alv-sp-7b)) calc(-1 * var(--alv-sp-7b)) auto;
	--alv-glow-two-size: var(--alv-w-glow);
	--alv-glow-two: var(--alv-c-accent-haze);
}

.alovesinh-dat-lich-day-du .alovesinh-split {
	--alv-dat-lich-split-width: min(100%, var(--alv-w-grid));
}

.alovesinh-dat-lich-day-du-bang-chung {
	padding: var(--alv-sp-3);
	border: var(--alv-bd-hairline) solid var(--alv-c-glass-seam);
	background: var(--alv-c-glass-film);
}

.alovesinh-dat-lich-day-du-khach {
	border-bottom: var(--alv-bd-hairline) solid var(--alv-c-glass-seam);
}

.alovesinh-quy-trinh-4-buoc .alovesinh-grid {
	--alv-grid-gap: var(--alv-sp-4);
	--alv-grid-gap-md: var(--alv-sp-4b) var(--alv-sp-3b);
}

.alovesinh-ly-do-tin-tuong {
	--alv-wash-accent: var(--alv-mix-wash-accent-soft);
}

/* Drawn inside the block, not as a border: a border adds its width to the space above the content
	only, and the block would open lower than it closes. */
.alovesinh-danh-gia-nen-toi,
.alovesinh-bang-chung-anh {
	box-shadow: inset 0 var(--alv-bd-hairline) 0 0 var(--alv-c-glass-wisp);
}

.alovesinh-bang-chung-anh-ket .alovesinh-btn {
	--alv-btn-icon: var(--alv-fs-3a);
	color: var(--alv-c-white);
	background: var(--alv-c-brand-strong);
	box-shadow: none;
}

/* Stamps and band sit in the flow: pinned in px, the stamp covered the band's words once the column narrowed.
	Padding and nowrap because Elementor zeroes a widget's bottom margin and wraps a container on a phone. */
.alovesinh-bao-hanh-vang-hinh {
	flex-wrap: nowrap;
	row-gap: var(--alv-sp-2);
	width: min(100%, var(--alv-w-figure));
	aspect-ratio: var(--alv-ratio-warranty-figure);
	margin-inline: auto;
	padding-bottom: var(--alv-sp-3e);
}

.alovesinh-bao-hanh-vang-hinh .alovesinh-frame {
	inset: 0;
	background-color: var(--alv-c-brand-deep);
	box-shadow: 0 var(--alv-sp-3e) var(--alv-sp-5c) var(--alv-c-brand-deepest-shade);
}

.alovesinh-bao-hanh-vang-hinh .alovesinh-frame::before {
	content: '';
	position: absolute;
	inset: 0;
	background: var(--alv-scrim-warranty-frame);
	pointer-events: none;
}

.alovesinh-bao-hanh-vang-hinh .alovesinh-frame::after {
	content: '';
	position: absolute;
	top: var(--alv-sp-4a);
	right: var(--alv-inset-dot-pattern);
	width: var(--alv-w-dot-pattern);
	height: var(--alv-sp-5a);
	background-image: radial-gradient(
		circle,
		var(--alv-c-warning) var(--alv-r-dot),
		transparent var(--alv-r-dot)
	);
	background-size: var(--alv-sp-2b) var(--alv-sp-2b);
	opacity: var(--alv-op-dot-pattern);
	pointer-events: none;
}

.alovesinh-khuyen-mai-50-suat-phieu {
	--alv-block-title: var(--alv-c-white);
	--alv-block-text: var(--alv-c-on-dark);
	--alv-pill-text: var(--alv-c-white);
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 0;
	overflow: hidden;
	width: min(100%, var(--alv-w-offer-ticket));
	margin: 0 auto;
	padding: 0;
	border-radius: var(--alv-r-4);
	background: var(--alv-scene-booking-card);
	box-shadow: var(--alv-sh-ticket);
}

.alovesinh-khuyen-mai-50-suat-cuong {
	position: relative;
	align-items: center;
	justify-content: center;
	gap: var(--alv-sp-2c);
	padding: var(--alv-sp-5a) var(--alv-sp-3d);
	text-align: center;
	background: var(--alv-c-glass-tint);
}

.alovesinh-khuyen-mai-50-suat-than {
	position: relative;
	justify-content: space-between;
	gap: var(--alv-sp-4);
	min-height: var(--alv-h-offer-ticket);
	padding: var(--alv-sp-5a) var(--alv-sp-5);
	border-top: var(--alv-bd-thick) dashed var(--alv-c-glass-tear);
}

.e-con.alovesinh-khuyen-mai-50-suat-dem-nguoc {
	--flex-direction: row;
}

.alovesinh-khuyen-mai-50-suat-dem-nguoc {
	flex-wrap: wrap;
	align-items: center;
	gap: var(--alv-sp-2c) var(--alv-sp-3b);
	padding: var(--alv-sp-3) var(--alv-sp-3b);
	border-radius: var(--alv-r-3);
	background: var(--alv-c-glass-rule);
}

/* The class lays the two calls to action out itself: a builder grid container prints a device rule for
	every breakpoint, even with no device value set. The floor never exceeds the row, so a narrow phone
	keeps one column instead of overflowing. */
.alovesinh-khuyen-mai-50-suat-nut {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(var(--alv-w-offer-button-min), 100%), 1fr));
	justify-content: start;
	align-content: start;
	gap: var(--alv-sp-2);
	width: 100%;
	margin: 0;
	padding: 0;
}

.alovesinh-ban-giao-chu-dao .alovesinh-btn,
.alovesinh-danh-cho-ca-nha .alovesinh-btn {
	margin-top: var(--alv-sp-2);
}

.alovesinh-khuyen-mai-50-suat-nut .alovesinh-btn {
	--alv-btn-pad-y: 0px;
	--alv-btn-pad-x: var(--alv-sp-3);
	--alv-btn-radius: var(--alv-r-2a);
	--alv-btn-icon: var(--alv-fs-4a);
	justify-content: center;
	gap: var(--alv-sp-1c);
	width: 100%;
	min-height: var(--alv-sp-5b);
	font-weight: var(--alv-fw-extrabold);
}

.alovesinh-khuyen-mai-50-suat-nut .alovesinh-btn-primary {
	color: var(--alv-c-ink);
	background: var(--alv-c-warning);
	box-shadow: none;
}

.alovesinh-khuyen-mai-50-suat-nut .alovesinh-cta-zalo .alovesinh-btn:hover {
	box-shadow: var(--alv-sh-lift-hover);
}

.alovesinh-xem-tan-mat-dau,
.alovesinh-giac-ngu-yen-dau {
	--alv-split-gap-md: var(--alv-sp-3);
	--alv-split-gap: var(--alv-sp-6);
	--alv-split-align: end;
}

.e-con.alovesinh-xem-tan-mat-dau {
	--margin-bottom: var(--alv-sp-4);
}

.e-con.alovesinh-giac-ngu-yen-dau {
	--margin-bottom: var(--alv-sp-5);
}

.alovesinh-ban-giao-chu-dao,
.alovesinh-danh-cho-ca-nha {
	--alv-split-gap-md: var(--alv-sp-5);
	--alv-split-gap: var(--alv-sp-6);
	--alv-split-align: stretch;
}

@media (min-width: 561px) {
	.alovesinh-grid {
		grid-template-columns: repeat(var(--alv-grid-cols-md, 2), 1fr);
	}

	.e-con:is(.alovesinh-banner-hai-cot, .alovesinh-quy-trinh-banner) {
		--min-height: calc(100svh - var(--alv-h-header));
	}

	.alovesinh-chan-trang {
		--alv-footer-content-gap: var(--alv-sp-3e);
		--alv-footer-tier-one-columns: repeat(2, minmax(0, 1fr));
		--alv-footer-service-columns: repeat(3, minmax(0, 1fr));
	}

	.alovesinh-chan-trang-danh-muc {
		grid-template-rows: repeat(4, auto);
		row-gap: var(--alv-sp-1a);
	}

	.alovesinh-chan-trang-danh-muc > .elementor-element,
	.alovesinh-chan-trang-danh-muc .elementor-widget-alovesinh-list-link,
	.alovesinh-chan-trang-danh-muc
		.elementor-widget-alovesinh-list-link
		> .elementor-widget-container,
	.alovesinh-chan-trang-danh-muc .alovesinh-list-link {
		display: grid;
		grid-row: span 4;
		grid-template-rows: subgrid;
		row-gap: inherit;
	}

	.alovesinh-chan-trang-danh-muc .alovesinh-list-link > .alovesinh-list-link-item {
		grid-row: span 2;
		grid-template-rows: subgrid;
	}

	.alovesinh-chan-trang-tang-duoi .alovesinh-chan-trang-danh-muc .alovesinh-list-link {
		grid-template-columns: minmax(0, 1fr);
		row-gap: inherit;
	}

	.alovesinh-quy-trinh-banner {
		--alv-banner-lead-gap: inherit;
	}

	.alovesinh-quy-trinh-banner .alovesinh-paragraph {
		font-size: var(--alv-paragraph-size, var(--alv-fs-4));
	}

	:where(.alovesinh-quy-trinh-banner, .alovesinh-quy-trinh-lien-he, .alovesinh-banner-chu)
		.alovesinh-button-row
		.alovesinh-btn {
		flex: initial;
		justify-content: initial;
	}

	.alovesinh-prose-table,
	.alovesinh-prose .wp-block-table,
	.alovesinh-table-plain-frame {
		overflow: hidden;
	}

	.alovesinh-prose table,
	.alovesinh-table-plain {
		min-width: auto;
	}

	.alovesinh-dau-trang {
		--alv-dau-trang-min-height: var(--alv-h-header);
	}

	.alovesinh-banner-hinh {
		aspect-ratio: var(--alv-ratio-banner-figure);
	}

	.alovesinh-banner-the {
		position: absolute;
		inset: 0;
	}

	.alovesinh-logo-loi-khen-luoi {
		--alv-grid-gap: var(--alv-sp-2);
	}

	.elementor {
		--alv-quy-trinh-buoc-gap: var(--alv-sp-4);
	}
}

@media (min-width: 821px) {
	.elementor {
		--alv-section-pad-block: var(--alv-sp-7);
	}

	.alovesinh-cau-chuyen-mot-dem .alovesinh-image {
		aspect-ratio: var(--alv-ratio-story);
	}

	/* The flex row's own set of builder variables, restated on the class so the page stores no device value;
		.e-con.e-flex sets the column default at the same weight and loads first. */
	.e-con.alovesinh-khuyen-mai-dem-nguoc-the {
		--flex-direction: row;
		--container-widget-height: 100%;
		--container-widget-flex-grow: 1;
		--container-widget-align-self: stretch;
		--flex-wrap-mobile: wrap;
	}

	.alovesinh-khuyen-mai-dem-nguoc-the {
		--alv-km-the-pad-block: var(--alv-sp-4a);
		--alv-km-the-pad-inline: var(--alv-sp-4b);
		--alv-km-noi-dung-width: calc((100% - var(--alv-sp-4)) * var(--alv-share-countdown-copy));
		--alv-km-dong-ho-width: calc((100% - var(--alv-sp-4)) * var(--alv-share-countdown-clock));
	}

	.alovesinh-bao-hanh-vang-hinh {
		width: 100%;
		margin-inline: 0;
	}

	.alovesinh-dat-lich-nhanh-the {
		--alv-dat-lich-the-pad: var(--alv-sp-4b);
	}

	.alovesinh-cau-chuyen-mot-dem-moc {
		--alv-split-gap-md: inherit;
	}

	.alovesinh-cau-tao-nem {
		--alv-cau-tao-pad-inline: var(--alv-w-gutter);
		--alv-cau-tao-head-inline: 0px;
	}

	.alovesinh-khuyen-mai-50-suat-phieu {
		grid-template-columns: var(--alv-w-offer-stub) minmax(0, 1fr);
	}

	.alovesinh-khuyen-mai-50-suat-than {
		border-top: 0;
		border-left: var(--alv-bd-thick) dashed var(--alv-c-glass-tear);
	}

	.alovesinh-khuyen-mai-50-suat-than::after,
	.alovesinh-khuyen-mai-50-suat-cuong::after {
		content: '';
		position: absolute;
		width: var(--alv-sp-3d);
		height: var(--alv-sp-3d);
		border-radius: var(--alv-r-circle);
		background: var(--alv-khuyen-mai-nen);
		pointer-events: none;
	}

	.alovesinh-khuyen-mai-50-suat-than::after {
		top: calc(-1 * var(--alv-sp-2e));
		left: calc(-1 * var(--alv-sp-2e));
	}

	.alovesinh-khuyen-mai-50-suat-cuong::after {
		right: calc(-1 * var(--alv-sp-2e));
		bottom: calc(-1 * var(--alv-sp-2e));
		z-index: var(--alv-z-lift);
	}
}

@media (min-width: 981px) {
	.alovesinh-grid {
		grid-template-columns: repeat(var(--alv-grid-cols, 3), 1fr);
		gap: var(--alv-grid-gap, var(--alv-sp-3));
	}

	.alovesinh-chan-trang {
		--alv-footer-quickbar-columns: 3;
		--alv-footer-quickbar-rows: 1;
		--alv-footer-quickbar-row-size: calc(
			(var(--alv-fs-3a) + var(--alv-fs-2)) * var(--alv-lh-copy) + 2 * var(--alv-sp-1a)
		);
		--alv-footer-quickbar-radius: var(--alv-r-pill);
		--alv-footer-content-gap: calc(var(--alv-sp-5) + var(--alv-sp-1));
		--alv-footer-tier-one-columns: repeat(12, minmax(0, 1fr));
		--alv-footer-tier-two-columns: repeat(12, minmax(0, 1fr));
	}

	.alovesinh-chan-trang-tang-duoi > .e-con:nth-child(1) {
		grid-column: span 6;
	}

	.alovesinh-chan-trang-tang-duoi > .e-con:nth-child(2) {
		grid-column: span 2;
	}

	.alovesinh-chan-trang-tang-duoi > .e-con:nth-child(3) {
		grid-column: span 4;
	}

	.alovesinh-chan-trang
		.alovesinh-chan-trang-luoi
		> .e-con:has([data-alv-footer-column='company']) {
		grid-column: span 4;
	}

	.alovesinh-chan-trang
		.alovesinh-chan-trang-luoi
		> .e-con:has([data-alv-footer-column='support']) {
		grid-column: span 3;
	}

	.alovesinh-chan-trang
		.alovesinh-chan-trang-luoi
		> .e-con:has([data-alv-footer-column='process']) {
		grid-column: span 2;
	}

	.alovesinh-chan-trang .alovesinh-chan-trang-luoi > .e-con:has([data-alv-footer-column='news']) {
		grid-column: span 3;
	}

	.alovesinh-split {
		grid-template-columns: var(--alv-split-cols, 1fr 1fr);
		gap: var(--alv-split-gap, var(--alv-sp-5));
	}

	.alovesinh-logo-loi-khen-luoi {
		--alv-box-pad: inherit;
	}

	.alovesinh-khuyen-mai-nem-sofa-the {
		padding: var(--alv-sp-5);
	}

	.alovesinh-thong-so-ky-thuat {
		--alv-thong-so-pad-inline: var(--alv-w-gutter);
		--alv-thong-so-head-inline: 0px;
	}

	.alovesinh-thong-so-ky-thuat-tai-lieu {
		--alv-thong-so-doc-inline: max(0px, (100% - var(--alv-spec-sheet-max)) / 2);
	}

	.elementor {
		--alv-bai-noi-bat-offset: calc(var(--alv-sp-2b) + var(--alv-sp-0a));
	}

	.alovesinh-banner-hai-cot {
		--alv-banner-gap: var(--alv-sp-5);
		--alv-banner-chu-width: calc((100% - var(--alv-banner-gap)) * var(--alv-share-banner-copy));
		--alv-banner-hinh-width: calc(
			(100% - var(--alv-banner-gap)) * var(--alv-share-banner-figure)
		);
	}

	.e-con.alovesinh-banner-hai-cot {
		--flex-direction: row;
		--container-widget-height: 100%;
		--container-widget-flex-grow: 1;
		--container-widget-align-self: stretch;
		--flex-wrap-mobile: wrap;
	}

	.e-con.alovesinh-xem-tan-mat-dau {
		--margin-bottom: var(--alv-sp-4b);
	}

	.e-con.alovesinh-giac-ngu-yen-dau {
		--margin-bottom: var(--alv-sp-6);
	}
}

@media (prefers-reduced-motion: reduce) {
	.alovesinh-card,
	.alovesinh-btn,
	.alovesinh-chan-trang a,
	.alovesinh-chan-trang button {
		transition: none;
	}

	.alovesinh-card:hover,
	.alovesinh-btn:hover,
	.alovesinh-chan-trang a:hover,
	.alovesinh-chan-trang button:hover,
	.alovesinh-chan-trang-tang-duoi .alovesinh-list-link-item > a:hover,
	.alovesinh-chan-trang
		.alovesinh-chan-trang-luoi
		:is(.alovesinh-contact-actions-action, .alovesinh-list-link-item > a):hover {
		transform: none;
	}
}
