/* ============================================================
   蓝蜂 OPC 官网 · 公开层共享样式（S8）
   深色科技风：背景 070B14 + 蓝 2E6BFF + 青 22D3EE + 金 FFC43D
   所有公开页（/ /bases/ /business/ /join/ /about/ /console/）共用。
   内部演示页（cockpit/ai/sc/data/work）不引这份，保持独立。
   ============================================================ */
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#070B14;--panel:#0D1526;--panel2:#111C33;--panel3:#16233F;
  --line:rgba(46,107,255,.18);--line2:rgba(46,107,255,.34);
  /* ⚠ --tx3 是「次级灰字」（页脚 / 品牌副标题 / 区块副标题 / 注册页填写提示）。
     原值 #5D6E8C 在深底上实测只有 3.17~3.82，低于正文要求的 4.5；
     注册页的「用于验证手机号真实有效」「提交后由本城基地初审、总部终审开通」
     这类引导语正好踩在这个值上 —— 那是转化路径上的话，不能读不清。
     提到 #7C8DA8 后 4.84~5.84，达标；与 --tx / --tx2 仍保持三级层次。
     与 assets/base.css 的 --tx3 取值保持一致（两个样式表是两个界面，但同一个设计令牌）。 */
  --tx:#E8EEF9;--tx2:#93A4C0;--tx3:#7C8DA8;
  --blue:#2E6BFF;--cyan:#22D3EE;--gold:#FFC43D;
  --green:#22C55E;--r:16px;
  /* 顶栏实测高度（js 会按真实高度回写）。移动端与各语言一致，都是 70px。 */
  --toph:70px;
}
html{scroll-behavior:smooth;scroll-padding-top:var(--toph)}
html,body{background:var(--bg);overflow-x:hidden}
body{color:var(--tx);font:14px/1.7 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;min-height:100vh;padding-top:var(--toph);
  background-image:
    radial-gradient(1100px 640px at 12% -8%,rgba(46,107,255,.20),transparent 62%),
    radial-gradient(900px 540px at 90% 2%,rgba(34,211,238,.11),transparent 60%),
    radial-gradient(760px 460px at 50% 110%,rgba(255,196,61,.06),transparent 62%);
  background-attachment:fixed}
.wrap{max-width:1180px;margin:0 auto;padding:0 22px}
.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
a{color:var(--cyan)}

/* ---------- 顶栏（玻璃拟态 + 导航）· 固定悬浮 ----------
   ⚠ 必须是 fixed，不能是 sticky：本文件第 16 行有 html,body{overflow-x:hidden}，
   它会让 body 变成滚动容器，sticky 于是"贴"在那个不滚动的 body 上 ——
   实测 position 明明算出 sticky，滚到 1400px 时顶栏 rectTop 却是 -1398（跟着页面滚走了）。
   改 fixed 后由 body 的 padding-top:var(--toph) 让出等高的位置，不遮内容；
   --toph 由 site.js 按真实高度回写，默认 70px（各宽度、各语言实测均为 70）。 */
.top{position:fixed;top:0;left:0;right:0;z-index:50;background:rgba(7,11,20,.82);backdrop-filter:blur(18px);
  border-bottom:1px solid rgba(46,107,255,.14)}
.top-in{max-width:1180px;margin:0 auto;padding:13px 22px;display:flex;align-items:center;gap:20px}
/* 用 logical property：LTR 下等于 margin-right:auto，RTL 下自动镜像成 margin-left:auto。
   ⚠ flex:0 0 auto 是硬要求：品牌名不许参与 flex 收缩。
   2026-09-18 实测教训——五语（es/fr/pt/ru/ja）下「品牌名+6 导航+语言切换+控制台按钮」求宽 >1180px，
   默认的收缩规则会从品牌名身上扣，把它压成「Plataforma Lanfeng…」；
   而顶栏容器自身 scrollWidth===clientWidth（是子元素被压、不是容器溢出），
   所以「量容器有没有溢出」的老回归脚本完全抓不到。现在改为：品牌名固定不缩，宽度不够由标签长度来解决。 */
.brand{display:flex;align-items:center;gap:11px;margin-inline-end:auto;flex:0 0 auto;
  text-decoration:none;color:inherit}
