/* GENERATED by migration/gen_v2.py write_v2_core_assets() (from v2_css()). Do not hand-edit - edit v2_css() in gen_v2.py and regenerate. */
.v2-flag{position:fixed;right:18px;bottom:18px;z-index:60;border:1px solid var(--line);background:rgba(20,25,27,.86);backdrop-filter:blur(12px);border-radius:999px;padding:.55rem .9rem;font-family:'Space Grotesk';font-size:.78rem;color:#dce5e1}
.v2-note{background:linear-gradient(135deg,rgba(236,45,62,.10),rgba(47,116,240,.07));border:1px solid var(--line);border-left:3px solid var(--orange);border-radius:14px;padding:16px 18px;color:#cfd8d4}
.v2-conversionhero{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:radial-gradient(circle at 14% 12%,rgba(236,45,62,.18),transparent 34%),radial-gradient(circle at 88% 6%,rgba(47,116,240,.16),transparent 34%),linear-gradient(180deg,var(--surface),var(--surface2));padding:18px;margin:0 0 18px}
.v2-conversionhero:after{content:"";position:absolute;inset:auto -10% 0 -10%;height:1px;background:linear-gradient(90deg,transparent,var(--orange),#2f74f0,transparent);opacity:.8;animation:driverSweep 3.6s ease-in-out infinite}
.v2-decisionbar{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;border:1px solid var(--line);border-radius:16px;padding:14px;background:rgba(255,255,255,.025);margin:14px 0}
.v2-decisionbar b{font-family:'Space Grotesk';color:#fff}.v2-decisionbar span{display:block;color:var(--muted);font-size:.86rem;margin-top:2px}
.mbar.mbar-buy{align-items:center;gap:12px;padding:9px 12px}
.mbar.mbar-buy .mb-i{flex:1;min-width:0}
.mbar.mbar-buy .mb-i b{display:block;font:800 1.02rem 'Space Grotesk','Grotesk Fallback',sans-serif;color:#fff;line-height:1.12}
.mbar.mbar-buy .mb-i em{display:block;font-style:normal;font-size:.72rem;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mbar.mbar-buy .mb-meter{height:3px;border-radius:99px;background:rgba(255,255,255,.13);margin-top:6px;overflow:hidden}
.mbar.mbar-buy .mb-meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--orange),#2fd3a3);transition:width .35s ease}
.mbar.mbar-buy .mb-add{flex:0 0 auto;border:none;border-radius:999px;padding:.85em 1.5em;font:800 .95rem 'Space Grotesk','Grotesk Fallback',sans-serif;background:linear-gradient(135deg,var(--orange),var(--orange2));color:#160a02;cursor:pointer}
@media(prefers-reduced-motion:reduce){.mbar.mbar-buy .mb-meter i{transition:none}}
.v2-meter{height:9px;border-radius:999px;background:rgba(255,255,255,.08);overflow:hidden;border:1px solid rgba(255,255,255,.07);margin-top:10px}.v2-meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--orange),#2f74f0);box-shadow:0 0 24px rgba(236,45,62,.38);transition:width .35s ease}
.v2-drivergrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:16px 0}.v2-drivergrid.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.v2-driver{position:relative;overflow:hidden;text-align:left;border:1px solid var(--line);border-radius:16px;background:linear-gradient(180deg,var(--surface),var(--surface2));padding:15px;color:var(--text);cursor:pointer;transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease}
.v2-driver:hover,.v2-driver.is-on{transform:translateY(-2px);border-color:rgba(236,45,62,.72);box-shadow:0 0 0 1px rgba(236,45,62,.24) inset,0 16px 42px rgba(236,45,62,.09)}
.v2-driver.is-on:after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,var(--orange),#2f74f0);animation:driverSweep 1.8s ease-in-out infinite}
.v2-driver .k{font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;color:var(--orange);font-family:'Space Grotesk';font-weight:800}.v2-driver h3{font-size:1rem;margin:.28rem 0}.v2-driver p{color:var(--muted);font-size:.84rem;line-height:1.38;margin:0 0 .75rem}.v2-driver .money{font-family:'Space Grotesk';font-weight:800;color:#fff}.v2-driver .minirow{display:flex;justify-content:space-between;gap:10px;align-items:center}
.v2-apply{border:1px solid var(--line);background:rgba(255,255,255,.04);color:#fff;border-radius:999px;padding:.48rem .72rem;font-family:'Space Grotesk';font-weight:800;cursor:pointer;white-space:nowrap}.v2-apply:hover,.v2-apply.is-on{background:linear-gradient(135deg,var(--orange),var(--orange2));border-color:transparent;color:#150608}
.v2-included{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:rgba(47,211,163,.16);border:1px solid rgba(47,211,163,.45);color:var(--teal,#2fd3a3);font-weight:800;font-size:.85rem;flex:none}
.v2-service-mark{width:76px;height:92px;border:1px solid var(--line);border-radius:14px;display:grid;place-items:center;text-align:center;background:radial-gradient(circle at 50% 24%,rgba(47,116,240,.18),transparent 62%),linear-gradient(180deg,var(--surface),var(--surface2));font-family:'Space Grotesk';font-size:.7rem;letter-spacing:.08em;color:#fff;text-transform:uppercase}
.v2-summary .v2-subhead{font-family:'Space Grotesk';font-weight:800;color:#fff;margin:18px 0 8px}.v2-sumrow.credit b{color:#56d364}.v2-sumrow.soft{font-size:.92rem;color:var(--muted)}
.v2-summary .v2-drivergrid{grid-template-columns:1fr;gap:10px}.v2-summary .v2-driver{padding:13px}.v2-summary .v2-driver .minirow{flex-wrap:wrap}.v2-summary .v2-driver h3{font-size:.98rem}.v2-summary .v2-driver p{font-size:.82rem}.v2-summary .v2-apply{max-width:100%}
.v2-reward{position:fixed;left:50%;bottom:24px;z-index:90;transform:translate(-50%,18px) scale(.98);opacity:0;pointer-events:none;border:1px solid rgba(236,45,62,.52);border-radius:999px;background:rgba(20,25,27,.9);backdrop-filter:blur(14px);box-shadow:0 18px 60px rgba(236,45,62,.2);padding:.7rem 1rem;font-family:'Space Grotesk';font-weight:800;color:#fff}
.v2-reward.show{animation:rewardPop 2.3s ease both}
.br-perk-cta{position:fixed;right:18px;bottom:18px;z-index:80;max-width:290px;border:1px solid rgba(236,45,62,.45);border-radius:16px;background:rgba(16,19,22,.92);backdrop-filter:blur(14px);box-shadow:0 18px 50px rgba(0,0,0,.35);padding:14px 16px;font-family:Inter,sans-serif;color:#fff;transform:translateY(14px);opacity:0;transition:transform .3s ease,opacity .3s ease;pointer-events:none}
.br-perk-cta.show{transform:translateY(0);opacity:1;pointer-events:auto}
.br-perk-cta .k{font-family:'Space Grotesk';font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--orange);font-weight:800}
.br-perk-cta .perk-h{font-family:'Space Grotesk';font-size:.98rem;margin:.3rem 0 .3rem;color:#fff;font-weight:700}
.br-perk-cta p{font-size:.82rem;color:var(--muted);margin:0 0 .7rem;line-height:1.35}
.br-perk-cta .row{display:flex;gap:8px;align-items:center}
.br-perk-cta a.go{flex:1;text-align:center;background:linear-gradient(135deg,var(--orange),var(--orange2));color:#180704;font-family:'Space Grotesk';font-weight:800;font-size:.85rem;padding:.5rem .7rem;border-radius:999px;text-decoration:none}
.br-perk-cta button.x{border:none;background:transparent;color:var(--muted);font-size:1.1rem;cursor:pointer;line-height:1;padding:.3rem}
@media(max-width:560px){.br-perk-cta{right:10px;left:10px;max-width:none;bottom:10px}}
.v2-checkmain{display:grid;gap:16px}.v2-formcard{background:linear-gradient(180deg,var(--surface),var(--surface2));border:1px solid var(--line);border-radius:18px;padding:24px}
.v2-codebox{display:flex;gap:10px;align-items:center;justify-content:space-between;border:1px dashed rgba(236,45,62,.45);border-radius:14px;background:rgba(236,45,62,.055);padding:13px 14px;margin:12px 0}
@keyframes driverSweep{0%,100%{opacity:.45;transform:translateX(-12%)}50%{opacity:1;transform:translateX(12%)}}@keyframes rewardPop{0%{opacity:0;transform:translate(-50%,18px) scale(.96)}16%,78%{opacity:1;transform:translate(-50%,0) scale(1)}100%{opacity:0;transform:translate(-50%,-10px) scale(.98)}}
.v2-cardcopy{color:var(--muted);font-size:.84rem;margin:.1rem 0 .15rem}
.v2-mini{font-size:.82rem;color:var(--muted)}
.vial-scene{--vial-accent:#ec2d3e;position:relative;display:grid;place-items:center;width:154px;height:166px;isolation:isolate}
.vial-card{width:158px;height:168px}.vial-pdp{width:min(360px,78vw);height:390px}.vial-mini{width:76px;height:92px}
.vial-halo{position:absolute;inset:6%;border-radius:50%;background:radial-gradient(circle, color-mix(in srgb,var(--vial-accent) 34%, transparent), transparent 66%);filter:blur(18px);opacity:.68;animation:vialPulse 3.9s ease-in-out infinite}
.vial-shadow{position:absolute;left:50%;bottom:7%;width:54%;height:9%;transform:translateX(-50%);border-radius:50%;background:rgba(0,0,0,.42);filter:blur(7px);animation:vialShadow 4.4s ease-in-out infinite}
.vial-body{position:relative;width:48%;height:76%;transform-origin:50% 80%;animation:vialFloat 4.4s ease-in-out infinite;z-index:2}
.vial-pdp .vial-body{width:38%;height:78%}.vial-mini .vial-body{width:54%;height:82%}
.vial-cap{position:absolute;left:18%;right:18%;top:0;height:13%;border-radius:8px 8px 4px 4px;background:linear-gradient(90deg,#8e9695,#e2e7e2 48%,#87908d);border:1px solid rgba(255,255,255,.28);box-shadow:0 4px 14px rgba(0,0,0,.36);overflow:hidden}
.vial-cap i{position:absolute;top:0;bottom:0;width:1px;background:rgba(0,0,0,.22)}.vial-cap i:nth-child(1){left:28%}.vial-cap i:nth-child(2){left:50%}.vial-cap i:nth-child(3){left:72%}
.vial-glass{position:absolute;left:0;right:0;top:11%;bottom:0;border-radius:20px 20px 26px 26px;background:linear-gradient(90deg,rgba(255,255,255,.12),rgba(255,255,255,.36) 36%,rgba(255,255,255,.11) 62%,rgba(255,255,255,.04));border:1px solid rgba(255,255,255,.34);box-shadow:inset 11px 0 18px rgba(255,255,255,.09),inset -10px 0 20px rgba(0,0,0,.24),0 18px 38px rgba(0,0,0,.42);overflow:hidden}
.vial-glass:before{content:"";position:absolute;left:12%;right:12%;top:8%;height:16%;border-radius:50%;background:linear-gradient(90deg,rgba(255,255,255,.18),rgba(255,255,255,.42),rgba(255,255,255,.08));opacity:.72}
.vial-fill{position:absolute;left:9%;right:9%;bottom:7%;height:47%;border-radius:13px 13px 20px 20px;background:linear-gradient(180deg,color-mix(in srgb,var(--vial-accent) 80%,#fff 20%),var(--vial-accent));box-shadow:inset 0 12px 22px rgba(255,255,255,.16),inset 0 -14px 20px rgba(0,0,0,.18);animation:vialFill 5.2s ease-in-out infinite}
.vial-fill:before{content:"";position:absolute;left:-10%;right:-10%;top:-9px;height:18px;border-radius:50%;background:linear-gradient(90deg,rgba(255,255,255,.25),rgba(255,255,255,.52),rgba(255,255,255,.12));animation:vialWave 3.4s ease-in-out infinite}
.vial-fill i{position:absolute;border-radius:50%;background:rgba(255,255,255,.26);animation:vialBubble 3.6s linear infinite}.vial-fill i:nth-child(1){width:6px;height:6px;left:30%;bottom:16%;animation-delay:-.8s}.vial-fill i:nth-child(2){width:4px;height:4px;right:28%;bottom:28%;animation-delay:-2.1s}
.vial-bubbles i{position:absolute;border-radius:50%;background:rgba(255,255,255,.24);bottom:25%;animation:vialBubble 4.1s linear infinite}.vial-bubbles i:nth-child(1){width:5px;height:5px;left:32%;animation-delay:-1.2s}.vial-bubbles i:nth-child(2){width:3px;height:3px;left:52%;animation-delay:-2.8s}.vial-bubbles i:nth-child(3){width:4px;height:4px;right:25%;animation-delay:-.4s}
.vial-label{position:absolute;left:14%;right:14%;top:36%;min-height:28%;border-radius:10px;background:linear-gradient(180deg,rgba(20,25,27,.82),rgba(20,25,27,.62));border:1px solid rgba(255,255,255,.22);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:6px 4px;box-shadow:0 6px 18px rgba(0,0,0,.22)}
.vial-label b{font-family:'Space Grotesk';font-size:clamp(8px,1.1vw,11px);letter-spacing:.04em;color:#fff;line-height:1}.vial-label span{font-size:clamp(7px,1vw,10px);color:#dce5e1;line-height:1.05;margin-top:3px;max-width:100%;overflow:hidden;text-overflow:ellipsis}.vial-label small{font-family:'Space Grotesk';font-size:8px;color:var(--vial-accent);letter-spacing:.12em;margin-top:4px}
.vial-shine{position:absolute;inset:-20% 40% -20% 8%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.28),transparent);transform:translateX(-140%) rotate(10deg);animation:vialShine 4.8s ease-in-out infinite}
.vial-mini .vial-label span{display:none}.vial-mini .vial-label b{font-size:7px}.vial-mini .vial-label small{font-size:6px;margin-top:2px}.vial-mini .vial-halo{filter:blur(10px)}
.research-backing{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(255,255,255,.018),rgba(236,45,62,.025));padding:34px 0}
.backing-grid{display:grid;grid-template-columns:.95fr 1.45fr;gap:24px;align-items:center}.backing-copy h2{font-size:clamp(1.45rem,3vw,2.25rem);margin:.25rem 0 .55rem}.backing-copy p{color:var(--muted);max-width:54ch}.backing-checks{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.backing-check{border:1px solid var(--line);background:linear-gradient(180deg,var(--surface),var(--surface2));border-radius:14px;padding:16px}.backing-check b{display:block;font-family:'Space Grotesk';color:#fff;font-size:.98rem}.backing-check span{display:block;color:var(--muted);font-size:.84rem;margin-top:5px}
@keyframes vialFloat{0%,100%{transform:translateY(0) rotate(-1.5deg)}50%{transform:translateY(-9px) rotate(1.5deg)}}@keyframes vialShadow{0%,100%{opacity:.44;transform:translateX(-50%) scale(1)}50%{opacity:.24;transform:translateX(-50%) scale(.82)}}@keyframes vialPulse{0%,100%{opacity:.58;transform:scale(.96)}50%{opacity:.86;transform:scale(1.06)}}@keyframes vialFill{0%,100%{height:45%}50%{height:50%}}@keyframes vialWave{0%,100%{transform:translateX(-3px) rotate(-2deg)}50%{transform:translateX(3px) rotate(2deg)}}@keyframes vialBubble{0%{transform:translateY(18px) scale(.7);opacity:0}18%{opacity:.65}100%{transform:translateY(-70px) scale(1.15);opacity:0}}@keyframes vialShine{0%,52%{transform:translateX(-150%) rotate(10deg)}72%,100%{transform:translateX(230%) rotate(10deg)}}
.v2-tools{display:grid;grid-template-columns:minmax(220px,1fr) 180px;gap:12px;margin-bottom:18px}
.v2-search{background:var(--surface);border:1px solid var(--line);border-radius:10px;color:var(--text);padding:.62rem .8rem;min-height:42px;width:100%}
.v2-count{font-family:'Space Grotesk';color:#fff}
/* P4-2 (2026-08-14): mobile-only mega-menu-style filter trigger, mirrors the shop page's .filter-h
   Space Grotesk button styling already used elsewhere on this page. Hidden on desktop, where the
   filters sidebar is already visible inline and this button would be redundant. .v2-toolsrow is
   display:contents on desktop so it never affects the existing 2-column .v2-tools grid there -
   only on mobile does it become a real flex row pairing the toggle with the sort select. */
.filter-toggle{display:none;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:10px;padding:.62rem .9rem;min-height:42px;font:600 .86rem 'Space Grotesk','Grotesk Fallback',sans-serif;cursor:pointer;white-space:nowrap}
.filter-toggle:hover,.filter-toggle[aria-expanded="true"]{border-color:var(--orange);color:#fff}
.v2-toolsrow{display:contents}
.v2-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:10px;margin:14px 0 18px}
.v2opt{cursor:pointer;text-align:left;background:linear-gradient(180deg,var(--surface),var(--surface2));border:1px solid var(--line);border-radius:14px;padding:12px 13px;color:var(--text);transition:.16s}
.v2opt:hover,.v2opt.sel{border-color:rgba(236,45,62,.78);box-shadow:0 0 0 1px rgba(236,45,62,.35) inset}
.v2opt-badge{display:block;font-size:.68rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;margin-top:3px}
.v2opt-oos{cursor:not-allowed;opacity:.5}
.v2opt-oos:hover{border-color:var(--line);box-shadow:none}
.v2opt-oos .v2opt-badge{color:#ff7a55}
.v2opt-bo .v2opt-badge{color:#f0b429}
.v2opt b{display:block;font-family:'Space Grotesk';font-size:1rem}.v2opt span{display:block;color:var(--muted);font-size:.85rem}
.v2-pdpmeta{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0}
.v2-pdpmeta .card{padding:16px}.v2-pdpmeta b{display:block;color:#fff}.v2-pdpmeta span{font-size:.8rem;color:var(--muted)}
.v2-cartlayout,.v2-checklayout{display:grid;grid-template-columns:1fr 360px;gap:32px;align-items:start}
.v2-summary{background:linear-gradient(180deg,var(--surface),var(--surface2));border:1px solid var(--line);border-radius:18px;padding:24px;position:sticky;top:90px}
.v2-line{display:grid;grid-template-columns:76px minmax(0,1fr) auto;gap:16px;align-items:center;background:linear-gradient(180deg,var(--surface),var(--surface2));border:1px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:12px}
.v2-line .vial-scene{background:radial-gradient(circle at 50% 35%,rgba(236,45,62,.10),transparent 65%);border:1px solid var(--line);border-radius:12px}
.v2-line h3{font-size:1.02rem;margin-bottom:.15rem}.v2-line .v2-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.v2-remove{background:none;border:none;color:var(--muted);cursor:pointer;font-family:'Space Grotesk';font-weight:700;display:inline-flex;align-items:center;padding:11px 6px;min-height:40px}.v2-remove:hover{color:var(--orange)}
.v2-empty{text-align:center;border:1px dashed var(--line);border-radius:16px;padding:34px;color:var(--muted)}
.v2-sumrow{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);padding:.58rem 0;color:#d3ddda}.v2-sumrow.total{border-bottom:0;font-family:'Space Grotesk';font-size:1.28rem;color:#fff}
.v2-formgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.v2-field{margin-bottom:14px}.v2-field label{display:block;font-size:.82rem;color:var(--muted);margin-bottom:6px}.v2-field input,.v2-field select,.v2-field textarea{width:100%;background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:12px 14px;color:var(--text);font:15px Inter}.v2-field input:focus,.v2-field select:focus,.v2-field textarea:focus{border-color:var(--orange)}
.v2-affgrid{display:grid;grid-template-columns:1.1fr .9fr;gap:22px}.v2-statgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.v2-stat{background:linear-gradient(180deg,var(--surface),var(--surface2));border:1px solid var(--line);border-radius:16px;padding:18px}.v2-stat b{display:block;font-family:'Space Grotesk';font-size:1.55rem;color:#fff}.v2-stat span{color:var(--muted);font-size:.84rem}
.v2-qr{width:148px;height:148px;border-radius:14px;background:#fff;display:grid;grid-template-columns:repeat(7,1fr);gap:4px;padding:12px;margin:10px auto}.v2-qr i{background:#111}.v2-qr i:nth-child(3n){opacity:.18}.v2-qr i:nth-child(5n){opacity:.42}
.v2-result{background:linear-gradient(135deg,rgba(47,116,240,.12),rgba(236,45,62,.08));border:1px solid var(--line);border-radius:14px;padding:16px;margin-top:12px}.v2-result .r{display:flex;justify-content:space-between;gap:12px;padding:.28rem 0;color:#d5dedb}.v2-result b{color:#fff}
.v2-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.v2-tab{border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:999px;padding:.6rem .9rem;font-family:'Space Grotesk';font-weight:700;cursor:pointer}.v2-tab.sel{background:linear-gradient(135deg,var(--orange),var(--orange2));color:#180704;border-color:transparent}
/* PDP tabs (2026-08-21): Overview/Product Details/Research/FAQ/Related on the product page,
   reusing the existing .v2-tabs/.v2-tab pill styling above rather than inventing a second look.
   .v2-tabpanel is hidden by default and shown only via [hidden] removal in initPdpTabs() - using
   the native hidden attribute (not a class toggle) means content is still in the DOM for SEO/AEO
   crawlers and has no flash-of-all-panels before JS runs (nav-less/no-JS fallback: every panel's
   heading stays visible via noscript styling below, so content is never fully lost without JS). */
.v2-tabnav{position:sticky;top:90px;z-index:5;background:var(--bg);padding:10px 0}
.v2-tabpanel{padding-top:6px}
.v2-tabpanel[hidden]{display:none}
.v2-tab[aria-selected="true"]{background:linear-gradient(135deg,var(--orange),var(--orange2));color:#180704;border-color:transparent}
.pdp-vendor-note{font-size:.82rem;color:var(--muted);border-left:3px solid var(--line);padding-left:12px;margin-bottom:16px}
.pdp-vendor-block{border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin-bottom:14px;background:var(--surface)}
.pdp-vendor-block h4{margin:0 0 .5rem;font-family:'Space Grotesk'}
.pdp-faq-item{border-bottom:1px solid var(--line);padding:14px 0}
.pdp-faq-item:last-child{border-bottom:none}
.pdp-faq-item h4{margin:0 0 .4rem;font-size:1rem}
noscript .v2-tabpanel{display:block!important}
@media(max-width:640px){.v2-tabnav{position:static}.v2-tabs{gap:6px}.v2-tab{padding:.5rem .75rem;font-size:.86rem}}
.hero-fx{min-height:calc(100svh - 74px)!important;padding:clamp(52px,7vh,78px) 20px}
.hero-fx .eyebrow,.hero-fx h1,.hero-fx .sub,.hero-fx .cta-row,.hero-fx .trust{opacity:1;animation:none}
.hero-fx .trust{display:none}
.hero-fx .hero-stats,.hero-fx .hero-cue{display:none!important}
.hero-bigmark{opacity:1;clip-path:none;-webkit-clip-path:none}
/* ---- mobile hardening: stop CSS-grid children from blowing past the viewport (grid items default to min-width:auto, so long content forces the track wider than the screen). Applies to every v2 grid layout. ---- */
.v2-cartlayout,.v2-checklayout,.v2-affgrid,.v2-drivergrid,.v2-statgrid,.v2-formgrid,.v2-pdpmeta,.backing-grid,.v2-decisionbar,.v2-line{min-width:0}
.v2-cartlayout>*,.v2-checklayout>*,.v2-affgrid>*,.v2-drivergrid>*,.v2-statgrid>*,.v2-formgrid>*,.v2-pdpmeta>*,.backing-grid>*,.v2-decisionbar>*,.v2-line>*{min-width:0}
.v2-cartlayout main,.v2-checklayout main,.v2-summary{min-width:0;max-width:100%}
.v2-driver p,.v2-driver h3,.v2-decisionbar b,.v2-decisionbar span{overflow-wrap:anywhere;word-break:break-word}
.v2-decisionbar .money,.v2-driver .money{white-space:normal}
.v2-codebox b,.v2-result .r b,.v2-sumrow{overflow-wrap:anywhere}
@media(max-width:900px){.v2-tools,.v2-cartlayout,.v2-checklayout,.v2-affgrid,.backing-grid,.v2-drivergrid,.v2-drivergrid.two{grid-template-columns:1fr}.v2-summary{position:static}.v2-pdpmeta{grid-template-columns:1fr}.v2-statgrid{grid-template-columns:1fr 1fr}}
/* P4-2 (2026-08-14, Merv's repeated complaint about the shop page on mobile, Geoff agreed):
   land near the actual vials, not behind a full-viewport-height hero plus an always-open filters
   sidebar. The shop hero collapses to a short strip (headline only - subtitle and the two CTA
   buttons are redundant once the catalog is one short scroll away and reachable from the nav's
   own "Research Finder" link). .shopmain (search+sort+products) is pulled ABOVE .filters in
   visual order via CSS grid `order` even though .filters stays first in DOM/source order (a
   screen reader or no-JS visitor still meets filters before the grid reorders anything visually -
   this is presentation-only). Filters itself becomes a closed panel by default, opened by the
   .filter-toggle button placed next to sort; .open is added/removed by initShop() in v2_script(). */
@media(max-width:900px){
  .shop-hero{min-height:0!important;padding:20px 0 14px!important}
  .shop-hero .sub,.shop-hero .cta-row{display:none}
  .shop-hero h1{font-size:1.5rem!important;margin:.15rem 0 0;letter-spacing:-.01em}
  /* app.js injects a .hero-stats row (54/82/USA) into EVERY .pagehero via shared runtime JS -
     not something this generator emits, so it cannot be dropped from the template; hidden here
     the same way .hero-fx already hides it, scoped to .shop-hero only. */
  .shop-hero .hero-stats{display:none!important}
  .shoplayout{row-gap:0}
  .shoplayout .shopmain{order:1}
  .shoplayout .filters{display:none}
  /* The mega-menu itself: fixed so it drops in near the TOP of whatever the shopper is currently
     looking at (wherever they scrolled to when they tapped the toggle), not wherever `.filters`
     would otherwise sit in document flow - a plain in-flow reveal would open 50+ product cards
     below the toggle, off-screen, which defeats the entire point of a quick filter check. */
  .shoplayout .filters.open{display:block;position:fixed;left:12px;right:12px;top:14px;max-height:calc(100vh - 28px);overflow-y:auto;z-index:70;box-shadow:0 24px 70px rgba(0,0,0,.55)}
  .filter-toggle{display:inline-flex}
  .v2-toolsrow{display:flex;gap:8px}
  .v2-toolsrow .select{flex:1;min-width:0}
}
@media(max-width:640px){.backing-checks{grid-template-columns:1fr}.hero-fx{min-height:calc(100svh - 62px)!important;padding-top:38px;padding-bottom:38px}.v2-decisionbar{grid-template-columns:1fr}.v2-codebox{align-items:flex-start;flex-direction:column}.v2-reward{width:calc(100% - 32px);text-align:center}}
@media(max-width:560px){.v2-formgrid,.v2-statgrid{grid-template-columns:1fr}.v2-line{grid-template-columns:62px 1fr}.v2-line .vial-scene,.v2-service-mark{width:62px;height:78px}.v2-line .v2-actions{grid-column:1/-1;justify-content:space-between}}
@media(prefers-reduced-motion:reduce){.vial-halo,.vial-shadow,.vial-body,.vial-fill,.vial-fill:before,.vial-fill i,.vial-bubbles i,.vial-shine,.v2-conversionhero:after,.v2-driver.is-on:after,.v2-reward.show{animation:none}}
/* ---- Subscribe & Save (recurring resupply) shared styles ---- */
.subs-buy{display:flex;align-items:center;gap:12px;background:var(--surface);border:1.5px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:9px;cursor:pointer}
.subs-buy.sel{border-color:#2fd3a3;background:rgba(47,211,163,.07)}
.subs-buy input{accent-color:#2fd3a3;margin-top:2px;flex:none}
.subs-buy-main{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.subs-buy-main b{color:#fff}.subs-buy-main small{color:var(--muted);font-size:.82rem}
.subs-save{flex:none;background:linear-gradient(135deg,#2fd3a3,#26b48a);color:#04221a;font:700 .72rem 'Space Grotesk';letter-spacing:.03em;padding:.3rem .6rem;border-radius:999px;white-space:nowrap}
.subs-detail{margin:2px 0 0;padding:14px;border:1px dashed var(--line);border-radius:12px;background:rgba(47,211,163,.04)}
.subs-int{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px}
.subs-int-lbl{color:var(--muted);font-size:.85rem;font-weight:600}
.subs-int-btns{display:flex;gap:7px;flex-wrap:wrap}
.subs-int-btn{border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:999px;padding:.42rem .8rem;font:600 .82rem Inter;cursor:pointer}
.subs-int-btn.sel{background:linear-gradient(135deg,#2fd3a3,#26b48a);color:#04221a;border-color:transparent}
.subs-soon-h{font:700 .95rem 'Space Grotesk';color:#2fd3a3;margin:0 0 4px}
.subs-soon-p{color:var(--muted);font-size:.86rem;margin:0 0 10px}
.subs-soon-form{display:flex;gap:8px;flex-wrap:wrap}
.subs-soon-form input{flex:1;min-width:200px;background:var(--surface,#13161a);border:1px solid var(--line,#2a2a2a);border-radius:10px;padding:.6rem .7rem;color:var(--text,#fff);font:14px Inter}
.subs-pass-wrap{flex-basis:100%;display:flex;flex-direction:column;gap:4px}
.subs-pass-wrap[hidden]{display:none}
.subs-pass-note{color:var(--muted);font-size:.82rem;margin:0}
.subs-soon-msg{min-height:1rem;margin:.5rem 0 0;font-weight:600;font-size:.86rem}
.subs-soon-msg.ok{color:#2fd3a3}.subs-soon-msg.err{color:#ff7a55}
.subs-card{background:var(--surface);border:1px solid rgba(47,211,163,.4);border-radius:14px;padding:18px 20px;text-align:left}
.subs-card .subs-save{display:inline-block;margin-bottom:8px}
/* ---- Community & research context (2026-08-10): a real, source-grounded citation section
   sits directly under "About this compound" on 26 product pages now, both built from the same
   .prose+.eyebrow+h2 pattern with no visual break between them - reads as one long wall of text
   at the new content length. .v2-landscape gives the second section its own quieter identity
   (a top divider, a blue accent instead of the orange "About this compound" band, a smaller
   subhead so it reads as supplementary evidence rather than a second headline claim). .v2-citebox
   separates the compliance disclaimer + Melanotan-I-style caveat from the citation list itself
   into a bordered aside, and .v2-citelist renders each citation as its own numbered reference
   card instead of a plain bullet, so long author/journal/DOI strings read as citations, not
   narrative prose. overflow-wrap:anywhere on the card guards the same DOI-URL mobile overflow
   risk the .prose li default did not cover. ---- */
.v2-landscape{border-top:1px solid var(--line);padding-top:30px;margin-top:8px;background:linear-gradient(180deg,rgba(47,116,240,.04),rgba(47,116,240,0) 260px)}
.v2-landscape .eyebrow{color:#5b9dff}
.v2-landscape h2{font-size:1.32rem;margin-top:.6rem}
.v2-citebox{background:rgba(47,116,240,.05);border:1px solid var(--line);border-left:3px solid #2f74f0;border-radius:14px;padding:14px 16px;margin-top:14px}
.v2-citebox .fine{margin:0}
.v2-citebox p+p{margin-top:10px}
.v2-caveat{margin:10px 0 0;padding-top:10px;border-top:1px dashed var(--line);color:#cdd6d2;font-size:.92rem;line-height:1.6}
.v2-citelist{list-style:none;counter-reset:v2cite;margin:16px 0 0;padding:0;display:grid;gap:10px}
.v2-citelist li{counter-increment:v2cite;position:relative;padding:11px 14px 11px 42px;background:linear-gradient(180deg,var(--surface),var(--surface2));border:1px solid var(--line);border-radius:10px;font-size:.87rem;line-height:1.55;color:#cdd6d2;overflow-wrap:anywhere}
.v2-citelist li:before{content:counter(v2cite);position:absolute;left:13px;top:11px;font-family:'Space Grotesk';font-weight:800;font-size:.78rem;color:#5b9dff}
@media(max-width:640px){.v2-landscape{padding-top:24px}}
