/* ads.css - AdSense display unit mounts (2026-09-04). Loaded only by the
   pages that carry a mount (index.html and the essay template); js/ads.js
   renders into the mount at runtime and nothing else touches it. Terminal
   Ledger tokens only. */

/* A mount takes no space until a unit renders into it. The [hidden]
   attribute is the source of truth; restated here with !important so no
   later display rule on .dps-ad can reopen a hidden mount. */
.dps-ad[hidden] {
  display: none !important;
}
.dps-ad {
  margin: var(--sp-6) auto;
}
/* index.html: the mount sits between the calculator container and the copy
   sections, so it carries its own measure (matches .content-wrapper). */
.dps-ad--standalone {
  max-width: 880px;
  padding: 0 24px;
}
/* Reserved box while a unit is live, so the creative arriving does not move
   the page: caption line plus a responsive display unit. */
.dps-ad--live {
  min-height: 300px;
}
.dps-ad-caption {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-caption);
  letter-spacing: var(--tracking-ad);
  text-transform: uppercase;
  color: var(--t3);
  margin-bottom: var(--sp-2);
}
.dps-ad .adsbygoogle {
  display: block;
  border: 1px solid var(--frame);
}
/* No-fill: AdSense keeps the ins at its reserved height and stamps it
   data-ad-status="unfilled". js/ads.js removes the unit when it sees that;
   these rules collapse the same box with no script in the loop, so an
   empty framed box labelled Advertisement never survives a no-fill. */
.dps-ad .adsbygoogle[data-ad-status="unfilled"] {
  display: none !important;
}
.dps-ad:has(> .adsbygoogle[data-ad-status="unfilled"]) {
  display: none !important;
}
@media (max-width: 768px) {
  .dps-ad--standalone {
    padding: 0 16px;
  }
  .dps-ad--live {
    min-height: 280px;
  }
}
