/* Reusable UI components: buttons, badges, cards, icon tiles, controls */

/* ---------- Buttons / pills ---------- */

.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-md);
  font-weight: 600;
  padding: 1rem 1.6875rem;
  border-radius: var(--radius-pill);
  border: 1px solid transparent;
  background-clip: padding-box;
  cursor: pointer;
  transition: filter var(--transition-fast), border-color var(--transition-fast),
    background var(--transition-fast), color var(--transition-fast);
  white-space: nowrap;
}

/*
  Every variant below re-declares background-clip: padding-box alongside its
  own `background`. That's not redundant — `background` is a shorthand, so
  setting it resets background-clip back to the default (border-box) even
  though .btn above already set it. Left unfixed, a solid/gradient
  background against this transparent border can leave a hairline sliver of
  the gradient bleeding past the rounded corner in Chrome (worst at the
  bottom-right) — a sub-pixel anti-aliasing seam, not a real border. The
  transparent border itself stays, since it's what keeps every button
  variant the same height/width regardless of whether it actually has a
  visible border (outline/ghost variants).
*/

.btn--gradient {
  color: var(--color-white);
  background: var(--gradient-brand-120);
  background-clip: padding-box;
  box-shadow: var(--shadow-cta);
}

.btn--gradient:hover {
  filter: brightness(1.08);
  color: var(--color-white);
}

.btn--outline {
  color: var(--color-ink-secondary);
  background: rgba(255, 255, 255, 0.8);
  background-clip: padding-box;
  border-color: var(--border-pill);
}

.btn--outline:hover {
  border-color: var(--color-pink);
  color: var(--color-ink-secondary);
}

.btn--outline-on-dark {
  color: var(--color-white);
  background: rgba(255, 255, 255, 0.08);
  background-clip: padding-box;
  border-color: rgba(255, 255, 255, 0.42);
}

.btn--outline-on-dark:hover {
  border-color: var(--color-pink);
  color: var(--color-white);
}

.btn--white {
  color: var(--bg-contact-3);
  background: var(--color-white);
  background-clip: padding-box;
}

.btn--white:hover {
  background: #EEF2FC;
  background-clip: padding-box;
  color: var(--bg-contact-3);
}

.btn--ghost-on-dark {
  color: var(--color-white);
  border-color: rgba(255, 255, 255, 0.6);
  background: transparent;
  background-clip: padding-box;
}

.btn--ghost-on-dark:hover {
  background: rgba(255, 255, 255, 0.14);
  background-clip: padding-box;
  color: var(--color-white);
}

.btn--sm {
  padding: 0.625rem 1.0625rem;
  font-size: var(--text-base);
}

.btn-group {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}

/* ---------- Eyebrow badge (hero) ---------- */

.badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: 0.4375rem 0.9375rem 0.4375rem 0.6875rem;
  border-radius: var(--radius-pill);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: var(--tracking-wider);
  text-transform: uppercase;
}

.badge__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-pink);
  animation: df-blink 1.9s ease-in-out infinite;
}

.badge--on-dark {
  background: rgba(59, 91, 219, 0.16);
  border: 1px solid rgba(59, 91, 219, 0.42);
  color: var(--color-accent-pink-on-dark);
}

/* ---------- Icon tiles ---------- */

.icon-tile {
  display: grid;
  place-items: center;
  border-radius: var(--radius-md);
  background: var(--gradient-brand-135);
  flex: none;
}

.icon-tile svg {
  color: var(--color-white);
}

.icon-tile--sm {
  width: 2.125rem; /* 34px */
  height: 2.125rem;
  border-radius: 0.625rem;
}

.icon-tile--sm svg {
  width: 18px;
  height: 18px;
}

.icon-tile--md {
  width: 2.5rem; /* 40px */
  height: 2.5rem;
}

.icon-tile--md svg {
  width: 21px;
  height: 21px;
}

.icon-tile--on-dark {
  background: rgba(255, 255, 255, 0.12);
  border: 1px solid rgba(255, 255, 255, 0.22);
}

.icon-tile--on-dark svg {
  color: var(--color-accent-pink-on-dark);
}

/* ---------- Cards ---------- */

.card {
  display: block;
  border-radius: var(--radius-xl);
  color: var(--color-ink);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast),
    background var(--transition-fast);
}

.card--service {
  padding: 1.75rem 1.5rem 1.875rem;
  background: var(--bg-card-tint);
  border: 1px solid var(--border-card);
}

.card--service:hover {
  border-color: #B9C8EE;
}

.card--service .card__title {
  font-family: var(--font-display);
  font-size: var(--text-3xl);
  font-weight: 600;
  letter-spacing: var(--tracking-tight);
  margin: 1.125rem 0 0.5625rem;
}

.card--service .card__body {
  margin: 0 0 1rem;
  font-size: var(--text-base-alt);
  line-height: var(--leading-relaxed);
  color: var(--color-body);
}

.card--service .card__link {
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--color-link);
}

.card--dark {
  padding: 1.75rem 1.5rem 1.875rem;
  background: linear-gradient(160deg, var(--bg-dark-1), var(--bg-dark-2));
  border: 1px solid var(--border-dark);
  color: var(--color-ink-on-dark);
}

.card--dark .card__title {
  font-family: var(--font-display);
  font-size: var(--text-3xl);
  font-weight: 600;
  letter-spacing: var(--tracking-tight);
  margin: 1.125rem 0 0.5625rem;
  color: var(--color-ink-on-dark);
}

