/* ==========================================================================
   Vadtal Dham - Homepage design system
   Scoped to the public homepage only (body.vd-home). Loaded exclusively by
   resources/views/web/home/*.blade.php, so no other page is affected.
   ========================================================================== */

:root {
	--vd-primary:        #E57D4B;
	--vd-primary-dark:   #C96538;
	--vd-primary-light:  #F09A6E;
	--vd-primary-tint:   #F6C9B0;
	--vd-deep:           #8A4526;
	--vd-gold:           #C9954F;
	--vd-gold-soft:      #E9CFA6;
	--vd-hero-gold:      #FFB347;

	--vd-cream:          #FFF8F3;
	--vd-warm-white:     #FFFCFA;
	--vd-soft:           #FFF4ED;
	--vd-card:           #FFFFFF;

	--vd-text:           #2B2522;
	--vd-text-2:         #756B66;
	/* #9C918B measured 3.07:1 on white and is only ever used at 11-13.5px,
	   so it is darkened to clear WCAG AA (5.2:1 on white, 4.8:1 on --vd-soft). */
	--vd-text-3:         #746B65;
	--vd-border:         #EAD8CE;
	--vd-border-soft:    #F3E4DA;

	/* Surfaces that carry small white text. #E57D4B is the brand fill
	   (header bar, footer, primary buttons); a slightly deeper shade of the
	   same hue provides gradient depth. */
	--vd-on-dark-1:      #E57D4B;
	--vd-on-dark-2:      #C96538;

	--vd-r-xs: 8px;
	--vd-r-sm: 12px;
	--vd-r-md: 16px;
	--vd-r-lg: 22px;
	--vd-r-xl: 28px;
	--vd-r-pill: 999px;

	--vd-sh-xs: 0 1px 2px rgba(43,37,34,.05);
	--vd-sh-sm: 0 1px 2px rgba(43,37,34,.05), 0 4px 12px -4px rgba(43,37,34,.10);
	--vd-sh-md: 0 2px 6px rgba(43,37,34,.05), 0 14px 32px -14px rgba(138,69,38,.22);
	--vd-sh-lg: 0 4px 12px rgba(43,37,34,.06), 0 30px 64px -28px rgba(138,69,38,.32);

	--vd-ease: cubic-bezier(.22,.61,.36,1);
	--vd-t: .28s var(--vd-ease);

	--vd-container: 1280px;
	--vd-gut: 24px;
	--vd-rail-w: 200px;
	--vd-figure-h: min(64vh, 560px);

	--vd-font: 'Inter', 'Noto Sans Gujarati', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
	--vd-font-display: 'Poppins', 'Noto Sans Gujarati', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
	--vd-font-serif: 'Playfair Display', Georgia, 'Times New Roman', serif;
	--vd-font-guj: 'Noto Sans Gujarati', 'Nirmala UI', 'Shruti', 'Poppins', sans-serif;
}

/* --------------------------------------------------------------------------
   Reset / base  (this page does not load Bootstrap, so it owns its own reset)
   -------------------------------------------------------------------------- */
.vd-home *,
.vd-home *::before,
.vd-home *::after { box-sizing: border-box; }

