/* Public shell additions: isolated tool frame and reserved ad space (prevents CLS). */
.ftp-frame-wrap { position: relative; }
.ftp-frame { display: block; width: 100%; border: 0; border-radius: 16px; background: transparent; color-scheme: normal; }
.ftp-frame-note { margin: 6px 0 0; font-size: .82rem; color: #4a5d6b; }
.privacy-badge { display: inline-flex; gap: 6px; align-items: center; margin-left: 8px; padding: 3px 10px; border-radius: 999px; font-size: .78rem; font-weight: 600; background: #e6f4ea; color: #0b5d26; vertical-align: middle; }
.privacy-badge.online { background: #fff4e0; color: #7a4a00; }
.ftp-ad { display: block; margin: 28px 0; clear: both; }
.ftp-ad[hidden] { display: none; }
.ftp-ad-label { display: block; margin-bottom: 4px; font-size: .7rem; letter-spacing: .06em; text-transform: uppercase; color: #6b7c88; }
/* Reserved space = the tallest common creative for each format, so a fill does not push content. */
.ftp-ad-unit { display: block; width: 100%; min-height: 280px; }
/* Rail beside the tool: rectangle formats (250×250, 300×250, 336×280). It uses the aside's full width
   (290px desktop, 250px at 761–1000px, full width when stacked); never clipped. */
.tool-aside .ftp-ad { margin-inline: -22px; }
/* Blocked/unfilled slots collapse only when off-screen (shell.js decides), so they never shift visible content. */
.ftp-ad-collapsed { display: none; }
.ftp-ad-empty .ftp-ad-label { visibility: hidden; }
.ftp-privacy-choices { background: none; border: 0; padding: 0; font: inherit; color: inherit; text-decoration: underline; cursor: pointer; }
.tool-card.network .tool-symbol { color: #8a4b08; background: #fdf1e3; }
.category-card.network { border-color: #b8742a; }
.prose { max-width: 760px; }
.prose h2 { margin-top: 28px; }
.held-list li { margin-bottom: 6px; }
