.site-bio-links[data-link-style="outline"] .site-bio-links__item{background:transparent!important;border:2px solid var(--accent,#155eef)!important;box-shadow:none!important}.site-bio-links[data-link-style="minimal"] .site-bio-links__item{min-height:48px!important;padding:10px 4px!important;border:0!important;border-bottom:1px solid color-mix(in srgb,var(--ink,#102748) 16%,transparent)!important;border-radius:0!important;background:transparent!important;box-shadow:none!important}.site-bio-links[data-link-style="minimal"] .site-bio-links__cta{display:none}.site-bio-links[data-link-style="pill"] .site-bio-links__item{justify-content:center!important;min-height:52px!important;border:0!important;border-radius:999px!important;background:var(--accent,#155eef)!important;color:#fff!important;box-shadow:0 6px 18px rgba(16,39,72,.12)!important;text-align:center!important}.site-bio-links[data-link-style="pill"] .site-bio-links__cta{color:inherit}.site-bio-links .site-bio-links__list--grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px!important}.site-bio-links .site-bio-links__list--grid .site-bio-links__item{justify-content:center!important;min-height:76px!important;text-align:center!important}@media(max-width:480px){.site-bio-links .site-bio-links__list--grid{grid-template-columns:minmax(0,1fr)!important}}
/* === DARK THEME RESTORE + MOBILE UI PASS (Brandon, 2026-10-29) === */
html[data-site-theme="1"]{--ink:#ffffff!important;--text:#ffffff!important;--text-color:#ffffff!important;--foreground:#ffffff!important;--surface:#132A47!important;--brand:#93EA74!important;--brand-color:#93EA74!important;--primary:#93EA74!important;--primary-color:#93EA74!important;--color-primary:#93EA74!important;--brand-contrast:#0A162B!important;--accent:#93EA74!important;--accent-color:#93EA74!important;--accent-contrast:#0A162B!important;--muted:#A9B8D0!important;--text-muted:#A9B8D0!important;--line:rgba(255,255,255,.18)!important;--border:rgba(255,255,255,.18)!important;--border-color:rgba(255,255,255,.18)!important;--focus:#93EA74!important;--background:#0A162B!important;--background-color:#0A162B!important;--page-bg:#0A162B!important;--pp-theme-background:#0A162B!important}
body{background-color:#0A162B!important;color:#ffffff!important}
.site-header{background:rgba(10,22,43,.94)!important}
.site-header .brand{color:#ffffff!important}
.site-header .nav-toggle{border-color:rgba(255,255,255,.35)!important;color:#ffffff!important;background:transparent!important}
.site-search-icon-link{display:inline-grid;place-items:center;width:42px;height:42px;flex:0 0 auto;border-radius:50%;border:1px solid rgba(147,234,116,.55);background:rgba(19,42,71,.65);color:#93EA74;text-decoration:none}
.site-search-icon-link svg{width:20px;height:20px;display:block}
.site-search-icon-link:hover,.site-search-icon-link:focus-visible{background:#93EA74;color:#0A162B;outline:3px solid rgba(147,234,116,.5);outline-offset:2px}
main{display:flex;flex-wrap:wrap;column-gap:14px;max-width:680px;margin-inline:auto}
main>*{flex:0 0 100%;min-width:0}
main>section[data-site-studio-block="image"]{flex:0 0 120px;padding:10px 0}
main>section[data-site-studio-block="button"]{flex:1 1 calc(100% - 134px);display:flex;align-items:center;padding:10px 0}
main>section[data-site-studio-block="image"] .container,main>section[data-site-studio-block="button"] .container{max-width:none;padding:0;margin:0}
main>section[data-site-studio-block="image"] img{border-radius:14px;display:block}
main>section[data-site-studio-block="button"] .actions{margin:0}
.site-bio-links__list--grid li{display:flex}
.site-bio-links__list--grid .site-bio-links__item{flex:1 1 auto;height:100%}
section[aria-label="Work with PocketPapi"] .site-bio-links__list--grid{grid-template-columns:minmax(0,1fr)!important}
.site-bio-links__heading{color:#ffffff!important}
.footer,.site-footer-custom{color:#A9B8D0!important}

/* === FIX-EVERYTHING PASS (Brandon, 2026-10-29) === */
/* 1 - Promo images genuinely visible: wider image column, natural aspect, no crop; stacked full-width on phones */
main>section[data-site-studio-block="image"]{flex:0 0 220px!important}
main>section[data-site-studio-block="button"]{flex:1 1 calc(100% - 234px)!important}
main>section[data-site-studio-block="image"] img{width:100%!important;height:auto!important}
@media(max-width:560px){main>section[data-site-studio-block="image"]{flex:0 0 100%!important;padding:10px 0 0!important}main>section[data-site-studio-block="button"]{flex:0 0 100%!important;padding:6px 0 10px!important}}
/* 2 - ONE button system: promo buttons match the link-grid cards (slate surface, white label, lime arrow, 16px radius, 76px min-height) */
main>section[data-site-studio-block="button"] .actions{flex:1 1 auto!important;width:100%!important;margin:0!important}
main>section[data-site-studio-block="button"] .button{display:flex!important;align-items:center;justify-content:center;gap:10px;width:100%;min-height:76px;padding:14px 18px;background:#132A47!important;color:#ffffff!important;border:1px solid rgba(255,255,255,.18)!important;border-radius:16px!important;font-weight:700;text-align:center;text-decoration:none;box-shadow:none!important}
main>section[data-site-studio-block="button"] .button::after{content:"\2197";color:#93EA74;font-weight:800;flex:0 0 auto}
main>section[data-site-studio-block="button"] .button:hover{background:#1B3A5F!important;color:#ffffff!important;border-color:rgba(147,234,116,.55)!important;filter:none!important;transform:translateY(-2px)}
/* 3 - Grid card arrows pinned mid-right at one height on every card; symmetric padding keeps labels centred */
.site-bio-links__list--grid .site-bio-links__item{position:relative!important;padding-left:34px!important;padding-right:34px!important}
.site-bio-links__list--grid .site-bio-links__cta{position:absolute!important;right:14px;top:50%;transform:translateY(-50%);color:#93EA74!important}
/* 4 - Section headings use the full column at slightly tighter type (disclosure heading wraps less; wording unchanged) */
.site-bio-links__heading{width:100%!important;font-size:clamp(1rem,2.2vw,1.15rem)!important;line-height:1.3!important}
/* 5 - Compact intro under the header */
.lib-intro{padding:22px 0 6px!important;text-align:center}
.lib-intro__brand{margin:0 0 4px!important;font-size:1.4rem;font-weight:800;letter-spacing:-.01em;color:#ffffff}
.lib-intro__tagline{margin:0!important;color:#A9B8D0;font-size:1rem}

/* === LIQUID GLASS OVERHAUL (Brandon, 2026-10-29) — iOS 27 glass, mobile-first density, promo cards, article system === */
/* Ambient glows behind the glass so translucency has something to refract */
body{background:radial-gradient(1100px 550px at 88% -8%,rgba(147,234,116,.13),rgba(147,234,116,0) 60%),radial-gradient(900px 650px at -12% 26%,rgba(64,132,228,.16),rgba(64,132,228,0) 60%),radial-gradient(820px 520px at 50% 115%,rgba(147,234,116,.07),rgba(147,234,116,0) 60%),#0A162B!important;background-color:#0A162B!important;background-attachment:fixed}
/* Floating glass header */
.site-header{background:rgba(10,22,43,.66)!important;backdrop-filter:blur(18px) saturate(1.5);-webkit-backdrop-filter:blur(18px) saturate(1.5);border-bottom:1px solid rgba(255,255,255,.13)!important;box-shadow:0 10px 34px rgba(2,8,20,.35)!important}
.site-search-icon-link{background:rgba(23,44,76,.55)!important;backdrop-filter:blur(10px) saturate(1.3);-webkit-backdrop-filter:blur(10px) saturate(1.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 6px 18px rgba(2,8,20,.3)}
/* Glass card system — one language for grid items, promo cards, upsell cards */
.site-bio-links__list--grid .site-bio-links__item,.lib-card,.lib-upsell{background:linear-gradient(165deg,rgba(255,255,255,.11),rgba(255,255,255,.028) 42%,rgba(255,255,255,0) 70%),rgba(23,44,76,.55)!important;backdrop-filter:blur(14px) saturate(1.35);-webkit-backdrop-filter:blur(14px) saturate(1.35);border:1px solid rgba(255,255,255,.16)!important;border-radius:24px!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.22),inset 0 -1px 0 rgba(0,0,0,.18),0 14px 34px rgba(2,8,20,.36)!important;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.site-bio-links__list--grid .site-bio-links__item:hover,.lib-card:hover,.lib-upsell:hover{transform:translateY(-2px);border-color:rgba(147,234,116,.5)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.26),0 20px 42px rgba(2,8,20,.44)!important}
.site-bio-links__list--grid .site-bio-links__item:active,.lib-card:active,.lib-upsell:active,.lib-buy:active{transform:scale(.982)}
.lib-card:focus-visible,.site-bio-links__list--grid .site-bio-links__item:focus-visible,.lib-buy:focus-visible,.lib-upsell:focus-visible{outline:3px solid rgba(147,234,116,.65);outline-offset:2px}
/* Promo image links become CARDS (2-col grid, image on top, label bar below) */
.lib-promo-cards{padding:8px 0 2px!important}
.lib-card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.lib-card{display:flex;flex-direction:column;overflow:hidden;text-decoration:none;color:#ffffff}
.lib-card__media{display:block;line-height:0}
.lib-card__media img{display:block;width:100%;height:auto}
.lib-card__body{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;flex:1 1 auto}
.lib-card__label{font-weight:700;line-height:1.25;font-size:.98rem}
.lib-card__arrow{color:#93EA74;font-weight:800;flex:0 0 auto}
/* Density — tighter rhythm so more links live in one view */
.lib-intro{padding:14px 0 2px!important}
.site-bio-links{padding:12px 0!important}
.site-bio-links__heading{margin-top:0!important;margin-bottom:10px!important}
.site-page-footer-navigation a{display:inline-flex;align-items:center;min-height:44px;padding:0 6px}
/* Mobile: grids stay 2-col (density), labels compact, arrows keep clear space */
@media(max-width:480px){.site-bio-links .site-bio-links__list--grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:9px!important}.site-bio-links__list--grid .site-bio-links__item{min-height:72px!important;padding-left:30px!important;padding-right:30px!important}.site-bio-links__label{font-size:.9rem;line-height:1.3}.lib-card-grid{gap:10px}.lib-card__label{font-size:.92rem}.lib-card__body{padding:10px 12px}}
/* Gentle entrance rise, staggered; honours reduced motion */
@keyframes lib-rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.lib-card,.site-bio-links__list--grid li{animation:lib-rise .45s ease both}
.lib-card:nth-child(2),.site-bio-links__list--grid li:nth-child(2){animation-delay:.05s}
.lib-card:nth-child(3),.site-bio-links__list--grid li:nth-child(3){animation-delay:.1s}
.lib-card:nth-child(4),.site-bio-links__list--grid li:nth-child(4){animation-delay:.15s}
.site-bio-links__list--grid li:nth-child(5){animation-delay:.2s}
.site-bio-links__list--grid li:nth-child(6){animation-delay:.25s}
.site-bio-links__list--grid li:nth-child(7){animation-delay:.3s}
@media (prefers-reduced-motion:reduce){.lib-card,.site-bio-links__list--grid li{animation:none!important;transition:none!important}}
/* Article system (review pages) */
.lib-article{line-height:1.68;font-size:1.02rem;padding-bottom:10px}
.lib-article h1{font-size:clamp(1.55rem,5.6vw,2.25rem);line-height:1.14;letter-spacing:-.02em;margin:.35em 0 .5em;color:#ffffff}
.lib-article h2{font-size:1.28rem;margin:1.5em 0 .5em;color:#ffffff;letter-spacing:-.01em}
.lib-article p{margin:.7em 0;color:#E7EEF8}
.lib-article a{color:#A8E88E}
.lib-eyebrow{color:#93EA74!important;font-weight:800;letter-spacing:.08em;text-transform:uppercase;font-size:.78rem;margin:10px 0 0!important}
.lib-lede{font-size:1.12rem;color:#ffffff!important}
.lib-disclosure{background:linear-gradient(165deg,rgba(255,255,255,.09),rgba(255,255,255,.02) 55%),rgba(23,44,76,.5);backdrop-filter:blur(12px) saturate(1.3);-webkit-backdrop-filter:blur(12px) saturate(1.3);border:1px solid rgba(255,255,255,.15);border-radius:18px;box-shadow:inset 0 1px 0 rgba(255,255,255,.18);padding:14px 16px;margin:14px 0;font-size:.93rem}
.lib-disclosure p{margin:0;color:#D9E4F2}
.lib-verdict{border-left:3px solid #93EA74;background:rgba(147,234,116,.07);border-radius:14px;padding:12px 16px;margin:16px 0}
.lib-verdict p{margin:0}
.lib-specs{list-style:none;padding:0;margin:.6em 0;display:grid;gap:8px}
.lib-specs li{background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.09);border-radius:14px;padding:9px 13px;color:#E7EEF8}
.lib-price{font-size:1.02rem}
.lib-price strong{color:#93EA74}
.lib-cta-wrap{margin:16px 0}
.lib-buy{display:flex;align-items:center;justify-content:center;gap:8px;min-height:54px;padding:13px 20px;border-radius:999px;background:linear-gradient(180deg,#A9F28A,#93EA74);color:#0A162B!important;font-weight:800;text-decoration:none;box-shadow:0 10px 26px rgba(147,234,116,.25),inset 0 1px 0 rgba(255,255,255,.5);transition:transform .16s ease,box-shadow .16s ease}
.lib-buy:hover{transform:translateY(-2px);box-shadow:0 14px 32px rgba(147,234,116,.32),inset 0 1px 0 rgba(255,255,255,.5)}
.lib-upsells{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:12px 0}
@media(max-width:560px){.lib-upsells{grid-template-columns:minmax(0,1fr)}}
.lib-upsell{display:flex;flex-direction:column;gap:5px;padding:14px 15px;text-decoration:none;color:#ffffff;position:relative}
.lib-upsell__title{font-weight:800;padding-right:22px;color:#ffffff}
.lib-upsell__line{color:#C4D2E6;font-size:.93rem;line-height:1.45}
.lib-upsell__arrow{position:absolute;right:13px;top:12px;color:#93EA74;font-weight:800}
.lib-backlinks{margin:18px 0 6px;color:#A9B8D0}
.lib-backlinks a{color:#93EA74}

/* === REFRAME + QC3 FIXES (2026-10-29) — sticky glass header, richer ambient, orphan shop card span, promo equal heights, real hover lift === */
/* Sticky floating glass header: stays on screen while the page blurs behind it */
.site-header{position:sticky!important;top:0;z-index:80}
/* Richer ambient field so the cards' backdrop-blur has variation to refract */
body{background:radial-gradient(1250px 720px at 86% -10%,rgba(147,234,116,.19),rgba(147,234,116,0) 62%),radial-gradient(1050px 820px at -14% 28%,rgba(64,132,228,.23),rgba(64,132,228,0) 62%),radial-gradient(880px 560px at 112% 60%,rgba(64,132,228,.14),rgba(64,132,228,0) 60%),radial-gradient(760px 540px at 8% 84%,rgba(147,234,116,.08),rgba(147,234,116,0) 60%),radial-gradient(920px 640px at 50% 118%,rgba(147,234,116,.11),rgba(147,234,116,0) 60%),#0A162B!important;background-color:#0A162B!important;background-attachment:fixed}
/* Orphan shop card spans the full grid width, like the PocketPapi card */
.site-bio-links__list--grid:has(> li:last-child > a[href="/shop.html"]) > li:last-child{grid-column:1/-1}
/* Promo cards: equal heights per row; label bars reserve two lines so row bottoms align */
.lib-card-grid{align-items:stretch}
.lib-card{height:100%}
.lib-card__label{min-height:2.5em}
/* REAL hover lift — !important so the completed entrance animation's fill-mode no longer overrides the hover/press transforms */
.site-bio-links__list--grid .site-bio-links__item:hover,.lib-card:hover,.lib-upsell:hover{transform:translateY(-3px)!important;border-color:rgba(147,234,116,.55)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.28),inset 0 -1px 0 rgba(0,0,0,.18),0 24px 48px rgba(2,8,20,.5)!important}
.site-bio-links__list--grid .site-bio-links__item:active,.lib-card:active,.lib-upsell:active{transform:scale(.982)!important}
@media (prefers-reduced-motion:reduce){.site-bio-links__list--grid .site-bio-links__item:hover,.lib-card:hover,.lib-upsell:hover{transform:none!important}}

/* === QC4 FIXES (2026-10-29) — sticky root cause, cookie button, PocketPapi span, promo lift, deeper glass === */
/* 1 - STICKY ROOT CAUSE: styles.css sets body{overflow-x:hidden}; with overflow-y computing to auto, body becomes a scroll container and confines the sticky header to its own box, so the header scrolls away despite position:sticky being present. overflow:clip creates NO scroll container (the platform shell already uses it on html), restoring true viewport stickiness. */
html,body{overflow-x:clip!important}
.site-header{position:sticky!important;top:0;z-index:80}
/* 2 - COOKIE FLOATING BUTTON: the cookie-theme token set paints .pp-cookie-consent__settings with the same accent role as the banner's accept buttons, so swapping tokens would wreck the banner. Targeted override instead: navy fill, lime icon/accent, glass edge. Banner buttons keep the lime accent role. */
body button.pp-cookie-consent__settings{background:#132A47!important;color:#93EA74!important;border-color:rgba(147,234,116,.55)!important;box-shadow:0 10px 24px rgba(2,8,20,.45),inset 0 1px 0 rgba(255,255,255,.22)!important}
body button.pp-cookie-consent__settings:hover,body button.pp-cookie-consent__settings:focus-visible{border-color:#93EA74!important;color:#A9F28A!important}
/* 3 - PocketPapi card spans the full grid width (its section's list holds this single card) */
.site-bio-links__list--grid>li:has(>a[href^="https://pocketpapi.com/affiliate/signup"]){grid-column:1/-1}
/* 4 - PROMO HOVER LIFT: unlike link cards (hover target is the <a> inside the animated <li>), the promo hover target IS the animated .lib-card, whose completed lib-rise entrance animation (fill-mode both) keeps holding transform and swallows the hover lift. Release the animation hold on hover and lift via the independent translate property, which transform animations cannot override. */
.lib-card{transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,translate .18s ease}
.lib-card:hover{animation:none!important;translate:0 -3px}
@media (prefers-reduced-motion:reduce){.lib-card{transition:none!important}.lib-card:hover{translate:none}}
/* 5 - DEEPER GLASS: card slate alpha .55 -> .40, blur 14px -> 20px, saturate 1.35 -> 1.55, so the ambient glows visibly refract through the cards. Text sits on white-on-navy either way; composite over the #0A162B base stays dark navy, so label contrast is preserved. Article disclosure panels intentionally untouched (long-form text). */
.site-bio-links__list--grid .site-bio-links__item,.lib-card,.lib-upsell{background:linear-gradient(165deg,rgba(255,255,255,.13),rgba(255,255,255,.04) 42%,rgba(255,255,255,0) 70%),rgba(23,44,76,.40)!important;backdrop-filter:blur(20px) saturate(1.55);-webkit-backdrop-filter:blur(20px) saturate(1.55)}

/* === COLLECTIONS (2026-10-29) — affiliate products as styled collection cards ===
PATTERN (reuse for every future product collection on this site): a section.lib-collection
carries a .lib-collection__head identity card (eyebrow / name / story) above its link grid;
each product is an a.lib-pcard in that grid — .site-bio-links__label keeps the product name
WITH its (paid link) disclosure, .lib-pcard__take is the one-line reviewer take, and
.lib-pcard__foot pins the stamped price (where a price is verified) + the review action to
the card bottom. A new collection = another section.lib-collection with its own modifier
class; it needs NO new CSS. The section heading keeps carrying the #ad disclosure line. */
.lib-collection__head{background:linear-gradient(165deg,rgba(255,255,255,.13),rgba(255,255,255,.04) 42%,rgba(255,255,255,0) 70%),rgba(23,44,76,.40);backdrop-filter:blur(20px) saturate(1.55);-webkit-backdrop-filter:blur(20px) saturate(1.55);border:1px solid rgba(255,255,255,.16);border-radius:24px;box-shadow:inset 0 1px 0 rgba(255,255,255,.22),inset 0 -1px 0 rgba(0,0,0,.18),0 14px 34px rgba(2,8,20,.34);padding:18px 20px 16px;margin:2px 0 10px;text-align:left;animation:lib-rise .45s ease both}
.lib-collection__eyebrow{margin:0 0 4px;font-size:.7rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#93EA74}
.lib-collection__name{margin:0;font-size:1.55rem;font-weight:800;line-height:1.15;color:#fff;letter-spacing:.01em}
.lib-collection__story{margin:7px 0 0;font-size:.93rem;line-height:1.45;color:rgba(226,236,248,.85);max-width:36em}
.lib-collection .site-bio-links__item.lib-pcard{flex-direction:column!important;align-items:stretch!important;justify-content:flex-start!important;text-align:left!important;gap:6px;padding:16px 34px 14px 16px!important;min-height:0!important}
.lib-pcard .site-bio-links__label{font-size:.95rem;line-height:1.3}
.lib-pcard__take{display:block;font-weight:400;font-size:.85rem;line-height:1.4;color:rgba(226,236,248,.82)}
.lib-pcard__foot{display:flex;flex-direction:column;gap:3px;margin-top:auto;padding-top:6px;width:100%}
.lib-pcard__price{display:block;font-size:1.02rem;font-weight:800;color:#fff}
.lib-pcard__stamp{display:block;font-size:.66rem;font-weight:400;letter-spacing:.04em;color:rgba(226,236,248,.55)}
.lib-pcard__action{display:block;font-size:.74rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#93EA74}
@media (prefers-reduced-motion:reduce){.lib-collection__head{animation:none!important}}

/* ===== DRIVE BLOCK (2026-10-29): article product block in the collection glass family.
The Samsung 870 QVO drive section inside the H500 review renders as a styled product block
(same glass recipe as .lib-collection__head) instead of loose prose, so held shop draft 291
has a full styled HTML presence while the shop layer cannot publish it without a false $0.00.
HELD-DRAFT INTERIM: drafts 288 (C460 single) + 291 (Samsung) stay held until #154 lands. */
.lib-product{background:linear-gradient(165deg,rgba(255,255,255,.13),rgba(255,255,255,.04) 42%,rgba(255,255,255,0) 70%),rgba(23,44,76,.40);backdrop-filter:blur(20px) saturate(1.55);-webkit-backdrop-filter:blur(20px) saturate(1.55);border:1px solid rgba(255,255,255,.16);border-radius:24px;box-shadow:inset 0 1px 0 rgba(255,255,255,.22),inset 0 -1px 0 rgba(0,0,0,.18),0 14px 34px rgba(2,8,20,.34);padding:20px 22px 18px;margin:22px 0}
.lib-product h2{margin-top:0}
.lib-product p:last-child{margin-bottom:0}

/* IMAGERY (2026-10-29): manufacturer product photography (tp-link.com / samsung.com
official galleries, self-hosted under assets/img/) inside the collection cards and
the review articles. Card media sits at the top of each .lib-pcard; article images
are .lib-fig figures (hero after the disclosure, details beside their sections),
with .lib-figrow two-up rows. Must ride every future import manifest. */
.lib-pcard__media{display:block;border-radius:12px;overflow:hidden;margin:0 0 10px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.05)}
.lib-pcard__media img{display:block;width:100%;height:180px;object-fit:cover}
.lib-pcard__media--contain{background:radial-gradient(120% 120% at 50% 0%,rgba(147,234,116,.16),rgba(255,255,255,.04) 62%)}
.lib-pcard__media--contain img{object-fit:contain;padding:8px 0}
.lib-fig{margin:24px 0}
.lib-fig img{display:block;width:100%;height:auto;border-radius:14px;border:1px solid rgba(255,255,255,.16)}
.lib-fig figcaption{margin-top:8px;font-size:.82rem;line-height:1.45;color:rgba(226,236,248,.62)}
.lib-figrow{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:24px 0}
.lib-figrow .lib-fig{margin:0}
.lib-figrow .lib-fig img{height:100%;object-fit:cover}
.lib-figrow--fit .lib-fig img{height:280px;object-fit:contain;background:rgba(255,255,255,.05)}
@media (max-width:560px){.lib-figrow{grid-template-columns:1fr}.lib-figrow--fit .lib-fig img{height:auto}}

/* === MOBILE PASS (2026-10-29) — phone layout for the review articles, the
Tapo Collection cards and the shop listing. Measured at 390px before this
block: article text ran edge-to-edge (the .lib-article column had no
gutters), collection cards stayed two-up at ~149px wide with product photos
cover-cropped into 95x180 slivers, and stacked figure rows inherited
height:100% (caption included) so photos were cover-cropped ~17% for no
benefit. All rules below are phone-scoped; desktop rendering is unchanged.
Must ride every future import manifest. */
@media (max-width:760px){
  .lib-article{padding-inline:18px}
}
@media (max-width:560px){
  .lib-collection .site-bio-links__list--grid{grid-template-columns:minmax(0,1fr)!important}
  .lib-pcard__media img{height:auto;aspect-ratio:16/10}
  .lib-pcard__media--contain img{height:250px;aspect-ratio:auto}
  .lib-figrow .lib-fig img{height:auto}
  .site-shop__card h2{font-size:1.3rem;line-height:1.25}
  .site-shop__card p{font-size:.95rem;line-height:1.55}
}
