/**
 * Nova Builder — frontend.
 *
 * Everything is authored against the theme's custom properties with a local
 * fallback, so the builder looks correct under Nova Theme and merely plain
 * under any other theme rather than broken.
 */

.nb-el { box-sizing: border-box; }
.nb-el *, .nb-el *::before, .nb-el *::after { box-sizing: inherit; }

/* --------------------------------------------------------------------- Row */

.nb-row {
	position: relative;
	width: 100%;
}

.nb-row__inner {
	display: grid;
	grid-template-columns: repeat(12, minmax(0, 1fr));
	gap: var(--nb-gap, 30px);
	width: 100%;
	max-width: var(--nova-container, 1200px);
	margin-inline: auto;
	padding-inline: var(--nova-gutter, 20px);
	position: relative;
	z-index: 1;
}

.nb-row--stretch_row_content > .nb-row__inner { max-width: none; }

.nb-row--valign-middle > .nb-row__inner { align-items: center; }
.nb-row--valign-bottom > .nb-row__inner { align-items: end; }

.nb-row--full-height { min-height: 100vh; display: flex; align-items: center; }
.nb-row--full-height > .nb-row__inner { width: 100%; }

.nb-row--has-bg {
	background-image: var(--nb-row-bg);
	background-position: center;
	background-repeat: no-repeat;
}
.nb-row--bg-cover   { background-size: cover; }
.nb-row--bg-contain { background-size: contain; }
.nb-row--bg-repeat  { background-repeat: repeat; background-size: auto; }
.nb-row--bg-fixed   { background-size: cover; background-attachment: fixed; }

.nb-row__overlay {
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
}

/* ------------------------------------------------------------------ Column
 *
 * Fractions map onto a 12-track grid, so gaps never have to be subtracted out
 * of a percentage width and the columns land on exact boundaries.
 */

.nb-col { grid-column: span 12; min-width: 0; }

.nb-col--1-1 { grid-column: span 12; }
.nb-col--1-2 { grid-column: span 6; }
.nb-col--1-3 { grid-column: span 4; }
.nb-col--2-3 { grid-column: span 8; }
.nb-col--1-4 { grid-column: span 3; }
.nb-col--3-4 { grid-column: span 9; }
.nb-col--1-6 { grid-column: span 2; }
.nb-col--5-6 { grid-column: span 10; }

.nb-col--align-left   { text-align: left; }
.nb-col--align-center { text-align: center; }
.nb-col--align-right  { text-align: right; }

.nb-col__inner > .nb-el + .nb-el { margin-top: 1.5rem; }

@media (max-width: 1000px) {
	.nb-col--1-3, .nb-col--1-4 { grid-column: span 6; }
	.nb-col--1-6 { grid-column: span 4; }
	.nb-col--2-3, .nb-col--3-4, .nb-col--5-6 { grid-column: span 12; }
}

@media (max-width: 690px) {
	.nb-row__inner { gap: 24px; }
	.nb-col { grid-column: span 12 !important; }
}

/* ---------------------------------------------------------------- Spacer */

.nb-spacer { height: var(--nb-space, 40px); }

@media (max-width: 690px) {
	.nb-spacer { height: var(--nb-space-m, var(--nb-space, 40px)); }
}

/* -------------------------------------------------------------- Separator */

.nb-separator { display: flex; }
.nb-separator--align-center { justify-content: center; }
.nb-separator--align-right  { justify-content: flex-end; }

