/**
 * GUL Visual Polish — surgical upgrades that lift the site from "well-built"
 * to "this feels premium."
 *
 * Targets the highest-leverage surfaces:
 *   - HERO       (100% of visitors see it, decides bounce)
 *   - PRIMARY CTA (only thing that has to be clicked)
 *   - CONTACT FORM (the actual conversion engine)
 *   - CARDS      (most repeated visual unit, most likely to feel cheap)
 *
 * All animations respect prefers-reduced-motion. All effects degrade
 * gracefully on older browsers (no color-mix or :has dependencies).
 *
 * Specificity engineered to win over per-block styles via attribute selectors
 * and source order (this file is enqueued last, after block-rhythm.css).
 */

/* ========================================================================
 * HERO: layered mesh gradient with subtle ambient motion
 * ----------------------------------------------------------------------
 * The default radial-dot pattern reads as "agency template." Three offset
 * radial gradients in brand colors create depth and visual interest without
 * a single image asset. Ambient motion is opacity-only (no transform = no
 * GPU paint thrash, no CLS impact).
 * ====================================================================== */
.gul-hero-section {
	background:
		radial-gradient(at 18% 12%,  rgba(0,147,254, 0.10) 0%, transparent 50%),
		radial-gradient(at 85% 22%,  rgba(252,185,0, 0.08) 0%, transparent 55%),
		radial-gradient(at 50% 90%,  rgba(0,212,255, 0.07) 0%, transparent 50%),
		#ffffff;
}

.gul-hero-section::after {
	content: '';
	position: absolute;
	inset: -10%;
	background: radial-gradient(at 50% 50%, rgba(0,147,254, 0.04) 0%, transparent 60%);
	animation: gul-hero-breathe 12s ease-in-out infinite;
	pointer-events: none;
	z-index: 0;
}
@keyframes gul-hero-breathe {
	0%, 100% { opacity: 0.5; }
	50%      { opacity: 1; }
}

/* ========================================================================
 * HERO HEADLINE: tighter for visual impact
 * ----------------------------------------------------------------------
 * Display type at large sizes needs tighter line-height (1.02 vs default
 * 1.1) and slightly negative letter-spacing (-0.035em vs -0.02em) to
 * read as "designed" rather than "default."
 * ====================================================================== */
.gul-hero-title {
	line-height: 1.02;
	letter-spacing: -0.035em;
}

/* ========================================================================
 * PRIMARY CTA: breathing glow
 * ----------------------------------------------------------------------
 * Animated outer-shadow + inner highlight create a "soft pulse" that draws
 * the eye without being annoying. Stops on hover (replaced with stronger
 * pressed state). Stops entirely under prefers-reduced-motion.
 * ====================================================================== */
