/* =============================================================================
   embed.css — shared GHL calendar-embed states for pages beyond /contact/.
   Mirrors the embed visuals proven on /contact/ (skeleton · pre-launch · fallback
   · iframe) so the per-line booking widgets on /medicare/ and /final-expense/ load
   or fall back gracefully. Tokens only. NO BLUE. Warm shadows only.
   js/contact.js drives these by element id; this file supplies the visuals.
   ============================================================================= */

/* Card the embed sits inside (cream, double-bezel) */
.gv-embed-card {
  background: var(--gv-card);
  border: 1px solid var(--gv-rule);
  border-radius: var(--gv-radius);
  padding: 24px 20px;
  box-shadow:
    var(--gv-shadow),
    inset 0 1px 0 rgba(255, 255, 255, 0.6);
}
@media (min-width: 768px) {
  .gv-embed-card { padding: 32px; }
}

.gv-embed-card__label { margin-bottom: 6px; }
.gv-embed-card__intro {
  font-family: var(--gv-font-body);
  font-size: 17px;
  color: var(--gv-text-muted);
  margin: 0 0 20px;
  line-height: 1.55;
}

/* Wrapper holds skeleton, pre-launch, fallback, or iframe */
.gv-embed-wrapper {
  position: relative;
  width: 100%;
  /* GHL booking widget reports ~805px content on mobile, ~830px on desktop
     (measured via its highlevel.setHeight postMessage). The iframe is fixed
     height, so a too-short value leaves a dead, un-scrollable scrollbar inside
     the widget. Height set to fully clear the content + buffer for month/view
     reflow, with no big empty gap. */
  min-height: 880px;
  border-radius: var(--gv-radius-sm);
  overflow: hidden;
}
@media (min-width: 768px) {
  .gv-embed-wrapper {
    min-height: 880px;
  }
}
/* Cross-browser: was :has(> .gv-embed-prelaunch:not([hidden])) — Safari <15.4 / FF <121
   don't support :has(). Class is set by contact.js at the same time prelaunch is shown. */
.gv-embed-wrapper--prelaunch { min-height: 0; }

/* Skeleton shimmer */
.gv-embed-skeleton {
  position: absolute;
  top: 0; right: 0; bottom: 0; left: 0;
  background: var(--gv-rule);
  border-radius: var(--gv-radius-sm);
  overflow: hidden;
}
.gv-embed-skeleton__shimmer {
  position: absolute;
  top: 0; right: 0; bottom: 0; left: 0;
  background: linear-gradient(90deg, transparent 0%, rgba(255, 253, 246, 0.6) 50%, transparent 100%);
  background-size: 200% 100%;
  animation: gv-shimmer 1.6s linear infinite;
}
@keyframes gv-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
  .gv-embed-skeleton__shimmer { animation: none; }
}

/* Fallback block — only shown if a real iframe fails to load at runtime */
.gv-embed-fallback {
  padding: 28px 24px;
  text-align: left;
  display: flex;
  flex-direction: column;
  gap: 14px;
  align-items: flex-start;
}
.gv-embed-fallback[hidden] { display: none; }
.gv-embed-skeleton[hidden] { display: none; }
.gv-embed-fallback__line {
  font-family: var(--gv-font-body);
  font-size: 18px;
  color: var(--gv-text-body);
  margin: 0;
  line-height: 1.5;
}

/* Pre-launch holding state (calm, phone/email-first; never says "error") */
.gv-embed-prelaunch {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 18px;
  padding: 4px 2px 2px;
}
.gv-embed-prelaunch[hidden] { display: none; }
.gv-embed-prelaunch__line {
  font-family: var(--gv-font-body);
  font-size: 18px;
  color: var(--gv-text-body);
  margin: 0;
  line-height: 1.6;
  max-width: 46ch;
}
.gv-embed-prelaunch__action {
  width: 100%;
  max-width: 360px;
  letter-spacing: 0.06em;
}
.gv-embed-prelaunch__icon {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
}
.gv-embed-prelaunch__alt {
  font-family: var(--gv-font-body);
  font-size: 16px;
  color: var(--gv-text-muted);
  margin: 0;
  line-height: 1.5;
}
.gv-embed-prelaunch__alt a {
  display: inline-flex;
  align-items: center;
  min-height: 48px;
  padding: 4px 2px;
  color: var(--gv-gold-text);
  text-decoration: underline;
  text-underline-offset: 2px;
  word-break: break-word;
}
