/* Archivo (variable: wdth 62-125, wght 100-900), self-hosted from Google Fonts, SIL Open Font License */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 100 900;
  font-stretch: 62% 125%;
  font-display: swap;
  src: url(/assets/fonts/archivo-vietnamese.woff2) format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 100 900;
  font-stretch: 62% 125%;
  font-display: swap;
  src: url(/assets/fonts/archivo-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 100 900;
  font-stretch: 62% 125%;
  font-display: swap;
  src: url(/assets/fonts/archivo-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* Tokens */
:root{
  --page:#F3F4F6;--surface:#FFFFFF;--surface-2:#F8F9FA;--ink:#111418;--ink-2:#4B5159;--muted:#646B75;--line:#E1E4E9;--line-2:#EDEFF2;
  --bench:#1E2126;--bench-2:#2A2E35;--bench-ink:#F2F3F5;--bench-muted:#9AA0A8;--bench-line:rgba(255,255,255,.08);
  --signal:#F5B301;--signal-ink:#2A1F00;--signal-text:#B07800;--warn-text:#9A6700;--bad-text:#B42318;--ok:#14783F;--warn:#D9880B;--bad:#D6453D;
  --r-lg:24px;--r-md:14px;--r-sm:8px;--font:"Archivo",system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans","Hiragino Sans","Apple SD Gothic Neo",sans-serif;
  --wide:112%;--narrow:84%;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--page:#141619;--signal-text:#F5B301;--warn-text:#F5B301;--bad-text:#FF6B6B;--ok:#3CCF7A;--surface:#1C1F24;--surface-2:#202329;--ink:#F2F3F5;--ink-2:#C3C7CE;--muted:#8A919C;--line:#2A2E35;--line-2:#24272D;--bench:#0F1114;--bench-2:#1B1E23}}
:root[data-theme="dark"]{--page:#141619;--signal-text:#F5B301;--warn-text:#F5B301;--bad-text:#FF6B6B;--ok:#3CCF7A;--surface:#1C1F24;--surface-2:#202329;--ink:#F2F3F5;--ink-2:#C3C7CE;--muted:#8A919C;--line:#2A2E35;--line-2:#24272D;--bench:#0F1114;--bench-2:#1B1E23}

*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation:none!important;transition:none!important}}
body{margin:0;background:var(--page);color:var(--ink);font-family:var(--font);font-size:17px;line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:"ss01"}
a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.15em}
a:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
.wrap{max-width:1180px;margin:0 auto;padding:0 20px}
h1,h2,h3{font-stretch:var(--wide);letter-spacing:-.025em;line-height:1.08;margin:0;font-weight:700}
h1{font-size:clamp(2rem,4.6vw,3.4rem);max-width:18ch}
h2{font-size:clamp(1.35rem,2.3vw,1.75rem);margin:3rem 0 .8rem}
h3{font-size:1.1rem;margin:1.6rem 0 .5rem}
p{margin:0 0 1em}
.num{font-stretch:var(--narrow);font-variant-numeric:tabular-nums;letter-spacing:0}

/* Header */
.top{background:var(--surface);border-bottom:1px solid var(--line)}
.top .wrap{display:flex;align-items:center;gap:28px;min-height:64px}
.brand{font-stretch:var(--wide);font-weight:800;letter-spacing:-.03em;font-size:1.2rem;text-decoration:none;white-space:nowrap}
.brand b{color:var(--signal-text)}
.nav{display:flex;gap:2px;flex:1;overflow-x:auto;scrollbar-width:none}
.nav::-webkit-scrollbar{display:none}
.nav a{text-decoration:none;color:var(--ink-2);padding:8px 12px;border-radius:999px;font-size:.95rem;white-space:nowrap}
.nav a:hover{background:var(--surface-2);color:var(--ink)}
.nav a[aria-current]{background:var(--ink);color:var(--surface)}
.lang{appearance:none;-webkit-appearance:none;background:var(--surface-2) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%237A818C' stroke-width='1.6'/%3E%3C/svg%3E") no-repeat right 12px center;border:1px solid var(--line);color:var(--ink);border-radius:999px;padding-block:8px;padding-inline:14px 34px;font:inherit;font-size:.9rem;cursor:pointer}

/* Ad slots: reserved height, quiet outline, collapse when marked empty */
.ad{display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:.72rem;border:1px dashed var(--line);border-radius:var(--r-sm);background:var(--surface-2)}
.ad::before{content:attr(data-label)}
.ad.top{margin:20px auto 0;max-width:970px;min-height:90px}
.ad.inline{min-height:280px;max-width:336px;margin:2.2rem auto}
.ad.rail{min-height:600px;width:300px;max-width:100%}
.ad[data-state="empty"]{display:none}
@media (max-width:760px){.ad.top{min-height:50px}.ad.inline{min-height:250px;max-width:300px}}

/* Hero */
.hero{padding:44px 0 26px;max-width:72ch}
.lead{color:var(--ink-2);font-size:1.15rem;line-height:1.5;margin:14px 0 0;max-width:60ch}

/* Bench: the controller stage */
.bench{background:var(--bench);color:var(--bench-ink);border-radius:var(--r-lg);padding:28px;display:grid;grid-template-columns:minmax(0,1.3fr) minmax(260px,.9fr);gap:28px;align-items:center;margin:8px 0 18px;box-shadow:0 30px 60px -40px rgba(0,0,0,.55)}
/* the detector root holds stage + specs: let them be the bench's two grid columns */
.bench>[data-detector]{display:contents}
.det-stage{position:relative;min-height:260px;display:flex;align-items:center;justify-content:center}
.det-svg{width:100%;max-width:560px;height:auto;display:block;opacity:.35;transition:opacity .4s}
.det-svg.on{opacity:1}
.det-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;color:var(--bench-muted);padding:20px}
.det-empty strong{color:var(--bench-ink);font-size:1.05rem;font-stretch:var(--wide)}
.det-specs{margin:0;display:grid;grid-template-columns:auto 1fr;gap:9px 18px;font-size:.92rem;align-content:start;border-inline-start:1px solid var(--bench-line);padding-inline-start:24px}
.det-specs dt{color:var(--bench-muted);margin:0}
.det-specs dd{margin:0;font-stretch:var(--narrow);font-variant-numeric:tabular-nums;word-break:break-word}
/* svg parts */
.det-svg .body{stroke:rgba(0,0,0,.45);stroke-width:1.5}
.det-svg .body-sheen{fill:rgba(255,255,255,.05);stroke:rgba(255,255,255,.12);stroke-width:1}
.det-svg .btn{fill:#3A3F47;stroke:rgba(0,0,0,.5);stroke-width:1;transition:fill .08s}
.det-svg .btn.on{fill:var(--signal);stroke:#8a6600;filter:drop-shadow(0 0 6px rgba(245,179,1,.7))}
.det-svg .btn.touch{fill:#2F343B}
.det-svg .btn.small{fill:#4A5058}
.det-svg .btn-base{fill:#33383F}
.det-svg .well{fill:#15171B;stroke:rgba(0,0,0,.6)}
.det-svg .stick-top{fill:#4A5058;pointer-events:none}
.det-svg .btn.stick.on + .stick-top{fill:#8a6600}
/* photo mode */
.det-svg .photo image{filter:drop-shadow(0 18px 28px rgba(0,0,0,.45))}
.det-svg .hot{fill:var(--signal);opacity:0;transition:opacity .06s}
.det-svg .hot.on{opacity:.62;filter:drop-shadow(0 0 14px rgba(245,179,1,.9))}
.det-svg .photo .shoulder{opacity:.18;fill:var(--bench-ink)}
.det-svg .photo .shoulder.on{opacity:.9;fill:var(--signal)}
.det-svg .photo .stick-ring{fill:none;stroke:var(--signal);stroke-width:8;opacity:0}
.det-svg .photo .stick-ring.on{opacity:.9}
.det-svg .photo .stick-dot{fill:var(--signal);stroke:#1E2126;stroke-width:4;filter:drop-shadow(0 0 8px rgba(245,179,1,.8))}
.det-svg .lbl{fill:rgba(255,255,255,.72);font:600 12px var(--font);pointer-events:none}
.det-svg .trig-bg{fill:#3A3F47}
.det-svg .trig-fill{fill:var(--signal)}
.det-svg .trig-outline{fill:none;stroke:rgba(255,255,255,.18)}

/* Tool surface */
.gp{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:24px;margin:0 0 28px}
.gp-head{display:flex;flex-direction:column;gap:4px;margin-bottom:18px}
.gp-status{display:flex;align-items:center;gap:10px;font-weight:600}
.gp-dot{width:9px;height:9px;border-radius:50%;background:var(--bad);flex:none}
.gp-head.on .gp-dot{background:var(--ok)}
.gp-meta{color:var(--muted);font-size:.88rem;font-stretch:var(--narrow);font-variant-numeric:tabular-nums}
.gp-select{background:var(--surface-2);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-sm);padding:6px 8px;font:inherit;max-width:360px;margin-top:6px}
.gp-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.gp-sticks,.gp-compare{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.gp-stickwrap{text-align:center}
.gp .h4{margin:0 0 8px;font-size:.88rem;font-weight:600;color:var(--ink-2)}
.gp-stick{background:var(--bench);border-radius:50%;max-width:100%;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.gp-val{font-stretch:var(--narrow);font-variant-numeric:tabular-nums;font-size:.85rem;color:var(--muted);margin-top:8px;white-space:pre-wrap}
.gp-bar{display:grid;grid-template-columns:72px 1fr 56px;gap:10px;align-items:center;font-size:.85rem;margin:8px 0;position:relative}
.gp-bar span{color:var(--muted)}
.gp-bar i{display:block;height:8px;background:var(--signal);border-radius:4px;width:0}
.gp-bar b{font-stretch:var(--narrow);font-variant-numeric:tabular-nums;font-weight:500;text-align:end}
.gp-axis{background:linear-gradient(90deg,transparent calc(50% - 1px),var(--line) calc(50% - 1px),var(--line) calc(50% + 1px),transparent calc(50% + 1px))}
.gp-axis i{position:absolute;left:50%;width:10px!important;height:14px;margin-left:-5px;background:var(--ink);border-radius:3px;top:-3px}
.gp-axis span,.gp-axis b{background:var(--surface)}
.gp-btngrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:6px;margin:8px 0 18px}
.gp-b{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:6px 4px;text-align:center;font-size:.7rem;position:relative}
.gp-b span{display:block;font-weight:700;font-size:.95rem;font-stretch:var(--narrow)}
.gp-b em{font-style:normal;color:var(--muted);font-size:.64rem;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gp-b.seen{border-color:var(--ok)}
.gp-b.on{background:var(--signal);color:var(--signal-ink);border-color:var(--signal)}
.gp-b.on em{color:var(--signal-ink)}
.gp-row{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.gp-btn{background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:999px;padding:10px 18px;font:inherit;font-weight:600;cursor:pointer}
.gp-btn:hover{border-color:var(--ink)}
.gp-btn.primary{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.gp-btn:disabled{opacity:.45;cursor:default}
.gp-msg,.gp-hint,.gp-note{color:var(--ink-2);font-size:.92rem;margin:6px 0}
.gp-progress{height:4px;background:var(--line);border-radius:2px;overflow:hidden;margin:6px 0 16px}
.gp-progress i{display:block;height:100%;width:0;background:var(--signal)}
.gp-res{display:grid;grid-template-columns:1fr auto;gap:2px 14px;padding:14px 16px;border-radius:var(--r-md);margin:8px 0;background:var(--surface-2)}
.gp-res b{font-size:1rem}.gp-res span{grid-column:1;color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums}.gp-res em{grid-row:1/3;grid-column:2;font-style:normal;font-weight:700;align-self:center}
.gp-res.ok em{color:var(--ok)}.gp-res.mid em{color:var(--warn)}.gp-res.bad em{color:var(--bad)}
.gp-rec{font-weight:600;margin:14px 0 4px}
.gp-link{font-weight:600}
.gp-steps{color:var(--ink-2);margin:0 0 16px;padding-inline-start:22px;font-size:.95rem}
.gp-pair{display:flex;gap:10px;justify-content:center}
.gp-pair small{display:block;color:var(--muted);font-size:.78rem;margin-bottom:4px}
.gp-panel{margin-top:18px;border-top:1px solid var(--line);padding-top:16px}
.gp-slider{display:grid;grid-template-columns:150px 1fr 60px;gap:12px;align-items:center;margin:8px 0;font-size:.92rem}
.gp-slider input{width:100%;accent-color:var(--signal)}
.gp-slider b{font-stretch:var(--narrow);font-variant-numeric:tabular-nums;font-weight:500;text-align:end}
.warn{background:rgba(214,69,61,.08);border:1px solid rgba(214,69,61,.3);padding:10px 14px;border-radius:var(--r-sm);margin-bottom:12px}

/* Two-column body */
.cols{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:48px;align-items:start}
.article{max-width:68ch}
.article p,.article li{color:var(--ink-2)}
.article li{margin-bottom:.35em}
.article code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.88em;background:var(--surface-2);padding:.1em .35em;border-radius:4px}
.article strong{color:var(--ink)}
.rail{position:sticky;top:20px;display:flex;flex-direction:column;gap:22px}
.rail h3{margin:0 0 8px;font-size:.95rem}
.plist{display:flex;flex-direction:column}
.plist a{padding:10px 0;border-top:1px solid var(--line);text-decoration:none;color:var(--ink);display:flex;justify-content:space-between}
.plist a:hover{color:var(--signal)}
.plist a::after{content:"›";color:var(--muted)}
.faq details{border-top:1px solid var(--line);padding:14px 0}
.faq details:last-child{border-bottom:1px solid var(--line)}
.faq summary{cursor:pointer;font-weight:600;list-style:none;display:flex;justify-content:space-between;gap:12px;color:var(--ink)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--muted);font-weight:400}
.faq details[open] summary::after{content:"−"}
.faq p{margin:10px 0 0}
.cross{margin:3rem 0 0;padding:26px 28px;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap}
.cross b{display:block;margin-bottom:4px;font-size:1.05rem;font-stretch:var(--wide)}
.cross span{color:var(--ink-2);font-size:.95rem}
.btn{display:inline-block;background:var(--ink);color:var(--surface);font-weight:600;text-decoration:none;padding:12px 20px;border-radius:999px;white-space:nowrap}
.btn:hover{background:var(--signal);color:var(--signal-ink)}
footer{margin-top:72px;padding:28px 0 48px;color:var(--muted);font-size:.88rem;border-top:1px solid var(--line)}
footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px}

@media (max-width:960px){.cols{grid-template-columns:1fr}.rail{position:static}.bench{grid-template-columns:1fr;padding:22px}.det-specs{border-inline-start:0;padding-inline-start:0;border-top:1px solid var(--bench-line);padding-top:18px}}
@media (max-width:760px){.gp-grid{grid-template-columns:1fr}.gp-compare{grid-template-columns:1fr}.gp-slider{grid-template-columns:1fr 1fr 60px}.gp-slider span{grid-column:1/4}.hero{padding:28px 0 18px}.top .wrap{flex-wrap:wrap;gap:10px;padding-top:12px;padding-bottom:12px}.nav{order:3;flex-basis:100%}.lang{margin-inline-start:auto}.gp{padding:18px}}
@media (max-width:480px){.gp-sticks{grid-template-columns:1fr}.gp-pair{flex-direction:column;align-items:center}.gp-bar{grid-template-columns:60px 1fr 48px}.bench{padding:18px;border-radius:18px}}

/* Guides */
.crumb{margin:0 0 10px;font-size:.9rem;color:var(--muted)}
.crumb a{color:var(--muted)}
.fig{margin:1.6rem 0;border-radius:var(--r-md);overflow:hidden;background:var(--surface-2)}
.fig picture{display:block}
.fig img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
.fig.missing img{display:none}
.fig.missing::before{content:"";display:block;aspect-ratio:3/2;background:linear-gradient(135deg,var(--surface-2),var(--line))}
.fig figcaption{padding:10px 14px;font-size:.85rem;color:var(--muted);border-top:1px solid var(--line)}
.hero + .fig{margin-top:0;border-radius:var(--r-lg)}
.glist{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:22px}
.gcard{text-decoration:none;color:var(--ink);display:flex;flex-direction:column;gap:8px}
.gcard .gcard-img .fig{margin:0}
.gcard .gcard-img figcaption{display:none}
.gcard strong{font-size:1.1rem;font-stretch:var(--wide);letter-spacing:-.01em;line-height:1.2;margin-top:6px}
.gcard > span:last-child{color:var(--ink-2);font-size:.92rem}
.gcard:hover strong{color:var(--signal)}

/* RTL */
[dir="rtl"] .lang{background-position:left 12px center}
[dir="rtl"] .plist a::after{content:"‹"}
[dir="rtl"] .gp-axis i{margin-left:0;margin-right:-5px}
[dir="rtl"] .det-svg,[dir="rtl"] .gp-stick{direction:ltr}
[dir="rtl"] .gp-val{direction:ltr;unicode-bidi:isolate}
:lang(ar) body,:lang(fa) body{--font:"Archivo","Noto Naskh Arabic","Segoe UI",Tahoma,system-ui,sans-serif}
:lang(zh-Hans),:lang(zh-Hant),:lang(th),:lang(hi),:lang(ar){--wide:100%}

/* Repair gallery */
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin:1rem 0 2rem}
.gallery .fig{margin:0}
.gallery .fig figcaption{font-size:.8rem}

/* analytics consent banner (EEA/UK/CH only) */
.consent{position:fixed;inset:auto 16px 16px;z-index:50;max-width:640px;margin:0 auto;padding:16px 18px;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line);box-shadow:0 8px 30px rgba(0,0,0,.12);display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.consent p{margin:0;flex:1 1 260px;font-size:.9rem}
.consent div{display:flex;gap:8px}

/* authenticity check (spans both bench columns) */
.det-auth{grid-column:1/-1;border-top:1px solid var(--bench-line);padding-top:18px}
.auth-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.auth-head strong{font-size:1.05rem;font-stretch:var(--wide);color:var(--bench-ink)}
.auth-intro{margin:.5rem 0 .8rem;color:var(--bench-muted);font-size:.9rem;max-width:70ch}
.auth-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:6px 18px;font-size:.9rem}
.auth-list li{display:grid;grid-template-columns:20px 1fr auto;gap:8px;align-items:baseline}
.auth-mark{font-weight:700}
.auth-pass .auth-mark{color:#3ccf7a}.auth-fail .auth-mark{color:#ff6b6b}.auth-warn .auth-mark{color:var(--signal)}.auth-na .auth-mark{color:var(--bench-muted)}
.auth-name{color:var(--bench-muted)}
.auth-val{font-variant-numeric:tabular-nums;color:var(--bench-ink);text-align:end}
.auth-verdict{margin-top:12px;font-weight:600;color:var(--bench-ink)}
.auth-verdict.v-genuine{color:#3ccf7a}.auth-verdict.v-fake{color:#ff6b6b}.auth-verdict.v-unsure{color:var(--signal)}
.auth-note{margin:.4rem 0 0;font-weight:400;font-size:.82rem;color:var(--bench-muted)}
.auth-guide{color:var(--signal);white-space:nowrap}
.bench.in-article{margin:1.6rem 0;grid-template-columns:1fr;padding:22px}
.bench.in-article .det-specs{border-inline-start:0;padding-inline-start:0;border-top:1px solid var(--bench-line);padding-top:16px}

/* wear summary + extra sensors (inside the tester) */
.gp-wear,.gp-sens{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.wear-list{list-style:none;margin:0 0 8px;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:6px 28px;font-size:.92rem}
.wear-list li{display:grid;grid-template-columns:18px auto 1fr;gap:8px;align-items:baseline}
.wear-mark{font-weight:700}
.wear-pass .wear-mark{color:var(--ok)}.wear-fail .wear-mark{color:var(--bad-text)}.wear-warn .wear-mark{color:var(--warn-text)}.wear-na .wear-mark{color:var(--ink-2)}
.wear-name{color:var(--ink-2)}.wear-val{text-align:end;font-variant-numeric:tabular-nums}
.sens-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.sens-head .h4{margin:0;font-size:.88rem;font-weight:600;color:var(--ink-2)}
.sens-body{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:10px}
.sens-card .h5{margin:0 0 8px;font-size:.85rem}
.sens-pad{display:block;width:100%;border-radius:12px;background:#1E2126;touch-action:none}
.sens-tilt{width:90px;height:90px;border-radius:50%;border:1px solid var(--line);position:relative;margin:10px 0;background:var(--surface-2)}
.sens-tilt i{position:absolute;left:39px;top:39px;width:12px;height:12px;border-radius:50%;background:var(--signal)}
.sens-bat{position:relative;height:28px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden}
.sens-bat i{position:absolute;inset:0 auto 0 0;width:0;background:var(--ok);opacity:.55}
.sens-bat b{position:relative;display:block;text-align:center;line-height:28px;font-size:.85rem}
/* layout-shift guard: script-built blocks reserve roughly their final height while still empty
   (measured: detector ~660 / ~880 px, tester ~1120 / ~2400, drift ~470 / ~800, calibration ~780 / ~1860; desktop / phone) */
.bench:has(>[data-detector]:empty){min-height:630px}
.bench.in-article:has(>[data-detector]:empty){min-height:850px}
[data-gp="tester"]:empty{min-height:1100px}
[data-gp="drift"]:empty{min-height:460px}
[data-gp="calibration"]:empty{min-height:760px}
@media (max-width:960px){.bench:has(>[data-detector]:empty){min-height:850px}}
@media (max-width:760px){[data-gp="tester"]:empty{min-height:2350px}[data-gp="drift"]:empty{min-height:780px}[data-gp="calibration"]:empty{min-height:1820px}}
/* the detector can sit inside an article: keep its own light-on-dark text colours there */
.article .bench p,.article .bench li{color:var(--bench-muted)}
.article .bench strong,.article .bench b,.article .bench dd,.article .bench .auth-verdict,.article .bench .auth-val{color:var(--bench-ink)}
.article .bench .auth-verdict.v-genuine{color:#3ccf7a}.article .bench .auth-verdict.v-fake{color:#ff6b6b}.article .bench .auth-verdict.v-unsure{color:var(--signal)}
/* hardware calibration (WebHID, DualShock 4 / DualSense) */
.hwcal .hw-steps{display:flex;gap:6px;flex-wrap:wrap;list-style:none;padding:0;margin:12px 0;counter-reset:hw}
.hwcal .hw-steps li{counter-increment:hw;padding:6px 12px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.9rem}
.hwcal .hw-steps li::before{content:counter(hw) ". "}
.hwcal .hw-steps li.on{border-color:var(--signal);color:var(--ink);font-weight:600}
.hwcal .hw-steps li.done{color:var(--ok);border-color:var(--ok)}
.hwcal .hw-status{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:var(--surface-2);display:grid;gap:4px}
.hwcal .hw-status[data-state="error"] .hw-label{color:var(--bad-text)}
.hwcal .hw-status[data-state="success"] .hw-label{color:var(--ok)}
.hwcal .hw-status[data-state="working"] .hw-label{color:var(--warn-text)}
.hwcal .hw-msg{color:var(--ink-2);font-size:.95rem}
.hwcal .hw-bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden;margin-top:6px}
.hwcal .hw-bar i{display:block;height:100%;width:0;background:var(--signal);transition:width .15s}
.hwcal .hw-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px;margin:12px 0}
.hwcal .hw-facts dt{color:var(--muted);font-size:.85rem}
.hwcal .hw-facts dd{margin:0;font-weight:600;overflow-wrap:anywhere}
.hwcal .hw-instr{border-inline-start:3px solid var(--signal);padding:4px 0 4px 12px;margin:8px 0}
.hwcal .hw-instr p{margin:4px 0 0;color:var(--ink-2)}
.hwcal .hw-consent{display:flex;gap:8px;align-items:flex-start;margin:10px 0;font-size:.95rem}
.hwcal .gp-btn:disabled{opacity:.45;cursor:not-allowed}
.hwcal .hw-credit a{color:var(--muted)}
.hwcal:empty{min-height:700px}
@media (max-width:600px){.hwcal:empty{min-height:1150px}}
