/* Npaper reader: ad slots (misc/viewer/ads.js). Loaded only when the paper has Advertising on. */
.nv-ad { display: flex; flex-direction: column; align-items: center; gap: 6px; margin: 28px auto; clear: both; }
.nv-ad-label { display: flex; align-items: center; gap: 8px; height: 12px; font: 500 9.5px/12px 'Geist', system-ui, sans-serif; letter-spacing: .16em; text-transform: uppercase; color: #8a8a90; }
.nv-ad-size { font-family: 'Geist Mono', ui-monospace, monospace; letter-spacing: .02em; text-transform: none; color: #6b6b72; }
.nv-ad-box { display: block; flex: none; max-width: 100%; overflow: hidden; background: #f4f2ee; }
.nv-ad-box img { display: block; width: 100%; height: 100%; object-fit: cover; }
a.nv-ad-box:focus-visible { outline: 2px solid #1aa7e0; outline-offset: 2px; }
/* Preview (?adsizes=1): a slot nothing fills keeps its place as a dashed outline */
.nv-ad.is-empty .nv-ad-box { background: transparent; outline: 1.5px dashed #a8a59d; outline-offset: -1.5px; }

/* Side rail: beside the page, in the space the stage keeps free (--nv-ad-rail) */
.nv-ad-rail { position: absolute; top: 50%; right: 24px; margin: 0; transform: translateY(-50%); z-index: 5; }
.nv-stage.has-ad-rail .nv-scroll { right: var(--nv-ad-rail); }
.nv-stage.has-ad-rail .nv-arrow--next { right: calc(var(--nv-ad-rail) + 12px); }
.nv-app.is-focus .nv-ad { display: none; }

/* Wehaa tags: the box sizes the banner; MockWehaaBanner draws a #2d2a26 placeholder (WEHAA_ADS_CONTRACT.md) */
.nv-ad-box--wehaa .business-ai-banner { width: 100%; height: 100%; }
.nv-wehaa-mock { width: 100%; height: 100%; box-sizing: border-box; padding: 12px; background: #2d2a26; color: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; text-align: center; }
.nv-wehaa-mock b { font: 500 17px/1.15 'Newsreader', Georgia, serif; }
.nv-wehaa-mock i { font: 11px 'Geist Mono', ui-monospace, monospace; font-style: normal; opacity: .7; }

/* Google / another network: the ad gets the slot's box; an empty rail keeps its space with nothing in it;
 * an in-article slot that nothing fills closes (its height animates to 0) */
.nv-ad-box--net { background: transparent; display: flex; align-items: center; justify-content: center; }
.nv-ad-box--net iframe { display: block; border: 0; }
.nv-ad.is-gone { visibility: hidden; }
.nv-ad.is-closing { margin-top: 0; margin-bottom: 0; opacity: 0; transition: height .3s ease, margin .3s ease, opacity .2s ease; }
@media (prefers-reduced-motion: reduce) { .nv-ad.is-closing { transition: none; } }

/* Phone articles style every div in the text (mobile.css .m-text div): the slot keeps its own look */
.m-text .nv-ad div { margin: 0 !important; }
.m-text .nv-ad .nv-ad-label { font: 500 9.5px/12px 'Geist', system-ui, sans-serif !important; }
.m-text .nv-ad .nv-ad-size { font-family: 'Geist Mono', ui-monospace, monospace !important; }

/* Article companion beside the text (decision 27): sticky while the article is read, gone when it ends */
.nv-art.has-comp { max-width: none; }
.nv-art-cols { display: flex; gap: 44px; align-items: stretch; }
.nv-art-cols > .nv-art-body { flex: 1; min-width: 0; }
.nv-comp-col { flex: none; width: 300px; }
.nv-comp-col .nv-ad { position: sticky; top: 16px; margin: 0; }

/* Parallax window (phones): the layer holds still on screen while the window scrolls past it */
.nv-ad--window { margin: 28px -20px; align-items: stretch; gap: 8px; }
.nv-ad--window .nv-ad-label { justify-content: center; }
.nv-win { position: relative; overflow: hidden; background: #f4f2ee; box-shadow: inset 0 10px 12px -10px rgba(0, 0, 0, .18), inset 0 -10px 12px -10px rgba(0, 0, 0, .18); }
.nv-win-layer { position: absolute; left: 0; top: 0; width: 100%; will-change: transform; }
.nv-ad--window.is-still .nv-win-layer { will-change: auto; }
.nv-win-full, .nv-win-paper { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }
.nv-win-full img { width: 100%; height: 100%; object-fit: cover; display: block; }
.nv-win-ad { max-height: 96%; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.nv-ad--window.is-empty .nv-win { background: transparent; outline: 1.5px dashed #a8a59d; outline-offset: -1.5px; box-shadow: none; }