.nb-separator__line {
	display: block;
	width: var(--nb-sep-width, 100%);
	border-top: 1px solid var(--nb-sep-color, var(--nova-border, #e2e5ea));
}

.nb-separator--dashed .nb-separator__line { border-top-style: dashed; }
.nb-separator--dotted .nb-separator__line { border-top-style: dotted; }

.nb-separator--accent .nb-separator__line {
	border: 0;
	height: 4px;
	border-radius: 4px;
	width: var(--nb-sep-width, 60px);
	background: var(--nb-sep-color, var(--nova-accent, #2b6cff));
}

/* ---------------------------------------------------------------- Heading */

.nb-heading--align-center { text-align: center; }
.nb-heading--align-right  { text-align: right; }

.nb-heading__sub {
	display: block;
	font-size: 0.8125rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--nova-accent, #2b6cff);
	margin-bottom: 0.6em;
}

.nb-heading__title {
	margin: 0;
	color: var(--nb-heading-color, inherit);
	font-size: var(--nb-heading-size, inherit);
}

.nb-heading__divider {
	display: block;
	width: 56px;
	height: 4px;
	border-radius: 4px;
	margin-top: 1rem;
	background: var(--nova-accent, #2b6cff);
}

.nb-heading--align-center .nb-heading__divider { margin-inline: auto; }
.nb-heading--align-right  .nb-heading__divider { margin-inline-start: auto; }

/* ------------------------------------------------------------------- Text */

.nb-text--align-center { text-align: center; }
.nb-text--align-right  { text-align: right; }
.nb-text--small { font-size: 0.9375rem; }
.nb-text--lead  { font-size: 1.1875rem; line-height: 1.65; }
.nb-text > :first-child { margin-top: 0; }
.nb-text > :last-child  { margin-bottom: 0; }

/* ----------------------------------------------------------------- Button */

.nb-button--align-center { text-align: center; }
.nb-button--align-right  { text-align: right; }
.nb-button--align-block .nb-btn { display: flex; width: 100%; }

.nb-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5em;
	font-weight: 600;
	line-height: 1;
	text-decoration: none;
	border: 2px solid transparent;
	border-radius: var(--nova-radius, 4px);
	transition: background-color .18s ease, color .18s ease, border-color .18s ease, transform .18s ease;
	cursor: pointer;
}

.nb-btn:hover { transform: translateY(-1px); }
.nb-btn:focus-visible { outline: 2px solid var(--nova-accent, #2b6cff); outline-offset: 3px; }

.nb-btn--sm { padding: 0.6em 1.2em; font-size: 0.8125rem; }
.nb-btn--md { padding: 0.85em 1.7em; font-size: 0.9375rem; }
.nb-btn--lg { padding: 1.05em 2.3em; font-size: 1.0625rem; }

.nb-btn--solid {
	background: var(--nb-btn-color, var(--nova-accent, #2b6cff));
	border-color: var(--nb-btn-color, var(--nova-accent, #2b6cff));
	color: #fff;
}
.nb-btn--solid:hover { filter: brightness(0.92); color: #fff; }

.nb-btn--outline {
	border-color: var(--nb-btn-color, var(--nova-accent, #2b6cff));
	color: var(--nb-btn-color, var(--nova-accent, #2b6cff));
	background: transparent;
}
.nb-btn--outline:hover {
	background: var(--nb-btn-color, var(--nova-accent, #2b6cff));
	color: #fff;
}

.nb-btn--ghost {
	background: color-mix(in srgb, var(--nb-btn-color, var(--nova-accent, #2b6cff)) 12%, transparent);
	color: var(--nb-btn-color, var(--nova-accent, #2b6cff));
}

.nb-btn--underline {
	padding-inline: 0;
	border: 0;
	border-bottom: 2px solid currentColor;
	border-radius: 0;
	color: var(--nb-btn-color, var(--nova-accent, #2b6cff));
	background: none;
}

/* --------------------------------------------------------------- Icon box */

.nb-icon-box { display: flex; gap: 1.1rem; }
.nb-icon-box--top  { flex-direction: column; }
.nb-icon-box--left { flex-direction: row; align-items: flex-start; }

.nb-icon-box__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	color: var(--nb-icon-color, var(--nova-accent, #2b6cff));
}

.nb-icon-box__icon .dashicons {
	font-size: 34px;
	width: 34px;
	height: 34px;
}

.nb-icon-box--icon-circle .nb-icon-box__icon,
.nb-icon-box--icon-square .nb-icon-box__icon {
	width: 68px;
	height: 68px;
	background: color-mix(in srgb, var(--nb-icon-color, var(--nova-accent, #2b6cff)) 12%, transparent);
}

.nb-icon-box--icon-circle .nb-icon-box__icon { border-radius: 50%; }
.nb-icon-box--icon-square .nb-icon-box__icon { border-radius: var(--nova-radius, 8px); }

.nb-icon-box__title { margin: 0 0 0.4em; font-size: 1.1875rem; }
.nb-icon-box__text  { margin: 0; }

.nb-icon-box__link {
	display: inline-block;
	margin-top: 0.7em;
	font-weight: 600;
	color: var(--nova-accent, #2b6cff);
}

/* ---------------------------------------------------------------- Counter */

.nb-counter--align-center { text-align: center; }
.nb-counter--align-right  { text-align: right; }

.nb-counter__value {
	font-size: clamp(2.2rem, 5vw, 3.4rem);
	font-weight: 700;
	line-height: 1;
	color: var(--nb-counter-color, var(--nova-accent, #2b6cff));
}

.nb-counter__label {
	margin-top: 0.5em;
	font-size: 0.9375rem;
	opacity: 0.75;
}

/* ------------------------------------------------------------ Testimonial */

.nb-testimonial { margin: 0; }

.nb-testimonial--card {
	padding: 2rem;
	border-radius: var(--nova-radius, 8px);
	background: var(--nova-surface, #f7f8fa);
	box-shadow: var(--nova-shadow, 0 1px 3px rgba(0,0,0,.06));
}

.nb-testimonial--large { text-align: center; font-size: 1.25rem; }

.nb-testimonial__photo {
	width: 64px;
	height: 64px;
	border-radius: 50%;
	object-fit: cover;
	margin-bottom: 1rem;
}

.nb-testimonial--large .nb-testimonial__photo { margin-inline: auto; }

.nb-testimonial__rating { color: #f5a623; margin-bottom: 0.6rem; }
.nb-testimonial__rating .dashicons { font-size: 18px; width: 18px; height: 18px; }

.nb-testimonial__quote { margin: 0 0 1rem; }

.nb-testimonial__meta { display: flex; flex-direction: column; gap: 2px; }
.nb-testimonial__name { font-style: normal; font-weight: 600; }
.nb-testimonial__role { font-size: 0.875rem; opacity: 0.7; }

/* -------------------------------------------------------------------- CTA */

.nb-cta {
	display: flex;
	align-items: center;
	gap: 2rem;
	padding: 2.5rem;
	border-radius: var(--nova-radius, 8px);
	background: var(--nb-cta-bg, var(--nova-surface, #f7f8fa));
}

.nb-cta--stacked { flex-direction: column; text-align: center; }
.nb-cta__body { flex: 1 1 auto; }
.nb-cta__title { margin: 0 0 0.4em; }
.nb-cta__text { margin: 0; }
.nb-cta__action { flex: 0 0 auto; }

@media (max-width: 690px) {
	.nb-cta { flex-direction: column; text-align: center; padding: 1.75rem; }
}

/* -------------------------------------------------------------- Accordion */

.nb-accordion__item {
	border: 1px solid var(--nova-border, #e2e5ea);
	border-radius: var(--nova-radius, 6px);
	margin-bottom: 0.6rem;
	background: var(--nova-body-bg, #fff);
}

.nb-accordion__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 1rem 1.25rem;
	font-weight: 600;
	cursor: pointer;
	list-style: none;
}

.nb-accordion__head::-webkit-details-marker { display: none; }

.nb-accordion__marker {
	flex: 0 0 auto;
	width: 10px;
	height: 10px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: rotate(45deg);
	transition: transform .2s ease;
}

.nb-accordion__item[open] .nb-accordion__marker { transform: rotate(-135deg); }

.nb-accordion__body { padding: 0 1.25rem 1.25rem; }
.nb-accordion__body > :first-child { margin-top: 0; }

/* ------------------------------------------------------------------- Tabs */

.nb-tabs--vertical { display: flex; gap: 2rem; }
.nb-tabs--vertical .nb-tabs__nav { flex-direction: column; flex: 0 0 220px; border-bottom: 0; border-right: 1px solid var(--nova-border, #e2e5ea); }

.nb-tabs__nav {
	display: flex;
	flex-wrap: wrap;
	gap: 0.25rem;
	border-bottom: 1px solid var(--nova-border, #e2e5ea);
}

.nb-tabs__tab {
	appearance: none;
	background: none;
	border: 0;
	border-bottom: 2px solid transparent;
	padding: 0.85rem 1.15rem;
	font: inherit;
	font-weight: 600;
	color: inherit;
	opacity: 0.65;
	cursor: pointer;
}

.nb-tabs__tab[aria-selected="true"] {
	opacity: 1;
	color: var(--nova-accent, #2b6cff);
	border-bottom-color: var(--nova-accent, #2b6cff);
}

.nb-tabs--vertical .nb-tabs__tab { text-align: left; border-bottom: 0; border-right: 2px solid transparent; }
.nb-tabs--vertical .nb-tabs__tab[aria-selected="true"] { border-right-color: var(--nova-accent, #2b6cff); }

.nb-tabs__panel { padding-top: 1.5rem; }
.nb-tabs__panel > :first-child { margin-top: 0; }

/* ------------------------------------------------------------------ Image */

.nb-image { margin: 0; }
.nb-image--align-center { text-align: center; }
.nb-image--align-right  { text-align: right; }
.nb-image__img { height: auto; display: inline-block; }
.nb-image--rounded .nb-image__img { border-radius: var(--nova-radius, 8px); }
.nb-image--circle  .nb-image__img { border-radius: 50%; }
.nb-image--shadow  .nb-image__img { box-shadow: 0 18px 40px rgba(0,0,0,.14); border-radius: var(--nova-radius, 8px); }
.nb-image--border  .nb-image__img { border: 1px solid var(--nova-border, #e2e5ea); padding: 6px; border-radius: var(--nova-radius, 8px); }

.nb-image__caption { margin-top: 0.7rem; font-size: 0.875rem; opacity: 0.7; }

/* ---------------------------------------------------------------- Gallery */

.nb-gallery__list {
	display: grid;
	grid-template-columns: repeat(var(--nb-cols, 3), minmax(0, 1fr));
	gap: var(--nb-gap, 16px);
	list-style: none;
	margin: 0;
	padding: 0;
}

.nb-gallery__item { margin: 0; overflow: hidden; border-radius: var(--nova-radius, 6px); }
.nb-gallery__img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .35s ease; }
.nb-gallery__item:hover .nb-gallery__img { transform: scale(1.05); }

.nb-gallery--masonry .nb-gallery__list {
	display: block;
	column-count: var(--nb-cols, 3);
	column-gap: var(--nb-gap, 16px);
}
.nb-gallery--masonry .nb-gallery__item { break-inside: avoid; margin-bottom: var(--nb-gap, 16px); }

@media (max-width: 1000px) { .nb-gallery__list { grid-template-columns: repeat(2, minmax(0, 1fr)); } .nb-gallery--masonry .nb-gallery__list { column-count: 2; } }
@media (max-width: 690px)  { .nb-gallery__list { grid-template-columns: 1fr; } .nb-gallery--masonry .nb-gallery__list { column-count: 1; } }

/* ------------------------------------------------------------------ Video */

.nb-video { position: relative; overflow: hidden; border-radius: var(--nova-radius, 8px); background: #000; }
.nb-video--16-9 { aspect-ratio: 16 / 9; }
.nb-video--4-3  { aspect-ratio: 4 / 3; }
.nb-video--1-1  { aspect-ratio: 1 / 1; }
.nb-video--21-9 { aspect-ratio: 21 / 9; }

.nb-video iframe, .nb-video video { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

.nb-video__play {
	position: absolute;
	inset: 0;
	width: 100%;
	padding: 0;
	border: 0;
	background: none;
	cursor: pointer;
}

.nb-video__poster { width: 100%; height: 100%; object-fit: cover; }

.nb-video__icon {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 76px;
	height: 76px;
	border-radius: 50%;
	background: rgba(255,255,255,.92);
	transition: transform .2s ease;
}

.nb-video__icon::before {
	content: "";
	position: absolute;
	top: 50%;
	left: 54%;
	transform: translate(-50%, -50%);
	border-style: solid;
	border-width: 12px 0 12px 20px;
	border-color: transparent transparent transparent #111;
}

.nb-video__play:hover .nb-video__icon { transform: translate(-50%, -50%) scale(1.08); }

/* ------------------------------------------------------------ Posts grid */

.nb-posts {
	display: grid;
	grid-template-columns: repeat(var(--nb-cols, 3), minmax(0, 1fr));
	gap: 2rem;
}

.nb-posts__item { display: flex; flex-direction: column; }
.nb-posts__thumb { display: block; overflow: hidden; border-radius: var(--nova-radius, 8px); margin-bottom: 1rem; }
.nb-posts__thumb img { display: block; width: 100%; height: auto; transition: transform .4s ease; }
.nb-posts__item:hover .nb-posts__thumb img { transform: scale(1.05); }
.nb-posts__title { margin: 0 0 0.4rem; font-size: 1.1875rem; }
.nb-posts__title a { text-decoration: none; color: inherit; }
.nb-posts__title a:hover { color: var(--nova-accent, #2b6cff); }
.nb-posts__meta { font-size: 0.8125rem; opacity: 0.65; margin-bottom: 0.6rem; }
.nb-posts__excerpt { margin: 0 0 0.8rem; }
.nb-posts__more { font-weight: 600; color: var(--nova-accent, #2b6cff); }

@media (max-width: 1000px) { .nb-posts { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 690px)  { .nb-posts { grid-template-columns: 1fr; } }

/* -------------------------------------------------------------- Portfolio */

.nb-portfolio__filters { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.75rem; }

.nb-portfolio__filters button {
	appearance: none;
	border: 1px solid var(--nova-border, #e2e5ea);
	background: none;
	border-radius: 999px;
	padding: 0.5em 1.1em;
	font: inherit;
	font-size: 0.875rem;
	cursor: pointer;
	color: inherit;
}

.nb-portfolio__filters button.is-active {
	background: var(--nova-accent, #2b6cff);
	border-color: var(--nova-accent, #2b6cff);
	color: #fff;
}

.nb-portfolio__grid {
	display: grid;
	grid-template-columns: repeat(var(--nb-cols, 3), minmax(0, 1fr));
	gap: 1.5rem;
}

.nb-portfolio__item { position: relative; overflow: hidden; border-radius: var(--nova-radius, 8px); }
.nb-portfolio__item[hidden] { display: none; }
.nb-portfolio__item a { display: block; position: relative; }
.nb-portfolio__item img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }

.nb-portfolio__overlay {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 4px;
	text-align: center;
	color: #fff;
	background: rgba(12, 16, 24, .62);
	opacity: 0;
	transition: opacity .3s ease, transform .3s ease;
}

.nb-portfolio__item:hover .nb-portfolio__overlay { opacity: 1; }
.nb-portfolio--hover-zoom .nb-portfolio__item:hover img { transform: scale(1.08); }
.nb-portfolio--hover-slide .nb-portfolio__overlay { transform: translateY(20px); }
.nb-portfolio--hover-slide .nb-portfolio__item:hover .nb-portfolio__overlay { transform: translateY(0); }

.nb-portfolio__title { font-weight: 600; font-size: 1.0625rem; }
.nb-portfolio__cat { font-size: 0.8125rem; opacity: 0.8; }

@media (max-width: 1000px) { .nb-portfolio__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 690px)  { .nb-portfolio__grid { grid-template-columns: 1fr; } }

/* ------------------------------------------------------------------- Form */

.nb-form--card {
	padding: 2rem;
	border-radius: var(--nova-radius, 8px);
	background: var(--nova-surface, #f7f8fa);
	box-shadow: var(--nova-shadow, 0 1px 3px rgba(0,0,0,.06));
}

/* ----------------------------------------------------------------- Social */

.nb-social { display: flex; gap: 0.6rem; list-style: none; margin: 0; padding: 0; }
.nb-social--align-center { justify-content: center; }
.nb-social--align-right  { justify-content: flex-end; }

.nb-social__link {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	color: inherit;
	text-decoration: none;
	transition: background-color .2s ease, color .2s ease;
}

.nb-social--circle .nb-social__link { border-radius: 50%; background: var(--nova-surface, #f0f2f5); }
.nb-social--square .nb-social__link { border-radius: var(--nova-radius, 6px); background: var(--nova-surface, #f0f2f5); }

.nb-social__link:hover { background: var(--nova-accent, #2b6cff); color: #fff; }

/* ------------------------------------------------------------- Animations */

.nb-anim { opacity: 0; transition: opacity .7s ease, transform .7s ease; will-change: opacity, transform; }
.nb-anim--fade-up { transform: translateY(28px); }
.nb-anim--zoom { transform: scale(0.94); }
.nb-anim.is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
	.nb-anim { opacity: 1 !important; transform: none !important; transition: none !important; }
	.nb-btn:hover, .nb-gallery__item:hover .nb-gallery__img, .nb-posts__item:hover .nb-posts__thumb img { transform: none; }
}

/* ------------------------------------------------------------- Lightbox */

.nb-lb {
	position: fixed;
	inset: 0;
	z-index: 99999;
	display: flex;
	align-items: center;
	justify-content: center;
	background: rgba(8, 10, 14, .93);
	padding: 4vmin;
}

.nb-lb img { max-width: 100%; max-height: 92vh; border-radius: 4px; }

.nb-lb__close {
	position: absolute;
	top: 18px;
	right: 22px;
	appearance: none;
	background: none;
	border: 0;
	color: #fff;
	font-size: 34px;
	line-height: 1;
	cursor: pointer;
}
