/* Production-only consent controls, using the existing Bache palette and UI face. */
html { scroll-padding-bottom: var(--analytics-banner-space, 0px); }
body::after {
  content: '';
  display: block;
  height: var(--analytics-banner-space, 0px);
  pointer-events: none;
}
.analytics-banner {
  position: fixed;
  inset: auto 1rem 1rem;
  z-index: 80;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 1.5rem;
  /* Keep a usable keyboard-focus lane above this nonmodal, scrollable banner. */
  max-height: max(3rem, calc(var(--analytics-viewport-height, 100dvh) - var(--analytics-header-height, 0px) - 6rem));
  overflow-y: auto;
  padding: 1.5rem;
  color: var(--colour-navy);
  background: var(--colour-white);
  border: 1px solid var(--colour-border);
  border-top: 3px solid var(--colour-gold);
  box-shadow: var(--shadow-soft);
}
.analytics-banner[hidden] { display: none; }
/* If the main module fails, the native policy disclosures remain available. */
html:not(.has-js) .analytics-banner [data-dialog-open] { display: none; }
.analytics-banner h2 { margin: 0 0 .5rem; font-size: 1.5rem; }
.analytics-banner p { margin: 0; max-width: 62rem; font-size: 1rem; }
.analytics-banner .dialog-text-button { margin-top: .5rem; color: var(--colour-navy); }
.analytics-actions { display: flex; flex-wrap: wrap; gap: .75rem; }
.analytics-actions .button { flex: 1 1 auto; min-height: 44px; white-space: nowrap; }
[data-analytics-settings][hidden] { display: none; }
@media (max-width: 70rem) {
  .analytics-banner { grid-template-columns: 1fr; gap: 1rem; }
}
