@eddyskywalker/dsh-chatgpt-subscription 0.40.2 → 0.41.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/lib/client.js +420 -15
- package/lib/client.js.map +1 -1
- package/lib/index.js +674 -229
- package/lib/types/client/common/AccountPoolSection.d.ts +19 -0
- package/lib/types/client/common/AccountPoolSection.d.ts.map +1 -1
- package/lib/types/client/kimi-code/KimiCodeSection.d.ts.map +1 -1
- package/lib/types/client/kimi-code/KimiQuotaCard.d.ts +31 -0
- package/lib/types/client/kimi-code/KimiQuotaCard.d.ts.map +1 -0
- package/lib/types/client/kimi-code/locales.d.ts +74 -2
- package/lib/types/client/kimi-code/locales.d.ts.map +1 -1
- package/lib/types/client/kimi-code/staff-art.d.ts +19 -0
- package/lib/types/client/kimi-code/staff-art.d.ts.map +1 -0
- package/lib/types/client/kimi-code/styles.d.ts.map +1 -1
- package/lib/types/client/locales-ru/kimi-code.d.ts.map +1 -1
- package/lib/types/compat.d.ts +1 -1
- package/lib/types/host/agent-preset.d.ts.map +1 -1
- package/lib/types/host/kimi-code/adapter.d.ts +29 -0
- package/lib/types/host/kimi-code/adapter.d.ts.map +1 -1
- package/lib/types/host/kimi-code/cache-hint.d.ts +5 -5
- package/lib/types/host/kimi-code/client.d.ts.map +1 -1
- package/lib/types/host/kimi-code/mapper.d.ts.map +1 -1
- package/lib/types/host/kimi-code/routes.d.ts.map +1 -1
- package/lib/types/host/kimi-code/session-cache-state.d.ts +140 -0
- package/lib/types/host/kimi-code/session-cache-state.d.ts.map +1 -0
- package/lib/types/host/opendesign/adapter.d.ts.map +1 -1
- package/lib/types/host/opendesign/catalog.d.ts.map +1 -1
- package/lib/types/host/opendesign/types.d.ts +4 -0
- package/lib/types/host/opendesign/types.d.ts.map +1 -1
- package/lib/types/host/progress-updates/index.d.ts.map +1 -1
- package/lib/types/host/progress-updates/prompt.d.ts +6 -3
- package/lib/types/host/progress-updates/prompt.d.ts.map +1 -1
- package/lib/types/host/subagent-route-audit.d.ts +5 -0
- package/lib/types/host/subagent-route-audit.d.ts.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/presets/dispatch/agent.cordis.yml +7 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.41.1 - 2026-10-26
|
|
6
|
+
|
|
7
|
+
- **[opendesign] DeepSeek 系列模型默认推理强度设为 `high`**
|
|
8
|
+
- `deepseek-v4.1-flash`、`deepseek-v4-flash`、`deepseek-v4-flash-vision-exp`、`deepseek-v4-pro` 现在通过适配器向宿主声明默认 `high` 推理强度;其它模型不显式覆盖宿主默认值。
|
|
9
|
+
- 实时目录的档位列表不再包含 `high` 时,会丢弃随包默认值,而不是把已经失效的默认档位继续传给宿主。适配器与目录测试覆盖四款模型及这一降级路径。
|
|
10
|
+
|
|
11
|
+
- **[dispatch] 新旧子代理模型选择开关双写,恢复发布版 rc.3 的授权模型派发**
|
|
12
|
+
- **现象**:发布版 Harness rc.3 搭配插件 0.41.0 时,调度模式能看到授权模型,却不能按 `provider` + `model` 派出子代理;包含后续子代理改动的本地同号 HEAD 正常。
|
|
13
|
+
- **根因**:npm 发布包 `@deepseek-ai/dsh-tool-subagent@0.2.1-rc.3` 仍只读取 `modelSelectionSettings`,并由它控制路由参数、模型发现和 Session 策略记录;`modelSelection` / `modelDiscovery` 是本地 HEAD 的后续契约,相关提交 `8fa8e9167db`、`1448360b669` 均不在发布标签中。插件 0.41.0 只写两个新键,发布版因此把旧开关留在默认 `false`。
|
|
14
|
+
- **改法**:运行时 dispatch 声明与 bundled YAML 同时写入 `modelSelectionSettings: true`、`modelSelection: true`、`modelDiscovery: true`,不增加版本分支。发布版读取旧键,后续 Harness 读取新键;守卫和供应商代码不变。
|
|
15
|
+
- **回归**:`test/agent-preset.test.ts` 现在要求运行时配置和 bundled YAML 都携带三个键,防止再次把未发布 HEAD 的契约当成发布版 rc.3 的契约。
|
|
16
|
+
- **验证**:dispatch/authorization 针对性测试 **71/71**;三工程强制 TypeScript 检查、`npm run build`、全量 Vitest、`npm ci --dry-run`、`npm pack --dry-run` 均以 exit 0 完成,`git diff --check` 通过。发布版 rc.3 上“显式选择授权模型并检查子代理实际路由”的端到端验收未在本轮执行,不能用此前的会话创建 smoke 代替。
|
|
17
|
+
|
|
18
|
+
- **[subagent-audit] 路由审计改读真实 Session 的 `snapshotEvents()`,不再把授权和违规记录读空**
|
|
19
|
+
- **现象与边界**:只读路由审计在真实 Session 上可能返回空授权、空违规;它不参与子代理创建,不影响 dispatch 派发或授权守卫。
|
|
20
|
+
- **根因**:审计直接读取 `session.events`,但发布版 rc.3 的 Session 原型没有这个公开字段,只提供 `snapshotEvents()`;既有测试全部使用 `{ events }` 替身,因此覆盖了错误的数据形状。
|
|
21
|
+
- **改法与回归**:新增统一 `eventsOf()`,轻量替身继续使用 `events`,真实 Session 回退到 `snapshotEvents()`,授权、catalog 和 descriptor 三处读取共用。新增 snapshot-only 回归先在旧实现上以 `undefined` 失败,修复后 **10/10** 通过;发布包原型探针确认 `events` 缺席而 `snapshotEvents` 存在。守卫本身另以真实发布版 ToolRuntime/SystemPrompt 跑通 **45/45**(含 PTC),没有发现第二处派发阻断。
|
|
22
|
+
- **合并验证**:上述 dispatch 与 audit 修复合并后,三工程强制 TypeScript 检查、`npm run build`、全量 Vitest、`npm ci --dry-run`、`npm pack --dry-run` 均通过。全量结果为 **299 文件通过 / 2 跳过,4904 测试通过 / 8 跳过 / 0 失败**;`git diff --check` 通过。
|
|
23
|
+
|
|
24
|
+
## 0.41.0 - 2026-10-26
|
|
25
|
+
|
|
26
|
+
- **[kimi-code] 前缀缓存不再因为工具集变化整段重建:改走消息级工具声明,加/撤工具只动历史尾部**
|
|
27
|
+
- **现象**:会话里一旦有插件中途增删工具(例如看板的 `expose`),下一次请求的前缀就整体失效。真实会话上抓到过一次:闲置 36 分钟后续跑,`prompt=622,735 / cached=1,280`,整段 62 万 token 重算;而它的下一条立刻又把 62 万读回来,说明问题不在拼前缀的方式,在"工具表变了就重写"。
|
|
28
|
+
- **为什么能修**:这条线路的缓存按内容前缀匹配,而请求前缀的顺序是 system → tools → messages。把新工具放进顶层 `tools` 等于改前缀;把它作为 `messages[].tools` 追加到历史尾部则只增长尾巴。官方 kosong 把这个能力叫 `dynamically_loaded_tools`,本仓库的 `supportsDynamicTools` 就是它。
|
|
29
|
+
- **改法**:`resolveModel` 对声明该能力的模型输出 `toolUpdate: 'in-history'`(三重门控:能力位、OpenAI 兼容面、`DSH_KIMI_CODE_TOOL_UPDATE` 未关闭);mapper 把 harness 的 `tool-addition` / `tool-removal` 开发消息按原历史位置投影成消息级声明与撤销说明;延迟定义的条目不再进入顶层 `tools`。选 `in-history` 而非 `addition-only`,是因为只有前者能表达"撤销"而不缩短声明表——后者下撤掉一个工具会让顶层数组变短,前缀照样作废。
|
|
30
|
+
- **实测**(`scripts/probe-kimi-tool-declaration.probe.ts`,真实端点五组):冷启动 0;追加两轮 1280;追加工具声明 1536;追加撤销说明 1536;对照组改写顶层 tools 0。另一组证明模型会调用只存在于消息里的工具:顶层只放了一个诱饵,模型调起的却是 `probe_echo`。
|
|
31
|
+
- **代价**:撤销是软撤销——声明仍留在顶层(这是前缀不崩的前提),模型靠那条说明知道工具已不可用;若它无视说明,宿主会拒绝调用,错误可恢复。
|
|
32
|
+
|
|
33
|
+
- **[kimi-code] 缓存状态落盘:过期提示与失效归因能跨重启活下来**
|
|
34
|
+
- **现象**:设置卡片上那句"这次续跑会重算多少"从来不出现。三个输入全在进程内存里,而且未指定会话时 `sessionLastActiveAt(undefined)` 直接返回 `undefined`——卡片恰恰是这么问的。重启之后连命中率与失效原因也一起消失。
|
|
35
|
+
- **改法**:新增 `session-cache-state.ts`,把每个会话的最后活跃时间、最近一次请求的提示词规模、滚动读写量与上次失效原因写到 `~/.dsh/storages/dsh-chatgpt-subscription-kimi-cache.json`(临时文件 + rename 原子写,保留最近 64 个会话,解析失败按空文档处理)。适配器每轮收尾写一条;路由改为内存优先、落盘兜底,未指定会话时按最近活跃会话回答。
|
|
36
|
+
- **阈值**:过期判定从 30 分钟改为 25 分钟——公开实测给出的区间是 [5, 30) 分钟,25 分钟是最后一次确认全部仍热的年龄;更晚的提醒描述的是账单,不是预防。
|
|
37
|
+
- **归因**:前缀因我们自己的改动而重建时,日志里每个会话打一行(`prompt cache rebuilt ... tools changed`),不再无声无息。
|
|
38
|
+
|
|
39
|
+
- **[progress-updates] 提示词引导不再随开关变化**
|
|
40
|
+
- 系统提示是缓存前缀的第一段,开关一切换就改字,等于把所有线路的前缀整体作废。现在开关只影响工具本身(关闭时 `execute` 返回 `displayed:false`),文本恒定。
|
|
41
|
+
|
|
5
42
|
## 0.40.2 - 2026-10-25
|
|
6
43
|
|
|
7
44
|
- **[antigravity] 响应体中途断流归为可重试的传输失败,长回答不再一次断线就作废**
|
package/lib/client.js
CHANGED
|
@@ -1293,12 +1293,12 @@ window.__ModuleLoader__.load({
|
|
|
1293
1293
|
children: t.noAccounts
|
|
1294
1294
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1295
1295
|
className: "dsha-accounts-list",
|
|
1296
|
-
children: accounts.map((account) => {
|
|
1296
|
+
children: accounts.map((account, index) => {
|
|
1297
1297
|
const isActive = account.id === props.activeAccountId;
|
|
1298
1298
|
const cooling = isCoolingDown(account, now);
|
|
1299
1299
|
const needsRelogin = account.authStatus !== void 0 && account.authStatus !== "ok";
|
|
1300
1300
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1301
|
-
className: `dsha-account-card ${isActive ? "active" : ""}`,
|
|
1301
|
+
className: `dsha-account-card ${isActive ? "active" : ""}${props.accountCardClassName === void 0 ? "" : ` ${props.accountCardClassName}`}`,
|
|
1302
1302
|
children: [
|
|
1303
1303
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1304
1304
|
className: "dsha-account-header",
|
|
@@ -1368,24 +1368,24 @@ window.__ModuleLoader__.load({
|
|
|
1368
1368
|
className: "dsha-account-details",
|
|
1369
1369
|
children: [
|
|
1370
1370
|
props.renderDetails?.(account),
|
|
1371
|
-
account.email !== void 0 && account.email !== account.alias && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1371
|
+
account.email !== void 0 && account.email !== account.alias && props.omitDetails?.includes("email") !== true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1372
1372
|
t.email,
|
|
1373
1373
|
": ",
|
|
1374
1374
|
account.email
|
|
1375
1375
|
] }),
|
|
1376
|
-
account.expiresAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1376
|
+
account.expiresAt !== void 0 && props.omitDetails?.includes("expires") !== true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1377
1377
|
t.expires,
|
|
1378
1378
|
": ",
|
|
1379
1379
|
formatAccountDate(account.expiresAt)
|
|
1380
1380
|
] }),
|
|
1381
|
-
account.lastUsedAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1381
|
+
account.lastUsedAt !== void 0 && props.omitDetails?.includes("lastUsed") !== true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
1382
1382
|
t.lastUsed,
|
|
1383
1383
|
": ",
|
|
1384
1384
|
formatAccountDate(account.lastUsedAt)
|
|
1385
1385
|
] })
|
|
1386
1386
|
]
|
|
1387
1387
|
}),
|
|
1388
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AccountQuota, {
|
|
1388
|
+
props.renderQuota !== void 0 ? props.renderQuota(account, index, now) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AccountQuota, {
|
|
1389
1389
|
quota: account.quota,
|
|
1390
1390
|
labels: t,
|
|
1391
1391
|
showEmpty: props.showQuota === true || anyQuota,
|
|
@@ -4759,6 +4759,30 @@ window.__ModuleLoader__.load({
|
|
|
4759
4759
|
quotaWalletUsed: "本月已用",
|
|
4760
4760
|
updatedAt: "更新时间:{time}",
|
|
4761
4761
|
resetAt: "重置:{time}",
|
|
4762
|
+
kqTotal: "总使用量",
|
|
4763
|
+
kqTip: "Kimi Code 用量 {pct}",
|
|
4764
|
+
kqPoolKimi: "Kimi",
|
|
4765
|
+
kqPoolCode: "Code",
|
|
4766
|
+
kqResetAfter: "{time} 后重置",
|
|
4767
|
+
kqAccount: "账号{n}",
|
|
4768
|
+
kqAgo: "{time}更新",
|
|
4769
|
+
kqLastUsed: "最后调用 {time}",
|
|
4770
|
+
kqShortWindow: "5 小时窗口 {pct}",
|
|
4771
|
+
kqRestUsed: "其他已用",
|
|
4772
|
+
kqExpires: "令牌到期 {time}",
|
|
4773
|
+
kqJustNow: "刚刚",
|
|
4774
|
+
kqMinutesAgo: "{n} 分钟前",
|
|
4775
|
+
kqHoursAgo: "{n} 小时前",
|
|
4776
|
+
kqDaysAgo: "{n} 天前",
|
|
4777
|
+
kqWindow5h: "5 小时窗口",
|
|
4778
|
+
kqWindow7d: "7 天用量",
|
|
4779
|
+
kqDurationDay: "{n} 天",
|
|
4780
|
+
kqDurationHour: "{n} 小时",
|
|
4781
|
+
kqDurationMinute: "{n} 分钟",
|
|
4782
|
+
kqResetIn: "{time}后重置",
|
|
4783
|
+
kqResetSoon: "即将重置",
|
|
4784
|
+
kqRegionMainland: "中国区",
|
|
4785
|
+
kqRegionGlobal: "国际区",
|
|
4762
4786
|
loading: "加载中...",
|
|
4763
4787
|
loginFailed: "登录失败",
|
|
4764
4788
|
requests: "次请求",
|
|
@@ -4890,6 +4914,30 @@ window.__ModuleLoader__.load({
|
|
|
4890
4914
|
quotaWalletUsed: "Used this month",
|
|
4891
4915
|
updatedAt: "Updated at: {time}",
|
|
4892
4916
|
resetAt: "Reset: {time}",
|
|
4917
|
+
kqTotal: "Total usage",
|
|
4918
|
+
kqTip: "Kimi Code usage {pct}",
|
|
4919
|
+
kqPoolKimi: "Kimi",
|
|
4920
|
+
kqPoolCode: "Code",
|
|
4921
|
+
kqResetAfter: "resets {time}",
|
|
4922
|
+
kqAccount: "Account {n}",
|
|
4923
|
+
kqAgo: "updated {time}",
|
|
4924
|
+
kqLastUsed: "last used {time}",
|
|
4925
|
+
kqShortWindow: "5-hour window {pct}",
|
|
4926
|
+
kqRestUsed: "Other usage",
|
|
4927
|
+
kqExpires: "Token expires {time}",
|
|
4928
|
+
kqJustNow: "just now",
|
|
4929
|
+
kqMinutesAgo: "{n} min ago",
|
|
4930
|
+
kqHoursAgo: "{n} h ago",
|
|
4931
|
+
kqDaysAgo: "{n} d ago",
|
|
4932
|
+
kqWindow5h: "5-hour window",
|
|
4933
|
+
kqWindow7d: "7-day usage",
|
|
4934
|
+
kqDurationDay: "{n}d",
|
|
4935
|
+
kqDurationHour: "{n}h",
|
|
4936
|
+
kqDurationMinute: "{n}m",
|
|
4937
|
+
kqResetIn: "resets in {time}",
|
|
4938
|
+
kqResetSoon: "resetting soon",
|
|
4939
|
+
kqRegionMainland: "China",
|
|
4940
|
+
kqRegionGlobal: "Global",
|
|
4893
4941
|
loading: "Loading...",
|
|
4894
4942
|
loginFailed: "Sign-in failed",
|
|
4895
4943
|
requests: "requests",
|
|
@@ -5082,6 +5130,290 @@ window.__ModuleLoader__.load({
|
|
|
5082
5130
|
});
|
|
5083
5131
|
}
|
|
5084
5132
|
//#endregion
|
|
5133
|
+
//#region src/client/kimi-code/staff-art.ts
|
|
5134
|
+
/** 档位名(小写)到插图的映射;认不出来的档位按 Allegretto 那一档画。 */
|
|
5135
|
+
const TIER_ART = {
|
|
5136
|
+
adagio: "trial",
|
|
5137
|
+
andante: "trial",
|
|
5138
|
+
moderato: "basic",
|
|
5139
|
+
allegretto: "intermediate",
|
|
5140
|
+
allegro: "advanced",
|
|
5141
|
+
vivace: "standard"
|
|
5142
|
+
};
|
|
5143
|
+
const STAFF_ART = {
|
|
5144
|
+
trial: [
|
|
5145
|
+
{ d: "M10.781 13.002c.784-.043 1.387.689 1.765 1.394a10.27 10.27 0 0 1 .873 7.323c-.63 2.435-2.202 4.602-4.3 5.926l.595 2.92c.078.384.085 1.146.297 1.465.23.343.286.247.75.27.885.043 2.09.283 2.819.858h-.003c2.628 2.084 1.61 5.7 1.61 5.7-.532 2.286-3.073 3.058-3.11 3.069l.013.066q.127.665.26 1.328l.144.745c.203 1.047.398 2.097.496 3.158.042.456.076.92-.026 1.37-.074.327-.213.63-.372.923a4.5 4.5 0 0 1-.706.976 4.54 4.54 0 0 1-2.14 1.23c-.359.094-.756.176-1.131.158-.015 0-3.078.12-4.478-2.138l-.046-.08c-.043-.07-.088-.135-.125-.21l.015.004a2.75 2.75 0 0 1-.315-1.262c0-1.51 1.197-2.733 2.676-2.733 1.478 0 2.675 1.223 2.675 2.733a2.73 2.73 0 0 1-1.414 2.397l.054.009q.316.054.634.037c.422-.02.838-.127 1.224-.3.543-.242 1.057-.57 1.465-1.01q.203-.222.361-.475c.24-.38.412-.824.455-1.274 0-.219.014-.433.006-.654a26 26 0 0 0-.195-2.063 40 40 0 0 0-.394-2.577c-1.374.35-2.821.276-4.22.048-1.102-.178-2.215-.463-3.16-1.074-1.442-.933-2.362-2.572-2.688-4.283a8.35 8.35 0 0 1 .585-4.961c1.168-2.59 3.546-4.348 5.757-6.091.152-.12.312-.253.375-.437.058-.172.023-.362-.01-.54-.36-1.868-.575-3.78-.396-5.676.18-1.896.775-3.782 1.909-5.292.36-.477.829-.942 1.416-.977M8.28 28.478a16.3 16.3 0 0 0-3.707 3.445c-1.034 1.314-1.897 2.9-1.818 4.585.067 1.467.864 2.834 1.96 3.783h.003c1.724 1.495 4.216 2.003 6.372 1.303q-.006-.017-.007-.034a369 369 0 0 0-1.467-7.035c-1.315.125-2.291 1.029-2.53 2.343a4.1 4.1 0 0 0 .102 1.873c.065.217.525 1.488.813 1.456-.67.073-1.326-.35-1.686-.932s-.46-1.294-.45-1.984c.032-1.823 1.002-3.59 2.583-4.47.214-.121.455-.24.558-.468.095-.208.047-.451-.004-.675zm3.43 11.63c.005.028.005.055.01.083l.185.993c2.434-1.336 1.983-3.45 1.98-3.462-.535-2.82-2.596-3.188-3.333-3.229zm9.935-7.777a.8.8 0 0 0 .349-.112q.113-.09.135-.112.033-.035.134-.057.011-.011.068-.01.135 0 .225.089a.29.29 0 0 1 .102.225q0 .135-.102.236a.3.3 0 0 1-.225.09h-.686v1.756h.72q.09 0 .135.045.045.056.045.123a.15.15 0 0 1-.045.113q-.045.045-.135.045h-2.272a.2.2 0 0 1-.125-.045.17.17 0 0 1-.044-.124q0-.068.044-.112a.2.2 0 0 1 .125-.045h.73V32.68h-2.711v-.349q.158-.258.495-.776a278 278 0 0 1 2.576-4.027h.462zm-1.092-3.161q-.247.416-.81 1.328-.561.912-.99 1.631l-.123.214h2.194v-3.611zm1.092-5.173a.8.8 0 0 0 .349-.112q.113-.09.135-.112.033-.034.134-.057.011-.011.068-.01.135 0 .225.089a.29.29 0 0 1 .102.225q0 .135-.102.236a.3.3 0 0 1-.225.09h-.686v1.756h.72q.09 0 .135.045.045.056.045.123a.15.15 0 0 1-.045.113q-.045.045-.135.045h-2.272a.2.2 0 0 1-.125-.045.17.17 0 0 1-.044-.124q0-.067.044-.112a.2.2 0 0 1 .125-.045h.73v-1.756h-2.711v-.349q.158-.258.495-.776a279 279 0 0 1 2.576-4.027h.462zm-9.198-6.262c-.163-1.794-2.432-2.435-3.481-.989 0 0-.64.756-.829 1.885-.14.851-.1 3.049.132 4.582.016.093.03.333.047.427l.263 1.278c.882-.812 1.642-1.57 1.997-2.065 2.19-2.547 1.871-5.119 1.871-5.119m8.106 3.101q-.247.416-.81 1.328-.561.912-.99 1.631l-.123.214h2.194v-3.611z" },
|
|
5146
|
+
{ d: "M33.148 30c.068 0 .124.058.124.126v15.512h-.002a2.5 2.5 0 0 1-.117.764h1.648c.03 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.976c-.335.55-.86 1.065-1.58 1.44-1.64.853-3.422.668-3.984-.41a1.6 1.6 0 0 1-.139-1.03h-2.067a.056.056 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.18-.614 2.433-.688 3.253-.281v-14.25c0-.068.056-.126.125-.126z" },
|
|
5147
|
+
{ d: "M47.148 30c.068 0 .124.058.124.126v15.512h-.002a2.5 2.5 0 0 1-.117.764h1.648c.03 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.976c-.335.55-.86 1.065-1.58 1.44-1.64.853-3.422.668-3.984-.41a1.6 1.6 0 0 1-.139-1.03h-2.067a.055.055 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.18-.614 2.433-.688 3.253-.281v-14.25c0-.068.056-.126.125-.126z" },
|
|
5148
|
+
{ d: "M61.86 36.699V21.126a.124.124 0 0 0-.12-.126h-.526a.124.124 0 0 0-.12.126v14.307c-.776-.408-1.963-.335-3.082.282-1.555.855-2.382 2.428-1.852 3.51.533 1.083 2.222 1.269 3.777.411 1.296-.713 1.927-1.93 1.92-2.937z" },
|
|
5149
|
+
{ d: "M74.86 36.699V21.126a.124.124 0 0 0-.12-.126h-.526a.124.124 0 0 0-.12.126v14.307c-.776-.408-1.963-.335-3.082.282-1.555.855-2.382 2.428-1.852 3.51.533 1.083 2.222 1.269 3.776.411 1.297-.713 1.927-1.93 1.921-2.937z" },
|
|
5150
|
+
{
|
|
5151
|
+
d: "M79.5 22h1v20h-1z",
|
|
5152
|
+
opacity: ".03"
|
|
5153
|
+
},
|
|
5154
|
+
{ d: "M91.86 33.699V18.126a.124.124 0 0 0-.12-.126h-.526a.124.124 0 0 0-.12.126v14.307c-.776-.408-1.963-.335-3.082.282-1.555.855-2.382 2.428-1.852 3.51.533 1.083 2.222 1.269 3.776.411 1.297-.713 1.927-1.93 1.921-2.937z" },
|
|
5155
|
+
{ d: "M104.859 33.699V18.126c0-.069-.054-.126-.119-.126h-.526c-.065 0-.119.057-.119.126v14.307c-.777-.408-1.964-.335-3.083.282-1.555.855-2.382 2.428-1.852 3.51.533 1.083 2.222 1.269 3.777.411 1.296-.713 1.926-1.93 1.92-2.937z" },
|
|
5156
|
+
{ d: "M117.275 23h-.576a.12.12 0 0 0-.119.121l-.007 14.005a1.2 1.2 0 0 0-.205-.12c-.881-.418-2.123-.31-3.241.282-1.7.9-2.546 2.562-1.923 3.782.315.616.943 1.002 1.768 1.087q.173.018.349.018c.659 0 1.367-.185 2.029-.535 1.315-.696 1.95-1.88 1.916-2.978l.009-.007.117-15.531a.12.12 0 0 0-.119-.122zm-2.353 17.795c-.62.328-1.277.476-1.853.417-.292-.03-.814-.147-1.035-.582-.368-.723.329-1.867 1.525-2.502.531-.281 1.098-.428 1.599-.428.306 0 .587.055.821.167h.007c.018.012.412.209.553.792.041.724-.634 1.617-1.617 2.136" }
|
|
5157
|
+
],
|
|
5158
|
+
basic: [
|
|
5159
|
+
{
|
|
5160
|
+
d: "M8.5 22h1v20h-1z",
|
|
5161
|
+
opacity: ".03"
|
|
5162
|
+
},
|
|
5163
|
+
{ d: "M23.148 30c.068 0 .125.058.125.126v16.276H24.8c.03 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.528v5.514h-.003a2.5 2.5 0 0 1-.117.764H24.8c.03 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.976c-.335.55-.86 1.065-1.58 1.44-1.64.853-3.422.668-3.984-.41a1.6 1.6 0 0 1-.139-1.03h-2.067a.056.056 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.18-.614 2.433-.688 3.253-.281v-3.763c-.314.36-.721.69-1.223.95-1.64.854-3.421.67-3.983-.409a1.6 1.6 0 0 1-.139-1.03h-2.067a.056.056 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.18-.614 2.433-.688 3.253-.281v-14.25c0-.068.056-.126.125-.126z" },
|
|
5164
|
+
{ d: "m57.18 26.121.002.005v15.512h-.003c.006 1.002-.658 2.215-2.026 2.925-1.64.855-3.422.67-3.984-.409-.56-1.078.313-2.645 1.953-3.497 1.18-.614 2.433-.688 3.253-.281V27.663l-14.102 4.111v13.864h-.003a2.5 2.5 0 0 1-.117.764h1.648c.03 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.976c-.335.55-.86 1.065-1.58 1.44-1.64.853-3.422.668-3.984-.41a1.6 1.6 0 0 1-.139-1.03h-2.067a.055.055 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.18-.614 2.433-.688 3.253-.281v-14.25q.001-.05.033-.084V30l15.68-4.571z" },
|
|
5165
|
+
{ d: "M54.709 48.093a.5.5 0 0 1 .698.116c2.324 3.253 7.527 4.255 11.85 1.853a.501.501 0 0 1 .486.876c-4.676 2.598-10.474 1.6-13.15-2.147a.5.5 0 0 1 .116-.698" },
|
|
5166
|
+
{ d: "M72.055 28c.069 0 .126.058.126.126v15.512h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281v-14.25c0-.069.057-.126.126-.126z" },
|
|
5167
|
+
{ d: "M104.273 31.273v2.006h-.001v13.123h1.529c.029 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.529v5.514h-.001c.001.245-.038.504-.118.764h1.648c.029 0 .055.025.055.055v.612c0 .03-.026.055-.055.055h-1.976c-.335.55-.859 1.065-1.581 1.44-1.64.853-3.421.668-3.983-.41a1.6 1.6 0 0 1-.139-1.03h-2.067a.056.056 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.181-.614 2.433-.688 3.253-.281v-3.763c-.314.36-.721.69-1.223.95-1.64.854-3.421.67-3.983-.409a1.6 1.6 0 0 1-.139-1.03h-2.067a.056.056 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.181-.614 2.433-.688 3.253-.281V33.131l-16.195-2.975v15.482h-.002a2.5 2.5 0 0 1-.117.764h1.648c.03 0 .055.025.055.055v.612c0 .03-.025.055-.055.055h-1.976c-.335.55-.86 1.065-1.58 1.44-1.64.853-3.422.668-3.984-.41a1.6 1.6 0 0 1-.139-1.03h-2.067a.056.056 0 0 1-.055-.055v-.612c0-.03.025-.055.055-.055h2.317c.344-.662.987-1.3 1.842-1.745 1.18-.614 2.433-.688 3.253-.281v-14.25c0-.045.025-.084.061-.107l-.067-.011V28z" }
|
|
5168
|
+
],
|
|
5169
|
+
intermediate: [
|
|
5170
|
+
{ d: "M18.055 14c.069 0 .126.057.126.126v19.512h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281V16H6.18v17.638h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281v-18.25c0-.069.057-.126.126-.126z" },
|
|
5171
|
+
{
|
|
5172
|
+
d: "M23.5 22h1v20h-1z",
|
|
5173
|
+
opacity: ".03"
|
|
5174
|
+
},
|
|
5175
|
+
{ d: "M59.055 14c.069 0 .126.057.126.126v19.512h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281V19H47.18v14.638h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281V16H35.18v17.638h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281v-18.25c0-.069.057-.126.126-.126zM61.5 34a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1M47.18 18h11.194v-2H47.18z" },
|
|
5176
|
+
{ d: "M70.538 6.52q.255 0 .256.232v1.04h.017q.16 0 .248-.032a1 1 0 0 0 .191-.112 1 1 0 0 1 .08-.056.2.2 0 0 1 .105-.024q.096 0 .16.072a.2.2 0 0 1 .071.152.23.23 0 0 1-.071.168.22.22 0 0 1-.16.064h-.641v2.128q0 .784.425.784a1 1 0 0 0 .447-.136l.065.216q0 .008-.12.112a1.2 1.2 0 0 1-.289.192.9.9 0 0 1-.391.088q-.712 0-.712-.968V8.024h-.448a.12.12 0 0 1-.088-.032.14.14 0 0 1-.033-.088q0-.047.033-.08a.12.12 0 0 1 .087-.032h.449V6.584l.128-.032a.6.6 0 0 1 .191-.032M67.2 7.6q.24 0 .376.128a.43.43 0 0 1 .168.328q0 .12-.064.24a.9.9 0 0 1-.232.272q-.248-.296-.56-.296a.66.66 0 0 0-.4.144q-.184.135-.312.384v2.272h.496v.232H65.08v-.232h.52V8.208a.08.08 0 0 0-.024-.056.08.08 0 0 0-.056-.024h-.4v-.2q.24-.072.424-.136.184-.072.4-.168a.3.3 0 0 1 .064-.016q.064 0 .112.056a.15.15 0 0 1 .056.12v.568q.152-.345.44-.544.296-.208.584-.208m1.612.016q.064 0 .112.056a.15.15 0 0 1 .056.12v3.28h.512v.232H67.9v-.232h.504V8.216a.08.08 0 0 0-.024-.056.08.08 0 0 0-.056-.024h-.4v-.2q.24-.072.425-.136.183-.072.399-.168a.3.3 0 0 1 .064-.016M73.5 10a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1m-4.856-4.056a.37.37 0 0 1 .272.112.37.37 0 0 1 .112.272.37.37 0 0 1-.112.272.37.37 0 0 1-.272.112.36.36 0 0 1-.264-.112.37.37 0 0 1-.111-.272.37.37 0 0 1 .11-.272.36.36 0 0 1 .265-.112" },
|
|
5177
|
+
{ d: "M100.055 14c.069 0 .126.057.126.126v19.512h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281V16H89.18v17.638h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281V16H73.18v17.638h-.003c.007 1.002-.657 2.215-2.025 2.925-1.64.855-3.421.67-3.983-.409-.56-1.078.312-2.645 1.952-3.497 1.18-.614 2.433-.687 3.253-.281v-18.25c0-.069.057-.126.126-.126zm2.445 20a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1" },
|
|
5178
|
+
{
|
|
5179
|
+
d: "M104.5 22h1v20h-1z",
|
|
5180
|
+
opacity: ".03"
|
|
5181
|
+
},
|
|
5182
|
+
{ d: "M115.169 32a.17.17 0 0 1 .155.094q.083.081.128.117a.25.25 0 0 0 .137.035h.457q.894 0 1.406.517.548.597.548 1.7 0 .81-.283 1.361-.274.552-.703.822-.42.257-.85.257-.201 0-.42-.082a3 3 0 0 1-.374-.164v5.003h.712V42H114v-.34h.64v-8.792a.13.13 0 0 0-.028-.082q-.018-.035-.054-.035h-.403v-.294q.31-.117.485-.187.172-.082.456-.247zm-5.736-4c.04 0 .073.038.073.085l.003 4.959c.458-.422 1.109-.697 1.761-.586l-.004.001c.633.107 1.039.674.986 1.376v.027a1 1 0 0 1-.009.091q-.009.073-.022.147a3 3 0 0 1-.11.437 5 5 0 0 1-.236.587 4.6 4.6 0 0 1-.413.686 5.3 5.3 0 0 1-.638.738 7 7 0 0 1-.604.517c-.1.071-.194.144-.295.212a5 5 0 0 1-.519.317c-.085.043-.175.08-.262.123-.039.018-.084.055-.129.05-.01 0-.01-.005-.01-.015q-.003-.018-.002-.035v-.18l.002-9.452c0-.047.034-.085.074-.085zm1.736 4.994c-.632-.107-1.372.37-1.659.901v3.085c2.133-1.389 2.172-3.135 2.173-3.165.027-.369-.122-.754-.514-.82m4.758-.337a.9.9 0 0 0-.311.047q-.119.035-.155.094a.35.35 0 0 0-.072.187q-.019.118-.019.364v2.897q.328.153.603.152.511 0 .877-.433.374-.446.374-1.467 0-.926-.366-1.384a1.14 1.14 0 0 0-.931-.457M119.5 32a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1" }
|
|
5183
|
+
],
|
|
5184
|
+
advanced: [
|
|
5185
|
+
{ d: "M11.443 10.002c.783-.043 1.387.689 1.764 1.394a10.27 10.27 0 0 1 .873 7.323c-.63 2.435-2.202 4.602-4.298 5.926l.593 2.92c.078.384.085 1.146.297 1.465.23.343.287.247.751.27.884.043 2.09.283 2.819.858h-.004c2.63 2.084 1.61 5.7 1.61 5.7-.531 2.286-3.073 3.058-3.11 3.069l.013.066q.128.665.26 1.328c.05.25.095.496.145.745.203 1.047.397 2.097.496 3.158.042.456.076.92-.027 1.37-.073.327-.212.63-.37.923-.193.356-.43.686-.707.976a4.54 4.54 0 0 1-2.14 1.23c-.359.094-.756.176-1.131.158-.015 0-3.079.12-4.478-2.138l-.047-.08c-.042-.07-.087-.135-.125-.21l.016.004a2.75 2.75 0 0 1-.316-1.262c0-1.51 1.198-2.733 2.676-2.733s2.676 1.223 2.676 2.733a2.73 2.73 0 0 1-1.414 2.397l.054.009q.315.054.633.037c.422-.02.839-.127 1.225-.3.543-.242 1.056-.57 1.465-1.01q.202-.222.361-.475c.24-.38.412-.824.454-1.274 0-.219.015-.433.006-.654a27 27 0 0 0-.194-2.063 40 40 0 0 0-.395-2.577c-1.373.35-2.82.276-4.218.048-1.104-.178-2.216-.463-3.16-1.074-1.443-.933-2.363-2.572-2.69-4.283a8.35 8.35 0 0 1 .586-4.961c1.168-2.59 3.546-4.348 5.757-6.091.151-.12.312-.253.375-.437.058-.172.022-.362-.011-.54-.36-1.868-.574-3.78-.396-5.676.181-1.897.775-3.782 1.91-5.292.36-.477.828-.942 1.416-.977M8.942 25.478a16.3 16.3 0 0 0-3.707 3.445c-1.034 1.314-1.897 2.9-1.819 4.585.067 1.467.865 2.834 1.961 3.783h.002c1.724 1.495 4.217 2.003 6.372 1.303q-.005-.017-.007-.034a370 370 0 0 0-1.466-7.036c-1.316.126-2.292 1.03-2.53 2.344a4.1 4.1 0 0 0 .102 1.873c.065.217.524 1.488.812 1.456-.67.073-1.326-.35-1.685-.932-.36-.582-.46-1.294-.45-1.984.032-1.823 1.002-3.59 2.583-4.47.214-.121.455-.24.557-.468.096-.208.048-.451-.004-.675zm3.43 11.63c.005.028.005.055.01.083l.185.993c2.433-1.336 1.983-3.45 1.98-3.462-.536-2.82-2.597-3.188-3.334-3.229zm.737-22.373c-.163-1.794-2.432-2.435-3.482-.989 0 0-.64.756-.828 1.885-.14.851-.1 3.049.132 4.582.016.093.029.333.047.427l.263 1.278c.882-.812 1.642-1.57 1.997-2.065 2.19-2.547 1.87-5.119 1.87-5.119" },
|
|
5186
|
+
{ d: "M21.748 29.652c-.844-.203-1.687.3-2.28 1.07l-.003-9.053c0-.086-.043-.155-.095-.155h-.458c-.052 0-.095.07-.095.155l-.003 17.253c-.008.029 0 .077 0 .108v.222q0 .032.003.064c0 .02 0 .03.013.03.059.006.116-.06.166-.094.113-.079.23-.146.34-.225.235-.165.453-.37.672-.576.13-.125.252-.258.38-.388q.122-.133.24-.265a10 10 0 0 0 .996-1.358 10 10 0 0 0 1.302-3.432 6 6 0 0 0 .082-.627q.008-.082.01-.165v-.05c.069-1.282-.456-2.315-1.276-2.511zm.535 2.478c0 .033-.043 3.233-2.812 5.778v-5.632c.372-.969 1.328-1.842 2.146-1.646.508.122.702.826.666 1.5" },
|
|
5187
|
+
{ d: "M32.78 16.537c1.64-.854 3.42-.669 3.983.41.191.368.212.794.094 1.229h1.91c.03 0 .055.025.055.055v.612c0 .03-.025.055-.054.055h-2.23c-.363.589-.96 1.146-1.728 1.545-1.181.615-2.433.687-3.252.28V42l9.262-.001V30.463h.003c-.006-1.003.658-2.216 2.026-2.926 1.64-.854 3.422-.669 3.984.41.56 1.077-.313 2.644-1.953 3.496-1.181.615-2.433.687-3.253.28v10.275l11.124-.002V22.463h.002c-.007-1.003.658-2.216 2.026-2.926 1.64-.854 3.422-.669 3.984.41.56 1.077-.313 2.644-1.953 3.496-1.181.615-2.433.687-3.252.28v18.273h9.193V30.462h.003c-.007-1.003.657-2.216 2.025-2.926 1.64-.854 3.422-.669 3.984.41.56 1.077-.313 2.644-1.953 3.496-1.18.615-2.432.687-3.252.28v10.272h.005v2L30.75 44V19.463h.002q-.002-.276.064-.566H29.02a.056.056 0 0 1-.054-.054v-.613c0-.03.025-.054.055-.054h2.064c.324-.624.885-1.22 1.693-1.639" },
|
|
5188
|
+
{ d: "M112.65 17.594c1.64-.854 3.422-.67 3.984.409.559 1.078-.313 2.645-1.953 3.497-1.181.614-2.433.688-3.253.281l-.001 17.813h.01v2L74.04 44.067a.12.12 0 0 1-.081.034h-.555a.127.127 0 0 1-.126-.126V33.239h.002c-.007-1.002.659-2.215 2.027-2.925 1.64-.855 3.421-.67 3.983.408.56 1.078-.313 2.645-1.953 3.497-1.18.614-2.432.688-3.252.281v7.565l12.331-.816V30.463h.002c-.007-1.003.658-2.216 2.026-2.926 1.64-.854 3.422-.669 3.984.41.56 1.077-.313 2.645-1.953 3.496-1.181.615-2.432.687-3.252.28v9.472l11.296-.747V22.463h.001c-.006-1.003.659-2.216 2.027-2.926 1.64-.854 3.421-.669 3.983.41.56 1.077-.313 2.645-1.953 3.496-1.181.615-2.433.687-3.253.28v16.672l11.296-.748.002-19.126h.002c-.007-1.003.658-2.217 2.026-2.927M84.111 21c.092 0 .167.08.167.177v2.426l.764-.37c.11-.054.236.031.236.16v1.263a.36.36 0 0 1-.194.32l-.806.391v2.823l.764-.37c.11-.053.236.032.236.16v1.264a.36.36 0 0 1-.194.322l-.806.39v1.456a.17.17 0 0 1-.167.176.17.17 0 0 1-.166-.176v-1.295l-1.334.648v2.058c0 .098-.074.177-.166.177a.17.17 0 0 1-.167-.177v-1.896l-.763.37c-.11.053-.237-.032-.237-.16v-1.264c0-.138.076-.263.195-.32l.805-.392v-2.823l-.763.371c-.11.053-.236-.032-.237-.16v-1.264c0-.138.076-.264.195-.321l.805-.39v-1.986c0-.097.075-.176.167-.176s.166.079.166.176v1.823l1.334-.646v-2.588c0-.098.074-.177.166-.177m-1.5 5.176V29l1.334-.647v-2.824z" }
|
|
5189
|
+
],
|
|
5190
|
+
standard: [
|
|
5191
|
+
{ d: "M17.026 13.924c1.64-.854 3.421-.669 3.983.409.192.369.212.794.095 1.23h1.91c.03 0 .055.025.055.054v.613c0 .03-.025.054-.055.054h-2.23c-.362.59-.96 1.147-1.728 1.546-1.18.614-2.432.687-3.252.28v19.277h-.806V16.85H15q-.003-.276.064-.566h-1.796a.056.056 0 0 1-.055-.054v-.613c0-.03.026-.055.055-.055h2.064c.324-.623.886-1.219 1.694-1.638m-9.02.104 3.24-.81v9.039h-.76v-3.392l-3.24.81V9.692h.76zm0 2v1.457l2.48-.62v-1.457zm16.069-4.652a1.006 1.006 0 1 1-.002 2.011 1.006 1.006 0 0 1 .002-2.011" },
|
|
5192
|
+
{ d: "M22.507 38c.71.013.983.454 1.381.696.529.323.567 1.187.296 1.484-.288.315-.683.516-1.083.232-.4-.283-.374-.786-.168-1.083s.58-.697-.4-.722c-.322 0-.645.322-.942.812-.307.508-.322 1.149-.374 1.82-.009.114-.097.39-.234.769l1.966.12-.024.386-2.083-.126c-.758 1.992-2.42 5.774-2.63 6.074-.27.387-1.084.967-1.755 1.393-.62.394-1.496.529-1.832.284-.593-.434-.593-1.149-.503-1.458.12-.41.569-.67.84-.607.386.09.619.595.541.943s-.297.683-.155.838c.189.205.62-.04.993-.31.374-.27.62-.67.852-1.664.155-.665 1.065-3.49 1.844-5.603l-1.248-.075a1 1 0 0 1 .023.403c-.103.619-.554.76-.774.58-.395-.326.142-.446.142-.825 0-.362-.27-.942-1.25-.968-.981-.026-1.24.9-.504 1.483.374.297 1.88 1.105 2 1.845.154.954-1.123 1.974-2.09 2.025-.968.052-2.32-.736-2.336-1.458-.012-.567.335-.747.852-.567.296.103.503.528.53.76.025.233-.362.543-.285.685s.658.36 1.161.335c.503-.026 1.135-.67 1.135-1.161 0-.62-2.238-1.522-2.296-2.4-.064-.967.58-1.805 1.832-1.805.856-.008 1.393.294 1.669.669l1.58.096c.33-.873.623-1.58.814-1.887.657-1.058 1.806-2.026 2.515-2.013" },
|
|
5193
|
+
{ d: "M18.957 10.226c24.81-12.138 74.789-12.138 90.139 1.25C94.46.586 47.694-1.02 18.957 10.225" },
|
|
5194
|
+
{ d: "M100.529 13.924c1.64-.854 3.422-.669 3.984.409.191.369.212.794.094 1.23h1.911c.029 0 .054.024.054.054v.613c0 .03-.025.054-.054.054h-2.23c-.363.59-.96 1.147-1.728 1.546-1.181.614-2.433.687-3.252.28v18.88h7.264V22.652h.002c-.007-1.002.659-2.215 2.027-2.925 1.64-.855 3.421-.67 3.983.409.559 1.078-.313 2.645-1.953 3.497-1.181.614-2.433.687-3.253.28V42.8h-.003v.212H60.026V20.028h.002c-.006-1.002.659-2.215 2.027-2.925 1.64-.855 3.421-.67 3.983.409.56 1.078-.313 2.645-1.953 3.497-1.18.614-2.433.687-3.253.28v15.7h9.863V25.362h.002c-.006-1.002.659-2.215 2.027-2.925 1.64-.854 3.421-.67 3.983.409.56 1.078-.313 2.645-1.953 3.497-1.181.614-2.433.687-3.253.28V36.99h8.44V22.653h.001c-.006-1.002.659-2.215 2.027-2.925 1.64-.854 3.421-.67 3.983.409.56 1.078-.313 2.645-1.953 3.497-1.18.614-2.433.686-3.253.28V36.99h8.863V20.315h.002c-.006-1.003.659-2.216 2.027-2.926 1.64-.854 3.421-.67 3.983.409.56 1.078-.313 2.645-1.953 3.497-1.18.614-2.433.687-3.253.28V36.99h8.086V16.85h.002q-.002-.274.064-.565h-1.795a.056.056 0 0 1-.055-.054v-.613c0-.03.025-.054.055-.055h2.064c.324-.623.885-1.219 1.693-1.638M60.832 40.963h9.863v-1.925h-9.863zm10.669 0h8.44v-1.925H71.5zm9.245 0h8.863v-1.925h-8.863zm18.562 0h7.264v-1.925h-7.264zm-8.893 0h8.086v-1.925h-8.086z" }
|
|
5195
|
+
]
|
|
5196
|
+
};
|
|
5197
|
+
//#endregion
|
|
5198
|
+
//#region src/client/kimi-code/KimiQuotaCard.tsx
|
|
5199
|
+
/**
|
|
5200
|
+
* Kimi Code 账号卡片里的额度区。
|
|
5201
|
+
*
|
|
5202
|
+
* 这张卡与其余线路的账号卡是同一张壳(别名、徽标、操作按钮都在 `AccountPoolSection` 里),
|
|
5203
|
+
* 换掉的只是额度那一块:档位名用 Georgia 字标,右侧压一条五线谱,音符按档位换成对应的插图。
|
|
5204
|
+
*
|
|
5205
|
+
* 只有一条进度条,按 Kimi 自己的额度结构折算:7 天额度是 5 个 5 小时额度,月额度是 25 个,
|
|
5206
|
+
* 所以「近 5 小时用掉多少」折进大窗口之后是 `5小时% ÷ 5`(月额度则 ÷ 25)。条子上蓝色那一截
|
|
5207
|
+
* 就是这段最近的消耗,深色那一截是除此之外的已用,底槽是剩下的。
|
|
5208
|
+
*
|
|
5209
|
+
* 大窗口的取法:有月额度就用月额度,否则用 7 天;只有 5 小时一条线的账号就直接以它为准。
|
|
5210
|
+
* 接口给的是「已用比例」,各窗口各自算各自的,不能相加。
|
|
5211
|
+
*/
|
|
5212
|
+
/** 5 小时窗口在 7 天窗口里的份数。 */
|
|
5213
|
+
const SHORT_PER_WEEK = 5;
|
|
5214
|
+
/** 5 小时窗口在月额度里的份数。 */
|
|
5215
|
+
const SHORT_PER_MONTH = 25;
|
|
5216
|
+
/** 百分比,最多两位小数;非有限数不画。 */
|
|
5217
|
+
function percentText$2(value) {
|
|
5218
|
+
if (!Number.isFinite(value)) return "0%";
|
|
5219
|
+
return `${Math.round(value * 100) / 100}%`;
|
|
5220
|
+
}
|
|
5221
|
+
/** `YYYY-MM-DD HH:mm`,本地时区;令牌到期用它,年份不能省。 */
|
|
5222
|
+
function dateText(ms) {
|
|
5223
|
+
const date = new Date(ms);
|
|
5224
|
+
const pad = (n) => n < 10 ? `0${n}` : String(n);
|
|
5225
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
5226
|
+
}
|
|
5227
|
+
/** `MM-DD HH:mm`,本地时区。 */
|
|
5228
|
+
function clockText(ms) {
|
|
5229
|
+
const date = new Date(ms);
|
|
5230
|
+
const pad = (n) => n < 10 ? `0${n}` : String(n);
|
|
5231
|
+
return `${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
5232
|
+
}
|
|
5233
|
+
function minutesOf(window) {
|
|
5234
|
+
return typeof window.windowDurationMins === "number" && Number.isFinite(window.windowDurationMins) ? window.windowDurationMins : null;
|
|
5235
|
+
}
|
|
5236
|
+
/** 5 小时窗口:标签或名义长度任一命中即可。 */
|
|
5237
|
+
function isShortWindow(window) {
|
|
5238
|
+
if (/^5[- ]?hour/i.test(window.label)) return true;
|
|
5239
|
+
return minutesOf(window) === 300;
|
|
5240
|
+
}
|
|
5241
|
+
/** 7 天窗口。 */
|
|
5242
|
+
function isWeekWindow(window) {
|
|
5243
|
+
if (/weekly|7[- ]?day/i.test(window.label)) return true;
|
|
5244
|
+
return minutesOf(window) === 10080;
|
|
5245
|
+
}
|
|
5246
|
+
/** 月度池——两个独立月额度靠它认出来。 */
|
|
5247
|
+
function isMonthlyPool(window) {
|
|
5248
|
+
if (/month/i.test(window.label)) return true;
|
|
5249
|
+
const minutes = minutesOf(window);
|
|
5250
|
+
return minutes !== null && minutes >= 43200;
|
|
5251
|
+
}
|
|
5252
|
+
/** 档位名 → 插图;认不出来按 Allegretto 那一档。 */
|
|
5253
|
+
function artKeyFor(planName) {
|
|
5254
|
+
const key = (planName ?? "").trim().toLowerCase();
|
|
5255
|
+
return Object.prototype.hasOwnProperty.call(TIER_ART, key) ? TIER_ART[key] : "intermediate";
|
|
5256
|
+
}
|
|
5257
|
+
/** 距离重置还有多久:不足一小时只说分钟,整小时不带「0 分钟」。 */
|
|
5258
|
+
function durationText(labels, remainingMs) {
|
|
5259
|
+
const totalMinutes = Math.max(0, Math.ceil(remainingMs / 6e4));
|
|
5260
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
5261
|
+
const minutes = totalMinutes % 60;
|
|
5262
|
+
const hourText = labels.kqDurationHour.replace("{n}", String(hours));
|
|
5263
|
+
const minuteText = labels.kqDurationMinute.replace("{n}", String(minutes));
|
|
5264
|
+
if (hours === 0) return minuteText;
|
|
5265
|
+
if (minutes === 0) return hourText;
|
|
5266
|
+
return `${hourText} ${minuteText}`;
|
|
5267
|
+
}
|
|
5268
|
+
/** 「3 分钟前」这类相对距离,用当前语言的说法拼出来。 */
|
|
5269
|
+
function agoLabel(labels, ms, now) {
|
|
5270
|
+
const minutes = Math.floor(Math.max(0, now - ms) / 6e4);
|
|
5271
|
+
if (minutes < 1) return labels.kqJustNow;
|
|
5272
|
+
if (minutes < 60) return labels.kqMinutesAgo.replace("{n}", String(minutes));
|
|
5273
|
+
const hours = Math.floor(minutes / 60);
|
|
5274
|
+
if (hours < 24) return labels.kqHoursAgo.replace("{n}", String(hours));
|
|
5275
|
+
return labels.kqDaysAgo.replace("{n}", String(Math.floor(hours / 24)));
|
|
5276
|
+
}
|
|
5277
|
+
function KimiQuotaCard(props) {
|
|
5278
|
+
const t = props.labels;
|
|
5279
|
+
const quota = props.quota;
|
|
5280
|
+
const windows = quota?.windows ?? [];
|
|
5281
|
+
const planName = (props.planName ?? "").trim();
|
|
5282
|
+
const art = STAFF_ART[artKeyFor(planName)];
|
|
5283
|
+
const used = (window) => window !== null && Number.isFinite(window.usedPercent) ? window.usedPercent : 0;
|
|
5284
|
+
const shortWindow = windows.find(isShortWindow) ?? null;
|
|
5285
|
+
const monthlyWindow = windows.find(isMonthlyPool) ?? null;
|
|
5286
|
+
const weekWindow = windows.find(isWeekWindow) ?? null;
|
|
5287
|
+
const carrier = monthlyWindow ?? weekWindow ?? shortWindow;
|
|
5288
|
+
const factor = monthlyWindow !== null ? SHORT_PER_MONTH : weekWindow !== null ? SHORT_PER_WEEK : 1;
|
|
5289
|
+
const headline = monthlyWindow !== null ? t.kqTotal : weekWindow !== null ? t.kqWindow7d : t.kqWindow5h;
|
|
5290
|
+
const totalPercent = Math.min(100, used(carrier));
|
|
5291
|
+
const recentPercent = Math.round(Math.min(totalPercent, used(shortWindow) / factor) * 100) / 100;
|
|
5292
|
+
const restPercent = Math.round(Math.max(0, totalPercent - recentPercent) * 100) / 100;
|
|
5293
|
+
const resetAt = carrier !== null && typeof carrier.resetsAt === "number" && Number.isFinite(carrier.resetsAt) ? carrier.resetsAt : null;
|
|
5294
|
+
const lastUsed = props.lastUsedAt;
|
|
5295
|
+
const expires = props.expiresAt;
|
|
5296
|
+
const shortReset = shortWindow !== null && typeof shortWindow.resetsAt === "number" && Number.isFinite(shortWindow.resetsAt) ? shortWindow.resetsAt : null;
|
|
5297
|
+
const [grown, setGrown] = (0, react.useState)(false);
|
|
5298
|
+
(0, react.useEffect)(() => {
|
|
5299
|
+
const frame = requestAnimationFrame(() => setGrown(true));
|
|
5300
|
+
return () => cancelAnimationFrame(frame);
|
|
5301
|
+
}, []);
|
|
5302
|
+
const [clock, setClock] = (0, react.useState)(() => props.now);
|
|
5303
|
+
(0, react.useEffect)(() => {
|
|
5304
|
+
if (shortReset === null) return void 0;
|
|
5305
|
+
setClock(Date.now());
|
|
5306
|
+
const timer = window.setInterval(() => setClock(Date.now()), 3e4);
|
|
5307
|
+
return () => window.clearInterval(timer);
|
|
5308
|
+
}, [shortReset]);
|
|
5309
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5310
|
+
className: "dsha-kq",
|
|
5311
|
+
children: [
|
|
5312
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5313
|
+
className: "dsha-kq-head",
|
|
5314
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5315
|
+
className: "dsha-kq-tier",
|
|
5316
|
+
children: planName || t.planUnknown
|
|
5317
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5318
|
+
className: "dsha-kq-staff",
|
|
5319
|
+
"aria-hidden": "true",
|
|
5320
|
+
children: [
|
|
5321
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {}),
|
|
5322
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {}),
|
|
5323
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {}),
|
|
5324
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {}),
|
|
5325
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", {}),
|
|
5326
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
5327
|
+
className: "dsha-kq-art",
|
|
5328
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5329
|
+
width: "120",
|
|
5330
|
+
height: "64",
|
|
5331
|
+
fill: "none",
|
|
5332
|
+
children: art.map((stroke, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
5333
|
+
fill: "currentColor",
|
|
5334
|
+
...stroke.opacity === void 0 ? {} : { fillOpacity: stroke.opacity },
|
|
5335
|
+
style: { "--i": index },
|
|
5336
|
+
d: stroke.d
|
|
5337
|
+
}, index))
|
|
5338
|
+
})
|
|
5339
|
+
]
|
|
5340
|
+
})]
|
|
5341
|
+
}),
|
|
5342
|
+
carrier === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
5343
|
+
className: "dsha-muted dsha-kq-blank",
|
|
5344
|
+
children: t.quotaNone
|
|
5345
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5346
|
+
className: "dsha-kq-total",
|
|
5347
|
+
children: [
|
|
5348
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5349
|
+
className: "dsha-kq-row",
|
|
5350
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5351
|
+
className: "dsha-kq-label",
|
|
5352
|
+
children: headline
|
|
5353
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5354
|
+
className: "dsha-kq-value",
|
|
5355
|
+
children: percentText$2(totalPercent)
|
|
5356
|
+
})]
|
|
5357
|
+
}),
|
|
5358
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5359
|
+
className: "dsha-kq-barwrap",
|
|
5360
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5361
|
+
className: "dsha-kq-meter dsha-kq-meter--total",
|
|
5362
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5363
|
+
className: "dsha-kq-seg dsha-kq-seg--recent",
|
|
5364
|
+
"data-target": Math.max(0, Math.min(100, recentPercent)),
|
|
5365
|
+
style: { width: `${grown ? Math.max(0, Math.min(100, recentPercent)) : 0}%` }
|
|
5366
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5367
|
+
className: "dsha-kq-seg dsha-kq-seg--rest",
|
|
5368
|
+
"data-target": Math.max(0, Math.min(100, restPercent)),
|
|
5369
|
+
style: { width: `${grown ? Math.max(0, Math.min(100, restPercent)) : 0}%` }
|
|
5370
|
+
})]
|
|
5371
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5372
|
+
className: "dsha-kq-tip",
|
|
5373
|
+
role: "tooltip",
|
|
5374
|
+
children: t.kqTip.replace("{pct}", percentText$2(totalPercent))
|
|
5375
|
+
})]
|
|
5376
|
+
}),
|
|
5377
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5378
|
+
className: "dsha-kq-legend",
|
|
5379
|
+
children: [
|
|
5380
|
+
shortWindow !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5381
|
+
className: "dsha-kq-legend-item",
|
|
5382
|
+
children: [
|
|
5383
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", { className: "dsha-kq-dot dsha-kq-dot--recent" }),
|
|
5384
|
+
t.kqShortWindow.replace("{pct}", percentText$2(used(shortWindow))),
|
|
5385
|
+
shortReset !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5386
|
+
className: "dsha-kq-legend-note",
|
|
5387
|
+
children: shortReset > clock ? t.kqResetIn.replace("{time}", durationText(t, shortReset - clock)) : t.kqResetSoon
|
|
5388
|
+
})
|
|
5389
|
+
]
|
|
5390
|
+
}),
|
|
5391
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5392
|
+
className: "dsha-kq-legend-item",
|
|
5393
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("i", { className: "dsha-kq-dot dsha-kq-dot--rest" }), t.kqRestUsed]
|
|
5394
|
+
}),
|
|
5395
|
+
resetAt !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5396
|
+
className: "dsha-kq-reset",
|
|
5397
|
+
children: t.kqResetAfter.replace("{time}", clockText(resetAt))
|
|
5398
|
+
})
|
|
5399
|
+
]
|
|
5400
|
+
})
|
|
5401
|
+
]
|
|
5402
|
+
}),
|
|
5403
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5404
|
+
className: "dsha-kq-foot",
|
|
5405
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
5406
|
+
className: "dsha-kq-foot-left",
|
|
5407
|
+
children: [lastUsed !== void 0 && Number.isFinite(lastUsed) && lastUsed > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t.kqLastUsed.replace("{time}", clockText(lastUsed)) }), quota !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t.kqAgo.replace("{time}", agoLabel(t, quota.fetchedAt, props.now)) })]
|
|
5408
|
+
}), expires !== void 0 && Number.isFinite(expires) && expires > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
5409
|
+
className: "dsha-kq-expires",
|
|
5410
|
+
children: t.kqExpires.replace("{time}", dateText(expires))
|
|
5411
|
+
})]
|
|
5412
|
+
})
|
|
5413
|
+
]
|
|
5414
|
+
});
|
|
5415
|
+
}
|
|
5416
|
+
//#endregion
|
|
5085
5417
|
//#region src/client/kimi-code/KimiCodeSection.tsx
|
|
5086
5418
|
const api$12 = createLineApi("/kimi-code/api", "Kimi Code");
|
|
5087
5419
|
/** Money the service reports in minor units, rendered in its own currency. */
|
|
@@ -5464,15 +5796,16 @@ window.__ModuleLoader__.load({
|
|
|
5464
5796
|
onRelogin: (accountId) => handleRelogin(accountId),
|
|
5465
5797
|
onSetStrategy: (strategy) => void handleSetStrategy(strategy),
|
|
5466
5798
|
showQuota: true,
|
|
5467
|
-
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
entry.
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5799
|
+
accountCardClassName: "dsha-account-card--kimi",
|
|
5800
|
+
omitDetails: ["lastUsed", "expires"],
|
|
5801
|
+
renderQuota: (entry, _index, now) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(KimiQuotaCard, {
|
|
5802
|
+
quota: entry.quota,
|
|
5803
|
+
planName: entry.planName ?? entry.planLabel ?? quota?.planName ?? status?.account?.planName ?? null,
|
|
5804
|
+
lastUsedAt: entry.lastUsedAt,
|
|
5805
|
+
expiresAt: entry.expiresAt,
|
|
5806
|
+
now,
|
|
5807
|
+
labels: t
|
|
5808
|
+
}),
|
|
5476
5809
|
children: loginPending && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
5477
5810
|
className: "dsha-device-box",
|
|
5478
5811
|
children: [
|
|
@@ -20261,6 +20594,30 @@ window.__ModuleLoader__.load({
|
|
|
20261
20594
|
quotaWalletUsed: "Израсходовано за месяц",
|
|
20262
20595
|
updatedAt: "Обновлено: {time}",
|
|
20263
20596
|
resetAt: "Сброс: {time}",
|
|
20597
|
+
kqTotal: "Всего использовано",
|
|
20598
|
+
kqTip: "Расход Kimi Code {pct}",
|
|
20599
|
+
kqPoolKimi: "Kimi",
|
|
20600
|
+
kqPoolCode: "Code",
|
|
20601
|
+
kqResetAfter: "сброс {time}",
|
|
20602
|
+
kqAccount: "Аккаунт {n}",
|
|
20603
|
+
kqAgo: "обновлено {time}",
|
|
20604
|
+
kqLastUsed: "последний вызов {time}",
|
|
20605
|
+
kqShortWindow: "окно 5 часов {pct}",
|
|
20606
|
+
kqRestUsed: "остальной расход",
|
|
20607
|
+
kqExpires: "токен истекает {time}",
|
|
20608
|
+
kqJustNow: "только что",
|
|
20609
|
+
kqMinutesAgo: "{n} мин назад",
|
|
20610
|
+
kqHoursAgo: "{n} ч назад",
|
|
20611
|
+
kqDaysAgo: "{n} дн назад",
|
|
20612
|
+
kqWindow5h: "окно 5 часов",
|
|
20613
|
+
kqWindow7d: "за 7 дней",
|
|
20614
|
+
kqDurationDay: "{n} д",
|
|
20615
|
+
kqDurationHour: "{n} ч",
|
|
20616
|
+
kqDurationMinute: "{n} мин",
|
|
20617
|
+
kqResetIn: "сброс через {time}",
|
|
20618
|
+
kqResetSoon: "скоро сброс",
|
|
20619
|
+
kqRegionMainland: "Китай",
|
|
20620
|
+
kqRegionGlobal: "Глобальный",
|
|
20264
20621
|
loading: "Загрузка…",
|
|
20265
20622
|
loginFailed: "Вход не выполнен",
|
|
20266
20623
|
requests: "запросов",
|
|
@@ -21859,6 +22216,54 @@ window.__ModuleLoader__.load({
|
|
|
21859
22216
|
.dsha-cap-cost{color:var(--dsw-alias-label-primary);display:block;font-weight:500;margin-bottom:3px}
|
|
21860
22217
|
.dsha-cap-footnote{font-size:11px;line-height:1.55;margin:8px 0 0}
|
|
21861
22218
|
.dsha-warn{border:0.5px solid var(--dsw-alias-border-l2);border-radius:6px;line-height:1.55;margin:0 0 10px;padding:8px 10px}
|
|
22219
|
+
|
|
22220
|
+
/* ---------- Kimi Code 账号卡片里的额度区(KimiQuotaCard) ----------
|
|
22221
|
+
档位名用 Georgia 字标,右侧压一条五线谱;音符按档位换插图,悬停时逐笔浮入。
|
|
22222
|
+
总使用量是 Kimi 池与 Code 池的堆叠条,5 小时与 7 天各一条单行进度。 */
|
|
22223
|
+
/* ---------- 卡面:圆角、细边与顶部一道极淡的高光 ----------
|
|
22224
|
+
形状与层次照搬 index.html 里那张卡;颜色仍走 dsw 令牌,浅色主题下同一套规则也成立。 */
|
|
22225
|
+
.dsha-account-card.dsha-account-card--kimi{border-radius:14px;border-width:1px;background-image:linear-gradient(180deg,color-mix(in srgb,var(--dsw-alias-label-primary) 4%,transparent),transparent 46%);transition:border-color .3s ease,box-shadow .3s ease}
|
|
22226
|
+
.dsha-account-card.dsha-account-card--kimi:hover{border-color:color-mix(in srgb,var(--dsw-alias-label-primary) 22%,var(--dsw-alias-border-l2));box-shadow:0 8px 24px rgba(0,0,0,.16)}
|
|
22227
|
+
|
|
22228
|
+
.dsha-kq{--kq-fg:var(--dsw-alias-label-primary);--kq-fg-2:var(--dsw-alias-label-secondary);--kq-fg-3:var(--dsw-alias-label-tertiary);--kq-line:var(--dsw-alias-border-l2);--kq-track:color-mix(in srgb,var(--dsw-alias-label-primary) 9%,transparent);--kq-rest:var(--dsw-alias-label-primary,#1a1a19);--kq-code:var(--dsw-alias-button-info-fill,#397ee8);--kq-tip-bg:var(--dsw-alias-label-primary,#2f2f2d);color:var(--kq-fg);display:flex;flex-direction:column;min-width:0}
|
|
22229
|
+
.dsha-kq-head{align-items:center;display:flex;gap:6px}
|
|
22230
|
+
.dsha-kq-tier{font-family:Georgia,"Times New Roman",serif;font-size:24px;font-weight:400;letter-spacing:-1.4px;line-height:1.4;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
22231
|
+
.dsha-kq-staff{display:flex;flex:1;flex-direction:column;gap:4px;height:21px;margin-right:-6px;min-width:48px;position:relative}
|
|
22232
|
+
.dsha-kq-staff>i{background:var(--kq-line);display:block;height:1px;width:100%}
|
|
22233
|
+
.dsha-kq-art{overflow:visible;position:absolute;right:6px;top:50%;transform:translateY(-50%)}
|
|
22234
|
+
.dsha-kq-art path{opacity:0;transform:scale(.8) translateY(16px);transform-origin:bottom;transition:opacity .2s ease-in-out,transform .2s ease-in-out}
|
|
22235
|
+
.dsha-account-card:hover .dsha-kq-art path,.dsha-kq:focus-within .dsha-kq-art path{opacity:1;transform:scale(1) translateY(0);transition:opacity .6s ease-in-out,transform .6s ease-in-out;transition-delay:calc(var(--i,0) * 80ms)}
|
|
22236
|
+
.dsha-kq-total{margin-top:14px}
|
|
22237
|
+
.dsha-kq-row{align-items:baseline;column-gap:10px;display:flex;flex-wrap:wrap;min-width:0;row-gap:2px}
|
|
22238
|
+
.dsha-kq-label{color:var(--kq-fg);font-size:14px;white-space:nowrap}
|
|
22239
|
+
.dsha-kq-value{color:var(--kq-fg);font-size:14px;font-variant-numeric:tabular-nums;white-space:nowrap}
|
|
22240
|
+
.dsha-kq-barwrap{margin-top:11px;position:relative}
|
|
22241
|
+
.dsha-kq-meter{background:var(--kq-track);border-radius:999px;display:flex;gap:2px;height:8px;overflow:hidden}
|
|
22242
|
+
.dsha-kq-meter--total{border-radius:4px;height:12px}
|
|
22243
|
+
.dsha-kq-meter--total .dsha-kq-seg{border-radius:2px}
|
|
22244
|
+
.dsha-kq-seg{border-radius:999px;display:block;height:100%;transition:width .9s cubic-bezier(.22,.61,.36,1)}
|
|
22245
|
+
.dsha-kq-seg--recent{background:var(--kq-code)}
|
|
22246
|
+
.dsha-kq-seg--rest{background:var(--kq-rest)}
|
|
22247
|
+
.dsha-kq-tip{background:var(--kq-tip-bg);border-radius:10px;bottom:calc(100% + 10px);color:var(--dsw-alias-bg-base,#fff);font-size:13px;line-height:1;opacity:0;padding:9px 14px;pointer-events:none;position:absolute;right:0;transform:translateY(4px);transition:opacity .16s ease-out,transform .16s ease-out;white-space:nowrap}
|
|
22248
|
+
.dsha-kq-tip::after{border:6px solid transparent;border-top-color:var(--kq-tip-bg);content:"";position:absolute;right:34px;top:100%}
|
|
22249
|
+
.dsha-kq-barwrap:hover .dsha-kq-tip{opacity:1;transform:translateY(0)}
|
|
22250
|
+
.dsha-kq-legend{align-items:center;color:var(--kq-fg-2);column-gap:16px;display:flex;flex-wrap:wrap;font-size:13px;margin-top:11px;row-gap:6px}
|
|
22251
|
+
.dsha-kq-legend-item{align-items:center;display:inline-flex;gap:6px;white-space:nowrap}
|
|
22252
|
+
.dsha-kq-legend-note{color:var(--kq-fg-3);white-space:nowrap}
|
|
22253
|
+
.dsha-kq-dot{border-radius:2px;display:block;height:8px;width:8px}
|
|
22254
|
+
.dsha-kq-dot--recent{background:var(--kq-code)}
|
|
22255
|
+
.dsha-kq-dot--rest{background:var(--kq-rest)}
|
|
22256
|
+
.dsha-kq-reset{color:var(--kq-fg-3);font-size:12px;font-variant-numeric:tabular-nums;margin-left:auto;white-space:nowrap}
|
|
22257
|
+
.dsha-kq-sep{border:0;border-top:0.5px solid var(--kq-line);height:0;margin:16px 0}
|
|
22258
|
+
.dsha-kq-window+.dsha-kq-window{margin-top:16px}
|
|
22259
|
+
.dsha-kq-window-label{color:var(--kq-fg);font-size:14px}
|
|
22260
|
+
.dsha-kq-window-pct{color:var(--kq-fg);font-size:14px;font-variant-numeric:tabular-nums}
|
|
22261
|
+
.dsha-kq-window .dsha-kq-meter{margin-top:8px}
|
|
22262
|
+
.dsha-kq-foot{align-items:baseline;color:var(--kq-fg-3);column-gap:12px;display:flex;flex-wrap:wrap;font-size:11px;font-variant-numeric:tabular-nums;justify-content:space-between;margin-top:14px;row-gap:4px}
|
|
22263
|
+
.dsha-kq-foot-left{align-items:baseline;column-gap:10px;display:inline-flex;flex-wrap:wrap;min-width:0;row-gap:2px}
|
|
22264
|
+
.dsha-kq-foot-left>span{white-space:nowrap}
|
|
22265
|
+
.dsha-kq-expires{text-align:right;white-space:nowrap}
|
|
22266
|
+
.dsha-kq-blank{margin:12px 0 0}
|
|
21862
22267
|
`;
|
|
21863
22268
|
/** Kimi-specific rules layered on top of the shared control styles. */
|
|
21864
22269
|
function installKimiCodeStyles() {
|