html.vd-html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body.vd-home {
	margin: 0;
	padding: 0;
	width: 100%;
	/* `clip` keeps the sticky header working; `hidden` is the older fallback
	   and would turn <body> into a scroll container that breaks it. */
	overflow-x: hidden;
	overflow-x: clip;
	background: var(--vd-warm-white);
	color: var(--vd-text);
	font-family: var(--vd-font);
	font-size: 15px;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

/* Element resets go through :where() so their specificity stays at (0,0,1).
   A plain `.vd-home a` would be (0,1,1) and would beat every single-class
   component rule below it - e.g. it would repaint .vd-topbar__live white. */
:where(.vd-home) h1, :where(.vd-home) h2, :where(.vd-home) h3,
:where(.vd-home) h4, :where(.vd-home) h5, :where(.vd-home) h6 {
	margin: 0;
	font-family: var(--vd-font-display);
	font-weight: 600;
	line-height: 1.25;
	color: var(--vd-text);
	letter-spacing: -.01em;
}
:where(.vd-home) p  { margin: 0; }
:where(.vd-home) ul, :where(.vd-home) ol { margin: 0; padding: 0; list-style: none; }
:where(.vd-home) a  { color: inherit; text-decoration: none; transition: color var(--vd-t); }
:where(.vd-home) img { max-width: 100%; height: auto; border: 0; display: block; }
:where(.vd-home) iframe { border: 0; max-width: 100%; }
:where(.vd-home) button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
:where(.vd-home) input, :where(.vd-home) select, :where(.vd-home) textarea { font: inherit; }
:where(.vd-home) svg { display: block; }
:where(.vd-home) figure { margin: 0; }

.vd-home :focus-visible {
	outline: 2px solid var(--vd-primary-dark);
	outline-offset: 3px;
}
/* #6: on brand-orange surfaces an orange ring is invisible - invert it. */
.vd-topbar :focus-visible,
.vd-footer :focus-visible,
.vd-card__head :focus-visible,
.vd-rail :focus-visible,
.vd-hero__btn--solid:focus-visible {
	outline-color: #fff;
}

.vd-guj { font-family: var(--vd-font-guj); line-height: 1.75; }

.vd-sr {
	position: absolute !important; width: 1px; height: 1px;
	padding: 0; margin: -1px; overflow: hidden;
	clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* --------------------------------------------------------------------------
   Layout primitives
   -------------------------------------------------------------------------- */
.vd-container {
	width: 100%;
	max-width: var(--vd-container);
	margin: 0 auto;
	padding: 0 var(--vd-gut);
}
.vd-section { padding: 68px 0; position: relative; }
.vd-section--tight { padding: 48px 0; }
.vd-section--cream { background: var(--vd-cream); }
.vd-section--soft  { background: var(--vd-soft); }

/* Photo Gallery only: faded event plate on a light ground, a low-opacity
   black veil, and a light tray that highlights the card row. */
.vd-section--gallery {
	background-color: #EFE8E0;
	isolation: isolate;
}
.vd-section--gallery::before {
	content: '';
	position: absolute;
	inset: 0;
	background: url('../images/gallery-wash.jpg') center center / cover no-repeat;
	opacity: .22;
	pointer-events: none;
	z-index: 0;
}
.vd-section--gallery::after {
	content: '';
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .12);
	pointer-events: none;
	z-index: 0;
}
.vd-section--gallery > .vd-container {
	position: relative;
	z-index: 1;
}
.vd-section--gallery .vd-carousel {
	--vd-g-gap: 16px;
	--vd-g-arrow: 54px;
	--vd-g-cols: 4;
	background: var(--vd-primary);
	border-radius: var(--vd-r-xl);
	padding: 18px var(--vd-g-arrow) 16px;
	box-shadow: 0 12px 32px -18px rgba(0, 0, 0, .28);
}
.vd-section--gallery .vd-carousel__track {
	gap: var(--vd-g-gap);
	padding: 6px 0 8px;
}
.vd-section--gallery .vd-thumb {
	flex: 0 0 calc((100% - (var(--vd-g-gap) * (var(--vd-g-cols) - 1))) / var(--vd-g-cols));
	width: auto;
	max-width: none;
	background: #fff;
	box-shadow: var(--vd-sh-sm);
}
.vd-section--gallery .vd-carousel__nav {
	width: 40px;
	height: 40px;
	margin: 0;
	padding: 0;
	background: #fff;
	color: var(--vd-primary-dark);
	border-color: #fff;
}
.vd-section--gallery .vd-carousel__nav:hover {
	background: #fff;
	color: var(--vd-primary-dark);
	border-color: #fff;
	transform: translateY(-50%) scale(1.06);
}
.vd-section--gallery .vd-carousel__nav--prev { left: 7px; }
.vd-section--gallery .vd-carousel__nav--next { right: 7px; }

.vd-sec-head {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	margin-bottom: 40px;
}
.vd-sec-head__eyebrow {
	display: block;
	font-family: var(--vd-font);
	font-size: 12px;
	font-weight: 600;
	letter-spacing: .22em;
	text-transform: uppercase;
	color: var(--vd-primary-dark);
	margin-bottom: 12px;
}
.vd-sec-head__eyebrow.vd-guj {
	font-family: var(--vd-font-guj);
	letter-spacing: .04em;
	text-transform: none;
}
.vd-sec-head h2 {
	font-family: var(--vd-font-display);
	font-size: clamp(28px, 3.4vw, 44px);
	font-weight: 700;
	color: var(--vd-deep);
	letter-spacing: 0;
	line-height: 1.2;
}
.vd-sec-head h2.vd-guj {
	font-family: var(--vd-font-guj);
	font-size: clamp(24px, 3vw, 40px);
	color: var(--vd-text);
}
.vd-sec-head .vd-orn { margin-top: 16px; }
.vd-sec-head p {
	margin-top: 16px;
	color: var(--vd-text-2);
	font-size: 15px;
	line-height: 1.7;
	max-width: 680px;
	margin-left: auto;
	margin-right: auto;
}
.vd-orn {
	display: flex; align-items: center; justify-content: center;
	gap: 12px;
}

/* section-level utilities */
.vd-center-cta { display: flex; justify-content: center; margin-top: 30px; }
.vd-empty {
	text-align: center; color: var(--vd-text-3);
	font-size: 13.5px; padding: 22px 4px;
}
.vd-orn i {
	display: block; height: 2px; width: 72px;
	background: linear-gradient(90deg, transparent, var(--vd-primary-tint) 30%, var(--vd-primary));
}
.vd-orn i + i { background: linear-gradient(90deg, var(--vd-primary), var(--vd-primary-tint) 70%, transparent); }
.vd-orn span {
	width: 11px; height: 11px; border-radius: 2px;
	background: var(--vd-primary); transform: rotate(45deg); flex: 0 0 auto;
}

/* --------------------------------------------------------------------------
   Buttons
   -------------------------------------------------------------------------- */
.vd-btn {
	display: inline-flex; align-items: center; justify-content: center; gap: 9px;
	padding: 12px 24px;
	border-radius: var(--vd-r-pill);
	font-family: var(--vd-font-display);
	font-size: 13px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
	line-height: 1; white-space: nowrap; cursor: pointer;
	transition: transform var(--vd-t), box-shadow var(--vd-t), background var(--vd-t), color var(--vd-t), border-color var(--vd-t);
}
.vd-btn i { font-size: 13px; }
.vd-btn--primary {
	background: linear-gradient(135deg, var(--vd-on-dark-1) 0%, var(--vd-on-dark-2) 100%);
	color: #fff;
	box-shadow: 0 6px 18px -8px rgba(201,101,56,.75);
}
.vd-btn--primary:hover { color:#fff; transform: translateY(-2px); box-shadow: 0 12px 26px -10px rgba(201,101,56,.85); }
.vd-btn--ghost {
	background: #fff; color: var(--vd-primary-dark);
	border: 1px solid var(--vd-border);
	box-shadow: var(--vd-sh-xs);
}
.vd-btn--ghost:hover { color: var(--vd-primary-dark); border-color: var(--vd-primary-light); transform: translateY(-2px); box-shadow: var(--vd-sh-sm); }
.vd-btn--light {
	background: rgba(255,255,255,.16); color: #fff;
	border: 1px solid rgba(255,255,255,.45);
}
.vd-btn--light:hover { background: #fff; color: var(--vd-primary-dark); }
.vd-btn--sm { padding: 9px 18px; font-size: 11.5px; }
.vd-btn--block { display: flex; width: 100%; }

/* --------------------------------------------------------------------------
   Top announcement bar
   -------------------------------------------------------------------------- */
.vd-topbar {
	background: linear-gradient(90deg, var(--vd-on-dark-2) 0%, var(--vd-on-dark-1) 52%, var(--vd-on-dark-2) 100%);
	color: #fff;
	font-size: 12.5px;
	position: relative; z-index: 60;
}
.vd-topbar__in {
	display: flex; align-items: center; gap: 16px;
	min-height: 40px; padding-top: 5px; padding-bottom: 5px;
}
.vd-topbar__jai {
	font-family: var(--vd-font-display); font-weight: 600;
	letter-spacing: .04em; white-space: nowrap; color: #fff;
}
.vd-topbar__sep { width: 1px; height: 16px; background: rgba(255,255,255,.28); flex: 0 0 auto; }
.vd-topbar__item { color: #fff; white-space: nowrap; }
.vd-topbar__item b { font-weight: 600; color: #fff; }
.vd-topbar__spacer { flex: 1 1 auto; }
.vd-topbar__social { display: flex; align-items: center; gap: 6px; }
.vd-topbar__social a {
	width: 27px; height: 27px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: rgba(255,255,255,.15); color: #fff; font-size: 12.5px;
	transition: background var(--vd-t), transform var(--vd-t), color var(--vd-t);
}
.vd-topbar__social a:hover { background: #fff; color: var(--vd-primary-dark); transform: translateY(-1px); }
.vd-topbar__live {
	display: inline-flex; align-items: center; gap: 7px;
	background: #fff; color: var(--vd-primary-dark);
	padding: 6px 15px; border-radius: var(--vd-r-pill);
	font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
	white-space: nowrap;
	transition: transform var(--vd-t), box-shadow var(--vd-t);
}
.vd-topbar__live:hover { color: var(--vd-primary-dark); transform: translateY(-1px); box-shadow: 0 6px 16px -6px rgba(0,0,0,.4); }
.vd-dot {
	width: 7px; height: 7px; border-radius: 50%; background: #E2402F;
	box-shadow: 0 0 0 0 rgba(226,64,47,.7);
	animation: vd-pulse 2s infinite;
	flex: 0 0 auto;
}
@keyframes vd-pulse {
	0%   { box-shadow: 0 0 0 0 rgba(226,64,47,.65); }
	70%  { box-shadow: 0 0 0 7px rgba(226,64,47,0); }
	100% { box-shadow: 0 0 0 0 rgba(226,64,47,0); }
}

/* --------------------------------------------------------------------------
   Header / navigation
   -------------------------------------------------------------------------- */
.vd-header {
	background: var(--vd-warm-white);
	border-bottom: 1px solid var(--vd-border-soft);
	position: sticky; top: 0; z-index: 55;
	transition: box-shadow var(--vd-t), background var(--vd-t);
}
.vd-header.is-stuck { box-shadow: 0 6px 24px -14px rgba(138,69,38,.4); }
.vd-header__in { display: flex; align-items: center; gap: 24px; min-height: 78px; }

.vd-brand { display: flex; align-items: center; flex: 0 0 auto; min-width: 0; }
.vd-brand__mark {
	width: 210px;
	height: auto;
	max-height: 58px;
	object-fit: contain;
	object-position: left center;
	flex: 0 0 auto;
}

.vd-nav { margin-left: auto; }
.vd-nav__list {
	display: flex; align-items: center; gap: 2px;
	list-style: none;
	margin: 0;
	padding: 0;
}
.vd-nav__list > li { position: relative; list-style: none; }
.vd-nav__link {
	position: relative;
	display: inline-flex; align-items: center; gap: 6px;
	padding: 10px 13px; border-radius: var(--vd-r-xs);
	font-family: var(--vd-font-display);
	font-size: 12.5px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase;
	color: var(--vd-text); white-space: nowrap;
	transition: color var(--vd-t), background var(--vd-t);
}
.vd-nav__link .fa { font-size: 10px; opacity: .6; transition: transform var(--vd-t); }
.vd-nav__link:hover { color: var(--vd-primary-dark); background: var(--vd-soft); }
.vd-nav__list > li:hover > .vd-nav__link .fa { transform: rotate(180deg); }
.vd-nav__link.is-active { color: var(--vd-primary-dark); font-weight: 600; }
.vd-nav__link.is-active::after {
	content: ''; position: absolute; left: 13px; right: 13px; bottom: 2px;
	height: 2px; border-radius: 2px; background: var(--vd-primary);
}

.vd-nav__drop {
	position: absolute; top: calc(100% + 6px); left: 0;
	min-width: 236px; padding: 8px;
	margin: 0;
	list-style: none;
	background: #fff; border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-r-md); box-shadow: var(--vd-sh-md);
	opacity: 0; visibility: hidden; transform: translateY(8px);
	transition: opacity .2s var(--vd-ease), transform .2s var(--vd-ease), visibility .2s;
	z-index: 30;
}
.vd-nav__drop > li { list-style: none; margin: 0; padding: 0; }
.vd-nav__list > li:hover > .vd-nav__drop,
.vd-nav__list > li:focus-within > .vd-nav__drop { opacity: 1; visibility: visible; transform: translateY(0); }
.vd-nav__drop li a {
	display: block; padding: 9px 12px; border-radius: var(--vd-r-xs);
	font-size: 13.5px; color: var(--vd-text-2); line-height: 1.4;
	transition: background var(--vd-t), color var(--vd-t), padding-left var(--vd-t);
}
.vd-nav__drop li a:hover { background: var(--vd-soft); color: var(--vd-primary-dark); padding-left: 16px; }
.vd-nav__drop--right { left: auto; right: 0; }

.vd-burger {
	display: none;
	width: 44px; height: 44px; border-radius: var(--vd-r-sm);
	align-items: center; justify-content: center;
	border: 1px solid var(--vd-border); background: #fff;
	color: var(--vd-primary-dark); font-size: 17px;
	margin-left: auto; flex: 0 0 auto;
}
/* THE BARS ARE DRAWN HERE, NOT TAKEN FROM THE ICON FONT.
   Font Awesome is fetched from cdnjs, and on an install that cannot reach it -
   a LAN-only deployment, a blocked CDN, a slow first paint - every .fa glyph
   resolves to nothing. Everywhere else on the site that costs an ornament; on
   this button it costs the ONLY affordance, leaving a blank white square where
   the mobile menu should be, which is exactly how it was reported.
   Three bars out of a box-shadow need no font, and font-size:0 hides the glyph
   on installs where the CDN did answer so the two cannot double up. */
.vd-burger .fa {
	position: relative;
	width: 18px; height: 2px;
	border-radius: 2px;
	background: currentColor;
	font-size: 0;
	box-shadow: 0 -6px 0 currentColor, 0 6px 0 currentColor;
}
.vd-burger .fa::before,
.vd-burger .fa::after { content: none; }

/* Mobile drawer */
.vd-drawer {
	position: fixed; top: 0; right: 0; bottom: 0; width: min(340px, 88vw);
	background: var(--vd-warm-white);
	box-shadow: -20px 0 60px -20px rgba(43,37,34,.4);
	transform: translateX(100%);
	/* visibility, not just transform: a closed drawer must leave the tab order,
	   otherwise keyboard users tab into an off-screen menu. */
	visibility: hidden;
	transition: transform .32s var(--vd-ease), visibility .32s;
	z-index: 120; display: flex; flex-direction: column;
	overflow-y: auto; -webkit-overflow-scrolling: touch;
}
.vd-drawer.is-open { transform: translateX(0); visibility: visible; }
.vd-drawer__head {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	padding: 16px 18px; border-bottom: 1px solid var(--vd-border-soft);
	position: sticky; top: 0; background: var(--vd-warm-white); z-index: 2;
}
.vd-drawer__head .vd-brand__mark { width: min(200px, calc(100vw - 96px)); max-height: 52px; }
.vd-drawer__close {
	width: 38px; height: 38px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: var(--vd-soft); color: var(--vd-primary-dark); font-size: 16px;
	flex: 0 0 auto;
}
.vd-drawer__body { padding: 10px 12px 26px; }
.vd-drawer__body > ul { list-style: none; margin: 0; padding: 0; }
.vd-drawer__body > ul > li { border-bottom: 1px solid var(--vd-border-soft); list-style: none; }
.vd-drawer__body > ul > li:last-child { border-bottom: 0; }
.vd-drawer__link {
	display: flex; align-items: center; justify-content: space-between; gap: 10px;
	width: 100%; padding: 13px 10px; text-align: left;
	font-family: var(--vd-font-display);
	font-size: 13px; font-weight: 500; letter-spacing: .05em; text-transform: uppercase;
	color: var(--vd-text);
}
.vd-drawer__link.is-active { color: var(--vd-primary-dark); font-weight: 600; }
.vd-drawer__link .fa { font-size: 12px; color: var(--vd-primary); transition: transform var(--vd-t); }
.vd-drawer__link[aria-expanded="true"] .fa { transform: rotate(180deg); }
.vd-drawer__sub { display: none; padding: 0 0 10px 10px; }
.vd-drawer__sub.is-open { display: block; }
.vd-drawer__sub a {
	display: block; padding: 9px 10px; border-left: 2px solid var(--vd-border);
	font-size: 13.5px; color: var(--vd-text-2);
}
.vd-drawer__sub a:hover { color: var(--vd-primary-dark); border-left-color: var(--vd-primary); }
.vd-drawer__foot { margin-top: 16px; padding: 0 10px; display: grid; gap: 10px; }
.vd-scrim {
	position: fixed; top: 0; right: 0; bottom: 0; left: 0;
	background: rgba(43,37,34,.45);
	opacity: 0; visibility: hidden; transition: opacity .3s var(--vd-ease), visibility .3s;
	z-index: 110;
}
.vd-scrim.is-open { opacity: 1; visibility: visible; }
body.vd-locked { overflow: hidden; }

/* --------------------------------------------------------------------------
   Hero

   Centered wordmark between the Thakorji murti (left) and Aacharya Maharaj
   (right). The temple photograph sits behind a black transparent overlay.
   The six shortcut destinations are a coloured rail on the right. Scoped to
   body.vd-home.
   -------------------------------------------------------------------------- */
.vd-hero {
	position: relative;
	overflow: hidden;
	background: #1A1A1A;
	padding: 4px 0 28px;
	isolation: isolate;
}

.vd-hero__watermark {
	position: absolute; inset: 0;
	pointer-events: none; z-index: 0;
	overflow: hidden;
	background: #1A1A1A;
}
.vd-hero__watermark img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 44%;
	display: block;
	/* Graded to the reference. The source plate is a bright blue-sky
	   photograph, and a light sepia could not overcome the blue, so it is
	   fully warm-toned and then re-saturated before the overlay lands on it. */
	transform: scale(1.14);
	transform-origin: 50% 44%;
	filter: brightness(.72) contrast(1.06) sepia(.85) saturate(1.25) hue-rotate(-8deg);
}
.vd-hero__watermark::after {
	content: '';
	position: absolute; inset: 0;
	/* Vignette: readable centre behind the wordmark, deep corners. Kept neutral
	   black - the warm tone comes from the sepia grade on the plate beneath, so
	   tinting the overlay too would push the shadows muddy. */
	background:
		radial-gradient(118% 88% at 50% 42%,
			rgba(0, 0, 0, .16) 0%,
			rgba(0, 0, 0, .42) 55%,
			rgba(0, 0, 0, .70) 100%),
		linear-gradient(180deg,
			rgba(0, 0, 0, .36) 0%,
			rgba(0, 0, 0, .18) 32%,
			rgba(0, 0, 0, .28) 66%,
			rgba(0, 0, 0, .58) 100%);
}

.vd-hero > .vd-container {
	/* Only pad when the docked rail actually overlaps the centred column. */
	padding-right: max(
		var(--vd-gut),
		calc(var(--vd-rail-w) - (100vw - min(100vw, var(--vd-container))) / 2)
	);
}

.vd-hero__grid {
	position: relative; z-index: 2;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(280px, 440px) minmax(0, 1fr);
	grid-template-areas: "deity copy maharaj";
	align-items: end;
	gap: 8px 16px;
}

/* ------------------------------------------------------------------ copy -- */
.vd-hero__copy {
	grid-area: copy;
	align-self: center;
	text-align: center;
	max-width: 540px;
	margin: 0 auto;
	padding: 8px 8px 8px;
	position: relative;
	z-index: 4;
	background: transparent;
	border: 0;
	box-shadow: none;
	backdrop-filter: none;
	-webkit-backdrop-filter: none;
}
.vd-hero__mantra {
	margin: 0;
	color: var(--vd-hero-gold);
	font-size: clamp(13px, 1.15vw, 16px);
	font-weight: 600;
	letter-spacing: .04em;
	text-shadow: 0 1px 12px rgba(0,0,0,.55);
}
.vd-hero h1 {
	margin: 8px 0 0;
	font-family: var(--vd-font-display);
	font-size: clamp(40px, 5.2vw, 68px);
	font-weight: 700; line-height: 1.05; letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--vd-hero-gold);
	text-shadow: 0 2px 18px rgba(0,0,0,.55);
}
.vd-hero h1 span { display: block; color: var(--vd-hero-gold); }
.vd-hero__lead {
	margin: 12px auto 0;
	font-size: clamp(14.5px, 1.3vw, 16.5px);
	color: #FFFFFF; line-height: 1.65; max-width: 520px;
	font-weight: 500;
	text-shadow: 0 1px 10px rgba(0,0,0,.55);
}
.vd-hero__cta {
	display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 16px;
}
.vd-hero__btn {
	display: inline-flex; align-items: center; gap: 12px;
	padding: 11px 22px 11px 16px;
	border-radius: var(--vd-r-pill);
	text-align: left;
	line-height: 1.15;
	transition: transform var(--vd-t), box-shadow var(--vd-t), background var(--vd-t), color var(--vd-t), border-color var(--vd-t);
}
.vd-hero__btn .fa { font-size: 22px; flex: 0 0 auto; }
.vd-hero__btn b {
	display: block;
	font-family: var(--vd-font-display);
	font-size: 12.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
}
.vd-hero__btn small {
	display: block; margin-top: 2px;
	font-size: 11px; font-weight: 400; letter-spacing: 0; text-transform: none; opacity: .9;
}
.vd-hero__btn--solid {
	background: var(--vd-primary); color: #fff;
	box-shadow: 0 10px 22px -8px rgba(229,125,75,.6);
}
.vd-hero__btn--solid:hover { background: var(--vd-primary-dark); color: #fff; transform: translateY(-2px); }
.vd-hero__btn--ghost {
	background: #fff; color: var(--vd-primary);
	border: 1.5px solid var(--vd-primary);
	box-shadow: var(--vd-sh-xs);
}
.vd-hero__btn--ghost:hover { color: var(--vd-primary-dark); border-color: var(--vd-primary-dark); transform: translateY(-2px); }

.vd-hero__figure {
	display: flex;
	align-items: flex-end;
	justify-content: center;
	width: 100%;
	margin-bottom: -8px;
	z-index: 3;
	min-width: 0;
}
.vd-hero__figure--deity { grid-area: deity; justify-content: flex-end; padding-right: 4px; }
.vd-hero__figure--maharaj { grid-area: maharaj; justify-content: flex-start; padding-left: 4px; }

/* Left murti only. Height matches Maharaj; width is wide enough for the
   group plates (m5/m6 ~0.94) so contain can show the full image — no crop
   and no change to the copy column or the right portrait. */
.vd-hero__deity-stage {
	position: relative;
	width: min(100%, calc(var(--vd-figure-h) * 0.95));
	height: var(--vd-figure-h);
	max-width: 100%;
	max-height: var(--vd-figure-h);
	flex: 0 0 auto;
	overflow: hidden;
}
.vd-hero__figure--deity .vd-hero__deity {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	max-width: 100%;
	max-height: var(--vd-figure-h);
	object-fit: contain;
	object-position: right bottom;
	opacity: 0;
	transition: opacity .7s var(--vd-ease), transform .6s var(--vd-ease);
}
.vd-hero__figure--deity .vd-hero__deity.is-active { opacity: 1; }

.vd-hero__figure img {
	display: block;
	width: auto;
	height: auto;
	max-width: 100%;
	max-height: var(--vd-figure-h);
	object-fit: contain;
	object-position: center bottom;
	background: transparent;
	transition: transform .6s var(--vd-ease);
}
.vd-hero__figure:hover img { transform: translateY(-8px); }

.vd-hero__maharaj {
	display: flex;
	align-items: flex-end;
	justify-content: center;
	width: 100%;
	max-width: 100%;
	min-width: 0;
}

/* ------------------------------------------------------------------ rail -- */
.vd-rail {
	position: absolute;
	right: 0;
	top: 10px;
	bottom: 40px;
	z-index: 5;
	width: var(--vd-rail-w);
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 6px;
	padding: 0;
	padding-right: env(safe-area-inset-right, 0px);
}
.vd-rail__item {
	display: grid;
	grid-template-columns: 26px minmax(0, 1fr) 10px;
	align-items: center; gap: 7px;
	padding: 8px 10px 8px 8px;
	color: #fff;
	border-radius: 10px 0 0 10px;
	background: linear-gradient(105deg, #A24F2C 0%, #E57D4B 100%);
	box-shadow: -4px 4px 12px -6px rgba(90,44,20,.4);
	transition: transform var(--vd-t), box-shadow var(--vd-t), filter var(--vd-t);
}
.vd-rail__item > .fa:first-child {
	width: 28px; height: 28px; border-radius: 8px;
	display: inline-flex; align-items: center; justify-content: center;
	background: rgba(255,255,255,.2); color: #fff;
	font-size: 13px;
}
.vd-rail__item span { min-width: 0; }
.vd-rail__item b {
	display: block;
	font-family: var(--vd-font-display);
	font-size: 11.5px; font-weight: 700; letter-spacing: .02em;
	color: #fff; line-height: 1.2;
}
.vd-rail__item small {
	display: block; margin-top: 2px;
	font-size: 10px; color: rgba(255,255,255,.88); line-height: 1.25;
}
.vd-rail__go { font-size: 12px; color: rgba(255,255,255,.8); }
.vd-rail__item:hover {
	transform: translateX(-4px);
	filter: brightness(1.06);
	color: #fff;
	box-shadow: -6px 6px 16px -6px rgba(90,44,20,.48);
}

/* ------------------------------------------------------- entrance motion -- */
.vd-js .vd-hero__copy > *,
.vd-js .vd-hero__figure,
.vd-js .vd-rail__item {
	opacity: 0;
	transform: translateY(16px);
	animation: vd-hero-in .8s var(--vd-ease) forwards;
}
.vd-js .vd-hero__figure { transform: translateY(20px) scale(.985); animation-name: vd-hero-rise; }
.vd-js .vd-hero__copy > *:nth-child(1) { animation-delay: .05s; }
.vd-js .vd-hero__copy > *:nth-child(2) { animation-delay: .12s; }
.vd-js .vd-hero__copy > *:nth-child(3) { animation-delay: .18s; }
.vd-js .vd-hero__copy > *:nth-child(4) { animation-delay: .24s; }
.vd-js .vd-hero__copy > *:nth-child(5) { animation-delay: .30s; }
.vd-js .vd-hero__figure--deity { animation-delay: .14s; }
.vd-js .vd-hero__figure--maharaj { animation-delay: .2s; }
.vd-js .vd-rail__item:nth-child(1) { animation-delay: .34s; }
.vd-js .vd-rail__item:nth-child(2) { animation-delay: .39s; }
.vd-js .vd-rail__item:nth-child(3) { animation-delay: .44s; }
.vd-js .vd-rail__item:nth-child(4) { animation-delay: .49s; }
.vd-js .vd-rail__item:nth-child(5) { animation-delay: .54s; }
.vd-js .vd-rail__item:nth-child(6) { animation-delay: .59s; }

@keyframes vd-hero-in {
	to { opacity: 1; transform: none; }
}
@keyframes vd-hero-rise {
	to { opacity: 1; transform: translateY(0) scale(1); }
}


/* --------------------------------------------------------------------------
   Floating quick-action card
   -------------------------------------------------------------------------- */
.vd-quick {
	position: relative;
	z-index: 6;
	margin-top: -36px;
	overflow: visible;
}
.vd-quick::before {
	content: '';
	position: absolute;
	left: 50%;
	top: 0;
	z-index: 0;
	width: 140vw;
	height: 96px;
	transform: translateX(-50%);
	background: var(--vd-warm-white);
	border-radius: 50% 50% 0 0 / 100% 100% 0 0;
	pointer-events: none;
}
.vd-quick::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	top: 48px;
	bottom: -1px;
	z-index: 0;
	background: var(--vd-warm-white);
	pointer-events: none;
}
.vd-quick .vd-container { position: relative; z-index: 1; }
.vd-quick__card {
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-r-xl);
	box-shadow: var(--vd-sh-lg);
	display: grid;
	grid-template-columns: repeat(6, minmax(0, 1fr));
	overflow: hidden;
}
.vd-quick__item {
	position: relative;
	display: flex; flex-direction: column; align-items: center; text-align: center;
	gap: 5px; padding: 14px 10px 12px;
	border-right: 1px solid var(--vd-border-soft);
	transition: background var(--vd-t), transform var(--vd-t);
}
.vd-quick__item:last-child { border-right: 0; }
.vd-quick__item::after {
	content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 3px;
	background: var(--vd-primary); transform: scaleX(0); transform-origin: 50% 50%;
	transition: transform var(--vd-t);
}
.vd-quick__item:hover { background: var(--vd-soft); }
.vd-quick__item:hover::after { transform: scaleX(1); }
.vd-quick__ico {
	width: 38px; height: 38px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: var(--vd-primary);
	border: 0;
	color: #fff; font-size: 15px;
	transition: background var(--vd-t), transform var(--vd-t);
}
.vd-quick__item:hover .vd-quick__ico {
	background: var(--vd-primary-dark);
	color: #fff; transform: translateY(-3px);
}
.vd-quick__t {
	font-family: var(--vd-font-display);
	font-size: 12px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase;
	color: var(--vd-primary); line-height: 1.3;
}
.vd-quick__s { font-size: 11.5px; color: var(--vd-text-3); line-height: 1.35; }

/* --------------------------------------------------------------------------
   Today's panchang details  (homepage popup)
   -------------------------------------------------------------------------- */
.vd-tithi__box {
	display: flex; flex-direction: column;
	min-width: 0;
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: 18px;
	box-shadow: var(--vd-sh-md);
	overflow: hidden;
}
.vd-tithi__box--plain {
	border: 0; border-radius: 0; box-shadow: none;
}
.vd-tithi__head {
	display: flex; align-items: center; gap: 10px;
	padding: 15px 18px;
	background: linear-gradient(100deg, var(--vd-on-dark-1) 0%, var(--vd-on-dark-2) 100%);
	color: #fff;
}
.vd-tithi__badge {
	flex: 0 0 auto;
	width: 28px; height: 28px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: rgba(255,255,255,.18);
	color: #fff; font-size: 12px;
}
.vd-tithi__title {
	font-size: 13px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
}
.vd-tithi__grid {
	display: flex; flex-direction: column;
}
.vd-tithi__cell,
.vd-tithi__note {
	display: flex; flex-direction: column; align-items: flex-start; justify-content: center;
	gap: 2px; text-align: left;
	padding: 10px 16px;
	min-width: 0;
	border-top: 1px solid var(--vd-border-soft);
}
.vd-tithi__cell:first-child { border-top: 0; }
.vd-tithi__cell small,
.vd-tithi__note small {
	font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
	color: var(--vd-primary-dark); font-family: var(--vd-font);
}
.vd-tithi__cell b {
	font-family: var(--vd-font-guj);
	font-size: 15px; font-weight: 700; color: var(--vd-text);
	line-height: 1.4; word-break: break-word;
}
.vd-tithi__note {
	background: var(--vd-soft);
}
.vd-tithi__note b {
	font-family: var(--vd-font-guj);
	font-size: 13.5px; font-weight: 600; color: var(--vd-deep);
	line-height: 1.5; word-break: break-word;
}

/* --------------------------------------------------------------------------
   Card shell
   -------------------------------------------------------------------------- */
.vd-card {
	background: var(--vd-card);
	border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-r-lg);
	box-shadow: var(--vd-sh-sm);
	overflow: hidden;
	display: flex; flex-direction: column;
	transition: box-shadow var(--vd-t);
}
.vd-card__head {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	padding: 14px 20px;
	background: linear-gradient(100deg, var(--vd-on-dark-1) 0%, var(--vd-on-dark-2) 100%);
	color: #fff;
}
.vd-card__head h3 {
	color: #fff; font-size: 15px; font-weight: 600; letter-spacing: .02em;
}
.vd-card__head h3.vd-guj { font-size: 16px; }
.vd-card__more {
	font-size: 11px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase;
	color: #fff; display: inline-flex; align-items: center; gap: 6px;
	white-space: nowrap;
}
.vd-card__more:hover { color: #fff; }
.vd-card__more .fa { font-size: 10px; transition: transform var(--vd-t); }
.vd-card__more:hover .fa { transform: translateX(3px); }
.vd-card__body { padding: 8px 18px 18px; flex: 1 1 auto; }
.vd-card__foot { padding: 0 18px 18px; }

/* --------------------------------------------------------------------------
   Info teasers — three compact cards; details open in homepage popups
   -------------------------------------------------------------------------- */
.vd-infotease {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 16px;
	align-items: stretch;
}
.vd-tease {
	position: relative;
	isolation: isolate;
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: 14px;
	min-width: 0;
	padding: 20px 16px 22px 18px;
	text-align: left;
	overflow: hidden;
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: 16px;
	box-shadow: var(--vd-sh-sm);
	transition: box-shadow var(--vd-t), transform var(--vd-t);
}
.vd-tease:hover {
	box-shadow: var(--vd-sh-md);
	transform: translateY(-2px);
}
.vd-tease__art {
	position: absolute; inset: 0;
	pointer-events: none; z-index: 0;
	overflow: hidden;
}
/* Corner mandala */
.vd-tease__art::before {
	content: '';
	position: absolute; right: -32px; top: -40px;
	width: 128px; height: 128px; border-radius: 50%;
	background:
		repeating-conic-gradient(from 12deg, rgba(229,125,75,.16) 0 7deg, transparent 7deg 18deg),
		radial-gradient(circle, rgba(229,125,75,.10) 0 38%, transparent 39%);
	opacity: .7;
}
/* Temple spires along the bottom-left */
.vd-tease__art::after {
	content: '';
	position: absolute; left: 6px; bottom: 0;
	width: 92px; height: 34px;
	opacity: .22;
	background-color: var(--vd-primary);
	-webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 92 34'><path d='M6 34 L16 16 L26 34 Z M22 34 L36 6 L50 34 Z M44 34 L56 14 L68 34 Z M62 34 L72 20 L82 34 Z'/><rect y='32' width='92' height='2'/></svg>") center bottom / contain no-repeat;
	mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 92 34'><path d='M6 34 L16 16 L26 34 Z M22 34 L36 6 L50 34 Z M44 34 L56 14 L68 34 Z M62 34 L72 20 L82 34 Z'/><rect y='32' width='92' height='2'/></svg>") center bottom / contain no-repeat;
}
.vd-tease__ico {
	position: relative; z-index: 1;
	width: 52px; height: 52px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: linear-gradient(160deg, var(--vd-on-dark-1), var(--vd-on-dark-2));
	color: #fff; font-size: 20px;
	box-shadow: 0 8px 18px -10px rgba(201,101,56,.8);
}
.vd-tease__ico::before {
	content: '';
	position: absolute; inset: -13px;
	border-radius: 50%;
	background:
		repeating-conic-gradient(from 0deg, rgba(229,125,75,.18) 0 5deg, transparent 5deg 15deg);
	-webkit-mask: radial-gradient(circle, transparent 58%, #000 59% 68%, transparent 69%);
	mask: radial-gradient(circle, transparent 58%, #000 59% 68%, transparent 69%);
	pointer-events: none;
}
.vd-tease__copy {
	position: relative; z-index: 1;
	min-width: 0;
	display: flex; flex-direction: column; gap: 4px;
}
.vd-tease__copy b {
	font-family: var(--vd-font-display);
	font-size: 16px; font-weight: 600; color: var(--vd-primary-dark);
	line-height: 1.25;
}
.vd-tease__copy small {
	font-family: var(--vd-font);
	font-size: 12px; color: var(--vd-text-3); line-height: 1.45;
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.vd-tease__go {
	position: relative; z-index: 1;
	width: 34px; height: 34px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: #FFE8D6;
	color: var(--vd-primary-dark); font-size: 13px;
	transition: background var(--vd-t), transform var(--vd-t);
}
.vd-tease:hover .vd-tease__go { background: #FFD9BE; transform: translateX(3px); }
.vd-tease:focus-visible { outline: 2px solid var(--vd-primary-dark); outline-offset: 3px; }

.vd-card:hover { box-shadow: var(--vd-sh-md); }

/* mahotsav + schedule popup lists */
.vd-card--board {
	border-radius: 18px;
	box-shadow: var(--vd-sh-md);
}
.vd-card--board .vd-card__head { padding: 15px 20px; }
.vd-card--board .vd-card__body { padding: 6px 14px 16px; }
.vd-card--board .vd-card__foot { padding: 0 14px 16px; }
.vd-card--board .vd-date,
.vd-modal--info .vd-date {
	background: linear-gradient(160deg, var(--vd-on-dark-1), var(--vd-on-dark-2));
	border: 0;
	box-shadow: 0 6px 14px -8px rgba(201,101,56,.7);
}
.vd-card--board .vd-date b,
.vd-modal--info .vd-date b { color: #fff; }
.vd-card--board .vd-date span,
.vd-modal--info .vd-date span { color: rgba(255,255,255,.86); }
.vd-card--board .vd-eventlist a,
.vd-modal--info .vd-eventlist a {
	padding: 13px 22px 13px 8px;
}
.vd-card--board .vd-eventlist a:hover,
.vd-modal--info .vd-eventlist a:hover { background: linear-gradient(90deg, #FFF4ED, #fff); }

/* Upcoming mahotsav list */
.vd-eventlist { padding-top: 2px; }
.vd-eventlist > li + li { border-top: 1px solid var(--vd-border-soft); }
.vd-eventlist a {
	position: relative;
	display: grid; grid-template-columns: 50px 56px minmax(0, 1fr); gap: 14px;
	align-items: center;
	padding: 12px 22px 12px 6px;
	border-radius: var(--vd-r-sm);
	transition: background var(--vd-t);
}
/* chevron affordance, drawn rather than added to the markup */
.vd-eventlist a::after {
	content: '\f105'; font-family: FontAwesome;
	position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
	font-size: 14px; color: var(--vd-border);
	transition: color var(--vd-t), transform var(--vd-t);
}
.vd-eventlist a:hover { background: var(--vd-soft); }
.vd-eventlist a:hover::after { color: var(--vd-primary); transform: translateY(-50%) translateX(3px); }

.vd-date {
	text-align: center; border-radius: 10px;
	background: linear-gradient(160deg, var(--vd-soft), #FFEEE3);
	border: 1px solid var(--vd-border-soft);
	padding: 8px 2px;
}
.vd-date b {
	display: block; font-family: var(--vd-font-display);
	font-size: 20px; font-weight: 700; line-height: 1; color: var(--vd-primary-dark);
	font-variant-numeric: tabular-nums;
}
.vd-date span {
	display: block; font-size: 9.5px; font-weight: 700; letter-spacing: .14em;
	text-transform: uppercase; color: var(--vd-text-3); margin-top: 4px;
}
.vd-eventlist figure {
	width: 56px; height: 56px; border-radius: 10px;
	overflow: hidden; background: var(--vd-soft); border: 1px solid var(--vd-border-soft);
}
.vd-eventlist figure img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--vd-ease); }
.vd-eventlist a:hover figure img { transform: scale(1.07); }
.vd-eventlist__t {
	font-family: var(--vd-font-display); font-size: 13.5px; font-weight: 600;
	color: var(--vd-text); line-height: 1.4;
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.vd-eventlist__d {
	font-size: 11.5px; color: var(--vd-text-3); margin-top: 4px;
	display: flex; align-items: center; gap: 6px;
}
.vd-eventlist__d::before {
	content: '\f133'; font-family: FontAwesome; font-size: 10px; color: var(--vd-primary);
}

/* Today's darshan - fills the row height so the picture carries the section */
.vd-darshan__stage {
	position: relative;
	margin: 14px 0 0;
	border-radius: var(--vd-r-md);
	overflow: hidden;
	background: linear-gradient(160deg, var(--vd-soft), #FFE7D8);
	border: 1px solid var(--vd-border-soft);
	flex: 1 1 auto;
	min-height: 300px;
}
.vd-darshan__stage img,
.vd-darshan__stage .vd-fade {
	position: absolute; top: 0; left: 0; width: 100%; height: 100%;
	object-fit: cover;
	opacity: 0; transition: opacity .7s var(--vd-ease);
}
.vd-darshan__stage img.is-active { opacity: 1; }
.vd-darshan__stage::after {
	content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 52%;
	background: linear-gradient(180deg, rgba(28,20,16,0) 0%, rgba(28,20,16,.72) 100%);
	pointer-events: none;
}
.vd-darshan__cap {
	position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
	padding: 18px 18px 16px; text-align: center; color: #fff;
}
.vd-darshan__cap b {
	display: block; font-family: var(--vd-font-display);
	font-size: 17px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: #fff;
	text-shadow: 0 1px 12px rgba(0,0,0,.45);
}
.vd-darshan__cap span {
	display: block; font-size: 12.5px; color: rgba(255,255,255,.92); margin-top: 4px;
	text-shadow: 0 1px 10px rgba(0,0,0,.45);
}
.vd-darshan__live {
	position: absolute; top: 14px; left: 14px; z-index: 3;
	display: inline-flex; align-items: center; gap: 7px;
	background: rgba(255,255,255,.95); color: var(--vd-primary-dark);
	padding: 6px 13px; border-radius: var(--vd-r-pill);
	font-size: 10.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
	box-shadow: var(--vd-sh-sm);
}
.vd-darshan__play {
	position: absolute; inset: 0; z-index: 3;
	display: flex; align-items: center; justify-content: center;
}
.vd-darshan__play span {
	width: 62px; height: 62px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: rgba(255,255,255,.95); color: var(--vd-primary-dark); font-size: 19px;
	padding-left: 4px;
	box-shadow: 0 10px 30px -8px rgba(0,0,0,.55);
	transition: transform var(--vd-t), background var(--vd-t);
}
.vd-darshan__play:hover span { transform: scale(1.07); background: #fff; }

/* Today's schedule — every published row stays visible */
.vd-sched { padding-top: 4px; }
.vd-sched > li {
	display: grid; grid-template-columns: 86px 34px minmax(0, 1fr);
	align-items: center; gap: 12px;
	padding: 9px 8px;
	border-radius: 10px;
}
.vd-sched > li:nth-child(odd) { background: var(--vd-soft); }
.vd-sched__time {
	font-family: var(--vd-font-display);
	font-size: 12px; font-weight: 700; color: var(--vd-primary-dark);
	font-variant-numeric: tabular-nums; letter-spacing: .02em;
	background: #fff;
	border: 1px solid var(--vd-primary-tint);
	border-radius: var(--vd-r-pill);
	padding: 5px 0;
	text-align: center;
}
.vd-sched__ico {
	width: 34px; height: 34px; border-radius: 10px;
	display: inline-flex; align-items: center; justify-content: center;
	background: linear-gradient(160deg, #FFF4ED, #FFE7D8);
	color: var(--vd-primary-dark); font-size: 13px;
	border: 1px solid var(--vd-border-soft);
}
.vd-sched__name { font-size: 13.5px; color: var(--vd-text); font-weight: 600; line-height: 1.35; }
.vd-sched li.is-close .vd-sched__time {
	color: var(--vd-text-3);
	border-color: #E8DFD8;
	background: #F7F4F2;
}
.vd-sched li.is-close .vd-sched__name { color: var(--vd-text-3); font-weight: 500; }
.vd-sched li.is-close .vd-sched__ico { background: #F7F4F2; color: var(--vd-text-3); border-color: #EFE9E5; }

/* --------------------------------------------------------------------------
   Generic carousel (scroll-snap, touch friendly, arrow controlled)
   -------------------------------------------------------------------------- */
.vd-carousel { position: relative; }
.vd-carousel__track {
	display: flex; gap: 20px;
	overflow-x: auto; overflow-y: hidden;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	padding: 6px 2px 14px;
	scrollbar-width: none;
}
.vd-carousel__track::-webkit-scrollbar { height: 0; display: none; }
.vd-carousel__track > * { scroll-snap-align: start; flex: 0 0 auto; }
.vd-carousel__nav {
	position: absolute; top: 50%; transform: translateY(-50%);
	width: 42px; height: 42px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: #fff; color: var(--vd-primary-dark);
	border: 1px solid var(--vd-border);
	box-shadow: var(--vd-sh-md);
	font-size: 15px; z-index: 4;
	transition: background var(--vd-t), color var(--vd-t), opacity var(--vd-t), transform var(--vd-t);
}
.vd-carousel__nav:hover { background: var(--vd-primary); color: #fff; border-color: var(--vd-primary); }
/* A ghosted arrow reads as a rendering fault on the cream ground, so an
   arrow that cannot move the track is taken out of the picture entirely. */
.vd-carousel__nav[disabled] { opacity: 0; visibility: hidden; cursor: default; }
.vd-carousel__nav--prev { left: -18px; }
.vd-carousel__nav--next { right: -18px; }

.vd-dots { display: flex; justify-content: center; gap: 7px; margin-top: 16px; }
.vd-dots:empty { display: none; }
.vd-dots button {
	width: 8px; height: 8px; border-radius: 50%;
	background: var(--vd-border); padding: 0;
	transition: width var(--vd-t), background var(--vd-t);
}
.vd-dots button.is-active { width: 22px; border-radius: var(--vd-r-pill); background: var(--vd-primary); }

/* --------------------------------------------------------------------------
   Thumb card (events / darshan / photos)
   -------------------------------------------------------------------------- */
.vd-thumb {
	display: block; width: 300px;
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-r-md);
	overflow: hidden;
	box-shadow: var(--vd-sh-sm);
	transition: transform var(--vd-t), box-shadow var(--vd-t), border-color var(--vd-t);
}
.vd-thumb:hover { transform: translateY(-5px); box-shadow: var(--vd-sh-md); border-color: var(--vd-primary-tint); }
.vd-thumb figure {
	position: relative; overflow: hidden;
	aspect-ratio: 4 / 3; background: var(--vd-soft);
}
.vd-thumb figure img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--vd-ease); }
.vd-thumb:hover figure img { transform: scale(1.06); }
.vd-thumb__body { padding: 14px 16px 16px; }
.vd-thumb__t {
	font-family: var(--vd-font-display); font-size: 14px; font-weight: 600;
	color: var(--vd-text); line-height: 1.4;
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
	min-height: 39px;
}
.vd-thumb__m {
	display: flex; align-items: center; gap: 7px;
	margin-top: 8px; font-size: 12px; color: var(--vd-text-3);
}
.vd-thumb__m .fa { color: var(--vd-primary); font-size: 11px; }

/* --------------------------------------------------------------------------
   Upcoming programmes + today's darshan
   -------------------------------------------------------------------------- */
.vd-feature {
	display: grid;
	grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.95fr);
	gap: 22px;
	align-items: stretch;
	margin-top: 22px;
}
.vd-feature > .vd-card {
	min-width: 0;
	display: flex; flex-direction: column;
}
.vd-feature > .vd-card .vd-card__body {
	display: flex; flex-direction: column; flex: 1 1 auto;
}
.vd-feature .vd-darshan__stage {
	flex: 1 1 auto;
	min-height: 0;
	aspect-ratio: auto;
}
.vd-panel {
	position: relative; overflow: hidden;
	border-radius: var(--vd-r-xl);
	background:
		radial-gradient(120% 120% at 8% 0%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
		linear-gradient(150deg, var(--vd-soft) 0%, #FFE7D8 100%);
	border: 1px solid var(--vd-border);
	box-shadow: var(--vd-sh-md);
	padding: 22px 22px 20px;
	display: flex; flex-direction: column;
	min-width: 0;
}
.vd-panel::before,
.vd-panel::after {
	content: ''; position: absolute; width: 190px; height: 190px;
	background: radial-gradient(circle at 30% 30%, rgba(229,125,75,.14), rgba(229,125,75,0) 68%);
	border-radius: 50%; pointer-events: none;
}
.vd-panel::before { top: -60px; left: -50px; }
.vd-panel::after  { bottom: -70px; right: -50px; }
.vd-panel__head {
	position: relative;
	z-index: 2;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	margin-bottom: 18px;
}
.vd-panel__head .vd-sec-head__eyebrow {
	margin-bottom: 8px;
}
.vd-panel__head h2 {
	font-family: var(--vd-font-guj);
	font-size: clamp(22px, 2.4vw, 32px);
	font-weight: 700;
	color: var(--vd-text);
	letter-spacing: 0;
	line-height: 1.25;
}
.vd-panel__head .vd-orn { margin-top: 10px; }
.vd-panel__body { position: relative; z-index: 2; flex: 1 1 auto; }

/* mahotsav slider inside the panel */
.vd-mahotsav {
	position: relative;
	border-radius: var(--vd-r-lg);
	overflow: hidden;
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	box-shadow: var(--vd-sh-sm);
	aspect-ratio: 16 / 9;
}
/* the CMS "main slider" images are wide banners rather than event posters */
.vd-mahotsav--wide { aspect-ratio: 21 / 9; }
/* The featured programme poster is a 3:2 plate. A 21:9 frame around it left a
   third of the card empty on each side, so the frame matches the artwork and
   is capped so it cannot stretch into dead space on wide viewports. */
.vd-mahotsav--feature {
	aspect-ratio: 3 / 2;
	box-shadow: var(--vd-sh-md);
}
/* contain, never cover - these posters carry text that must not be cropped */
.vd-mahotsav--feature img { object-fit: contain; }
.vd-mahotsav a, .vd-mahotsav .vd-mahotsav__slide {
	position: absolute; top: 0; left: 0; width: 100%; height: 100%;
	opacity: 0; transition: opacity .8s var(--vd-ease);
	pointer-events: none;
}
.vd-mahotsav .is-active { opacity: 1; pointer-events: auto; }
.vd-mahotsav img { width: 100%; height: 100%; object-fit: contain; background: #fff; }
.vd-mahotsav__empty {
	position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);
	text-align: center; color: var(--vd-text-3); font-size: 13.5px; width: 80%;
}

/* --------------------------------------------------------------------------
   Announcements
   -------------------------------------------------------------------------- */
.vd-section--announce {
	background-color: var(--vd-cream);
	background-image:
		radial-gradient(80% 55% at 0% 100%, var(--vd-primary-tint) 0%, transparent 58%),
		radial-gradient(70% 50% at 100% 0%, var(--vd-primary-tint) 0%, transparent 52%);
	overflow: hidden;
	padding-bottom: 72px;
}
.vd-announce__mark,
.vd-announce__motif,
.vd-announce__dots {
	position: absolute;
	pointer-events: none;
	z-index: 0;
}
.vd-announce__mark--left {
	left: -20px;
	top: 8px;
	width: min(38vw, 420px);
	height: min(42vw, 460px);
	background: url('../images/announce-temple.jpg') left top / contain no-repeat;
	opacity: .38;
	mix-blend-mode: screen;
}
.vd-announce__mark--right {
	right: -28px;
	bottom: -12px;
	width: min(36vw, 400px);
	height: min(40vw, 440px);
	background: url('../images/announce-temple.jpg') right bottom / contain no-repeat;
	opacity: .32;
	mix-blend-mode: screen;
	transform: scaleX(-1);
}
.vd-announce__motif {
	width: 120px;
	height: 120px;
	border: 2px solid var(--vd-primary-tint);
	border-radius: 50%;
	opacity: .28;
}
.vd-announce__motif--conch {
	left: 4%;
	top: 42%;
	background:
		radial-gradient(circle at 50% 50%, transparent 34%, var(--vd-primary-tint) 35% 37%, transparent 38%);
}
.vd-announce__motif--conch::after {
	content: '';
	position: absolute;
	inset: 28%;
	border: 2px solid var(--vd-primary-tint);
	border-radius: 50% 50% 50% 0;
	transform: rotate(-20deg);
}
.vd-announce__motif--diya {
	right: 7%;
	top: 12%;
	background:
		radial-gradient(circle at 50% 58%, var(--vd-primary-tint) 0 8px, transparent 9px),
		radial-gradient(ellipse at 50% 72%, var(--vd-primary-tint) 0 22px, transparent 23px);
}
.vd-announce__dots {
	width: 88px;
	height: 88px;
	opacity: .28;
	background-image: radial-gradient(var(--vd-primary) 1.1px, transparent 1.2px);
	background-size: 12px 12px;
}
.vd-announce__dots--tl { left: 18%; top: 18px; }
.vd-announce__dots--br { right: 16%; bottom: 64px; }
.vd-section--announce > .vd-container { position: relative; z-index: 1; }
.vd-announce {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 18px 16px;
}
.vd-section--announce .vd-ann {
	flex: 0 0 152px;
	width: 152px;
	display: block;
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-r-md);
	overflow: hidden;
	box-shadow: var(--vd-sh-sm);
	transition: transform var(--vd-t), box-shadow var(--vd-t), border-color var(--vd-t);
}
.vd-section--announce .vd-ann:hover {
	transform: translateY(-5px);
	box-shadow: var(--vd-sh-md);
	border-color: var(--vd-primary-tint);
}
.vd-section--announce .vd-ann figure {
	position: relative;
	overflow: hidden;
	aspect-ratio: 3 / 4;
	background: var(--vd-soft);
	margin: 0;
}
.vd-section--announce .vd-ann figure img {
	width: 100%;
	height: 100%;
	object-fit: contain;
	transition: transform .6s var(--vd-ease);
}
.vd-section--announce .vd-ann:hover figure img { transform: scale(1.04); }
.vd-section--announce .vd-ann__body {
	padding: 10px 10px 12px;
	text-align: left;
	border-top: 1px solid var(--vd-border-soft);
}
.vd-section--announce .vd-ann__d {
	display: flex;
	align-items: center;
	gap: 6px;
	font-family: var(--vd-font-display);
	font-size: 11.5px;
	font-weight: 700;
	color: var(--vd-primary);
}
.vd-section--announce .vd-ann__d .fa {
	color: var(--vd-primary);
	font-size: 12px;
}
.vd-section--announce .vd-ann__t {
	margin-top: 4px;
	font-size: 12.5px;
	font-weight: 700;
	color: var(--vd-text);
	line-height: 1.35;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.vd-announce__cta {
	padding-right: 10px;
	gap: 12px;
	box-shadow: 0 10px 24px -10px rgba(201, 101, 56, .8);
}
.vd-announce__cta-go {
	width: 28px;
	height: 28px;
	border-radius: 50%;
	background: #fff;
	color: var(--vd-primary);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 12px;
}

/* --------------------------------------------------------------------------
   Quick links (arch-top shrine tiles)
   Homepage only: .vd-qlink is written solely by home_view #quick_links, so
   inner pages and other modules never match these rules.

   Flex rather than grid: the tile count is odd, and a centred final row reads
   as composed where a grid's left-aligned orphan reads as a mistake.
   -------------------------------------------------------------------------- */
.vd-qlinks {
	display: flex; flex-wrap: wrap; justify-content: center;
	gap: 18px 16px;
	padding-top: 10px; /* room for the crown diamond on each tile */
}
.vd-qlink {
	--vd-qlink-arch: 72px 72px 18px 18px / 50px 50px 18px 18px;
	position: relative;
	isolation: isolate;
	flex: 0 1 186px;
	display: flex; flex-direction: column; align-items: center; text-align: center; gap: 14px;
	padding: 28px 14px 18px;
	min-height: 168px;
	background:
		radial-gradient(120% 64% at 50% -8%, rgba(255,231,216,.92), transparent 62%),
		#fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-qlink-arch);
	box-shadow:
		var(--vd-sh-xs),
		inset 0 1px 0 rgba(255,255,255,.9);
	transition: transform var(--vd-t), box-shadow var(--vd-t), border-color var(--vd-t);
}
/* kalash diamond on the crown — same language as .vd-orn */
.vd-qlink::before {
	content: '';
	position: absolute;
	top: -6px; left: 50%;
	width: 11px; height: 11px;
	border-radius: 2px;
	background: linear-gradient(135deg, var(--vd-gold-soft), var(--vd-gold));
	box-shadow: 0 0 0 3px var(--vd-soft), 0 1px 2px rgba(43,37,34,.12);
	transform: translateX(-50%) rotate(45deg);
	z-index: 2;
	pointer-events: none;
	transition: background var(--vd-t);
}
/* gold inlay that follows the arch */
.vd-qlink::after {
	content: '';
	position: absolute; inset: 7px;
	border-radius: 62px 62px 12px 12px / 42px 42px 12px 12px;
	border: 1px solid rgba(201,149,79,.32);
	pointer-events: none;
	transition: border-color var(--vd-t);
}
.vd-qlink:hover,
.vd-qlink:focus-visible {
	transform: translateY(-6px);
	box-shadow: var(--vd-sh-md);
	border-color: var(--vd-primary-tint);
}
.vd-qlink:hover::before,
.vd-qlink:focus-visible::before {
	background: linear-gradient(135deg, var(--vd-gold), var(--vd-primary));
}
.vd-qlink:hover::after,
.vd-qlink:focus-visible::after {
	border-color: rgba(201,149,79,.62);
}
.vd-qlink__ring {
	position: relative; z-index: 1;
	width: 48px; height: 48px; flex: 0 0 auto;
	border-radius: 12px;
	display: inline-flex; align-items: center; justify-content: center;
	background: linear-gradient(150deg, var(--vd-soft), #FFE7D8);
	border: 1px solid var(--vd-border-soft);
	color: var(--vd-primary-dark); font-size: 20px;
	transform: rotate(45deg);
	box-shadow: 0 8px 16px -10px rgba(138,69,38,.35);
	transition: background var(--vd-t), color var(--vd-t), box-shadow var(--vd-t), border-color var(--vd-t);
}
.vd-qlink__ring .fa,
.vd-qlink__ring img { transform: rotate(-45deg); }
.vd-qlink:hover .vd-qlink__ring,
.vd-qlink:focus-visible .vd-qlink__ring {
	background: linear-gradient(150deg, var(--vd-primary), var(--vd-primary-dark));
	color: #fff;
	border-color: transparent;
	box-shadow: 0 10px 22px -10px rgba(201,101,56,.8);
}
.vd-qlink__ring img { width: 26px; height: 26px; object-fit: contain; }
.vd-qlink__label {
	position: relative; z-index: 1;
	font-family: var(--vd-font-display);
	font-size: 13px; font-weight: 600; color: var(--vd-text); line-height: 1.35;
}
.vd-qlink small { display: block; font-size: 11px; color: var(--vd-text-3); font-weight: 400; margin-top: 3px; }

/* --------------------------------------------------------------------------
   Mobile applications
   -------------------------------------------------------------------------- */
.vd-apps {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 16px;
}
.vd-app {
	display: flex; flex-direction: column; align-items: center; text-align: center;
	gap: 12px;
	padding: 20px 14px 16px;
	background: #fff;
	border: 1px solid var(--vd-border-soft);
	border-radius: var(--vd-r-lg);
	box-shadow: var(--vd-sh-xs);
	transition: transform var(--vd-t), box-shadow var(--vd-t), border-color var(--vd-t);
}
.vd-app:hover { transform: translateY(-4px); box-shadow: var(--vd-sh-md); border-color: var(--vd-primary-tint); }
.vd-app__ico {
	width: 64px; height: 64px; border-radius: 16px; flex: 0 0 auto;
	background: var(--vd-soft); border: 1px solid var(--vd-border-soft);
	overflow: hidden; display: flex; align-items: center; justify-content: center;
}
.vd-app__ico img { width: 100%; height: 100%; object-fit: contain; }
.vd-app__body { min-width: 0; width: 100%; }
.vd-app__t {
	font-family: var(--vd-font-display);
	font-size: 14px; font-weight: 600; color: var(--vd-text); line-height: 1.3;
}
.vd-app__s { font-size: 12px; color: var(--vd-text-3); margin-top: 3px; line-height: 1.4; }
.vd-app__stores { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 10px; }
.vd-store {
	display: inline-flex; align-items: center; gap: 6px;
	padding: 5px 10px; border-radius: var(--vd-r-pill);
	background: var(--vd-text); color: #fff;
	font-size: 10.5px; font-weight: 600; letter-spacing: .03em; white-space: nowrap;
	transition: background var(--vd-t), transform var(--vd-t), color var(--vd-t);
}
.vd-store .fa { font-size: 13px; }
.vd-store:hover { background: var(--vd-primary-dark); color: #fff; transform: translateY(-1px); }
.vd-store--alt { background: #fff; color: var(--vd-text); border: 1px solid var(--vd-border); }
.vd-store--alt:hover { background: var(--vd-soft); color: var(--vd-primary-dark); }

/* --------------------------------------------------------------------------
   Recent photos
   -------------------------------------------------------------------------- */
.vd-photos {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(154px, 1fr));
	gap: 14px;
}
.vd-photo {
	position: relative; display: block; overflow: hidden;
	border-radius: var(--vd-r-md);
	aspect-ratio: 1 / 1;
	background: var(--vd-soft);
	border: 1px solid var(--vd-border-soft);
	box-shadow: var(--vd-sh-xs);
	transition: transform var(--vd-t), box-shadow var(--vd-t);
}
.vd-photo img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--vd-ease); }
.vd-photo::after {
	content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 62%;
	background: linear-gradient(180deg, rgba(43,37,34,0), rgba(43,37,34,.72));
	opacity: 0; transition: opacity var(--vd-t);
}
.vd-photo__cap {
	position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
	padding: 10px 12px; color: #fff; font-size: 11.5px; line-height: 1.35;
	opacity: 0; transform: translateY(6px);
	transition: opacity var(--vd-t), transform var(--vd-t);
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.vd-photo:hover { transform: translateY(-4px); box-shadow: var(--vd-sh-md); }
.vd-photo:hover img { transform: scale(1.08); }
.vd-photo:hover::after,
.vd-photo:hover .vd-photo__cap { opacity: 1; transform: translateY(0); }

/* --------------------------------------------------------------------------
   Virtual tour
   -------------------------------------------------------------------------- */
.vd-tour {
	border-radius: var(--vd-r-xl);
	overflow: hidden;
	border: 1px solid var(--vd-border);
	box-shadow: var(--vd-sh-md);
	background: #fff;
	padding: 10px;
}
.vd-tour__frame {
	border-radius: var(--vd-r-lg); overflow: hidden;
	aspect-ratio: 21 / 9; min-height: 280px; background: var(--vd-soft);
}
.vd-tour__frame iframe { width: 100%; height: 100%; display: block; }

/* --------------------------------------------------------------------------
   Decorative temple divider
   -------------------------------------------------------------------------- */
.vd-divider {
	position: relative; line-height: 0;
	background: var(--vd-cream);
	overflow: hidden;
}
.vd-divider svg { width: 100%; height: auto; min-width: 1100px; display: block; }
.vd-divider--onfoot { background: var(--vd-warm-white); }

/* --------------------------------------------------------------------------
   Footer

   Three bands, matching the supplied design sheet:

     1. THE INVOCATION - cream, a shikhara skyline watermark, the Jai
        Swaminarayan title, a lotus rule, the devotional line, and the
        Faith / Tradition / Service mark on the right.
     2. THE WALL - deep brown, five columns, a quarter-mandala at each left
        corner, floral pillars between the columns, the mandir photograph
        dissolving into the right edge, closed by a carved jali course.
     3. THE BASE - credit, policy links, benediction.

   EVERY ornament in the sheet is drawn here rather than shipped as a PNG:
   footer-top-bg (the skyline) is the existing web.home.skyline partial,
   footer-right-temple is the homepage's own hero/temple.webp toned warm, and
   pattern-left, divider-1, divider-2, divider-vertical, border-bottom, the
   social discs, the contact discs and button-subscribe are CSS or inline SVG.
   Nothing here adds an image request or an icon font.

   PALETTE - the six codes from the sheet, and nothing else:
     #5A2E17 dark   #8B4513 brown   #B05A32 terracotta
     #D7995D gold   #F3E1D3 cream   #FFFFFF white

   EVERY value that changes responsively is a --vd-f-* custom property
   declared ONCE, here, on footer.vd-footer. vadtal-page.css consumes those
   tokens and must never redeclare one: that is what makes a media query in
   this file automatically reach body.vd-page, where vadtal-page.css loads
   last and its higher-specificity rules would otherwise pin the desktop
   shape at every breakpoint.
   -------------------------------------------------------------------------- */
footer.vd-footer {
	/* --- palette: the six codes from the design sheet, section 12 --- */
	--vd-f-dark:  #5A2E17;
	--vd-f-brown: #8B4513;
	--vd-f-terra: #B05A32;
	--vd-f-gold:  #D7995D;
	--vd-f-cream: #F3E1D3;

	--vd-f-ink:   #FFFFFF;
	--vd-f-ink-2: var(--vd-f-cream);
	--vd-f-line:  rgba(215,153,93,.30);

	/* --- responsive tokens: the ONLY things the breakpoints below touch --- */
	--vd-f-vow-pt:  44px;   /* invocation band padding                       */
	--vd-f-vow-pb:  40px;
	--vd-f-jai:     34px;   /* invocation title size                         */
	--vd-f-quote:   14px;
	/* The shrine column is the widest because it has a hard floor the others
	   do not: six social discs must sit on ONE row. At --vd-f-disc 38px and a
	   9px gap that row is 273px, so the ratio below has to keep this column
	   above that at every width where the five-column grid still applies. */
	--vd-f-cols:    minmax(0, 1.5fr) minmax(0, .85fr) minmax(0, .95fr) minmax(0, 1.05fr) minmax(0, 1.15fr);
	--vd-f-gap:     0 56px;
	--vd-f-gap-h:   28px;   /* half the gutter: where the pillars sit       */
	/* The footer runs WIDER than the site's --vd-container, deliberately.
	   That token is 1280px (1360 over 1600px), which on a 1920 screen leaves
	   280px of dead wall either side of five columns - the design sheet has
	   them spanning nearly the full width instead. This is scoped to the
	   footer's own containers, so the header and every content section keep
	   the site width they had. */
	--vd-f-max:     1720px;
	--vd-f-pt:      44px;   /* wall padding                                  */
	--vd-f-pb:      44px;
	--vd-f-logo:    215px;
	--vd-f-photo:   28%;    /* mandir photograph width                       */
	--vd-f-mandala: 190px;
	--vd-f-jali:    18px;   /* carved course closing the wall                */
	--vd-f-disc:    38px;   /* social disc - see the note on --vd-f-cols     */
	--vd-f-tdisc:   34px;   /* contact disc                                  */

	position: relative;
	margin: 0;
	padding: 0;
	width: 100%;
	background: var(--vd-f-dark);
	color: var(--vd-f-ink);
	font-family: var(--vd-font);
	isolation: isolate;
}

footer.vd-footer .vd-container { max-width: var(--vd-f-max); }

footer.vd-footer ul { list-style: none; margin: 0; padding: 0; }
footer.vd-footer a { color: var(--vd-f-ink); text-decoration: none; }
footer.vd-footer a:hover,
footer.vd-footer a:focus { color: var(--vd-f-gold); text-decoration: none; }

/* ==========================================================================
   1. THE INVOCATION  (sheet 1, 2, 3, 7)
   ========================================================================== */
.vd-fvow {
	position: relative;
	overflow: hidden;
	background: linear-gradient(180deg, #FEFAF6 0%, #FAEFE4 55%, var(--vd-f-cream) 100%);
	padding: var(--vd-f-vow-pt) 0 var(--vd-f-vow-pb);
	text-align: center;
}
/* The skyline partial, laid in as a watermark and hung off the bottom edge so
   the spires rise out of the band.

   height:auto is load-bearing. The partial's viewBox is 1440x180 and it sets
   preserveAspectRatio="xMidYMax slice", so pinning the <svg> to the band's
   own height made it COVER that box - at a 206px band every spire rendered
   14% oversized and the left and right ends were cropped off. Letting the
   element keep the artwork's aspect ratio draws it at natural size instead,
   and the band's overflow:hidden trims the tops on viewports wide enough to
   scale it past the band height. */
.vd-fvow__sky {
	position: absolute; left: 0; right: 0; bottom: 0; top: auto;
	pointer-events: none; line-height: 0;
	z-index: 0;
}
.vd-fvow__sky svg {
	width: 100%; height: auto; min-width: 1100px; display: block;
}
.vd-fvow__in { position: relative; z-index: 1; }

.vd-fvow__jai {
	margin: 0;
	color: var(--vd-f-terra);
	font-family: 'Noto Serif Gujarati', var(--vd-font-serif), serif;
	font-size: var(--vd-f-jai);
	font-weight: 700;
	line-height: 1.35;
	letter-spacing: .01em;
}
.vd-fvow__quote {
	margin: 0;
	color: var(--vd-f-brown);
	font-size: var(--vd-f-quote);
	font-style: italic;
	line-height: 1.7;
	max-width: 620px;
	margin-inline: auto;
}

/* ---- the rules either side of a mark (sheet 7: divider-1, divider-2) ---- */
.vd-forn {
	display: flex; align-items: center; justify-content: center;
	gap: 12px;
	margin: 12px 0;
	color: var(--vd-f-terra);
}
.vd-forn__mark { width: 44px; height: 26px; flex: 0 0 auto; display: block; }
.vd-forn__rule {
	width: 118px; height: 1px; flex: 0 0 auto;
	background: linear-gradient(90deg, rgba(201,149,79,0), var(--vd-f-gold));
	position: relative;
}
/* the small ring that finishes each rule where it meets the mark */
.vd-forn__rule::after {
	content: ''; position: absolute; right: -1px; top: -2px;
	width: 5px; height: 5px; border-radius: 50%;
	border: 1px solid var(--vd-f-gold);
	background: transparent;
}
.vd-forn__rule:first-child {
	background: linear-gradient(90deg, var(--vd-f-gold), rgba(201,149,79,0));
	transform: scaleX(-1);
}
.vd-forn--sm { margin: 10px 0 0; }
.vd-forn--sm .vd-forn__mark { width: 30px; height: 12px; }
.vd-forn--sm .vd-forn__rule { width: 74px; }

/* ==========================================================================
   2. THE WALL  (sheet 5, 8, 4)
   ========================================================================== */
/* The gradient runs dark at the left to warm at the right, which is what
   lets the photograph arrive without a seam: by the time the wall reaches
   the picture it is already the picture's own tone. */
.vd-fwall {
	position: relative;
	overflow: hidden;
	background:
		radial-gradient(120% 150% at 100% 50%, rgba(215,153,93,.18), rgba(215,153,93,0) 62%),
		linear-gradient(100deg, #4C2611 0%, var(--vd-f-dark) 26%, #6F3517 58%, #7E3F14 82%, var(--vd-f-brown) 100%);
}

/* ---- the mandir photograph (sheet 4) ----------------------------------- */
/* hero/temple.webp is a bright, blue-sky picture. The filter walks it to the
   sheet's palette - sepia flattens the sky to tan, the hue-rotate and
   saturate push that tan warm, and the brightness sits it into the wall -
   and the mask dissolves its left and bottom edges so it has no rectangle.
   Behind @supports so a browser without mask-image gets no photograph rather
   than a hard-edged one. */
.vd-fwall__photo {
	position: absolute; top: 0; right: 0; bottom: 0;
	width: var(--vd-f-photo);
	z-index: 0;
	pointer-events: none;
	display: none;
}
@supports ((-webkit-mask-image: url("")) or (mask-image: url(""))) {
	.vd-fwall__photo { display: block; }
}
.vd-fwall__photo img {
	width: 100%; height: 100%;
	object-fit: cover; object-position: 62% 30%;
	display: block;
	filter: sepia(.86) saturate(1.45) hue-rotate(-12deg) brightness(.45) contrast(1.02);
	/* The horizontal mask never reaches full opacity. Capping it at .72 is what
	   lets the wall keep showing through the picture's brightest marble, and
	   it is half of the contrast guarantee below. */
	-webkit-mask-image:
		linear-gradient(90deg, transparent 0%, rgba(0,0,0,.16) 30%, rgba(0,0,0,.48) 62%, rgba(0,0,0,.72) 100%),
		linear-gradient(180deg, transparent 0%, #000 14%, #000 84%, transparent 100%);
	        mask-image:
		linear-gradient(90deg, transparent 0%, rgba(0,0,0,.16) 30%, rgba(0,0,0,.48) 62%, rgba(0,0,0,.72) 100%),
		linear-gradient(180deg, transparent 0%, #000 14%, #000 84%, transparent 100%);
	-webkit-mask-composite: source-in;
	        mask-composite: intersect;
}
/* THERE IS DELIBERATELY NO SCRIM OVERLAY HERE.

   The obvious way to protect the copy is a dark rectangle over the picture,
   and it does not work: the photo's own mask is fully transparent at the box's
   left edge, so a scrim that opens dark there paints opaque brown over bare
   wall and draws a hard vertical seam down the entire footer. Darkening the
   IMAGE instead means the mask governs every edge and nothing can mismatch.

   Why the picture can sit under the copy at all. The Get In Touch column runs
   1099-1336 at a 1440 viewport and the picture's box starts at 1008, so the
   column is over the photograph rather than beside it - its own tone cannot be
   relied on, because one white marble highlight behind the address would take
   that copy under AA. brightness(.45) and the .72 mask cap bound the worst
   case instead: a PURE WHITE source pixel lands near #846954, which is 5.08:1
   against white - so no pixel of this photograph can fail regardless of what
   it depicts. It is 4.48:1 against --vd-f-ink-2, just under, which is exactly
   why .vd-ftouch__list is set in white below. Raising either value breaks
   this. */

/* ---- quarter-mandala at each left corner (sheet 8: pattern-left) -------- */
/* One tile, drawn once and mirrored vertically for the lower corner. Source
   before URL-encoding - a rosette centred off-canvas at (0,120):

     <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 240'>
       <g fill='none' stroke='#D7995D' stroke-width='1.1' stroke-linecap='round'>
         <circle cx='0' cy='120' r='26'/><circle cx='0' cy='120' r='44'/>
         <circle cx='0' cy='120' r='74'/><circle cx='0' cy='120' r='100'/>
         <g id='p'><path d='M44 120q17-13 38 0-21 13-38 0z'/></g>
         ... the petal repeated at -72 -48 -24 0 24 48 72 degrees ...
         <circle cx='86' cy='120' r='3'/> and the same rotated
       </g>
     </svg>
*/
.vd-fwall::before,
.vd-fwall::after {
	content: ''; position: absolute; left: 0; z-index: 0;
	width: calc(var(--vd-f-mandala) * .5); height: var(--vd-f-mandala);
	pointer-events: none;
	opacity: .34;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 240'%3E%3Cg fill='none' stroke='%23D7995D' stroke-width='1.1' stroke-linecap='round'%3E%3Ccircle cx='0' cy='120' r='26'/%3E%3Ccircle cx='0' cy='120' r='44'/%3E%3Ccircle cx='0' cy='120' r='74'/%3E%3Ccircle cx='0' cy='120' r='100'/%3E%3Cg transform='rotate(-72 0 120)'%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3Cg transform='rotate(-48 0 120)'%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3Cg transform='rotate(-24 0 120)'%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3Cg%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3Cg transform='rotate(24 0 120)'%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3Cg transform='rotate(48 0 120)'%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3Cg transform='rotate(72 0 120)'%3E%3Cpath d='M44 120q17-13 38 0-21 13-38 0z'/%3E%3Ccircle cx='90' cy='120' r='3'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") no-repeat left center / contain;
}
.vd-fwall::before { top: 0; }
.vd-fwall::after  { bottom: var(--vd-f-jali); transform: scaleY(-1); }

/* ---- the carved course closing the wall (sheet 8: border-bottom) -------- */
/* A repeat-x tile, not one stretched SVG: a tile holds its proportion at
   320px and at 2560px and can never force a horizontal scrollbar. Source:

     <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 18'>
       <path d='M3 17v-6c0-4.4 6-7.4 15-7.4s15 3 15 7.4v6' fill='none'
             stroke='#D7995D' stroke-opacity='.62' stroke-width='1.1'/>
       <g fill='#D7995D' fill-opacity='.58'>
         <path d='M18 1.4l2 3.3-2 3.3-2-3.3z'/>
         <rect x='0' y='16.4' width='36' height='1.6'/>
       </g>
     </svg>
*/
.vd-fwall__jali {
	position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
	height: var(--vd-f-jali);
	pointer-events: none;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36 18'%3E%3Cpath d='M3 17v-6c0-4.4 6-7.4 15-7.4s15 3 15 7.4v6' fill='none' stroke='%23D7995D' stroke-opacity='.62' stroke-width='1.1'/%3E%3Cg fill='%23D7995D' fill-opacity='.58'%3E%3Cpath d='M18 1.4l2 3.3-2 3.3-2-3.3z'/%3E%3Crect x='0' y='16.4' width='36' height='1.6'/%3E%3C/g%3E%3C/svg%3E") repeat-x center bottom / 36px var(--vd-f-jali);
}

/* ---- the five columns --------------------------------------------------- */
.vd-footer__main {
	position: relative; z-index: 2;
	display: grid;
	grid-template-columns: var(--vd-f-cols);
	align-items: start;
	gap: var(--vd-f-gap);
	padding: var(--vd-f-pt) 0 calc(var(--vd-f-pb) + var(--vd-f-jali));
}
.vd-footer__main > div { position: relative; min-width: 0; }

/* ---- floral pillar between the columns (sheet 7: divider-vertical) ------ */
/* The rule is the ::before and the rosette that caps it is the ::after, both
   on the column that follows the gutter. */
.vd-footer__main > div + div::before {
	content: ''; position: absolute;
	left: calc(var(--vd-f-gap-h) * -1); top: 26px; bottom: 6px; width: 1px;
	background: linear-gradient(180deg,
		rgba(255,255,255,0) 0%,
		rgba(255,255,255,.42) 18%,
		rgba(255,255,255,.42) 82%,
		rgba(255,255,255,0) 100%);
	pointer-events: none;
}
.vd-footer__main > div + div::after {
	content: ''; position: absolute;
	left: calc(var(--vd-f-gap-h) * -1 - 7px); top: 8px;
	width: 15px; height: 15px;
	pointer-events: none;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 1.4q1.5 5.3 3.7 4.9-.9 2.2 4.9 3.7-5.8 1.5-4.9 3.7-2.2-.4-3.7 4.9-1.5-5.3-3.7-4.9.9-2.2-4.9-3.7 5.8-1.5 4.9-3.7 2.2.4 3.7-4.9z' fill='%23D7995D' fill-opacity='.85'/%3E%3C/svg%3E") no-repeat center / contain;
}

footer.vd-footer h4 {
	position: relative;
	margin: 0 0 22px;
	padding-bottom: 13px;
	color: var(--vd-f-ink);
	font-family: var(--vd-font-display);
	font-size: 17px;
	font-weight: 600;
	letter-spacing: .04em;
	line-height: 1.25;
}
footer.vd-footer h4::after {
	content: '';
	position: absolute; left: 0; bottom: 0;
	width: 42px; height: 2px;
	border-radius: 2px;
	background: var(--vd-f-gold);
}

/* ---- link columns (sheet: quick + useful) ------------------------------- */
footer.vd-footer .vd-flinks li + li { margin-top: 2px; }
footer.vd-footer .vd-flinks a {
	display: flex; align-items: center; gap: 10px;
	padding: 6px 0;
	font-size: 14.5px;
	line-height: 1.5;
	color: var(--vd-f-ink-2);
	transition: color var(--vd-t), transform var(--vd-t);
}
/* the chevron keeps a fixed track, so hover nudges the icon without
   reflowing the label by a pixel */
footer.vd-footer .vd-flinks a .fa {
	font-size: 13px;
	color: var(--vd-f-gold);
	width: 11px; flex: 0 0 11px; text-align: center;
	transition: transform var(--vd-t);
}
footer.vd-footer .vd-flinks a:hover,
footer.vd-footer .vd-flinks a:focus-visible { color: var(--vd-f-ink); transform: translateX(4px); }
footer.vd-footer .vd-flinks a:hover .fa,
footer.vd-footer .vd-flinks a:focus-visible .fa { transform: translateX(2px); }

/* ---- brand column (sheet 6, 9) ------------------------------------------ */
.vd-footer__brand { text-align: center; }
.vd-footer__logo {
	display: block; margin: 0 auto 14px;
	max-width: var(--vd-f-logo); height: auto;
}
.vd-footer__brand p {
	margin: 0;
	font-size: 14px;
	line-height: 1.75;
	color: var(--vd-f-ink-2);
}

/* Solid discs, per the sheet - an outline chip would not read as the same
   family as the filled contact discs in the last column. */
.vd-fsocial { display: flex; justify-content: center; flex-wrap: wrap; gap: 9px; margin-top: 18px; }
footer.vd-footer .vd-fsocial a {
	width: var(--vd-f-disc); height: var(--vd-f-disc); border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: linear-gradient(180deg, #BC6438 0%, var(--vd-f-terra) 55%, #9C4C28 100%);
	color: var(--vd-f-ink); font-size: 16px;
	box-shadow: 0 3px 10px -4px rgba(0,0,0,.55);
	transition: background var(--vd-t), transform var(--vd-t), color var(--vd-t);
}
/* #5A2E17 on #D7995D measures 4.69:1 */
footer.vd-footer .vd-fsocial a:hover,
footer.vd-footer .vd-fsocial a:focus-visible {
	background: var(--vd-f-gold);
	color: var(--vd-f-dark);
	transform: translateY(-3px);
}

/* (0,2,2). `.vd-footer__brand p` is (0,2,1) and silently wins the colour on a
   bare `.vd-fcreed`, so this rule has to carry the class twice to say what it
   means. Set in the cream rather than the gold on purpose: #D7995D measures
   3.1:1 on this wall and cannot carry 13px text. The gold stays on the
   separators, which are decorative. Same story for .vd-news__note. */
footer.vd-footer .vd-fcreed {
	position: relative;
	/* auto, not 0: this rule is (0,2,2) and out-ranks the (0,2,1) rule that
	   centres .vd-footer__brand p inside its 430px box from 1024px down. */
	margin: 20px auto 0;
	padding: 11px 0 0;
	color: var(--vd-f-ink-2);
	font-size: 13px;
	font-weight: 500;
	letter-spacing: .22em;
	text-transform: uppercase;
}
.vd-fcreed::before {
	content: ''; position: absolute; left: 18%; right: 18%; top: 0; height: 1px;
	background: linear-gradient(90deg, transparent, var(--vd-f-line), transparent);
}
.vd-fcreed span { color: rgba(215,153,93,.5); margin: 0 4px; }

/* ---- newsletter (sheet 11) ---------------------------------------------- */
.vd-news p {
	margin: 0 0 16px;
	font-size: 14px; line-height: 1.7; color: var(--vd-f-ink-2);
}
.vd-news form.contact-form {
	display: grid; gap: 12px; max-width: 330px; margin: 0; float: none;
}
/* The form still carries .clearfix because legacy pages key off it, and
   bootstrap.css:5288 gives .clearfix a ::before and an ::after at
   display:table. Inside a grid container both become grid items, injecting
   two phantom rows and two 12px gaps on every inner page. */
footer.vd-footer .vd-news form.contact-form::before,
footer.vd-footer .vd-news form.contact-form::after { content: none; display: none; }

.vd-news__field { position: relative; display: block; }
.vd-news__field .fa {
	position: absolute; left: 15px; top: 50%; transform: translateY(-50%);
	color: var(--vd-f-gold); font-size: 15px; pointer-events: none;
}
footer.vd-footer .vd-news input.form-control[type="email"],
footer.vd-footer .vd-news input.footer_nl_txt {
	width: 100%; height: 48px; margin: 0;
	padding: 0 16px 0 42px;
	border-radius: 6px;
	border: 1px solid var(--vd-f-line);
	background: rgba(255,255,255,.08);
	box-shadow: none;
	color: var(--vd-f-ink);
	font-size: 14px; line-height: 48px;
	-webkit-appearance: none; appearance: none;
	transition: background var(--vd-t), border-color var(--vd-t), box-shadow var(--vd-t);
}
footer.vd-footer .vd-news input.form-control[type="email"]::placeholder,
footer.vd-footer .vd-news input.footer_nl_txt::placeholder { color: rgba(255,244,237,.72); }
footer.vd-footer .vd-news input.form-control[type="email"]:focus,
footer.vd-footer .vd-news input.footer_nl_txt:focus {
	background: rgba(255,255,255,.14);
	border-color: var(--vd-f-gold);
	box-shadow: 0 0 0 2px rgba(255,255,255,.35);
	color: var(--vd-f-ink);
}
/* Scoped to :not(:focus-visible) so the mouse behaviour is kept but the
   keyboard ring declared near the top of this file survives. */
footer.vd-footer .vd-news input:focus:not(:focus-visible) { outline: 0; }

/* button-subscribe: the one gold-filled control, and the only saturated
   thing on the wall. #6E3419 on its darkest stop measures 5.9:1. */
footer.vd-footer .vd-news input.btn[type="submit"],
footer.vd-footer .vd-news input.footer_nl_btn {
	width: 100%; height: 48px; margin: 0; padding: 0 18px;
	border: 0; border-radius: 6px;
	background: linear-gradient(180deg, #F0C286 0%, var(--vd-f-gold) 100%);
	background-color: #D7995D;
	color: var(--vd-f-dark);
	font-family: var(--vd-font-display);
	font-size: 13px; font-weight: 700;
	letter-spacing: .14em; text-transform: uppercase;
	box-shadow: 0 6px 16px -8px rgba(0,0,0,.6);
	cursor: pointer;
	-webkit-appearance: none; appearance: none;
	transition: transform var(--vd-t), filter var(--vd-t);
}
footer.vd-footer .vd-news input.btn[type="submit"]:hover,
footer.vd-footer .vd-news input.footer_nl_btn:hover {
	filter: brightness(1.06);
	color: var(--vd-f-dark);
	transform: translateY(-2px);
}
/* the inverted white ring is only 1.8:1 on the gold plate, so this one
   control states a dark ring instead */
footer.vd-footer .vd-news input[type="submit"]:focus-visible { outline-color: var(--vd-f-dark); }

/* (0,2,2), for the same reason as .vd-fcreed above: `.vd-news p` is (0,2,1)
   and was overriding this, and the gold would fail AA here anyway. */
footer.vd-footer .vd-news__note {
	margin: 16px auto 0;
	padding-top: 13px;
	border-top: 1px solid var(--vd-f-line);
	color: var(--vd-f-ink-2);
	font-size: 13px; font-style: italic; line-height: 1.6;
	text-align: center;
}

/* ---- get in touch (sheet 10) -------------------------------------------- */
footer.vd-footer ul.vd-ftouch__list { display: grid; gap: 14px; }
/* WHITE HERE, NOT --vd-f-ink-2, AND IT MATTERS.

   This is the one column that sits over the photograph. The filter chain ends
   in brightness(.45), so the brightest pixel the picture can possibly produce
   - from a pure white source - is about #786E62; at the .72 mask cap over
   #8A4526 that composites to roughly #856950. White clears AA on that ground
   at 5.05:1, but the cream secondary ink only reaches 3.97:1 and fails. Every
   other column is on bare wall and can use the cream safely. */
.vd-ftouch__list li {
	display: flex; align-items: center; gap: 12px;
	font-size: 14px; line-height: 1.6;
	color: var(--vd-f-ink);
}
.vd-ftouch__ico {
	width: var(--vd-f-tdisc); height: var(--vd-f-tdisc); border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	flex: 0 0 auto;
	background: linear-gradient(180deg, #BC6438 0%, var(--vd-f-terra) 55%, #9C4C28 100%);
	color: var(--vd-f-ink); font-size: 14px;
	box-shadow: 0 3px 10px -4px rgba(0,0,0,.55);
}
footer.vd-footer .vd-ftouch__list a { color: var(--vd-f-ink); }
footer.vd-footer .vd-ftouch__list a:hover,
footer.vd-footer .vd-ftouch__list a:focus-visible { color: var(--vd-f-gold); }
/* the address is the one multi-line row, so its disc aligns to the first
   line rather than to the block's centre */
.vd-ftouch__addr { align-items: flex-start !important; padding-top: 15px; margin-top: 3px; position: relative; }
.vd-ftouch__addr::before {
	content: ''; position: absolute; left: 0; right: 8%; top: 0; height: 1px;
	background: linear-gradient(90deg, var(--vd-f-line), transparent);
}

/* ==========================================================================
   3. THE BASE
   ========================================================================== */
.vd-footer__bottom {
	position: relative; z-index: 2;
	background: var(--vd-f-dark);
}
.vd-footer__bottom .vd-container {
	display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
	gap: 8px 24px; padding-top: 14px; padding-bottom: 14px;
}
.vd-footer__bottom p { margin: 0; font-size: 13px; line-height: 1.6; color: rgba(243,225,211,.86); }
footer.vd-footer .vd-footer__bottom a { color: rgba(243,225,211,.86); }
footer.vd-footer .vd-footer__bottom a:hover,
footer.vd-footer .vd-footer__bottom a:focus-visible { color: var(--vd-f-gold); text-decoration: underline; }
.vd-footer__legal {
	display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; font-size: 13px;
}
.vd-footer__legal > span { color: rgba(215,153,93,.45); }
.vd-fbless {
	display: inline-flex; align-items: center; gap: 8px;
	padding-left: 14px;
	border-left: 1px solid var(--vd-f-line);
	color: var(--vd-f-gold) !important;
	font-size: 13.5px;
}
.vd-fbless svg { width: 18px; height: 12px; flex: 0 0 auto; }

/* Motion: the footer carries no keyframe animation, only hover/focus
   transitions. header.blade.php emits class="vd-home{{ ... }}", so inner
   pages are `vd-home vd-page` and the reduced-motion reset on `.vd-home *`
   further down this file already reaches them. No footer-scoped block. */

/* Motion: the footer carries no keyframe animation, only hover/focus
   transitions. header.blade.php emits class="vd-home{{ ... }}", so inner
   pages are `vd-home vd-page` and the reduced-motion reset on `.vd-home *`
   further down this file already reaches them. No footer-scoped block. */

/* --------------------------------------------------------------------------
   Back to top
   -------------------------------------------------------------------------- */
.vd-top {
	position: fixed; right: 22px; bottom: 22px; z-index: 90;
	width: 44px; height: 44px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: var(--vd-primary); color: #fff; font-size: 16px;
	box-shadow: 0 10px 26px -10px rgba(201,101,56,.9);
	opacity: 0; visibility: hidden; transform: translateY(10px);
	transition: opacity var(--vd-t), visibility var(--vd-t), transform var(--vd-t), background var(--vd-t);
}
.vd-top.is-on { opacity: 1; visibility: visible; transform: translateY(0); }
.vd-top:hover { background: var(--vd-primary-dark); color: #fff; }

/* --------------------------------------------------------------------------
   Modal (self-contained - replaces the Bootstrap modal on this page only)
   -------------------------------------------------------------------------- */
.vd-modal {
	position: fixed; top: 0; right: 0; bottom: 0; left: 0;
	z-index: 200;
	display: flex; align-items: center; justify-content: center;
	padding: 20px;
	background: rgba(43,37,34,.66);
	opacity: 0; visibility: hidden;
	transition: opacity .3s var(--vd-ease), visibility .3s;
	overflow-y: auto;
}
.vd-modal.is-open { opacity: 1; visibility: visible; }
.vd-modal__box {
	position: relative;
	width: 100%; max-width: 560px; margin: auto;
	background: #fff; border-radius: var(--vd-r-lg);
	box-shadow: var(--vd-sh-lg);
	overflow: hidden;
	transform: translateY(16px) scale(.98);
	transition: transform .3s var(--vd-ease);
}
.vd-modal.is-open .vd-modal__box { transform: translateY(0) scale(1); }
.vd-modal--info { align-items: flex-start; padding: 28px 16px; }
.vd-modal__box--info {
	max-width: 480px;
	max-height: calc(100vh - 56px);
	display: flex; flex-direction: column;
}
.vd-modal__banner {
	position: relative;
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	padding: 15px 52px 15px 20px;
	background: linear-gradient(100deg, var(--vd-on-dark-1) 0%, var(--vd-on-dark-2) 100%);
	color: #fff;
}
.vd-modal__banner h2 {
	color: #fff; font-size: 16px; font-weight: 600; letter-spacing: .02em;
}
.vd-modal--info .vd-modal__close {
	top: 10px; right: 10px;
	background: rgba(255,255,255,.18); color: #fff;
	box-shadow: none;
}
.vd-modal--info .vd-modal__close:hover { background: #fff; color: var(--vd-primary-dark); }
.vd-modal--info .vd-modal__banner .vd-card__more { margin-right: 4px; }
.vd-modal__sheet {
	flex: 1 1 auto;
	min-height: 0;
	padding: 8px 14px 16px;
	overflow-y: auto;
	-webkit-overflow-scrolling: touch;
}
.vd-modal__cta { padding: 8px 4px 4px; }
.vd-modal__close {
	position: absolute; top: 10px; right: 10px; z-index: 3;
	width: 36px; height: 36px; border-radius: 50%;
	display: inline-flex; align-items: center; justify-content: center;
	background: rgba(255,255,255,.94); color: var(--vd-text);
	box-shadow: var(--vd-sh-sm); font-size: 16px; line-height: 1;
	transition: background var(--vd-t), color var(--vd-t);
}
.vd-modal__close:hover { background: var(--vd-primary); color: #fff; }
.vd-modal__body { padding: 0; }
.vd-modal__body img { width: 100%; display: block; }
.vd-modal__body a + a img { margin-top: 2px; }

/* --------------------------------------------------------------------------
   Reveal animation

   One gesture for the whole page: a short rise out of a fade. The gesture is
   not new - what changed is who performs it and when. A section head lights
   line by line instead of arriving as a slab, the six seva lamps and the
   announcement posters ignite in sequence inside the block that carries them,
   and the diamond ornament draws its two gold rules outward as it lights.

   Two rules hold it together:
     ONE RISE PER CHAIN - the rise belongs to the outermost revealed element;
       nothing inside it ever travels, so no reveal can read as parallax and
       the peak count of moving elements does not go up.
     ONE FADE PER CHAIN - either the container fades and its children ride in
       with it, or the container stays lit and the children fade in sequence.
       Never both: two stacked fades multiply, and the group arrives dim.

   Mechanism: keyframe animations with `both` fill, the same shape the hero
   cascade already uses (see "entrance motion"), not a transition. A transition
   has to declare a resting state and a transition-property list, and both were
   doing damage. `.vd-rv.is-in { transform: none }` is (0,2,0) and sat later in
   this file than .vd-btn--primary:hover (297), .vd-tease:hover (982),
   .vd-qlink:hover (1577), .vd-app:hover (1615) and .vd-photo:hover (1671) -
   all also (0,2,0) - so five authored hover lifts never fired; and the
   `transition:` shorthand replaced those components' own transition lists, so
   their box-shadow and border-color hovers snapped instead of easing.

   The travel rides the independent `translate` property, never `transform`,
   so a reveal cannot claim a property a :hover needs - not even during the
   620ms it is running. No @keyframes here references a custom property, so
   every one of these animations stays on the compositor. A browser without
   `translate` drops the offset and the element simply fades: a graceful
   floor, never a stuck opacity 0.
   -------------------------------------------------------------------------- */

/* Tokens live on .vd-rv, not :root. .vd-rv is written only by home_view and
   home/sec_head, so these values - and their breakpoint overrides - are
   unreachable from an inner page even though this sheet is loaded there.
   Inheritance still carries them to every phased descendant. */
.vd-rv {
	--vd-rise:     18px;   /* the one travel distance in the system */
	--vd-step:     70ms;   /* the one beat; every delay is a multiple of it */
	--vd-dur:      .62s;   /* travel, and the ornament draw */
	--vd-dur-fade: .52s;   /* a revealed block's own fade */
	--vd-dur-lit:  .46s;   /* a phased child lighting inside it */
	/* Travel keeps the house curve. Opacity gets a gentler one: under
	   .22,.61,.36,1 a value is 61% home after 22% of the run - 137ms of 620ms -
	   so type is legible almost at once and then visibly drifts for 480ms.
	   .2,0,.35,1 holds it near 25% at that instant, so the fade lands with the
	   rise instead of long before it. Same duration, same distance. */
	--vd-ease-fade: cubic-bezier(.2, 0, .35, 1);
}

/* Each animation ends at the resting value, so the from-state is whatever the
   element itself declares. That is what keeps the tokens out of the keyframes. */
@keyframes vd-rv-rise { to { translate: none; } }
@keyframes vd-rv-fade { to { opacity: 1; } }
@keyframes vd-rv-draw { to { scale: none; } }

/* Only hide-before-reveal when JS is live to reveal it again (see head.blade.php). */
.vd-js .vd-rv { opacity: 0; translate: 0 var(--vd-rise); }
.vd-rv.is-in {
	animation:
		vd-rv-rise var(--vd-dur)      var(--vd-ease)      both,
		vd-rv-fade var(--vd-dur-fade) var(--vd-ease-fade) both;
}
/* An opacity-0 link is still tabbable. If the observer never fires, focus
   alone brings the block back - a reveal must not strand content. */
.vd-js .vd-rv:focus-within { opacity: 1; }

/* ---- delay ladder ----
   Identical to the .07-.35s ladder it replaces at desktop, so nothing already
   carrying data-d shifts, and it retunes wholesale with --vd-step on a phone.
   It stops at 5 because nothing on this page can emit more: home_view clamps
   every data-d with min(5, ...) and the only literals in the file are 1 and 2. */
.vd-rv[data-d="1"].is-in { animation-delay: calc(var(--vd-step) * 1); }
.vd-rv[data-d="2"].is-in { animation-delay: calc(var(--vd-step) * 2); }
.vd-rv[data-d="3"].is-in { animation-delay: calc(var(--vd-step) * 3); }
.vd-rv[data-d="4"].is-in { animation-delay: calc(var(--vd-step) * 4); }
.vd-rv[data-d="5"].is-in { animation-delay: calc(var(--vd-step) * 5); }


/* --------------------------------------------------------------------------
   Reveal orchestration

   Same gesture, phased. Three cascade hosts only: a section head, the seva
   card and the announcements grid. A host is a container whose children are a
   sequence the eye already follows - the lines of a heading, or a row of peer
   tiles. Everything else on the page stays a leaf and arrives whole.

   Step coefficients, and the rule is the whole story - the beat shrinks as the
   run gets longer:  x1.0 for runs of <=4,  x0.8 for 5-9,  x0.6 for >=10.

   Not hosts, on purpose:
     .vd-panel / .vd-panel__head - a painted plate carrying a poster arrives as
       one object; a second sequence inside it reads as parallax, and a fade
       inside a fading card compounds. Its ornament still draws (below), which
       costs no opacity.
     .vd-carousel / .vd-thumb - carousels() starts autoplay at page load, called
       from init() before reveal(), so by the time the band is scrolled into
       view the track has advanced and DOM order no longer matches what is on
       screen. A stagger there would fire on cards the reader cannot see, and a
       card parked outside the horizontal scroll box is exactly the one an
       observer strands. The gallery band is left exactly as it is today.
   -------------------------------------------------------------------------- */

/* ---- section heads: the block settles, its lines light in order ----
   The header keeps the same 18px rise it has today; only its fade is handed
   down, so eyebrow / heading / ornament / lead arrive one beat apart instead
   of as a slab. One fade per chain: the header no longer fades, its lines do.
   A .vd-sec-head paints nothing, so before the reveal fires there is still
   nothing drawn on screen and the box is the same size - no new failure mode,
   and no CLS. */
.vd-js .vd-sec-head.vd-rv   { opacity: 1; }
.vd-sec-head.vd-rv.is-in    { animation-name: vd-rv-rise; }
.vd-js .vd-sec-head.vd-rv > * { opacity: 0; }
.vd-sec-head.vd-rv.is-in > * {
	animation: vd-rv-fade var(--vd-dur-lit) var(--vd-ease-fade) both;
}
.vd-sec-head.vd-rv.is-in > *:nth-child(2) { animation-delay: calc(var(--vd-step) * 1); }
.vd-sec-head.vd-rv.is-in > *:nth-child(3) { animation-delay: calc(var(--vd-step) * 2); }
.vd-sec-head.vd-rv.is-in > *:nth-child(4) { animation-delay: calc(var(--vd-step) * 3); }

/* ---- the ornament draws ----
   The one place a second gesture earns its keep. .vd-orn is already shaped
   like a parted curtain - a diamond with a gold rule running out to each side
   - so the rules draw outward from the centre as the ornament lights. It is
   aria-hidden, it carries no type, it happens once per band.
   Nothing here touches opacity (the .vd-orn wrapper already carries the fade
   in a section head) and nothing touches `transform`, which .vd-orn span uses
   for its rotate(45deg) and its two gold box-shadow dots. `scale` changes no
   layout, so a 72px rule drawing from 0 cannot shift anything.
   The markup is <i></i><span></span><i></i>, so the right-hand rule is reached
   with :last-child - `i + i` above never matches. */
.vd-js .vd-sec-head.vd-rv .vd-orn i,
.vd-js .vd-panel.vd-rv .vd-orn i { scale: 0 1; transform-origin: 100% 50%; }
.vd-js .vd-sec-head.vd-rv .vd-orn i:last-child,
.vd-js .vd-panel.vd-rv .vd-orn i:last-child { transform-origin: 0 50%; }
.vd-sec-head.vd-rv.is-in .vd-orn i,
.vd-panel.vd-rv.is-in .vd-orn i {
	animation: vd-rv-draw var(--vd-dur) var(--vd-ease) both;
	animation-delay: calc(var(--vd-step) * 2);
}

/* ---- seva strip: six lamps lighting along the row ----
   The card is the surface and keeps its rise and its fade exactly as today.
   Only the 38px discs are phased, and only on `scale`. Two reasons, both
   structural: the six items carry the card's 1px --vd-border-soft dividers
   inside overflow:hidden, so translating them would shear the hairlines
   against the clipped edge; and a second fade inside a fading card would
   arrive dim. A disc scaling about its own centre never reaches its label,
   never moves layout, and leaves .vd-quick__item:hover .vd-quick__ico's
   translateY(-3px) untouched because that is `transform`, not `scale`.
   x0.8 -> the row is lit end to end in 280ms. */
.vd-js .vd-quick__card.vd-rv .vd-quick__ico { scale: .72; }
.vd-quick__card.vd-rv.is-in .vd-quick__ico {
	animation: vd-rv-draw var(--vd-dur-lit) var(--vd-ease) both;
}
.vd-quick__card.vd-rv.is-in > :nth-child(2) .vd-quick__ico { animation-delay: calc(var(--vd-step) *  .8); }
.vd-quick__card.vd-rv.is-in > :nth-child(3) .vd-quick__ico { animation-delay: calc(var(--vd-step) * 1.6); }
.vd-quick__card.vd-rv.is-in > :nth-child(4) .vd-quick__ico { animation-delay: calc(var(--vd-step) * 2.4); }
.vd-quick__card.vd-rv.is-in > :nth-child(5) .vd-quick__ico { animation-delay: calc(var(--vd-step) * 3.2); }
.vd-quick__card.vd-rv.is-in > :nth-child(6) .vd-quick__ico { animation-delay: calc(var(--vd-step) * 4); }

/* ---- announcements: the grid settles, the posters ignite ----
   .vd-announce paints nothing (a centred wrapping flex row), so the grid can
   keep the rise and hand the fade to the posters without an empty ground ever
   showing. That also removes the group-opacity cost: a container animating
   opacity over composited children needs a render surface spanning them - a
   container animating only `translate` does not.
   x0.6, individual for six beats then flat, so a 12-poster wall is lit in
   210ms rather than 462ms and no poster is ever left behind.
   *** Every rule here is anchored on BOTH .vd-section--announce and .vd-rv.
   .vd-announce is NOT homepage-only: announcement_view.blade.php renders it
   and vadtal-page.css styles it as an inner-page card. *** */
.vd-js .vd-section--announce .vd-announce.vd-rv { opacity: 1; }
.vd-section--announce .vd-announce.vd-rv.is-in  { animation-name: vd-rv-rise; }
.vd-js .vd-section--announce .vd-announce.vd-rv .vd-ann { opacity: 0; }
.vd-section--announce .vd-announce.vd-rv.is-in .vd-ann {
	animation: vd-rv-fade var(--vd-dur-lit) var(--vd-ease-fade) both;
}
.vd-section--announce .vd-announce.vd-rv.is-in .vd-ann:nth-child(2)   { animation-delay: calc(var(--vd-step) *  .6); }
.vd-section--announce .vd-announce.vd-rv.is-in .vd-ann:nth-child(3)   { animation-delay: calc(var(--vd-step) * 1.2); }
.vd-section--announce .vd-announce.vd-rv.is-in .vd-ann:nth-child(4)   { animation-delay: calc(var(--vd-step) * 1.8); }
.vd-section--announce .vd-announce.vd-rv.is-in .vd-ann:nth-child(5)   { animation-delay: calc(var(--vd-step) * 2.4); }
.vd-section--announce .vd-announce.vd-rv.is-in .vd-ann:nth-child(n+6) { animation-delay: calc(var(--vd-step) * 3); }
.vd-js .vd-section--announce .vd-announce.vd-rv:focus-within .vd-ann  { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
	html.vd-html { scroll-behavior: auto; }
	.vd-home *,
	.vd-home *::before,
	.vd-home *::after {
		animation-duration: .001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .001ms !important;
		scroll-behavior: auto !important;
	}
	/* The reveal travels on `translate` now, not `transform`, so this resets
	   `translate`. Resetting `transform` here would re-suppress the .vd-photo /
	   .vd-qlink / .vd-app / .vd-tease hover lifts - the exact bug the mechanism
	   swap removed - for every reduced-motion visitor. The hero cascade below
	   does still use `transform`, so that line is unchanged. */
	.vd-js .vd-rv, .vd-rv { opacity: 1; translate: none; }
	.vd-js .vd-hero__copy > *,
	.vd-js .vd-hero__figure,
	.vd-js .vd-rail__item { opacity: 1; transform: none; }
	.vd-carousel__track { scroll-behavior: auto; }

	/* The !important durations above stop the motion but do not repaint the
	   state - which is why the .vd-rv and hero lines above exist. Same
	   discipline for every new gated state. !important is used deliberately:
	   these animations fill forwards, and an animation outranks every normal
	   author declaration, so only an important declaration can put the resting
	   value back. It also makes the restore independent of specificity
	   arithmetic - each selector is the exact hidden selector it undoes.
	   Note this resets `translate` and `scale`, never `transform`, so the
	   .vd-ann, .vd-thumb, .vd-quick__ico and .vd-photo hover lifts survive. */
	.vd-js .vd-rv,
	.vd-js .vd-sec-head.vd-rv > *,
	.vd-js .vd-section--announce .vd-announce.vd-rv .vd-ann {
		opacity: 1 !important;
		translate: none !important;
	}
	.vd-js .vd-sec-head.vd-rv .vd-orn i,
	.vd-js .vd-panel.vd-rv .vd-orn i,
	.vd-js .vd-quick__card.vd-rv .vd-quick__ico {
		scale: none !important;
	}
}

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

/* ---- <= 1440px : slightly tighter rhythm ---- */
@media (max-width: 1440px) {
	.vd-carousel__nav--prev { left: -6px; }
	.vd-carousel__nav--next { right: -6px; }
}

/* ---- <= 1280px ---- */
@media (max-width: 1280px) {
	:root { --vd-rail-w: 184px; --vd-figure-h: min(58vh, 470px); }
	.vd-hero__grid { grid-template-columns: minmax(0, 1fr) minmax(240px, 380px) minmax(0, 1fr); gap: 8px 12px; }
	.vd-quick__t { font-size: 11px; letter-spacing: .05em; }
	.vd-nav__link { padding: 10px 10px; font-size: 12px; }
}

/* ---- <= 1199px : rail drops below, art shrinks ---- */
@media (max-width: 1199px) {
	:root { --vd-gut: 20px; --vd-figure-h: 330px; }
	footer.vd-footer {
		--vd-f-gap: 0 26px; --vd-f-gap-h: 13px;
		--vd-f-logo: 190px; --vd-f-mandala: 150px; --vd-f-jai: 30px;
	}
	.vd-hero { padding: 12px 0 24px; min-height: 0; }
	.vd-hero__grid {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
		grid-template-areas:
			"copy copy"
			"deity maharaj";
		gap: 18px;
		min-height: 0;
		padding-right: 0;
	}
	.vd-hero > .vd-container { padding-right: var(--vd-gut); }
	.vd-hero__copy { padding: 20px 18px 22px; }
	.vd-hero__figure { margin-bottom: 0; }
	.vd-hero__figure--deity,
	.vd-hero__figure--maharaj { justify-content: center; padding: 0; }
	.vd-hero__figure--deity .vd-hero__deity { object-position: center bottom; }
	.vd-section--gallery .vd-carousel { --vd-g-cols: 3; }
	.vd-section--announce .vd-ann { flex-basis: 140px; width: 140px; }
	.vd-rail {
		position: relative;
		right: auto;
		top: auto;
		bottom: auto;
		transform: none;
		width: auto;
		display: grid;
		grid-template-columns: repeat(3, minmax(0, 1fr));
		gap: 10px;
		margin: 14px var(--vd-gut) 0;
		padding: 0;
	}
	.vd-rail__item { border-radius: 12px; }
	.vd-rail__item:hover { transform: translateY(-3px); }
	.vd-header__in { min-height: 72px; }
	.vd-brand__mark { width: 180px; max-height: 50px; }
	.vd-nav__link { padding: 9px 8px; font-size: 11.5px; letter-spacing: .04em; }
	.vd-quick__card { grid-template-columns: repeat(3, minmax(0, 1fr)); }

	/* Every top-bar item is nowrap, so the welcome line has to leave before the
	   row can overflow the viewport (it does at ~1025px otherwise). */
	.vd-topbar__item--long { display: none; }
}

/* ---- the seva card's 3-up divider pattern, scoped so it cannot leak into the
        2-up layout that takes over at 767px ---- */
@media (min-width: 768px) and (max-width: 1199px) {
	.vd-quick__item:nth-child(3n) { border-right: 0; }
	.vd-quick__item:nth-child(-n+3) { border-bottom: 1px solid var(--vd-border-soft); }
}

/* ---- <= 1024px : nav collapses to the drawer, main row becomes 2-up ---- */
@media (max-width: 1024px) {
	.vd-nav { display: none; }
	.vd-burger { display: inline-flex; }
	.vd-header__in { gap: 14px; }

	.vd-feature { grid-template-columns: minmax(0, 1.4fr) minmax(240px, 1fr); }

	/* Five columns will not hold here. The shrine heads its own row and the
	   remaining four go two-up, which is why the pillars are switched off:
	   they are declared for a single row of columns and would otherwise draw
	   a rule down the middle of a wrapped grid. */
	footer.vd-footer {
		--vd-f-cols: repeat(2, minmax(0, 1fr));
		--vd-f-gap: 34px 40px; --vd-f-gap-h: 20px;
		--vd-f-pt: 36px; --vd-f-pb: 36px;
		--vd-f-mandala: 130px;
	}
	/* The photograph goes here, not at 767. Above this width it only ever sits
	   behind the Get In Touch column, which is set in white precisely so it can
	   survive the picture's brightest pixel. From two columns down the copy
	   reflows across the full width and the CREAM link text lands on it too -
	   and cream only manages ~3.97:1 against that worst case. There is no
	   reserved right-hand zone for a picture at these widths. */
	.vd-fwall__photo { display: none; }
	.vd-footer__brand { grid-column: 1 / -1; order: -1; padding-bottom: 8px; }
	.vd-footer__brand p { max-width: 430px; margin-left: auto; margin-right: auto; }
	.vd-footer__main > div + div::before,
	.vd-footer__main > div + div::after { display: none; }
	.vd-footer__main > .vd-footer__brand::after {
		content: ''; display: block; position: absolute;
		left: 14%; right: 14%; bottom: -16px; top: auto; width: auto; height: 1px;
		background: linear-gradient(90deg, transparent, var(--vd-f-line), transparent);
	}
	.vd-tour__frame { aspect-ratio: 16 / 9; }
}

/* ---- <= 991px : hero stacks, feature stacks ---- */
@media (max-width: 991px) {
	/* Shorter travel and a tighter beat, not a slowed-down desktop move. One
	   line retunes every delay and distance on the page. */
	.vd-rv { --vd-rise: 13px; --vd-step: 52ms; }

	.vd-section { padding: 52px 0; }
	.vd-section--tight { padding: 40px 0; }

	.vd-hero { padding: 12px 0 20px; text-align: center; }
	.vd-hero__copy { max-width: 620px; margin: 0 auto; padding: 20px 18px 22px; }
	.vd-hero__lead { margin-left: auto; margin-right: auto; }
	.vd-hero__cta { justify-content: center; }
	:root { --vd-figure-h: 275px; }

	.vd-tease { padding: 16px 12px 18px 14px; gap: 10px; }
	.vd-tease__ico { width: 44px; height: 44px; font-size: 17px; }
	.vd-tease__copy b { font-size: 14.5px; }

	.vd-apps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.vd-feature { grid-template-columns: minmax(0, 1fr); }

	/* .vd-feature .vd-darshan__stage sets aspect-ratio: auto and min-height: 0
	   so the picture stretches to whatever height the feature row ends up at
	   on a desktop, where it is a flex child of a full-height card. The line
	   above stacks that card, so flex: 1 1 auto has nothing left to grow into
	   and the stage collapsed to its two border pixels - the photographs are
	   absolutely positioned inside it, so they had no height either and
	   Today's Darshan rendered empty from here down.
	   Restated at the same specificity as that rule, or it never applies. */
	.vd-feature .vd-darshan__stage,
	.vd-darshan__stage { min-height: 0; aspect-ratio: 4 / 3; }

	.vd-topbar__item--long { display: none; }

	/* At 768 the container is 736px and the three plinth bays total ~653px,
	   so 83px of slack keeps the strip on one row rather than flipping to two
	   on a font-metric rounding difference. */
	footer.vd-footer { --vd-f-jai: 27px; --vd-f-quote: 13.5px; --vd-f-photo: 44%; }
	.vd-forn__rule { width: 88px; }
}

/* ---- <= 767px : single column everywhere that matters ---- */
@media (max-width: 767px) {
	:root { --vd-gut: 16px; }
	body.vd-home { font-size: 14.5px; }

	.vd-section { padding: 44px 0; }
	.vd-section--tight { padding: 34px 0; }
	.vd-sec-head { margin-bottom: 26px; }
	.vd-rv { --vd-rise: 10px; --vd-step: 38ms; }

	.vd-topbar__in { min-height: 38px; gap: 10px; }
	.vd-topbar__item, .vd-topbar__sep { display: none; }
	.vd-topbar__jai { font-size: 11.5px; }
	.vd-topbar__social { gap: 4px; }
	.vd-topbar__social a { width: 25px; height: 25px; font-size: 11.5px; }
	.vd-topbar__social a.vd-hide-xs { display: none; }
	.vd-topbar__live { padding: 5px 11px; font-size: 10px; }

	.vd-header__in { min-height: 66px; }
	.vd-brand__mark { width: 156px; max-height: 44px; }

	.vd-hero { padding: 10px 0 24px; }
	.vd-hero h1 { font-size: clamp(32px, 10vw, 44px); }
	.vd-hero__lead { font-size: 15px; }
	.vd-hero__cta { gap: 10px; }
	.vd-hero__btn { flex: 1 1 auto; min-width: 150px; justify-content: center; }
	.vd-rail__item span { font-size: 11px; letter-spacing: .03em; }
	:root { --vd-figure-h: 240px; }
	/* The rail picks up margin: 14px var(--vd-gut) 0 when it reflows into a
	   static grid at <=1199px, which on a tablet separates it from the hero
	   figures. On a phone the figures are short enough that their feet sit on
	   the grid's bottom edge, so that 14px reads as a band of temple
	   background between each portrait and the button under it. Only the top
	   is dropped - the gutter margins stay. */
	.vd-rail { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 0; }

	/* On wider screens the card is pulled up so its curved warm-white arc
	   (.vd-quick::before - 140vw x 96px, opaque) rises over the hero image.
	   A phone reflows the rail from an absolutely-positioned side column into
	   a static two-column grid at the foot of the hero, so the thing the arc
	   rose over stopped being imagery and became the last row of shortcut
	   buttons - which it painted straight over. The arc starts at the section
	   edge here instead; the overlap cannot happen rather than being tuned
	   around. Every other breakpoint keeps the -36px / -18px pull. */
	.vd-quick { margin-top: 0; }
	.vd-quick__card { grid-template-columns: repeat(2, minmax(0, 1fr)); border-radius: var(--vd-r-lg); }
	.vd-quick__item { padding: 12px 10px; border-right: 1px solid var(--vd-border-soft); border-bottom: 1px solid var(--vd-border-soft); }
	.vd-quick__item:nth-child(2n) { border-right: 0; }
	.vd-quick__item:nth-last-child(-n+2) { border-bottom: 0; }
	.vd-quick__ico { width: 34px; height: 34px; font-size: 14px; }

	.vd-infotease { grid-template-columns: minmax(0, 1fr); gap: 12px; }
	.vd-feature { margin-top: 16px; }
	.vd-darshan__stage { min-height: 0; }

	.vd-thumb { width: 250px; }
	.vd-carousel__track { gap: 14px; }
	.vd-carousel__nav { width: 38px; height: 38px; font-size: 14px; }
	.vd-carousel__nav--prev { left: -4px; }
	.vd-carousel__nav--next { right: -4px; }
	.vd-section--gallery .vd-carousel {
		--vd-g-cols: 2;
		--vd-g-gap: 12px;
		--vd-g-arrow: 46px;
		padding: 14px var(--vd-g-arrow) 12px;
	}
	.vd-section--gallery .vd-carousel__nav--prev { left: 4px; }
	.vd-section--gallery .vd-carousel__nav--next { right: 4px; }
	.vd-section--announce .vd-ann { flex-basis: 132px; width: 132px; }

	.vd-panel { padding: 20px 16px; border-radius: var(--vd-r-lg); }

	.vd-qlinks { gap: 12px; padding-top: 8px; }
	.vd-qlink {
		--vd-qlink-arch: 48px 48px 14px 14px / 34px 34px 14px 14px;
		flex: 0 1 calc(33.333% - 8px);
		padding: 22px 8px 14px;
		gap: 12px;
		min-height: 0;
	}
	.vd-qlink::after {
		inset: 5px;
		border-radius: 40px 40px 10px 10px / 28px 28px 10px 10px;
	}
	.vd-qlink__ring { width: 42px; height: 42px; font-size: 16px; border-radius: 10px; }
	.vd-qlink__label { font-size: 11.5px; }
	.vd-qlink small { font-size: 10.5px; }

	.vd-apps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.vd-photos { grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: 10px; }

	.vd-tour { padding: 6px; border-radius: var(--vd-r-lg); }
	.vd-tour__frame { min-height: 220px; aspect-ratio: 4 / 3; }

	footer.vd-footer {
		--vd-f-vow-pt: 26px; --vd-f-vow-pb: 24px;
		--vd-f-jai: 23px; --vd-f-quote: 13px;
		--vd-f-pt: 30px; --vd-f-pb: 28px;
		--vd-f-cols: minmax(0, 1fr); --vd-f-gap: 26px; --vd-f-gap-h: 0px;
		--vd-f-logo: 190px; --vd-f-jali: 14px;
		--vd-f-disc: 38px; --vd-f-tdisc: 32px;
	}
	/* the corner mandalas are anchored to an edge the single column now
	   occupies, so they would sit under the copy rather than beside it
	   (the photograph is already off from 1024 down) */
	.vd-fwall::before,
	.vd-fwall::after { display: none; }
	.vd-footer__main { text-align: center; }
	footer.vd-footer h4::after { left: 50%; transform: translateX(-50%); }
	footer.vd-footer .vd-flinks a { justify-content: center; }
	/* Centred labels of different lengths put the chevrons at six different x
	   positions, which reads as a ragged edge rather than a list. */
	footer.vd-footer .vd-flinks a .fa { display: none; }
	footer.vd-footer .vd-flinks a:hover,
	footer.vd-footer .vd-flinks a:focus-visible { transform: none; }
	.vd-news form { margin: 0 auto; }
	.vd-news p { max-width: 420px; margin-left: auto; margin-right: auto; }
	.vd-news__note { max-width: 330px; margin-left: auto; margin-right: auto; }
	footer.vd-footer ul.vd-ftouch__list { max-width: 330px; margin: 0 auto; }
	.vd-ftouch__list li { justify-content: center; text-align: left; }

	/* Single column, so each pillar becomes a lintel in the row gap. The
	   shrine is order:-1 and visually first, so it gets none. */
	.vd-footer__main > div + div::before {
		content: ''; display: block; position: absolute;
		left: 16%; right: 16%; width: auto;
		top: -13px; bottom: auto; height: 1px;
		background: linear-gradient(90deg, transparent, var(--vd-f-line), transparent);
	}
	.vd-footer__main > div + div::after { display: none; }
	.vd-footer__main > .vd-footer__brand::before,
	.vd-footer__main > .vd-footer__brand::after { display: none; }

	.vd-footer__bottom .vd-container {
		justify-content: center; text-align: center;
		padding-top: 11px; padding-bottom: 11px;
	}
	.vd-footer__legal { justify-content: center; }

	.vd-top { right: 14px; bottom: 14px; width: 40px; height: 40px; }
	.vd-modal { padding: 14px; }
}

/* ---- <= 575px ---- */
@media (max-width: 575px) {
	:root { --vd-figure-h: 200px; }
	footer.vd-footer { --vd-f-logo: 178px; --vd-f-jai: 21px; }
	.vd-forn__rule { width: 62px; }
	.vd-hero__btn { width: 100%; }
	.vd-thumb { width: 216px; }
	.vd-section--gallery .vd-carousel { --vd-g-cols: 1; }
	.vd-section--announce .vd-ann { flex-basis: calc(50% - 8px); width: calc(50% - 8px); }
	.vd-photos { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.vd-qlink { flex: 0 1 calc(50% - 5px); }
	.vd-app { flex-direction: column; text-align: center; align-items: center; }
	.vd-app__stores { justify-content: center; }
	.vd-sched > li { grid-template-columns: 78px 30px minmax(0, 1fr); gap: 8px; padding: 8px 6px; }
	.vd-sched__ico { width: 30px; height: 30px; font-size: 12px; }
	.vd-sched__time { font-size: 11.5px; }
	.vd-card__head { padding: 12px 16px; }
	.vd-card__body { padding: 6px 14px 14px; }
	.vd-card__foot { padding: 0 14px 14px; }
	.vd-eventlist a { grid-template-columns: 46px 48px minmax(0, 1fr); gap: 11px; padding-right: 18px; }
	.vd-eventlist figure { width: 48px; height: 48px; }
}

/* ---- <= 479px : the top bar keeps only branding + the primary action ----
   "|| Jai Swaminarayan ||" plus six icons plus the Live Darshan pill cannot fit
   a 375px screen; the social links stay reachable in the drawer and footer. */
@media (max-width: 479px) {
	.vd-topbar__social { display: none; }
	.vd-topbar__jai { font-size: 11px; }
}

/* ---- <= 400px ---- */
@media (max-width: 400px) {
	.vd-hero h1 { font-size: 30px; }
	.vd-hero__mantra { font-size: 13px; }
	.vd-quick__t { font-size: 10.5px; }
	.vd-quick__s { font-size: 10.5px; }
	.vd-thumb { width: 200px; }
	.vd-photos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.vd-brand__mark { width: 148px; max-height: 42px; }
	footer.vd-footer { --vd-f-logo: 164px; --vd-f-jai: 19px; }
	footer.vd-footer .vd-flinks a { font-size: 13.5px; }
	.vd-forn__rule { width: 44px; }
	.vd-footer__legal { flex-direction: column; gap: 8px; }
	.vd-footer__legal > span { display: none; }
	.vd-fbless { padding-left: 0; border-left: 0; }
}

/* ---- <= 340px : the last thing to go is the masthead strapline ---- */
@media (max-width: 340px) {
	.vd-brand__mark { width: 132px; max-height: 38px; }
	.vd-topbar__jai { font-size: 10.5px; }
	footer.vd-footer { --vd-f-logo: 150px; --vd-f-jai: 17px; }
	.vd-ftouch__list li { font-size: 13px; }
}

/* ---- large screens: keep the composition centred and generous ---- */
@media (min-width: 1600px) {
	:root { --vd-container: 1360px; --vd-figure-h: min(66vh, 580px); }
	.vd-hero { padding: 16px 0 28px; }
}

.vd-pattern { position: relative; isolation: isolate; }
.vd-pattern > * { position: relative; z-index: 1; }
.vd-pattern::before {
	content: ''; position: absolute; inset: 0; z-index: 0;
	pointer-events: none;
	background-image:
		radial-gradient(circle at 50% 100%, transparent 0 13px, rgba(229,125,75,.07) 13px 14px, transparent 14px),
		radial-gradient(circle at 50% 100%, transparent 0 6px,  rgba(255,255,255,.06) 6px 7px,  transparent 7px);
	background-size: 34px 34px, 34px 34px;
	background-position: 0 0, 17px 17px;
	-webkit-mask-image: radial-gradient(130% 95% at 50% 42%, #000 22%, transparent 78%);
	mask-image: radial-gradient(130% 95% at 50% 42%, #000 22%, transparent 78%);
}

/* a soft seam so neighbouring bands meet instead of butting together */
.vd-seam { position: relative; }
.vd-seam::after {
	content: ''; position: absolute; left: 50%; transform: translateX(-50%);
	bottom: 0; width: min(680px, 78%); height: 1px;
	background: linear-gradient(90deg, transparent, var(--vd-border), transparent);
}

/* ==========================================================================
   AMBIENT BACKGROUND MOTION - pending sections only

   Adds slow, low-contrast drift behind Quick Links / Mobile Application /
   Recent Photos / Virtual Tour so the plain bands are not dead flat. Layout,
   content, assets and colours are untouched - every value below is drawn from
   the existing brand tokens.

   Rules of the road:
     - transform + opacity only, so the work stays on the compositor
     - pointer-events: none and z-index 0, so nothing is ever intercepted
     - 18s-160s durations: this should read as texture, not as animation
     - fully disabled under prefers-reduced-motion (see the end of this block)
   ========================================================================== */
.vd-anim {
	position: absolute; inset: 0; z-index: 0;
	pointer-events: none;
	overflow: hidden;
	color: var(--vd-primary);
	contain: paint;
}
/* .vd-pattern promotes its direct children to position:relative/z-index:1;
   this layer has to stay absolute and underneath them. */
.vd-pattern > .vd-anim { position: absolute; z-index: 0; }

/* plain bands that host a layer need a stacking context and lifted content */
.vd-anim-host { isolation: isolate; }
.vd-anim-host > .vd-container { position: relative; z-index: 1; }

/* a pair of soft breathing auras shared by every variant */
.vd-anim::before,
.vd-anim::after {
	content: ''; position: absolute; border-radius: 50%;
	background: radial-gradient(circle, rgba(229,125,75,.13), rgba(229,125,75,0) 70%);
	will-change: transform, opacity;
}
.vd-anim::before {
	width: 520px; height: 520px; top: -180px; left: -120px;
	animation: vd-breathe 26s ease-in-out infinite;
}
.vd-anim::after {
	width: 620px; height: 620px; bottom: -240px; right: -140px;
	animation: vd-breathe 34s ease-in-out infinite reverse;
}

/* ---------------------------------------------------- mandala (Quick Links) */
.vd-anim__mandala {
	position: absolute;
	width: 520px; height: 520px;
	opacity: .07;
	will-change: transform;
}
.vd-anim__mandala--a {
	top: -150px; right: -110px;
	animation: vd-spin 150s linear infinite;
}
.vd-anim__mandala--b {
	bottom: -170px; left: -120px;
	width: 400px; height: 400px;
	animation: vd-spin 110s linear infinite reverse;
}

/* -------------------------------------------- motes (Mobile Application) */
.vd-anim__mote {
	position: absolute; bottom: -14px;
	width: 6px; height: 6px; border-radius: 50%;
	background: radial-gradient(circle, rgba(229,125,75,.55), rgba(229,125,75,0) 72%);
	opacity: 0;
	will-change: transform, opacity;
	animation: vd-rise linear infinite;
}
.vd-anim__mote--1 { left:  6%; animation-duration: 30s; animation-delay:  0s;  }
.vd-anim__mote--2 { left: 17%; animation-duration: 38s; animation-delay: -6s;  width: 4px; height: 4px; }
.vd-anim__mote--3 { left: 29%; animation-duration: 26s; animation-delay: -13s; }
.vd-anim__mote--4 { left: 41%; animation-duration: 42s; animation-delay: -4s;  width: 8px; height: 8px; }
.vd-anim__mote--5 { left: 54%; animation-duration: 32s; animation-delay: -19s; }
.vd-anim__mote--6 { left: 66%; animation-duration: 36s; animation-delay: -9s;  width: 4px; height: 4px; }
.vd-anim__mote--7 { left: 78%; animation-duration: 28s; animation-delay: -23s; }
.vd-anim__mote--8 { left: 88%; animation-duration: 44s; animation-delay: -15s; width: 7px; height: 7px; }
.vd-anim__mote--9 { left: 96%; animation-duration: 34s; animation-delay: -2s;  width: 4px; height: 4px; }

/* ------------------------------------------------- petals (Recent Photos) */
.vd-anim__petal {
	position: absolute; top: -40px;
	width: 16px; height: 16px;
	border-radius: 50% 0 50% 0;
	background: linear-gradient(140deg, rgba(240,154,110,.42), rgba(229,125,75,.16));
	opacity: 0;
	will-change: transform, opacity;
	animation: vd-drift linear infinite;
}
.vd-anim__petal--1 { left: 11%; animation-duration: 34s; animation-delay:  0s;  }
.vd-anim__petal--2 { left: 27%; animation-duration: 46s; animation-delay: -11s; width: 12px; height: 12px; }
.vd-anim__petal--3 { left: 44%; animation-duration: 39s; animation-delay: -22s; }
.vd-anim__petal--4 { left: 62%; animation-duration: 52s; animation-delay: -7s;  width: 20px; height: 20px; }
.vd-anim__petal--5 { left: 79%; animation-duration: 36s; animation-delay: -30s; width: 12px; height: 12px; }
.vd-anim__petal--6 { left: 91%; animation-duration: 44s; animation-delay: -17s; }

/* --------------------------------------------------- diyas (Virtual Tour) */
.vd-anim__diya {
	position: absolute; bottom: 8%;
	width: 14px; height: 14px; border-radius: 50%;
	background: radial-gradient(circle at 50% 62%,
		rgba(255,214,170,.85) 0%, rgba(229,125,75,.42) 42%, rgba(229,125,75,0) 74%);
	opacity: 0;
	will-change: transform, opacity;
	animation: vd-float ease-in-out infinite;
}
.vd-anim__diya--1 { left: 13%; animation-duration: 20s; animation-delay:  0s;  }
.vd-anim__diya--2 { left: 33%; animation-duration: 26s; animation-delay: -6s;  width: 10px; height: 10px; }
.vd-anim__diya--3 { left: 51%; animation-duration: 23s; animation-delay: -12s; width: 18px; height: 18px; }
.vd-anim__diya--4 { left: 71%; animation-duration: 29s; animation-delay: -3s;  width: 11px; height: 11px; }
.vd-anim__diya--5 { left: 87%; animation-duration: 24s; animation-delay: -16s; }

/* ------------------------------------------------------------- keyframes */
@keyframes vd-spin {
	from { transform: rotate(0deg); }
	to   { transform: rotate(360deg); }
}
@keyframes vd-breathe {
	0%, 100% { transform: scale(1)    translateY(0);     opacity: .55; }
	50%      { transform: scale(1.14) translateY(-18px); opacity: .95; }
}
/* rises the full band height; the section clips it */
@keyframes vd-rise {
	0%        { transform: translate3d(0, 0, 0);            opacity: 0; }
	12%       {                                              opacity: 1; }
	85%       {                                              opacity: 1; }
	100%      { transform: translate3d(14px, -560px, 0);    opacity: 0; }
}
@keyframes vd-drift {
	0%   { transform: translate3d(0, 0, 0) rotate(0deg);          opacity: 0; }
	10%  {                                                         opacity: 1; }
	50%  { transform: translate3d(38px, 320px, 0) rotate(180deg);  opacity: 1; }
	90%  {                                                         opacity: 1; }
	100% { transform: translate3d(-14px, 640px, 0) rotate(360deg); opacity: 0; }
}
@keyframes vd-float {
	0%        { transform: translate3d(0, 0, 0) scale(.9);      opacity: 0; }
	18%       {                                                  opacity: 1; }
	80%       {                                                  opacity: 1; }
	100%      { transform: translate3d(6px, -190px, 0) scale(1.1); opacity: 0; }
}

/* Motion is decoration here, so it goes away entirely rather than freezing
   mid-drift when the visitor has asked for reduced motion. */
@media (prefers-reduced-motion: reduce) {
	.vd-anim { display: none; }
}

/* --------------------------------------------------------------------------
   Decorative motifs - lotus / arcs / shikhar / diya badge / dot matrix

   Extends the ambient layer above with the motif vocabulary from the design
   references. Same rules apply: decorative only, no pointer events, motion is
   transform+opacity, and the whole layer is removed under reduced motion.
   -------------------------------------------------------------------------- */
.vd-anim > span { position: absolute; display: block; }
.vd-anim svg { width: 100%; height: 100%; display: block; }

/* outline lotus - a slow rise with a gentle sway */
.vd-anim__lotus {
	color: var(--vd-gold);
	opacity: .16;
	will-change: transform;
}
.vd-anim__lotus--a { width: 150px; height: 90px; left: 4%;  bottom: 8%;  animation: vd-sway 44s ease-in-out infinite; }
.vd-anim__lotus--b { width: 190px; height: 114px; right: 5%; top: 12%;   animation: vd-sway 56s ease-in-out infinite reverse; }
.vd-anim__lotus--c { width: 170px; height: 102px; right: 8%; bottom: 12%; animation: vd-sway 50s ease-in-out infinite; }

/* concentric arcs - barely-there radiating rings */
.vd-anim__arcs {
	width: 420px; height: 420px;
	color: var(--vd-primary);
	opacity: .10;
	will-change: transform;
	animation: vd-pulse 40s ease-in-out infinite;
}
.vd-anim__arcs--l { left: -150px;  top: 50%; transform: translateY(-50%); }
.vd-anim__arcs--r { right: -150px; top: 50%; transform: translateY(-50%) scaleX(-1); }

/* large soft temple watermark */
.vd-anim__shikhar {
	width: 300px; height: 346px;
	left: 2%; bottom: -30px;
	color: var(--vd-primary);
	opacity: .10;
	will-change: transform;
	animation: vd-hover 30s ease-in-out infinite;
}

/* circular diya badge, echoing the reference chips */
.vd-anim__badge {
	width: 58px; height: 58px;
	right: 9%; top: 16%;
	opacity: .5;
	filter: drop-shadow(0 8px 18px rgba(216,108,60,.35));
	will-change: transform;
	animation: vd-hover 18s ease-in-out infinite;
}

/* dot matrix panel */
.vd-anim__dots {
	width: 210px; height: 170px;
	opacity: .5;
	background-image: radial-gradient(rgba(229,125,75,.42) 1.4px, transparent 1.5px);
	background-size: 21px 21px;
	-webkit-mask-image: radial-gradient(closest-side, #000 40%, transparent 100%);
	mask-image: radial-gradient(closest-side, #000 40%, transparent 100%);
	will-change: transform, opacity;
	animation: vd-shimmer 24s ease-in-out infinite;
}
.vd-anim--mandala .vd-anim__dots { left: 7%;  top: 14%; }
.vd-anim--temple  .vd-anim__dots { right: 12%; top: 18%; }

/* ------------------------------------------------------------- keyframes */
@keyframes vd-sway {
	0%, 100% { transform: translate3d(0, 0, 0)      rotate(-2deg); }
	50%      { transform: translate3d(0, -26px, 0)  rotate(2deg); }
}
@keyframes vd-pulse {
	0%, 100% { opacity: .07; }
	50%      { opacity: .14; }
}
@keyframes vd-hover {
	0%, 100% { transform: translate3d(0, 0, 0); }
	50%      { transform: translate3d(0, -16px, 0); }
}
@keyframes vd-shimmer {
	0%, 100% { opacity: .30; transform: translate3d(0, 0, 0); }
	50%      { opacity: .62; transform: translate3d(0, -12px, 0); }
}

/* the arcs carry a transform for placement, so their motion animates opacity
   only - re-declaring transform in a keyframe would knock them out of place */
.vd-anim__arcs--l, .vd-anim__arcs--r { animation-name: vd-pulse; }

/* the temple band sits above a cream section; keep the watermark off the text */
@media (max-width: 991px) {
	.vd-anim__shikhar { width: 210px; height: 242px; opacity: .06; }
	.vd-anim__arcs { width: 300px; height: 300px; }
	.vd-anim__lotus--a, .vd-anim__lotus--b, .vd-anim__lotus--c { width: 120px; height: 72px; }
	.vd-anim__dots { width: 150px; height: 120px; }
}
@media (max-width: 575px) {
	/* child-combinator form so this outranks `.vd-anim > span { display: block }` */
	.vd-anim > .vd-anim__shikhar,
	.vd-anim > .vd-anim__dots,
	.vd-anim > .vd-anim__badge { display: none; }
	.vd-anim__lotus { opacity: .12; }
}
