Files
aurora-admin/site/m/style.css
T
aurora-admin f1fbfc2ddb
Regression / regression (push) Canceled after 0s
feat(品牌标识): 几何 K 图标(favicon/顶栏标记/theme-color) + 并行会话成果入库
## 品牌标识(本次会话)

起因:品牌此前没有任何图形标识 —— 唯一 favicon 是内联 data-URI 里的字母「A」,
那是 v2.0.0「Aurora Admin → Kole UI」改名漏掉的一处(PC 顶栏也是「A」,
移动端站已是「K」;移动端文档站则完全没有 favicon)。

- 几何:24 网格三个互不接触的笔画(竖 + 两斜),圆头描边;
  描边 2.25 → 16px 标签页尺寸下正好 1.5px = 规范原文「描边1.5px」
- 取色分两套(刻意):favicon 硬编码品牌蓝/白(渲染在浏览器标签栏,不继承 kole-dark);
  顶栏标记走 currentColor(实测暗色下自动转 rgb(20,22,28))
- 新增 theme-color 双条(light #FFFFFF / dark #1C1F26,取 --kole-color-card-bg)
- 修 site/app.js hero 标语 KOLE ADMIN → KOLE UI(改名变形残留)
- 移动端 7 个模板补 favicon(此前计数 0)

验收:门禁 9 条全 OK(site-routing/site-routes/mobile-docs/mobile-site/isolation/
theme/nav/i18n/icons);PC 回归 1464/1464 · 移动端 807/807,各连跑 8 次一致;
两端 favicon 405 字节逐字节一致;PC 站控制台错误 1→0。

## 并行会话成果(本次一并入库)

- 图标系统:2576 图标(TDesign/Element Plus,MIT)+ 11 端注入 + 5 个构建门禁工具
  + IconPreview 预览页 + ICON-SPEC.md 冻结规格
- 移动端平台:47 组件 × 6 端 + 文档站 53 页 + 隔离门禁
- PC 组件:103 个大后台组件 / 组件11 批次
- uni-app:PC 端试点 + 移动端端实现 + 真实编译验证

## 工程

- .gitignore 补 .scratch/ 与 .zcode-preexisting-*.txt(会话中间产物,实测 9.1MB,不入库)
- CHANGELOG 补品牌标识条目
- ROADMAP 登 S8-P4(品牌标识任务包 + og:image/apple-touch-icon 未做部分)
2026-09-21 10:05:48 +08:00

459 lines
24 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Kole UI Mobile 文档站样式(site/m/ 专属)
自包含:不引用 site/style.css(那是 PC 文档站的样式),只依赖移动端令牌层。
令牌来源:.design_library/kole-ui-mobile/colors_and_type.css(@import PC 令牌 + --kole-m-*)。 */
* { box-sizing: border-box; }
body {
margin: 0;
font-family: var(--kole-font-family);
font-size: 14px;
line-height: 1.6;
color: var(--kole-color-text-body);
background: var(--kole-color-page-bg);
}
a { color: var(--kole-color-brand); text-decoration: none; }
a:hover { text-decoration: underline; }
/* ---- 顶栏(对齐 PC:60px 高 / 内容在容器内居中 / 激活项底部 2px 指示条)----
与 PC 的 .topbar 同一结构与顺序:logo(含副标题)+ 版本控件 + 主导航 + 主题模式。
区别只有容器宽度(PC 1440 / 本站 1180,与 .m-body 同宽,logo 与左栏左边缘对齐)
与高度的 60px 常量(PC 也用 60px)。 */
.m-top {
position: sticky;
top: 0;
z-index: 10;
height: 60px;
background: var(--kole-color-card-bg);
border-bottom: 1px solid var(--kole-color-border);
}
.m-top-inner {
max-width: 1180px;
margin: 0 auto;
height: 100%;
display: flex;
align-items: center;
gap: var(--kole-space-16);
padding: 0 var(--kole-space-24);
}
/* ---- 版本控件(PC .ver-picker 同款:可点下拉;清单拿不到时 data-single="1" 退回纯角标)---- */
.m-ver-picker { position: relative; flex-shrink: 0; }
.m-ver-trigger {
display: inline-flex; align-items: center; gap: 4px;
height: 22px; padding: 0 7px;
border: 1px solid transparent; border-radius: var(--kole-radius-small);
background: var(--kole-color-brand-bg);
color: var(--kole-color-brand);
font-family: var(--kole-font-family-num); font-size: 12px; font-weight: 500;
cursor: pointer; flex-shrink: 0;
transition: border-color .15s, background .15s, color .15s, box-shadow .15s;
}
.m-ver-trigger:hover { border-color: var(--kole-color-brand); }
.m-ver-trigger:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: 1px; }
.m-ver-trigger[aria-expanded="true"] {
border-color: var(--kole-color-brand);
box-shadow: 0 0 0 2px var(--kole-color-focus-ring);
}
.m-ver-caret { opacity: .75; transition: transform .18s ease; }
.m-ver-trigger[aria-expanded="true"] .m-ver-caret { transform: rotate(180deg); }
/* data-single="1" = 清单拿不到任何版本(未构建/未部署):退回纯角标观感,不留点不开的下拉 */
.m-ver-trigger[data-single="1"] { pointer-events: none; }
.m-ver-trigger[data-single="1"] .m-ver-caret { display: none; }
.m-ver-menu {
position: absolute; top: calc(100% + 8px); left: 0; z-index: 130;
width: min(216px, calc(100vw - 24px));
padding: 6px; display: flex; flex-direction: column; gap: 2px;
background: var(--kole-color-card-bg);
border: 1px solid var(--kole-color-border);
border-radius: var(--kole-radius-large);
box-shadow: var(--kole-shadow-high);
}
.m-ver-menu.hidden { display: none; }
.m-ver-menu-head {
padding: 3px 8px 7px; margin-bottom: 2px; border-bottom: 1px solid var(--kole-color-border);
color: var(--kole-color-text-secondary); font-size: 11px; line-height: 16px;
}
.m-ver-opt {
display: flex; align-items: center; gap: 8px;
width: 100%; min-height: 32px; padding: 0 8px;
border: 0; border-radius: var(--kole-radius-small);
background: transparent; color: var(--kole-color-text-body);
font: inherit; font-size: 13px; text-align: start; cursor: pointer;
}
.m-ver-opt:hover,
.m-ver-opt:focus-visible { background: var(--kole-color-brand-bg); color: var(--kole-color-brand); outline: none; }
.m-ver-opt[aria-selected="true"] { color: var(--kole-color-brand); font-weight: 600; }
.m-ver-opt-num { flex: 1; white-space: nowrap; font-family: var(--kole-font-family-num); }
.m-ver-opt-tag {
font-family: var(--kole-font-family-num); font-size: 10.5px; letter-spacing: .04em;
color: var(--kole-color-text-placeholder); white-space: nowrap;
}
.m-ver-opt[aria-selected="true"] .m-ver-opt-tag { color: var(--kole-color-brand); }
@media (prefers-reduced-motion: reduce) {
.m-ver-caret { transition: none; }
}
/* 顶栏导航:整栏高、激活项底部 2px 品牌指示条(PC .topnav a.active::after 同款) */
.m-nav {
margin-left: auto; display: flex; align-items: center; gap: var(--kole-space-8);
height: 100%; font-size: 14px;
}
.m-nav a {
position: relative;
display: inline-flex; align-items: center;
height: 100%; padding: 0 var(--kole-space-12);
color: var(--kole-color-text-body); text-decoration: none; white-space: nowrap;
}
.m-nav a:hover { color: var(--kole-color-brand); text-decoration: none; }
.m-nav a.active { color: var(--kole-color-brand); font-weight: 500; }
.m-nav a.active::after {
content: '';
position: absolute;
left: 12px; right: 12px; bottom: 0;
height: 2px;
background: var(--kole-color-brand);
border-radius: 1px 1px 0 0;
}
.m-shell { max-width: 1100px; margin: 0 auto; padding: var(--kole-space-24); }
.m-hero h1 { margin: 0 0 var(--kole-space-8); font-size: 26px; color: var(--kole-color-text-title); }
.m-hero p { margin: 0; color: var(--kole-color-text-secondary); }
.m-isolation {
margin: var(--kole-space-20) 0;
padding: var(--kole-space-16);
background: var(--kole-color-card-bg);
border: 1px solid var(--kole-color-border);
border-radius: var(--kole-radius-medium);
}
.m-isolation h2 { margin: 0 0 var(--kole-space-8); font-size: 15px; color: var(--kole-color-text-title); }
.m-isolation table { width: 100%; border-collapse: collapse; font-size: 13px; }
.m-isolation th, .m-isolation td { text-align: start; padding: 6px 10px; border-bottom: 1px solid var(--kole-color-border); }
.m-isolation th { color: var(--kole-color-text-secondary); font-weight: 500; }
.m-isolation code, .m-code { font-family: var(--kole-font-family-num); font-size: 12px; }
.m-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--kole-space-16); margin-top: var(--kole-space-20); }
.m-card {
background: var(--kole-color-card-bg);
border: 1px solid var(--kole-color-border);
border-radius: var(--kole-radius-medium);
overflow: hidden;
display: flex;
flex-direction: column;
}
.m-card header { padding: var(--kole-space-12) var(--kole-space-16); border-bottom: 1px solid var(--kole-color-border); }
.m-card header .zh { font-size: 15px; color: var(--kole-color-text-title); }
.m-card header .en { font-family: var(--kole-font-family-num); font-size: 11px; color: var(--kole-color-text-secondary); }
/* 预览:以 320px 宽的设备帧展示真实演示页(iframe 即独立视口,fixed 元素落位正确) */
.m-card .preview { height: 260px; overflow: hidden; background: var(--kole-color-page-bg); }
.m-card .preview iframe { width: 320px; max-width: 100%; height: 560px; border: 0; display: block; transform: scale(.464); transform-origin: 0 0; }
.m-card footer { margin-top: auto; padding: var(--kole-space-8) var(--kole-space-16); border-top: 1px solid var(--kole-color-border); display: flex; gap: var(--kole-space-12); font-size: 12px; }
/* ---- 窄屏(≤720px)----
实测(2026-09-20,375px):本站在小屏上横向溢出 128px —— 元凶是表格里**不可断行的长路径**
(`.design_library/kole-ui-mobile/components/` 这类 token 把表格最小宽度顶到 462px),
以及组件页设备帧 iframe 固定 375px 宽。一个讲移动端的文档站自己在手机上横向滚动说不过去,
故:① 表格单元格允许长 token 断行;② iframe 取 min(设计宽, 容器宽);
③ 顶栏允许换行并把副导航收起来。 */
.m-table th, .m-table td, .m-isolation th, .m-isolation td { overflow-wrap: anywhere; word-break: break-word; }
.m-table code, .m-isolation code, .m-code { overflow-wrap: anywhere; }
@media (max-width: 720px) {
.m-top { height: auto; min-height: 60px; }
.m-top-inner { flex-wrap: wrap; padding: var(--kole-space-8) var(--kole-space-16); gap: var(--kole-space-8); row-gap: 6px; }
.m-nav { margin-left: 0; width: 100%; order: 3; gap: var(--kole-space-12); }
.m-shell { padding: var(--kole-space-16); }
.m-hero h1 { font-size: 22px; }
.m-grid { grid-template-columns: 1fr; }
}
.m-block { margin: var(--kole-space-20) 0; }
.m-block h2 { font-size: 16px; margin: 0 0 var(--kole-space-8); color: var(--kole-color-text-title); }
.m-block ul { margin: 0; padding-inline-start: 18px; }
.m-block li { margin: 2px 0; }
.m-table { width: 100%; border-collapse: collapse; font-size: 13px; background: var(--kole-color-card-bg); border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-medium); overflow: hidden; }
.m-table th, .m-table td { text-align: start; padding: 8px 12px; border-bottom: 1px solid var(--kole-color-border); vertical-align: top; }
.m-table th { background: var(--kole-color-table-header-bg); color: var(--kole-color-text-secondary); font-weight: 500; }
.m-table tr:last-child td { border-bottom: 0; }
.m-table code { font-family: var(--kole-font-family-num); font-size: 12px; color: var(--kole-color-text-title); }
.m-pill { display: inline-flex; align-items: center; height: 22px; padding: 0 10px; border-radius: var(--kole-radius-small); font-size: 12px; background: var(--kole-color-table-header-bg); color: var(--kole-color-text-secondary); font-family: var(--kole-font-family-num); }
.m-pill.brand { background: var(--kole-color-brand-bg); color: var(--kole-color-brand); }
.m-pill.warn { background: var(--kole-color-tag-green-bg); color: var(--kole-color-success); }
.m-stage { border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-medium); background: var(--kole-color-page-bg); padding: var(--kole-space-16) 0; }
/* 设备帧按设计宽 375px 展示;容器更窄时收缩(否则手机上看组件文档页会横向滚动,实测 375px 溢出 17px、320px 溢出 72px) */
.m-stage iframe { width: min(375px, 100%); height: 640px; margin: 0 auto; border: 0; display: block; background: var(--kole-color-card-bg); }
.m-ends { display: flex; flex-wrap: wrap; gap: var(--kole-space-8); }
.m-ends a {
display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px;
border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-base);
background: var(--kole-color-card-bg); color: var(--kole-color-text-body); font-size: 13px;
}
.m-ends a:hover { border-color: var(--kole-color-brand); color: var(--kole-color-brand); text-decoration: none; }
.m-foot { margin-top: var(--kole-space-32); padding-top: var(--kole-space-16); border-top: 1px solid var(--kole-color-border); color: var(--kole-color-text-secondary); font-size: 12px; }
/* ============================================================
左栏 + 主区两列布局(2026-09-20:补全左侧导航)
左栏用 <details open> 承载:桌面恒定展开(summary 隐藏、忽略收起语义),
≤1000px 变成可折叠面板 —— 静态页不需要 JS 同步状态。
主区必须 min-width:0:否则内部表格的 min-content 会把整个网格顶宽。
============================================================ */
.m-body {
max-width: 1180px;
margin: 0 auto;
padding: var(--kole-space-24) var(--kole-space-24) 0;
display: grid;
grid-template-columns: 236px minmax(0, 1fr);
gap: var(--kole-space-24);
align-items: start;
}
.m-main { min-width: 0; }
/* sticky 偏移 = 顶栏高(60px)+ 间距 16px,和 .m-body 的上边距同源;顶栏改高时这里必须跟着改 */
.m-side { position: sticky; top: 76px; max-height: calc(100vh - 100px); overflow-y: auto; overscroll-behavior: contain; }
.m-side > summary { display: none; }
.m-side:not([open]) > nav { display: block; } /* 桌面始终展开 */
.m-side nav { display: flex; flex-direction: column; gap: 2px; }
.m-side-section {
display: flex; align-items: center; gap: 6px;
margin: var(--kole-space-12) 0 4px;
padding: 0 10px;
font-size: 12px; color: var(--kole-color-text-secondary);
}
.m-side-section:first-child { margin-top: 0; }
.m-side-section .cnt {
margin-left: auto; font-family: var(--kole-font-family-num); font-size: 11px;
color: var(--kole-color-text-placeholder);
}
.m-side-group {
display: flex; align-items: center; gap: 6px;
margin: var(--kole-space-8) 0 2px; padding: 0 10px;
font-size: 11.5px; color: var(--kole-color-text-placeholder);
}
.m-side-group .cnt { margin-left: auto; font-family: var(--kole-font-family-num); font-size: 11px; }
.m-side-link {
display: flex; align-items: center; gap: 8px;
padding: 6px 10px; border-radius: var(--kole-radius-base);
color: var(--kole-color-text-body); font-size: 13px; text-decoration: none;
transition: background-color .15s, color .15s;
}
.m-side-link:hover { background: var(--kole-color-table-header-bg); color: var(--kole-color-brand); text-decoration: none; }
.m-side-link:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: -2px; }
.m-side-link.is-active { background: var(--kole-color-brand-bg); color: var(--kole-color-brand); font-weight: 500; }
.m-side-link em {
margin-left: auto; font-family: var(--kole-font-family-num); font-style: normal;
font-size: 11px; color: var(--kole-color-text-placeholder);
}
.m-side-link.is-active em { color: var(--kole-color-brand); opacity: .75; }
@media (max-width: 1000px) {
.m-body { grid-template-columns: minmax(0, 1fr); padding: var(--kole-space-16) var(--kole-space-16) 0; gap: var(--kole-space-16); }
.m-side {
position: static; max-height: none;
border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-medium);
background: var(--kole-color-card-bg); padding: 0 var(--kole-space-8) var(--kole-space-8);
}
.m-side > summary {
display: flex; align-items: center; gap: 8px;
padding: 10px 8px; cursor: pointer; font-size: 14px; color: var(--kole-color-text-title);
}
.m-side > summary .cur { margin-left: auto; font-size: 12px; color: var(--kole-color-text-secondary); }
.m-side:not([open]) > nav { display: none; }
.m-side-section:first-child { margin-top: var(--kole-space-8); }
}
/* ---- 代码块与复制按钮 ---- */
.m-code { margin: var(--kole-space-12) 0; border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-medium); overflow: hidden; background: var(--kole-color-card-bg); }
.m-code-head {
display: flex; align-items: center; gap: 8px;
padding: 6px 10px; background: var(--kole-color-table-header-bg);
border-bottom: 1px solid var(--kole-color-border);
font-size: 12px; color: var(--kole-color-text-secondary);
}
.m-code-head > span:first-child { flex: 1; font-family: var(--kole-font-family-num); }
.m-copy {
height: 24px; padding: 0 10px;
border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-small);
background: var(--kole-color-card-bg); color: var(--kole-color-text-body);
font-family: inherit; font-size: 12px; cursor: pointer;
transition: border-color .15s, color .15s, background-color .15s;
}
.m-copy:hover { border-color: var(--kole-color-brand); color: var(--kole-color-brand); }
.m-copy:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: 1px; }
.m-copy.is-done { background: var(--kole-color-brand); border-color: var(--kole-color-brand); color: var(--kole-color-text-inverse); }
.m-code pre { margin: 0; padding: var(--kole-space-12); overflow: auto; max-height: 460px; background: var(--kole-color-card-bg); }
.m-code pre code {
font-family: var(--kole-font-family-num); font-size: 12px; line-height: 1.7;
color: var(--kole-color-text-body); white-space: pre; tab-size: 2;
}
/* ---- 列表 / 提示 / 令牌胶囊 ---- */
.m-steps { margin: 0; padding-inline-start: 20px; display: flex; flex-direction: column; gap: 6px; font-size: 13px; }
.m-steps li::marker { color: var(--kole-color-brand); font-family: var(--kole-font-family-num); }
.m-note { margin: 6px 0 0; font-size: 12px; color: var(--kole-color-text-secondary); }
.m-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.m-chip {
font-family: var(--kole-font-family-num); font-size: 11.5px; line-height: 18px;
padding: 2px 8px; border-radius: 10px;
background: var(--kole-color-table-header-bg); color: var(--kole-color-text-body);
}
.m-chip.m { background: var(--kole-color-brand-bg); color: var(--kole-color-brand); }
.m-chip.inherit { background: var(--kole-color-tag-green-bg); color: var(--kole-color-success); }
/* ---- 组件页细节 ---- */
.m-sub { margin: 0 0 var(--kole-space-8); font-size: 13.5px; color: var(--kole-color-text-secondary); }
.m-cls {
font-family: var(--kole-font-family-num); font-size: 11.5px;
padding: 1px 6px; border-radius: var(--kole-radius-small);
background: var(--kole-color-brand-bg); color: var(--kole-color-brand);
}
.m-none { color: var(--kole-color-text-placeholder); }
.m-two { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--kole-space-16); }
.m-details { border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-medium); background: var(--kole-color-card-bg); overflow: hidden; }
.m-details > summary { padding: 8px 12px; cursor: pointer; font-size: 13px; color: var(--kole-color-text-title); }
.m-details[open] > summary { border-bottom: 1px solid var(--kole-color-border); }
.m-details .m-code { margin: 0; border: 0; border-radius: 0; }
.m-status { display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 10px; border-radius: var(--kole-radius-small); font-size: 12px; font-family: var(--kole-font-family-num); background: var(--kole-color-table-header-bg); color: var(--kole-color-text-secondary); }
.m-status.pass { background: var(--kole-color-tag-green-bg); color: var(--kole-color-success); }
.m-status.fail { background: rgba(245,34,45,.12); color: var(--kole-color-error); }
/* ---- 演示块(TDesign 范式:每个演示 = 标题 + 说明 + 预览 + 代码)---- */
.m-demo-group {
margin: var(--kole-space-20) 0 var(--kole-space-8);
padding-left: 8px;
border-left: 3px solid var(--kole-color-brand);
font-size: 15px;
font-weight: 600;
color: var(--kole-color-text-title);
}
.m-demo { margin: 0 0 var(--kole-space-20); }
.m-demo-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.m-demo-title { font-size: 14px; font-weight: 500; color: var(--kole-color-text-title); }
.m-demo-desc { margin: 4px 0 var(--kole-space-8); font-size: 13px; color: var(--kole-color-text-secondary); }
.m-demo-stage {
border: 1px solid var(--kole-color-border);
border-radius: var(--kole-radius-medium);
background: var(--kole-color-page-bg);
padding: var(--kole-space-12) 0;
}
/* 单演示预览:375 宽设备帧、高度按单块内容给(比整页 640 矮),容器更窄时收缩 */
.m-demo-stage iframe {
width: min(375px, 100%);
height: 260px;
margin: 0 auto;
border: 0;
display: block;
background: var(--kole-color-card-bg);
}
.m-demo .m-details { margin-top: var(--kole-space-8); }
/* ============================================================
顶栏(2026-09-20:与 PC 顶栏同结构 —— logo + 版本下拉 + 主导航 + 主题模式)
左栏另有三段式「平台 / 开发指南 / 组件 N」,与 PC 侧栏同款。
PC 特有的三件未搬:搜索框(103 个组件才需要)、技术栈选择器(移动端 6 端同页展示)、
语言选择器(移动端无 i18n 字典)。
平台切换不在顶栏 —— 顶栏那份与左栏「平台」组重复(实测两条链接同指 ../index.html),
已删;两端现在都只有左栏一处入口。顶栏骨架样式见文件顶部 .m-top 一节。
============================================================ */
.m-logo { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; color: var(--kole-color-text-title); flex-shrink: 0; }
.m-logo-mark {
width: 26px; height: 26px; border-radius: 7px; flex-shrink: 0;
background: var(--kole-color-brand); color: var(--kole-color-text-inverse);
display: inline-flex; align-items: center; justify-content: center;
}
/* 品牌标记是内联 SVG(几何 K,与 PC 站同一份路径)。尺寸由 SVG 的 width/height 给,
这里只挡拉伸 —— 窄屏 .m-logo-text em 会隐藏,标记块始终保留。 */
.m-logo-mark svg { display: block; flex-shrink: 0; }
.m-logo-text { font-size: 15px; font-weight: 600; white-space: nowrap; }
.m-logo-text em { font-style: normal; font-weight: 400; font-size: 12px; color: var(--kole-color-text-secondary); margin-left: 6px; }
.m-mode { position: relative; flex-shrink: 0; }
.m-mode-trigger {
height: 34px; padding: 0 10px; display: inline-flex; align-items: center; gap: 6px;
border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-base);
background: var(--kole-color-card-bg); color: var(--kole-color-text-body);
font-family: inherit; font-size: 13px; cursor: pointer;
transition: border-color .15s, color .15s, box-shadow .15s;
}
.m-mode-trigger:hover { border-color: var(--kole-color-brand); color: var(--kole-color-brand); }
.m-mode-trigger:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: 1px; }
.m-mode-trigger[aria-expanded="true"] {
border-color: var(--kole-color-brand); color: var(--kole-color-brand);
box-shadow: 0 0 0 2px var(--kole-color-focus-ring);
}
.m-mode-caret { opacity: .6; }
/* 三态图标(PC .theme-icon 同款):带浅色底衬,标识「这是主题入口」。
显隐由 JS 控制(applyMode)—— 显式选择时按时态给图标,自动模式下恒为显示器图标。 */
.m-mode-icon {
flex: 0 0 auto;
border-radius: var(--kole-radius-small);
background: var(--kole-color-table-header-bg);
transition: background .16s ease;
}
.m-mode-trigger:hover .m-mode-icon,
.m-mode-trigger[aria-expanded="true"] .m-mode-icon { background: var(--kole-color-brand-bg); }
.m-menu {
position: absolute; top: calc(100% + 8px); right: 0; z-index: 120;
width: 148px; padding: 6px; display: flex; flex-direction: column; gap: 2px;
background: var(--kole-color-card-bg); border: 1px solid var(--kole-color-border);
border-radius: var(--kole-radius-large); box-shadow: var(--kole-shadow-high);
}
.m-menu.hidden { display: none; }
.m-menu-head {
padding: 3px 8px 7px; margin-bottom: 2px; border-bottom: 1px solid var(--kole-color-border);
color: var(--kole-color-text-secondary); font-size: 11px;
}
.m-menu-opt {
display: flex; align-items: center; width: 100%; min-height: 32px; padding: 0 8px;
border: 0; border-radius: var(--kole-radius-small); background: transparent;
color: var(--kole-color-text-body); font-family: inherit; font-size: 13px; text-align: start; cursor: pointer;
}
.m-menu-opt:hover, .m-menu-opt:focus-visible { background: var(--kole-color-brand-bg); color: var(--kole-color-brand); outline: none; }
.m-menu-opt[aria-selected="true"] { color: var(--kole-color-brand); font-weight: 600; }
/* 侧栏「平台」组:两行 + 「当前」角标(PC 侧栏同款) */
.m-side-platform {
height: auto; min-height: 46px; flex-direction: column; align-items: flex-start;
justify-content: center; gap: 2px; padding: 6px 10px;
}
.m-side-platform .sp-top { display: flex; align-items: center; gap: 6px; }
.m-side-platform .sp-badge {
height: 16px; padding: 0 6px; border-radius: 8px;
background: var(--kole-color-brand); color: var(--kole-color-text-inverse);
font-size: 10px; line-height: 16px;
}
.m-side-platform .sp-sub {
font-size: 11px; line-height: 15px; color: var(--kole-color-text-placeholder);
white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
}
.m-side-platform:hover .sp-sub { color: var(--kole-color-text-secondary); }
/* 窄屏:副导航独占一行;logo 副标题让位。版本控件在最窄档整块收起 ——
只藏文字会留下一个空箭头按钮(视觉上是「点不开的下拉」,与 PC 的
data-single="1" 语义不同),不如整块收起。 */
@media (max-width: 820px) {
.m-logo-text em { display: none; }
}
@media (max-width: 720px) {
.m-nav { margin-left: 0; width: 100%; order: 4; gap: var(--kole-space-12); overflow-x: auto; }
}
@media (max-width: 480px) {
.m-ver-picker { display: none; }
}
/* 正文里的长 token 必须能断行:更新日志页从 CHANGELOG.md 提取的正文含 64 位哈希、
长路径这类不可断词的串,实测会让页面在 375px 溢出 88px / 414px 溢出 49px。
表格单元格此前已有同类规则(见 .m-table th/td),这里补齐正文与列表。 */
.m-sub, .m-note, .m-steps li, .m-block p, .m-demo-desc { overflow-wrap: anywhere; }
.m-sub code, .m-note code, .m-steps li code, .m-block p code, .m-demo-desc code { overflow-wrap: anywhere; }