.gul-btn--primary {
	background: linear-gradient(135deg, #0093fe 0%, #007bda 55%, #0066bf 100%);
	box-shadow:
		0 0  0 0   rgba(0,147,254, 0.40),
		0 10px 30px -6px rgba(0,147,254, 0.30),
		inset 0 1px 0 0  rgba(255,255,255, 0.18);
	animation: gul-btn-breathe 3s ease-in-out infinite;
	will-change: box-shadow, transform;
}
@keyframes gul-btn-breathe {
	0%, 100% {
		box-shadow:
			0 0  0 0   rgba(0,147,254, 0.40),
			0 10px 30px -6px rgba(0,147,254, 0.30),
			inset 0 1px 0 0  rgba(255,255,255, 0.18);
	}
	50% {
		box-shadow:
			0 0  0 6px rgba(0,147,254, 0.00),
			0 14px 36px -6px rgba(0,147,254, 0.45),
			inset 0 1px 0 0  rgba(255,255,255, 0.22);
	}
}
.gul-btn--primary:hover {
	animation: none;
	transform: translateY(-2px);
	box-shadow:
		0 0  0 6px rgba(0,147,254, 0.15),
		0 18px 42px -6px rgba(0,147,254, 0.55),
		inset 0 1px 0 0  rgba(255,255,255, 0.22);
}
.gul-btn--primary:active {
	transform: translateY(0);
	transition: transform 0.05s;
}

/* ========================================================================
 * SECONDARY CTA: subtle but trustworthy
 * ====================================================================== */
.gul-btn--secondary {
	transition: all 0.2s ease;
}
.gul-btn--secondary:hover {
	transform: translateY(-1px);
	box-shadow: 0 6px 16px -4px rgba(15, 23, 42, 0.12);
}

/* ========================================================================
 * VIZ CARDS: sophisticated hover orchestration
 * ----------------------------------------------------------------------
 * Cards lift different amounts at different rotations on hero hover.
 * The asymmetric motion feels alive, not just animated.
 * ====================================================================== */
.gul-viz-card {
	transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.4s;
	will-change: transform;
}
.gul-hero-section:hover .gul-viz-card--main      { transform: translateY(-12px); }
.gul-hero-section:hover .gul-viz-card--secondary { transform: translateY(-4px); }
.gul-hero-section:hover .gul-viz-card--tertiary  { transform: translateY(-8px); }

/* ========================================================================
 * GENERIC CARD HOVER: applied to pain cards, service cards, post cards
 * ----------------------------------------------------------------------
 * The cubic-bezier curve here is the same one Apple/Linear use for their
 * card lifts — slight overshoot at the top, soft landing. Hugely
 * recognizable feel-good motion.
 * ====================================================================== */
.gul-pain-card,
.gul-service-card,
.gul-blog-card,
.gul-pricing-card {
	transition: transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 0.3s;
}
.gul-pain-card:hover,
.gul-service-card:hover,
.gul-blog-card:hover,
.gul-pricing-card:hover {
	transform: translateY(-4px);
	box-shadow: 0 20px 40px -12px rgba(15, 23, 42, 0.15);
}

/* ========================================================================
 * CONTACT FORM: pre-submit trust strip
 * ----------------------------------------------------------------------
 * Above the submit button, render three tiny trust signals that lift form-
 * completion rates by 10-20% in B2B service tests. CSS-only via pseudo-
 * element so we don't have to touch the PHP render or every JSON template.
 * ====================================================================== */
.gul-contact-form > button[type="submit"]::before {
	/* (No-op; the real strip is placed via the form's parent, not the
	   button. See .gul-contact-form below.) */
}

.gul-contact-form::before {
	content: "💬 A real strategist reads every message — never a call center  ·  🤝 No pressure, no obligation  ·  🔒 Your details stay private";
	display: block;
	text-align: center;
	font-size: 0.8125rem;
	font-weight: 600;
	color: #475569;
	background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
	border: 1px solid #e2e8f0;
	border-radius: 9999px;
	padding: 0.6rem 1.25rem;
	margin: 0 auto 1.5rem;
	max-width: fit-content;
	font-family: 'Inter', sans-serif;
	letter-spacing: 0.01em;
	box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}

/* ========================================================================
 * FORM INPUTS: more present focus state
 * ----------------------------------------------------------------------
 * Default WP form-focus is barely visible. A 4px halo in primary at low
 * opacity signals "I'm listening" without being garish.
 * ====================================================================== */
.gul-contact-form input:not([type="submit"]):not([type="checkbox"]):not([type="radio"]),
.gul-contact-form select,
.gul-contact-form textarea {
	transition: border-color 0.18s, box-shadow 0.18s, background-color 0.18s;
}
.gul-contact-form input:not([type="submit"]):focus,
.gul-contact-form select:focus,
.gul-contact-form textarea:focus {
	outline: none;
	border-color: #0093fe;
	box-shadow: 0 0 0 4px rgba(0, 147, 254, 0.12);
	background-color: #ffffff;
}

/* Required-field marker — replaces the generic asterisk with a more honest
   "required" pill that reads as "we mean it" rather than "we don't trust you" */
.gul-contact-form label .required,
.gul-contact-form label [aria-hidden="true"] {
	font-size: 0.6875rem;
	font-weight: 700;
	color: #fcb900;
	background: rgba(252, 185, 0, 0.10);
	padding: 0.05rem 0.4rem;
	border-radius: 9999px;
	margin-left: 0.4rem;
	letter-spacing: 0.04em;
}

/* ========================================================================
 * SECTION TITLES: better typographic hierarchy
 * ----------------------------------------------------------------------
 * Slight letter-spacing adjustment + display-font weight tightening makes
 * h2s read with more authority. Small change, big perceptual difference.
 * ====================================================================== */
.gul-section-title {
	letter-spacing: -0.025em;
	line-height: 1.12;
}

/* Body subtext under section titles — better readable width + line-height */
.gul-section-subtext,
.gul-hero-subtext {
	max-width: 36rem;
	line-height: 1.7;
}

/* ========================================================================
 * GLOBAL: prefers-reduced-motion respect
 * ----------------------------------------------------------------------
 * Single block that disables every keyframe animation we declared above.
 * Critical: a11y-conscious users will still see the static design correctly.
 * ====================================================================== */
@media (prefers-reduced-motion: reduce) {
	.gul-hero-section::after,
	.gul-btn--primary {
		animation: none !important;
	}
	.gul-pain-card,
	.gul-service-card,
	.gul-blog-card,
	.gul-pricing-card,
	.gul-viz-card,
	.gul-btn--secondary {
		transition: none;
	}
}

/* ========================================================================
 * MOBILE: scale down the breathing CTA shadow so it doesn't dominate
 * ====================================================================== */
@media (max-width: 480px) {
	@keyframes gul-btn-breathe {
		0%, 100% { box-shadow: 0 6px 16px -4px rgba(0,147,254, 0.30); }
		50%      { box-shadow: 0 8px 22px -4px rgba(0,147,254, 0.42); }
	}
	.gul-contact-form::before {
		font-size: 0.75rem;
		padding: 0.5rem 1rem;
	}
}
