/* ============================================================
   Virtual Test & Tag promo page
   Template: page-templates/virtualPromo.php
   Enqueued only on that template (functions/enqueue-scripts.php).

   Aligned to the theme: .container width, Articulat CF, the theme's
   heading scale and colour tokens, and the site's hero background
   treatment. Token NAMES are unchanged from the original so the
   Contact Form 7 block at the bottom still resolves.
   ============================================================ */

/* ── Reset ──
   Scoped to .vpromo. A bare `*` reset here would strip margin/padding
   from the theme's .container utility, which knocks the site header and
   footer out of alignment on this page. */
.vpromo *,
.vpromo *::before,
.vpromo *::after{box-sizing:border-box;margin:0;padding:0}
html,body{overflow-x:hidden}
.vpromo img{max-width:100%}
.vpromo a,.vpromo a:hover{text-decoration:none}

/* ── Tokens — mapped onto the theme's palette ── */
:root{
  --navy:#20394E;            /* was #1a2233 — theme --color-primary   */
  --hero-navy:#2C455A;       /* theme --color-custom-navy             */
  --gs:#6063AC;              /* theme --color-brand-tertiary          */
  --ge:#41C0E8;              /* theme --color-brand-secondary         */
  --grad:linear-gradient(to right,#6063AC,#41C0E8,#6063AC);
  --page:#EDF3F8;            /* theme --color-primary-50              */
  --card:#fff;
  --muted:#3B6A91;           /* theme --color-brand-muted             */
  --border:#b7cee1;          /* already used across the theme         */
  --on-dark:#FAFBFC;         /* theme --color-on-dark                 */
}

/* ── Shared ──
   .vwrap now matches the theme's .container so every section lines up
   with the header, footer and the rest of the site. */
.vpromo{font-family:var(--font-articulat,"articulat-cf",sans-serif);color:var(--navy);font-size:1rem;line-height:1.6}
.vwrap{width:100%;max-width:1472px;margin-inline:auto;padding-inline:1rem}
.vlabel{font-size:.875rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ge);text-align:center;margin-bottom:.75rem}

/* Theme h2 scale: text-3xl / md:text-4xl / xl:text-6xl, leading-none */
.vtitle{font-size:1.875rem;font-weight:800;line-height:1;text-align:center;color:var(--navy);margin-bottom:2.5rem}
@media(min-width:768px){.vtitle{font-size:2.25rem}}
@media(min-width:1280px){.vtitle{font-size:3.75rem;margin-bottom:3rem}}

