/* [FRONT-REDESIGN] YitaoTrade · Glass World — public front-end stylesheet (2026-10).
   The ONLY stylesheet of PUBLIC pages (app/Company/views/layout.php). Staff/admin and the coming-soon page keep site.css + glass.css.
   [review-30cd98a P2-5] site.css + glass.css (114 KB raw) are no longer loaded on public pages: the Glass World tokens (--gw-*, same values
   as glass.css) and the few element/legacy rules public pages still used are in the "base" block below.
   Ported from docs/design-previews/frontend-redesign/mockup/proposal.css (mockup-only rules removed).
   Logical properties throughout (RTL-ready). System font stack only. Light only. No inline styles (CSP style-src 'self'). */
/* ---- base (was glass.css :root + site.css/glass.css element rules) ---- */
:root{
  --gw-bg:#f4f6fb;--gw-surface:#ffffff;--gw-ink:#1a1f3a;--gw-muted:#3d4260;--gw-sep:#d6d9e6;--gw-sep-soft:#e6e8f1;
  --gw-link:#3730a3;--gw-accent:#4338ca;--gw-accent-2:#2563eb;
  --gw-ink-2:#2f3350;--gw-preview-bar-bg:#fef3c7;--gw-preview-bar-fg:#4a3000;--gw-preview-bar-border:#fde68a; /* [review-final M-1] DESIGN.md ink-2 + preview-bar-* (were only in glass.css) */
  --gw-glass:rgba(255,255,255,.62);--gw-glass-strong:rgba(255,255,255,.78);--gw-glass-fallback:#fdfdff;
  --gw-backdrop:radial-gradient(55% 60% at 12% 18%,rgba(165,180,252,.50),transparent 72%),radial-gradient(55% 60% at 88% 12%,rgba(249,168,212,.34),transparent 72%),radial-gradient(55% 60% at 70% 95%,rgba(125,211,252,.40),transparent 72%),linear-gradient(135deg,#eef2ff,#f6f3ff,#eef8ff);
  --gw-backdrop-calm:radial-gradient(60% 50% at 0% 0%,rgba(199,210,254,.45),transparent 70%),radial-gradient(50% 40% at 100% 0%,rgba(224,231,255,.5),transparent 70%),linear-gradient(180deg,#f5f6fb,#f2f4f9);
  --gw-btn:linear-gradient(135deg,#4338ca,#2563eb);--gw-btn-hover:linear-gradient(135deg,#3730a3,#1d4ed8);
  --gw-band:linear-gradient(100deg,#eef0ff,#f5eefe);--gw-footer:linear-gradient(180deg,#f1f3fa,#eceff8);
  --gw-seg-bg:#e4e7f3;--gw-tag-bg:#e0e7ff;--gw-tag-fg:#3730a3;--gw-tag2-bg:#e8e9f2;--gw-tag2-fg:#2f3350;
  --gw-ph:linear-gradient(135deg,#e4e7f3,#ffffff);
  --gw-r-sm:12px;--gw-r-md:18px;--gw-r-lg:24px;--gw-r-xl:28px;--gw-pill:980px;
  --gw-sh-1:0 1px 0 rgba(255,255,255,.8) inset,0 1px 2px rgba(16,24,40,.05),0 12px 32px -14px rgba(16,24,40,.18);
  --gw-sh-2:0 2px 6px rgba(16,24,40,.06),0 24px 48px -20px rgba(16,24,40,.22);
  --gw-focus:0 0 0 3px #ffffff,0 0 0 5px #4338ca;
  --gw-font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Segoe UI",system-ui,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans","Noto Sans Arabic","Geeza Pro",Tahoma,"Helvetica Neue",Arial,sans-serif;
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
html{background-color:var(--gw-bg)}
body{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:var(--gw-link);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3{color:var(--gw-ink);letter-spacing:-.02em}
h1{font-weight:700;letter-spacing:-.035em}
fieldset{border:0;padding:0;margin:0}
:where(input,select,textarea,button){font:inherit;color:inherit}
:where(input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select,textarea){width:100%;font-size:16px;padding:10px 12px;color:var(--gw-ink);background-color:var(--dk-field,#fff);border:1px solid var(--dk-field-line,var(--gw-sep));border-radius:var(--gw-r-sm);min-height:44px}
:where(textarea){min-height:96px}
:where(input,select,textarea):focus{border-color:var(--dk-focus-line,#6366f1)}
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:none;box-shadow:var(--gw-focus);border-radius:12px}
.ab-hp{position:absolute!important;inset-inline-start:-9999px!important;width:1px;height:1px;overflow:hidden}
.skip{background-color:var(--gw-accent);color:#fff;min-height:44px;display:inline-flex;align-items:center;padding-inline:16px}
.prelaunch-bar{background:var(--gx-prelaunch-bg);color:var(--gx-prelaunch-fg);border-bottom:1px solid var(--gx-prelaunch-border);padding:9px 16px;font-size:14px;line-height:1.5;text-align:center}
.prelaunch-bar a{color:var(--gw-link);font-weight:600;margin-inline-start:6px}
.preview-bar{background-color:var(--gw-preview-bar-bg);color:var(--gw-preview-bar-fg);border-bottom:1px solid var(--gw-preview-bar-border);padding:10px 0;font-size:14px;font-weight:700}
.preview-bar a{color:var(--gw-preview-bar-fg);text-decoration:underline}
/* floating toolbar (desktop only; hidden ≤720px where the tab bar replaces it) */
.floatbar{position:fixed;inset-inline-end:16px;top:50%;transform:translateY(-50%);z-index:30;display:flex;flex-direction:column;gap:4px;padding:6px;background-color:var(--gw-glass-fallback);border:1px solid var(--dk-glass-edge,rgba(255,255,255,.9));border-radius:var(--gw-pill);box-shadow:var(--gw-sh-2)}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.floatbar{background-color:var(--gw-glass);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}
.floatbar__btn{position:relative;display:flex;align-items:center;justify-content:center;width:48px;height:48px;min-width:44px;min-height:44px;color:var(--gw-ink);border-radius:var(--gw-pill);transition:background-color .15s,color .15s}
.floatbar__btn:hover,.floatbar__btn:focus-visible{background-color:var(--dk-hover,rgba(67,56,202,.10));color:var(--gw-link);text-decoration:none}
.floatbar__btn--top{opacity:.9}
.floatbar__lbl{position:absolute;inset-inline-end:56px;white-space:nowrap;background-color:var(--dk-raised,#fff);color:var(--gw-ink);border:1px solid var(--gw-sep);box-shadow:var(--gw-sh-1);font-size:13px;font-weight:600;padding:6px 12px;border-radius:var(--gw-pill);opacity:0;pointer-events:none;transition:opacity .15s}
.floatbar__btn:hover .floatbar__lbl,.floatbar__btn:focus-visible .floatbar__lbl{opacity:1}
.count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:var(--gw-pill);background-color:var(--gw-accent);color:#fff;font-size:12px;font-weight:700;line-height:1}
.count-badge--float{position:absolute;top:-4px;inset-inline-end:-4px;min-width:18px;height:18px;font-size:11px;padding:0 4px}
.ico{display:inline-block;flex:none;vertical-align:-.15em}
/* sourcing dialog (opened from the toolbar / bands when JS is on) */
.gx-dialog{padding:24px;max-width:560px;width:calc(100vw - 32px);border:1px solid var(--gw-sep-soft);border-radius:var(--gw-r-xl);box-shadow:var(--gw-sh-2);color:var(--gw-ink);background:var(--dk-raised,#fff)}
.gx-dialog::backdrop{background:var(--dk-backdrop,rgba(26,31,58,.28))}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.gx-dialog::backdrop{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}}
.gx-dialog__head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding-block-end:12px;border-block-end:1px solid var(--gw-sep-soft)}
.gx-dialog__head h2{margin:0;font-size:22px}
.gx-dialog__head .gx-iconbtn{display:grid}
.gx-dialog>p{margin:12px 0 0;color:var(--gw-muted);font-size:15px}
.gx-dialog .gx-form{padding:16px 0 0}
/* ---- end base ---- */
:root{--gx-glass:rgba(255,255,255,.62);--gx-glass-solid:rgba(255,255,255,.9);--gx-hover:rgba(67,56,202,.08);--gx-scrim:rgba(26,31,58,.72);--gx-fade:rgba(244,246,251,.85);--gx-on-grad:rgba(255,255,255,.22);--gx-wrap:1240px;--gx-gut:24px;--gx-head:64px;--gx-ink-3:#5b6080;--gx-ok:#05603a;--gx-ok-bg:#ecfdf3;--gx-warn:#8a4b00;--gx-warn-bg:#fff4e0;--gx-sold:#4b5068;--gx-sold-bg:#eceef5;--gx-prelaunch-bg:#fff7e6;--gx-prelaunch-fg:#5c3b00;--gx-prelaunch-border:#f3d9a4}
html{-webkit-text-size-adjust:100%;scroll-padding-top:calc(var(--gx-head) + 16px)}
body.gx{margin:0;font:16px/1.6 var(--gw-font);color:var(--gw-ink);background:var(--gw-bg);font-variant-numeric:tabular-nums;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;overflow-wrap:break-word}
body.gx>main{flex:1 0 auto;width:100%}
body.gx a{text-underline-offset:3px;text-decoration-thickness:1px}
::selection{background:var(--dk-sel-bg,#c7d2fe);color:var(--dk-sel-fg,#1a1f3a)}
.gx-wrap{max-width:var(--gx-wrap);margin-inline:auto;padding-inline:var(--gx-gut)}
.gx-ico{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.gx-ico--sm{width:16px;height:16px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;font-size:12px}


/* ---------- header: one sticky glass row + one in-flow nav row ---------- */
.gx-head{position:sticky;top:0;z-index:30;background:var(--gw-glass-fallback);border-bottom:1px solid var(--gw-sep-soft)}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.gx-head{background:var(--gx-glass);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}
.gx-head__row{display:flex;align-items:center;gap:20px;height:var(--gx-head)}
.gx-brand{display:flex;align-items:center;gap:10px;min-height:44px;font-weight:700;color:var(--gw-ink);text-decoration:none;flex:none}
.gx-brand img{width:46px;height:46px} /* no radius: the source mark carries its own corners + edge ring */
.gx-brand b{font-size:17px;font-weight:800;letter-spacing:-.02em;line-height:1.1;display:block}
.gx-brand small{display:block;font-size:12px;color:var(--gw-muted);line-height:1.2}
/* Logo (DESIGN.md): artwork wordmark beside the mark; source lockup ratio (gap 19.08/64, wordmark box 32.21/64 of mark). Lockup never mirrors in RTL. */
.gx-brand--wm{gap:14px;direction:ltr}
.gx-brand .brand__wm{display:block;line-height:0}
.gx-brand .brand__wm img{display:block;width:auto;height:23px}
.gx-search{flex:1;max-width:620px;display:flex;align-items:center;height:44px;background:var(--dk-field,#fff);border:1px solid var(--dk-field-line,var(--gw-sep));border-radius:var(--gw-pill);padding-inline-start:6px;box-shadow:0 1px 2px rgba(16,24,40,.06)}
.gx-search select{border:0;background:var(--gw-seg-bg);color:var(--gw-ink);font:600 14px var(--gw-font);height:32px;border-radius:var(--gw-pill);padding-inline:12px 8px;margin-inline-end:8px}
.gx-search input{flex:1;min-width:0;border:0;outline:0;font:16px var(--gw-font);color:var(--gw-ink);background:none}
.gx-search input::placeholder{color:var(--gx-ink-3)}
.gx-search button{height:36px;margin-inline:4px;padding-inline:18px;border:0;border-radius:var(--gw-pill);background:var(--gw-btn);color:#fff;font:600 15px var(--gw-font);display:flex;gap:6px;align-items:center}
.gx-actions{display:flex;align-items:center;gap:4px;margin-inline-start:auto}
.gx-act{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding-inline:12px;border-radius:var(--gw-pill);color:var(--gw-ink);text-decoration:none;font-size:14px;font-weight:500;white-space:nowrap}
.gx-act:hover{background:var(--gx-hover);color:var(--gw-link)}
.gx-act--list{border:1px solid var(--gw-sep);background:var(--gw-surface)}
.gx-count{min-width:20px;height:20px;padding-inline:6px;border-radius:var(--gw-pill);background:var(--gw-accent);color:#fff;font-size:12px;font-weight:700;display:inline-grid;place-items:center}
.gx-nav{background:var(--gx-glass);border-bottom:1px solid var(--gw-sep-soft)}
.gx-nav__row{display:flex;align-items:center;gap:4px;height:48px}
.gx-nav a{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding-inline:12px;border-radius:var(--gw-pill);color:var(--gw-ink);text-decoration:none;font-size:15px;font-weight:500}
.gx-nav a:hover,.gx-nav a[aria-current]{background:var(--gx-hover);color:var(--gw-link)}
.gx-nav a[aria-current]{font-weight:700}
.gx-nav__end{margin-inline-start:auto}
.gx-burger,.gx-iconbtn{display:none;width:44px;height:44px;border-radius:var(--gw-pill);border:1px solid var(--gw-sep);background:var(--gw-surface);place-items:center;color:var(--gw-ink)}

/* ---------- buttons, tags, pills ---------- */
.gx-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding-inline:22px;padding-block:6px;border-radius:var(--gw-pill);font:600 15px/1.25 var(--gw-font);text-decoration:none;border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:background-color .18s,box-shadow .18s,transform .18s}
.gx-btn--primary{background:#4338ca var(--gw-btn);color:#fff}
body.gx a.gx-btn--primary{color:#fff} /* [FRONT-FIX] 只改字色：压过 glass.css 的 .device-card a:not(.btn) 深色字，不影响悬停渐变 */
.gx-btn--primary:hover{background-image:var(--gw-btn-hover)}
.gx-btn--ghost{background:var(--gw-surface);color:var(--gw-ink);border-color:var(--gw-sep)}
.gx-btn--ghost:hover{border-color:var(--dk-tint-hover,#a5b4fc);color:var(--gw-link)}
.gx-btn--lg{min-height:52px;padding-inline:28px;font-size:16px}
.gx-btn--block{width:100%}
.gx-link{color:var(--gw-link);font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:4px}
.gx-link:hover{text-decoration:underline}
.gx-tag{display:inline-flex;align-items:center;height:24px;padding-inline:10px;border-radius:var(--gw-pill);font-size:12px;font-weight:600;background:var(--gw-tag-bg);color:var(--gw-tag-fg)}
.gx-tag--lot{background:var(--gw-tag2-bg);color:var(--gw-tag2-fg)}
.gx-st{display:inline-flex;align-items:center;gap:6px;height:24px;padding-inline:10px;border-radius:var(--gw-pill);font-size:12px;font-weight:600}
.gx-st::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.gx-st--available{background:var(--gx-ok-bg);color:var(--gx-ok)}
.gx-st--negotiating{background:var(--gx-warn-bg);color:var(--gx-warn)}
.gx-st--reserved{background:var(--dk-tint,#eef0ff);color:var(--dk-tag-fg,#3730a3)}
.gx-st--sold{background:var(--gx-sold-bg);color:var(--gx-sold)}

/* ---------- surfaces ---------- */
.gx-card{background:var(--gw-surface);border:1px solid var(--gw-sep-soft);border-radius:var(--gw-r-lg);box-shadow:var(--gw-sh-1)}
.gx-backdrop{background:var(--gw-backdrop)}
.gx-calm{background:var(--gw-backdrop-calm)}
.gx-sec{padding-block:72px 0}
.gx-sec__head{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-block-end:24px}
.gx-sec__head h2{margin:0;font-size:28px;line-height:1.2;letter-spacing:-.02em}
.gx-sec__head p{margin:6px 0 0;color:var(--gw-muted)}
.gx-crumb{font-size:14px;color:var(--gw-muted);display:flex;gap:6px;flex-wrap:wrap;padding-block:20px 8px}
.gx-crumb a{color:var(--gw-muted);text-decoration:none}.gx-crumb a:hover{color:var(--gw-link);text-decoration:underline}
/* Page title: 40px desktop / 30px mobile (DESIGN type steps); the mobile size is set in the ≤720px block below */
.gx-phead h1{font-size:40px;line-height:1.15;letter-spacing:-.03em;margin:12px 0}
.gx-seg{display:inline-flex;gap:2px;padding:3px;background:var(--gw-seg-bg);border-radius:var(--gw-pill)}
.gx-seg a,.gx-seg label{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding-inline:14px;border-radius:var(--gw-pill);color:var(--gw-ink);font-size:14px;font-weight:600;text-decoration:none;cursor:pointer}
.gx-seg [aria-current],.gx-seg input:checked+span{background:var(--dk-raised,#fff);box-shadow:var(--dk-seg-sh,0 1px 3px rgba(16,24,40,.12))}
.gx-seg em{font-style:normal;color:var(--gx-ink-3);font-weight:500}

/* ---------- home hero ---------- */
.gx-promise{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin-block-start:48px;border-block-start:1px solid var(--gw-sep-soft)}
.gx-promise li{list-style:none;display:flex;gap:12px;padding:20px 20px 0 0;font-size:14px;color:var(--gw-muted);line-height:1.5}
.gx-promise b{display:block;color:var(--gw-ink);font-size:15px;margin-block-end:2px}
.gx-promise .gx-ico{color:var(--dk-accent-fg,var(--gw-accent));margin-block-start:2px}
.gx-promise{padding:0;margin-inline:0}

/* ---------- listing cards (grid) ---------- */
.gx-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
.gx-tile{display:flex;flex-direction:column;overflow:hidden;color:inherit;text-decoration:none;transition:box-shadow .2s,transform .2s}
.gx-tile:hover{box-shadow:var(--gw-sh-2);transform:translateY(-2px)}
/* DESIGN.md Multi-column grids: the closing "all listings" tile spans the tracks left on the last row; hidden when the row is full (4 / 3 / 2 columns) */
.gx-gridmore{display:flex;align-items:center;justify-content:center;gap:8px;padding:24px;min-block-size:120px;color:var(--gw-link);font-weight:700;text-decoration:none;border-style:dashed;box-shadow:none;background:transparent}
.gx-gridmore:hover{text-decoration:underline}
:is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(4n+1){display:none}
:is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(4n+2){grid-column:span 3}
:is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(4n+3){grid-column:span 2}
.gx-tile__media{position:relative;aspect-ratio:4/3;background:var(--gw-ph)}
.gx-tile__media img{width:100%;height:100%;object-fit:cover}
.gx-tile__st{position:absolute;inset-block-end:10px;inset-inline-start:10px}
.gx-tile__body{padding:16px 16px 18px;display:flex;flex-direction:column;gap:8px;flex:1}
.gx-tile h3{margin:0;font-size:16px;line-height:1.35;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.gx-tile__meta{font-size:13px;color:var(--gw-muted);display:flex;gap:6px;align-items:center}
.gx-tile__price{margin-block-start:auto;padding-block-start:10px;border-block-start:1px solid var(--gw-sep-soft);display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:14px}
.gx-tile__price b{font-size:16px}
.gx-tile__price span{color:var(--gw-muted)}

/* kind panels */
.gx-kinds{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.gx-kind{display:grid;grid-template-columns:1fr 200px;gap:20px;padding:28px;text-decoration:none;color:inherit;align-items:center;overflow:hidden}
.gx-kind h3{margin:0 0 6px;font-size:22px;letter-spacing:-.02em}
.gx-kind p{margin:0 0 16px;color:var(--gw-muted)}
.gx-kind__imgs{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.gx-kind__imgs img{border-radius:12px;aspect-ratio:1;object-fit:cover}
.gx-kind__n{font-size:14px;color:var(--gw-muted);margin-block-end:14px}
.gx-kind__n b{color:var(--gw-ink);font-size:15px}

/* steps */
.gx-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;counter-reset:s;padding:0;margin:0}
.gx-steps li{list-style:none;position:relative;padding:0 24px 0 0}
.gx-steps li::before{counter-increment:s;content:counter(s);display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--gw-surface);border:1px solid var(--dk-tint-line,#c7d2fe);color:var(--gw-link);font-weight:700;margin-block-end:14px;position:relative;z-index:1}
.gx-steps li::after{content:"";position:absolute;inset-block-start:18px;inset-inline:44px 8px;border-block-start:1.5px dashed var(--dk-tint-line,#a5b4fc)}
.gx-steps li:last-child::after{display:none}
.gx-steps b{display:block;font-size:16px;margin-block-end:4px}
.gx-steps p{margin:0;font-size:14px;color:var(--gw-muted)}
.gx-fine{font-size:13px;color:var(--gw-muted);margin-block-start:20px}

.gx-bands{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.gx-band{background:var(--gw-band);border-radius:var(--gw-r-lg);padding:28px;display:flex;flex-direction:column;gap:10px;align-items:flex-start;border:1px solid var(--gw-sep-soft)}
.gx-band h3{margin:0;font-size:22px;letter-spacing:-.02em}
.gx-band p{margin:0 0 6px;color:var(--gw-muted);max-width:36em}

/* ---------- footer ---------- */
.gx-foot{margin-block-start:96px;background:var(--gw-footer);border-block-start:1px solid var(--gw-sep-soft);color:var(--gw-muted);font-size:14px}
/* DESIGN.md Footer column layout (Alex 2026-10-23 23:54): brand widest, link columns at content width spread edge to edge — the last column ends on the container's end edge for any column count */
.gx-foot__grid{display:flex;flex-wrap:wrap;justify-content:space-between;gap:32px;padding-block:48px 32px}
.gx-foot__grid>*{flex:none;min-width:0}
.gx-foot__grid>.gx-foot__brand{flex:0 1 26rem}
.gx-foot h4{margin:0 0 12px;color:var(--gw-ink);font-size:14px}
.gx-foot ul{list-style:none;margin:0;padding:0;display:grid;gap:4px}
.gx-foot a{color:var(--gw-ink);text-decoration:none;display:inline-flex;min-height:32px;align-items:center}
.gx-foot a:hover{color:var(--gw-link);text-decoration:underline}
.gx-foot__brand p{margin:12px 0 0;max-width:30em;line-height:1.6}
.gx-foot__legal{border-block-start:1px solid var(--gw-sep);padding-block:18px 28px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px}

/* ---------- mobile bottom bar ---------- */
.gx-tabbar{display:none}

/* ---------- catalogue ---------- */
.gx-cat{display:grid;grid-template-columns:272px minmax(0,1fr);gap:28px;align-items:start;margin-block-start:28px}
/* [review-r6 B2/P3-6] desktop: sticky but never taller than the viewport (its own scroll); ≤720px: in normal flow, never sticky */
.gx-facets{padding:8px 20px 20px;position:sticky;top:calc(var(--gx-head) + 16px);max-height:calc(100vh - var(--gx-head) - 32px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
.gx-facet{border-block-end:1px solid var(--gw-sep-soft);padding-block:16px}
.gx-facet:last-child{border:0}
.gx-facet h2{font-size:14px;margin:0 0 8px;letter-spacing:0}
.gx-opt{display:flex;align-items:center;gap:10px;min-height:36px;font-size:15px;color:var(--gw-ink);text-decoration:none;border-radius:12px;padding-inline:8px;margin-inline:-8px}
.gx-opt:hover{background:var(--dk-hover,#f3f4fa)}
.gx-opt i{width:18px;height:18px;border:1.5px solid var(--dk-control,#9aa0bd);border-radius:4px;flex:none;display:grid;place-items:center}
.gx-opt--radio i{border-radius:50%}
.gx-opt[aria-current=true] i{background:var(--gw-accent);border-color:var(--gw-accent)}
.gx-opt[aria-current=true] i::after{content:"";width:8px;height:5px;border:2px solid #fff;border-block-start:0;border-inline-end:0;transform:rotate(-45deg) translate(1px,-1px)}
.gx-opt--radio[aria-current=true] i::after{width:6px;height:6px;border:0;border-radius:50%;background:#fff;transform:none}
.gx-opt span{flex:1}
.gx-opt em{font-style:normal;font-size:13px;color:var(--gx-ink-3)}
.gx-opt--zero{color:var(--gx-ink-3)}
.gx-select{width:100%;height:44px;border:1px solid var(--dk-field-line,var(--gw-sep));border-radius:12px;padding-inline:12px;font:15px var(--gw-font);background:var(--dk-field,#fff);color:var(--gw-ink)}
.gx-toolbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-block-end:14px}
.gx-toolbar .gx-search{max-width:none}
.gx-chips{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-block-end:18px;font-size:14px}
.gx-chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding-inline:12px 8px;border-radius:var(--gw-pill);background:var(--gw-surface);border:1px solid var(--dk-tint-line,#c7d2fe);color:var(--gw-link);font-weight:600;text-decoration:none}
.gx-chip svg{width:14px;height:14px}
.gx-resn{margin-inline-end:6px;color:var(--gw-muted)}
.gx-resn b{color:var(--gw-ink)}
.gx-rows{display:grid;gap:16px}
.gx-row{display:grid;grid-template-columns:240px minmax(0,1fr) 224px;gap:24px;padding:16px;align-items:stretch}
.gx-row__media{position:relative;border-radius:18px;overflow:hidden;aspect-ratio:4/3;background:var(--gw-ph)}
.gx-row__media img{width:100%;height:100%;object-fit:cover}
.gx-row__body{display:flex;flex-direction:column;gap:8px;min-width:0;padding-block:4px}
.gx-row__tags{display:flex;gap:6px;flex-wrap:wrap}
.gx-row h3{margin:0;font-size:20px;line-height:1.3;letter-spacing:-.015em}
.gx-row h3 a{color:var(--gw-ink);text-decoration:none}.gx-row h3 a:hover{color:var(--gw-link);text-decoration:underline}
.gx-row__ref{font:13px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--gw-muted)}
.gx-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 20px;margin:6px 0 0;font-size:14px;border-block-start:1px solid var(--gw-sep-soft);padding-block-start:10px}
.gx-facts dt{color:var(--gw-muted);font-size:12px}
.gx-facts dd{margin:0;font-weight:600;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden} /* long model numbers: 2 lines on cards, full on the detail page */
.gx-row__side{display:flex;flex-direction:column;gap:8px;justify-content:space-between;border-inline-start:1px solid var(--gw-sep-soft);padding-inline-start:20px}
.gx-price{display:flex;flex-direction:column;gap:2px}
.gx-price small{font-size:12px;color:var(--gw-muted)}
.gx-price b{font-size:20px;letter-spacing:-.01em}
.gx-price span{font-size:13px;color:var(--gw-muted)}
.gx-price--ask b{font-size:16px;color:var(--gw-link)}
.gx-row--sold{opacity:.92}
.gx-row--sold .gx-row__media img{filter:grayscale(.6)}
.gx-pager{display:flex;gap:6px;justify-content:center;margin-block-start:28px}
.gx-pager a,.gx-pager span{min-width:44px;height:44px;display:grid;place-items:center;border-radius:var(--gw-pill);background:var(--gw-surface);border:1px solid var(--gw-sep);text-decoration:none;color:var(--gw-ink);font-weight:600}
.gx-pager [aria-current]{background:var(--gw-btn);color:#fff;border:0}
.gx-filterbtn{display:none}

/* ---------- detail ---------- */
.gx-detail{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:32px;align-items:start}
.gx-gallery__main{position:relative;border-radius:var(--gw-r-lg);overflow:hidden;aspect-ratio:4/3;background:var(--gw-ph);box-shadow:var(--gw-sh-1)}
.gx-gallery__main img{width:100%;height:100%;object-fit:cover}
.gx-gallery__n{position:absolute;inset-block-end:12px;inset-inline-end:12px;background:var(--gx-scrim);color:#fff;font-size:13px;font-weight:600;padding:4px 10px;border-radius:var(--gw-pill)}
.gx-thumbs{display:flex;gap:10px;margin-block-start:12px}
.gx-thumbs a{width:96px;aspect-ratio:4/3;border-radius:12px;overflow:hidden;border:2px solid transparent;display:block}
.gx-thumbs a[aria-current]{border-color:var(--dk-accent-fg,var(--gw-accent))}
.gx-thumbs img{width:100%;height:100%;object-fit:cover}
.gx-sum{padding:28px;position:sticky;top:calc(var(--gx-head) + 16px)}
.gx-sum h1{font-size:28px;line-height:1.2;letter-spacing:-.025em;margin:12px 0 6px;text-wrap-style:balance}
.gx-sum__ref{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--gw-muted)}
.gx-sum__ref code{font:13px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--gw-ink)}
.gx-sum__price{margin-block:20px 4px;padding:16px 18px;border-radius:18px;background:var(--dk-fill,#f3f4fa)}
.gx-sum__price small{display:block;font-size:13px;color:var(--gw-muted)}
.gx-sum__price b{font-size:30px;letter-spacing:-.02em;line-height:1.25}
.gx-sum__price b span{font-size:16px;font-weight:600;color:var(--gw-muted)}
.gx-sum__price p{margin:4px 0 0;font-size:13px;color:var(--gw-muted)}
.gx-kv{display:grid;grid-template-columns:auto 1fr;gap:10px 20px;margin:18px 0 22px;font-size:15px}
.gx-kv dt{color:var(--gw-muted)}
.gx-kv dd{margin:0;font-weight:600;text-align:end}
.gx-sum__cta{display:grid;gap:10px}
.gx-sum__cta2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.gx-sum__cta2 .gx-btn{min-inline-size:0;white-space:normal;text-align:center}
.gx-assure{margin:20px 0 0;padding:16px 0 0;border-block-start:1px solid var(--gw-sep-soft);list-style:none;display:grid;gap:8px;font-size:14px;color:var(--gw-muted)}
.gx-assure li{display:flex;gap:10px;align-items:flex-start}
.gx-assure .gx-ico{color:var(--gx-ok);margin-block-start:2px}
.gx-anchors{display:flex;gap:4px;margin-block:40px 20px;padding:4px;border-radius:var(--gw-pill);background:var(--gw-seg-bg);width:max-content}
.gx-anchors a{min-height:36px;padding-inline:16px;border-radius:var(--gw-pill);display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:var(--gw-ink);text-decoration:none}
.gx-anchors a[aria-current]{background:var(--dk-raised,#fff);box-shadow:var(--dk-seg-sh,0 1px 3px rgba(16,24,40,.12))}
.gx-h2{font-size:22px;letter-spacing:-.02em;margin:0 0 14px}
.gx-spec{padding:8px 24px}
.gx-spec dl{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:40px}
.gx-spec dl div{display:grid;grid-template-columns:minmax(min-content,140px) minmax(0,1fr);gap:16px;padding-block:13px;border-block-end:1px solid var(--gw-sep-soft);font-size:15px}
.gx-spec dt{color:var(--gw-muted)}
.gx-spec dd{margin:0;font-weight:500;overflow-wrap:anywhere}
.gx-spec .gx-unk{color:var(--gx-ink-3);font-weight:400}
.gx-spec__note{margin:0;padding-block:12px;font-size:13px;color:var(--gw-muted)}
.gx-desc{padding:24px 28px;max-width:none}
.gx-desc p{margin:0 0 10px;max-width:68ch}
.gx-desc ul{margin:0;padding-inline-start:20px}
.gx-two{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.gx-mini{padding:22px 24px}
.gx-mini h3{margin:0 0 6px;font-size:17px;display:flex;gap:8px;align-items:center}
.gx-mini p{margin:0;font-size:15px;color:var(--gw-muted)}
.gx-inq{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:0;overflow:hidden;overflow:clip} /* clip, not hidden: no scroll container, so the sticky context below follows the viewport */
.gx-inq__ctx{padding:32px;background:var(--gw-band)}
/* [R3 layout G3] the context column (title, item, next steps) is much shorter than the form beside it: it stays in view while the
   buyer fills the form instead of leaving a 600px empty band under it; ≤720px it is a normal block above the form */
.gx-inq__stick{display:flex;flex-direction:column;gap:18px;position:sticky;top:calc(var(--gx-head,64px) + 24px)}
/* closed / unavailable notice instead of the form: centred against the context column, not a short line over an empty half-card */
.gx-inq__form:not(:has(form)){display:flex;flex-direction:column;justify-content:center;padding:32px}
.gx-inq__ctx h2{margin:0;font-size:28px;letter-spacing:-.02em}
.gx-inq__item{display:flex;gap:12px;align-items:center;background:var(--dk-fill,#f3f4fa);border-radius:18px;padding:10px} /* [FRONT-FIX] 平面浅底块（notice-bg），不嵌套卡片 */
.gx-inq__item img{width:72px;height:54px;border-radius:var(--gw-pill);object-fit:cover}
.gx-inq__item b{font-size:14px;line-height:1.35;display:block}
.gx-inq__item span{font-size:12px;color:var(--gw-muted)}
.gx-next{list-style:none;margin:0;padding:0;display:grid;gap:12px;counter-reset:n}
.gx-next li{display:grid;grid-template-columns:28px 1fr;gap:10px;font-size:14px;color:var(--gw-muted)}
.gx-next li::before{counter-increment:n;content:counter(n);width:28px;height:28px;border-radius:50%;background:var(--gw-surface);border:1px solid var(--dk-tint-line,#c7d2fe);color:var(--gw-link);font-weight:700;display:grid;place-items:center;font-size:13px}
.gx-next b{color:var(--gw-ink);display:block}
.gx-form{padding:32px;display:grid;grid-template-columns:1fr 1fr;gap:16px 20px}
.gx-f{display:flex;flex-direction:column;gap:6px;font-size:14px;font-weight:600}
.gx-f--full{grid-column:1/-1}
.gx-f small{font-weight:400;color:var(--gw-muted)}
.gx-f input,.gx-f select,.gx-f textarea{height:44px;border:1px solid var(--dk-field-line,var(--gw-sep));border-radius:12px;padding-inline:14px;font:16px var(--gw-font);color:var(--gw-ink);background:var(--dk-field,#fff);font-weight:400}
.gx-f textarea{height:104px;padding-block:10px;resize:vertical}
.gx-f input::placeholder,.gx-f textarea::placeholder{color:var(--gx-ink-3)}
.gx-f input:focus,.gx-f select:focus,.gx-f textarea:focus{outline:none;box-shadow:var(--gw-focus);border-color:var(--dk-focus-line,#4338ca)}
.gx-f .req{color:var(--dk-danger,#b42318)}
.gx-tel{display:grid;grid-template-columns:110px 1fr;gap:8px}
.gx-f .gx-err{border-color:var(--dk-danger-edge,#b42318);background:var(--dk-danger-bg,#fff5f5)}
.gx-f .gx-errmsg{color:var(--dk-danger,#b42318);font-weight:500;font-size:13px;display:flex;gap:6px;align-items:center}
.gx-check{display:flex;gap:10px;align-items:flex-start;font-size:14px;font-weight:400;color:var(--gw-muted)}
.gx-check i{width:20px;height:20px;border:1.5px solid var(--dk-control,#9aa0bd);border-radius:var(--gw-pill);flex:none;margin-block-start:1px}
.gx-check a{color:var(--gw-link);text-decoration:underline}
.gx-submit{grid-column:1/-1;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.gx-submit small{color:var(--gw-muted);font-size:13px}
.gx-dock{display:none}

/* ---------- read page ---------- */
.gx-read{display:grid;grid-template-columns:220px minmax(0,700px) 1fr;gap:56px;align-items:start}
.gx-toc{position:sticky;top:calc(var(--gx-head) + 24px);font-size:14px}
.gx-toc b{display:block;color:var(--gw-muted);font-size:13px;margin-block-end:8px;font-weight:600}
.gx-toc a{display:flex;min-height:36px;align-items:center;padding-inline:14px;border-inline-start:2px solid var(--gw-sep);color:var(--gw-muted);text-decoration:none}
.gx-toc a[aria-current]{border-color:var(--dk-accent-fg,var(--gw-accent));color:var(--gw-ink);font-weight:600}
.gx-prose{font-size:17px;line-height:1.75}
.gx-prose h2{font-size:24px;line-height:1.3;letter-spacing:-.02em;margin:48px 0 12px;scroll-margin-top:90px}
.gx-prose h2:first-child{margin-block-start:0}
.gx-prose p{margin:0 0 16px;max-width:68ch}
.gx-prose ul{margin:0 0 16px;padding-inline-start:1.25em;max-width:68ch;list-style:disc}
.gx-prose li{margin-block-end:8px}
.gx-lede{font-size:20px;line-height:1.6;color:var(--gw-ink-2);max-width:40em;margin:0}
.gx-deflist{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0 8px}
.gx-deflist div{padding:20px 22px}
.gx-deflist dt{font-weight:700;font-size:17px;display:flex;gap:10px;align-items:center;margin-block-end:6px}
.gx-deflist dt .gx-ico{color:var(--dk-accent-fg,var(--gw-accent))}
.gx-deflist dd{margin:0;font-size:15px;line-height:1.6;color:var(--gw-muted)}
.gx-langs{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 16px}
.gx-langs span{padding:6px 14px;border-radius:var(--gw-pill);background:var(--gw-surface);border:1px solid var(--gw-sep);font-size:15px;font-weight:600}
.gx-company{padding:20px 22px;font-size:15px}
.gx-endcta{margin-block-start:56px;padding:32px;display:flex;justify-content:space-between;gap:24px;align-items:center;flex-wrap:wrap}
.gx-endcta h3{margin:0 0 4px;font-size:22px}
.gx-endcta p{margin:0;color:var(--gw-muted)}

/* ================= mobile ≤ 720px ================= */
@media (max-width:720px){
  :root{--gx-gut:16px;--gx-head:56px}
  body.gx{padding-block-end:76px}
  .gx-head__row{gap:10px}
  .gx-brand img{width:38px;height:38px}.gx-brand small{display:none}.gx-brand b{font-size:17px}
  .gx-brand--wm{gap:11px}.gx-brand .brand__wm img{height:19px}
  .gx-head .gx-search,.gx-actions .gx-act:not(.gx-act--list),.gx-nav{display:none}
  .gx-actions{gap:8px}
  .gx-act--list{min-height:44px;padding-inline:12px}
  .gx-act--list .gx-actlbl{display:none}
  .gx-burger,.gx-iconbtn{display:grid}
  .gx-tabbar{display:grid;grid-template-columns:repeat(4,1fr);position:fixed;inset-inline:0;inset-block-end:0;z-index:40;height:68px;padding-block-end:6px;background:var(--gx-glass-solid);border-block-start:1px solid var(--gw-sep-soft);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
  .gx-tabbar a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:11px;font-weight:600;color:var(--gw-muted);text-decoration:none;min-height:44px}
  .gx-tabbar a[aria-current]{color:var(--gw-link)}
  .gx-tabbar .gx-ico{width:22px;height:22px}
  .gx-promise{grid-template-columns:repeat(2,minmax(0,1fr));margin-block-start:28px;row-gap:4px}
  .gx-promise li{padding:14px 10px 0 0;font-size:13px}
  .gx-sec{padding-block-start:48px}
  .gx-sec__head h2{font-size:22px}
  .gx-sec__head .gx-seg{display:none}
  .gx-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  :is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(n){display:flex;grid-column:auto;min-block-size:88px;padding:16px 10px;flex-wrap:wrap;align-content:center;column-gap:4px;text-align:center} /* [R3 typo box-clip] ru “Все предложения (3)” in a 160px half-track: 10px sides, the arrow may wrap */
  .gx-gridmore>span{font-size:13px;overflow-wrap:normal;word-break:normal}
  :is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(odd){display:none}
  .gx-tile__body{padding:12px;gap:6px}
  .gx-tile h3{font-size:14px}
  .gx-tile__price{flex-direction:column;align-items:flex-start;gap:0;font-size:12px}
  .gx-tile__price b{font-size:14px}
  .gx-kinds,.gx-bands,.gx-two{grid-template-columns:minmax(0,1fr);gap:12px}
  .gx-kind{grid-template-columns:1fr 112px;padding:20px;gap:14px}
  .gx-kind h3{font-size:20px}.gx-kind p{font-size:14px;margin-block-end:10px}
  .gx-steps{grid-template-columns:1fr;gap:18px}
  .gx-steps li{display:grid;grid-template-columns:36px 1fr;column-gap:14px;padding:0}
  .gx-steps li::before{margin:0;grid-row:span 2}
  .gx-steps li::after{inset-block:40px -14px;inset-inline:17px auto;border-block-start:0;border-inline-start:1.5px dashed var(--dk-tint-line,#a5b4fc)}
  .gx-band{padding:22px}
  .gx-foot{margin-block-start:64px}
  .gx-foot__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;padding-block:36px 20px}
  .gx-foot__brand,.gx-foot__langs,.gx-foot__contact{grid-column:1/-1}
  .gx-foot__langs ul{display:flex;flex-wrap:wrap;column-gap:24px}
  .gx-phead{padding-block-end:16px}
  .gx-phead h1{font-size:30px}
  .gx-phead p{font-size:15px}
  .gx-cat{grid-template-columns:1fr;margin-block-start:12px}
  .gx-facets{display:none}
  .gx-toolbar{gap:8px}
  .gx-toolbar .gx-search{flex-basis:100%}
  .gx-filterbtn{display:inline-flex}
  .gx-chips{flex-wrap:nowrap;overflow-x:auto;margin-inline:calc(var(--gx-gut)*-1);padding-inline:var(--gx-gut);scrollbar-width:none}
  .gx-chip,.gx-resn{flex:none}
  .gx-row{grid-template-columns:120px minmax(0,1fr);gap:14px;padding:12px}
  .gx-row__media{aspect-ratio:1;border-radius:12px}
  .gx-row h3{font-size:16px}
  .gx-row__ref{display:none}
  .gx-facts{grid-template-columns:1fr 1fr;gap:6px 12px;font-size:13px}
  .gx-facts div:nth-child(n+3){display:none}
  .gx-row__side{grid-column:1/-1;border:0;padding:10px 0 0;border-block-start:1px solid var(--gw-sep-soft);flex-direction:row;align-items:center}
  .gx-row__side .gx-price b{font-size:17px}
  .gx-row__side .gx-btns{display:flex;gap:8px}
  .gx-row__side .gx-btns .gx-btn--ghost{display:none}
  .gx-detail{grid-template-columns:1fr;gap:16px}
  .gx-gallery{margin-inline:calc(var(--gx-gut)*-1)}
  .gx-gallery__main{border-radius:0;box-shadow:none}
  .gx-thumbs,.gx-photo-note{padding-inline:var(--gx-gut)}
  .gx-thumbs a{width:72px}
  .gx-sum{position:static;padding:0;background:none;border:0;box-shadow:none}
  .gx-sum h1{font-size:24px}
  .gx-sum__price b{font-size:28px}
  .gx-sum__cta{display:none}
  .gx-anchors{width:auto;max-width:100%;overflow-x:auto;scrollbar-width:none;margin-block:28px 16px}
  .gx-anchors a{flex:none;white-space:nowrap}
  .gx-spec{padding:4px 16px}
  .gx-spec dl{grid-template-columns:minmax(0,1fr)}
  .gx-spec dl div{grid-template-columns:minmax(min-content,110px) minmax(0,1fr);font-size:14px}
  .gx-inq{grid-template-columns:1fr}
  .gx-inq__ctx{padding:22px}
  .gx-inq__stick{position:static}
  .gx-inq__form:not(:has(form)){padding:22px}
  .gx-inq__ctx .gx-next{display:none}
  .gx-form{grid-template-columns:minmax(0,1fr);padding:22px}
  .gx-dock{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;position:fixed;inset-inline:0;inset-block-end:0;z-index:41;padding:10px 16px 14px;background:var(--gx-glass-solid);border-block-start:1px solid var(--gw-sep-soft);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
  .gx-dock .gx-btn--ghost{width:52px;padding:0}
  .gx-dock .gx-btn--primary{min-inline-size:0;white-space:normal;text-align:center;padding-inline:16px}
  .has-dock .gx-tabbar{display:none}
  .gx-read{grid-template-columns:1fr;gap:20px}
  .gx-toc{position:static}
  .gx-toc details{background:var(--dk-raised,#fff);border:1px solid var(--gw-sep-soft);border-radius:18px;padding:4px 14px}
  .gx-toc summary{min-height:44px;display:flex;align-items:center;font-weight:600;color:var(--gw-ink)}
  .gx-prose{font-size:16px}
  .gx-prose h2{font-size:22px;margin-block-start:36px}
  .gx-lede{font-size:17px}
  .gx-deflist{grid-template-columns:1fr}
  .gx-endcta{padding:22px}
}
@media (min-width:721px){.gx-toc details>summary{display:none}.gx-toc details{display:block}}
@media (prefers-reduced-motion:reduce){body.gx *{transition:none!important;scroll-behavior:auto!important}.gx-tile:hover{transform:none}}
@media (prefers-reduced-transparency:reduce){.gx-head,.gx-tabbar,.gx-dock{background:var(--gw-glass-fallback);-webkit-backdrop-filter:none;backdrop-filter:none}}
.gx-nophoto{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--gw-muted);font-size:13px;text-align:center;padding:12px}
.gx-nophoto .gx-ico{width:28px;height:28px;color:var(--dk-control,#9aa0bd)}
.gx-cat>*,.gx-detail>*,.gx-read>*{min-width:0}
.gx-endcta{flex-direction:row;align-items:center}
.gx-f>.gx-lab{display:block}
.gx-head--home .gx-search{visibility:hidden}
@media (max-width:720px){.gx-cat{grid-template-columns:minmax(0,1fr)}.gx-read{grid-template-columns:minmax(0,1fr)}.gx-detail{grid-template-columns:minmax(0,1fr)}.gx-endcta{flex-direction:column;align-items:flex-start}}
@media (max-width:720px),(pointer:coarse){
 .gx-seg a,.gx-seg label,.gx-anchors a,.gx-toc a,.gx-foot a,.gx-chip,.gx-opt{min-height:44px}
 .gx-chip{height:44px}
 .gx-sec__head .gx-link{min-height:44px}
 .gx-sum__ref .gx-act{min-height:44px;min-width:44px}
}
@media (max-width:720px){
 .gx-row{align-items:start}
 .gx-row__media{width:120px;height:120px;aspect-ratio:auto}
 .gx-toolbar .gx-search{flex:1 1 100%;width:100%;min-width:0}
 .gx-toolbar .gx-search select{display:none}
 .gx-toolbar .gx-search input{padding-inline-start:10px}
 .gx-sum__ref .gx-act{min-height:44px}
}

/* =====================================================================
   HOME v2 · full-bleed map hero (Alex 2026-10-21: 首页直接用地图，地图版面要够大)
   - The map is the first-viewport element: full bleed, 700px tall on desktop (≈78% of a 900px fold).
   - The SVG is an external, cacheable file (worldmap.svg, 31 KB / 11 KB gzip) instead of 162 KB inline.
   - Map geometry never mirrors (geography); the stage is dir=ltr and uses physical left/top.
   - The headline card is docked over the Americas in every locale (not a sales region), so it never
     covers a region pin; in RTL only its text direction changes.
   ===================================================================== */
.hm-hero{--hm-h:700px;position:relative;height:var(--hm-h);overflow:hidden;background:var(--gw-backdrop);isolation:isolate}
.hm-hero::after{content:"";position:absolute;inset:auto 0 0 0;height:120px;background:linear-gradient(180deg,transparent,var(--gx-fade));pointer-events:none;z-index:1}
.hm-viewport{position:absolute;inset:0}
.hm-stage{position:absolute;top:50%;left:50%;width:max(100%,calc(var(--hm-h) * 2.538));aspect-ratio:1000/394;transform:translate(-50%,-50%)}
.hm-stage>img{position:absolute;inset:0;width:100%;height:100%}
.hm-pin{position:absolute;transform:translate(-50%,-8px);display:flex;flex-direction:column;align-items:center;gap:8px;text-decoration:none;color:var(--gw-ink);z-index:2}
.hm-pin i{position:relative;width:18px;height:18px;border-radius:50%;background:#4338ca var(--gw-btn);box-shadow:0 0 0 5px var(--gx-glass-solid),0 3px 10px rgba(16,24,40,.25)}
.hm-pin i::after{content:"";position:absolute;inset:-12px;border-radius:50%;border:2px solid var(--dk-pin-ring,rgba(99,102,241,.25));animation:hm-pulse 2.4s cubic-bezier(.16,1,.3,1) infinite}
@keyframes hm-pulse{from{transform:scale(.55);opacity:1}to{transform:scale(1.35);opacity:0}}
.hm-pin span{display:flex;align-items:center;gap:8px;min-height:36px;padding-block:0;padding-inline:14px 6px;border-radius:var(--gw-pill);background:var(--gx-glass-solid);border:1px solid var(--dk-glass-edge,#fff);box-shadow:0 6px 18px -6px rgba(16,24,40,.25);font-size:15px;font-weight:700;white-space:nowrap}
.hm-pin span b{min-width:26px;height:26px;padding-inline:8px;border-radius:var(--gw-pill);background:#4338ca var(--gw-btn);color:#fff;font-size:13px;display:grid;place-items:center}
.hm-pin span em{font-style:normal;font-weight:500;font-size:13px;color:var(--gw-muted)}
.hm-pin--empty i{background:var(--dk-control,#9aa0bd);box-shadow:0 0 0 5px var(--gx-glass-solid),0 2px 6px rgba(16,24,40,.18)}
.hm-pin--empty i::after{display:none}
.hm-pin--empty span{color:var(--gw-muted);font-weight:600;padding-inline-end:14px;background:var(--gx-glass-solid)}
a.hm-pin:hover span{border-color:var(--dk-tint-hover,#a5b4fc)}
.hm-pin:focus-visible{outline:none}.hm-pin:focus-visible span{box-shadow:var(--gw-focus)}
.hm-card{position:absolute;z-index:3;top:40px;left:max(24px,calc((100% - var(--gx-wrap)) / 2 + 24px));width:452px;padding:28px 28px 22px;border-radius:var(--gw-r-xl);background:var(--gx-glass-solid);border:1px solid var(--gx-glass-solid);box-shadow:var(--gw-sh-2)}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.hm-card{background:var(--gx-glass);-webkit-backdrop-filter:saturate(180%) blur(22px);backdrop-filter:saturate(180%) blur(22px)}}
.hm-card h1{font-size:44px;line-height:1.1;letter-spacing:-.035em;margin:0 0 12px;text-wrap-style:balance}
.hm-card p{margin:0 0 20px;color:var(--gw-muted);font-size:16px;line-height:1.6}
/* [HERO-LINEBREAK] zh has no spaces: wrap the hero only at punctuation/spaces (never 看 / 全球, 付 / 款); `anywhere` keeps min-content small so a long run still breaks at 320px. DESIGN.md › Typography › CJK line breaking */
:lang(zh) .hm-title :is(h1,p){word-break:keep-all;overflow-wrap:anywhere}
.hm-card .gx-seg{margin-block-end:10px}
.hm-q{display:flex;gap:8px}
.hm-q input{flex:1;min-width:0;height:48px;border:1px solid var(--dk-field-line,var(--gw-sep));border-radius:var(--gw-pill);padding-inline:18px;font:16px var(--gw-font);color:var(--gw-ink);background:var(--dk-field,#fff)}
.hm-q input::placeholder{color:var(--gx-ink-3)}
.hm-q input:focus{outline:none;box-shadow:var(--gw-focus)}
.hm-q .gx-btn{min-height:48px;padding-inline:20px}
.hm-more{display:flex;flex-wrap:wrap;gap:4px 18px;margin-block-start:12px;font-size:14px}
.hm-more a{min-height:32px}
.hm-dock{position:absolute;z-index:3;left:50%;bottom:28px;transform:translateX(-50%);display:flex;align-items:center;gap:6px;padding:6px;border-radius:var(--gw-pill);background:var(--gx-glass-solid);border:1px solid var(--dk-glass-edge,#fff);box-shadow:var(--gw-sh-2);white-space:nowrap}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.hm-dock{background:var(--gx-glass);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}
.hm-dock__lbl{font-size:14px;color:var(--gw-muted);padding-inline:12px 4px}
.hm-chip{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding-inline:16px;border-radius:var(--gw-pill);font-size:14px;font-weight:600;color:var(--gw-ink);text-decoration:none;background:var(--gw-surface);border:1px solid var(--gw-sep-soft)}
.hm-chip b{min-width:22px;height:22px;padding-inline:6px;border-radius:var(--gw-pill);background:var(--gw-tag-bg);color:var(--gw-tag-fg);font-size:12px;display:grid;place-items:center}
.hm-chip--empty{color:var(--gx-ink-3);background:var(--gx-glass);font-weight:500}
.hm-chip--all{background:#4338ca var(--gw-btn);color:#fff;border:0}
.hm-chip--all b{background:#fff;color:#1a1f3a} /* [review #26] 白色计数徽章上用墨色（浅/深色都一样），不用强调色作文字 */
.hm-promise{background:linear-gradient(180deg,var(--gx-fade),var(--gw-bg));}
.hm-promise .gx-promise{margin:0;border:0;padding-block:8px 0}
[dir=rtl] .hm-card,[dir=rtl] .hm-dock{direction:rtl}
@media (prefers-reduced-motion:reduce){.hm-pin i::after{animation:none;display:none}}
@media (prefers-reduced-transparency:reduce){.hm-card,.hm-dock{background:var(--gw-glass-fallback);-webkit-backdrop-filter:none;backdrop-filter:none}}
@media (min-width:1101px) and (max-height:800px){.hm-hero{--hm-h:600px}.hm-card{top:24px}.hm-card h1{font-size:40px}}

/* mobile: the map stays the dominant block — cropped to the sales side of the world (Africa → SE Asia),
   ~400px tall, full bleed; headline above, finder + region chips docked under it. */
@media (max-width:720px){
  .hm-hero{--hm-h:auto;height:auto;overflow:visible;display:flex;flex-direction:column;padding-block:18px}
  .hm-hero::after{display:none}
  .hm-card{display:contents;background:none;border:0;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none} /* [FRONT-FIX] 包装层不再算作外层卡片 */
  .hm-title{order:1;padding-inline:var(--gx-gut)}
  .hm-title h1{font-size:28px;line-height:1.15;letter-spacing:-.03em;margin:0 0 6px}
  .hm-title p{margin:0;font-size:14px;line-height:1.5}
  .hm-viewport{order:2;position:relative;height:380px;overflow:hidden;margin-block-start:4px}
  .hm-stage{top:0;left:0;height:100%;width:auto;transform:translateX(-49.8%)}
  .hm-pin span{font-size:13px;min-height:32px;padding-inline-start:10px}
  .hm-pin span b{min-width:22px;height:22px;font-size:12px}
  .hm-pin i{width:14px;height:14px}
  .hm-find{order:3;position:relative;z-index:3;margin:-40px var(--gx-gut) 0;padding:10px;border-radius:var(--gw-r-lg);background:var(--gx-glass-solid);border:1px solid var(--dk-glass-edge,#fff);box-shadow:var(--gw-sh-2);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
  .hm-find .gx-seg,.hm-more{display:none}
  .hm-q .gx-btn{padding-inline:16px}
  .hm-dock{order:4;position:relative;left:auto;bottom:auto;transform:none;margin-block-start:12px;padding:0 var(--gx-gut) 4px;background:none;border:0;box-shadow:none;overflow-x:auto;scrollbar-width:none;-webkit-backdrop-filter:none;backdrop-filter:none}
  .hm-dock__lbl{display:none}
  .hm-chip{min-height:44px;flex:none}
}
[dir=rtl] .gx-link .gx-ico,[dir=rtl] .gx-btn .gx-ico--flip{transform:scaleX(-1)}

/* =====================================================================
   [FRONT-REDESIGN] implementation layer — rules the mockup expressed inline or did not need.
   ===================================================================== */
/* neutralise legacy element rules from site.css/glass.css inside the new chrome */
body.gx label span,body.gx legend{display:inline;font-size:inherit;font-weight:inherit;color:inherit;margin:0}
body.gx .gx-search input,body.gx .hm-q input{width:auto;min-height:0;border:0;padding-block:0;border-radius:0;background:none}
body.gx .hm-q input{border:1px solid var(--dk-field-line,var(--gw-sep));border-radius:var(--gw-pill);background:var(--dk-field,#fff);padding-inline:18px}
.skip{position:absolute;inset-inline-start:-999px;top:0;z-index:60}
.skip:focus{inset-inline-start:12px;top:12px;background:#fff;padding:10px 14px;border-radius:12px;box-shadow:var(--gw-focus)}
::selection{background:var(--dk-sel-bg,#c7d2fe);color:var(--dk-sel-fg,#1a1f3a)}
html{scrollbar-color:var(--dk-scroll,#9aa0bd) transparent}
a.gx-ul,a.gx-ul:hover{text-decoration:underline;text-underline-offset:3px}
.gx-st--partially_sold{background:var(--gx-warn-bg);color:var(--gx-warn)}
.gx-btn:focus-visible,.gx-act:focus-visible,.gx-opt:focus-visible,.hm-chip:focus-visible,.gx-chip:focus-visible,.gx-tabbar a:focus-visible,.gx-nav a:focus-visible,.gx-foot a:focus-visible,.gx-toc a:focus-visible,.gx-anchors a:focus-visible,.gx-pager a:focus-visible,.gx-lang summary:focus-visible{outline:none;box-shadow:var(--gw-focus)}
.gx-btnrow{display:flex;gap:10px;flex-wrap:wrap}
.gx-inline{display:contents}
.gx-inline .gx-btn{width:100%}

/* header */
.gx-search button span{display:inline}
.gx-head .gx-search input{padding-inline:12px}
.gx-lang{position:relative}
.gx-lang summary{list-style:none;cursor:pointer}
.gx-lang summary::-webkit-details-marker{display:none}
.gx-lang[open] summary{background:var(--gx-hover);color:var(--gw-link)}
.gx-lang__menu{position:absolute;inset-inline-end:0;top:calc(100% + 6px);z-index:40;min-width:180px;margin:0;padding:6px;list-style:none;background:var(--dk-raised,#fff);border:1px solid var(--gw-sep-soft);border-radius:18px;box-shadow:var(--gw-sh-2)}
.gx-lang__menu a,.gx-lang__cur{display:flex;align-items:center;gap:8px;min-height:44px;padding-inline:12px;border-radius:12px;color:var(--gw-ink);text-decoration:none;font-size:15px}
.gx-lang__menu a:hover{background:var(--dk-hover,#f3f4fa);color:var(--gw-link)}
.gx-lang__cur{font-weight:700;color:var(--gw-link)}
/* [DARK-MODE] 外观三选一（语言菜单底部）；theme.js 去掉 hidden，无 JS 时不显示 */
.gx-theme{margin-top:6px;padding:8px 4px 2px;border-top:1px solid var(--gw-sep-soft)}
.gx-theme[hidden]{display:none}
.gx-theme fieldset{min-inline-size:0;margin:0;padding:0;border:0}
.gx-theme legend{padding:0 8px 6px;font-size:13px;font-weight:600;color:var(--gw-muted)}
.gx-theme__seg{display:flex;gap:2px;padding:3px;border-radius:18px;background:var(--gw-seg-bg)}
.gx-theme label{position:relative;flex:1 1 auto;display:flex;align-items:center;justify-content:center;min-block-size:44px;padding-inline:10px;border-radius:12px;font-size:14px;color:var(--gw-ink);white-space:nowrap;cursor:pointer}
.gx-theme input{position:absolute;inset:0;margin:0;opacity:0;cursor:pointer}
.gx-theme label:has(input:checked){background:var(--dk-raised,#fff);color:var(--gw-link);font-weight:700;box-shadow:var(--dk-seg-sh,0 1px 3px rgba(16,24,40,.12))}
.gx-theme label:has(input:focus-visible){box-shadow:var(--gw-focus)}
@media (forced-colors:active){.gx-theme label:has(input:checked){outline:2px solid CanvasText}}
/* phones: the three options stack (a short radio list) so the open menu never runs off-screen — ru "Как в системе" is wide */
@media (max-width:480px){.gx-theme__seg{flex-direction:column}.gx-theme label{justify-content:flex-start;padding-inline:12px}}
.gx-nav a{min-height:40px}
/* [r12] icon-only at ≤1024: the label stays in the accessibility tree (visually hidden, never display:none) */
@media (max-width:1024px){.gx-brand small{display:none}.gx-act--buyer span,.gx-search button span{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}}

/* map hero: pins positioned by class (CSP forbids inline style) */
.hm-stage>.hm-map{position:absolute;inset:0;width:100%;height:100%;max-width:none;filter:var(--dk-map-filter,none)}
.hm-hits{position:absolute;inset:0;width:100%;height:100%;z-index:1}
.hm-hits path{fill:transparent}
.hm-hits a path{cursor:pointer}
.hm-pin--central-asia{left:68.1%;top:26%}
.hm-pin--middle-east{left:62.5%;top:40.1%}
.hm-pin--africa{left:55.6%;top:56.1%}
.hm-pin--southeast-asia{left:78.3%;top:49.1%}
.hm-find .gx-seg{display:flex;flex-wrap:wrap}
.hm-chip--all b{min-width:22px}

/* sections */
.gx-empty{padding:28px;display:flex;gap:16px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.gx-empty p{margin:0;color:var(--gw-muted)}
.gx-kind__imgs--one{grid-template-columns:1fr}
.gx-kind__imgs--one img{aspect-ratio:4/3}
.gx-band__h{margin:0;font-size:22px;letter-spacing:-.02em}
.gx-band--row{margin-block-start:32px;flex-direction:row;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px}
.gx-sec--s{margin-block-start:32px}
.gx-sec--m{margin-block-start:48px}
.gx-chiplinks{display:flex;flex-wrap:wrap;gap:8px;margin:0}

/* catalogue */
.gx-facets{padding:4px 20px 12px}
.gx-facets__sum{display:none}
.gx-facet__lab{display:block;font-size:14px;font-weight:700;margin-block-end:8px}
.gx-selrow{display:flex;gap:8px}
.gx-selrow .gx-btn{padding-inline:14px}
.gx-select{min-height:44px}
.gx-toolbar .gx-search{flex:1}
.gx-chips__clear{font-size:14px;min-height:32px}
.gx-row__side .gx-btns{display:grid;gap:8px}
.gx-row h3 a{overflow-wrap:anywhere}
.gx-pager .gx-pager__gap{border:0;background:none}

/* detail */
.gx-sum__lead{margin:10px 0 0;color:var(--gw-muted);font-size:15px}
.gx-sum__basis{font-size:15px;font-weight:600;color:var(--gw-muted)}
.gx-sum .gx-sum__ask{font-size:22px;color:var(--gw-link)}
.gx-sum__barter{display:flex;gap:8px;align-items:flex-start;margin:14px 0 0;font-size:13px;color:var(--gw-muted)}
.gx-sum__barter .gx-ico{margin-block-start:3px;flex:none}
.gx-kv dd{overflow-wrap:anywhere}
.gx-flash{margin:14px 0 0;padding:12px 14px;border-radius:12px;background:var(--dk-fill,#f3f4fa);font-size:14px;color:var(--gw-ink)}
.gx-flash--ok{background:var(--gx-ok-bg);color:var(--gx-ok)}
.gx-gallery__main>a{display:block;width:100%;height:100%}
.gx-inq__form{min-width:0}
.gx-formerr{margin:24px 32px 0;padding:14px 16px;border-radius:12px;background:var(--dk-danger-bg,#fff5f5);border:1px solid var(--dk-danger-line,#fecaca);color:var(--dk-danger,#b42318);font-size:14px}
.gx-formerr ul{margin:6px 0 0;padding-inline-start:18px}
.gx-formerr a{color:var(--dk-danger,#b42318);text-decoration:underline}
.gx-fs{border:0;padding:0;margin:0;min-width:0}
.gx-fs legend{padding:0;margin-block-end:6px;font-weight:600}
.gx-seg--wrap{flex-wrap:wrap;border-radius:24px}
.gx-seg label{position:relative}
.gx-seg input+span{display:inline-flex;align-items:center;min-height:36px;padding-inline:14px;border-radius:var(--gw-pill)}
.gx-seg label:has(input:focus-visible) span{box-shadow:var(--gw-focus)}
.gx-seg label{padding:0}
.gx-check input{width:20px;height:20px;min-height:0;margin:1px 0 0;flex:none;accent-color:var(--dk-check,#4338ca);padding:0}
.gx-two--tight{gap:16px}
.gx-f select{padding-inline:10px}
.gx-faq{padding:4px 24px}
.gx-faq details{border-block-end:1px solid var(--gw-sep-soft)}
.gx-faq details:last-child{border:0}
.gx-faq summary{min-height:52px;display:flex;align-items:center;font-weight:600;cursor:pointer}
.gx-faq p{margin:0 0 16px;color:var(--gw-muted)}

/* read pages + 404 */
.gx-phead--read{padding-block-end:40px}
.gx-read{margin-block-start:40px}
.gx-read--notoc{grid-template-columns:minmax(0,700px);justify-content:center}
.gx-toc a{color:var(--gw-muted)}
.gx-toc a:hover{color:var(--gw-ink)}
.gx-kv--start{margin:12px 0 0}
.gx-kv--start div{display:contents}
.gx-kv--start dd{text-align:start}
.gx-company h2{margin:0 0 4px;font-size:17px}
.gx-endcta .gx-band__h{font-size:20px}
.gx-nf{max-width:640px;padding-block:72px 24px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:16px}
.gx-nf h1{margin:0;font-size:40px;letter-spacing:-.03em}
.gx-nf .gx-lede{margin:0 auto}
.gx-nf__q{width:100%;max-width:520px}
.gx-nf .gx-btnrow{justify-content:center}

/* footer */
.gx-foot__h{margin:0 0 12px;color:var(--gw-ink);font-size:14px;font-weight:700;letter-spacing:0}
.gx-foot ul a{min-height:36px}
.gx-foot__social{display:flex;align-items:center;gap:6px;margin-block-start:14px}
.gx-foot__social a{width:40px;height:40px;justify-content:center;border-radius:50%;background:var(--gw-surface);border:1px solid var(--gw-sep-soft)}
.gx-foot__legal a{display:inline;min-height:0}
.gx-foot__contact li{overflow-wrap:anywhere}.gx-foot__ck{color:var(--gw-muted)}.gx-foot__legal [data-footer-disclaimer]{font-size:14px} /* [HOME-COPY r2] 页脚联系我们（仅后台填写后出现） */

/* mobile tab bar badge */
.gx-tabbar a{position:relative}
.gx-tabbar__n{position:absolute;top:4px;inset-inline-start:calc(50% + 6px);min-width:18px;height:18px;padding-inline:5px;border-radius:var(--gw-pill);background:var(--gw-accent);color:#fff;font-size:11px;display:grid;place-items:center}

@media (max-width:720px){
  .gx-nav.is-open{display:block;position:sticky;top:var(--gx-head);z-index:29;background:var(--dk-solid,#fdfdff);border-block-end:1px solid var(--gw-sep-soft);box-shadow:var(--gw-sh-2)}
  .gx-nav.is-open .gx-nav__row{height:auto;flex-direction:column;align-items:stretch;padding-block:8px}
  .gx-nav.is-open a{min-height:48px;border-radius:12px}
  .gx-nav.is-open .gx-nav__end{margin:0}
  .gx-actions .gx-lang{display:block}
  .gx-lang .gx-actlbl{display:none}
  .gx-lang summary{min-height:44px;min-width:44px;justify-content:center;padding-inline:10px}
  .gx-lang summary .gx-ico:last-child{display:none}
  .floatbar{display:none!important}
  .gx-facets{display:block;padding:0 16px;position:static;max-height:none;overflow:visible}
  .gx-facets__sum{display:flex;align-items:center;gap:8px;min-height:48px;font-weight:600;cursor:pointer}
  .gx-facets[open]{padding-block-end:12px}
  .gx-toolbar .gx-search button span{display:none}
  .gx-row__side .gx-btns{display:flex;flex:1;justify-content:flex-end}
  .gx-row__side .gx-btns .gx-inline{display:none}
  .gx-band--row{flex-direction:column;align-items:flex-start}
  .gx-sum__cta{display:grid}
  .gx-sum__cta>.gx-btn--primary{display:none}
  .gx-dock .gx-inline{display:block}
  .gx-dock .gx-inline .gx-btn{width:52px}
  .gx-formerr{margin:16px 16px 0}
  .gx-nf{padding-block:40px 8px}
  .gx-nf h1{font-size:28px}
  .gx-foot ul a{min-height:44px}
  .gx-read--notoc{grid-template-columns:minmax(0,1fr)}
}
@media (min-width:1101px){.gx-facets>summary{display:none}}
@media (prefers-reduced-transparency:reduce){.gx-lang__menu{box-shadow:none}}
@media (max-width:720px){.gx-actions .gx-lang summary.gx-act{display:inline-flex}}
.gx-msg__ref{margin:0;padding:14px 20px;font-size:16px}
/* [FRONT-REDESIGN] verification round 1: 44px touch targets on touch / ≤720px (DESIGN.md Accessibility rules) */
.gx-resn{margin-block:0;font-size:inherit;font-weight:400}
@media (max-width:720px),(pointer:coarse){
 .gx-crumb a,.gx-link,.gx-foot a{min-height:44px;display:inline-flex;align-items:center}
 .gx-foot a{min-width:44px}
 .gx-search button{height:44px}
 body.gx .gx-search input{min-height:44px}
 .gx-row h3 a{display:inline-block;min-height:44px}
}
.gx-row__side .gx-btn{min-width:0;max-width:100%;white-space:normal;text-align:center;padding-inline:14px;padding-block:8px;line-height:1.25} /* [STAFF-PREVIEW audit] 折行时（阿语）上下留白 ≥8px；单行仍由 min-height 44 决定，外观不变 */
.gx-photo-note{display:flex;gap:6px;align-items:flex-start}

/* [FRONT-REDESIGN] re-check fixes: crumb alignment, clear-all never squeezed in the scrolling chip row, crumb/chip targets ≥44px */
.gx-crumb{align-items:center}
.gx-chips__clear{flex:none;white-space:nowrap}
@media (max-width:720px),(pointer:coarse){
 .gx-crumb{padding-block:12px 4px}
 .gx-crumb a{position:relative} /* [review #24] 不再用 min-width 撑宽（短链接两侧留白不对称）；点击区用伪元素向两侧各扩 8px */
 .gx-crumb a::after{content:"";position:absolute;inset-block:0;inset-inline:-8px}
 .gx-chips__clear,.gx-chip{min-height:44px}
}
.gx-row__media{align-self:start;width:100%;min-width:0}
body.gx [hidden]{display:none!important}
.gx-nav a{white-space:nowrap}
.gx-nav__row{overflow-x:auto}
/* DESIGN.md Don't: no uppercase tracked labels — neutralise the legacy .specgrid dt rule on public cards */
.gx-facts dt,.gx-spec dt{text-transform:none;letter-spacing:0}
@media (min-width:1101px){html[lang=ru] .hm-card h1{font-size:40px}html[lang=ru] .hm-card{top:24px}}
/* [FRONT-REDESIGN] narrow or short desktop: dock moves to the right of the headline card (label hidden; the chips keep their own names) so long ru/en cards never cover it */
@media (min-width:1101px) and (max-width:1279px),(min-width:1101px) and (max-height:800px){
 .hm-dock{left:auto;right:max(24px,calc((100% - var(--gx-wrap)) / 2 + 24px));transform:none;max-width:calc(100% - 468px - 2 * max(24px,calc((100% - var(--gx-wrap)) / 2 + 24px)));flex-wrap:wrap;justify-content:flex-end;white-space:normal;border-radius:var(--gw-r-lg)}
 .hm-dock__lbl{display:none}
}

/* [FRONT-FIX] 排版收尾：标题两行均衡、段落避免最后一行只剩一个词；目录页副标题限制行长 */
body.gx :is(h1,h2,h3){text-wrap-style:balance}
body.gx :is(p,li,dd){text-wrap-style:pretty}
.gx-phead p{max-inline-size:70ch}
/* [FRONT-FIX2] review fixes (REVIEW-after.md). DESIGN.md values only. */
/* header: no email slot any more; the actions group may shrink instead of pushing the row past the viewport */
.gx-actions{min-width:0;flex-shrink:0}
.gx-head .gx-search{min-width:0}
/* floating toolbar (48px + 16px edge) sits over the content gutter below ~1336px: keep content clear of it */
@media (min-width:1101px) and (max-width:1359px){body.gx:has(.floatbar) main .gx-wrap,body.gx:has(.floatbar) .gx-foot>.gx-wrap{padding-inline-end:calc(var(--gx-gut) + 64px)}} /* [HOME-COPY r4 N1] 页脚同主体：给右侧悬浮栏让位，联系栏/语言栏不被盖住 */
/* Arabic glyphs are narrower than "0", so 68ch ran ~90 characters a line; hold Arabic prose to ~70 */
:lang(ar) .gx-prose p,:lang(ar) .gx-prose ul{max-width:54ch}
:lang(ar) .gx-phead p{max-inline-size:54ch}
/* [REVIEW-30cd98a P1-1] narrow phones: the two ghost summary actions stack so long ru/ar labels never widen the card */
@media (max-width:420px){.gx-sum__cta2,.gx-facts{grid-template-columns:minmax(0,1fr)}}
@media (max-width:720px){.gx-btn{white-space:normal;text-align:center;max-inline-size:100%}.gx-promise li>span{min-inline-size:0}}

/* [review-30cd98a P2-3] Legacy public pages (inquiry list, sourcing, FAQ, feedback, buyer) on the gx page head + gx-card/gx-f pattern */
.gx-narrow>*{max-inline-size:800px} /* column starts at the page-head edge (same as Read pages), not centred */
.gx-narrow>.gx-flash:first-child{margin-block-start:0}
.gx-narrow .gx-search{max-width:none}
.gx-narrow>.gx-formerr{margin:0 0 16px}
.gx-rfq{list-style:none;margin:0;padding:0;display:grid;gap:16px}
.gx-rfq__row{display:grid;grid-template-columns:96px minmax(0,1fr) auto;gap:16px;align-items:start;padding-block-end:16px;border-block-end:1px solid var(--gw-sep-soft)}
.gx-rfq__media{display:block;width:96px;height:72px;border-radius:12px;background:var(--gw-band);overflow:hidden}
.gx-rfq__media img{display:block;width:100%;height:100%;object-fit:cover}
.gx-rfq__body{display:flex;flex-direction:column;gap:6px;min-width:0}
.gx-rfq__body>a{color:var(--gw-ink);font-weight:600;text-decoration:none}
.gx-rfq__body>a:hover{color:var(--gw-link);text-decoration:underline}
.gx-rfq__ref{font-size:13px;color:var(--gw-muted)}
.gx-rfq__body .gx-flash{margin:0}
.gx-rfq__h{margin:8px 0 0}
.gx-rfq__note{grid-column:2/-1}
.gx-rfq__row>.gx-btn{grid-column:3;grid-row:1}
.gx-faq summary{padding-block:12px}
@media (max-width:720px){
  .gx-rfq__row{grid-template-columns:72px minmax(0,1fr)}
  .gx-rfq__media{width:72px;height:54px}
  .gx-rfq__row>.gx-btn,.gx-rfq__note{grid-column:1/-1;grid-row:auto}
}
/* [review-30cd98a P2-4] 44px touch targets on every public form: the privacy row and its inline link, 24px box */
@media (max-width:720px),(pointer:coarse){
  .gx-check{min-block-size:44px;align-items:center}
  .gx-check input{width:24px;height:24px;margin:0}
  .gx-check a{display:inline-block;padding-block:12px;margin-block:-12px}
  .gx-link{min-block-size:44px}
}

/* [review-30cd98a P3-3/P3-4] wrapping segmented controls (gx-seg--wrap pattern): segments stretch to fill each line, so a 2+1 wrap reads as an even grid */
.hm-find .gx-seg{border-radius:24px}
.hm-find .gx-seg a,.gx-seg--wrap label{flex:1 1 auto;justify-content:center;text-align:center}
.gx-seg--wrap input+span{inline-size:100%;justify-content:center}
/* [review-30cd98a P3-20] a row button whose label wraps (ru/ar) gets line room instead of a 1.0 line-height inside the 44px pill */
.gx-row__side .gx-btn{line-height:1.25;padding-block:8px;height:auto}
/* [Alex 2026-10-22, DESIGN.md Header] catalogue: the toolbar has the search, so the header pill is hidden (same as home) */
.gx-head--nosearch .gx-search{visibility:hidden}
/* [Alex 2026-10-22, DESIGN.md Header] <=360px: brand = logo mark only (the name stays for screen readers; the language
   menu is already globe-only on mobile). The open language menu is narrower so it stays inside a 320px screen. */
@media (max-width:360px){.gx-head .gx-brand{min-inline-size:44px;min-block-size:44px}.gx-head .gx-brand img{width:44px;height:44px;flex:none}.gx-head .gx-brand>span{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.gx-lang__menu{min-width:150px}
}
/* [BRAND-FALLBACK] brand.js marks a [data-brand] block whose image failed: mark failed → HTML name only (the wordmark never
   shows without the mark), wordmark failed → mark + HTML name. ≤360 the name replaces the icon only when the mark failed. */
[data-brand].brand--nomark img,.brand--nowm .brand__wm,.brand--nowm .soon__wm{display:none}
.brand--nomark .vh,.brand--nowm .vh{position:static;width:auto;height:auto;overflow:visible;clip:auto}
@media (max-width:360px){.gx-head .gx-brand.brand--nomark>span{position:static;inline-size:auto;block-size:auto;overflow:visible;clip:auto;clip-path:none}}
/* [STAFF-PREVIEW] 员工预览模式（只有登录员工能看到）。琥珀色只给“预览附加物”：DESIGN.md preview-bar-bg / fg / border（--gw-preview-bar-*）；
   开关轨道 primary #4338ca（关：白轨道 + muted 描边）；按钮 ≥44px；焦点环 0 0 0 3px #fff, 0 0 0 5px #4338ca；禁用 45%。 */
html:has(.pvbar){scroll-padding-top:calc(var(--gx-head) + 60px)}
.pvbar{background:var(--gw-preview-bar-bg);color:var(--gw-preview-bar-fg);border-block-end:1px solid var(--gw-preview-bar-border);font-size:14px;line-height:1.5}
.pvbar__row{display:flex;align-items:center;flex-wrap:wrap;gap:4px 12px;min-height:44px;padding-block:4px}
.pvbar__lab{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.pvbar__txt{flex:1 1 320px;min-width:0}
.pvbar__f{display:contents}
.pvbar__sw,.pvbar__btn{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding-inline:12px;border:1px solid var(--gw-preview-bar-border);border-radius:var(--gw-pill);background:var(--gw-surface);color:var(--gw-preview-bar-fg);font:600 13px/1.2 var(--gw-font);text-decoration:none;white-space:nowrap;cursor:pointer}
.pvbar__sw{padding-inline-start:4px}
.pvbar__sw i{position:relative;flex:none;width:30px;height:18px;border-radius:var(--gw-pill);background:var(--gw-accent)}
.pvbar__sw i::after{content:"";position:absolute;inset-block-start:2px;inset-inline-end:2px;width:14px;height:14px;border-radius:50%;background:var(--gw-surface)}
/* 关：白轨道 + muted 描边与圆钮（对白底 ≥3:1，WCAG 1.4.11）；开：primary 轨道 + 白圆钮 */
.pvbar__sw[aria-checked=false] i{background:var(--gw-surface);box-shadow:inset 0 0 0 2px var(--gw-muted)}
.pvbar__sw[aria-checked=false] i::after{inset-inline-end:auto;inset-inline-start:3px;inset-block-start:3px;width:12px;height:12px;background:var(--gw-muted)}
.pvbar__sw:hover,.pvbar__btn:hover{border-color:var(--gw-preview-bar-fg)}
.pvbar a:focus-visible,.pvbar button:focus-visible{outline:0;box-shadow:var(--gw-focus)}
.pvbar__s,.pvbar__txs{display:none}
/* 预览说明“?”（DESIGN.md Popover）：<details>/<summary>，无 JS 也能开合；site.js 负责点外面 / Esc 关闭并回焦。非模态、无动画。 */
.pvhelp{position:relative;flex:none}
.pvhelp__t{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1px solid var(--gw-preview-bar-border);border-radius:var(--gw-pill);background:var(--gw-surface);color:var(--gw-preview-bar-fg);list-style:none;cursor:pointer}
.pvhelp__t::-webkit-details-marker{display:none}
.pvhelp__t:hover,.pvhelp[open] .pvhelp__t{border-color:var(--gw-preview-bar-fg)}
.pvhelp__t:focus-visible{outline:0;box-shadow:var(--gw-focus)}
.pvhelp__p{position:absolute;inset-block-start:calc(100% + 8px);inset-inline-start:0;z-index:40;width:max-content;max-width:min(360px,calc(100vw - 2 * var(--gx-gut)));padding:16px;background:var(--gw-surface);color:var(--gw-ink);border:1px solid var(--gw-sep-soft);border-radius:18px;box-shadow:var(--gw-sh-2);font:400 14px/1.5 var(--gw-font);white-space:normal;text-align:start}
.pvhelp__p b{display:block;margin-block-end:8px;font-size:15px;font-weight:600}
.pvhelp__p ul{margin:0;padding-inline-start:18px}
.pvhelp__p li+li{margin-block-start:4px}
[dir=rtl] .pvbar__back{transform:none}
.pvbar__back{transform:scaleX(-1)}
@media (max-width:720px){
  .pvbar{font-size:13px}
  .pvbar__txt,.pvbar__wide,.pvbar__l{display:none}
  .pvbar__s{display:inline}
  /* 手机：第二行 = 状态短句（F2，不截断，必要时折行）· “?” · 编辑此货源；第一行仍是 标签 · 开关 · 退出 · 后台 */
  .pvbar__row{position:relative;gap:0 8px;padding-block:2px}
  .pvbar__row::before{content:"";order:8;flex-basis:100%}
  .pvbar__txs{display:block;order:9;flex:1 1 0;min-width:0;font-size:13px;line-height:1.4}
  .pvhelp{order:10}
  .pvbar__edit{order:11}
  /* [review-r3 PV-2] the short label never shrinks or clips (it used to ellipsis at 391–440px); it still takes the spare room, and buttons wrap instead */
  .pvbar__lab{flex:1 0 auto}
  /* 弹层铺满提示条（两侧留页边距） */
  .pvhelp{position:static}
  .pvhelp__p{inset-inline:var(--gx-gut);width:auto;max-width:none}
  .pvbar__sw,.pvbar__btn{padding-inline:10px}
  .pvbar__sw{padding-inline-start:6px}
}
/* ≤360px：返回后台 / 退出预览只留图标（有 aria-label），给“预览”标签留出完整位置 */
@media (max-width:360px){.pvbar__btn{min-width:44px;justify-content:center;padding-inline:0}.pvbar__btn .pvbar__s{display:none}}
/* 手机目录：结果数后面带“N 条未发布”时允许换行（否则横向滚动区里没有可聚焦元素，键盘用户滚不动） */
@media (max-width:720px){.gx-chips:has([data-preview-count]){flex-wrap:wrap;overflow-x:visible}}
.pvtag{display:inline-flex;align-items:center;gap:4px;min-height:22px;padding-inline:8px;border-radius:var(--gw-pill);background:var(--gw-preview-bar-bg);color:var(--gw-preview-bar-fg);border:1px solid var(--gw-preview-bar-border);font-size:12px;font-weight:600;line-height:1.4;white-space:nowrap}
.gx-resn .pvtag{vertical-align:middle;margin-inline-start:8px;white-space:normal}
/* [review-final r2 PV-1] card preview tags wrap on phones (was nowrap → horizontal scroll); header count already wraps above */
.gx-row__tags .pvtag{white-space:normal;max-inline-size:100%}
@media (max-width:720px){.gx-resn{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;max-inline-size:100%}.gx-resn .pvtag{margin-inline-start:0;max-inline-size:100%}.gx-row__tags{flex-wrap:wrap;max-inline-size:100%}}
.pvnote{display:flex;gap:8px;align-items:flex-start;flex-basis:100%;grid-column:1/-1;margin-block:12px 0;color:var(--gw-preview-bar-fg);font-size:14px;font-weight:600;line-height:1.5} /* 卡片里不再套卡片：只用文字 + 图标 */
.pvnote .gx-ico{margin-block-start:2px}
.gx .gx-btn[disabled],.gx .btn[disabled]{opacity:.45;cursor:not-allowed;box-shadow:none;transform:none}
.gx .gx-btn--pvoff,.gx .gx-btn--pvoff[disabled]{opacity:1;background:var(--gw-preview-bar-bg);color:var(--gw-preview-bar-fg);border-color:var(--gw-preview-bar-border);font-size:14px;white-space:normal;line-height:1.3}
.pvrefused{max-width:640px;margin-inline:auto;padding:32px}
.pvrefused h1{display:flex;align-items:center;gap:12px;margin:0 0 12px;font-size:24px;line-height:1.3}
.pvrefused__act{margin-block:24px 0}

/* [NEW-FEATURES 2026-10-23] Catalogue sort + multi-select · inquiry attachments · 404 suggestions (DESIGN.md; ported from docs/design-previews/new-features/assets/new-features.css). */
/* ---------- 1 · Catalogue: one GET form for all facets, real checkboxes / radios ---------- */
.nf-facets-form{display:block}
body.gx .nf-facet-h{width:100%;padding:0;display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.nf-facet-h h2{margin:0}
.nf-facet-h small{font-size:12px;font-weight:600;color:var(--gx-ink-3)}
.gx-opt.nf-opt{cursor:pointer}
.nf-opt input{width:18px;height:18px;min-height:0;margin:0;padding:0;flex:none;accent-color:var(--dk-check,#4338ca)}
.nf-opt input[type=checkbox]{border-radius:4px}
.nf-opt:has(input:focus-visible){box-shadow:var(--gw-focus)}
.nf-opt:has(input:checked) span{font-weight:600}
.nf-opt.gx-opt--zero{color:var(--gx-ink-3)}
.nf-apply{display:flex;flex-direction:column;gap:8px;padding-block-start:16px;margin-block-start:8px;border-block-start:1px solid var(--gw-sep-soft)}
.nf-apply .gx-btn{width:100%;justify-content:center}
.nf-apply .gx-link{align-self:center;font-size:14px}
@media (min-width:1101px){.nf-apply--m{display:none}}
.nf-apply [hidden]{display:none}
.nf-nojs-note{font-size:12px;color:var(--gx-ink-3);margin:0;text-align:center}
/* [review-r6 P3-13] desktop + JS: say up front that ticking a box reloads the results (WCAG 3.2.2) */
.nf-autonote{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--gx-ink-3);margin:8px 0 4px}
.nf-autonote[hidden]{display:none}
@media (max-width:1100px){.nf-autonote{display:none}}

.nf-resultbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-block-end:18px}
.nf-resultbar .gx-chips{margin:0;flex:1 1 auto;min-width:0}
@media (max-width:720px){.nf-resultbar .gx-chips{flex-wrap:wrap;overflow:visible;margin-inline:0;padding-inline:0}}
.nf-sort{display:flex;align-items:center;gap:8px;flex:none;margin-inline-start:auto} /* a wrapped sort control stays on the end edge (layout_balance X1; ru 768) */
.nf-sort label{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:var(--gw-muted);white-space:nowrap}
.nf-sort .gx-select{width:auto;min-width:200px;height:44px}
.nf-sortnote{display:flex;gap:8px;align-items:flex-start;margin:-6px 0 18px;padding:12px 16px;border-radius:12px;background:var(--dk-fill,#f3f4fa);font-size:14px;color:var(--gw-muted)}
.nf-sortnote .gx-ico{flex:none;margin-block-start:2px}

/* ---------- 2 · Attachments field (sourcing request + listing inquiry) ---------- */
.nf-att{display:flex;flex-direction:column;gap:8px}
.nf-att__head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:14px;font-weight:600}
.nf-att__head small{font-size:13px;font-weight:400;color:var(--gw-muted);font-variant-numeric:tabular-nums}
.nf-att__zone{display:flex;align-items:center;gap:16px;padding:16px;border-radius:12px;background:var(--dk-fill,#f3f4fa);border:1px solid var(--gw-sep-soft)}
.nf-att__zone .gx-ico{width:28px;height:28px;flex:none;color:var(--dk-accent-fg,var(--gw-accent))}
/* front.css resets `body.gx label span` to inline, so the zone parts need body.gx specificity */
body.gx .nf-att__txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;font-size:14px;font-weight:400;color:var(--gw-ink)}
.nf-att__txt small{font-size:13px;color:var(--gw-muted)}
.nf-att__zone input[type=file]{position:absolute;inline-size:1px;block-size:1px;opacity:0}
body.gx .nf-att__btn{flex:none;display:inline-flex;align-items:center;gap:8px;font-weight:600}
.nf-att__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.nf-att__item{display:flex;align-items:center;gap:12px;padding:8px;padding-inline-end:4px;border-radius:12px;border:1px solid var(--gw-sep-soft);background:var(--gw-surface)}
.nf-att__thumb{width:48px;height:48px;border-radius:12px;flex:none;display:grid;place-items:center;background:var(--gw-ph);color:var(--gx-ink-3)}
.nf-att__thumb--pdf{background:var(--gw-tag-bg);color:var(--gw-tag-fg)}
.nf-att__thumb .gx-ico{width:22px;height:22px}
.nf-att__thumb img{width:48px;height:48px;border-radius:12px;object-fit:cover;display:block}
.nf-att__zone:focus-within{outline:2px solid var(--gw-accent);outline-offset:2px}
.nf-att__zone.is-drag{border-style:dashed;border-color:var(--gw-accent);background:var(--dk-tint,#eef0fb)}
.nf-att__meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.nf-att__name{font-size:14px;font-weight:600;color:var(--gw-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nf-att__sub{font-size:13px;color:var(--gw-muted);font-variant-numeric:tabular-nums}
.nf-att__x{width:44px;height:44px;flex:none;border-radius:50%;border:0;background:transparent;color:var(--gw-muted);display:grid;place-items:center;cursor:pointer}
.nf-att__x:hover{background:var(--gx-hover);color:var(--gw-ink)}
.nf-att__item--bad{background:var(--dk-danger-bg,#fff5f5);border-color:var(--dk-danger-line,#fecaca)}
.nf-att__item--bad .nf-att__sub{color:var(--dk-danger,#b42318);display:flex;gap:6px;align-items:center}
.nf-att__item--bad .nf-att__thumb{background:var(--gw-surface);color:var(--dk-danger,#b42318)}
.nf-att__privacy{display:flex;gap:8px;align-items:flex-start;font-size:13px;font-weight:400;color:var(--gw-muted);margin:0;max-width:65ch}
.nf-att__privacy .gx-ico{flex:none;width:18px;height:18px;color:var(--gx-ok)}
.nf-att__kept{display:flex;gap:8px;align-items:flex-start;margin:0;padding:12px 16px;border-radius:12px;background:var(--gx-ok-bg);color:var(--gx-ok);font-size:14px;font-weight:500}
.nf-att__kept .gx-ico{flex:none;margin-block-start:2px}
.nf-att__keep{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:400;color:var(--gw-muted);min-height:44px;padding-inline-end:8px}
.nf-att__keep input{width:20px;height:20px;min-height:0;margin:0;accent-color:var(--dk-check,#4338ca)}

/* ---------- 3 · 404 suggestions ---------- */
.nf-nf-kinds{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.nf-nf-kinds .gx-chip em{font-style:normal;font-weight:400;color:var(--gx-ink-3)}
.nf-nf-more{padding-block:24px 0}
.nf-nf-more .gx-sec__head{margin-block-end:16px}
.nf-nf-more .gx-sec__head h2{font-size:22px}
.nf-nf-tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.nf-nf-help{margin-block-start:32px}
.nf-nf-help .gx-btnrow{flex-wrap:wrap}
.nf-nf-empty{padding:24px;display:flex;flex-direction:column;gap:12px;align-items:flex-start}
.nf-nf-empty p{margin:0;color:var(--gw-muted)}

/* ---------- mobile (front.css breakpoints) ---------- */
@media (max-width:720px){
  .nf-resultbar{flex-direction:column;align-items:stretch;gap:8px}
  .nf-sort{width:100%;flex-wrap:wrap}
  .nf-sort .gx-select{flex:1 1 200px;min-width:200px}
  .nf-sort [data-autosubmit-btn]{flex:1 0 100%}
  .nf-apply{position:sticky;inset-block-end:calc(68px + env(safe-area-inset-bottom,0px));background:var(--gw-surface);padding-block:12px;margin-inline:-16px;padding-inline:16px;z-index:2}
  .nf-att__zone{flex-wrap:wrap}
  body.gx .nf-att__btn{width:100%;justify-content:center}
  .nf-nf-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
}
@media (max-width:720px),(pointer:coarse){
  .gx-opt.nf-opt{min-height:44px}
  .nf-opt input{width:20px;height:20px}
}
@media (prefers-reduced-motion:reduce){.nf-att__x{transition:none}}

/* [review-r5] Home H8: ≤400px the hero segments use sm (8px) inline padding so ru fits one row at 390 and en at 360 */
@media (max-width:400px){.hm-find .gx-seg a{padding-inline:8px}}
/* [PRELAUNCH][review-r5 Gate H8] visitor "coming soon" page — front.css only (moved from glass.css); language chips one row of 4, 2×2 ≤480px */
.soon-body{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 16px;background-color:var(--dk-bg,#f1f2fb);background-image:var(--gw-backdrop);color:var(--gw-ink);font:16px/1.6 var(--gw-font)}
.soon{width:100%;max-width:540px;background-color:var(--gw-surface);border:1px solid var(--gw-sep-soft);border-radius:var(--gw-r-xl);box-shadow:var(--gw-sh-2);padding:40px 32px 32px;text-align:center}
.soon__brand{display:inline-flex;align-items:center;gap:12px;margin:0 0 32px;font-size:17px;font-weight:700;letter-spacing:-.01em}
.soon__brand img{display:block}
.soon__brand--wm{gap:13px;direction:ltr}.soon__brand .soon__wm{width:auto;height:22px}
.soon h1{margin:0 0 12px;font-size:clamp(30px,6vw,40px);line-height:1.12;letter-spacing:-.02em;color:var(--gw-ink)}
.soon__lead{margin:0 auto 24px;max-width:40ch;font-size:17px;line-height:1.6;color:var(--gw-muted);text-wrap:pretty} /* [R2 N10] no one-word last line */
.kp{white-space:nowrap}
.soon__contact{margin:0 0 24px;padding-top:24px;border-top:1px solid var(--gw-sep-soft);text-align:start}
.soon__contact h2{margin:0 0 12px;font-size:15px;color:var(--gw-ink)}
.soon__contact dl{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px 24px;margin:0}
.soon__contact dt{font-size:12px;color:var(--gw-muted)}
.soon__contact dd{margin:4px 0 0;font-weight:700;overflow-wrap:anywhere}
.soon__contact a{color:var(--gw-link);text-underline-offset:3px}
.soon__langs{display:flex;justify-content:center;gap:8px}
.soon__langs a{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 16px;border-radius:var(--gw-pill);border:1px solid var(--gw-sep);background-color:var(--gw-surface);color:var(--gw-ink);text-decoration:none;font-weight:600;font-size:15px;white-space:nowrap}
.soon__langs a.is-on{background-color:#4338ca;background-image:var(--gw-btn);border-color:transparent;color:#fff}
.soon__langs a:focus-visible{outline:none;box-shadow:var(--gw-focus)}
.soon__foot{margin:24px 0 0;font-size:13px;color:var(--gw-muted)}
@media (max-width:480px){.soon__langs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.soon{padding:32px 24px 24px}.soon__brand{margin-bottom:24px}}
/* [review-r5 Detail/Forms H8/H10] persistent help line under a field legend; ≤480px trade-intent options stack as a radio list */
.gx-fhelp{display:block;margin:0 0 8px;font-size:13px;line-height:1.5;font-weight:400;color:var(--gw-muted)}
@media (max-width:480px){.gx-seg--stack{display:flex;flex-direction:column;align-items:stretch;border-radius:var(--gw-r-md)}.gx-seg--stack label{display:flex}.gx-seg--stack input+span{flex:1 1 auto;justify-content:flex-start;padding-inline:16px;border-radius:12px}}
.gx-fhelp--under{margin:4px 0 0}
/* [review-r5 Preview H10] staff with edit rights: the MT tag links to the listing editor's MT card */
a.pvtag--link{min-height:24px;text-decoration:underline;text-underline-offset:3px}
a.pvtag--link:hover{text-decoration-thickness:2px}

/* [FINAL-POINTS FP-03] Catalogue zero results (DESIGN.md Catalogue · Zero results; Alex 2026-10-23) */
.gx-zero{padding:28px;display:grid;gap:20px}
.gx-zero__h{margin:0;font-size:20px;line-height:1.35;color:var(--gw-ink)}
.gx-zero__lede{margin:4px 0 0;color:var(--gw-muted)}
.gx-zero__grp{display:grid;gap:10px;padding-block-start:16px;border-block-start:1px solid var(--gw-sep-soft)}
.gx-zero__grp h3{margin:0;font-size:14px;font-weight:700;color:var(--gw-ink)}
.gx-zero__chips{display:flex;gap:8px;flex-wrap:wrap}
.gx-zero__chips .gx-chip{padding-inline:12px}
.gx-zero__chips .gx-chip em{font-style:normal;font-weight:400;color:var(--gx-ink-3)}
.gx-zero__foot{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
@media (max-width:720px){.gx-zero{padding:20px}.gx-zero__chips .gx-chip{min-height:44px}.gx-zero__foot .gx-btn{flex:1 1 auto;justify-content:center}}

/* [FINAL-POINTS H7] 预览编辑胶囊（DESIGN.md Q10 修订；docs/specs/preview-edit-shortcuts.md）。只在预览 + products.write 时有这些元素。
   琥珀细边 + 白底，永不用主渐变；逻辑属性 → ar 自动镜像到左上。行内 24px，触屏用伪元素把点击区扩到 ≥44px，不改变布局。 */
.pvedit{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding-inline:10px 12px;border-radius:var(--gw-pill);background:var(--gw-surface);color:var(--gw-preview-bar-fg);border:1px solid var(--gw-preview-bar-border);font:600 13px/1.2 var(--gw-font);text-decoration:none;white-space:nowrap}
.pvedit:hover{border-color:var(--gw-preview-bar-fg)}
.pvedit:focus-visible{outline:none;box-shadow:var(--gw-focus)}
.pvedit svg{width:15px;height:15px;flex:none}
.gx-row__tags .pvedit{min-height:24px;padding-inline:8px 10px;font-size:12px;position:relative}
.gx-row__tags .pvedit svg{width:13px;height:13px}
.pvtile{position:relative;display:flex}
.pvtile>.gx-tile{flex:1}
.pvtile>.pvedit{position:absolute;inset-block-start:10px;inset-inline-end:10px;z-index:1;box-shadow:0 1px 2px rgba(16,24,40,.12)}
@media (pointer:coarse),(max-width:720px){.pvedit{min-height:44px;min-width:44px;justify-content:center}.pvtile>.pvedit{padding-inline:0}.pvtile>.pvedit .pvedit__t{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.gx-row__tags .pvedit{min-height:24px;min-width:0}.gx-row__tags .pvedit::after{content:"";position:absolute;inset:-10px 0}}

/* =====================================================================
   [r12 DM-4] Tablet 721–1100px is a first-class layout (Alex 2026-10-23, DESIGN.md › Mobile chrome / Pages):
   burger nav (header search + actions stay), catalogue = one column + filter drawer + 160px thumb,
   detail = one column, home hero stacked like phones (headline → 440px map → finder → region chips).
   ===================================================================== */
@media (min-width:721px) and (max-width:1100px){
  .gx-nav{display:none}
  .gx-burger{display:grid}
  .gx-nav.is-open{display:block;position:sticky;top:var(--gx-head);z-index:29;background:var(--dk-solid,#fdfdff);border-block-end:1px solid var(--gw-sep-soft);box-shadow:var(--gw-sh-2)}
  .gx-nav.is-open .gx-nav__row{height:auto;flex-direction:column;align-items:stretch;padding-block:8px;overflow:visible}
  .gx-nav.is-open a{min-height:48px;border-radius:12px}
  .gx-nav.is-open .gx-nav__end{margin:0}
  /* catalogue */
  .gx-cat{grid-template-columns:minmax(0,1fr)}
  .gx-facets{display:block;padding:0 16px;position:static;max-height:none;overflow:visible}
  .gx-facets__sum{display:flex;align-items:center;gap:8px;min-height:48px;font-weight:600;cursor:pointer}
  .gx-facets[open]{padding-block-end:12px}
  .gx-toolbar .gx-search{flex:1 1 100%}
  .gx-row{grid-template-columns:160px minmax(0,1fr);gap:16px;padding:16px;align-items:start}
  .gx-row__media{width:160px;height:160px;aspect-ratio:auto;border-radius:12px}
  .gx-row__side{grid-column:1/-1;border:0;padding:12px 0 0;border-block-start:1px solid var(--gw-sep-soft);flex-direction:row;align-items:center;justify-content:space-between;gap:16px}
  .gx-row__side .gx-btns{display:flex;gap:8px;justify-content:flex-end}
  /* detail */
  .gx-detail{grid-template-columns:minmax(0,1fr)}
  .gx-sum{position:static}
  .gx-inq{grid-template-columns:minmax(0,1fr)}
  /* home hero: stacked */
  .hm-hero{--hm-h:auto;height:auto;overflow:visible;display:flex;flex-direction:column;padding-block:32px 24px}
  .hm-hero::after{display:none}
  .hm-card{display:contents;background:none;border:0;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}
  .hm-title{order:1;padding-inline:var(--gx-gut);max-inline-size:720px}
  .hm-title h1{font-size:40px;line-height:1.1;margin:0 0 10px}
  .hm-title p{margin:0;font-size:16px}
  .hm-viewport{order:2;position:relative;height:440px;overflow:hidden;margin-block-start:8px}
  /* map cropped to the sales side (pins 55–78% of the map) and centred, at least 1.5× the viewport wide so no edge shows; floatbar sits clear on either side */
  .hm-stage{top:0;left:50%;height:auto;width:max(150%,calc(440px * 2.538));transform:translate(-64%,max(calc(440px - 100%),-12%))}
  .hm-find{order:3;position:relative;z-index:3;inline-size:min(640px,calc(100% - 2 * var(--gx-gut)));margin:-56px auto 0;padding:14px;border-radius:var(--gw-r-lg);background:var(--gx-glass-solid);border:1px solid var(--dk-glass-edge,#fff);box-shadow:var(--gw-sh-2);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
  .hm-dock{order:4;position:relative;left:auto;right:auto;bottom:auto;transform:none;max-width:none;margin:16px auto 0;padding:0 var(--gx-gut);background:none;border:0;box-shadow:none;flex-wrap:wrap;justify-content:center;white-space:normal;-webkit-backdrop-filter:none;backdrop-filter:none}
  .hm-dock__lbl{display:none}
  .hm-chip{min-height:44px}
}

/* [r12 DM-2/DM-3] sibling cards share one row structure: titles, bodies and CTAs line up across siblings
   (subgrid rows), whatever the text lengths. Paired band CTAs are the same kind (ghost) on one baseline. */
.gx-kind{align-items:stretch}
.gx-kind>div:first-child{display:flex;flex-direction:column;align-items:flex-start}
.gx-kind .gx-link{margin-block-start:auto}
.gx-kind__imgs{align-self:center}
.gx-bands{grid-template-rows:repeat(3,auto)}
.gx-band{display:grid;grid-row:span 3;grid-template-rows:subgrid;row-gap:10px;justify-items:start}
.gx-band .gx-btn{align-self:end}
@media (min-width:721px){
  .gx-steps{grid-template-rows:repeat(3,auto)}
  .gx-steps li{display:grid;grid-row:span 3;grid-template-rows:subgrid;row-gap:0;align-content:start}
  .gx-steps b{align-self:start}
}
@media (min-width:721px) and (max-width:1100px){
  .gx-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
  :is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(n){display:flex;grid-column:auto}
  :is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(3n+1){display:none}
  :is(.gx-grid,.nf-nf-tiles)>.gx-gridmore:nth-child(3n+2){grid-column:span 2}
  .gx-kinds{grid-template-columns:minmax(0,1fr);gap:16px}
  .gx-kind{grid-template-columns:minmax(0,1fr) 200px}
  .gx-promise{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:4px}
  .gx-steps{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(6,auto);row-gap:0}
  .gx-steps li:nth-child(n+3){margin-block-start:24px}
  .gx-steps li:nth-child(2n)::after{display:none}
  .gx-row__side .gx-btn{white-space:nowrap}
}

/* [r12 G-04] touch screens of any width: every header action, burger and nav link is ≥44px */
@media (pointer:coarse){
  .gx-act,.gx-burger,.gx-lang summary{min-block-size:44px;min-inline-size:44px}
  .gx-nav a{min-block-size:44px}
}

/* [r12 G-01] DESIGN.md › Typography › CJK line breaking: zh wraps only at punctuation, spaces and authored <wbr>
   (inherited by every element); `anywhere` lets a long unbroken run (staff-typed names) still fit a narrow column.
   Short elements balance their lines; running text avoids a one-character last line. */
/* [r12 review #1] every zh body (coming-soon gate, language page, 404), not only body.gx; staff has its own rule */
:lang(zh) body:not(.staff),body.gx :lang(zh),body.soon-body :lang(zh){word-break:keep-all;overflow-wrap:anywhere;line-break:strict}
body.gx :is(h1,h2,h3,h4,summary,dt,figcaption,label,legend,.gx-btn,.gx-tag,.gx-st,.gx-chip,.hm-chip,.gx-band__h,.gx-kind__n,.gx-link){text-wrap-style:balance}
body.gx :where(p,li,dd,small,.help,.gx-lede,.gx-form .help,.gx-tile h3,.gx-kind p,.gx-next li>span,.gx-promise li>span){text-wrap-style:pretty}
/* [r12 C-05] prices and fact values never split inside a word (E|UR); the column is wide enough after C-01 */
.gx-facts dd,.gx-price,.gx-sum__price{overflow-wrap:normal;word-break:normal}
:lang(zh) .gx-facts dd,:lang(zh) .gx-price{word-break:keep-all}
/* [r12 C-07] filter option text links reach 44px on touch */
@media (max-width:1100px),(pointer:coarse){.gx-facets label a{display:inline-block;padding-block:12px;margin-block:-12px}}
/* [r12 D-04] the gallery says "click to enlarge" with its cursor and a corner icon, not a sentence */
.gx-gallery__main>a{position:relative;cursor:zoom-in}
.gx-gallery__zoom{position:absolute;inset-block-start:12px;inset-inline-end:12px;display:grid;place-items:center;inline-size:36px;block-size:36px;border-radius:50%;background:var(--gx-glass-solid);box-shadow:var(--gw-sh-1);color:var(--gw-ink);pointer-events:none}
/* [r12 fit] card facts: equal columns that are never narrower than their longest label word (flex items keep
   min-width:auto = min-content; values opt out via contain:inline-size). Narrow bodies wrap a fact to the next row
   instead of splitting a word — font-independent, no measured widths. */
@media (min-width:721px){.gx-facts{display:flex;flex-wrap:wrap}.gx-facts>div{flex:1 1 0}.gx-facts dd{contain:inline-size}}
/* [r12 line-break pass 2] short UI strings stay whole or balance; prices never split inside the currency code */
.gx-row__side .gx-btn,.gx-tile__price b,.gx-price b{white-space:nowrap}
.gx-row__side .gx-btn{flex:none}
.gx-tile__meta .gx-tag{white-space:normal;max-inline-size:100%;min-inline-size:0;overflow-wrap:break-word;height:auto;min-block-size:24px;padding-block:3px;line-height:1.3;border-radius:12px} /* [R3 F2] a long type tag (ru “Остатки партий (оптом)”) wraps instead of being cut */
.gx-tile__meta{flex-wrap:wrap;min-inline-size:0}
body.gx :is(.gx-tile__price,.gx-toc a,.gx-promise b,.gx-steps p,.gx-tile__meta,.gx-facts dd,.gx-tile h3,.gx-row h3,.gx-inq__item b,.gx-lab,.gx-fhelp,small){text-wrap-style:balance} /* [R4] .gx-inq__item b: the inquiry context title balances, so the model (“TL-2000”) never drops alone to line 2 */
/* [r12 line-break pass 2] phone promise strip: two per row while the longest word fits, otherwise one per row
   (flex items keep min-width:auto = min-content) — ru «договорённости» never splits, font-independent. */
@media (max-width:720px){.gx-promise{display:flex;flex-wrap:wrap}.gx-promise li{flex:1 1 40%}}
.gx-row__side .gx-btn--primary{padding-inline:24px}
/* [r12 chips] region chips never wrap inside a name (ar «جنوب شرق آسيا» went 3 lines at 1440): the centred dock sizes to its content, chips keep min-content */
.hm-chip{white-space:nowrap;flex:none}
@media (min-width:1101px){.hm-dock{width:max-content;max-width:calc(100% - 48px)}}
/* [r12 floatbar] RTL: the map is not mirrored, so the hero card stays on the left where the RTL floatbar lives (16px + 60px bar); keep the card clear of it */
@media (min-width:1101px){[dir=rtl] body.gx:has(.floatbar) .hm-card{left:max(92px,calc((100% - var(--gx-wrap)) / 2 + 24px))}}
/* [r12] balance/pretty use text-wrap-style: the text-wrap shorthand resets text-wrap-mode and undid white-space:nowrap on buttons and chips */
/* [r12 facts] fact cells size to their content (TEST Bavaria · 德国 on one line) instead of three equal 102px columns; a single over-long model number still breaks inside its own row */
@media (min-width:721px){.gx-facts>div{flex:1 1 auto;min-width:0;max-width:100%}.gx-facts dd{contain:none;overflow-wrap:anywhere}}
/* [r12 tile price] the basis label wraps under the price as a whole (参考价 · 整批), never squeezed to one character per line */
.gx-tile__price{flex-wrap:wrap}.gx-tile__price span{min-inline-size:0} /* [R3 F2] the basis line is a segs row (wraps per segment), not nowrap */
/* [R4 F3] tile titles are never truncated: a real ru name at 360/390 (“Складские остатки · Хлопковые футболки с принтом”) lost the
   goods themselves to a 3-line clamp. The full title shows, hyphenated under the h3 lang; the subgrid below keeps sibling tiles at equal
   heights with aligned location and price rows, however many lines a title takes. Gate: tile_real_titles title-cut (any clamp = FAIL). */
.gx-tile h3{hyphens:auto;-webkit-hyphens:auto;overflow-wrap:break-word}
body.gx .gx-tile h3{display:block;-webkit-line-clamp:unset;-webkit-box-orient:unset;overflow:visible}
/* a "a · b" title (Typo::title segs) flows inline inside the clamp box (a flex segs row escaped -webkit-line-clamp: 5 unclamped lines);
   the dot is glued to the word before it (never opens a line) and may close one like a comma; gluing both sides made
   "остатки · Хлопковые" one unit wider than a 360px tile column, which overflow-wrap then cut mid-word ("Хлопков|ые") */
body.gx :is(.gx-tile h3,.gx-row h3,.gx-tile__price,.gx-inq__item b) :is(.segs,.segs__row){display:inline;margin:0;clip-path:none}
body.gx :is(.gx-tile h3,.gx-row h3,.gx-tile__price,.gx-inq__item b) .segs__i{display:inline;margin:0;position:static}
body.gx :is(.gx-tile h3,.gx-row h3,.gx-tile__price,.gx-inq__item b) .segs__i::before{content:none}
body.gx :is(.gx-tile h3,.gx-row h3,.gx-tile__price,.gx-inq__item b) .segs__i+.segs__i::before{content:"\a0· " / "";position:static;width:auto}
/* [R3 lb] the tile price basis flows the same way: “Ориентировочная / цена · за партию”, not one segment per line
   leaving “цена” alone on a line and the dot clipped; so does the inquiry context title (“… с ЧПУ / TL-2000” at 178px) */
/* [R3 lb] list rows (/products at ≤720px: a 168px title column) use the same inline flow and hyphenation as tiles: a flex segs
   row stacked “TEST Складские / остатки / Хлопковые / футболки” one word per line with the separator clipped away */
body.gx .gx-row h3,body.gx .gx-row h3 a{hyphens:auto;-webkit-hyphens:auto;overflow-wrap:break-word}
/* rows line up across a grid row: each tile spans five shared row tracks (media / tag / title / location / price) via subgrid,
   so a sibling's 3-line title or 2-line price basis moves the same row in every tile; the price row is always the last track */
@supports (grid-template-rows:subgrid){
 :is(.gx-grid,.nf-nf-tiles)>:is(.gx-tile,.pvtile){display:grid;grid-row:span 5;grid-template-rows:subgrid;row-gap:0}
 .pvtile>.gx-tile{grid-row:1/-1;grid-column:1;display:grid;grid-template-rows:subgrid;row-gap:0}
 .pvtile>.pvedit{grid-row:1;grid-column:1}
 :is(.gx-grid,.nf-nf-tiles) .gx-tile>.gx-tile__media{grid-row:1}
 :is(.gx-grid,.nf-nf-tiles) .gx-tile>.gx-tile__body{grid-row:2/-1;display:grid;grid-template-rows:subgrid;align-content:start}
 :is(.gx-grid,.nf-nf-tiles) .gx-tile__body>.gx-tile__meta:first-child{grid-row:1;align-self:start}
 :is(.gx-grid,.nf-nf-tiles) .gx-tile__body>h3{grid-row:2;align-self:start}
 :is(.gx-grid,.nf-nf-tiles) .gx-tile__body>h3+.gx-tile__meta{grid-row:3;align-self:start;margin:0}
 :is(.gx-grid,.nf-nf-tiles) .gx-tile__body>.gx-tile__price{grid-row:4;align-self:start;margin:0}
 :is(.gx-grid,.nf-nf-tiles)>.gx-gridmore{grid-row:span 5}
}
/* [r12 floatbar tablet] 721-1100 the fixed rail covered the last grid column; the header already carries the inquiry list and the burger the sourcing link, same as phones */
@media (max-width:1100px){.floatbar{display:none!important}}
/* [r12 links] section "view all" links stay on one line */
.gx-sec__head{flex-wrap:wrap}.gx-sec__head .gx-link{white-space:nowrap;flex:none}
/* [r12 foot tablet] 721-1100: five footer columns left 110px link columns ("Surplus stock / lots"); brand row on top, four link columns below */
@media (min-width:721px) and (max-width:1100px){.gx-foot__grid{gap:24px 32px}.gx-foot__grid>.gx-foot__brand{flex-basis:100%}}
/* [HOME-COPY R20 复审 R3] ≥721 联系栏一律整行、四项横排（与 721–1100 一致；宽屏不再因长邮箱单独落到第二行一角） */
@media (min-width:721px){.gx-foot__grid>.gx-foot__contact{flex-basis:100%}.gx-foot__contact ul{display:flex;flex-wrap:wrap;align-items:center;gap:4px 32px}.gx-foot__contact li{display:flex;align-items:center;column-gap:.3em;min-height:36px}}
/* [r12 toc] 240px rail fits the longest ru/ar section label on one line */
@media (min-width:1101px){.gx-read:not(.gx-read--notoc){grid-template-columns:272px minmax(0,700px) 1fr}}
body.gx .gx-price span{text-wrap-style:balance}
@media (min-width:600px){.gx-spec dl div{grid-template-columns:minmax(min-content,180px) minmax(0,1fr)}}
/* r12: below 901px two spec columns leave the value ~120px wide; stack them */
@media (max-width:900px){.gx-spec dl{grid-template-columns:minmax(0,1fr)}}
/* r12: the two ghost CTAs share a row only when both labels fit on one line each (ru "Добавить в список запросов" stacks instead of breaking into 3 lines) */
@media (min-width:421px){.gx-sum__cta2{display:flex;flex-wrap:wrap}.gx-sum__cta2 .gx-btn{flex:1 1 max-content}}
/* r12: 404 "latest" tiles follow the catalogue grid on tablet (3 across, so ru titles are not cut mid-word in 168px columns); the 4th tile would sit alone on a second row */
@media (min-width:721px) and (max-width:1100px){.nf-nf-tiles{grid-template-columns:repeat(3,minmax(0,1fr))}.nf-nf-tiles>:nth-child(n+4){display:none}.nf-nf-tiles>.gx-gridmore:nth-child(n+4){display:none}}
/* r12: 721–900px the header search shrank to a ~90px stub; language and inquiry list go icon-only (aria-labels keep the names) so search keeps ~250px */
@media (min-width:721px) and (max-width:900px){.gx-lang .gx-actlbl,.gx-act--list .gx-actlbl{display:none}.gx-lang summary,.gx-act--list{min-width:44px;justify-content:center;padding-inline:12px}}

/* [DARK-MODE] logo pair (Brand::markImgs / wordmarkImgs): colour art in light, white mono art in dark — the dark token blocks flip
   --dk-art-light / --dk-art-dark (DESIGN.md Logo, logo B). Both are display:block in every slot. The load-failure rules are restated
   one step more specific so they still win over the pair. */
.brand-art.brand-art--light{display:var(--dk-art-light,block)}
.brand-art.brand-art--dark{display:var(--dk-art-dark,none)}
[data-brand].brand--nomark .brand-art,[data-brand].brand--nowm .brand-art--wm{display:none}

/* ===== Dark appearance (DESIGN.md › Dark appearance; approved Alex 2026-10-23 23:53). Tokens only — every rule above
   reads a --gw-* token, or a --dk-* token whose fallback is the light literal, so light stays byte-for-byte what it was. The two blocks are identical
   (tests/p36/p36_test.php): OS dark unless the visitor chose 浅色, and the explicit 深色 choice (public/company/theme.js).
   Screen only: print always uses the light tokens. */
@media screen and (prefers-color-scheme:dark){:root:not([data-theme=light]){
  color-scheme:dark;
  --gw-bg:#0e1121;--gw-surface:#171b30;--gw-ink:#eceefa;--gw-ink-2:#cfd3ea;--gw-muted:#b0b5d0;--gw-sep:#343a5e;--gw-sep-soft:#272c4a;
  --gw-link:#a5b4fc;--gw-accent:#4f46e5;--gw-accent-2:#2563eb;
  --gw-glass:rgba(23,27,48,.66);--gw-glass-strong:rgba(23,27,48,.82);--gw-glass-fallback:#171b30;
  --gw-backdrop:radial-gradient(55% 60% at 12% 18%,rgba(99,102,241,.20),transparent 72%),radial-gradient(55% 60% at 88% 12%,rgba(192,132,252,.10),transparent 72%),radial-gradient(55% 60% at 70% 95%,rgba(56,189,248,.08),transparent 72%),linear-gradient(135deg,#0f1226,#121029,#0d1424);
  --gw-backdrop-calm:linear-gradient(180deg,#10132a,#0e1121);
  --gw-btn:linear-gradient(135deg,#4f46e5,#2563eb);--gw-btn-hover:linear-gradient(135deg,#5b54f0,#3b74f0);
  --gw-band:linear-gradient(100deg,#1a1e40,#211a3c);--gw-footer:linear-gradient(180deg,#111428,#0e1121);
  --gw-seg-bg:#232846;--gw-tag-bg:#2b3170;--gw-tag-fg:#dfe4ff;--gw-tag2-bg:#272b45;--gw-tag2-fg:#d4d7ea;
  --gw-ph:linear-gradient(135deg,#232846,#171b30);
  --gw-preview-bar-bg:#33290a;--gw-preview-bar-fg:#fde68a;--gw-preview-bar-border:#5c4a12;
  --gw-sh-1:0 1px 0 rgba(255,255,255,.04) inset,0 1px 2px rgba(0,0,0,.35),0 12px 32px -14px rgba(0,0,0,.55);
  --gw-sh-2:0 2px 6px rgba(0,0,0,.35),0 24px 48px -20px rgba(0,0,0,.65);
  --gw-focus:0 0 0 3px #0e1121,0 0 0 5px #a5b4fc;
  --gx-glass:rgba(23,27,48,.66);--gx-glass-solid:rgba(23,27,48,.92);--gx-hover:rgba(165,180,252,.10);--gx-scrim:rgba(5,7,15,.76);--gx-fade:rgba(14,17,33,.86);
  --gx-on-grad:rgba(255,255,255,.14);--gx-ink-3:#9196b5;
  --gx-ok:#6ee7b7;--gx-ok-bg:#0f2e25;--gx-warn:#fcd34d;--gx-warn-bg:#33260b;--gx-sold:#c3c7d9;--gx-sold-bg:#2a2e44;
  --gx-prelaunch-bg:#2b2210;--gx-prelaunch-fg:#fde7b0;--gx-prelaunch-border:#5c4515;
  --dk-bg:#0e1121;--dk-raised:#1f2440;--dk-fill:#20253f;--dk-field:#12162a;--dk-field-line:#6a70a0;--dk-focus-line:#a5b4fc;--dk-control:#7d83a8;
  --dk-hover:rgba(165,180,252,.10);--dk-solid:#171b30;--dk-glass-edge:#343a5e;--dk-backdrop:rgba(5,7,15,.6);--dk-scroll:#4a5180;
  --dk-sel-bg:#3b3f8f;--dk-sel-fg:#ffffff;--dk-accent-fg:#a5b4fc;--dk-check:#818cf8;
  --dk-tint:#2b3170;--dk-tint-line:#3f4796;--dk-tint-hover:#6068c8;--dk-tag-fg:#dfe4ff;--dk-seg-sh:0 0 0 1px #3f4796;--dk-pin-ring:rgba(165,180,252,.35);
  --dk-danger:#fda29b;--dk-danger-bg:#2a1618;--dk-danger-line:#7a2e2a;--dk-danger-edge:#f97066;
  --dk-card:#171b30;--dk-ink:#eceefa;--dk-muted:#b0b5d0;--dk-line:#343a5e;--dk-hl:rgba(255,255,255,.04);
  --dk-ok-fg:#6ee7b7;--dk-ok-bg:#0f2e25;--dk-ok-line:#1f6b52;--dk-warn-fg:#fcd34d;--dk-warn-bg:#33260b;--dk-warn-line:#6b5212;
  --dk-art-light:none;--dk-art-dark:block;
  --dk-map-filter:invert(1) hue-rotate(180deg);
}}
@media screen{:root[data-theme=dark]{
  color-scheme:dark;
  --gw-bg:#0e1121;--gw-surface:#171b30;--gw-ink:#eceefa;--gw-ink-2:#cfd3ea;--gw-muted:#b0b5d0;--gw-sep:#343a5e;--gw-sep-soft:#272c4a;
  --gw-link:#a5b4fc;--gw-accent:#4f46e5;--gw-accent-2:#2563eb;
  --gw-glass:rgba(23,27,48,.66);--gw-glass-strong:rgba(23,27,48,.82);--gw-glass-fallback:#171b30;
  --gw-backdrop:radial-gradient(55% 60% at 12% 18%,rgba(99,102,241,.20),transparent 72%),radial-gradient(55% 60% at 88% 12%,rgba(192,132,252,.10),transparent 72%),radial-gradient(55% 60% at 70% 95%,rgba(56,189,248,.08),transparent 72%),linear-gradient(135deg,#0f1226,#121029,#0d1424);
  --gw-backdrop-calm:linear-gradient(180deg,#10132a,#0e1121);
  --gw-btn:linear-gradient(135deg,#4f46e5,#2563eb);--gw-btn-hover:linear-gradient(135deg,#5b54f0,#3b74f0);
  --gw-band:linear-gradient(100deg,#1a1e40,#211a3c);--gw-footer:linear-gradient(180deg,#111428,#0e1121);
  --gw-seg-bg:#232846;--gw-tag-bg:#2b3170;--gw-tag-fg:#dfe4ff;--gw-tag2-bg:#272b45;--gw-tag2-fg:#d4d7ea;
  --gw-ph:linear-gradient(135deg,#232846,#171b30);
  --gw-preview-bar-bg:#33290a;--gw-preview-bar-fg:#fde68a;--gw-preview-bar-border:#5c4a12;
  --gw-sh-1:0 1px 0 rgba(255,255,255,.04) inset,0 1px 2px rgba(0,0,0,.35),0 12px 32px -14px rgba(0,0,0,.55);
  --gw-sh-2:0 2px 6px rgba(0,0,0,.35),0 24px 48px -20px rgba(0,0,0,.65);
  --gw-focus:0 0 0 3px #0e1121,0 0 0 5px #a5b4fc;
  --gx-glass:rgba(23,27,48,.66);--gx-glass-solid:rgba(23,27,48,.92);--gx-hover:rgba(165,180,252,.10);--gx-scrim:rgba(5,7,15,.76);--gx-fade:rgba(14,17,33,.86);
  --gx-on-grad:rgba(255,255,255,.14);--gx-ink-3:#9196b5;
  --gx-ok:#6ee7b7;--gx-ok-bg:#0f2e25;--gx-warn:#fcd34d;--gx-warn-bg:#33260b;--gx-sold:#c3c7d9;--gx-sold-bg:#2a2e44;
  --gx-prelaunch-bg:#2b2210;--gx-prelaunch-fg:#fde7b0;--gx-prelaunch-border:#5c4515;
  --dk-bg:#0e1121;--dk-raised:#1f2440;--dk-fill:#20253f;--dk-field:#12162a;--dk-field-line:#6a70a0;--dk-focus-line:#a5b4fc;--dk-control:#7d83a8;
  --dk-hover:rgba(165,180,252,.10);--dk-solid:#171b30;--dk-glass-edge:#343a5e;--dk-backdrop:rgba(5,7,15,.6);--dk-scroll:#4a5180;
  --dk-sel-bg:#3b3f8f;--dk-sel-fg:#ffffff;--dk-accent-fg:#a5b4fc;--dk-check:#818cf8;
  --dk-tint:#2b3170;--dk-tint-line:#3f4796;--dk-tint-hover:#6068c8;--dk-tag-fg:#dfe4ff;--dk-seg-sh:0 0 0 1px #3f4796;--dk-pin-ring:rgba(165,180,252,.35);
  --dk-danger:#fda29b;--dk-danger-bg:#2a1618;--dk-danger-line:#7a2e2a;--dk-danger-edge:#f97066;
  --dk-card:#171b30;--dk-ink:#eceefa;--dk-muted:#b0b5d0;--dk-line:#343a5e;--dk-hl:rgba(255,255,255,.04);
  --dk-ok-fg:#6ee7b7;--dk-ok-bg:#0f2e25;--dk-ok-line:#1f6b52;--dk-warn-fg:#fcd34d;--dk-warn-bg:#33260b;--dk-warn-line:#6b5212;
  --dk-art-light:none;--dk-art-dark:block;
  --dk-map-filter:invert(1) hue-rotate(180deg);
}}
/* [p37] short 2-5 line labels: measured on 19a34c0, `pretty` left a one-word last line (ru «…подтвердим в | ответе», ar «…بلا بائعين | خارجيين», en «Inspection or test run by | appointment», ru «…забирается по | договорённости.») and `balance` clears it; long prose keeps `pretty` (balance split «офлайн- | оплата» there) */
body.gx :is(.gx-promise li>span,.gx-next li>span,.gx-desc li){text-wrap-style:balance}
/* [r12 review #6] detail dock: every item is one 52px row (add / chat are 52×52 square icon buttons, Inquire 52 tall),
   one label size (16px) and stretched to the row, so the bottoms line up in every locale. */
@media (max-width:720px){
  .gx-dock{align-items:stretch}
  .gx-dock>.gx-btn,.gx-dock>.gx-inline,.gx-dock>.gx-inline .gx-btn{min-height:52px;height:100%;font-size:16px}
  .gx-dock>.gx-btn--ghost,.gx-dock>.gx-inline .gx-btn{width:52px;min-width:52px;padding:0}
  .gx-dock>.gx-btn--lg{padding-block:4px;line-height:1.2} /* a two-line ru/ar label still fits the 52px row */
}
/* [r12 review #14] the 外观 switch stays in the language menu (owner decision) but is announced on its trigger: a small
   light/dark glyph next to the language name, and the name/tooltip read “语言与外观”. The three segments are equal width. */
.gx-lang__mode{display:inline-flex;color:var(--gw-muted)}
.gx-lang__mode[hidden]{display:none}
.gx-theme__seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr}
.gx-lang summary .gx-lang__mode .gx-ico{display:block} /* not the ≤720 “hide the trailing chevron” rule */
@media (min-width:481px){.gx-lang__menu{inline-size:max-content;max-inline-size:calc(100vw - 32px)}} /* the absolute menu would otherwise shrink to min-width and the 1fr tracks fall back to content widths */
@media (max-width:480px){.gx-theme__seg{grid-auto-flow:row}}
@media (max-width:720px){.gx-lang summary{gap:2px;padding-inline:8px}}

/* [review #12 #15] “a · b · c” rows (Typo::segs): segments wrap as units; the dot lives in the gap and is clipped when it would open a line, so no line starts or ends with “·”. */
body.gx .segs{display:block;clip-path:inset(-1em -1em -1em -.25em)}
[dir=rtl] body.gx .segs{clip-path:inset(-1em -.25em -1em -1em)}
body.gx .segs__row{display:flex;flex-wrap:wrap;margin-inline-start:-1em}
body.gx .segs__i{position:relative;min-width:0;margin-inline-start:1em}
.segs__i::before{content:"·" / "";position:absolute;inset-inline-start:-1em;width:1em;text-align:center}
body.gx .segs__sep{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap} /* [R2 N1] the separator screen readers hear */
body.gx .segs.segs--t{display:inline-block;max-width:100%;vertical-align:top}
.nb{white-space:nowrap} /* [R3 F12] Typo::nb model tokens (TL-2000, б/у): kept whole without U+2011 / U+2060 */ /* [R2 (c)] titles: "·" parts wrap whole */
/* [R3 F1] body.gx specificity: a segs row inside a <label> (attachment hint) must not fall back to `body.gx label span{display:inline;margin:0}` ("8 MB eachJPG", clipped 2nd row) */
/* [R3 F4] a segs row in an end-aligned fact value (所在地) is end-justified like its siblings */
body.gx .gx-kv:not(.gx-kv--start) dd .segs__row{justify-content:flex-end}

/* [review #24] 面包屑分隔符两侧间距对称：由 gap 统一给出，分隔符本身不占额外边距 */
.gx-crumb>span[aria-hidden]{margin:0;padding:0;color:var(--gw-muted)}
/* [R3 F15] the phone tab bar and listing dock are opaque: at .9 alpha the page text showed through under them (most visible with
   dense Arabic text); the blur alone does not hide letters */
body.gx :is(.gx-tabbar,.gx-dock){background:var(--gw-glass-fallback);-webkit-backdrop-filter:none;backdrop-filter:none}
/* [R4 G3 col-hole] detail ≥1101: when the summary is the taller column (ru/ar specs), the gallery rides along beside it instead of
   leaving an empty hole under the photos; it fits the viewport, so its whole image stays in view while the summary scrolls */
@media (min-width:1101px){.gx-detail>.gx-gallery{position:sticky;top:calc(var(--gx-head) + 16px)}}
