/* ADS (review/ads-2026-09-18). Linked only with ADS_MODE=snigel or mock; with
   off, the default, no page carries this file. Every slot stays collapsed
   until the ad engine is ready (<html class="ads-ready">) and its unit is
   active for the width at load (<html class="ad-u-<unit>">, partials/ads.js).
   Stacking, bottom to top: the page, the rail (1), the mock adhesive bar (25),
   the top banner (30), our header (40) and its menu (60), Snigel's consent
   window (10000). */

.snigel-cmp-framework{z-index:10000!important;pointer-events:auto}

.ad-top,.ad-slot,.ad-rail,.ad-edge{display:none}

/* TOP BANNER, under 960px: sticky at the very top, 50px reserved, with the
   games' collapse tab under it. It sits below the header in the stack, so the
   header slides over it when the page scrolls and its menu is never covered. */
.ads-ready.ad-u-top_banner .ad-top{display:flex;flex-direction:column;align-items:flex-start;position:sticky;top:0;z-index:30;pointer-events:none}
.ad-top-bar{pointer-events:auto;width:100%;height:50px;display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--card);box-shadow:0 0 8px rgba(0,0,0,.2);transition:height .25s ease-in-out}
.ad-top-toggle{pointer-events:auto;display:flex;align-items:center;justify-content:center;width:48px;height:24px;margin:0;padding:0;border:0;border-bottom-right-radius:6px;background:var(--card);color:var(--ink);box-shadow:4px 3px 4px rgba(0,0,0,.1);cursor:pointer}
.ad-top-toggle svg{transition:transform .25s}
.ad-top.is-closed .ad-top-bar{height:0;box-shadow:none}
.ad-top.is-closed .ad-top-toggle svg{transform:rotate(180deg)}
@media(min-width:960px){.ad-top{display:none!important}}

/* IN THE ARTICLE, after "Place of the day": nothing until it is filled, then
   the room one section takes. It may use the spine's gutter, so a 300px ad
   fits on a 360px phone; centred, it clears the spine line itself. */
.ads-ready.ad-u-incontent .ad-incontent{display:flex;justify-content:center;margin:0 -4px 0 -40px}
.ads-ready.ad-u-incontent .ad-incontent:has(> div > *){margin-bottom:40px}
@media(max-width:480px){.ads-ready.ad-u-incontent .ad-incontent{margin-left:-34px}}

/* THE END OF THE ARTICLE, under 960px: 250px reserved, as the games do */
.ads-ready.ad-u-end_mobile .ad-end_mobile{display:flex;align-items:center;justify-content:center;max-width:600px;min-height:250px;margin:24px auto 28px}

/* THE LEFT RAIL, from 1300px: 300px wide, 40px left of the 600px article, and
   sticky within the article's own height, so it never meets the hero, the
   header, the signup box or the footer */
.ad-frame,.issue-page.has-ads{position:relative}
/* the home page clips its hero art with overflow:hidden, which would also stop
   the rail from sticking; clip does the same clipping and lets it stick */
.home-page{overflow:clip}
@media(min-width:1300px){.ads-ready.ad-u-sidebar_left .ad-rail{display:block;position:absolute;top:28px;bottom:65px;right:calc(50% + 340px);width:300px;z-index:1}
.ads-ready.ad-u-sidebar_left .ad-frame>.ad-rail{top:54px}
}
.ad-rail-inner{position:sticky;top:16px;display:flex;flex-direction:column;align-items:flex-end;gap:16px}

/* THE EDGE UNITS: containers at the end of the body; Snigel positions them */
.ads-ready.ad-u-video .ad-video,.ads-ready.ad-u-adhesive_desktop .ad-adhesive_desktop{display:block}

/* MOCK MODE only: grey boxes of the real sizes, and the adhesive bar drawn
   where Snigel puts it */
.ad-mock{display:flex;align-items:center;justify-content:center;max-width:100%;box-sizing:border-box;background:var(--hair);border:1px dashed var(--slate);color:var(--slate);font:700 11px 'Space Mono',monospace;letter-spacing:.08em;text-transform:uppercase}
.ad-mode-mock.ads-ready.ad-u-adhesive_desktop .ad-adhesive_desktop{position:fixed;left:0;right:0;bottom:0;z-index:25;display:flex;justify-content:center;padding:5px 0;background:var(--card);box-shadow:0 -6px 18px var(--shadow)}
.ad-mode-mock.ads-ready.ad-u-adhesive_desktop body{padding-bottom:100px}
.ad-mode-mock.ads-ready.ad-u-video .ad-video{display:flex;justify-content:center;padding:18px 12px 22px;background:var(--paper)}
.ad-mode-mock .ad-video .ad-mock{width:320px;height:180px}
