/* Banner ad reserve. The game never sits under a banner: the playfield (and every
   viewport-relative layer, which uses --app-h instead of dvh) shrinks to the free
   area and is moved away from the banner edge. Set by banner.js. */
:root{--banner-h:0px;--banner-edge:0px;--safe-top:env(safe-area-inset-top);--safe-bottom:env(safe-area-inset-bottom);--app-h:calc(100dvh - var(--banner-h) - var(--banner-edge));--app-shift:0px}
html[data-banner=bottom]{--banner-edge:env(safe-area-inset-bottom);--safe-bottom:0px}
html[data-banner=top]{--banner-edge:env(safe-area-inset-top);--safe-top:0px;--app-shift:calc(var(--banner-h) + var(--banner-edge))}
/* A transformed body becomes the containing block of fixed layers, so full-screen
   overlays (inset:0) cover the game area only. */
html[data-banner] body{position:relative;height:var(--app-h);transform:translateY(var(--app-shift));overflow:visible}
#ad-banner-slot{position:absolute;left:0;right:0;height:calc(var(--banner-h) + var(--banner-edge));z-index:2147483000;display:flex;justify-content:center;background:#140d1f;contain:strict}
html[data-banner=bottom] #ad-banner-slot{top:100%;align-items:flex-start}
html[data-banner=top] #ad-banner-slot{bottom:100%;align-items:flex-end}
#ad-banner-slot[hidden]{display:none}
#ad-banner-slot .banner-preview{width:min(100%,calc(var(--banner-h) * 6.4));height:var(--banner-h);display:grid;place-items:center;font:600 12px/1 system-ui,sans-serif;color:#d9c7ea;background:repeating-linear-gradient(135deg,#2a1d3a 0 10px,#241932 10px 20px);border:1px dashed #6d548a;box-sizing:border-box}
