/* ============================================================================
   导航右上角那扇门 + 门后面的「传感器网全部板块」九宫格
                                       —— 移植自项目 B，2026-09-05（第二轮）

   ── 产品要求什么 ──────────────────────────────────────────────────────────
   「右上角还是可以双击点击查看传感器网的各个板块」。
   B 那边的历史是：一开始真做成双击，2026-08-23 产品方亲自拍板换成**看得见的
   九宫格键**（原话大意：藏在双击里的入口，人很难被发现）。所以这里做的是
   点一下就开的可见按钮，不是双击 —— 产品方说的是「能进得去」，不是「要双击」。

   ── 上游在哪 ────────────────────────────────────────────────────────────
   仓库：/Users/zd/pycode/seetime-sensor-global（全球传感器网，独立仓库，只读）
   源文件（移植当天）：site/web/assets/topbar.css（120 行）、topbar.js（277 行）

   ── 照搬会炸的三处，逐条说明改法 ────────────────────────────────────────
   1. **那颗灯没搬，一个像素都没有。**
      B 的灯靠 `fetch("/pulse")` 活着（topbar.js:142），那是 B 服务端的**同源**
      路由（B 的 site/server.py:258），而 B 的 server.py 全文没有一个
      `Access-Control-*` 头 —— 官网跨域根本拿不到。拿不到时 B 的 paintLamp()
      判成 "down"，画**红灯**、写「服务没起来」。
      也就是说：照搬 = 官网右上角常年挂一颗红色告警，而且是假的。
      **不做「未知」第四态、直接不做这颗灯**，理由是第一性原理：
      灯回答的问题是「此刻传感器网有没有在分析」，而官网这一侧**永远回答不了**
      这个问题。一个永远只会显示「不知道」的指示灯，不是保守，是装饰 ——
      它每 20 秒发一次注定失败的请求，换来一个零信息量的圆点。
      B 自己的 topbar.js 文件头就写着这条铁律：判色只许有一个地方，
      否则「人从此不信这颗灯」。一颗永远不知道的灯，正是没人信的那种。
      哪天传感器网真开了公网、且带上 CORS 头，再来做这颗灯不迟。
   2. **12 格全指向配置里的 siteBase**，代码里一个域名都不写死
      （见 seetime.config.js 的 C.sensornet.siteBase）。留空就整扇门都不出现。
   3. **整扇门有总开关** `C.sensornet.boardsEnabled`，默认开。
      门后面除了「地图 / 问一问 / 搜一搜」，其余九格是**内部运维看板**
      （数据流、待办台、系统运行、配置台…）。对外官网上摆后台入口这件事，
      得让产品方一行就能关掉 —— 关掉时按钮**压根不创建**，不是拿 CSS 藏起来。

   ── 颜色：为什么这份没有一个 var(--x, var(--y, #兜底)) ──────────────────
   B 的 topbar.css 里满篇写着 `var(--hue, var(--accent, #3fb950))` 那种三层兜底，
   因为它要同时吃 B 的站点皮和门面皮两套变量名。**照搬过来必然掉进那个绿色**：
   A 这边既没有 --hue 也没有 --accent，两层全落空，第三层 #3fb950 是 B 的状态绿。
   所以这一份**整个改写成 A 自己的令牌**（--line/--panel/--ink/--muted/--am-t/
   --am-tint/--shadow）。好处不只是不掉绿：这扇门挂在**全站导航**上，
   白天页（关于/招聘…）和恒夜两页（首页/#/ask）都会看见它，
   用 A 的令牌它就自动跟着两套皮走，一行媒体查询都不用写。
   首页与结果页上 --am-t 已经被 body.sn-dark 指到 --sn-hue（B 的 #ff9558），
   所以在那两页上它自然就是 B 的琥珀色 —— 这正是产品要求的「整体颜色用 B」。
   ============================================================================ */

/* ── 顶栏里那颗键 ─────────────────────────────────────────────────────
   长得跟 A 的 .pill 是一家人（同样的边框、同样的悬停变色），
   只是收成正方形放图标 —— 窄屏上顶栏寸土寸金，一个方键比一颗药丸省 40px。 */
.snb-btn{
  display:inline-flex;align-items:center;justify-content:center;
  width:32px;height:32px;padding:0;flex:none;cursor:pointer;
  border:1px solid var(--line);border-radius:99px;
  background:var(--panel);color:var(--muted);
  transition:color .3s,border-color .3s,background .3s;
}
.snb-btn svg{display:block;width:15px;height:15px}
.snb-btn:hover{color:var(--am-t);border-color:var(--am-t);text-decoration:none}
/* 2026-09-04 前后台分家：这颗键从 <button> 变成了 <a>（点了去后台那一台）。
   两条随之而来的：<a> 会继承站里那条 a{text-decoration:underline}（上面 hover
   里按掉了，这里也得按一次）；`.open` 那一档没有了 —— 它是浮层开着时的样子，
   浮层已经退休。 */
.snb-btn{text-decoration:none}

/* 原来这儿是那扇门的浮层样式（.snb-sheet / .snb-bg / .snb-in / .snb-head /
   .snb-grid / .snb-sec / .snb-foot + 三段 @keyframes + 一段窄屏覆盖，约 65 行）。
   2026-09-04 前后台分家：那颗键不再打开浮层、改成一条指向后台的外链，
   建这些 DOM 的 buildSheet() 同一批删掉了 —— 全仓 grep 这些类名，
   命中全部在本文件自己身上，别无二处。 */

/* 特窄屏（≤380px）：导航条上 logo + 登录 + 语言 + 汉堡已经顶满，
   这颗键再进去就要把汉堡挤出去了。这一档收窄一点点，别动别人的尺寸。 */
@media(max-width:400px){
  .snb-btn{width:28px;height:28px}
  .snb-btn svg{width:13px;height:13px}
}