.mark{width:36px;height:36px;border-radius:10px;flex:none;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,var(--blue),#1B3FB8);box-shadow:0 4px 16px rgba(46,107,255,.4)}
.mark svg{width:20px;height:20px}
/* 品牌名与副标题一律不折行（折行会把顶栏撑高一倍）。
   overflow:hidden+ellipsis 保留为「可见的告警」：真被截断时肉眼与回归脚本都能发现，
   比被静默剪掉强。按上面的布局约定，正常情况下这两处截断量应恒为 0。 */
.brand>span{min-width:0;overflow:hidden}
.brand b,.brand i{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand b{font-size:16px;font-weight:600;letter-spacing:.4px;line-height:1.2}
.brand i{font-style:normal;font-size:11px;color:var(--tx3);letter-spacing:.5px}
.nav{display:flex;gap:3px;align-items:center;flex:none}
/* 导航项禁止折行：'Base Network' / 'Цепочка поставок' 这类长标签折成两行会顶高整条顶栏 */
.nav a{position:relative;text-decoration:none;color:var(--tx2);font-size:13.5px;padding:8px 11px;border-radius:9px;
  white-space:nowrap;transition:color .2s,background .2s}
.nav a:hover{color:var(--tx);background:rgba(46,107,255,.10)}
.nav a.on{color:var(--cyan)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;cursor:pointer;
  border:none;font:inherit;font-size:13.5px;font-weight:500;padding:10px 22px;border-radius:11px;
  transition:transform .2s,box-shadow .2s,border-color .2s,background .2s;white-space:nowrap}
.btn-pri{color:#fff;background:linear-gradient(135deg,var(--blue),#1F4FD8);box-shadow:0 6px 22px rgba(46,107,255,.36)}
.btn-pri:hover{transform:translateY(-2px);box-shadow:0 10px 30px rgba(46,107,255,.5)}
.btn-gold{color:#141414;background:linear-gradient(135deg,var(--gold),#F0A819);box-shadow:0 6px 22px rgba(255,196,61,.28)}
.btn-gold:hover{transform:translateY(-2px);box-shadow:0 10px 30px rgba(255,196,61,.4)}
.btn-ghost{color:var(--tx);background:rgba(46,107,255,.08);border:1px solid var(--line2)}
.btn-ghost:hover{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.08);transform:translateY(-2px)}
.btn:active{transform:translateY(0) scale(.985)}

/* ---------- 顶栏自适应断点 ----------
   阈值不是拍的，是按「各语言实测求宽」定的（scripts/_probe-brand.js / verify-topbar.js 可复现）：
     ≤1279：品牌副标题让位 + 整条导航隐藏、汉堡菜单顶上
     ≤1119：语言切换器收起语言名，只留地球图标
     ≤ 640：间距收紧 + 品牌名只留 Logo 图标
   为什么导航要收到 1279：日语顶栏在 1200px 时「品牌名(含副标题)+6 导航+语言名+控制台按钮」
   求宽 1167px，看似放得下、实际只剩 33px 余量，换个字体的操作系统就崩。
   1280 是主流笔记本宽度，收到这里能留出 110px+ 余量，跨平台稳。
   页面在任何宽度都有全站入口：>1279 是导航条，≤1279 是汉堡菜单。 */
@media(max-width:1279px){
  .brand i{display:none}
  .nav{display:none}
}
@media(max-width:1119px){
  .langsw>summary span{display:none}
  .langsw>summary{padding:8px 10px}
}
/* ⚠ .navsw 的 display:block 不能写在这里：它的基础规则 display:none 在本文件更靠后的位置，
   同优先级下后来者胜，会把这里的 block 覆盖掉（汉堡菜单整个不出现、窄屏等于没有导航）。
   所以那条媒体查询紧跟在 .navsw 样式之后写，见下面的「顶栏汉堡菜单」小节。 */
@media(max-width:640px){
  .top-in{gap:12px}
  /* 小屏只留 Logo 图标、收起品牌文字：360px 下「品牌名+汉堡+语言图标+控制台按钮」放不下，
     控制台按钮会被 body 的 overflow-x:hidden 静默剪掉。
     ⚠ 必须 :not(.mark)——Logo 也是一个 <span>，写成 .brand>span 会把 Logo 一起干掉。 */
  .brand>span:not(.mark){display:none}
}

/* ---------- 顶栏语言切换器（纯 <details>，无 JS 也能用） ---------- */
.langsw{position:relative;flex:none}
.langsw>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:6px;
  font-size:12.5px;color:var(--tx2);padding:8px 11px;border-radius:9px;white-space:nowrap;
  border:1px solid var(--line);background:rgba(46,107,255,.06);
  transition:color .2s,border-color .2s,background .2s}
.langsw>summary::-webkit-details-marker{display:none}
.langsw>summary::after{content:"";width:5px;height:5px;flex:none;margin-left:1px;
  border-right:1.5px solid var(--tx3);border-bottom:1.5px solid var(--tx3);
  transform:rotate(45deg) translate(-1px,-1px);transition:transform .2s}
.langsw>summary:hover{color:var(--tx);border-color:var(--line2)}
.langsw svg{width:14px;height:14px;flex:none;stroke:currentColor;fill:none;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.langsw[open]>summary{color:var(--cyan);border-color:var(--line2);background:rgba(46,107,255,.13)}
.langsw[open]>summary::after{transform:rotate(225deg) translate(-1px,-1px)}
.langsw-m{position:absolute;top:calc(100% + 9px);right:0;z-index:60;min-width:172px;
  display:grid;gap:1px;padding:6px;border-radius:13px;overflow:auto;max-height:min(72vh,430px);
  background:rgba(10,16,29,.97);backdrop-filter:blur(18px);
  border:1px solid var(--line2);box-shadow:0 20px 48px rgba(0,0,0,.55)}
.langsw-m a{display:block;padding:8px 11px;border-radius:9px;text-decoration:none;
  font-size:13px;color:var(--tx2);white-space:nowrap;transition:background .15s,color .15s}
.langsw-m a:hover{background:rgba(46,107,255,.14);color:var(--tx)}
.langsw-m a.on{color:var(--cyan);background:rgba(34,211,238,.1)}
[dir="rtl"] .langsw-m{right:auto;left:0}

/* ---------- 顶栏汉堡菜单（窄屏替代整条导航；同样纯 <details>，无 JS 也能用） ----------
   为什么需要：页脚「快速导航」删掉后，≤1119px 导航整条隐藏 = 手机上没有任何全站入口。
   面板内容由构建脚本按本页 <nav class="nav"> 原样复制（见 i18n_lib.expand_markers），
   所以链接、当前页高亮、各语言的内链前缀都自动与顶栏一致，不需要单独维护。 */
.navsw{display:none;position:relative;flex:none}
.navsw>summary{list-style:none;cursor:pointer;width:38px;height:38px;border-radius:10px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  border:1px solid var(--line);background:rgba(46,107,255,.06);transition:border-color .2s,background .2s}
.navsw>summary::-webkit-details-marker{display:none}
.navsw>summary i{display:block;width:17px;height:2px;border-radius:2px;background:var(--tx2);
  transition:transform .2s,opacity .2s,background .2s}
.navsw>summary:hover{border-color:var(--line2)}
.navsw[open]>summary{border-color:var(--line2);background:rgba(46,107,255,.13)}
.navsw[open]>summary i{background:var(--cyan)}
.navsw[open]>summary i:nth-child(1){transform:translateY(6px) rotate(45deg)}
.navsw[open]>summary i:nth-child(2){opacity:0}
.navsw[open]>summary i:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
.navsw-p{position:absolute;top:calc(100% + 12px);inset-inline-end:0;z-index:60;min-width:214px;
  display:flex;flex-direction:column;gap:1px;padding:7px;border-radius:14px;
  background:rgba(10,16,29,.97);backdrop-filter:blur(18px);
  border:1px solid var(--line2);box-shadow:0 20px 48px rgba(0,0,0,.55)}
.navsw-p a{display:block;padding:10px 13px;border-radius:10px;text-decoration:none;
  font-size:14px;color:var(--tx2);white-space:nowrap;transition:background .15s,color .15s}
.navsw-p a:hover{background:rgba(46,107,255,.14);color:var(--tx)}
.navsw-p a.on{color:var(--cyan);background:rgba(34,211,238,.1)}
/* 必须紧跟上面的基础样式（同优先级、靠声明顺序取胜），阈值与导航隐藏阈值一致 */
@media(max-width:1279px){.navsw{display:block}}

/* ---------- 滚动渐入（丝滑） ---------- */
.rv{opacity:0;transform:translateY(22px);transition:opacity .8s cubic-bezier(.22,.61,.36,1),transform .8s cubic-bezier(.22,.61,.36,1)}
.rv.on{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}

/* ---------- 区块标题 ---------- */
.sec{padding:64px 0 8px}
.sec-t{display:flex;align-items:baseline;gap:12px;margin-bottom:26px;flex-wrap:wrap}
.sec-t h2{font-size:26px;font-weight:600;display:flex;align-items:center;gap:12px;letter-spacing:.5px}
.sec-t h2::before{content:"";width:4px;height:20px;background:linear-gradient(180deg,var(--gold),var(--orange,#FF9F43));border-radius:2px}
.sec-t span{font-size:13px;color:var(--tx3)}

/* ---------- 卡片（玻璃 + 扫光） ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:18px}
.card{position:relative;background:linear-gradient(180deg,rgba(17,28,51,.72),rgba(13,21,38,.9));
  border:1px solid var(--line);border-radius:18px;padding:26px 24px;overflow:hidden;
  transition:transform .3s cubic-bezier(.22,.61,.36,1),border-color .3s,box-shadow .3s}
.card::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;
  background:linear-gradient(90deg,var(--c,var(--blue)),transparent 70%);opacity:.9}
.card::after{content:"";position:absolute;top:0;left:-80%;width:55%;height:100%;transform:skewX(-18deg);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.055),transparent);transition:left .6s ease}
.card:hover{transform:translateY(-5px);border-color:var(--line2);box-shadow:0 18px 44px rgba(0,0,0,.4)}
.card:hover::after{left:130%}
.card .ic{width:46px;height:46px;border-radius:13px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;
  background:color-mix(in srgb,var(--c,var(--blue)) 15%,transparent);border:1px solid color-mix(in srgb,var(--c,var(--blue)) 32%,transparent)}
.card .ic svg{width:22px;height:22px;stroke:var(--c,var(--blue));fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.card h3{font-size:17.5px;font-weight:600;margin-bottom:10px;letter-spacing:.3px}
.card p{font-size:13.5px;color:var(--tx2);line-height:1.85}
.card ul{margin-top:14px;list-style:none}
.card ul li{font-size:12.5px;color:var(--tx2);padding:5px 0 5px 18px;position:relative}
.card ul li::before{content:"";position:absolute;left:0;top:12px;width:7px;height:7px;border-radius:50%;
  background:var(--c,var(--blue));opacity:.8;box-shadow:0 0 8px var(--c,var(--blue))}

/* ---------- 数字条 ---------- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;text-align:center}
.stat{background:linear-gradient(180deg,rgba(17,28,51,.6),rgba(13,21,38,.85));border:1px solid var(--line);
  border-radius:16px;padding:24px 12px 20px;transition:border-color .3s,transform .3s}
.stat:hover{border-color:rgba(34,211,238,.4);transform:translateY(-3px)}
.stat b{display:block;font-size:34px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.5px;
  background:linear-gradient(135deg,#fff 20%,var(--cyan));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.stat span{font-size:12.5px;color:var(--tx3);letter-spacing:1px}

/* ---------- 页脚 ---------- */
.ft{margin-top:80px;border-top:1px solid rgba(46,107,255,.14);background:rgba(9,14,26,.6)}
.ft-in{max-width:1180px;margin:0 auto;padding:26px 22px 30px;display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}
.ft h4{font-size:14px;font-weight:600;margin-bottom:10px}
.ft p,.ft a{font-size:12.5px;color:var(--tx3);text-decoration:none;line-height:2}
.ft a:hover{color:var(--cyan)}
/* 页脚「快速导航」栏已于 2026-09-18 删除（顶栏已固定，页脚不再重复一份导航），
   原先的 .ft .ft-lnk 胶囊按钮样式一并移除。备份见 scripts/_bak/prefix-top-20260918-1050/ */
.ft-base{border-top:1px solid rgba(46,107,255,.1);text-align:center;padding:14px 22px;font-size:11.5px;color:var(--tx3)}
/* 底部备案号：与同行文字同字号同色。备案号必须可点击跳转工信部，故保留链接本体。
   选择器用 .ft-base a（排在 .ft a 之后，同权重靠后生效），兼容页脚不在 .ft 内的页面。 */
.ft-base a{font-size:inherit;color:inherit;transition:color .18s}
.ft-base a:hover{color:var(--cyan)}

/* ---------- 表单（console 用） ---------- */
.field{margin-bottom:16px}
.field label{display:block;font-size:12.5px;color:var(--tx2);margin-bottom:7px;letter-spacing:.4px}
.field input,.field select{width:100%;background:rgba(7,11,20,.7);border:1px solid var(--line);border-radius:11px;
  color:var(--tx);font:inherit;font-size:14px;padding:11px 14px;outline:none;transition:border-color .2s,box-shadow .2s}
.field input:focus,.field select:focus{border-color:rgba(34,211,238,.55);box-shadow:0 0 0 3px rgba(34,211,238,.12)}
.field input::placeholder{color:var(--tx3)}
.field .hint{font-size:11.5px;color:var(--tx3);margin-top:6px}
.code-row{display:flex;gap:10px}
.code-row input{flex:1}
.code-btn{flex:none;font-size:12.5px;padding:0 16px;border-radius:11px;border:1px solid rgba(34,211,238,.4);
  background:rgba(34,211,238,.1);color:var(--cyan);cursor:pointer;font-family:inherit;transition:.2s}
.code-btn:hover:not(:disabled){background:rgba(34,211,238,.18)}
.code-btn:disabled{opacity:.45;cursor:not-allowed}
.msg{border-radius:11px;padding:11px 15px;font-size:12.5px;line-height:1.7;margin-bottom:16px;display:none}
.msg.err{display:block;background:rgba(255,90,95,.1);border:1px solid rgba(255,90,95,.3);color:#FF9B9E}
.msg.ok{display:block;background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.3);color:#7FE3A0}
