  /* ---------- Catalog (universal product explorer) ---------- */
  .ccontrols{display:flex;flex-wrap:wrap;gap:9px;align-items:center;margin-bottom:8px}
  .cinput{background:var(--panel2);color:var(--txt);border:1px solid var(--line);border-radius:6px;padding:7px 9px;font-size:13px}
  .cinput[type=search]{min-width:230px}
  .colbtn{cursor:pointer}
  /* The search bar is now the PRIMARY control + single source of truth — make it big, prominent, and own the
     row. A leading 🔎 sits inside; an inline ✕ clears it. Active (non-empty) state gets an accent ring. */
  .searchwrap{position:relative;flex:1;min-width:280px;display:flex;align-items:center}
  .searchwrap .mag{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--dim);pointer-events:none;display:grid;place-items:center}
  #cq.cqbig{flex:1;width:100%;font-size:15px;padding:11px 34px 11px 36px;border-radius:9px;border-color:var(--line);background:var(--panel2)}
  #cq.cqbig:focus{outline:none;border-color:var(--link);box-shadow:0 0 0 2px color-mix(in srgb,var(--link) 28%,transparent)}
  #cq.cqbig.has{border-color:color-mix(in srgb,var(--link) 60%,var(--line))}
  .cqclear{position:absolute;right:9px;cursor:pointer;color:var(--dim);font-size:16px;line-height:1;border:0;background:none;padding:2px 5px;border-radius:6px;display:none}
  .cqclear.show{display:inline-block}
  .cqclear:hover{color:#fff;background:var(--panel)}
  /* secondary, de-emphasised control strip: compact pickers that WRITE INTO the bar. Collapsible. */
  .filterstrip{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px;font-size:12px;color:var(--dim)}
  .filterstrip.hide{display:none}
  /* each filter = ONE pill: a muted label + its borderless control in a unified rounded segment (matches .qchip) */
  .ffield{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 9px 0 11px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;transition:border-color .12s,background .12s}
  .ffield:hover{border-color:color-mix(in srgb,var(--link) 45%,var(--line))}
  .ffield:focus-within{border-color:var(--link)}
  .ffield:has(.set),.ffield:has(.num.on){border-color:color-mix(in srgb,var(--link) 60%,var(--line));background:color-mix(in srgb,var(--link) 8%,var(--panel2))}
  .filterstrip .fl{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);opacity:.85;white-space:nowrap}
  /* quick-filter chips (public) — one-tap toggles that write a token to the bar */
  .qchips{display:flex;flex-wrap:wrap;gap:7px;margin:2px 0 10px}
  .qchip{cursor:pointer;font-size:12px;font-weight:500;color:var(--dim);background:var(--panel2);border:1px solid var(--line);border-radius:20px;padding:4px 13px;user-select:none;transition:color .12s,border-color .12s,background .12s}
  .qchip:hover{color:var(--txt);border-color:color-mix(in srgb,var(--link) 55%,var(--line))}
  .qchip.on{color:#08111c;background:var(--link);border-color:var(--link);font-weight:600}
  .qchip .pn{opacity:.6;margin-left:3px;font-variant-numeric:tabular-nums;font-weight:600}
  .bsub{margin-top:-2px}   /* brand-view category sub-filter chip row */
  .qchip:focus-visible{outline:2px solid var(--link);outline-offset:2px}
  /* active-filter pills — removable, friendly view of the bar's applied filters */
  .afilters{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin:0 0 12px;font-size:12px}
  .afilters .afl{color:var(--dim);text-transform:uppercase;letter-spacing:.5px;font-size:10px;font-weight:700;margin-right:1px}
  .apill{display:inline-flex;align-items:center;gap:5px;background:color-mix(in srgb,var(--link) 12%,var(--panel2));border:1px solid color-mix(in srgb,var(--link) 38%,var(--line));color:var(--txt);border-radius:7px;padding:2px 4px 2px 10px;font-variant-numeric:tabular-nums}
  .apill b{font-weight:600}
  .apill .ax{cursor:pointer;color:var(--dim);border:0;background:none;font-size:13px;line-height:1;padding:1px 4px;border-radius:5px}
  .apill .ax:hover{color:#fff;background:color-mix(in srgb,var(--accent) 70%,transparent)}
  .afilters .aclear{cursor:pointer;color:var(--link);font-size:12px;margin-left:3px}
  .afilters .aclear:hover{text-decoration:underline}
  .csel{appearance:auto;background:transparent;color:var(--txt);border:none;border-radius:0;padding:0 2px;font-size:12.5px;max-width:160px;height:100%;cursor:pointer}
  .csel:focus{outline:none}
  .csel.set{color:var(--txt)}
  .morebtn{cursor:pointer;color:var(--dim);font-size:12px;background:none;border:1px solid var(--line);border-radius:6px;padding:5px 10px}
  .morebtn:hover{color:var(--txt)}
  .morebtn.on{color:var(--txt);border-color:var(--link)}
  .cresetbtn{cursor:pointer;color:var(--dim);opacity:.55}
  .cresetbtn.on{opacity:1;color:var(--txt);border-color:var(--red);background:color-mix(in srgb, var(--red) 14%, var(--panel2))}
  .cresetbtn:hover{opacity:1;color:var(--txt)}
  .colpick{position:relative;display:inline-block}
  .colmenu{display:none;position:absolute;top:calc(100% + 4px);right:0;z-index:30;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:7px;min-width:150px;box-shadow:0 8px 24px #0008;max-height:60vh;overflow:auto}
  .colmenu.open{display:block}
  .colmenu label{display:flex;align-items:center;gap:7px;padding:4px 6px;font-size:13px;border-radius:5px;cursor:pointer;white-space:nowrap}
  .colmenu label:hover{background:var(--panel)}
  .colmenu input{cursor:pointer}
  .ctbl{width:100%;border-collapse:collapse;font-size:13px}
  .ctbl th{position:sticky;top:0;z-index:2;background:var(--panel);cursor:pointer;user-select:none;white-space:nowrap;font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;color:var(--dim);padding:8px 10px;border-bottom:2px solid var(--line);text-align:left}
  .ctbl td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top;max-width:330px;overflow:hidden;text-overflow:ellipsis}
  /* Public catalog: fixed layout + single-line cells → every row is ONE line tall, the table always fits
     100% width (no horizontal scroll), long values truncate with ellipsis (full value on hover). Column
     widths come from a per-render <colgroup>; Name takes the remainder. The console keeps auto-layout. */
  body:not(.consolemode) .ctbl{table-layout:fixed}
  body:not(.consolemode) .ctbl td{white-space:nowrap;vertical-align:middle}
  .ctoopt1{font-size:11.5px} .ctoopt1 .cton{font-size:9.5px;font-weight:700;color:var(--p-join);border:1px solid #1f3a52;border-radius:4px;padding:0 4px;margin-right:2px}
  .ctbl td.num{font-variant-numeric:tabular-nums}   /* numbers keep tabular figures but stay LEFT-aligned — ONE consistent column edge for every header + cell (was: num cols right-aligned, clashing with the left text cols + the left CTO option lists) */
  .ctbl tr.prow{cursor:pointer}
  .ctbl tr.prow:nth-child(even) td{background:color-mix(in srgb,var(--panel2) 38%,transparent)}   /* zebra: track a row across the wide table */
  .ctbl tr.prow:hover td,.ctbl tr.prow.open td,.ctbl tr.prow:focus-visible td{background:var(--panel2)}
  .ctbl tr.prow:focus-visible{outline:2px solid var(--link);outline-offset:-2px}   /* keyboard a11y: rows are tabbable + openable */
  /* per-column header filter row (toggled). Inputs are compact; numeric cols get min/max, text cols a contains box. */
  .ctbl tr.cfilter th{position:sticky;top:30px;z-index:2;background:var(--panel);padding:3px 6px 6px;border-bottom:2px solid var(--line);vertical-align:top}
  .cflt{display:inline-flex;gap:5px;align-items:center}
  .cflt input{width:46px;min-width:0;background:transparent;color:var(--txt);border:none;border-radius:0;padding:0;font-size:12.5px;height:100%;-webkit-appearance:none;appearance:textfield}
  .cflt input::-webkit-outer-spin-button,.cflt input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
  .cflt input.num{text-align:right;font-variant-numeric:tabular-nums}
  .cflt input:focus{outline:none}
  .cflt input::placeholder{color:var(--dim);opacity:.65}
  .cflt .dash{color:var(--dim);font-size:11px}
  .fltbtn.on{border-color:var(--link);color:var(--link)}
  /* chart-axis range-filter inputs (sit beside the axis pickers) */
  .axflt{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--dim);margin-left:6px}
  .axflt input{width:54px;background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:5px;padding:2px 5px;font-size:11px;text-align:right}
  .axflt input.on,.axflt input:focus{border-color:var(--link)}
  .scbrush{fill:rgba(108,182,255,.12);stroke:var(--link);stroke-opacity:.5;stroke-dasharray:3 3}
  /* model_code — the SKU/model split out of the name; small mono, secondary, under the clean name */
  .modelcode{display:block;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:10.5px;color:var(--dim);letter-spacing:.2px;margin-top:2px}
  .ctbl code{font-size:11px;color:var(--txt)}
  /* catalog charts (filter-aware) */
  .chartpanel{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:12px;margin-bottom:14px}
  .chartcard{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:10px 12px}
  .charttitle{font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);margin-bottom:8px}
  .bars{display:flex;flex-direction:column;gap:4px}
  .brow{display:flex;align-items:center;gap:8px;font-size:12px;line-height:1.3}
  .blabel{flex:0 0 84px;text-align:right;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .btrack{flex:1;background:var(--panel);border-radius:4px;height:13px;overflow:hidden}
  .bfill{display:block;height:100%;background:#5b9bd5;border-radius:4px;min-width:2px}
  .bval{flex:0 0 auto;color:var(--dim);font-variant-numeric:tabular-nums;min-width:40px;text-align:right}
  .chtoggle.on{border-color:#5b9bd5;color:#cfe6fb}
  /* per-category price-vs-spec scatter */
  .scattercard{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin-bottom:12px}
  .scphead{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:6px}
  .scpsel{background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:6px;padding:4px 8px;font-size:12px}
  .scatter svg{width:100%;height:auto;display:block}
  .scplot{cursor:crosshair;touch-action:none}
  .scatter .ax{stroke:var(--line)}
  .scatter .axt{fill:var(--dim);font-size:10px}
  .scatter .axl{fill:var(--dim);font-size:10px;text-transform:uppercase;letter-spacing:.4px}
  .scatter circle{stroke:rgba(0,0,0,.3);stroke-width:.5}
  .sclegend{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:4px;font-size:11px}
  .sclegend span{display:inline-flex;align-items:center;gap:4px;color:var(--dim)}
  .sclegend i{width:9px;height:9px;border-radius:50%;display:inline-block}
  .scpax{font-size:11px;color:var(--dim)}
  .wsliders{display:inline-flex;align-items:center;gap:9px;font-size:11px;color:var(--dim);flex-wrap:wrap}
  .wsl{display:inline-flex;align-items:center;gap:4px}
  .wsl input[type=range]{width:62px;accent-color:#5b9bd5;vertical-align:middle}
  .wsl b{min-width:26px;color:var(--txt);font-variant-numeric:tabular-nums}
  .scatter .fairline{stroke:#e0b34d;stroke-width:2;stroke-dasharray:5 4;opacity:.9}
  .sclegend .fairkey{width:16px;height:0;border:0;border-top:2px dashed #e0b34d;border-radius:0}
  /* drawer price-over-time sparkline */
  .spark svg{width:100%;height:auto;display:block;max-width:520px}
  .spark .sln{fill:none;stroke:var(--link);stroke-width:1.6}
  .spark .sdot{fill:var(--link)}
  .spark .sdot.last{fill:var(--accent)}
  .spark .saxt{fill:var(--dim);font-size:9px;font-variant-numeric:tabular-nums}
  .spark .sgrid{stroke:var(--line);stroke-opacity:.5}
  .sparkmeta{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--dim);margin-top:5px;font-variant-numeric:tabular-nums}
  .sparkmeta b{color:var(--txt)}
  .sparkmeta .up{color:var(--gap)} .sparkmeta .down{color:var(--ok)}
  /* store-wide recent price-changes panel (Overview) */
  .phrow{display:grid;grid-template-columns:1fr 150px 90px 110px;gap:10px;padding:7px 10px;border-bottom:1px solid var(--line);font-size:12.5px;align-items:center}
  .phrow:last-child{border-bottom:0}
  .phrow .phname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .phrow .phbrand{color:var(--dim);font-size:11px;margin-right:6px;text-transform:uppercase;letter-spacing:.3px}
  .phrow .phprice{text-align:right;font-variant-numeric:tabular-nums}
  .phrow .phpct{text-align:right;font-variant-numeric:tabular-nums}
  .phrow .phpct.up{color:var(--gap)} .phrow .phpct.down{color:var(--ok)}
  .phrow .phwhen{text-align:right;color:var(--dim);font-size:11px}
  /* Brand = a proper NOUN, never iconized (owner): plain brand-colored text — no dot, no border/box, no chip
     or tag treatment. Reads as the maker; visually distinct from the status/promo .tag chips. On a PDP the
     brand gets name-level weight via .pdp-brand. */
  .bchip{font-size:12px;font-weight:650;line-height:1.4;white-space:nowrap;border:0;padding:0;background:none;text-transform:none;letter-spacing:0}
  .twirl{display:inline-block;width:10px;color:var(--dim)}
  tr.prow.open .twirl{color:var(--txt)}
  .twirlbtn{cursor:pointer;transition:transform .12s ease;border-radius:4px}   /* model-card expander: the ▸ rotates to ▾ when open */
  .twirlbtn:hover{color:var(--txt)}
  tr.modelcard.open .twirlbtn{transform:rotate(90deg)}
  .cfgcount{font-size:9px;color:var(--dim);border:1px solid var(--line);border-radius:6px;padding:0 5px;margin-left:7px;font-weight:600;white-space:nowrap}   /* "4 configs" badge on a model card */
  tr.cfgrow td{background:color-mix(in srgb,var(--panel2) 55%,transparent)!important;font-size:12px;padding-top:3px;padding-bottom:3px}   /* config sub-row: thin, indented, recessed */
  tr.cfgrow td[data-label="Name"]{padding-left:22px}
  .cfgleaf{color:var(--dim)} .cfgleaf code{font-size:11px}
  .eolchip{font-size:9px;color:var(--gap);border:1px solid #5a2a2a;border-radius:6px;padding:0 5px;margin-left:5px}
  .cfgchip{font-size:9px;color:var(--p-join);border:1px solid #1f3a52;border-radius:6px;padding:0 5px;margin-left:5px}
  /* ── Unified tag system: one .tag base + per-kind tone modifiers; flows every small status/promo tag.
        flex:none + nowrap means a tag never shrinks/clips; it lives beside an ellipsising .nm (see .cellname). ── */
  .tag{display:inline-flex;align-items:center;gap:4px;flex:none;white-space:nowrap;border-radius:5px;padding:1px 6px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;line-height:1.6;border:1px solid var(--line);color:var(--dim);background:transparent}
  .tag .tdot{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}
  .tag-cto{color:var(--p-join);border-color:#1f3a52}
  .tag-eol{color:var(--gap);border-color:#5a2a2a}
  .tag-instock{color:var(--ok);border-color:#1f5a2a;background:#0f1f14}
  .tag-oos{color:var(--dim);border-color:var(--line)}
  .tag-deal{color:var(--ok);border-color:#1f5a2a;background:#0f1f14}
  .tag-new{color:var(--link);border-color:color-mix(in srgb,var(--link) 40%,var(--line))}
  .tag-normalized{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,transparent);text-transform:none;font-weight:400;letter-spacing:0;font-size:10px}
  .tag-best{color:var(--ok);border-color:#1f5a2a;background:#0f1f14}
  .tag-sponsored{color:var(--gold);border-color:color-mix(in srgb,var(--gold) 38%,var(--line));background:color-mix(in srgb,var(--gold) 11%,transparent)}
  .tag-recommended{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,var(--line));background:color-mix(in srgb,var(--accent) 12%,transparent)}
  /* name + non-clipping tag group: the name ellipsises, the tags never get clipped by its overflow */
  .cellname{display:flex;align-items:center;gap:6px;min-width:0}
  .cellname .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .cellname .tags{display:flex;gap:5px;flex:none}
  .cellname .tags .cfgcount{margin-left:0}   /* the flex gap handles spacing — no double margin */
  .wtb-btn .tag{margin-left:5px}             /* best/oos tag inside a buy button */
  .price-list2{color:var(--dim);text-decoration:line-through;font-size:.85em;margin-left:6px}
  .prange{white-space:nowrap} .prange .rdash{color:var(--dim);margin:0 2px}
  /* per-category landing grid + the category-table scope header */
  /* ---- Public landing: hero + category browser ---- */
  /* Public surfaces sit in a centered max-width column (header aligns to it) so nothing bunches left on wide screens */
  body:not(.consolemode) #view-catalog,
  #view-product{max-width:1180px;margin-left:auto;margin-right:auto}
  body:not(.consolemode) header .brandline,
  body:not(.consolemode) header .tabs{max-width:1180px;margin-left:auto;margin-right:auto}
  .lhero{margin:10px 0 6px;text-align:center}
  .lhero h1{margin:0;font-size:30px;font-weight:750;letter-spacing:-.6px;line-height:1.14;color:var(--txt)}
  .lhero h1 .accent{color:var(--accent)}
  .lhero p{margin:11px auto 0;color:var(--dim);font-size:14.5px;max-width:560px;line-height:1.55}
  .lsearch{position:relative;max-width:600px;margin:20px auto 2px}
  .lsearch input{width:100%;background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:13px 16px 13px 44px;color:var(--txt);font-size:15px;transition:border-color .12s,box-shadow .12s}
  .lsearch input::placeholder{color:var(--dim)}
  .lsearch input:focus{outline:none;border-color:var(--link);box-shadow:0 0 0 3px color-mix(in srgb,var(--link) 16%,transparent)}
  .lsearch .lmag{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:var(--dim);pointer-events:none;display:grid;place-items:center}
  .lstats{display:flex;justify-content:center;gap:6px 22px;flex-wrap:wrap;margin:14px 0 2px;font-size:12.5px;color:var(--dim)}
  .lstats span{display:inline-flex;align-items:center;gap:6px}
  .lstats b{color:var(--txt);font-variant-numeric:tabular-nums}
  .lstats .ldot{width:6px;height:6px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 22%,transparent)}
  .lcaption{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);font-weight:700;margin:26px 0 0;text-align:center}
  /* fixed-column grid (12 categories ⇒ even rows) with equal-size cards; content top-aligned for consistency */
  .catgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:14px;grid-auto-rows:1fr}
  @media (max-width:1080px){.catgrid{grid-template-columns:repeat(3,minmax(0,1fr))}}
  @media (max-width:720px){.catgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
  @media (max-width:460px){.catgrid{grid-template-columns:1fr}}
  .catcard{display:flex;flex-direction:column;height:100%;background:linear-gradient(180deg,var(--panel) 0%,var(--panel2) 100%);border:1px solid var(--line);border-radius:16px;overflow:hidden;transition:border-color .15s,transform .15s,box-shadow .15s}
  .catcard:hover{border-color:color-mix(in srgb,var(--ct,#6cb6ff) 55%,var(--line));transform:translateY(-3px);box-shadow:0 14px 32px -14px #000c}
  .catcard-main{display:flex;align-items:center;gap:13px;padding:16px 16px 12px;text-decoration:none;color:var(--txt)}
  .catglyph{flex:none;display:grid;place-items:center;width:48px;height:48px;border-radius:13px;color:var(--ct,#6cb6ff);background:color-mix(in srgb,var(--ct,#6cb6ff) 15%,transparent);border:1px solid color-mix(in srgb,var(--ct,#6cb6ff) 32%,transparent)}
  .caticon{display:block}
  .brandinit{font-weight:750;font-size:19px;line-height:1}              /* brand avatar = tinted initial */
  .catscope-h .brandinit{font-size:15px}
  /* ── Monetization surfaces (every one labeled via .tag; centered with the page) ── */
  .featured{max-width:1180px;margin:6px auto 4px;border-radius:16px;padding:14px 18px 16px;background:linear-gradient(110deg,color-mix(in srgb,var(--gold) 9%,var(--panel)) 0%,var(--panel2) 60%);border:1px solid color-mix(in srgb,var(--gold) 30%,var(--line))}
  .featured-head{display:flex;justify-content:flex-end;margin-bottom:6px}
  .featured-main{display:flex;align-items:center;gap:16px;text-decoration:none;color:var(--txt)}
  .featured .fthumb{flex:none;width:64px;height:64px;border-radius:14px;display:grid;place-items:center;color:var(--gold);background:color-mix(in srgb,var(--gold) 12%,transparent);border:1px solid color-mix(in srgb,var(--gold) 26%,var(--line))}
  .featured .finfo{flex:1;min-width:0}
  .featured .fbrand{display:flex;gap:8px;align-items:center;margin-bottom:4px}
  .featured .fpick{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--gold);font-weight:700}
  .featured .fname{font-size:17px;font-weight:700;letter-spacing:-.3px;line-height:1.2;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .featured .fbuy{flex:none;text-align:right;display:flex;flex-direction:column;align-items:flex-end;gap:2px}
  .featured .fprice{font-size:23px;font-weight:750;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
  .featured .fprice.fnone{font-size:16px;color:var(--dim)}
  .featured .fsub{font-size:12.5px} .featured .flist{color:var(--dim);text-decoration:line-through} .featured .fsave{color:var(--ok);font-weight:600}
  .featured .fcta{margin-top:5px;font-size:13px;font-weight:600;color:#fff;background:color-mix(in srgb,var(--accent) 86%,black);border:1px solid var(--accent);border-radius:9px;padding:7px 15px}
  /* AdSense placed display unit (monetization switch: ads on, sponsored off). Its OWN slot, labeled — never
     disguised as content (AdSense policy). Sits where the Sponsored featured card was on the landing, and below
     the PDP. min-height reserves space so the page doesn't jump when an ad fills. */
  .adslot{max-width:1180px;margin:8px auto 4px;padding:6px 0;text-align:center}
  .adslot-lbl{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);margin-bottom:4px}
  .adslot ins{display:block;min-height:90px}
  .deals{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:12px}
  @media (max-width:720px){.deals{grid-template-columns:repeat(2,minmax(0,1fr))}}
  @media (max-width:460px){.deals{grid-template-columns:1fr}}
  .deal{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:12px 13px;text-decoration:none;color:var(--txt);display:flex;flex-direction:column;gap:3px;transition:border-color .12s,transform .12s}
  .deal:hover{border-color:color-mix(in srgb,var(--ok) 45%,var(--line));transform:translateY(-2px)}
  .deal .dpct{align-self:flex-start;font-size:11px;font-weight:700;color:var(--ok);background:#0f1f14;border:1px solid #1f5a2a;border-radius:5px;padding:0 6px}
  .deal .dbrand{font-size:10.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.3px;margin-top:6px}
  .deal .dname{font-size:13px;font-weight:600;line-height:1.25;min-height:2.4em;overflow:hidden}
  .deal .dprice{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:2px}
  .deal .dlist{font-size:11px;color:var(--dim);text-decoration:line-through;font-weight:400;margin-left:4px}
  .ctbl tr.sponsored-row td{background:color-mix(in srgb,var(--gold) 7%,transparent);border-bottom:1px solid color-mix(in srgb,var(--gold) 22%,var(--line))}
  .ctbl tr.sponsored-row td:first-child{box-shadow:inset 3px 0 0 color-mix(in srgb,var(--gold) 70%,transparent)}
  .catcard-tx{display:flex;flex-direction:column;gap:2px;min-width:0}
  .catname{font-weight:650;font-size:15.5px;letter-spacing:-.2px;line-height:1.2}
  .catn{font-size:12px;color:var(--dim);font-variant-numeric:tabular-nums}
  .catpresets{display:flex;flex-wrap:wrap;gap:6px;padding:0 14px 14px}
  .catpreset{font-size:11.5px;color:var(--dim);background:var(--chip);border:1px solid var(--line);border-radius:20px;padding:3px 10px;text-decoration:none;white-space:nowrap;transition:color .12s,border-color .12s,background .12s}
  .catpreset:hover{color:var(--txt);border-color:color-mix(in srgb,var(--ct,#6cb6ff) 60%,var(--line));background:color-mix(in srgb,var(--ct,#6cb6ff) 13%,transparent)}
  .catpreset .pn{color:color-mix(in srgb,var(--ct,#6cb6ff) 85%,var(--txt));font-variant-numeric:tabular-nums;margin-left:5px;font-weight:600}
  /* category-table scope header icon (reuses the tinted glyph chip, inline) */
  .catscope-h .catglyph{display:inline-grid;width:32px;height:32px;border-radius:9px;vertical-align:-9px;margin-right:7px}
  .catscope{display:flex;align-items:center;gap:14px;margin:2px 0 10px}
  .catback{color:var(--link);text-decoration:none;font-size:13px} .catback:hover{text-decoration:underline}
  .catscope-h{font-size:17px;font-weight:600}
  /* the single "IDs" column: a compact object of the populated identifiers (sku/mpn/gtin/asin/…) */
  .idcell{display:flex;flex-direction:column;gap:1px} .idkv{white-space:nowrap;font-size:11px;line-height:1.3}
  .idk{display:inline-block;min-width:30px;color:var(--dim);font-size:9px;font-weight:700;letter-spacing:.03em;margin-right:3px}
  /* CTO option lists in a spec column cell (configurable products) */
  .ctbl td .ctoopts{margin:0;padding:0 0 0 13px;font-size:10px;line-height:1.32;text-align:left;list-style:disc}
  .ctbl td .ctoopts li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:175px}   /* one line per option — no wrapping sprawl */
  .ctbl td .ctoopts .cmore{list-style:none;margin-left:-13px;max-width:none;color:var(--dim);font-style:italic}
  /* value-score pill + fair-price standing chip (catalog "Value" / "vs peers" columns) */
  .valpill{display:inline-block;min-width:24px;text-align:center;font-variant-numeric:tabular-nums;font-weight:600;color:#cfe6fb;border:1px solid color-mix(in srgb,var(--link) 45%,var(--line));border-radius:6px;padding:0 6px}
  .vrel{font-variant-numeric:tabular-nums;font-weight:600;border-radius:6px;padding:0 6px;border:1px solid var(--line)}
  .vrel.vgood{color:var(--ok);border-color:#1f5a2a;background:color-mix(in srgb,var(--ok) 10%,transparent)}
  .vrel.vbad{color:var(--gap);border-color:#5a2a2a;background:color-mix(in srgb,var(--gap) 9%,transparent)}
  .vrel.vmid{color:var(--dim)}
  .cdetail{padding:14px 18px 18px 34px}
  /* PDP content section = a card (specs · ports · configurator · price history all share this) */
  .cdsec{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:15px 18px;margin:0 0 14px}
  .cdsec h4{margin:0 0 13px;font-size:13.5px;font-weight:650;letter-spacing:-.1px;color:var(--txt);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .pdp-h-n{font-size:11px;color:var(--dim);font-weight:500;background:var(--chip);border-radius:10px;padding:1px 8px}
  .sgrid{display:grid;grid-template-columns:max-content 1fr;gap:2px 14px;font-size:12.5px;max-width:780px}
  .sgrid .k{color:var(--dim);white-space:nowrap} .sgrid .v{color:var(--txt)}
  .dhead{margin:0 0 14px;padding-bottom:12px;border-bottom:1px solid var(--line)}
  .dh-top{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
  .dh-cat{font-size:11px;color:var(--dim)}
  .dh-name{font-size:16px;font-weight:600;margin:5px 0 2px;color:var(--txt)}
  .dh-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:var(--dim);margin:0 0 8px;letter-spacing:.3px}
  .dh-code b{color:var(--dim);font-weight:600;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:10.5px;text-transform:uppercase;letter-spacing:.4px;margin-right:6px}
  .dh-meta{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap}
  .dh-price-n{font-size:19px;color:var(--txt);font-variant-numeric:tabular-nums}
  .dh-range{font-size:12px;color:var(--link);border:1px solid var(--line);border-radius:6px;padding:1px 7px;margin-left:4px;white-space:nowrap;font-variant-numeric:tabular-nums}
  .dh-list{color:var(--dim);font-size:13px}
  .dh-save{color:var(--ok);font-size:12px;font-weight:600}
  .dh-rate{color:#e0b34d;font-size:13px}
  /* availability lives in the identity-chip row: green "in stock" chip (out-of-stock uses .eolchip) */
  .availchip{font-size:10px;color:var(--ok);border:1px solid #1f5a2a;border-radius:6px;padding:0 6px;background:#0f1f14;font-weight:600}
  .dh-link{display:inline-block;margin-top:9px;font-size:12.5px;color:var(--link);border:1px solid color-mix(in srgb,var(--link) 50%,transparent);border-radius:7px;padding:4px 10px;text-decoration:none}
  .dh-link:hover{background:color-mix(in srgb,var(--link) 14%,transparent)}
  /* Where to buy — the product page's primary click-through CTA (OEM + retailer source links) */
  .wtb{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:13px}
  .wtb-label{width:100%;font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);margin-bottom:-1px}
  .wtb-btn{display:inline-flex;align-items:center;font-size:13px;font-weight:600;text-decoration:none;padding:7px 13px;border-radius:8px;border:1px solid var(--line);transition:transform .08s ease,background .12s,border-color .12s}
  .wtb-btn:hover{transform:translateY(-1px)}
  .wtb-oem{color:#fff;background:color-mix(in srgb,var(--accent) 86%,black);border-color:var(--accent)}
  .wtb-oem:hover{background:var(--accent)}
  .wtb-shop{color:var(--txt);background:var(--panel2);border-color:color-mix(in srgb,var(--link) 45%,var(--line))}
  .wtb-shop:hover{background:var(--chip);border-color:var(--link)}
  .wtb-shop .wtb-amt{font-size:14.5px;font-weight:700;color:var(--link);margin:0 1px}   /* the price is the conversion hook — emphasize it */
  .wtb-shop.best{border-color:var(--ok);background:color-mix(in srgb,var(--ok) 13%,var(--panel2))}
  .wtb-shop.best .wtb-amt{color:var(--ok)}
  .wtb-best-tag{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--ok);margin-left:6px;border:1px solid #1f5a2a;border-radius:5px;padding:0 4px;background:#0f1f14}
  .wtb-shop.oos{opacity:.6;border-style:dashed}
  .wtb-shop.oos .wtb-amt{color:var(--dim)}
  .wtb-oos-tag{font-size:9px;text-transform:uppercase;letter-spacing:.3px;color:var(--dim);margin-left:6px}
  .wtb-retail{font-size:12px}
  .wtbfoot{border-top:1px solid var(--line);padding-top:14px;margin-top:6px}   /* repeated buy CTA at the foot of a long detail page */
  /* catalog row: the retail price cell is a direct link to the cheapest retailer listing */
  .retaillink{color:inherit;text-decoration:none}
  /* catalog empty / error state — never a dead-end blank table; always a message + a recovery action */
  .catempty{text-align:center;padding:40px 16px;color:var(--dim)}
  .catempty-h{font-size:16px;color:var(--txt);font-weight:600;margin-bottom:4px}
  .catempty-s{font-size:13px;margin-bottom:14px}
  .cattrunc{margin:11px 2px 2px;padding:9px 13px;font-size:12.5px;color:var(--dim);background:var(--panel2);border:1px solid var(--line);border-radius:8px;text-align:center}
  .cattrunc b{color:var(--txt)}
  .retaillink:hover{text-decoration:underline;text-underline-offset:2px}
  /* price-gouging flag — a retailer's RSP as a multiple of the manufacturer's MSRP (buyer warning at ≥1.5× / ≥2×) */
  .gouge{display:inline-block;font-size:9px;font-weight:700;border-radius:5px;padding:0 5px;margin-left:5px;white-space:nowrap;letter-spacing:.2px;vertical-align:1px}
  .gouge-1{color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 40%,var(--line))}
  .gouge-2{color:var(--gap);border:1px solid color-mix(in srgb,var(--gap) 45%,var(--line));background:color-mix(in srgb,var(--gap) 10%,transparent)}
  .gouge-3{color:#fff;background:color-mix(in srgb,var(--gap) 78%,black);border:1px solid var(--gap)}
  .wtb-shop.gouging{border-color:color-mix(in srgb,var(--gap) 55%,var(--line))}
  /* public search: progressive disclosure of the power (field:value) syntax */
  .pwr{display:inline;margin-left:6px}
  .pwr summary{display:inline;cursor:pointer;color:var(--link);font-size:12px;list-style:none}
  .pwr summary::-webkit-details-marker{display:none}
  .pwr summary::before{content:"⌕ "}
  .pwr[open] summary{color:var(--dim)}
  .pwr[open] summary::before{content:""}
  .pwr code{font-size:11.5px}
  .specwrap{column-width:340px;column-gap:30px}
  .specgrp{margin:0 0 12px;break-inside:avoid}
  .sgname{font-size:10.5px;color:var(--dim);font-weight:700;letter-spacing:.4px;margin:0 0 3px;opacity:.8}
  .sgnote{font-size:10px;font-weight:400;text-transform:none;letter-spacing:0;color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 40%,transparent);border-radius:4px;padding:0 5px;vertical-align:middle}
  .portlist{margin:4px 0;padding-left:20px;font-size:12.5px;columns:220px;max-width:none;color:var(--txt)}
  .portlist li{margin:1px 0;break-inside:avoid}
  .ogroup{border:1px solid var(--line);border-radius:8px;margin:8px 0;background:var(--panel2);padding:8px 10px}
  .ogroup .gh{font-weight:600;margin-bottom:6px;font-size:12.5px}
  .ogroup .gh .gc{color:var(--dim);font-weight:400;font-size:11px}
  .oopts{display:flex;flex-wrap:wrap;gap:6px}
  .oopt{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);background:var(--bg);border-radius:7px;padding:5px 9px;max-width:320px;font-size:12px;cursor:pointer;transition:border-color .1s}
  .oopt:hover{border-color:var(--link)}
  .oopt.sel{border-color:var(--ok);background:#16241a;box-shadow:0 0 0 1px var(--ok) inset}
  .oopt .od{line-height:1.25}
  .oopt .op{color:var(--dim);font-variant-numeric:tabular-nums;font-size:11px;display:flex;gap:6px;align-items:center;margin-top:2px}
  .oopt.sel .op{color:var(--ok)}
  .odiff{font-size:10px;padding:0 5px;border-radius:8px;border:1px solid var(--line);color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap}
  .odiff.up{color:#ff9d4d;border-color:#5a3a1f}
  .odiff.down{color:var(--ok);border-color:#1f5a2a}
  .odiff.cur{color:var(--link);border-color:#2f4a6b}
  .cfgtotal{font-size:13px;margin:2px 0 10px;padding:7px 11px;background:var(--panel2);border:1px solid var(--line);border-radius:8px}
  .cfgtotal .cfgt{font-size:17px;color:var(--ok);font-variant-numeric:tabular-nums}
  .cfgtotal .reset{cursor:pointer;color:var(--link);font-size:11px;margin-left:8px}
  .cfgnote{color:var(--dim);font-size:12px;line-height:1.5;border-color:var(--warn)55;background:color-mix(in srgb, var(--warn) 7%, var(--panel2))}
  .cfgnote a{color:var(--link)}
  details.craw{margin-top:10px} details.craw pre{background:#0b0d11;border:1px solid var(--line);border-radius:8px;padding:10px;overflow:auto;max-height:300px;font-size:11px}