/* Theme button shape: rounded-xl, px-5 py-3.5, font-bold */
.btn-grad,.btn-white{display:inline-block;padding:.875rem 1.25rem;border:none;border-radius:.75rem;font-family:inherit;font-size:1.125rem;font-weight:700;text-decoration:none;cursor:pointer;transition:opacity .2s,transform .15s}
.btn-grad{background:var(--grad);color:var(--on-dark)}
.btn-grad:hover{opacity:.88;transform:translateY(-1px)}
.btn-white{background:#fff;color:var(--gs)}
.btn-white:hover{opacity:.92}

/* ── HERO ──
   Same background treatment as parts/section-hero.php: the site's
   hero-bg.png at full opacity, bottom-right, over custom-navy. */
.vhero{position:relative;overflow:hidden;padding:4rem 0 4.5rem;color:var(--on-dark);background:var(--hero-navy) url('../images/lib/front-page/hero-bg.png') no-repeat right bottom;background-size:100%}
@media(min-width:768px){.vhero{background-size:auto}}
/* On the site's own heroes a photo sits over the right half of this
   pattern; there is no photo here, so a navy scrim keeps the headline
   legible while the image still reads through on the right. */
.vhero::after{content:'';position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(90deg,var(--hero-navy) 0%,var(--hero-navy) 38%,rgba(44,69,90,.55) 62%,rgba(44,69,90,0) 100%)}
@media(min-width:1024px){.vhero{padding:5rem 0 6rem}}
.vhero-inner{position:relative;z-index:2;display:grid;grid-template-columns:1fr;gap:2.5rem;align-items:center;width:100%;max-width:1472px;margin-inline:auto;padding-inline:1rem}
@media(min-width:1024px){.vhero-inner{grid-template-columns:minmax(0,700px) minmax(0,460px);justify-content:space-between;gap:2.5rem}}
.vhero-left{text-align:center}
@media(min-width:1024px){.vhero-left{text-align:left}}

/* Eyebrow — theme pattern: bg-brand-secondary, rounded-xl, px-5 py-3 */
.vbadge{display:inline-block;margin-bottom:1.5rem;padding:.75rem 1.25rem;background:var(--ge);border-radius:.75rem;color:#fff;font-size:.875rem;font-weight:700;letter-spacing:0;text-transform:none}
@media(min-width:1280px){.vbadge{font-size:1.125rem}}

/* Theme h1 scale: text-4xl / md:text-5xl / xl:text-7xl, leading-none */
.vhero h1{margin-bottom:1.5rem;color:var(--on-dark);font-size:2.25rem;font-weight:800;line-height:1}
@media(min-width:768px){.vhero h1{font-size:3rem}}
@media(min-width:1280px){.vhero h1{font-size:4.5rem}}
.vhero h1 span{color:var(--ge);-webkit-text-fill-color:currentColor}
.vhero-sub{margin-bottom:1.5rem;color:var(--on-dark);font-size:1.125rem;line-height:1.625}
.vtrust{display:flex;flex-wrap:wrap;justify-content:center;gap:.625rem;margin-top:1.5rem;padding:0;list-style:none}
@media(min-width:1024px){.vtrust{justify-content:flex-start}}
.vpill{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem .875rem;background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.15);border-radius:.75rem;color:rgba(255,255,255,.85);font-size:.875rem;font-weight:600}

/* ── FORM CARD ── */
.vcard{position:relative;z-index:3;padding:1.75rem 1.5rem;background:#fff;border-radius:1rem;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.voffer{position:relative;overflow:hidden;margin-bottom:1.25rem;padding:.875rem 1rem;background:var(--grad);border-radius:.75rem}
.voffer::before{content:'';position:absolute;top:-20px;right:-20px;width:80px;height:80px;background:rgba(255,255,255,.08);border-radius:50%}
.voffer-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}
.voffer-price{color:#fff;font-size:2rem;font-weight:800;line-height:1}
.voffer-was{margin-left:.375rem;color:rgba(255,255,255,.7);font-size:.8125rem;text-decoration:line-through;vertical-align:middle}
.voffer-lbl{padding:.1875rem .625rem;background:rgba(255,255,255,.2);border-radius:.75rem;color:#fff;font-size:.6875rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.vurgency{display:flex;align-items:center;gap:.375rem;margin-top:.125rem;padding-top:.5rem;border-top:1px solid rgba(255,255,255,.22);color:rgba(255,255,255,.92);font-size:.8125rem;font-weight:600}
.vdot{display:inline-block;flex-shrink:0;width:7px;height:7px;background:#fff;border-radius:50%;animation:vtt-pulse 1.4s ease-in-out infinite}
@keyframes vtt-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}
.vcountdown{margin-left:auto;padding:.125rem .5rem;background:rgba(255,255,255,.17);border-radius:.375rem;color:#fff;font-size:.75rem;font-weight:700;font-variant-numeric:tabular-nums}

/* Step indicator */
.vsteps{display:flex;align-items:center;gap:.375rem;margin-bottom:1rem}
.vsdot{display:inline-block;flex-shrink:0;width:8px;height:8px;background:var(--border);border-radius:50%;transition:background .3s}
.vsdot.active{background:var(--gs)}
.vsdot.done{background:var(--ge)}
.vslbl{margin-left:.25rem;color:var(--muted);font-size:.75rem;font-weight:600}
.vcard h3{margin:0 0 .375rem;color:var(--navy);font-size:1.25rem;font-weight:800;line-height:1.2}
.vformsub{margin:0 0 1rem;color:var(--muted);font-size:.9375rem;line-height:1.5}

/* Course option grid */
.voptions{display:grid;grid-template-columns:1fr 1fr;align-items:stretch;gap:.625rem;margin-bottom:1rem}
.vstep2{display:none}
.vrow{display:grid;grid-template-columns:1fr 1fr;gap:.625rem}
.vfield{margin-bottom:.625rem}
.vfield input,.vfield select{width:100%;padding:.75rem 1rem;background:#fff;border:1.5px solid var(--border);border-radius:.75rem;color:var(--navy);font-family:inherit;font-size:.9375rem;outline:none;transition:border-color .2s;-webkit-appearance:none;appearance:none}
.vfield input::placeholder{color:#9ab5c8}
.vfield input:focus,.vfield select:focus{border-color:var(--gs)}
.vfield select{color:#9ab5c8;background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L6 7L11 1' stroke='%233B6A91' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center}
.vfield select option{color:var(--navy)}
.vbtnfull{display:block;width:100%;margin-top:.25rem;padding:.875rem;background:var(--grad);border:none;border-radius:.75rem;color:var(--on-dark);font-family:inherit;font-size:1.0625rem;font-weight:700;cursor:pointer;transition:opacity .2s,transform .15s}
.vbtnfull:hover{opacity:.88;transform:translateY(-1px)}
.vbtnfull:disabled{opacity:.6;cursor:not-allowed;transform:none}
.vback{display:block;width:100%;padding:.5rem 0 0;background:none;border:none;color:var(--muted);font-family:inherit;font-size:.875rem;text-align:center;text-decoration:underline;cursor:pointer}
.vprivacy{margin-top:.625rem;color:#9ab5c8;font-size:.75rem;line-height:1.5;text-align:center}
.vsuccess{display:none;padding:.625rem 0;text-align:center}
.vsuccess-icon{display:block;margin-bottom:.75rem;font-size:2.75rem}
.vsuccess h4{margin:0 0 .375rem;color:var(--navy);font-size:1.25rem;font-weight:800}
.vsuccess p{color:var(--muted);font-size:.9375rem}

/* ── USPs ── */
.vusps{padding:4rem 0;background:#fff}
@media(min-width:1024px){.vusps{padding:6rem 0}}
.vusp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem}
.vusp-card{padding:2rem 1.75rem;background:var(--page);border-radius:1rem;border-top:3px solid var(--gs);transition:box-shadow .2s}
.vusp-card:hover{box-shadow:0 6px 24px rgba(96,99,172,.14)}
.vusp-icon{display:flex;align-items:center;justify-content:center;width:52px;height:52px;margin-bottom:1rem;background:var(--grad);border-radius:.75rem;font-size:1.375rem}
.vusp-card h3{margin-bottom:.5rem;color:var(--navy);font-size:1.5rem;font-weight:800;line-height:1.3}
.vusp-card p{color:var(--muted);font-size:1.0625rem;line-height:1.625}

/* ── DETAILS ── */
.vdetails{padding:4rem 0;background:var(--hero-navy);color:var(--on-dark)}
@media(min-width:1024px){.vdetails{padding:6rem 0}}
.vdetails .vlabel{color:var(--ge)}
.vdetails .vtitle{color:var(--on-dark)}
.vdet-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.25rem}
.vdet-item{padding:1.5rem 1.375rem;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:.75rem}
.vdet-lbl{margin-bottom:.5rem;color:var(--ge);font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.vdet-val{color:var(--on-dark);font-size:1.0625rem;font-weight:600;line-height:1.5}
.vqual{position:relative;overflow:hidden;margin-top:2.5rem;padding:2.5rem 2rem;background:var(--grad);border-radius:1rem}
.vqual::before{content:'';position:absolute;top:-40px;right:-40px;width:180px;height:180px;background:rgba(255,255,255,.07);border-radius:50%;pointer-events:none}
.vqual-badge{display:inline-block;margin-bottom:1rem;padding:.375rem .875rem;background:rgba(255,255,255,.18);border-radius:.75rem;color:#fff;font-size:.8125rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.vqual-title{margin-bottom:.5rem;color:#fff;font-size:1.875rem;font-weight:800;line-height:1.1}
@media(min-width:1280px){.vqual-title{font-size:2.25rem}}
.vqual-name{margin-bottom:1.5rem;color:rgba(255,255,255,.85);font-size:1.0625rem;line-height:1.625}
.vqual-units{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:1.5rem}
.vqual-unit{display:flex;flex-direction:column;gap:.25rem;min-width:180px;padding:.875rem 1.125rem;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.22);border-radius:.75rem}
.vunit-code{color:#fff;font-size:1.0625rem;font-weight:800;letter-spacing:.04em}
.vunit-lbl{color:rgba(255,255,255,.75);font-size:.875rem;font-weight:500}
.vqual-foot{padding-top:1rem;border-top:1px solid rgba(255,255,255,.2);color:rgba(255,255,255,.82);font-size:.9375rem;font-weight:500;line-height:1.6}

/* ── WHO ── */
.vwho{padding:4rem 0;background:var(--page)}
@media(min-width:1024px){.vwho{padding:6rem 0}}
.vwho-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1rem;padding:0;list-style:none}
.vwho-list li{display:flex;align-items:flex-start;gap:.75rem;padding:1.125rem 1.25rem;background:#fff;border:1px solid var(--border);border-radius:.75rem;color:var(--navy);font-size:1.0625rem;font-weight:500;line-height:1.5}
.vwho-list li::before{content:'✓';display:flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;min-width:28px;height:28px;background:var(--grad);border-radius:50%;color:#fff;font-size:.875rem;font-weight:700}

/* ── FAQs ── */
.vfaq{padding:4rem 0;background:#fff}
@media(min-width:1024px){.vfaq{padding:6rem 0}}
.vfaq-list{display:flex;flex-direction:column;gap:.75rem}
details.vfaq-item{overflow:hidden;background:var(--page);border:1px solid var(--border);border-radius:.75rem}
details.vfaq-item[open]{border-color:#a0bfd8;box-shadow:0 4px 18px rgba(59,106,145,.1)}
details.vfaq-item summary{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:1.25rem 1.5rem;color:var(--navy);font-size:1.125rem;font-weight:700;list-style:none;cursor:pointer}
details.vfaq-item summary::-webkit-details-marker{display:none}
details.vfaq-item summary::after{content:'+';flex-shrink:0;color:var(--gs);font-size:1.5rem;font-weight:400}
details.vfaq-item[open] summary::after{content:'−'}
.vfaq-body{padding:0 1.5rem 1.25rem;color:var(--muted);font-size:1.0625rem;line-height:1.75}

/* ── STRIP ── */
.vstrip{padding:4rem 1rem;background:var(--grad);color:#fff;text-align:center}
@media(min-width:1024px){.vstrip{padding:5rem 1rem}}
.vstrip h2{margin-bottom:.75rem;font-size:1.875rem;font-weight:800;line-height:1.1}
@media(min-width:1280px){.vstrip h2{font-size:3rem}}
.vstrip p{max-width:640px;margin:0 auto 1.75rem;font-size:1.125rem;line-height:1.6;opacity:.9}

/* ── RESPONSIVE ── */
@media(max-width:1023.98px){
  .vhero{padding:3rem 0 3.5rem}
}
@media(max-width:600px){
  .vhero{padding:2.5rem 0 3rem}
  .vusps,.vdetails,.vwho,.vfaq{padding:3rem 0}
  .vstrip{padding:3rem 1rem}
  .vusp-grid,.vwho-list{grid-template-columns:1fr}
  .vdet-grid{grid-template-columns:1fr 1fr}
  .vrow{grid-template-columns:1fr}
}
@media(max-width:420px){
  .vdet-grid,.voptions{grid-template-columns:1fr}
}


/* ============================================================
   Contact Form 7 integration
   The form is now a real CF7 form, so the option cards are CF7
   radio items rather than hand-written labels. These rules
   reproduce the original .vopt card look on CF7's own markup.
   ============================================================ */

/* CF7 runs the form template through wpautop, so the radio group and
   the "In-person instead" link each end up inside a <p>. Left alone,
   those paragraphs become the grid items and the cards stack in one
   column. Collapsing them — along with CF7's own wrappers — puts the
   cards themselves back in the 2-column grid. */
.voptions > p,
.vfield > p,
.voptions .wpcf7-form-control-wrap,
.voptions .wpcf7-radio {
	display: contents;
}

.voptions .wpcf7-list-item {
	display: block;
	margin: 0;
}

/* The card itself. */
.voptions .wpcf7-list-item > label,
.voptions .vopt-link {
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: center;
	/* No height:100% here — inside an auto-sized grid row it resolves
	   against a track that depends on this element, and the row ends up
	   double height. align-items:stretch already fills the row; the
	   min-height is what keeps both rows equal. */
	min-height: 6.75rem;
	padding: 14px 10px;
	background: #fff;
	border: 2px solid var(--border);
	border-radius: 14px;
	cursor: pointer;
	text-align: center;
	transition: border-color .2s, background .2s;
}

.voptions .wpcf7-list-item input[type=radio] {
	position: absolute;
	width: 0;
	height: 0;
	opacity: 0;
}

.voptions .wpcf7-list-item-label {
	display: block;
	color: var(--navy);
	font-size: 12px;
	font-weight: 700;
	line-height: 1.3;
}

.voptions .wpcf7-list-item > label:hover,
.voptions .vopt-link:hover,
.voptions .wpcf7-list-item.vsel > label {
	background: rgba(106, 95, 216, .05);
	border-color: var(--gs);
}

.voptions .wpcf7-list-item.vsel > label::before {
	content: '✓';
	position: absolute;
	top: 6px;
	right: 8px;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 18px;
	height: 18px;
	background: var(--gs);
	border-radius: 50%;
	color: #fff;
	font-size: 11px;
	font-weight: 700;
}

/* Icon above and price below each label. The icons are the WordPress
   Twemoji SVGs, downloaded into the theme rather than hot-linked from
   s.w.org so the page carries no third-party request.
   Keyed by position — if you reorder the options in the CF7 form,
   update these blocks to match. */
.voptions .wpcf7-list-item .wpcf7-list-item-label::before {
	content: '';
	display: block;
	width: 32px;
	height: 32px;
	margin: 0 auto 8px;
	background-repeat: no-repeat;
	background-position: center;
	background-size: contain;
}

.voptions .wpcf7-list-item .wpcf7-list-item-label::after {
	display: block;
	margin-top: 3px;
	color: var(--gs);
	font-size: 11px;
	font-weight: 600;
}

.voptions .wpcf7-list-item:nth-of-type(1) .wpcf7-list-item-label::before { background-image: url('../images/lib/promo/icons/icon-laptop.svg'); }
.voptions .wpcf7-list-item:nth-of-type(1) .wpcf7-list-item-label::after  { content: '$399 intro rate'; }
.voptions .wpcf7-list-item:nth-of-type(2) .wpcf7-list-item-label::before { background-image: url('../images/lib/promo/icons/icon-chat.svg'); }
.voptions .wpcf7-list-item:nth-of-type(2) .wpcf7-list-item-label::after  { content: "We'll call you"; }
.voptions .wpcf7-list-item:nth-of-type(3) .wpcf7-list-item-label::before { background-image: url('../images/lib/promo/icons/icon-group.svg'); }
.voptions .wpcf7-list-item:nth-of-type(3) .wpcf7-list-item-label::after  { content: 'Ask about group rates'; }

/* "In-person instead" is a link, not a submittable choice. */
.voptions .vopt-link {
	text-decoration: none;
}

/* wpautop turns every newline inside the form template into a <br>.
   As flex children those add ~21px each and blow the card height out,
   so they are dropped here as well as being avoided in the markup. */
.voptions .vopt-link br,
.voptions .wpcf7-list-item br {
	display: none;
}

.voptions .vopt-link .vopt-icon {
	display: block;
	width: 32px;
	height: 32px;
	margin: 0 auto 8px;
	background: url('../images/lib/promo/icons/icon-pin.svg') no-repeat center / contain;
	/* hides the emoji glyph if an older form template still has one */
	font-size: 0;
	line-height: 0;
}

.voptions .vopt-link .vopt-lbl {
	display: block;
	color: var(--navy);
	font-size: 12px;
	font-weight: 700;
	line-height: 1.3;
}

.voptions .vopt-link .vopt-price {
	display: block;
	margin-top: 3px;
	color: var(--gs);
	font-size: 11px;
	font-weight: 600;
	text-decoration: underline;
}

/* CF7 chrome — inputs inherit the .vfield look, so only CF7's own
   wrappers and messages need restyling.
   Scoped to .vfield on purpose: a blanket rule here would override the
   display:contents above and drop the option cards out of the grid. */
.vcard .vfield .wpcf7-form-control-wrap {
	display: block;
}

.vcard .wpcf7 form .wpcf7-response-output {
	margin: 12px 0 0;
	padding: 10px 14px;
	border: 1.5px solid var(--border);
	border-radius: 12px;
	color: var(--navy);
	font-size: 13px;
	line-height: 1.5;
}

.vcard .wpcf7 form.invalid .wpcf7-response-output,
.vcard .wpcf7 form.unaccepted .wpcf7-response-output,
.vcard .wpcf7 form.payment-required .wpcf7-response-output {
	border-color: #d94f3d;
	color: #b03626;
}

.vcard .wpcf7 form.failed .wpcf7-response-output,
.vcard .wpcf7 form.aborted .wpcf7-response-output {
	border-color: #d94f3d;
	background: #fdf1ef;
	color: #b03626;
}

.vcard .wpcf7-not-valid-tip {
	display: block;
	margin-top: 4px;
	color: #b03626;
	font-size: 11.5px;
	font-weight: 600;
}

.vcard .wpcf7-form-control.wpcf7-not-valid {
	border-color: #d94f3d;
}

.vcard .wpcf7-spinner {
	margin: 8px auto 0;
}

/* CF7 wraps the submit button in <p>; keep the full-width look. */
.vcard .wpcf7 p {
	margin: 0;
}

.vcard input.vbtnfull[type=submit] {
	-webkit-appearance: none;
	appearance: none;
}