.card--dark .card__body {
  margin: 0 0 1rem;
  font-size: var(--text-base-alt);
  line-height: var(--leading-relaxed);
  color: var(--color-body-on-dark);
}

.card--dark .card__link {
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--color-accent-pink-on-dark);
}






.card--menu {
  display: block;
  padding: 1.375rem 1.25rem 1.5rem;
  border-radius: var(--radius-lg);
  background: var(--bg-card-tint);
  border: 1px solid var(--border-card);
  color: var(--color-ink);
}

.card--menu:hover {
  border-color: var(--color-pink);
  background: var(--bg-white);
}

.card--menu .card__title {
  font-family: var(--font-display);
  font-size: var(--text-lg-alt);
  font-weight: 600;
  letter-spacing: var(--tracking-tight);
  margin: 0.875rem 0 0.4375rem;
}

.card--menu .card__body {
  margin: 0;
  font-size: var(--text-sm-alt);
  line-height: var(--leading-relaxed);
  color: var(--color-body);
}

/* ---------- Stat card (hero) ---------- */

.stat-card {
  padding: 1.25rem;
  border-radius: var(--radius-lg);
  backdrop-filter: blur(6px);
  background: var(--bg-card-tint);
  border: 1px solid var(--border-card);
}

.stat-card__value {
  margin: 0;
  font-family: var(--font-display);
  font-size: var(--text-6xl);
  font-weight: 600;
  letter-spacing: -0.024em;
  color: var(--color-ink);
}

.stat-card__label {
  margin: 0.25rem 0 0;
  font-size: var(--text-xs);
  color: var(--color-body);
}

/* ---------- Tag / label pill ---------- */

.tag {
  display: inline-block;
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: var(--tracking-widest);
  text-transform: uppercase;
  padding: 0.3125rem 0.6875rem;
  border-radius: var(--radius-pill);
}

.tag--purple {
  color: var(--color-accent-purple-on-dark);
  background: rgba(16, 152, 173, 0.16);
}

.tag--pink {
  color: var(--color-accent-pink-on-dark);
  background: rgba(59, 91, 219, 0.16);
}

/* ---------- Pagination dots ---------- */

.dots {
  display: flex;
  gap: var(--space-2);
}

.dot {
  width: 1.625rem;
  height: 6px;
  border-radius: var(--radius-pill);
  border: none;
  padding: 0;
  cursor: pointer;
  background: rgba(22, 33, 59, 0.20);
  transition: background var(--transition-fast);
}

.dot[aria-current="true"] {
  background: var(--gradient-brand-120);
}

/* ---------- Circular arrow buttons ---------- */

.arrow-btn {
  width: 2.625rem;
  height: 2.625rem;
  border-radius: 50%;
  border: 1px solid #C4CFE8;
  background: var(--bg-white);
  color: var(--color-ink-secondary);
  font-size: var(--text-md);
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: border-color var(--transition-fast), color var(--transition-fast);
}

.arrow-btn:hover {
  border-color: var(--color-pink);
  color: var(--color-eyebrow);
}

/* ---------- News card (homepage teaser grid + /news/ listing) ---------- */

.news-card {
  display: block;
  border-radius: var(--radius-xl);
  overflow: hidden;
  background: var(--bg-white);
  border: 1px solid var(--border-card-alt);
  color: var(--color-ink);
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
}

.news-card:hover {
  border-color: var(--color-pink);
  box-shadow: var(--shadow-card-hover);
}

.news-card__image {
  height: 11.125rem;
}

.news-card__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.news-card__body {
  padding: 1.5rem 1.5rem 1.625rem;
}

.news-card__meta {
  margin: 0 0 0.625rem;
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #9AA6C0;
}

.news-card__title {
  font-family: var(--font-display);
  font-size: var(--text-2xl);
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -0.012em;
  margin: 0 0 0.625rem;
  text-wrap: pretty;
}

.news-card__excerpt {
  margin: 0;
  font-size: var(--text-base-alt);
  line-height: 1.6;
  color: var(--color-body);
}

/* ---------- Placeholder image blocks (news thumbnails etc.) ---------- */

.placeholder-image {
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #EEF2FA 0%, #E1E8F5 100%);
  color: #9AA6C0;
}

.placeholder-image svg {
  width: 28px;
  height: 28px;
}

/* ---------- Cookie consent banner (CookieBanner.astro, js/modules/consent.js) ---------- */

.consent-banner {
  position: fixed;
  left: var(--space-4);
  right: var(--space-4);
  bottom: var(--space-4);
  z-index: 1000;
  max-width: 56rem;
  margin-inline: auto;
  padding: var(--space-5) var(--space-6);
  background: var(--bg-white);
  border: 1px solid var(--border-card);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-menu);
}

.consent-banner[hidden] {
  display: none;
}

.consent-banner__inner {
  display: flex;
  align-items: center;
  gap: var(--space-6);
}

.consent-banner__text {
  flex: 1;
  font-size: var(--text-base);
  line-height: var(--leading-relaxed);
  color: var(--color-body);
}

.consent-banner__text a {
  text-decoration: underline;
  text-underline-offset: 3px;
}

.consent-banner__actions {
  flex-shrink: 0;
}

@media (max-width: 720px) {
  .consent-banner__inner {
    flex-direction: column;
    align-items: stretch;
    gap: var(--space-4);
  }
}
