Regression / regression (push) Canceled after 0s
## 品牌标识(本次会话) 起因:品牌此前没有任何图形标识 —— 唯一 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 未做部分)
459 lines
24 KiB
CSS
459 lines
24 KiB
CSS
/* 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; }
|