dsh-dock 0.9.0 → 0.9.2
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/client.js +212 -119
- package/features/animation/view.jsx +39 -39
- package/features/balance/view.js +19 -17
- package/features/games/games/breakout.jsx +3 -3
- package/features/games/games/racer.jsx +1 -1
- package/features/games/games/tetris.jsx +12 -6
- package/features/games/games/xiangqi.jsx +98 -26
- package/features/games/view.jsx +4 -4
- package/features/mobile-relay/host.js +53 -0
- package/features/mobile-relay/view.jsx +1 -1
- package/features/modelconfig/view.js +4 -4
- package/features/tokenlog/view.jsx +8 -8
- package/package.json +1 -1
- package/src/client.jsx +20 -7
package/client.js
CHANGED
|
@@ -2346,7 +2346,7 @@ var css = `
|
|
|
2346
2346
|
.dtok-btn{cursor:pointer;border-radius:6px;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);padding:4px 12px;font-size:12px;font-family:inherit;flex:none;}
|
|
2347
2347
|
.dtok-btn:hover{background:var(--dsw-alias-interactive-bg-hover);}
|
|
2348
2348
|
.dtok-btn[disabled]{opacity:.5;cursor:default;}
|
|
2349
|
-
.dtok-btn.primary{background:var(--
|
|
2349
|
+
.dtok-btn.primary{background:var(--dk-accent);border-color:var(--dk-accent);color:#fff;}
|
|
2350
2350
|
.dtok-btn.primary:hover{filter:brightness(1.1);}
|
|
2351
2351
|
.dtok-body{display:flex;flex-direction:column;gap:8px;min-width:0;}
|
|
2352
2352
|
.dtok-cards{display:flex;gap:8px;flex-wrap:wrap;}
|
|
@@ -2358,22 +2358,22 @@ var css = `
|
|
|
2358
2358
|
.dtok-table{border-collapse:collapse;width:100%;font-size:12px;white-space:nowrap;color:var(--dsw-alias-label-primary);}
|
|
2359
2359
|
.dtok-table th{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);text-align:left;padding:7px 10px;position:sticky;top:0;z-index:1;border-bottom:1px solid var(--dsw-alias-border-l1);font-weight:600;user-select:none;cursor:pointer;}
|
|
2360
2360
|
.dtok-table th:hover{color:var(--dsw-alias-label-primary);}
|
|
2361
|
-
.dtok-table td{padding:6px 10px;border-bottom:1px solid
|
|
2362
|
-
.dtok-table tr:hover td{background:
|
|
2361
|
+
.dtok-table td{padding:6px 10px;border-bottom:1px solid var(--dk-tdim);}
|
|
2362
|
+
.dtok-table tr:hover td{background:var(--dk-hover-tint);}
|
|
2363
2363
|
.dtok-empty{text-align:center;color:var(--dsw-alias-label-secondary);padding:32px 0;font-size:13px;}
|
|
2364
|
-
.dtok-sid{color:var(--
|
|
2364
|
+
.dtok-sid{color:var(--dk-accent);cursor:pointer;text-decoration:underline dotted;}
|
|
2365
2365
|
.dtok-sid:hover{filter:brightness(1.25);}
|
|
2366
2366
|
.dtok-code{font-weight:700;font-family:ui-monospace,monospace;}
|
|
2367
2367
|
.dtok-code.ok{color:var(--dsw-alias-state-success-primary,#4ade80);}
|
|
2368
|
-
.dtok-code.warn{color:var(--
|
|
2368
|
+
.dtok-code.warn{color:var(--dk-warn);}
|
|
2369
2369
|
.dtok-code.err{color:var(--dsw-alias-state-error-primary,#f87171);}
|
|
2370
2370
|
.dtok-code.pend{color:var(--dsw-alias-label-tertiary,#94a3b8);}
|
|
2371
|
-
.dtok-detail-link{color:var(--
|
|
2371
|
+
.dtok-detail-link{color:var(--dk-accent);cursor:pointer;font-size:11px;}
|
|
2372
2372
|
.dtok-detail-link:hover{text-decoration:underline;}
|
|
2373
2373
|
.dtok-detail{position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center;}
|
|
2374
2374
|
.dtok-detail-card{background:var(--dsw-alias-bg-layer-2,#1c212b);border:1px solid var(--dsw-alias-border-l2,#3a4150);border-radius:12px;padding:20px 24px;max-width:640px;width:92%;max-height:80vh;overflow:auto;color:var(--dsw-alias-label-primary,#e8eaf0);}
|
|
2375
2375
|
.dtok-detail-card h3{margin:0 0 12px;font-size:15px;}
|
|
2376
|
-
.dtok-detail-row{display:flex;gap:8px;padding:4px 0;font-size:12px;border-bottom:1px solid
|
|
2376
|
+
.dtok-detail-row{display:flex;gap:8px;padding:4px 0;font-size:12px;border-bottom:1px solid var(--dk-tdim);}
|
|
2377
2377
|
.dtok-detail-row .k{color:var(--dsw-alias-label-secondary,#9aa3b5);min-width:110px;flex-shrink:0;}
|
|
2378
2378
|
.dtok-detail-row .v{word-break:break-all;}
|
|
2379
2379
|
.dtok-sort-mark{opacity:0.6;margin-left:3px;}
|
|
@@ -2804,7 +2804,7 @@ function TokenLogChip(props) {
|
|
|
2804
2804
|
"aria-label": "\u4F1A\u8BDD\u7528\u91CF",
|
|
2805
2805
|
onClick: () => openPanel("tokenlog", { sessionId: sid }),
|
|
2806
2806
|
children: [
|
|
2807
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "dockchip-dot", style: { background: "
|
|
2807
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "dockchip-dot", style: { background: "var(--dk-warn)" } }),
|
|
2808
2808
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: label })
|
|
2809
2809
|
]
|
|
2810
2810
|
}
|
|
@@ -3317,11 +3317,11 @@ var feature2 = {
|
|
|
3317
3317
|
description: "\u7F16\u8F91\u5404 Provider \u6A21\u578B\u76EE\u5F55\uFF1A\u8F93\u5165\u7C7B\u578B\uFF08\u6587\u672C/\u56FE\u7247 + \u6807\u6CE8\uFF09\u4E0E\u601D\u8003\u5F3A\u5EA6\u6863\u4F4D\uFF1B\u5199\u56DE\u5B98\u65B9\u914D\u7F6E\u70ED\u751F\u6548\uFF0C\u4F1A\u8BDD\u6A21\u578B\u9009\u62E9\u5668\u5373\u65F6\u53EF\u9009",
|
|
3318
3318
|
css: [
|
|
3319
3319
|
".dkm-note{color:var(--dsw-alias-label-secondary);font-size:12px;}",
|
|
3320
|
-
".dkm-warn{color:var(--
|
|
3320
|
+
".dkm-warn{color:var(--dk-warn);}",
|
|
3321
3321
|
".dkm-error{color:var(--dsw-alias-state-error-primary);font-size:12px;}",
|
|
3322
3322
|
".dkm-chips{display:flex;flex-wrap:wrap;gap:6px;}",
|
|
3323
3323
|
".dkm-chip{cursor:pointer;border:1px solid var(--dsw-alias-border-l2);background:transparent;color:var(--dsw-alias-label-secondary);border-radius:999px;padding:3px 12px;font-family:inherit;font-size:12px;}",
|
|
3324
|
-
".dkm-chip.on{color:var(--
|
|
3324
|
+
".dkm-chip.on{color:var(--dk-accent);border-color:currentColor;}",
|
|
3325
3325
|
".dkm-prov{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;}",
|
|
3326
3326
|
".dkm-prov-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}",
|
|
3327
3327
|
".dkm-name{font-weight:600;}",
|
|
@@ -3337,7 +3337,7 @@ var feature2 = {
|
|
|
3337
3337
|
".dkm-input{box-sizing:border-box;width:100%;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:4px 8px;font-family:inherit;font-size:12px;}",
|
|
3338
3338
|
".dkm-checks{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}",
|
|
3339
3339
|
".dkm-check{display:inline-flex;align-items:center;gap:5px;cursor:pointer;color:var(--dsw-alias-label-secondary);font-size:12px;}",
|
|
3340
|
-
".dkm-check input{accent-color:var(--
|
|
3340
|
+
".dkm-check input{accent-color:var(--dk-accent);margin:0;}",
|
|
3341
3341
|
".dkm-tag{color:var(--dsw-alias-label-tertiary);}",
|
|
3342
3342
|
".dkm-efforts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}",
|
|
3343
3343
|
".dkm-del{margin-left:auto;cursor:pointer;border:1px solid var(--dsw-alias-border-l2);background:transparent;color:var(--dsw-alias-label-tertiary);border-radius:8px;padding:2px 10px;font-family:inherit;font-size:12px;flex:none;}",
|
|
@@ -3345,7 +3345,7 @@ var feature2 = {
|
|
|
3345
3345
|
".dkm-add{cursor:pointer;border:1px dashed var(--dsw-alias-border-l2);background:transparent;color:var(--dsw-alias-label-secondary);border-radius:10px;padding:6px 14px;font-family:inherit;font-size:12px;align-self:flex-start;}",
|
|
3346
3346
|
".dkm-add:hover{color:var(--dsw-alias-label-primary);}",
|
|
3347
3347
|
".dkm-savebar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px solid var(--dsw-alias-border-l1);padding-top:10px;}",
|
|
3348
|
-
".dkm-save{cursor:pointer;border:1px solid var(--
|
|
3348
|
+
".dkm-save{cursor:pointer;border:1px solid var(--dk-accent);color:var(--dk-accent);background:transparent;border-radius:8px;padding:4px 14px;font-family:inherit;font-size:12px;flex:none;}",
|
|
3349
3349
|
".dkm-save:hover{background:var(--dsw-alias-interactive-bg-hover);}",
|
|
3350
3350
|
".dkm-save[disabled]{opacity:.5;cursor:default;}",
|
|
3351
3351
|
".dkm-msg{font-size:12px;color:var(--dsw-alias-label-secondary);}",
|
|
@@ -3455,19 +3455,19 @@ var feature4 = {
|
|
|
3455
3455
|
|
|
3456
3456
|
// features/balance/view.js
|
|
3457
3457
|
var import_react7 = __toESM(require("react"), 1);
|
|
3458
|
-
var ACCENT_PALETTE = ["#
|
|
3458
|
+
var ACCENT_PALETTE = ["#2563eb", "#0d9488", "#b45309", "#7c3aed", "#be185d", "#0369a1", "#c2410c", "#15803d", "#a21caf", "#0e7490"];
|
|
3459
3459
|
var CURATED_ACCENTS = {
|
|
3460
|
-
"deepseek-official": "#
|
|
3461
|
-
deepseek: "#
|
|
3462
|
-
"qwen-token-plan-cn": "#
|
|
3463
|
-
fangzhou: "#
|
|
3464
|
-
openai: "#
|
|
3465
|
-
anthropic: "#
|
|
3466
|
-
"google-gemini": "#
|
|
3460
|
+
"deepseek-official": "#2563eb",
|
|
3461
|
+
deepseek: "#2563eb",
|
|
3462
|
+
"qwen-token-plan-cn": "#b45309",
|
|
3463
|
+
fangzhou: "#7c3aed",
|
|
3464
|
+
openai: "#15803d",
|
|
3465
|
+
anthropic: "#c2410c",
|
|
3466
|
+
"google-gemini": "#1d4ed8"
|
|
3467
3467
|
};
|
|
3468
|
-
var C_GRANTED = "#
|
|
3469
|
-
var C_TOPUP = "#
|
|
3470
|
-
var C_ERR = "#
|
|
3468
|
+
var C_GRANTED = "#0369a1";
|
|
3469
|
+
var C_TOPUP = "#b45309";
|
|
3470
|
+
var C_ERR = "#dc2626";
|
|
3471
3471
|
var USD_CNY_RATE = 7.2;
|
|
3472
3472
|
function accentOf(id) {
|
|
3473
3473
|
if (CURATED_ACCENTS[id]) return CURATED_ACCENTS[id];
|
|
@@ -3755,7 +3755,7 @@ function BalanceChip(props) {
|
|
|
3755
3755
|
const selProvider = sel && (sel.provider || sel.selected && sel.selected.provider) || null;
|
|
3756
3756
|
const def = selProvider || (data && data.default ? data.default.provider : null);
|
|
3757
3757
|
const cur = def ? providers.find((p) => p.id === def) : null;
|
|
3758
|
-
const accent = cur ? accentOf(cur.id) : "#
|
|
3758
|
+
const accent = cur ? accentOf(cur.id) : "#64748b";
|
|
3759
3759
|
const text = snap.error ? "\u4F59\u989D\xB7\u5931\u8D25" : !data ? snap.loading ? "\u4F59\u989D \u2026" : "\u4F59\u989D \u2014" : cur ? chipBalanceText(cur) : "\u4F59\u989D \u2014";
|
|
3760
3760
|
const selModel = sel && (sel.model || sel.selected && sel.selected.model) || null;
|
|
3761
3761
|
const title = cur ? (cur.displayName || cur.id) + (selModel ? " \xB7 \u5F53\u524D\u6A21\u578B " + selModel : "") + " \xB7 \u70B9\u51FB\u5728\u529F\u80FD\u575E\u67E5\u770B\u4F59\u989D\u8BE6\u60C5" : "\u70B9\u51FB\u6253\u5F00\u529F\u80FD\u575E \xB7 \u6A21\u578B\u4F59\u989D";
|
|
@@ -3787,10 +3787,10 @@ var feature5 = {
|
|
|
3787
3787
|
".dkb-row-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}",
|
|
3788
3788
|
".dkb-dot{width:8px;height:8px;border-radius:50%;flex:none;}",
|
|
3789
3789
|
".dkb-name{font-weight:600;font-size:13px;color:var(--dsw-alias-label-primary);}",
|
|
3790
|
-
".dkb-default{color:var(--
|
|
3790
|
+
".dkb-default{color:var(--dk-accent);font-size:11px;border:1px solid currentColor;border-radius:999px;padding:0 6px;}",
|
|
3791
3791
|
".dkb-badge{font-size:11px;border-radius:999px;padding:1px 8px;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);}",
|
|
3792
3792
|
".dkb-badge.ok{color:var(--dsw-alias-state-success-primary);border-color:currentColor;}",
|
|
3793
|
-
".dkb-badge.warn{color:var(--
|
|
3793
|
+
".dkb-badge.warn{color:var(--dk-warn);border-color:currentColor;}",
|
|
3794
3794
|
".dkb-badge.err{color:var(--dsw-alias-state-error-primary);border-color:currentColor;}",
|
|
3795
3795
|
// 模型数折叠开关(点行头右侧"N 个模型 ▾"展开/收起 chips)
|
|
3796
3796
|
".dkb-models-toggle{margin-left:auto;cursor:pointer;border:none;background:transparent;color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:11px;padding:1px 6px;border-radius:6px;white-space:nowrap;}",
|
|
@@ -3821,7 +3821,7 @@ var feature5 = {
|
|
|
3821
3821
|
".dkb-refresh:hover{background:var(--dsw-alias-interactive-bg-hover);}",
|
|
3822
3822
|
// chips 点击定位后的行高亮闪烁
|
|
3823
3823
|
".dkb-row.dkb-flash{animation:dkb-flash 1.8s var(--ds-ease-in-out);}",
|
|
3824
|
-
"@keyframes dkb-flash{0%,55%{border-color:var(--
|
|
3824
|
+
"@keyframes dkb-flash{0%,55%{border-color:var(--dk-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--dk-accent) 25%,transparent);}100%{border-color:var(--dsw-alias-border-l1);box-shadow:none;}}"
|
|
3825
3825
|
].join("\n"),
|
|
3826
3826
|
View: BalanceView,
|
|
3827
3827
|
HomeStat: BalanceStat,
|
|
@@ -3872,9 +3872,9 @@ var PHASE_LABELS = { think: "\u601D\u8003\u4E2D", write: "\u8F93\u51FA\u4E2D", c
|
|
|
3872
3872
|
function phaseLabel(p) {
|
|
3873
3873
|
return PHASE_LABELS[p] || "\u5DE5\u4F5C\u4E2D";
|
|
3874
3874
|
}
|
|
3875
|
-
var PHASE_COLORS = { think: "#
|
|
3875
|
+
var PHASE_COLORS = { think: "#2f6fed", write: "#0d9488", code: "#b45309", search: "#0e7490" };
|
|
3876
3876
|
function phaseColor(p) {
|
|
3877
|
-
return PHASE_COLORS[p] || "#
|
|
3877
|
+
return PHASE_COLORS[p] || "#2f6fed";
|
|
3878
3878
|
}
|
|
3879
3879
|
var END_LABELS = {
|
|
3880
3880
|
completed: { label: "\u5B8C\u6210", cls: "ok" },
|
|
@@ -4168,7 +4168,7 @@ function Toast(props) {
|
|
|
4168
4168
|
const timer = setTimeout(() => props.onClose(t.id), 240);
|
|
4169
4169
|
return () => clearTimeout(timer);
|
|
4170
4170
|
}, [closing]);
|
|
4171
|
-
const markColor = t.kind === "success" ? "var(--
|
|
4171
|
+
const markColor = t.kind === "success" ? "var(--dk-ok)" : t.kind === "error" ? "var(--dk-err)" : "var(--dk-warn)";
|
|
4172
4172
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "dkan-toast" + (closing ? " out" : ""), children: [
|
|
4173
4173
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "dkan-toast-head", children: [
|
|
4174
4174
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "dkan-toast-mark", style: { background: markColor } }),
|
|
@@ -4668,7 +4668,7 @@ function AnimationOverlay(props) {
|
|
|
4668
4668
|
pushBurst("spark", e.clientX, e.clientY, makeBits(10, () => ({
|
|
4669
4669
|
dx: (Math.random() - 0.5) * 70,
|
|
4670
4670
|
dy: (Math.random() - 0.5) * 70,
|
|
4671
|
-
c: ["#
|
|
4671
|
+
c: ["#2563eb", "#0d9488", "#b45309", "#be185d"][Math.floor(Math.random() * 4)]
|
|
4672
4672
|
})));
|
|
4673
4673
|
} else if (workspace) {
|
|
4674
4674
|
pushBurst("flash");
|
|
@@ -4749,7 +4749,7 @@ function AnimationOverlay(props) {
|
|
|
4749
4749
|
dx: (Math.random() - 0.5) * 60,
|
|
4750
4750
|
r: Math.random() * 720 - 360,
|
|
4751
4751
|
d: Math.random() * 0.35,
|
|
4752
|
-
c: ["#
|
|
4752
|
+
c: ["#2563eb", "#0d9488", "#b45309", "#be185d", "#7c3aed"][i % 5]
|
|
4753
4753
|
})));
|
|
4754
4754
|
}
|
|
4755
4755
|
}
|
|
@@ -5581,22 +5581,22 @@ function AnimationStat(props) {
|
|
|
5581
5581
|
}
|
|
5582
5582
|
var css2 = [
|
|
5583
5583
|
// 顶部流光细线(3px,比首版更醒目)
|
|
5584
|
-
".dkan-line{position:fixed;top:0;left:0;right:0;height:3px;z-index:9990;pointer-events:none;background:color-mix(in srgb,var(--
|
|
5585
|
-
'.dkan-line::after{content:"";position:absolute;top:0;bottom:0;left:-42%;width:42%;background:linear-gradient(90deg,transparent,var(--
|
|
5584
|
+
".dkan-line{position:fixed;top:0;left:0;right:0;height:3px;z-index:9990;pointer-events:none;background:color-mix(in srgb,var(--dk-accent) 30%,transparent);}",
|
|
5585
|
+
'.dkan-line::after{content:"";position:absolute;top:0;bottom:0;left:-42%;width:42%;background:linear-gradient(90deg,transparent,var(--dk-accent) 60%,#fff);box-shadow:0 0 10px 1px color-mix(in srgb,var(--dk-accent) 70%,transparent);animation:dkan-flow calc(1.9s / var(--dkan-speed,1)) linear infinite;}',
|
|
5586
5586
|
"@keyframes dkan-flow{to{left:100%}}",
|
|
5587
5587
|
// 完成瞬间的一次性流光(成功绿 / 异常红),动画结束自动清场
|
|
5588
5588
|
".dkan-done{position:fixed;top:0;left:0;right:0;height:3px;z-index:9991;pointer-events:none;background:linear-gradient(90deg,transparent,var(--dsw-alias-state-success-primary,#34d399) 50%,#fff);background-size:50% 100%;background-repeat:no-repeat;animation:dkan-done 1.1s var(--ds-ease-in-out) forwards;}",
|
|
5589
5589
|
".dkan-done.err{background-image:linear-gradient(90deg,transparent,var(--dsw-alias-state-error-primary,#f87171) 50%,#fff);}",
|
|
5590
5590
|
"@keyframes dkan-done{0%{background-position:-60% 0;opacity:0}25%{opacity:1}100%{background-position:160% 0;opacity:0}}",
|
|
5591
5591
|
// 环屏巡航:光点沿屏幕边缘转一整圈
|
|
5592
|
-
".dkan-orbit{position:fixed;top:0;left:0;width:12px;height:12px;z-index:9990;pointer-events:none;border-radius:50%;background:var(--
|
|
5592
|
+
".dkan-orbit{position:fixed;top:0;left:0;width:12px;height:12px;z-index:9990;pointer-events:none;border-radius:50%;background:var(--dk-accent);box-shadow:0 0 14px 4px color-mix(in srgb,var(--dk-accent) 60%,transparent),0 0 30px 8px color-mix(in srgb,var(--dk-accent) 25%,transparent);animation:dkan-orbit calc(14s / var(--dkan-speed,1)) linear infinite;}",
|
|
5593
5593
|
"@keyframes dkan-orbit{0%{top:0;left:0}25%{top:0;left:calc(100vw - 12px)}50%{top:calc(100vh - 12px);left:calc(100vw - 12px)}75%{top:calc(100vh - 12px);left:0}100%{top:0;left:0}}",
|
|
5594
5594
|
// ===== 氛围动效 =====
|
|
5595
5595
|
".dkan-amb{position:fixed;inset:0;z-index:9989;pointer-events:none;overflow:hidden;}",
|
|
5596
5596
|
// pointer-events 不继承:全屏装饰层的子粒子(星点/流星/极光/火花/彩带)必须各自透明于点击
|
|
5597
5597
|
".dkan-amb *,.dkan-fxwrap *{pointer-events:none;}",
|
|
5598
5598
|
// 代码雨:字符列缓落(提亮加大,速度随吞吐)
|
|
5599
|
-
".dkan-matrix span{position:absolute;top:-12%;writing-mode:vertical-rl;font-family:var(--ds-font-family-code,monospace);color:var(--
|
|
5599
|
+
".dkan-matrix span{position:absolute;top:-12%;writing-mode:vertical-rl;font-family:var(--ds-font-family-code,monospace);color:var(--dk-accent);text-shadow:0 0 6px color-mix(in srgb,var(--dk-accent) 60%,transparent);animation:dkan-fall linear infinite;will-change:transform;}",
|
|
5600
5600
|
"@keyframes dkan-fall{to{transform:translateY(125vh)}}",
|
|
5601
5601
|
// 星野:星点缓慢飘移 + 闪烁(加亮加发光)+ 月亮 + 流星
|
|
5602
5602
|
".dkan-stars .dkan-star{position:absolute;border-radius:50%;background:#cfe3ff;box-shadow:0 0 4px 1px color-mix(in srgb,#8ab6ff 55%,transparent);animation:dkan-star ease-in-out infinite alternate;}",
|
|
@@ -5627,10 +5627,10 @@ var css2 = [
|
|
|
5627
5627
|
".dkan-delivery-trail{position:absolute;left:-132px;top:26px;width:154px;height:4px;border-radius:999px;background:linear-gradient(90deg,transparent,#34d399 48%,#d9f99d 78%,transparent);opacity:.9;animation:dkan-delivery-trail var(--dkan-delivery-duration,8600ms) linear forwards;}@keyframes dkan-delivery-trail{0%,82%{opacity:.9}100%{opacity:0}}.dkan-freighter{position:absolute;left:10px;top:10px;width:176px;height:45px;display:block;filter:drop-shadow(0 0 9px color-mix(in srgb,#7dd3fc 62%,transparent));}.dkan-delivery .dkan-freighter,.dkan-departure .dkan-freighter{filter:none}.dkan-delivery .dkan-freighter-engine i,.dkan-departure .dkan-freighter-engine i{animation:none;opacity:.76;box-shadow:-6px 0 8px #22d3ee}.dkan-delivery .dkan-freighter-nose,.dkan-departure .dkan-freighter-nose{filter:none}.dkan-freighter-hull{position:absolute;z-index:3;left:21px;top:7px;width:126px;height:31px;background:linear-gradient(150deg,#f8fbff 0%,#9cc8ff 30%,#385d91 72%,#1d3150);clip-path:polygon(0 30%,43% 0,83% 17%,100% 50%,83% 83%,43% 100%,0 70%,12% 50%);box-shadow:inset 0 1px 0 rgb(255 255 255 / .7),inset -7px -5px 9px rgb(8 24 49 / .38);}.dkan-freighter-nose{position:absolute;z-index:4;right:10px;top:16px;width:28px;height:14px;background:linear-gradient(90deg,#a9d1ff,#e8f5ff);clip-path:polygon(0 0,100% 50%,0 100%,22% 50%);filter:drop-shadow(5px 0 5px color-mix(in srgb,#93c5fd 62%,transparent));}.dkan-freighter-canopy{position:absolute;z-index:5;left:77px;top:10px;width:39px;height:11px;border-radius:70% 48% 42% 32%;background:linear-gradient(135deg,#ecfeff 0%,#67e8f9 32%,#2563eb 75%);transform:skewX(-18deg);box-shadow:inset 0 2px 2px rgb(255 255 255 / .7),0 0 8px color-mix(in srgb,#67e8f9 42%,transparent);}.dkan-freighter-fin{position:absolute;z-index:2;left:48px;top:3px;width:24px;height:17px;background:linear-gradient(135deg,#31557f,#a7caf7);clip-path:polygon(0 100%,58% 0,100% 100%);}.dkan-freighter-wing{position:absolute;z-index:1;left:48px;width:60px;height:18px;background:linear-gradient(135deg,#24436d,#8ebaf4);}.dkan-freighter-wing.left{top:2px;clip-path:polygon(0 100%,100% 0,68% 100%)}.dkan-freighter-wing.right{top:26px;clip-path:polygon(0 0,68% 0,100% 100%)}",
|
|
5628
5628
|
".dkan-freighter-cargo{position:absolute;z-index:6;left:37px;top:31px;width:74px;height:7px;display:flex;align-items:center;gap:2px;padding:1px 3px;border-radius:4px;background:#172842;border:1px solid color-mix(in srgb,#b8d8ff 48%,transparent);box-shadow:inset 0 1px 0 rgb(255 255 255 / .2);}.dkan-freighter-cargo i{display:block;flex:1;min-width:4px;height:5px;border-radius:1px;background:linear-gradient(135deg,#fef3c7,#f59e0b 58%,#b45309);box-shadow:0 0 4px color-mix(in srgb,#fbbf24 58%,transparent);}.dkan-freighter-cargo.empty i{background:linear-gradient(135deg,#dbeafe,#38bdf8 58%,#1d4ed8);box-shadow:0 0 4px color-mix(in srgb,#38bdf8 55%,transparent);}.dkan-freighter-engine{position:absolute;z-index:0;left:5px;top:19px;display:flex;gap:3px;align-items:center;height:11px;}.dkan-freighter-engine i{width:18px;height:5px;border-radius:60% 0 0 60%;background:linear-gradient(90deg,transparent,#67e8f9);box-shadow:-9px 0 12px #22d3ee;animation:dkan-engine .34s ease-in-out infinite alternate;}.dkan-freighter-engine i:nth-child(2){animation-delay:-.14s}",
|
|
5629
5629
|
"@keyframes dkan-engine{to{transform:scaleX(.55);opacity:.5}}",
|
|
5630
|
-
".dkan-delivery-label{position:absolute;left:21px;top:58px;display:flex;align-items:baseline;gap:6px;padding:4px 8px;border:1px solid color-mix(in srgb,#93c5fd 30%,var(--dsw-alias-border-l1));border-radius:999px;background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 82%,transparent);backdrop-filter:blur(10px);color:var(--dsw-alias-label-secondary);font:10px/1.2 var(--ds-font-family,system-ui,sans-serif);white-space:nowrap;}.dkan-delivery-label b{color:var(--dsw-alias-label-primary);font-weight:650}.dkan-delivery-label span{color
|
|
5630
|
+
".dkan-delivery-label{position:absolute;left:21px;top:58px;display:flex;align-items:baseline;gap:6px;padding:4px 8px;border:1px solid color-mix(in srgb,#93c5fd 30%,var(--dsw-alias-border-l1));border-radius:999px;background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 82%,transparent);backdrop-filter:blur(10px);color:var(--dsw-alias-label-secondary);font:10px/1.2 var(--ds-font-family,system-ui,sans-serif);white-space:nowrap;}.dkan-delivery-label b{color:var(--dsw-alias-label-primary);font-weight:650}.dkan-delivery-label span{color:var(--dk-accent);}",
|
|
5631
5631
|
"@media (max-width:1100px){.dkan-space-system,.dkan-space-runner{display:none}}",
|
|
5632
5632
|
".dkan-ready-freighter{position:fixed;width:210px;height:88px;z-index:9994;pointer-events:none;filter:drop-shadow(0 10px 14px rgb(0 0 0 / .18));}.dkan-ready-freighter>span:last-child{position:absolute;left:21px;top:58px;padding:4px 8px;border:1px solid color-mix(in srgb,#93c5fd 28%,var(--dsw-alias-border-l1));border-radius:999px;background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 80%,transparent);backdrop-filter:blur(10px);color:var(--dsw-alias-label-secondary);font:10px/1.2 var(--ds-font-family,system-ui,sans-serif);white-space:nowrap;}.dkan-departure{position:fixed;left:0;top:0;width:210px;height:88px;z-index:9994;pointer-events:none;will-change:transform,opacity;contain:layout paint style;isolation:isolate;animation:dkan-departure-flight var(--dkan-departure-duration,8600ms) cubic-bezier(.42,0,.85,.45) forwards;}@keyframes dkan-departure-flight{0%{opacity:0;transform:translate3d(var(--dkan-from-x),var(--dkan-from-y),0) scale(1) rotate(var(--dkan-flight-angle,0deg))}6%{opacity:1;transform:translate3d(var(--dkan-from-x),var(--dkan-from-y),0) scale(1) rotate(var(--dkan-flight-angle,0deg))}100%{opacity:0;transform:translate3d(var(--dkan-to-x),var(--dkan-to-y),0) scale(.24) rotate(var(--dkan-flight-angle,0deg))}}",
|
|
5633
|
-
".dkan-space-stuck{position:fixed;left:50%;top:50%;width:244px;height:160px;z-index:9993;pointer-events:none;transform:translate(-50%,-50%);border:1px solid color-mix(in srgb,#f59e0b 48%,var(--dsw-alias-border-l1));border-radius:20px;background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 88%,transparent);backdrop-filter:blur(16px);box-shadow:0 18px 54px rgb(0 0 0 / .28),0 0 30px color-mix(in srgb,#f59e0b 15%,transparent);}.dkan-space-stuck .dkan-freighter{left:37px;top:11px;transform:scale(.9);transform-origin:top left;}.dkan-stuck-code{position:absolute;left:17px;right:17px;top:60px;height:36px;border-radius:7px;background:linear-gradient(90deg,color-mix(in srgb,#f59e0b 18%,transparent),transparent);color
|
|
5633
|
+
".dkan-space-stuck{position:fixed;left:50%;top:50%;width:244px;height:160px;z-index:9993;pointer-events:none;transform:translate(-50%,-50%);border:1px solid color-mix(in srgb,#f59e0b 48%,var(--dsw-alias-border-l1));border-radius:20px;background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 88%,transparent);backdrop-filter:blur(16px);box-shadow:0 18px 54px rgb(0 0 0 / .28),0 0 30px color-mix(in srgb,#f59e0b 15%,transparent);}.dkan-space-stuck .dkan-freighter{left:37px;top:11px;transform:scale(.9);transform-origin:top left;}.dkan-stuck-code{position:absolute;left:17px;right:17px;top:60px;height:36px;border-radius:7px;background:linear-gradient(90deg,color-mix(in srgb,#f59e0b 18%,transparent),transparent);color:var(--dk-warn);font:700 14px/36px var(--ds-font-family-code,monospace);letter-spacing:.12em;text-align:center;overflow:hidden;}.dkan-stuck-code::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,#fef3c7 70%,transparent),transparent);transform:translateX(-110%);animation:dkan-stuck-scan 1.25s linear infinite;}.dkan-stuck-code i{display:inline-block;width:7px;height:7px;margin-right:8px;border-radius:50%;background:#f59e0b;box-shadow:0 0 9px #f59e0b;animation:dkan-stuck-pulse .8s ease-in-out infinite alternate;}.dkan-space-stuck strong{position:absolute;left:0;right:0;top:108px;color:var(--dsw-alias-label-primary);font:650 13px/1.2 var(--ds-font-family,system-ui,sans-serif);text-align:center;}.dkan-space-stuck small{position:absolute;left:18px;right:18px;top:128px;color:var(--dsw-alias-label-secondary);font:11px/1.25 var(--ds-font-family,system-ui,sans-serif);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}@keyframes dkan-stuck-scan{to{transform:translateX(110%)}}@keyframes dkan-stuck-pulse{to{transform:scale(.55);opacity:.45}}",
|
|
5634
5634
|
// 极光:顶部柔光带呼吸流动(加浓)
|
|
5635
5635
|
".dkan-aurora i{position:absolute;top:-40%;left:-20%;width:70%;height:80%;border-radius:50%;filter:blur(50px);opacity:.32;animation:dkan-aurora ease-in-out infinite alternate;}",
|
|
5636
5636
|
".dkan-aurora i:nth-child(1){background:#4d9fff;}",
|
|
@@ -5671,16 +5671,16 @@ var css2 = [
|
|
|
5671
5671
|
".dkan-fxwrap{position:fixed;inset:0;z-index:9992;pointer-events:none;overflow:hidden;}",
|
|
5672
5672
|
".dkan-fx{position:absolute;}",
|
|
5673
5673
|
// 纸飞机:从点击处向右上飞出淡出(加大加亮)
|
|
5674
|
-
".dkan-fx-plane{color:var(--
|
|
5674
|
+
".dkan-fx-plane{color:var(--dk-accent);font-size:24px;text-shadow:0 0 8px color-mix(in srgb,var(--dk-accent) 70%,transparent);animation:dkan-plane 1.2s var(--ds-ease-in-out) forwards;}",
|
|
5675
5675
|
"@keyframes dkan-plane{0%{opacity:0;transform:translate(0,0) rotate(-20deg) scale(.6)}15%{opacity:1;transform:translate(20px,-14px) rotate(-20deg) scale(1.1)}100%{opacity:0;transform:translate(240px,-160px) rotate(-20deg) scale(1)}}",
|
|
5676
5676
|
// 火花:粒子四散(加大加多散得更开)
|
|
5677
5677
|
".dkan-fx-spark i{position:absolute;width:7px;height:7px;border-radius:50%;box-shadow:0 0 6px currentColor;animation:dkan-spark .9s var(--ds-ease-in-out) forwards;}",
|
|
5678
5678
|
"@keyframes dkan-spark{0%{opacity:1;transform:translate(0,0) scale(1)}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.4)}}",
|
|
5679
5679
|
// 流光:横向扫过(切会话,加高加亮)
|
|
5680
|
-
".dkan-fx-streak{top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent,var(--
|
|
5680
|
+
".dkan-fx-streak{top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent,var(--dk-accent) 50%,#fff);background-size:45% 100%;background-repeat:no-repeat;box-shadow:0 0 12px 2px color-mix(in srgb,var(--dk-accent) 50%,transparent);animation:dkan-streak 1s var(--ds-ease-in-out) forwards;}",
|
|
5681
5681
|
"@keyframes dkan-streak{0%{background-position:-50% 0;opacity:0}20%{opacity:1}100%{background-position:150% 0;opacity:0}}",
|
|
5682
5682
|
// 微光:全屏柔光一闪(切工作目录,加浓)
|
|
5683
|
-
".dkan-fx-flash{inset:0;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--
|
|
5683
|
+
".dkan-fx-flash{inset:0;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--dk-accent) 26%,transparent),transparent 75%);animation:dkan-flash .8s var(--ds-ease-in-out) forwards;}",
|
|
5684
5684
|
"@keyframes dkan-flash{0%{opacity:0}30%{opacity:1}100%{opacity:0}}",
|
|
5685
5685
|
// 光涌:底部向上涌起(任务开始,加高加浓)
|
|
5686
5686
|
".dkan-fx-surge{left:0;right:0;bottom:0;height:42%;background:linear-gradient(0deg,color-mix(in srgb,var(--dsw-alias-state-success-primary,#34d399) 38%,transparent),transparent);animation:dkan-surge 1.2s var(--ds-ease-in-out) forwards;}",
|
|
@@ -5696,16 +5696,16 @@ var css2 = [
|
|
|
5696
5696
|
"@keyframes dkan-rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}",
|
|
5697
5697
|
// 徽标圆点与两种动效(呼吸 / 轨道环)
|
|
5698
5698
|
".dkan-dotwrap{position:relative;width:20px;height:20px;flex:none;display:inline-flex;align-items:center;justify-content:center;}",
|
|
5699
|
-
".dkan-dot{width:12px;height:12px;border-radius:50%;background:var(--dkan-phase,var(--
|
|
5699
|
+
".dkan-dot{width:12px;height:12px;border-radius:50%;background:var(--dkan-phase,var(--dk-accent));box-shadow:0 0 10px color-mix(in srgb,var(--dkan-phase,var(--dk-accent)) 70%,transparent);transition:background .4s var(--ds-ease-in-out),box-shadow .4s var(--ds-ease-in-out);}",
|
|
5700
5700
|
".dkan-breathe .dkan-dot{animation:dkan-breathe calc(2.2s / var(--dkan-speed,1)) ease-in-out infinite;}",
|
|
5701
5701
|
"@keyframes dkan-breathe{0%,100%{transform:scale(1);opacity:.5}50%{transform:scale(1.7);opacity:1}}",
|
|
5702
5702
|
// 呼吸光晕:向外扩散的波纹环,与圆点同频(颜色随阶段)
|
|
5703
|
-
".dkan-halo{position:absolute;inset:0;border-radius:50%;border:2px solid var(--dkan-phase,var(--
|
|
5703
|
+
".dkan-halo{position:absolute;inset:0;border-radius:50%;border:2px solid var(--dkan-phase,var(--dk-accent));animation:dkan-halo calc(2.2s / var(--dkan-speed,1)) ease-out infinite;}",
|
|
5704
5704
|
"@keyframes dkan-halo{0%{transform:scale(.5);opacity:.9}70%{transform:scale(1.5);opacity:.25}100%{transform:scale(1.7);opacity:0}}",
|
|
5705
5705
|
// breathe 模式徽标更醒目:阶段色描边 + 呼吸辉光
|
|
5706
5706
|
".dkan-badge-breathe{border-color:color-mix(in srgb,var(--dkan-phase,#4d9fff) 55%,transparent);animation:dkan-rise .3s var(--ds-ease-in-out),dkan-badge-breathe calc(2.2s / var(--dkan-speed,1)) ease-in-out infinite;}",
|
|
5707
5707
|
"@keyframes dkan-badge-breathe{0%,100%{box-shadow:0 0 6px color-mix(in srgb,var(--dkan-phase,#4d9fff) 22%,transparent),0 6px 24px rgb(0 0 0 / .16)}50%{box-shadow:0 0 18px color-mix(in srgb,var(--dkan-phase,#4d9fff) 55%,transparent),0 6px 24px rgb(0 0 0 / .16)}}",
|
|
5708
|
-
".dkan-ring{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0 68%,var(--
|
|
5708
|
+
".dkan-ring{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 0deg,transparent 0 68%,var(--dk-accent) 92%,#fff);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 2px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 2px),#000 calc(100% - 2px));animation:dkan-spin calc(2.2s / var(--dkan-speed,1)) linear infinite;opacity:.9;}",
|
|
5709
5709
|
"@keyframes dkan-spin{to{transform:rotate(360deg)}}",
|
|
5710
5710
|
// 通知卡片栈(右上角)
|
|
5711
5711
|
".dkan-toasts{position:fixed;top:16px;right:16px;z-index:9995;display:flex;flex-direction:column;gap:8px;width:min(380px,calc(100vw - 32px));}",
|
|
@@ -5735,27 +5735,27 @@ var css2 = [
|
|
|
5735
5735
|
// 模式选择卡(带缩微预览)
|
|
5736
5736
|
".dkan-modes{display:flex;gap:8px;flex-wrap:wrap;}",
|
|
5737
5737
|
".dkan-mode{flex:1;min-width:150px;display:flex;flex-direction:column;gap:6px;padding:10px;border:1px solid var(--dsw-alias-border-l1);border-radius:10px;background:var(--dsw-alias-bg-layer-2);cursor:pointer;font-family:inherit;text-align:left;transition:border-color .15s var(--ds-ease-in-out);}",
|
|
5738
|
-
".dkan-mode:hover{border-color:var(--
|
|
5739
|
-
".dkan-mode.on{border-color:var(--
|
|
5738
|
+
".dkan-mode:hover{border-color:var(--dk-accent);}",
|
|
5739
|
+
".dkan-mode.on{border-color:var(--dk-accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--dk-accent) 40%,transparent);}",
|
|
5740
5740
|
".dkan-mode-name{font-size:12px;font-weight:600;color:var(--dsw-alias-label-primary);display:flex;align-items:center;gap:6px;}",
|
|
5741
|
-
'.dkan-mode.on .dkan-mode-name::after{content:"\u2713";color:var(--
|
|
5741
|
+
'.dkan-mode.on .dkan-mode-name::after{content:"\u2713";color:var(--dk-accent);}',
|
|
5742
5742
|
".dkan-mode-desc{font-size:11px;color:var(--dsw-alias-label-tertiary);line-height:1.5;}",
|
|
5743
|
-
".dkan-robot-controls{display:flex;flex-direction:column;gap:8px;padding:9px 10px;border:1px solid color-mix(in srgb,var(--
|
|
5743
|
+
".dkan-robot-controls{display:flex;flex-direction:column;gap:8px;padding:9px 10px;border:1px solid color-mix(in srgb,var(--dk-accent) 28%,var(--dsw-alias-border-l1));border-radius:9px;background:color-mix(in srgb,var(--dk-accent) 5%,var(--dsw-alias-bg-layer-2));}",
|
|
5744
5744
|
".dkan-robot-controls-head{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--dsw-alias-label-primary);}",
|
|
5745
|
-
".dkan-robot-controls-head strong{font-variant-numeric:tabular-nums;color:var(--
|
|
5745
|
+
".dkan-robot-controls-head strong{font-variant-numeric:tabular-nums;color:var(--dk-accent);}",
|
|
5746
5746
|
".dkan-robot-size-options{display:flex;gap:6px;flex-wrap:wrap;}",
|
|
5747
5747
|
".dkan-robot-size-options button{cursor:pointer;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;padding:3px 10px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;font-size:11px;}",
|
|
5748
|
-
".dkan-robot-size-options button:hover,.dkan-robot-size-options button.on{border-color:var(--
|
|
5748
|
+
".dkan-robot-size-options button:hover,.dkan-robot-size-options button.on{border-color:var(--dk-accent);color:var(--dsw-alias-label-primary);}",
|
|
5749
5749
|
".dkan-robot-slider-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:11px;color:var(--dsw-alias-label-tertiary);}",
|
|
5750
|
-
".dkan-robot-slider-row input{accent-color:var(--
|
|
5750
|
+
".dkan-robot-slider-row input{accent-color:var(--dk-accent);width:min(240px,100%);}",
|
|
5751
5751
|
".dkan-prev{height:30px;border-radius:6px;background:var(--dsw-alias-bg-layer-1);position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;}",
|
|
5752
|
-
".dkan-prev-flow{position:absolute;top:0;left:0;right:0;height:3px;background:color-mix(in srgb,var(--
|
|
5753
|
-
'.dkan-prev-flow::after{content:"";position:absolute;top:0;bottom:0;left:-40%;width:40%;background:linear-gradient(90deg,transparent,var(--
|
|
5752
|
+
".dkan-prev-flow{position:absolute;top:0;left:0;right:0;height:3px;background:color-mix(in srgb,var(--dk-accent) 30%,transparent);}",
|
|
5753
|
+
'.dkan-prev-flow::after{content:"";position:absolute;top:0;bottom:0;left:-40%;width:40%;background:linear-gradient(90deg,transparent,var(--dk-accent));animation:dkan-flow 1.9s linear infinite;}',
|
|
5754
5754
|
".dkan-prev-box{--dkan-speed:1;}",
|
|
5755
|
-
".dkan-prev-orbit{position:absolute;top:3px;left:3px;width:7px;height:7px;border-radius:50%;background:var(--
|
|
5755
|
+
".dkan-prev-orbit{position:absolute;top:3px;left:3px;width:7px;height:7px;border-radius:50%;background:var(--dk-accent);box-shadow:0 0 7px 2px color-mix(in srgb,var(--dk-accent) 55%,transparent);animation:dkan-prev-orbit 3s linear infinite;}",
|
|
5756
5756
|
"@keyframes dkan-prev-orbit{0%{top:3px;left:3px}25%{top:3px;left:calc(100% - 10px)}50%{top:calc(100% - 10px);left:calc(100% - 10px)}75%{top:calc(100% - 10px);left:3px}100%{top:3px;left:3px}}",
|
|
5757
5757
|
// 预览:代码雨(字符列下落)
|
|
5758
|
-
".dkan-prev-matrix i{position:absolute;top:-100%;writing-mode:vertical-rl;font-size:8px;font-family:var(--ds-font-family-code,monospace);color:var(--
|
|
5758
|
+
".dkan-prev-matrix i{position:absolute;top:-100%;writing-mode:vertical-rl;font-size:8px;font-family:var(--ds-font-family-code,monospace);color:var(--dk-accent);opacity:.5;animation:dkan-prev-fall 2.2s linear infinite;}",
|
|
5759
5759
|
".dkan-prev-matrix i:nth-child(1){left:12%;}",
|
|
5760
5760
|
".dkan-prev-matrix i:nth-child(2){left:32%;animation-delay:-.6s;}",
|
|
5761
5761
|
".dkan-prev-matrix i:nth-child(3){left:52%;animation-delay:-1.2s;}",
|
|
@@ -5780,7 +5780,7 @@ var css2 = [
|
|
|
5780
5780
|
".dkan-prev-aurora i:nth-child(2){left:45%;background:#34d399;animation-delay:-1.2s;}",
|
|
5781
5781
|
"@keyframes dkan-prev-aurora{0%{transform:translateX(-10%)}100%{transform:translateX(15%)}}",
|
|
5782
5782
|
// 十种新增模式的缩微预览:复用主体运动语言,但把节点数和振幅压到卡片内。
|
|
5783
|
-
".dkan-prev-new{--dkan-phase:var(--
|
|
5783
|
+
".dkan-prev-new{--dkan-phase:var(--dk-accent)}.dkan-prev-new i{position:absolute;display:block}",
|
|
5784
5784
|
".dkan-prev-nebula i{width:48px;height:48px;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--dkan-phase) 48%,transparent),transparent 70%);animation:dkan-prev-nebula 3s ease-in-out infinite alternate}.dkan-prev-nebula i:nth-child(1){left:2%;top:-60%}.dkan-prev-nebula i:nth-child(2){right:4%;bottom:-65%;background:radial-gradient(circle,color-mix(in srgb,#a855f7 42%,transparent),transparent 70%);animation-delay:-1.4s}.dkan-prev-nebula i:nth-child(n+3){display:none}@keyframes dkan-prev-nebula{to{transform:translateX(24px) scale(1.18)}}",
|
|
5785
5785
|
".dkan-prev-warp i{left:50%;top:50%;width:36px;height:1px;transform-origin:left;background:linear-gradient(90deg,transparent,var(--dkan-phase),#fff);animation:dkan-prev-warp 1.8s linear infinite;opacity:0}.dkan-prev-warp i:nth-child(1){--a:0deg}.dkan-prev-warp i:nth-child(2){--a:45deg;animation-delay:-.2s}.dkan-prev-warp i:nth-child(3){--a:90deg;animation-delay:-.4s}.dkan-prev-warp i:nth-child(4){--a:135deg;animation-delay:-.6s}.dkan-prev-warp i:nth-child(5){--a:180deg;animation-delay:-.8s}.dkan-prev-warp i:nth-child(6){--a:225deg;animation-delay:-1s}.dkan-prev-warp i:nth-child(7){--a:270deg;animation-delay:-1.2s}.dkan-prev-warp i:nth-child(8){--a:315deg;animation-delay:-1.4s}@keyframes dkan-prev-warp{0%{opacity:0;transform:rotate(var(--a)) translateX(2px) scaleX(.1)}35%{opacity:.8}100%{opacity:0;transform:rotate(var(--a)) translateX(40px) scaleX(1.3)}}",
|
|
5786
5786
|
".dkan-prev-radar i{left:50%;top:50%;width:24px;height:24px;margin:-12px;border:1px solid color-mix(in srgb,var(--dkan-phase) 48%,transparent);border-radius:50%;animation:dkan-prev-radar 2.6s ease-out infinite;opacity:0}.dkan-prev-radar i:nth-child(2){animation-delay:-.85s}.dkan-prev-radar i:nth-child(3){animation-delay:-1.7s}.dkan-prev-radar i:nth-child(n+4){display:none}@keyframes dkan-prev-radar{0%{opacity:.8;transform:scale(.2)}100%{opacity:0;transform:scale(1.25)}}",
|
|
@@ -5795,12 +5795,12 @@ var css2 = [
|
|
|
5795
5795
|
// ===== 桌面伙伴:具象人物 + 紧凑双工位(尺寸可调,整卡可拖拽) =====
|
|
5796
5796
|
// 卡片:玻璃拟态;默认停泊右下(dsh 输入卡上方),拖动后位置持久化、可放屏幕任意处
|
|
5797
5797
|
".dkan-botcard{--dkan-bot-scale:1.35;position:fixed;right:20px;bottom:calc(var(--dsh-composer-height,152px) + 20px);z-index:9990;display:flex;flex-direction:column;gap:6px;padding:10px 12px;border-radius:16px;cursor:grab;border:1px solid var(--dsw-alias-border-l1);background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 86%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 12px 36px rgb(0 0 0 / .22);color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:12px;pointer-events:auto;touch-action:none;user-select:none;animation:dkan-rise .3s var(--ds-ease-in-out);}",
|
|
5798
|
-
".dkan-botcard:hover,.dkan-botcard:focus-visible{border-color:var(--
|
|
5798
|
+
".dkan-botcard:hover,.dkan-botcard:focus-visible{border-color:var(--dk-accent);outline:none;}",
|
|
5799
5799
|
".dkan-botcard.dkan-dragging{cursor:grabbing;animation:none;}",
|
|
5800
5800
|
".dkan-botcard .n{color:var(--dsw-alias-label-primary);font-weight:600;}",
|
|
5801
5801
|
".dkan-bot-cap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:18px;}",
|
|
5802
5802
|
".dkan-bot-resize{position:absolute;right:7px;bottom:7px;width:15px;height:15px;padding:0;border:0;border-radius:4px;background:linear-gradient(135deg,transparent 0 42%,var(--dsw-alias-label-tertiary) 44% 51%,transparent 53% 62%,var(--dsw-alias-label-tertiary) 64% 71%,transparent 73%);cursor:nwse-resize;touch-action:none;opacity:.72;}",
|
|
5803
|
-
".dkan-bot-resize:hover,.dkan-bot-resize:focus-visible{opacity:1;outline:1px solid var(--
|
|
5803
|
+
".dkan-bot-resize:hover,.dkan-bot-resize:focus-visible{opacity:1;outline:1px solid var(--dk-accent);outline-offset:1px;}",
|
|
5804
5804
|
// ===== 3D 场景(CSS 长方体拼装:世界层统一 3/4 视角——俯视 + 侧身面向镜头) =====
|
|
5805
5805
|
".dkan-bot-scene{position:relative;width:calc(220px * var(--dkan-bot-scale,1));height:calc(132px * var(--dkan-bot-scale,1));perspective:calc(620px * var(--dkan-bot-scale,1));perspective-origin:55% 18%;--dk3-side:#7c8ba0;--dk3-side-hi:#a9b8ca;--dk3-side-dk:#4c5870;--dk3-screen:#0d1526;--dkan-code-a:#4ade80;--dkan-code-b:#60a5fa;--dkan-code-c:#fbbf24;}",
|
|
5806
5806
|
".dk3-world{position:absolute;left:0;top:0;width:220px;height:132px;transform-style:preserve-3d;transform-origin:top left;transform:scale(var(--dkan-bot-scale,1)) rotateX(-15deg) rotateY(-30deg);}",
|
|
@@ -5965,14 +5965,14 @@ var css2 = [
|
|
|
5965
5965
|
// 音效选择卡(名称 + 播放键;选中态描边)
|
|
5966
5966
|
".dkan-sounds{display:flex;gap:6px;flex-wrap:wrap;}",
|
|
5967
5967
|
".dkan-sound{flex:1;min-width:104px;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:6px 10px;border:1px solid var(--dsw-alias-border-l1);border-radius:8px;background:var(--dsw-alias-bg-layer-2);cursor:pointer;font-family:inherit;transition:border-color .15s var(--ds-ease-in-out);}",
|
|
5968
|
-
".dkan-sound:hover{border-color:var(--
|
|
5969
|
-
".dkan-sound.on{border-color:var(--
|
|
5968
|
+
".dkan-sound:hover{border-color:var(--dk-accent);}",
|
|
5969
|
+
".dkan-sound.on{border-color:var(--dk-accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--dk-accent) 40%,transparent);}",
|
|
5970
5970
|
".dkan-sound-name{font-size:12px;color:var(--dsw-alias-label-primary);display:flex;align-items:center;gap:5px;}",
|
|
5971
|
-
".dkan-sound-cur{color:var(--
|
|
5971
|
+
".dkan-sound-cur{color:var(--dk-accent);font-size:11px;}",
|
|
5972
5972
|
".dkan-sound-play{flex:none;cursor:pointer;color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:1;border-radius:50%;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--dsw-alias-border-l2);}",
|
|
5973
5973
|
".dkan-sound-play:hover{color:var(--dsw-alias-label-primary);border-color:currentColor;}",
|
|
5974
5974
|
".dkan-input{flex:1;min-width:220px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;padding:4px 8px;font-size:12px;font-family:inherit;}",
|
|
5975
|
-
".dkan-input:focus{outline:none;border-color:var(--
|
|
5975
|
+
".dkan-input:focus{outline:none;border-color:var(--dk-accent);}",
|
|
5976
5976
|
".dkan-row-webhook{flex-wrap:nowrap;}",
|
|
5977
5977
|
".dkan-row-webhook .dkan-input{min-width:0;}",
|
|
5978
5978
|
".dkan-btn{cursor:pointer;flex:none;color:var(--dsw-alias-label-primary);background:transparent;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;padding:4px 12px;font-family:inherit;font-size:12px;}",
|
|
@@ -5988,10 +5988,10 @@ var css2 = [
|
|
|
5988
5988
|
".dkan-task-meta{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--dsw-alias-label-tertiary);}",
|
|
5989
5989
|
".dkan-task-err{font-size:11px;color:var(--dsw-alias-state-error-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}",
|
|
5990
5990
|
".dkan-tag{flex:none;font-size:10px;border-radius:999px;padding:0 8px;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);}",
|
|
5991
|
-
".dkan-tag.on{color:var(--
|
|
5991
|
+
".dkan-tag.on{color:var(--dk-accent);border-color:currentColor;}",
|
|
5992
5992
|
".dkan-tag.ok{color:var(--dsw-alias-state-success-primary);border-color:currentColor;}",
|
|
5993
5993
|
".dkan-tag.err{color:var(--dsw-alias-state-error-primary);border-color:currentColor;}",
|
|
5994
|
-
".dkan-tag.warn{color:var(--
|
|
5994
|
+
".dkan-tag.warn{color:var(--dk-warn);border-color:currentColor;}"
|
|
5995
5995
|
].join("\n");
|
|
5996
5996
|
var feature6 = {
|
|
5997
5997
|
id: "animation",
|
|
@@ -6151,11 +6151,16 @@ function rotations(shape) {
|
|
|
6151
6151
|
}
|
|
6152
6152
|
var PIECES = SHAPES.map((s) => ({ color: s.color, rots: rotations(s) }));
|
|
6153
6153
|
var TETRIS_GRID = (() => {
|
|
6154
|
-
const
|
|
6154
|
+
const parts = [];
|
|
6155
6155
|
let k = 0;
|
|
6156
|
-
for (let
|
|
6157
|
-
|
|
6158
|
-
|
|
6156
|
+
for (let j = 0; j < 20; j += 1) {
|
|
6157
|
+
for (let i = 0; i < 10; i += 1) {
|
|
6158
|
+
parts.push(/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { className: "dgame-tetris-pit", x: i * 100 + 7, y: j * 100 + 7, width: 86, height: 86, rx: 10 }, k++));
|
|
6159
|
+
}
|
|
6160
|
+
}
|
|
6161
|
+
for (let i = 1; i < 10; i += 1) parts.push(/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: i * 100, y1: 0, x2: i * 100, y2: 2e3 }, k++));
|
|
6162
|
+
for (let j = 1; j < 20; j += 1) parts.push(/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: 0, y1: j * 100, x2: 1e3, y2: j * 100 }, k++));
|
|
6163
|
+
return parts;
|
|
6159
6164
|
})();
|
|
6160
6165
|
function emptyBoard() {
|
|
6161
6166
|
return Array.from({ length: ROWS }, () => Array(COLS).fill(null));
|
|
@@ -6461,7 +6466,7 @@ function TetrisPreview() {
|
|
|
6461
6466
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dgcov-prev dgcov-prev-tetris", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dgp-tet-grid", children: ROWS3.flatMap((row, r) => row.split("").map((ch, c) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("i", { className: COLORS2[ch] ? "c" + COLORS2[ch] + (isFall(r) ? " fall" : "") : "" }, r + "-" + c))) }) });
|
|
6462
6467
|
}
|
|
6463
6468
|
var tetrisGame = { Game: TetrisGame, Preview: TetrisPreview, css: `
|
|
6464
|
-
.dgame-tetris{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;align-self:center;width:fit-content;max-width:100%;margin-inline:auto;justify-content:center}.dgame-tetris-board{position:relative;flex:none;display:grid;grid-template-columns:repeat(10,1fr);grid-template-rows:repeat(20,1fr);width:min(100%,188px);aspect-ratio:10/20;border:1px solid color-mix(in srgb,rgb(34 211 238) 35%,var(--dsw-alias-border-l1));border-radius:8px;overflow:hidden;outline:none;background:linear-gradient(180deg,#0c1024,#131a3d);padding:0;box-shadow:inset 0 0 30px rgb(0 0 0/.45)}.dgame-tetris-board:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,rgb(34 211 238) 40%,transparent)}.dgame-tetris-cell{display:block;background:transparent;border-radius:2px;margin:1px}.dgame-tetris-nextbox{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);width:60px;height:32px}.dgame-tetris-side{flex:1 1 96px;display:flex;flex-direction:column;gap:9px;min-width:0;max-width:220px;color:var(--dsw-alias-label-tertiary);font-size:11px}.dgame-tetris-side b{color:var(--dsw-alias-label-secondary);font-size:12px}.dgame-tetris-side span{font-size:11px}.dgame-tetris-nextbox .dgame-tetris-cell{margin:1px}.dgame-tetris-keys span{display:block;line-height:1.6;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere}.dgame-tetris-next{display:flex;flex-direction:column;gap:5px;align-items:center}.dgame-tetris-next span{color:var(--dsw-alias-label-secondary)}.dgame-tetris-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.dgame-tetris-lines line{stroke
|
|
6469
|
+
.dgame-tetris{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-start;align-self:center;width:fit-content;max-width:100%;margin-inline:auto;justify-content:center}.dgame-tetris-board{position:relative;flex:none;display:grid;grid-template-columns:repeat(10,1fr);grid-template-rows:repeat(20,1fr);width:min(100%,188px);aspect-ratio:10/20;border:1px solid color-mix(in srgb,rgb(34 211 238) 35%,var(--dsw-alias-border-l1));border-radius:8px;overflow:hidden;outline:none;background:linear-gradient(180deg,#0c1024,#131a3d);padding:0;box-shadow:inset 0 0 30px rgb(0 0 0/.45)}.dgame-tetris-board:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,rgb(34 211 238) 40%,transparent)}.dgame-tetris-cell{position:relative;z-index:1;display:block;background:transparent;border-radius:2px;margin:1px}.dgame-tetris-nextbox{display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(2,1fr);width:60px;height:32px}.dgame-tetris-side{flex:1 1 96px;display:flex;flex-direction:column;gap:9px;min-width:0;max-width:220px;color:var(--dsw-alias-label-tertiary);font-size:11px}.dgame-tetris-side b{color:var(--dsw-alias-label-secondary);font-size:12px}.dgame-tetris-side span{font-size:11px}.dgame-tetris-nextbox .dgame-tetris-cell{margin:1px}.dgame-tetris-keys span{display:block;line-height:1.6;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere}.dgame-tetris-next{display:flex;flex-direction:column;gap:5px;align-items:center}.dgame-tetris-next span{color:var(--dsw-alias-label-secondary)}.dgame-tetris-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.dgame-tetris-lines line{stroke:rgb(96 165 250/.28);stroke-width:3}.dgame-tetris-lines .dgame-tetris-pit{fill:rgb(0 0 0/.42);stroke:rgb(255 255 255/.07);stroke-width:2}@media (max-width:680px){.dgame-tetris{width:100%;gap:8px}.dgame-tetris-board{width:min(100%,170px)}}
|
|
6465
6470
|
` };
|
|
6466
6471
|
|
|
6467
6472
|
// features/games/games/sokoban.jsx
|
|
@@ -7314,6 +7319,18 @@ var XIANGQI_LINES = (() => {
|
|
|
7314
7319
|
}
|
|
7315
7320
|
return parts;
|
|
7316
7321
|
})();
|
|
7322
|
+
var CN_NUMS = ["\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D", "\u4E03", "\u516B", "\u4E5D"];
|
|
7323
|
+
function moveNotation(board, fr, fc, tr, tc) {
|
|
7324
|
+
const p = board[fr][fc];
|
|
7325
|
+
if (!p) return "";
|
|
7326
|
+
const red = p.c === "r";
|
|
7327
|
+
const num = (n) => red ? CN_NUMS[n - 1] : String(n);
|
|
7328
|
+
const file = (c) => red ? 9 - c : c + 1;
|
|
7329
|
+
const forward = red ? tr < fr : tr > fr;
|
|
7330
|
+
const verb = fr === tr ? "\u5E73" : forward ? "\u8FDB" : "\u9000";
|
|
7331
|
+
const to = fr === tr || p.t === "h" || p.t === "e" || p.t === "a" ? file(tc) : Math.abs(tr - fr);
|
|
7332
|
+
return pieceChar(p) + num(file(fc)) + verb + num(to);
|
|
7333
|
+
}
|
|
7317
7334
|
function XiangqiGame(props) {
|
|
7318
7335
|
const [board, setBoard] = (0, import_react13.useState)(initialBoard);
|
|
7319
7336
|
const [turn, setTurn] = (0, import_react13.useState)("r");
|
|
@@ -7322,6 +7339,9 @@ function XiangqiGame(props) {
|
|
|
7322
7339
|
const [over, setOver] = (0, import_react13.useState)(null);
|
|
7323
7340
|
const [check, setCheck] = (0, import_react13.useState)(false);
|
|
7324
7341
|
const [last, setLast] = (0, import_react13.useState)(null);
|
|
7342
|
+
const [lastMove, setLastMove] = (0, import_react13.useState)(null);
|
|
7343
|
+
const [moveLog, setMoveLog] = (0, import_react13.useState)([]);
|
|
7344
|
+
const [moving, setMoving] = (0, import_react13.useState)(null);
|
|
7325
7345
|
const [thinking, setThinking] = (0, import_react13.useState)(false);
|
|
7326
7346
|
const [history, setHistory] = (0, import_react13.useState)([]);
|
|
7327
7347
|
const [repKeys, setRepKeys] = (0, import_react13.useState)(() => [posKey(initialBoard())]);
|
|
@@ -7337,7 +7357,43 @@ function XiangqiGame(props) {
|
|
|
7337
7357
|
thinkingRef.current = thinking;
|
|
7338
7358
|
const historyRef = (0, import_react13.useRef)(history);
|
|
7339
7359
|
historyRef.current = history;
|
|
7360
|
+
const movingRef = (0, import_react13.useRef)(false);
|
|
7361
|
+
const pendingRef = (0, import_react13.useRef)(null);
|
|
7362
|
+
const animTimerRef = (0, import_react13.useRef)(null);
|
|
7363
|
+
const animateMove = (0, import_react13.useCallback)((b, fr, fc, tr, tc, after) => {
|
|
7364
|
+
const piece = boardRef.current[fr][fc];
|
|
7365
|
+
const capture = !!boardRef.current[tr][tc];
|
|
7366
|
+
pendingRef.current = { board: b, after };
|
|
7367
|
+
movingRef.current = true;
|
|
7368
|
+
setSel(null);
|
|
7369
|
+
setTargets([]);
|
|
7370
|
+
setMoving({ fr, fc, tr, tc, piece, capture });
|
|
7371
|
+
playSfx(capture ? "capture" : "step");
|
|
7372
|
+
if (animTimerRef.current) clearTimeout(animTimerRef.current);
|
|
7373
|
+
animTimerRef.current = setTimeout(() => {
|
|
7374
|
+
animTimerRef.current = null;
|
|
7375
|
+
const pend = pendingRef.current;
|
|
7376
|
+
pendingRef.current = null;
|
|
7377
|
+
movingRef.current = false;
|
|
7378
|
+
setMoving(null);
|
|
7379
|
+
if (pend) {
|
|
7380
|
+
const text = moveNotation(boardRef.current, fr, fc, tr, tc);
|
|
7381
|
+
boardRef.current = pend.board;
|
|
7382
|
+
setBoard(pend.board);
|
|
7383
|
+
setLastMove({ fr, fc, tr, tc, text });
|
|
7384
|
+
setMoveLog((log) => log.concat({ side: piece.c, text }));
|
|
7385
|
+
setLast([tr, tc]);
|
|
7386
|
+
if (pend.after) pend.after();
|
|
7387
|
+
}
|
|
7388
|
+
}, 260);
|
|
7389
|
+
}, []);
|
|
7340
7390
|
const restart = (0, import_react13.useCallback)(() => {
|
|
7391
|
+
if (animTimerRef.current) {
|
|
7392
|
+
clearTimeout(animTimerRef.current);
|
|
7393
|
+
animTimerRef.current = null;
|
|
7394
|
+
}
|
|
7395
|
+
pendingRef.current = null;
|
|
7396
|
+
movingRef.current = false;
|
|
7341
7397
|
const b = initialBoard();
|
|
7342
7398
|
boardRef.current = b;
|
|
7343
7399
|
setBoard(b);
|
|
@@ -7349,10 +7405,13 @@ function XiangqiGame(props) {
|
|
|
7349
7405
|
setLast(null);
|
|
7350
7406
|
setThinking(false);
|
|
7351
7407
|
setHistory([]);
|
|
7408
|
+
setLastMove(null);
|
|
7409
|
+
setMoveLog([]);
|
|
7410
|
+
setMoving(null);
|
|
7352
7411
|
setRepKeys([posKey(b)]);
|
|
7353
7412
|
}, []);
|
|
7354
7413
|
const undo2 = (0, import_react13.useCallback)(() => {
|
|
7355
|
-
if (thinkingRef.current || overRef.current || turnRef.current !== "r") return;
|
|
7414
|
+
if (thinkingRef.current || overRef.current || turnRef.current !== "r" || movingRef.current) return;
|
|
7356
7415
|
const h = historyRef.current;
|
|
7357
7416
|
if (h.length < 2) return;
|
|
7358
7417
|
const hist = h.slice(0, -2);
|
|
@@ -7363,31 +7422,28 @@ function XiangqiGame(props) {
|
|
|
7363
7422
|
setSel(null);
|
|
7364
7423
|
setTargets([]);
|
|
7365
7424
|
setLast(null);
|
|
7425
|
+
setLastMove(null);
|
|
7426
|
+
setMoveLog((prevLog) => prevLog.slice(0, -2));
|
|
7366
7427
|
setOver(null);
|
|
7367
7428
|
setCheck(inCheck(b, "r"));
|
|
7368
7429
|
setRepKeys(hist.map(posKey).concat(posKey(b)));
|
|
7369
7430
|
}, []);
|
|
7370
7431
|
const moveRed = (0, import_react13.useCallback)((tr, tc) => {
|
|
7371
|
-
if (turnRef.current !== "r" || overRef.current || !sel) return;
|
|
7432
|
+
if (turnRef.current !== "r" || overRef.current || !sel || movingRef.current) return;
|
|
7372
7433
|
const fr = sel[0], fc = sel[1];
|
|
7373
|
-
if (boardRef.current[tr][tc]) playSfx("capture");
|
|
7374
|
-
else playSfx("step");
|
|
7375
7434
|
const nb = applyMove(boardRef.current, fr, fc, tr, tc);
|
|
7376
7435
|
setHistory((h) => [...h, boardRef.current]);
|
|
7377
|
-
boardRef.current = nb;
|
|
7378
7436
|
pushKey(nb);
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
} else setCheck(inCheck(nb, "b"));
|
|
7388
|
-
}, [sel, pushKey]);
|
|
7437
|
+
animateMove(nb, fr, fc, tr, tc, () => {
|
|
7438
|
+
setTurn("b");
|
|
7439
|
+
if (!hasLegalMoves(nb, "b")) {
|
|
7440
|
+
setOver("r");
|
|
7441
|
+
setCheck(false);
|
|
7442
|
+
} else setCheck(inCheck(nb, "b"));
|
|
7443
|
+
});
|
|
7444
|
+
}, [sel, pushKey, animateMove]);
|
|
7389
7445
|
const select = (0, import_react13.useCallback)((r, c) => {
|
|
7390
|
-
if (overRef.current || turnRef.current !== "r" || thinkingRef.current) return;
|
|
7446
|
+
if (overRef.current || turnRef.current !== "r" || thinkingRef.current || movingRef.current) return;
|
|
7391
7447
|
const p = boardRef.current[r][c];
|
|
7392
7448
|
if (p && p.c === "r") {
|
|
7393
7449
|
setSel([r, c]);
|
|
@@ -7403,32 +7459,29 @@ function XiangqiGame(props) {
|
|
|
7403
7459
|
setTargets([]);
|
|
7404
7460
|
}, [sel, targets, moveRed]);
|
|
7405
7461
|
(0, import_react13.useEffect)(() => {
|
|
7406
|
-
if (turn !== "b" || over || props.paused) return;
|
|
7462
|
+
if (turn !== "b" || over || props.paused || movingRef.current) return;
|
|
7407
7463
|
const t = setTimeout(() => {
|
|
7408
7464
|
const seenCounts = /* @__PURE__ */ new Map();
|
|
7409
7465
|
for (const k of repKeys) seenCounts.set(k, (seenCounts.get(k) || 0) + 1);
|
|
7410
7466
|
const mv = bestMove(boardRef.current, "b", 3, seenCounts);
|
|
7411
7467
|
if (mv) {
|
|
7412
7468
|
const [fr, fc, tr, tc] = mv;
|
|
7413
|
-
if (boardRef.current[tr][tc]) playSfx("capture");
|
|
7414
|
-
else playSfx("step");
|
|
7415
7469
|
const nb = applyMove(boardRef.current, fr, fc, tr, tc);
|
|
7416
7470
|
setHistory((h) => [...h, boardRef.current]);
|
|
7417
|
-
boardRef.current = nb;
|
|
7418
7471
|
pushKey(nb);
|
|
7419
|
-
|
|
7420
|
-
|
|
7421
|
-
|
|
7422
|
-
|
|
7423
|
-
|
|
7424
|
-
setCheck(
|
|
7425
|
-
}
|
|
7472
|
+
animateMove(nb, fr, fc, tr, tc, () => {
|
|
7473
|
+
setTurn("r");
|
|
7474
|
+
if (!hasLegalMoves(nb, "r")) {
|
|
7475
|
+
setOver("b");
|
|
7476
|
+
setCheck(false);
|
|
7477
|
+
} else setCheck(inCheck(nb, "r"));
|
|
7478
|
+
});
|
|
7426
7479
|
} else setOver("r");
|
|
7427
7480
|
setThinking(false);
|
|
7428
|
-
},
|
|
7481
|
+
}, 420);
|
|
7429
7482
|
setThinking(true);
|
|
7430
7483
|
return () => clearTimeout(t);
|
|
7431
|
-
}, [turn, over, props.paused, repKeys, pushKey]);
|
|
7484
|
+
}, [turn, over, props.paused, repKeys, pushKey, animateMove]);
|
|
7432
7485
|
const onKeyDown = (0, import_react13.useCallback)((event) => {
|
|
7433
7486
|
if (event.key.toLowerCase() === "r") {
|
|
7434
7487
|
event.preventDefault();
|
|
@@ -7439,7 +7492,7 @@ function XiangqiGame(props) {
|
|
|
7439
7492
|
}
|
|
7440
7493
|
}, [restart, undo2]);
|
|
7441
7494
|
useGameControls(stageRef, props.paused, onKeyDown);
|
|
7442
|
-
const status = over === "r" ? "\u7EA2\u65B9\u80DC \xB7 \u606D\u559C" : over === "b" ? "\u9ED1\u65B9\u80DC \xB7 AI \u8D62" : thinking ? "AI \u601D\u8003\u4E2D\u2026" : check ? "\u5C06\u519B\uFF01" : turn === "r" ? "\u8F6E\u5230\u4F60\uFF08\u7EA2\u65B9\uFF09" : "\u8F6E\u5230 AI\uFF08\u9ED1\u65B9\uFF09";
|
|
7495
|
+
const status = over === "r" ? "\u7EA2\u65B9\u80DC \xB7 \u606D\u559C" : over === "b" ? "\u9ED1\u65B9\u80DC \xB7 AI \u8D62" : moving ? moving.piece.c === "r" ? "\u7EA2\u65B9\u8D70\u5B50\u2026" : "AI \u8D70\u5B50\u2026" : thinking ? "AI \u601D\u8003\u4E2D\u2026" : check ? "\u5C06\u519B\uFF01" : turn === "r" ? "\u8F6E\u5230\u4F60\uFF08\u7EA2\u65B9\uFF09" : "\u8F6E\u5230 AI\uFF08\u9ED1\u65B9\uFF09";
|
|
7443
7496
|
const prevCheck = (0, import_react13.useRef)(false);
|
|
7444
7497
|
(0, import_react13.useEffect)(() => {
|
|
7445
7498
|
if (over === "r") playSfx("win");
|
|
@@ -7447,6 +7500,9 @@ function XiangqiGame(props) {
|
|
|
7447
7500
|
else if (!thinking && check && !prevCheck.current) playSfx("check");
|
|
7448
7501
|
prevCheck.current = !thinking && check;
|
|
7449
7502
|
}, [check, thinking, over]);
|
|
7503
|
+
(0, import_react13.useEffect)(() => () => {
|
|
7504
|
+
if (animTimerRef.current) clearTimeout(animTimerRef.current);
|
|
7505
|
+
}, []);
|
|
7450
7506
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: "dgame-game", "aria-label": "\u8C61\u68CB", children: [
|
|
7451
7507
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "dgame-game-head", children: [
|
|
7452
7508
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { children: [
|
|
@@ -7467,26 +7523,47 @@ function XiangqiGame(props) {
|
|
|
7467
7523
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("text", { className: "dgame-xiangqi-rivertext", x: 670, y: 505, children: "\u6F22 \u754C" })
|
|
7468
7524
|
] }),
|
|
7469
7525
|
board.map((row, r) => row.map((p, c) => {
|
|
7526
|
+
const mv = moving;
|
|
7527
|
+
const isFlyFrom = mv && mv.fr === r && mv.fc === c;
|
|
7528
|
+
const isDying = mv && mv.capture && mv.tr === r && mv.tc === c;
|
|
7470
7529
|
const isSel = sel && sel[0] === r && sel[1] === c;
|
|
7471
7530
|
const isTargetMark = targets.some(([tr, tc]) => tr === r && tc === c);
|
|
7531
|
+
const isLastMoveFrom = lastMove && lastMove.fr === r && lastMove.fc === c;
|
|
7532
|
+
const isLand = !mv && lastMove && lastMove.tr === r && lastMove.tc === c;
|
|
7472
7533
|
const isLast = last && last[0] === r && last[1] === c;
|
|
7473
7534
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
7474
7535
|
"button",
|
|
7475
7536
|
{
|
|
7476
7537
|
type: "button",
|
|
7477
7538
|
role: "gridcell",
|
|
7478
|
-
className: "dgame-xiangqi-cell" + (isSel ? " sel" : "") + (isTargetMark ? " target" : "") + (isLast ? " last" : ""),
|
|
7539
|
+
className: "dgame-xiangqi-cell" + (isSel ? " sel" : "") + (isTargetMark ? " target" : "") + (isLastMoveFrom ? " from" : "") + (isLand ? " land" : "") + (isLast ? " last" : ""),
|
|
7479
7540
|
"aria-label": "\u7B2C" + (r + 1) + "\u884C\u7B2C" + (c + 1) + "\u5217" + (p ? pieceChar(p) : " \u7A7A"),
|
|
7480
7541
|
onClick: () => {
|
|
7481
7542
|
focusStage(stageRef);
|
|
7482
7543
|
select(r, c);
|
|
7483
7544
|
},
|
|
7484
|
-
children: p ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dgame-xiangqi-pc " + p.c, children: pieceChar(p) }) : isTargetMark ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dgame-xiangqi-dot", "aria-hidden": "true" }) : null
|
|
7545
|
+
children: p && !isFlyFrom ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dgame-xiangqi-pc " + p.c + (isDying ? " dying" : ""), children: pieceChar(p) }) : !p && isTargetMark ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dgame-xiangqi-dot", "aria-hidden": "true" }) : null
|
|
7485
7546
|
},
|
|
7486
7547
|
r + "-" + c
|
|
7487
7548
|
);
|
|
7488
|
-
}))
|
|
7549
|
+
})),
|
|
7550
|
+
moving ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
7551
|
+
"span",
|
|
7552
|
+
{
|
|
7553
|
+
className: "dgame-xiangqi-pc dgame-xiangqi-fly " + moving.piece.c,
|
|
7554
|
+
style: {
|
|
7555
|
+
"--fx0": (moving.fc + 0.5) / 9,
|
|
7556
|
+
"--fy0": (moving.fr + 0.5) / 10,
|
|
7557
|
+
"--fx1": (moving.tc + 0.5) / 9,
|
|
7558
|
+
"--fy1": (moving.tr + 0.5) / 10
|
|
7559
|
+
},
|
|
7560
|
+
"aria-hidden": "true",
|
|
7561
|
+
children: pieceChar(moving.piece)
|
|
7562
|
+
},
|
|
7563
|
+
moving.fr + "-" + moving.fc + "-" + moving.tr + "-" + moving.tc + "-" + moving.piece.c
|
|
7564
|
+
) : null
|
|
7489
7565
|
] }),
|
|
7566
|
+
moveLog.length ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "dgame-xiangqi-log", role: "status", "aria-live": "polite", children: moveLog.slice(-4).map((m, i) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: m.side, children: m.text }, moveLog.length - 4 + i)) }) : null,
|
|
7490
7567
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "dgame-controls", children: [
|
|
7491
7568
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("button", { type: "button", onClick: undo2, children: "\u64A4\u9500" }),
|
|
7492
7569
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { children: [
|
|
@@ -7524,7 +7601,7 @@ function XiangqiPreview() {
|
|
|
7524
7601
|
] }) });
|
|
7525
7602
|
}
|
|
7526
7603
|
var xiangqiGame = { Game: XiangqiGame, Preview: XiangqiPreview, css: `
|
|
7527
|
-
.dgame-xiangqi-board{position:relative;display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(10,1fr);align-self:center;width:min(100%,min(90vw,340px));aspect-ratio:9/10;padding:13px;border-radius:12px;border:1px solid color-mix(in srgb,#7c4f16 65%,transparent);box-shadow:0 12px 32px rgb(0 0 0/.5),inset 0 1px 0 rgba(255,236,200,.55),inset 0 -3px 9px rgba(90,50,10,.35),inset 3px 0 8px rgba(255,224,170,.28),inset -3px 0 8px rgba(120,70,20,.25);outline:none;background:repeating-linear-gradient(94deg,rgba(124,79,22,.05) 0 2px,transparent 2px 11px),repeating-linear-gradient(87deg,rgba(255,238,196,.05) 0 2px,transparent 2px 14px),radial-gradient(130% 105% at 26% 8%,#f0cd86,#ddb067 48%,#cb9a51 78%,#bb8844)}.dgame-xiangqi-lines{position:absolute;inset:13px;pointer-events:none}.dgame-xiangqi-lines line,.dgame-xiangqi-lines path{stroke:#66431a;stroke-width:3.4;fill:none;stroke-linecap:square}.dgame-xiangqi-lines .dgame-xiangqi-mark{stroke-width:2.6}.dgame-xiangqi-rivertext{fill:rgba(102,67,26,.7);font-family:KaiTi,"Kaiti SC","STKaiti","FangSong",serif;font-size:46px;letter-spacing:7px;text-anchor:middle;dominant-baseline:central}.dgame-xiangqi-board:focus-visible{box-shadow:0 0 0 3px rgba(0,0,0,.25)}.dgame-xiangqi-cell{position:relative;z-index:1;background:transparent;border:none;cursor:pointer;padding:0;margin:0;outline:none;display:grid;place-items:center;min-width:0;min-height:0}.dgame-xiangqi-cell.target .dgame-xiangqi-dot{width:12px;height:12px;border-radius:50%;background:rgba(34,211,238,.6);box-shadow:0 0 10px rgba(34,211,238,.65),0 0 0 2px rgba(255,255,255,.28)}.dgame-xiangqi-cell.target .dgame-xiangqi-pc{box-shadow:0 0 0 2px rgba(248,113,113,.85),0 0 10px rgba(248,113,113,.5),0 2px 4px rgb(0 0 0/.4),inset 0 0 0 1.5px rgba(96,62,18,.5),inset 0 1px 2px rgba(255,255,255,.95),inset 0 -2px 3px rgba(120,80,20,.4)}.dgame-xiangqi-cell.sel .dgame-xiangqi-pc::before{content:'';position:absolute;inset:-3px;border-radius:50%;border:2.5px solid rgba(251,191,36,.95);box-shadow:0 0 12px rgba(251,191,36,.6)}.dgame-xiangqi-cell.last .dgame-xiangqi-pc::after{content:'';position:absolute;right:5%;bottom:5%;width:5px;height:5px;border-radius:50%;background:#ef4444;box-shadow:0 0 4px rgba(239,68,68,.8)}.dgame-xiangqi-pc{position:relative;display:grid;place-items:center;z-index:1;width:min(80%,30px);aspect-ratio:1/1;border-radius:50%;box-sizing:border-box;font-family:KaiTi,"Kaiti SC","STKaiti","FangSong","SimSun",serif;font-size:clamp(12px,1.4vw,15px);font-weight:700;line-height:1;background:radial-gradient(circle at 34% 28%,#fff3d4,#eedaa6 46%,#d8b675 72%,#bd9650);box-shadow:0 2px 4px rgb(0 0 0/.45),inset 0 0 0 1.5px rgba(96,62,18,.5),inset 0 1px 2px rgba(255,255,255,.95),inset 0 -2px 3px rgba(120,80,20,.4)}.dgame-xiangqi-pc.r{color:#b91c1c;text-shadow:0 1px 0 rgba(255,255,255,.5)}.dgame-xiangqi-
|
|
7604
|
+
.dgame-xiangqi-board{position:relative;display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(10,1fr);align-self:center;width:min(100%,min(90vw,340px));aspect-ratio:9/10;padding:13px;border-radius:12px;border:1px solid color-mix(in srgb,#7c4f16 65%,transparent);box-shadow:0 12px 32px rgb(0 0 0/.5),inset 0 1px 0 rgba(255,236,200,.55),inset 0 -3px 9px rgba(90,50,10,.35),inset 3px 0 8px rgba(255,224,170,.28),inset -3px 0 8px rgba(120,70,20,.25);outline:none;background:repeating-linear-gradient(94deg,rgba(124,79,22,.05) 0 2px,transparent 2px 11px),repeating-linear-gradient(87deg,rgba(255,238,196,.05) 0 2px,transparent 2px 14px),radial-gradient(130% 105% at 26% 8%,#f0cd86,#ddb067 48%,#cb9a51 78%,#bb8844)}.dgame-xiangqi-lines{position:absolute;inset:13px;pointer-events:none}.dgame-xiangqi-lines line,.dgame-xiangqi-lines path,.dgame-xiangqi-lines rect{stroke:#66431a;stroke-width:3.4;fill:none;stroke-linecap:square}.dgame-xiangqi-lines rect{stroke-width:7}.dgame-xiangqi-lines .dgame-xiangqi-mark{stroke-width:2.6}.dgame-xiangqi-rivertext{fill:rgba(102,67,26,.7);font-family:KaiTi,"Kaiti SC","STKaiti","FangSong",serif;font-size:46px;letter-spacing:7px;text-anchor:middle;dominant-baseline:central}.dgame-xiangqi-board:focus-visible{box-shadow:0 0 0 3px rgba(0,0,0,.25)}.dgame-xiangqi-cell{position:relative;z-index:1;background:transparent;border:none;cursor:pointer;padding:0;margin:0;outline:none;display:grid;place-items:center;min-width:0;min-height:0}.dgame-xiangqi-cell.target .dgame-xiangqi-dot{width:12px;height:12px;border-radius:50%;background:rgba(34,211,238,.6);box-shadow:0 0 10px rgba(34,211,238,.65),0 0 0 2px rgba(255,255,255,.28)}.dgame-xiangqi-cell.target .dgame-xiangqi-pc{box-shadow:0 0 0 2px rgba(248,113,113,.85),0 0 10px rgba(248,113,113,.5),0 2px 4px rgb(0 0 0/.4),inset 0 0 0 1.5px rgba(96,62,18,.5),inset 0 1px 2px rgba(255,255,255,.95),inset 0 -2px 3px rgba(120,80,20,.4)}.dgame-xiangqi-cell.sel .dgame-xiangqi-pc::before{content:'';position:absolute;inset:-3px;border-radius:50%;border:2.5px solid rgba(251,191,36,.95);box-shadow:0 0 12px rgba(251,191,36,.6)}.dgame-xiangqi-cell.from::before{content:'';position:absolute;inset:50% auto auto 50%;width:34%;height:34%;transform:translate(-50%,-50%);border-radius:50%;border:2.5px dashed rgba(102,67,26,.75);pointer-events:none}.dgame-xiangqi-cell.land .dgame-xiangqi-pc{animation:dgame-xq-land .28s cubic-bezier(.2,.85,.3,1.25)}.dgame-xiangqi-cell.last .dgame-xiangqi-pc::after{content:'';position:absolute;right:5%;bottom:5%;width:5px;height:5px;border-radius:50%;background:#ef4444;box-shadow:0 0 4px rgba(239,68,68,.8)}.dgame-xiangqi-pc{position:relative;display:grid;place-items:center;z-index:1;width:min(80%,30px);aspect-ratio:1/1;border-radius:50%;box-sizing:border-box;font-family:KaiTi,"Kaiti SC","STKaiti","FangSong","SimSun",serif;font-size:clamp(12px,1.4vw,15px);font-weight:700;line-height:1;background:radial-gradient(circle at 34% 28%,#fff3d4,#eedaa6 46%,#d8b675 72%,#bd9650);box-shadow:0 2px 4px rgb(0 0 0/.45),inset 0 0 0 1.5px rgba(96,62,18,.5),inset 0 1px 2px rgba(255,255,255,.95),inset 0 -2px 3px rgba(120,80,20,.4)}.dgame-xiangqi-pc.dying{animation:dgame-xq-die .26s ease forwards}.dgame-xiangqi-fly{position:absolute;z-index:5;width:calc((100% - 26px)*.0889);aspect-ratio:1/1;border-radius:50%;display:grid;place-items:center;box-sizing:border-box;font-family:KaiTi,"Kaiti SC","STKaiti","FangSong","SimSun",serif;font-size:clamp(12px,1.4vw,15px);font-weight:700;line-height:1;pointer-events:none;background:radial-gradient(circle at 34% 28%,#fff3d4,#eedaa6 46%,#d8b675 72%,#bd9650);box-shadow:0 6px 14px rgb(0 0 0/.5),0 0 0 1.5px rgba(96,62,18,.35),inset 0 0 0 1.5px rgba(96,62,18,.5),inset 0 1px 2px rgba(255,255,255,.95),inset 0 -2px 3px rgba(120,80,20,.4);animation:dgame-xq-hop .26s cubic-bezier(.3,.7,.4,1) forwards}.dgame-xiangqi-fly.r{color:#b91c1c;text-shadow:0 1px 0 rgba(255,255,255,.5)}.dgame-xiangqi-fly.b{color:#1f2937;text-shadow:0 1px 0 rgba(255,255,255,.35)}@keyframes dgame-xq-hop{0%{left:calc(13px + var(--fx0)*(100% - 26px));top:calc(13px + var(--fy0)*(100% - 26px));transform:translate(-50%,-50%) scale(.9);opacity:.85}55%{transform:translate(-50%,-64%) scale(1.16);opacity:1}100%{left:calc(13px + var(--fx1)*(100% - 26px));top:calc(13px + var(--fy1)*(100% - 26px));transform:translate(-50%,-50%) scale(1)}}@keyframes dgame-xq-land{0%{transform:scale(1.18)}100%{transform:scale(1)}}@keyframes dgame-xq-die{to{opacity:0;transform:scale(.55)}}.dgame-xiangqi-log{display:flex;flex-wrap:wrap;justify-content:center;gap:5px 12px;align-self:center;min-height:22px;color:var(--dsw-alias-label-secondary);font-family:KaiTi,"Kaiti SC","STKaiti","FangSong",serif;font-size:13px}.dgame-xiangqi-log span{opacity:.65}.dgame-xiangqi-log span:last-child{opacity:1;font-weight:700}.dgame-xiangqi-log .r{color:#c03434}.dgame-xiangqi-log .b{color:var(--dsw-alias-label-primary)}
|
|
7528
7605
|
` };
|
|
7529
7606
|
|
|
7530
7607
|
// features/games/games/snake.jsx
|
|
@@ -7858,7 +7935,7 @@ function BreakoutGame(props) {
|
|
|
7858
7935
|
if (keys.current.right) g.paddle.x += 5.5;
|
|
7859
7936
|
g.paddle.x = Math.max(0, Math.min(W - PADDLE_W, g.paddle.x));
|
|
7860
7937
|
const b = g.ball;
|
|
7861
|
-
if (!
|
|
7938
|
+
if (!g.launched) {
|
|
7862
7939
|
b.x = g.paddle.x + PADDLE_W / 2;
|
|
7863
7940
|
b.y = g.paddle.y - BALL_R - 1;
|
|
7864
7941
|
} else {
|
|
@@ -7985,7 +8062,10 @@ function BreakoutGame(props) {
|
|
|
7985
8062
|
] })
|
|
7986
8063
|
] }),
|
|
7987
8064
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "dgame-breakout", children: [
|
|
7988
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("canvas", { ref: canvasRef, width: W, height: H, tabIndex: 0, onKeyDown, onKeyUp, onPointerMove, onClick: () =>
|
|
8065
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("canvas", { ref: canvasRef, width: W, height: H, tabIndex: 0, onKeyDown, onKeyUp, onPointerMove, onClick: (e) => {
|
|
8066
|
+
focusStage(canvasRef);
|
|
8067
|
+
launchBall();
|
|
8068
|
+
}, className: "dgame-breakout-canvas", "aria-label": "\u6253\u7816\u5757\u6E38\u620F\u533A\u57DF\uFF0C\u5DE6\u53F3\u65B9\u5411\u952E\u6216\u9F20\u6807\u79FB\u52A8\u6321\u677F\uFF0C\u7A7A\u683C\u6216\u70B9\u51FB\u53D1\u7403" }),
|
|
7989
8069
|
status === "win" ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "dgame-over", children: [
|
|
7990
8070
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("strong", { children: [
|
|
7991
8071
|
"\u5168\u6D88\uFF01\u8FDB\u5165\u7B2C ",
|
|
@@ -8019,7 +8099,7 @@ function BreakoutGame(props) {
|
|
|
8019
8099
|
keys.current.left = false;
|
|
8020
8100
|
game.current && (game.current.paddle.x = Math.max(0, game.current.paddle.x - 12));
|
|
8021
8101
|
}, children: "\u2190 \u5DE6\u79FB" }),
|
|
8022
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: "\u2190/\u2192 \u6216\u9F20\u6807\u79FB\u52A8 \xB7 \u7A7A\u683C\u53D1\u7403" }),
|
|
8102
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: "\u2190/\u2192 \u6216\u9F20\u6807\u79FB\u52A8 \xB7 \u7A7A\u683C/\u70B9\u51FB\u53D1\u7403" }),
|
|
8023
8103
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("button", { type: "button", "aria-label": "\u5411\u53F3\u79FB\u52A8", onClick: () => {
|
|
8024
8104
|
keys.current.right = false;
|
|
8025
8105
|
game.current && (game.current.paddle.x = Math.min(W - PADDLE_W, game.current.paddle.x + 12));
|
|
@@ -8083,7 +8163,7 @@ function RacerGame(props) {
|
|
|
8083
8163
|
const reset = (0, import_react16.useCallback)(() => {
|
|
8084
8164
|
game.current = {
|
|
8085
8165
|
stars: Array.from({ length: 50 }, () => ({ x: Math.random() * W2, y: Math.random() * H2, a: 0.2 + Math.random() * 0.5 })),
|
|
8086
|
-
player: { x: laneX(1), y: H2 - CAR_H - 16 },
|
|
8166
|
+
player: { x: laneX(1), y: H2 - CAR_H - 16, w: CAR_W, h: CAR_H },
|
|
8087
8167
|
enemies: [],
|
|
8088
8168
|
coins: [],
|
|
8089
8169
|
dist: 0,
|
|
@@ -8955,7 +9035,7 @@ var GAMES = [
|
|
|
8955
9035
|
cat: "classic",
|
|
8956
9036
|
accent: "#38bdf8",
|
|
8957
9037
|
desc: "\u79FB\u52A8\u6321\u677F\u53CD\u5F39\u5C0F\u7403\uFF0C\u51FB\u788E\u5168\u90E8\u7816\u5757\uFF1B\u7403\u6389\u5230\u5E95\u90E8\u4E22\u4E00\u6761\u547D\u3002",
|
|
8958
|
-
tip: "\u2190/\u2192 \u6216\u9F20\u6807\u79FB\u52A8 \xB7 \u7A7A\u683C\u53D1\u7403",
|
|
9038
|
+
tip: "\u2190/\u2192 \u6216\u9F20\u6807\u79FB\u52A8 \xB7 \u7A7A\u683C/\u70B9\u51FB\u53D1\u7403",
|
|
8959
9039
|
Game: breakoutGame.Game,
|
|
8960
9040
|
Preview: breakoutGame.Preview
|
|
8961
9041
|
},
|
|
@@ -9406,12 +9486,12 @@ function GamesHomeStat() {
|
|
|
9406
9486
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { children: "\u5341\u6B3E\u6D6E\u52A8\u7A97\u53E3\u5C0F\u6E38\u620F \xB7 \u4E94\u5B50\u68CB/\u8C61\u68CB/\u4FC4\u7F57\u65AF\u65B9\u5757/\u63A8\u7BB1\u5B50\u2026\u4EFB\u52A1\u7B49\u5F85\u4E0D\u65E0\u804A" });
|
|
9407
9487
|
}
|
|
9408
9488
|
var baseCss = `
|
|
9409
|
-
.dgame{--dgame-accent
|
|
9489
|
+
.dgame{--dgame-accent:var(--dk-games-accent,#7c3aed);--dgame-accent-soft:color-mix(in srgb,var(--dgame-accent) 16%,transparent);display:flex;flex-direction:column;gap:14px;max-width:760px;color:var(--dsw-alias-label-primary);font-size:13px;line-height:1.5}.dgame h2,.dgame h3,.dgame p{margin:0}.dgame-hero{position:relative;display:flex;justify-content:space-between;gap:18px;overflow:hidden;padding:17px 18px;border:1px solid color-mix(in srgb,var(--dgame-accent) 35%,var(--dsw-alias-border-l1));border-radius:16px;background:radial-gradient(circle at 88% 30%,color-mix(in srgb,#38bdf8 25%,transparent),transparent 28%),radial-gradient(circle at 8% 100%,color-mix(in srgb,#a855f7 24%,transparent),transparent 34%),var(--dsw-alias-bg-layer-1)}.dgame-hero>div{position:relative;z-index:1;display:flex;flex-direction:column;gap:5px;max-width:540px}.dgame-hero h2{font-size:21px;letter-spacing:-.02em}.dgame-hero p,.dgame-foot{color:var(--dsw-alias-label-secondary);font-size:12px}.dgame-eyebrow{display:inline-flex;align-items:center;gap:7px;color:var(--dgame-accent);font-size:11px;font-weight:700}.dgame-eyebrow i,.dgame-task-status>i{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px currentColor;opacity:.9}.dgame-planet{position:relative;z-index:1;align-self:center;display:block;width:76px;height:76px;flex:none;border-radius:50%;background:radial-gradient(circle at 35% 30%,#e0f2fe 0 4%,#60a5fa 18%,#3730a3 59%,#1e1b4b);box-shadow:0 0 30px color-mix(in srgb,#818cf8 45%,transparent)}.dgame-planet::after{content:'';position:absolute;left:-16px;top:33px;width:106px;height:27px;border:3px solid color-mix(in srgb,#c4b5fd 72%,transparent);border-radius:50%;transform:rotate(-17deg)}.dgame-planet i{position:absolute;right:15px;top:14px;width:9px;height:9px;border-radius:50%;background:#818cf8;box-shadow:-23px 24px 0 5px color-mix(in srgb,#312e81 52%,transparent)}.dgame-planet b{position:absolute;left:-9px;top:9px;width:5px;height:5px;border-radius:50%;background:#fef3c7;box-shadow:58px -20px 0 #fef3c7,76px 43px 0 #bae6fd}.dgame-task-status{display:flex;align-items:center;gap:9px;min-height:40px;padding:9px 12px;border:1px solid var(--dsw-alias-border-l1);border-radius:11px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary)}.dgame-task-status>i{color:var(--dsw-alias-label-tertiary);box-shadow:0 0 0 4px color-mix(in srgb,var(--dsw-alias-label-tertiary) 13%,transparent)}.dgame-task-status.live{color:var(--dgame-accent);border-color:color-mix(in srgb,var(--dgame-accent) 36%,var(--dsw-alias-border-l1));background:var(--dgame-accent-soft)}.dgame-task-status.live>i{box-shadow:0 0 0 4px color-mix(in srgb,var(--dgame-accent) 17%,transparent);animation:dgame-pulse 1.8s ease-in-out infinite}.dgame-task-status div{display:flex;flex:1;min-width:0;flex-direction:column}.dgame-task-status strong{font-size:12px}.dgame-task-status span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--dsw-alias-label-secondary)}.dgame-task-status.loading{color:var(--dsw-alias-label-tertiary)}@keyframes dgame-pulse{50%{transform:scale(.72);opacity:.5}}.dgame-launch-note{color:var(--dsw-alias-label-secondary);font-size:12px}.dgame-game{display:flex;flex-direction:column;gap:11px;padding:15px;border:1px solid var(--dsw-alias-border-l1);border-radius:14px;background:var(--dsw-alias-bg-layer-1)}.dgame-game-head{display:flex;justify-content:space-between;gap:12px}.dgame-game-head>div:first-child{display:flex;flex-direction:column;gap:3px}.dgame-game h3{font-size:16px}.dgame-game p{font-size:12px;color:var(--dsw-alias-label-secondary)}.dgame-score{display:flex;align-items:flex-end;gap:9px;flex-direction:column;color:var(--dsw-alias-label-tertiary);font-size:11px;white-space:nowrap}.dgame-score strong{color:var(--dgame-accent);font-size:17px;line-height:1}.dgame-score button{min-height:28px;padding:3px 8px;font-size:11px}.dgame-dash-stage{position:relative;align-self:center;width:min(100%,360px);border:1px solid color-mix(in srgb,var(--dgame-accent) 30%,var(--dsw-alias-border-l1));border-radius:13px;overflow:hidden;outline:none;background:radial-gradient(circle at 50% -16%,color-mix(in srgb,#38bdf8 25%,transparent),transparent 42%),linear-gradient(180deg,#10162d,#17142d)}.dgame-dash-stage:focus-visible{box-shadow:0 0 0 3px var(--dgame-accent-soft)}.dgame-dash-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(5,52px);padding:7px;background:repeating-linear-gradient(90deg,transparent 0 calc(33.333% - 1px),color-mix(in srgb,#c4b5fd 15%,transparent) calc(33.333% - 1px) 33.333%)}.dgame-dash-cell{position:relative;display:grid;place-items:center;border-bottom:1px dashed color-mix(in srgb,#c4b5fd 13%,transparent)}.dgame-rock{font-style:normal;color:#fb7185;text-shadow:0 0 12px #f43f5e;font-size:22px;animation:dgame-rock .55s cubic-bezier(.2,.8,.25,1)}.dgame-pilot{position:relative;color:#a5f3fc;font-size:25px;text-shadow:0 0 14px #38bdf8;animation:dgame-pilot .9s ease-in-out infinite alternate}.dgame-pilot::after{content:'';position:absolute;left:46%;top:19px;width:4px;height:18px;background:linear-gradient(#fef3c7,transparent);transform:translateX(-50%)}@keyframes dgame-rock{from{opacity:0;transform:translateY(-13px) scale(.65)}to{opacity:1;transform:none}}@keyframes dgame-pilot{to{transform:translateY(-2px)}}.dgame-over{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:9px;background:color-mix(in srgb,#111827 74%,transparent);backdrop-filter:blur(2px);color:#fef3c7}.dgame-over strong{font-size:17px}.dgame-over button{padding:7px 12px;color:#fef3c7;background:color-mix(in srgb,#f59e0b 25%,transparent);border-color:#f59e0b}.dgame-controls{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;align-self:center;width:min(100%,360px)}.dgame-controls button{min-height:42px;padding:8px 10px;font-weight:600}.dgame-controls span{text-align:center;color:var(--dsw-alias-label-tertiary);font-size:11px}.dgame-reactor{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;align-self:center;width:min(100%,360px);padding:10px;border-radius:13px;background:linear-gradient(135deg,color-mix(in srgb,#312e81 34%,transparent),color-mix(in srgb,#0f172a 45%,transparent));border:1px solid color-mix(in srgb,var(--dgame-accent) 22%,var(--dsw-alias-border-l1))}.dgame-reactor-cell{position:relative;aspect-ratio:1;border:1px solid color-mix(in srgb,#94a3b8 30%,transparent);border-radius:12px;background:#171a33;cursor:pointer;transition:transform .16s ease,background .22s ease,border-color .22s ease,box-shadow .22s ease}.dgame-reactor-cell:hover{transform:translateY(-2px);border-color:var(--dgame-accent)}.dgame-reactor-cell:focus-visible{outline:2px solid var(--dgame-accent);outline-offset:2px}.dgame-reactor-cell i{position:absolute;inset:23%;border-radius:9px;background:#303252;transition:inherit}.dgame-reactor-cell.on{border-color:#67e8f9;background:color-mix(in srgb,#164e63 70%,#0f172a)}.dgame-reactor-cell.on i{background:radial-gradient(circle at 35% 30%,#ecfeff,#67e8f9 36%,#2563eb 78%);box-shadow:0 0 15px color-mix(in srgb,#22d3ee 65%,transparent)}.dgame-reactor-cell.focus{border-color:#a5f3fc;box-shadow:0 0 0 2px var(--dgame-accent) inset,0 0 14px color-mix(in srgb,#22d3ee 48%,transparent)}.dgame-reactor-cell.focus i{box-shadow:0 0 0 2px color-mix(in srgb,#ecfeff 55%,transparent) inset}.dgame-reactor:focus-visible{outline:2px solid var(--dgame-accent);outline-offset:3px}.dgame-reactor-status{align-self:center;min-height:36px;padding:8px 12px;border-radius:9px;color:var(--dsw-alias-label-secondary);font-size:12px}.dgame-reactor-status.solved{color:var(--dk-ok);background:color-mix(in srgb,var(--dsw-alias-state-success-primary,#0d9488) 13%,transparent)}.dgame-foot{padding:0 2px}.dgame-foot::before{content:'\u2726';margin-right:6px;color:var(--dgame-accent)}
|
|
9410
9490
|
.dgame .dgame-score button,.dgame .dgame-controls button,.dgame .dgame-over button,.dgwin .dgame-score button,.dgwin .dgame-controls button,.dgwin .dgame-over button{border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;transition:transform .16s ease,border-color .18s ease,background .18s ease,color .18s ease}.dgame .dgame-score button:hover,.dgame .dgame-controls button:hover,.dgame .dgame-over button:hover,.dgwin .dgame-score button:hover,.dgwin .dgame-controls button:hover,.dgwin .dgame-over button:hover{border-color:var(--dgame-accent);color:var(--dsw-alias-label-primary)}.dgame .dgame-score button:active,.dgame .dgame-controls button:active,.dgame .dgame-over button:active,.dgwin .dgame-score button:active,.dgwin .dgame-controls button:active,.dgwin .dgame-over button:active{transform:scale(.97)}
|
|
9411
|
-
.dgcov-grid{--dgame-accent
|
|
9491
|
+
.dgcov-grid{--dgame-accent:var(--dk-games-accent,#7c3aed);display:flex;gap:10px;flex-wrap:wrap}.dgcov{flex:1;min-width:230px;display:flex;flex-direction:column;gap:8px;padding:11px;border:1px solid var(--dsw-alias-border-l1);border-radius:13px;background:var(--dsw-alias-bg-layer-2);cursor:pointer;font-family:inherit;text-align:left;transition:border-color .16s ease,transform .16s ease}.dgcov:hover{border-color:var(--dgame-accent);transform:translateY(-2px)}.dgcov:focus-visible{outline:2px solid var(--dgame-accent);outline-offset:2px}.dgcov.on{border-color:var(--dgame-accent);box-shadow:0 0 0 1px color-mix(in srgb,var(--dgame-accent) 40%,transparent)}.dgcov-name{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--dsw-alias-label-primary)}.dgcov-name i{width:8px;height:8px;border-radius:50%;flex:none}.dgcov-name em{margin-left:auto;font-style:normal;font-size:10px;color:var(--dgame-accent);border:1px solid color-mix(in srgb,var(--dgame-accent) 45%,transparent);border-radius:999px;padding:1px 8px;white-space:nowrap}.dgcov-desc{font-size:11.5px;color:var(--dsw-alias-label-secondary);line-height:1.55}.dgcov-prev{position:relative;display:block;height:96px;border-radius:9px;overflow:hidden;border:1px solid color-mix(in srgb,var(--dgame-accent) 25%,var(--dsw-alias-border-l1))}
|
|
9412
9492
|
.dgcov-prev-dash{background:radial-gradient(circle at 70% 20%,color-mix(in srgb,#1d4ed8 30%,transparent),transparent 55%),linear-gradient(180deg,#0d1330,#171233)}.dgcov-prev-dash i{position:absolute;top:-22%;font-style:normal;color:#fb7185;text-shadow:0 0 10px #f43f5e;font-size:15px;animation:dgcov-fall 1.5s linear infinite}.dgcov-prev-dash i::after{content:'\u25C6'}.dgcov-prev-dash i:nth-child(1){left:16%}.dgcov-prev-dash i:nth-child(2){left:50%;animation-delay:-.5s}.dgcov-prev-dash i:nth-child(3){left:82%;animation-delay:-1s}.dgcov-prev-dash b{position:absolute;left:50%;bottom:8px;margin-left:-9px;font-size:17px;color:#a5f3fc;text-shadow:0 0 12px #38bdf8;animation:dgcov-dodge 2.4s ease-in-out infinite}.dgcov-prev-dash b::after{content:'\u25B2'}@keyframes dgcov-fall{to{transform:translateY(140px)}}@keyframes dgcov-dodge{0%,100%{transform:translateX(-46px)}25%,75%{transform:translateX(0)}50%{transform:translateX(46px)}}
|
|
9413
9493
|
.dgcov-prev-reactor{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;padding:14px;background:linear-gradient(135deg,#272463,#12102c)}.dgcov-prev-reactor i{display:block;border-radius:9px;background:#191c38;border:1px solid color-mix(in srgb,#ffffff 11%,transparent);animation:dgcov-reactor 3s ease-in-out infinite}.dgcov-prev-reactor i:nth-child(1){animation-delay:0s}.dgcov-prev-reactor i:nth-child(2){animation-delay:-.33s}.dgcov-prev-reactor i:nth-child(3){animation-delay:-.66s}.dgcov-prev-reactor i:nth-child(4){animation-delay:-1s}.dgcov-prev-reactor i:nth-child(5){animation-delay:-1.33s}.dgcov-prev-reactor i:nth-child(6){animation-delay:-1.66s}.dgcov-prev-reactor i:nth-child(7){animation-delay:-2s}.dgcov-prev-reactor i:nth-child(8){animation-delay:-2.33s}.dgcov-prev-reactor i:nth-child(9){animation-delay:-2.66s}@keyframes dgcov-reactor{0%,20%,100%{background:#191c38;box-shadow:none;border-color:color-mix(in srgb,#ffffff 11%,transparent)}40%,64%{background:radial-gradient(circle at 35% 30%,#ecfeff,#67e8f9 40%,#2563eb 85%);box-shadow:0 0 14px color-mix(in srgb,#22d3ee 55%,transparent);border-color:#67e8f9}}
|
|
9414
|
-
.dgfab{--dgame-accent
|
|
9494
|
+
.dgfab{--dgame-accent:var(--dk-games-accent,#7c3aed);position:fixed;z-index:9985;display:flex;flex-direction:column;align-items:center;gap:6px;box-sizing:border-box;width:36px;padding:11px 0;border:1px solid color-mix(in srgb,var(--dgame-accent) 42%,var(--dsw-alias-border-l1));background:color-mix(in srgb,var(--dsw-alias-bg-layer-2) 82%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--dsw-alias-label-primary);font-family:inherit;cursor:grab;user-select:none;touch-action:none;box-shadow:0 6px 24px rgb(0 0 0 / .18);transition:left .22s ease,top .22s ease,border-color .15s ease,opacity .15s ease}.dgfab:hover{border-color:var(--dgame-accent)}.dgfab-side-left{border-radius:0 12px 12px 0;border-left:none}.dgfab-side-right{border-radius:12px 0 0 12px;border-right:none}.dgfab-drag{transition:none;cursor:grabbing;box-shadow:0 10px 34px rgb(0 0 0 / .3);z-index:9986}.dgfab-hide{display:none}.dgfab-ico{display:inline-flex;color:var(--dgame-accent)}.dgfab-label{writing-mode:vertical-rl;letter-spacing:.22em;font-size:11px;line-height:1;color:var(--dsw-alias-label-secondary)}
|
|
9415
9495
|
.dgwin{--dgame-accent:#a78bfa;--dgame-accent-soft:color-mix(in srgb,#a78bfa 16%,transparent);--dsw-alias-label-primary:#e7ecff;--dsw-alias-label-secondary:#aab3e8;--dsw-alias-label-tertiary:#7d86c0;--dsw-alias-border-l1:rgb(255 255 255 / .12);--dsw-alias-border-l2:rgb(255 255 255 / .17);--dsw-alias-bg-layer-1:#0d1230;--dsw-alias-bg-layer-2:#131a3d;--dsw-alias-interactive-bg-hover:rgb(255 255 255 / .08);position:fixed;z-index:9993;display:flex;flex-direction:column;border:1px solid rgb(255 255 255 / .14);border-radius:14px;background:radial-gradient(600px 300px at 80% -10%,color-mix(in srgb,#312e81 30%,transparent),transparent 60%),radial-gradient(500px 340px at -10% 110%,color-mix(in srgb,#0ea5e9 14%,transparent),transparent 55%),linear-gradient(180deg,#0b1024,#12102a 60%,#0a0f22);color:var(--dsw-alias-label-primary);box-shadow:0 24px 72px rgb(0 0 0 / .5);animation:dgwin-in .18s ease-out}.dgwin::before{content:'';position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(1px 1px at 12% 22%,rgb(255 255 255 / .35),transparent),radial-gradient(1px 1px at 34% 68%,rgb(255 255 255 / .26),transparent),radial-gradient(1.5px 1.5px at 58% 14%,rgb(199 210 254 / .35),transparent),radial-gradient(1px 1px at 76% 44%,rgb(255 255 255 / .22),transparent),radial-gradient(1.5px 1.5px at 88% 78%,rgb(165 243 252 / .3),transparent),radial-gradient(1px 1px at 22% 88%,rgb(255 255 255 / .18),transparent),radial-gradient(1px 1px at 45% 38%,rgb(255 255 255 / .15),transparent),radial-gradient(1px 1px at 67% 86%,rgb(255 255 255 / .19),transparent)}@keyframes dgwin-in{from{opacity:0;transform:translateY(8px) scale(.985)}}
|
|
9416
9496
|
.dgwin-min{height:auto!important;border-radius:12px}.dgwin-min .dgwin-body{display:none}.dgwin-min .dgwin-resize{display:none}
|
|
9417
9497
|
.dgwin-max{border-radius:12px}.dgwin-max .dgwin-body .dgame-game{align-items:stretch}.dgwin-max .dgwin-body .dgame-dash-stage,.dgwin-max .dgwin-body .dgame-tetris,.dgwin-max .dgwin-body .dgame-tetris-board,.dgwin-max .dgwin-body .dgame-snake-stage,.dgwin-max .dgwin-body .dgame-sokoban-stage,.dgwin-max .dgwin-body .dgame-gomoku-board,.dgwin-max .dgwin-body .dgame-xiangqi-board,.dgwin-max .dgwin-body .dgame-tank-stage,.dgwin-max .dgwin-body .dgame-breakout,.dgwin-max .dgwin-body .dgame-racer,.dgwin-max .dgwin-body .dgame-reactor{width:100%;max-width:none}.dgwin-max .dgwin-body .dgame-controls{width:100%;max-width:none}
|
|
@@ -9775,13 +9855,13 @@ var feature8 = {
|
|
|
9775
9855
|
description: "\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u7684\u8FDC\u7A0B\u5165\u53E3\uFF1A\u6240\u6709\u8BBE\u5907\u8BBF\u95EE\u540C\u4E00\u4E2A DSH\uFF0C\u4EFB\u52A1\u8FDB\u5EA6\u5B9E\u65F6\u4E00\u81F4",
|
|
9776
9856
|
defaultEnabled: true,
|
|
9777
9857
|
css: `
|
|
9778
|
-
.dmr{--dmr-accent:#38bdf8;--dmr-accent-soft:color-mix(in srgb,var(--dmr-accent) 13%,transparent);display:flex;flex-direction:column;gap:16px;max-width:720px;color:var(--dsw-alias-label-primary);font-size:13px;line-height:1.5}.dmr h3,.dmr h4,.dmr p{margin:0}.dmr h3{font-size:17px;line-height:1.25;letter-spacing:-.01em}.dmr h4{font-size:13px}.dmr-hero,.dmr-status-head{display:flex;align-items:flex-start;gap:12px}.dmr-hero>div,.dmr-status-head>div{min-width:0;display:flex;flex-direction:column;gap:4px}.dmr-hero p,.dmr-status-head p,.dmr-field small,.dmr-share small,.dmr-overview-card small,.dmr-task small,.dmr-note p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.55}.dmr-hero-icon{width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:14px;background:var(--dmr-accent-soft);color:var(--dmr-accent);border:1px solid color-mix(in srgb,var(--dmr-accent) 35%,var(--dsw-alias-border-l1))}.dmr-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none}.dmr-steps li{display:flex;gap:9px;padding:11px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px}.dmr-steps li>span{width:21px;height:21px;display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:50%;font-size:11px;font-weight:700;color:var(--dmr-accent);background:var(--dmr-accent-soft)}.dmr-steps div{display:flex;flex-direction:column;gap:3px;min-width:0}.dmr-steps strong{font-size:12px}.dmr-steps small{font-size:11px;color:var(--dsw-alias-label-secondary);line-height:1.45}.dmr-field{display:flex;flex-direction:column;gap:6px;font-weight:600}.dmr-field input,.dmr-field select,.dmr-note textarea{box-sizing:border-box;width:100%;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:10px;padding:10px 12px;min-height:44px;font:inherit;outline:none;transition:border-color .18s ease,box-shadow .18s ease}.dmr-field input:focus,.dmr-field select:focus,.dmr-note textarea:focus{border-color:var(--dmr-accent);box-shadow:0 0 0 3px var(--dmr-accent-soft)}.dmr-field small{font-weight:400}.dmr-network-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(150px,.6fr);gap:12px}.dmr-security{padding:12px 13px;border:1px solid color-mix(in srgb,#f59e0b 38%,var(--dsw-alias-border-l1));border-radius:12px;background:color-mix(in srgb,#f59e0b 8%,transparent)}.dmr-security strong{display:block;margin-bottom:4px;color:#f59e0b;font-size:12px}.dmr-security p{font-size:12px;color:var(--dsw-alias-label-secondary);line-height:1.55}.dmr-primary,.dmr-secondary,.dmr-text-button,.dmr-icon-button{font:inherit;touch-action:manipulation;cursor:pointer;transition:transform .15s ease,background .18s ease,border-color .18s ease,opacity .18s ease}.dmr-primary,.dmr-secondary{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:10px;padding:9px 13px;font-weight:600}.dmr-primary{align-self:flex-start;border:1px solid var(--dmr-accent);background:var(--dmr-accent);color:#062238}.dmr-primary:hover{filter:brightness(1.05)}.dmr-secondary{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}.dmr-secondary:hover{border-color:var(--dmr-accent);background:var(--dmr-accent-soft)}.dmr-primary:active,.dmr-secondary:active,.dmr-icon-button:active{transform:scale(.98)}.dmr-primary:disabled,.dmr-secondary:disabled,.dmr-text-button:disabled,.dmr-icon-button:disabled{cursor:not-allowed;opacity:.5}.dmr-message{display:flex;align-items:flex-start;gap:7px;padding:10px 12px;border-radius:10px;font-size:12px}.dmr-message.success{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 10%,transparent)}.dmr-message.error{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}.dmr-status-head{justify-content:space-between}.dmr-eyebrow{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--dmr-accent)}.dmr-eyebrow i{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px var(--dmr-accent-soft)}.dmr-icon-button{display:inline-flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:transparent;color:var(--dsw-alias-label-secondary)}.dmr-icon-button:hover{color:var(--dsw-alias-state-error-primary);border-color:currentColor}.dmr-share{display:flex;flex-direction:column;gap:9px;padding:13px;border:1px solid color-mix(in srgb,var(--dmr-accent) 32%,var(--dsw-alias-border-l1));border-radius:13px;background:var(--dmr-accent-soft)}.dmr-share-layout{display:grid;grid-template-columns:196px minmax(0,1fr);gap:16px;align-items:center}.dmr-qr-card{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:5px;padding:10px;border-radius:12px;background:#fff;color:#111827;text-align:center}.dmr-qr-card img{display:block;width:176px;height:176px;max-width:100%;object-fit:contain}.dmr-qr-card strong{font-size:12px}.dmr-qr-card small{color:#4b5563;font-size:10px}.dmr-qr-loading{display:grid;place-items:center;width:176px;height:176px;color:#64748b;font-size:12px}.dmr-share-detail{min-width:0;display:flex;flex-direction:column;gap:10px}.dmr-share-detail>div:first-child{display:flex;flex-direction:column;gap:4px}.dmr-link{padding:10px 11px;border-radius:8px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;word-break:break-all;color:var(--dsw-alias-label-secondary)}.dmr-share-actions{display:flex;gap:8px;flex-wrap:wrap}.dmr-share-actions .dmr-primary{align-self:auto}.dmr-overview{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.dmr-overview-card{display:flex;flex-direction:column;gap:3px;padding:12px;border:1px solid var(--dsw-alias-border-l1);border-radius:12px;background:var(--dsw-alias-bg-layer-1)}.dmr-overview-card>span{font-size:11px;color:var(--dsw-alias-label-tertiary)}.dmr-overview-card strong{font-size:16px;letter-spacing:-.01em}.dmr-section{display:flex;flex-direction:column;gap:9px}.dmr-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.dmr-section-head small{font-size:11px;color:var(--dsw-alias-label-tertiary)}.dmr-text-button{border:0;background:transparent;color:var(--dmr-accent);padding:8px;min-height:36px;font-weight:600}.dmr-task-list{display:flex;flex-direction:column;gap:8px}.dmr-task{display:flex;align-items:flex-start;gap:9px;padding:10px 11px;border:1px solid var(--dsw-alias-border-l1);border-radius:10px;background:var(--dsw-alias-bg-layer-1)}.dmr-task>div{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}.dmr-task strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dmr-phase{flex:none;border-radius:999px;padding:3px 8px;font-size:11px;background:var(--dmr-accent-soft);color:var(--dmr-accent)}.dmr-phase.write{color:var(--dsw-alias-state-success-primary)}.dmr-phase.code{color:#f59e0b}.dmr-phase.search{color:#14b8a6}.dmr-empty{padding:18px 12px;text-align:center;border:1px dashed var(--dsw-alias-border-l2);border-radius:10px;color:var(--dsw-alias-label-secondary);font-size:12px}.dmr-note{display:flex;flex-direction:column;gap:9px;padding-top:2px}.dmr-note blockquote{margin:0;padding:10px 12px;border-left:3px solid var(--dmr-accent);border-radius:0 9px 9px 0;background:var(--dmr-accent-soft);white-space:pre-wrap;font-size:12px}.dmr-note textarea{min-height:88px;resize:vertical;line-height:1.5}.dmr-note .dmr-secondary{align-self:flex-start}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width:680px){.dmr{gap:14px;font-size:14px}.dmr h3{font-size:18px}.dmr-steps{grid-template-columns:1fr;gap:8px}.dmr-steps li{padding:10px}.dmr-steps small,.dmr-hero p,.dmr-status-head p,.dmr-field small,.dmr-share small,.dmr-overview-card small,.dmr-task small,.dmr-note p{font-size:12px}.dmr-network-grid{grid-template-columns:1fr;gap:10px}.dmr-field input,.dmr-field select{font-size:16px}.dmr-primary,.dmr-secondary{width:100%;font-size:14px}.dmr-share-layout{grid-template-columns:1fr;gap:12px}.dmr-qr-card{width:min(240px,100%);margin:0 auto}.dmr-qr-card img,.dmr-qr-loading{width:210px;height:210px}.dmr-share-actions{flex-direction:column}.dmr-share-actions .dmr-primary{width:100%}.dmr-overview{gap:8px}.dmr-overview-card{padding:11px}.dmr-status-head{gap:8px}.dmr-link{font-size:11px}.dmr-note textarea{font-size:16px;min-height:104px}.dmr-note .dmr-secondary{align-self:stretch}.dmr-compact .dmr-hero-icon{width:40px;height:40px;border-radius:13px}}@media (prefers-reduced-motion:reduce){.dmr-primary,.dmr-secondary,.dmr-text-button,.dmr-icon-button,.dmr-field input,.dmr-field select,.dmr-note textarea{transition:none}}.dmr-lan{flex:none;margin-top:6px;padding-top:16px;border-top:1px solid var(--dsw-alias-border-l1)}.dmr-lan-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.dmr-lan-title{min-width:0;display:flex;flex-direction:column;gap:4px}.dmr-lan-title p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.55}.dmr-lan-badge{flex:none;display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:5px 10px;font-size:11px;font-weight:700;border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary)}.dmr-lan-badge.on{border-color:color-mix(in srgb,var(--dmr-accent) 45%,transparent);background:var(--dmr-accent-soft);color:var(--dmr-accent)}.dmr-lan-active,.dmr-lan-idle{display:flex;flex-direction:column;gap:12px}.dmr-lan-active .dmr-share-detail small strong{color:var(--dsw-alias-state-error-primary)}.dmr-danger{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 45%,var(--dsw-alias-border-l2));color:var(--dsw-alias-state-error-primary)}.dmr-danger:hover{border-color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}`,
|
|
9858
|
+
.dmr{--dmr-accent:var(--dk-accent,#2f6fed);--dmr-accent-soft:color-mix(in srgb,var(--dmr-accent) 13%,transparent);display:flex;flex-direction:column;gap:16px;max-width:720px;color:var(--dsw-alias-label-primary);font-size:13px;line-height:1.5}.dmr h3,.dmr h4,.dmr p{margin:0}.dmr h3{font-size:17px;line-height:1.25;letter-spacing:-.01em}.dmr h4{font-size:13px}.dmr-hero,.dmr-status-head{display:flex;align-items:flex-start;gap:12px}.dmr-hero>div,.dmr-status-head>div{min-width:0;display:flex;flex-direction:column;gap:4px}.dmr-hero p,.dmr-status-head p,.dmr-field small,.dmr-share small,.dmr-overview-card small,.dmr-task small,.dmr-note p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.55}.dmr-hero-icon{width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:14px;background:var(--dmr-accent-soft);color:var(--dmr-accent);border:1px solid color-mix(in srgb,var(--dmr-accent) 35%,var(--dsw-alias-border-l1))}.dmr-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none}.dmr-steps li{display:flex;gap:9px;padding:11px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:12px}.dmr-steps li>span{width:21px;height:21px;display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:50%;font-size:11px;font-weight:700;color:var(--dmr-accent);background:var(--dmr-accent-soft)}.dmr-steps div{display:flex;flex-direction:column;gap:3px;min-width:0}.dmr-steps strong{font-size:12px}.dmr-steps small{font-size:11px;color:var(--dsw-alias-label-secondary);line-height:1.45}.dmr-field{display:flex;flex-direction:column;gap:6px;font-weight:600}.dmr-field input,.dmr-field select,.dmr-note textarea{box-sizing:border-box;width:100%;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:10px;padding:10px 12px;min-height:44px;font:inherit;outline:none;transition:border-color .18s ease,box-shadow .18s ease}.dmr-field input:focus,.dmr-field select:focus,.dmr-note textarea:focus{border-color:var(--dmr-accent);box-shadow:0 0 0 3px var(--dmr-accent-soft)}.dmr-field small{font-weight:400}.dmr-network-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(150px,.6fr);gap:12px}.dmr-security{padding:12px 13px;border:1px solid color-mix(in srgb,var(--dk-warn) 48%,var(--dsw-alias-border-l1));border-radius:12px;background:color-mix(in srgb,var(--dk-warn) 9%,transparent)}.dmr-security strong{display:block;margin-bottom:4px;color:var(--dk-warn);font-size:12px}.dmr-security p{font-size:12px;color:var(--dsw-alias-label-secondary);line-height:1.55}.dmr-primary,.dmr-secondary,.dmr-text-button,.dmr-icon-button{font:inherit;touch-action:manipulation;cursor:pointer;transition:transform .15s ease,background .18s ease,border-color .18s ease,opacity .18s ease}.dmr-primary,.dmr-secondary{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:10px;padding:9px 13px;font-weight:600}.dmr-primary{align-self:flex-start;border:1px solid var(--dmr-accent);background:var(--dmr-accent);color:#fff}.dmr-primary:hover{filter:brightness(1.05)}.dmr-secondary{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}.dmr-secondary:hover{border-color:var(--dmr-accent);background:var(--dmr-accent-soft)}.dmr-primary:active,.dmr-secondary:active,.dmr-icon-button:active{transform:scale(.98)}.dmr-primary:disabled,.dmr-secondary:disabled,.dmr-text-button:disabled,.dmr-icon-button:disabled{cursor:not-allowed;opacity:.5}.dmr-message{display:flex;align-items:flex-start;gap:7px;padding:10px 12px;border-radius:10px;font-size:12px}.dmr-message.success{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 10%,transparent)}.dmr-message.error{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}.dmr-status-head{justify-content:space-between}.dmr-eyebrow{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;color:var(--dmr-accent)}.dmr-eyebrow i{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px var(--dmr-accent-soft)}.dmr-icon-button{display:inline-flex;align-items:center;justify-content:center;flex:none;width:44px;height:44px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:transparent;color:var(--dsw-alias-label-secondary)}.dmr-icon-button:hover{color:var(--dsw-alias-state-error-primary);border-color:currentColor}.dmr-share{display:flex;flex-direction:column;gap:9px;padding:13px;border:1px solid color-mix(in srgb,var(--dmr-accent) 32%,var(--dsw-alias-border-l1));border-radius:13px;background:var(--dmr-accent-soft)}.dmr-share-layout{display:grid;grid-template-columns:196px minmax(0,1fr);gap:16px;align-items:center}.dmr-qr-card{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:5px;padding:10px;border-radius:12px;background:#fff;color:#111827;text-align:center}.dmr-qr-card img{display:block;width:176px;height:176px;max-width:100%;object-fit:contain}.dmr-qr-card strong{font-size:12px}.dmr-qr-card small{color:#4b5563;font-size:10px}.dmr-qr-loading{display:grid;place-items:center;width:176px;height:176px;color:#64748b;font-size:12px}.dmr-share-detail{min-width:0;display:flex;flex-direction:column;gap:10px}.dmr-share-detail>div:first-child{display:flex;flex-direction:column;gap:4px}.dmr-link{padding:10px 11px;border-radius:8px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;word-break:break-all;color:var(--dsw-alias-label-secondary)}.dmr-share-actions{display:flex;gap:8px;flex-wrap:wrap}.dmr-share-actions .dmr-primary{align-self:auto}.dmr-overview{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.dmr-overview-card{display:flex;flex-direction:column;gap:3px;padding:12px;border:1px solid var(--dsw-alias-border-l1);border-radius:12px;background:var(--dsw-alias-bg-layer-1)}.dmr-overview-card>span{font-size:11px;color:var(--dsw-alias-label-tertiary)}.dmr-overview-card strong{font-size:16px;letter-spacing:-.01em}.dmr-section{display:flex;flex-direction:column;gap:9px}.dmr-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.dmr-section-head small{font-size:11px;color:var(--dsw-alias-label-tertiary)}.dmr-text-button{border:0;background:transparent;color:var(--dmr-accent);padding:8px;min-height:36px;font-weight:600}.dmr-task-list{display:flex;flex-direction:column;gap:8px}.dmr-task{display:flex;align-items:flex-start;gap:9px;padding:10px 11px;border:1px solid var(--dsw-alias-border-l1);border-radius:10px;background:var(--dsw-alias-bg-layer-1)}.dmr-task>div{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}.dmr-task strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dmr-phase{flex:none;border-radius:999px;padding:3px 8px;font-size:11px;background:var(--dmr-accent-soft);color:var(--dmr-accent)}.dmr-phase.write{color:var(--dsw-alias-state-success-primary)}.dmr-phase.code{color:var(--dk-warn)}.dmr-phase.search{color:#0d9488}.dmr-empty{padding:18px 12px;text-align:center;border:1px dashed var(--dsw-alias-border-l2);border-radius:10px;color:var(--dsw-alias-label-secondary);font-size:12px}.dmr-note{display:flex;flex-direction:column;gap:9px;padding-top:2px}.dmr-note blockquote{margin:0;padding:10px 12px;border-left:3px solid var(--dmr-accent);border-radius:0 9px 9px 0;background:var(--dmr-accent-soft);white-space:pre-wrap;font-size:12px}.dmr-note textarea{min-height:88px;resize:vertical;line-height:1.5}.dmr-note .dmr-secondary{align-self:flex-start}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width:680px){.dmr{gap:14px;font-size:14px}.dmr h3{font-size:18px}.dmr-steps{grid-template-columns:1fr;gap:8px}.dmr-steps li{padding:10px}.dmr-steps small,.dmr-hero p,.dmr-status-head p,.dmr-field small,.dmr-share small,.dmr-overview-card small,.dmr-task small,.dmr-note p{font-size:12px}.dmr-network-grid{grid-template-columns:1fr;gap:10px}.dmr-field input,.dmr-field select{font-size:16px}.dmr-primary,.dmr-secondary{width:100%;font-size:14px}.dmr-share-layout{grid-template-columns:1fr;gap:12px}.dmr-qr-card{width:min(240px,100%);margin:0 auto}.dmr-qr-card img,.dmr-qr-loading{width:210px;height:210px}.dmr-share-actions{flex-direction:column}.dmr-share-actions .dmr-primary{width:100%}.dmr-overview{gap:8px}.dmr-overview-card{padding:11px}.dmr-status-head{gap:8px}.dmr-link{font-size:11px}.dmr-note textarea{font-size:16px;min-height:104px}.dmr-note .dmr-secondary{align-self:stretch}.dmr-compact .dmr-hero-icon{width:40px;height:40px;border-radius:13px}}@media (prefers-reduced-motion:reduce){.dmr-primary,.dmr-secondary,.dmr-text-button,.dmr-icon-button,.dmr-field input,.dmr-field select,.dmr-note textarea{transition:none}}.dmr-lan{flex:none;margin-top:6px;padding-top:16px;border-top:1px solid var(--dsw-alias-border-l1)}.dmr-lan-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.dmr-lan-title{min-width:0;display:flex;flex-direction:column;gap:4px}.dmr-lan-title p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.55}.dmr-lan-badge{flex:none;display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:5px 10px;font-size:11px;font-weight:700;border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary)}.dmr-lan-badge.on{border-color:color-mix(in srgb,var(--dmr-accent) 45%,transparent);background:var(--dmr-accent-soft);color:var(--dmr-accent)}.dmr-lan-active,.dmr-lan-idle{display:flex;flex-direction:column;gap:12px}.dmr-lan-active .dmr-share-detail small strong{color:var(--dsw-alias-state-error-primary)}.dmr-danger{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 45%,var(--dsw-alias-border-l2));color:var(--dsw-alias-state-error-primary)}.dmr-danger:hover{border-color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}`,
|
|
9779
9859
|
View: MobileRelayView,
|
|
9780
9860
|
HomeStat: MobileRelayHomeStat
|
|
9781
9861
|
};
|
|
9782
9862
|
|
|
9783
9863
|
// src/client.jsx
|
|
9784
|
-
var DOCK_VERSION = "0.
|
|
9864
|
+
var DOCK_VERSION = "0.9.1";
|
|
9785
9865
|
var BUILTIN_FEATURES = [feature, feature2, feature3, feature4, feature5, feature6, feature7, feature8];
|
|
9786
9866
|
var PLANNED_FEATURES = [];
|
|
9787
9867
|
var PLANNED_NOTES = {};
|
|
@@ -9832,6 +9912,18 @@ function allModules() {
|
|
|
9832
9912
|
return BUILTIN_FEATURES.concat(PLANNED_FEATURES, externalDefs).slice().sort((a, b) => (a.order || 500) - (b.order || 500));
|
|
9833
9913
|
}
|
|
9834
9914
|
var SHELL_CSS = [
|
|
9915
|
+
// ---- 主题桥接层(亮色适配的根基)----
|
|
9916
|
+
// dsh 宿主没有 --dsw-alias-accent,也没有 --dsw-alias-state-warning-primary(正确名是 state-warn-primary),
|
|
9917
|
+
// 旧写法全部落到暗色系回退值(浅蓝/琥珀),亮色白底下看不清。这里在 body 上按宿主主题
|
|
9918
|
+
// (body / body[data-ds-dark-theme])声明两套 dock 语义变量,各模块统一引用:
|
|
9919
|
+
// --dk-accent 主强调色(亮色用深蓝保证对比度,暗色用亮蓝)
|
|
9920
|
+
// --dk-warn 警告色(亮色用深琥珀,暗色用亮琥珀)
|
|
9921
|
+
// --dk-ok/--dk-err 成功/错误(亮色取宿主深色值,暗色保持宿主亮色值)
|
|
9922
|
+
// --dk-tdim 表格分隔线/弱边框(亮色用中性灰蓝、暗色用白透明)
|
|
9923
|
+
"body{--dk-accent:#2f6fed;--dk-accent-soft:color-mix(in srgb,#2f6fed 12%,transparent);--dk-warn:#b45309;--dk-ok:var(--dsw-alias-state-success-primary,#16a34a);--dk-err:var(--dsw-alias-state-error-primary,#dc2626);--dk-tdim:rgba(100,116,139,.22);--dk-hover-tint:rgba(47,111,237,.08);--dk-games-accent:#7c3aed;}",
|
|
9924
|
+
"body[data-ds-dark-theme]{--dk-accent:#4d9fff;--dk-accent-soft:color-mix(in srgb,#4d9fff 12%,transparent);--dk-warn:#fbbf24;--dk-ok:var(--dsw-alias-state-success-primary,#34d399);--dk-err:var(--dsw-alias-state-error-primary,#f87171);--dk-tdim:rgba(122,132,152,.14);--dk-hover-tint:rgba(80,110,180,.12);--dk-games-accent:#a78bfa;}",
|
|
9925
|
+
// 宿主语义变量兜底别名(部分模块引用了宿主不存在的名字,统一在此补齐,取值随主题自动切换)
|
|
9926
|
+
"body{--dsw-alias-accent:var(--dk-accent);--dsw-alias-accent-soft:var(--dk-accent-soft);--dsw-alias-state-warning-primary:var(--dk-warn);}",
|
|
9835
9927
|
".dock-root{display:flex;flex-direction:column;gap:12px;padding:4px 0;color:var(--dsw-alias-label-primary);font-size:13px;}",
|
|
9836
9928
|
".dock-intro{color:var(--dsw-alias-label-secondary);line-height:1.6;}",
|
|
9837
9929
|
".dock-card{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;}",
|
|
@@ -9851,10 +9943,11 @@ var SHELL_CSS = [
|
|
|
9851
9943
|
// 使两按钮上下成列、左右边缘完全对齐(此前右对齐/叠放都会错位)。
|
|
9852
9944
|
".docke2-btn{box-sizing:border-box;cursor:pointer;display:flex;align-items:center;gap:8px;border:none;background:transparent;color:var(--dsw-alias-label-primary);border-radius:12px;width:calc(100% + 4px);height:42px;margin:4px -2px;padding:0 10px 0 8px;font-family:inherit;font-size:14px;line-height:22px;transition:background .15s var(--ds-ease-in-out),color .15s var(--ds-ease-in-out);}",
|
|
9853
9945
|
".docke2-btn:hover{background:var(--dsw-alias-interactive-bg-hover);}",
|
|
9854
|
-
".docke2-btn.docke2-on{color:var(--
|
|
9946
|
+
".docke2-btn.docke2-on{color:var(--dk-accent);background:var(--dk-accent-soft);}",
|
|
9855
9947
|
".docke2-btn.docke2-rail{width:36px;height:36px;margin:8px 0 10px;padding:0;border-radius:50%;justify-content:center;gap:0;}",
|
|
9856
9948
|
".docke2-label{white-space:nowrap;overflow:hidden;}",
|
|
9857
|
-
|
|
9949
|
+
// 遮罩固定用深色半透明:亮色主题下宿主 bg-layer-1 是纯白,白底遮罩会让弹窗与页面完全无层次
|
|
9950
|
+
".dockm-backdrop{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;background:rgba(15,17,21,.45);backdrop-filter:blur(4px);pointer-events:auto;animation:dockm-fade .15s var(--ds-ease-in-out);}",
|
|
9858
9951
|
"@keyframes dockm-fade{from{opacity:0}to{opacity:1}}",
|
|
9859
9952
|
".dockm-dialog{box-sizing:border-box;position:relative;width:min(1080px,calc(100vw - 32px));height:min(700px,calc(100vh - 32px));display:flex;flex-direction:column;border-radius:16px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);box-shadow:0 20px 64px rgb(0 0 0 / .32);overflow:hidden;animation:dockm-pop .18s var(--ds-ease-in-out);}",
|
|
9860
9953
|
"@keyframes dockm-pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}",
|
|
@@ -9874,7 +9967,7 @@ var SHELL_CSS = [
|
|
|
9874
9967
|
".dockm-nav{flex:none;width:176px;display:flex;flex-direction:column;gap:2px;padding:10px 8px;overflow-y:auto;border-right:1px solid var(--dsw-alias-border-l1);}",
|
|
9875
9968
|
".dockm-nav-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border:none;background:transparent;border-radius:10px;cursor:pointer;color:var(--dsw-alias-label-secondary);font-family:inherit;font-size:13px;text-align:left;transition:background .15s var(--ds-ease-in-out),color .15s var(--ds-ease-in-out);}",
|
|
9876
9969
|
".dockm-nav-item:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}",
|
|
9877
|
-
".dockm-nav-item.on{background:var(--
|
|
9970
|
+
".dockm-nav-item.on{background:var(--dk-accent-soft);color:var(--dsw-alias-label-primary);font-weight:600;}",
|
|
9878
9971
|
".dockm-nav-item .dockm-badge{margin-left:auto;}",
|
|
9879
9972
|
".dockm-dot{width:8px;height:8px;border-radius:50%;flex:none;}",
|
|
9880
9973
|
".dockm-badge{flex:none;font-size:11px;border-radius:999px;padding:0 8px;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);}",
|
|
@@ -9890,10 +9983,10 @@ var SHELL_CSS = [
|
|
|
9890
9983
|
".dockm-switch:hover{color:var(--dsw-alias-label-primary);}",
|
|
9891
9984
|
".dockm-switch.on{color:var(--dsw-alias-state-success-primary);border-color:currentColor;}",
|
|
9892
9985
|
// 首页总揽(dockh- 前缀):导航首项图标 + 模块卡片网格
|
|
9893
|
-
".dockm-navhome{display:inline-flex;align-items:center;color:var(--
|
|
9986
|
+
".dockm-navhome{display:inline-flex;align-items:center;color:var(--dk-accent);flex:none;}",
|
|
9894
9987
|
".dockh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;}",
|
|
9895
9988
|
".dockh-card{display:flex;flex-direction:column;gap:6px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;padding:10px 12px;cursor:pointer;transition:border-color .15s var(--ds-ease-in-out);}",
|
|
9896
|
-
".dockh-card:hover,.dockh-card:focus-visible{border-color:var(--
|
|
9989
|
+
".dockh-card:hover,.dockh-card:focus-visible{border-color:var(--dk-accent);outline:none;}",
|
|
9897
9990
|
".dockh-head{display:flex;align-items:center;gap:8px;}",
|
|
9898
9991
|
".dockh-name{font-weight:600;flex:none;}",
|
|
9899
9992
|
".dockh-badge{flex:none;font-size:11px;border-radius:999px;padding:0 8px;color:var(--dsw-alias-label-tertiary);border:1px solid var(--dsw-alias-border-l2);}",
|
|
@@ -9905,7 +9998,7 @@ var SHELL_CSS = [
|
|
|
9905
9998
|
// iOS 风滑动开关(首页卡片 / 弹层页脚 / 设置页共用的启停控件)
|
|
9906
9999
|
".dock-sw{flex:none;position:relative;width:34px;height:19px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);cursor:pointer;padding:0;transition:background .18s var(--ds-ease-in-out),border-color .18s var(--ds-ease-in-out);}",
|
|
9907
10000
|
'.dock-sw::after{content:"";position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgb(0 0 0 / .35);transition:transform .18s var(--ds-ease-in-out);}',
|
|
9908
|
-
".dock-sw:hover{border-color:var(--
|
|
10001
|
+
".dock-sw:hover{border-color:var(--dk-accent);}",
|
|
9909
10002
|
".dock-sw.on{background:var(--dsw-alias-state-success-primary,#34d399);border-color:transparent;}",
|
|
9910
10003
|
".dock-sw.on::after{transform:translateX(15px);}",
|
|
9911
10004
|
// 弹层页脚:文字标签 + 开关 成组
|