/* Shared corner geometry for the public top link and existing notification region. */
body[data-donbuild-floating-ui] {
  --donbuild-floating-control-size: var(--donbuild-space-12);
  --donbuild-floating-gap: var(--donbuild-space-3);
  --donbuild-floating-right: max(var(--donbuild-container-gutter), env(safe-area-inset-right));
  --donbuild-floating-bottom: max(var(--donbuild-space-4), env(safe-area-inset-bottom));
}

.donbuild-back-to-top {
  position: fixed;
  z-index: var(--donbuild-z-toaster);
  right: var(--donbuild-floating-right);
  bottom: var(--donbuild-floating-bottom);
  display: grid;
  place-items: center;
  width: var(--donbuild-floating-control-size);
  height: var(--donbuild-floating-control-size);
  border: 1px solid var(--donbuild-color-border);
  border-radius: 50%;
  color: var(--donbuild-color-text-primary);
  background: var(--donbuild-color-surface);
  box-shadow: 0 var(--donbuild-space-1) var(--donbuild-space-3) rgb(17 17 17 / 12%);
  text-decoration: none;
  transition: opacity .2s ease, transform .2s ease, background-color .2s ease;
}

.donbuild-back-to-top:hover {
  color: var(--donbuild-color-text-primary);
  background: rgb(255 255 255 / .8);
}

.donbuild-back-to-top .donbuild-icon--arrow-up {
  width: var(--donbuild-space-5);
  height: var(--donbuild-space-5);
  mask-image: url('../../icons/gravity/arrow-up.svg');
}

.donbuild-back-to-top[data-donbuild-ready]:not([data-donbuild-visible]),
body:has(dialog:modal) .donbuild-back-to-top {
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
  transform: translateY(var(--donbuild-space-2));
}

/* The native top anchor receives focus after activation; controls keep their ring. */
#donbuild-top:focus-visible { outline: none; }

@media (scripting: enabled) {
  .donbuild-back-to-top:not([data-donbuild-ready]) { visibility: hidden; }
}

@media (scripting: none) {
  .donbuild-back-to-top {
    position: static;
    margin: var(--donbuild-space-4) var(--donbuild-floating-right) var(--donbuild-floating-bottom) auto;
  }
}

body[data-donbuild-floating-ui] .donbuild-toaster {
  inset-inline-end: var(--donbuild-floating-right);
  inset-block-end: calc(var(--donbuild-floating-bottom) + var(--donbuild-floating-control-size) + var(--donbuild-floating-gap));
  width: min(24rem, calc(100% - var(--donbuild-floating-right) - max(var(--donbuild-container-gutter), env(safe-area-inset-left))));
  max-height: calc(100dvh - var(--donbuild-floating-bottom) - var(--donbuild-floating-control-size) - var(--donbuild-floating-gap) - var(--donbuild-space-4) - env(safe-area-inset-top));
}

/* All actual floating notices share one bounded stack above the top control. */
.donbuild-floating-notices {
  position: fixed;
  z-index: var(--donbuild-z-toaster);
  right: var(--donbuild-floating-right);
  bottom: calc(var(--donbuild-floating-bottom) + var(--donbuild-floating-control-size) + var(--donbuild-floating-gap));
  display: grid;
  gap: var(--donbuild-space-3);
  width: min(28rem, calc(100% - var(--donbuild-floating-right) - max(var(--donbuild-container-gutter), env(safe-area-inset-left))));
  max-height: calc(100dvh - var(--donbuild-floating-bottom) - var(--donbuild-floating-control-size) - var(--donbuild-floating-gap) - var(--donbuild-space-4) - env(safe-area-inset-top));
  overflow-y: auto;
  overscroll-behavior-y: contain;
}

body[data-donbuild-floating-ui] .donbuild-floating-notices .donbuild-toaster {
  position: static;
  width: 100%;
  max-height: none;
  overflow: visible;
}

@media (scripting: none) {
  .donbuild-floating-notices { position: static; max-height: none; margin: var(--donbuild-space-4) var(--donbuild-floating-right) var(--donbuild-space-4) auto; }
}

@media (prefers-reduced-motion: reduce) {
  .donbuild-back-to-top { transition: none; }
}
