larkway 0.3.7 → 0.3.9
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/README.md +2 -6
- package/README.zh.md +2 -6
- package/dist/cli/index.js +6163 -7278
- package/dist/main.js +249 -85
- package/dist/web/public/app.js +264 -1674
- package/dist/web/public/index.html +5 -37
- package/dist/web/public/style.css +63 -511
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<script>
|
|
11
11
|
// Token injected by the server when it renders index.html.
|
|
12
12
|
// If the placeholder survives (file served raw), app.js falls back to ?token=.
|
|
13
|
-
window.
|
|
13
|
+
window.__LK_BOOT_TOKEN__ = "__LARKWAY_TOKEN__";
|
|
14
14
|
</script>
|
|
15
15
|
</head>
|
|
16
16
|
<body class="lk-root">
|
|
@@ -28,27 +28,16 @@
|
|
|
28
28
|
<span class="brand-word">Larkway</span>
|
|
29
29
|
<span class="brand-sub">看板</span>
|
|
30
30
|
<span class="brand-ver" id="brand-ver" title="Larkway 版本"></span>
|
|
31
|
+
<span class="ctx-static" id="ctx-static-badge">
|
|
32
|
+
<span class="ctx-dot"></span>本机<span class="ctx-host" id="ctx-host"></span>
|
|
33
|
+
</span>
|
|
31
34
|
</div>
|
|
32
35
|
|
|
33
|
-
<!-- 中:绝对居中分段控件(本机 可改 / 公司中心库 只读) -->
|
|
34
|
-
<nav class="context-switch" id="context-switch" aria-label="上下文切换">
|
|
35
|
-
<button class="ctx-btn is-active" data-mode="local" id="ctx-local" type="button">
|
|
36
|
-
本机 <span class="ctx-hint">可改</span>
|
|
37
|
-
</button>
|
|
38
|
-
<button class="ctx-btn" data-mode="central" id="ctx-central" type="button" disabled>
|
|
39
|
-
公司中心库 <span class="ctx-hint">只读</span>
|
|
40
|
-
</button>
|
|
41
|
-
</nav>
|
|
42
|
-
|
|
43
36
|
<!-- 右:本机服务指示器(LkServiceIndicator,renderServiceIndicator 注入)
|
|
44
37
|
—— 它统一承担顶栏的服务/状态呈现;旧的整机 status-pill 已并入此处。 -->
|
|
45
38
|
<div class="bridge-indicator" id="bridge-indicator" title="本机服务状态"></div>
|
|
46
39
|
</header>
|
|
47
40
|
|
|
48
|
-
<!-- 来源条:连接中心库后,在主体上方显示「来自 <仓库>@<分支> · 最近同步 N 分钟前」+ 同步入口。
|
|
49
|
-
由 app.js renderCentralSourceBar() 注入内容;仅 central 已连接态显示。 -->
|
|
50
|
-
<div class="central-source-bar" id="central-source-bar" hidden></div>
|
|
51
|
-
|
|
52
41
|
<!-- ───────────────────────── 主体:300px 名册侧栏 + 1fr 详情 ───────────────────────── -->
|
|
53
42
|
<main class="layout">
|
|
54
43
|
<!-- 左:助手名册 -->
|
|
@@ -76,7 +65,7 @@
|
|
|
76
65
|
</li>
|
|
77
66
|
</ul>
|
|
78
67
|
|
|
79
|
-
<!-- 底部:添加新助手(indigo)
|
|
68
|
+
<!-- 底部:添加新助手(indigo) -->
|
|
80
69
|
<div class="sidebar-actions" id="sidebar-actions">
|
|
81
70
|
<button class="btn btn-add" id="btn-add" type="button">
|
|
82
71
|
<svg class="icon icon-sm" viewBox="0 0 24 24" aria-hidden="true">
|
|
@@ -84,14 +73,6 @@
|
|
|
84
73
|
</svg>
|
|
85
74
|
添加新助手
|
|
86
75
|
</button>
|
|
87
|
-
<button class="btn btn-block" id="btn-sync" type="button">
|
|
88
|
-
<svg class="icon icon-sm" viewBox="0 0 24 24" aria-hidden="true">
|
|
89
|
-
<path d="M12 3v12" />
|
|
90
|
-
<path d="m8 11 4 4 4-4" />
|
|
91
|
-
<path d="M4 21h16" />
|
|
92
|
-
</svg>
|
|
93
|
-
从公司中心库拉取
|
|
94
|
-
</button>
|
|
95
76
|
</div>
|
|
96
77
|
</aside>
|
|
97
78
|
|
|
@@ -119,19 +100,6 @@
|
|
|
119
100
|
</div>
|
|
120
101
|
</div>
|
|
121
102
|
|
|
122
|
-
<!-- 连接公司中心库 modal(form → connecting → connected/failed) -->
|
|
123
|
-
<div class="modal-backdrop" id="connect-backdrop" hidden>
|
|
124
|
-
<div
|
|
125
|
-
class="modal connect-modal"
|
|
126
|
-
id="connect-modal"
|
|
127
|
-
role="dialog"
|
|
128
|
-
aria-modal="true"
|
|
129
|
-
aria-labelledby="connect-header"
|
|
130
|
-
>
|
|
131
|
-
<!-- 整张卡内容由 app.js renderConnectFlow() 注入(各 phase 自带 header/footer) -->
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
|
|
135
103
|
<!-- 同步预览 modal -->
|
|
136
104
|
<div class="modal-backdrop" id="modal-backdrop" hidden>
|
|
137
105
|
<div class="modal" id="modal" role="dialog" aria-modal="true" aria-labelledby="modal-header">
|
|
@@ -971,12 +971,6 @@ body {
|
|
|
971
971
|
radial-gradient(135% 90% at 50% -10%, color-mix(in oklab, var(--br) 6%, transparent) 0%, transparent 58%),
|
|
972
972
|
var(--surface);
|
|
973
973
|
}
|
|
974
|
-
.lk-ed--ro {
|
|
975
|
-
/* 只读:更克制,微光改成中性灰 */
|
|
976
|
-
background:
|
|
977
|
-
radial-gradient(135% 90% at 50% -10%, color-mix(in oklab, var(--faint) 9%, transparent) 0%, transparent 58%),
|
|
978
|
-
var(--surface);
|
|
979
|
-
}
|
|
980
974
|
.lk-ed__inner {
|
|
981
975
|
width: 100%;
|
|
982
976
|
max-width: 580px;
|
|
@@ -998,11 +992,6 @@ body {
|
|
|
998
992
|
border: 1px solid var(--br-edge);
|
|
999
993
|
color: var(--br-text);
|
|
1000
994
|
}
|
|
1001
|
-
.lk-ed--ro .lk-ed__eyebrow {
|
|
1002
|
-
background: var(--bg);
|
|
1003
|
-
border-color: var(--border);
|
|
1004
|
-
color: var(--muted);
|
|
1005
|
-
}
|
|
1006
995
|
.lk-ed__eyebrow svg {
|
|
1007
996
|
width: 14px;
|
|
1008
997
|
height: 14px;
|
|
@@ -1119,11 +1108,6 @@ body {
|
|
|
1119
1108
|
border: 1px solid var(--br-edge);
|
|
1120
1109
|
color: var(--br);
|
|
1121
1110
|
}
|
|
1122
|
-
.lk-ed--ro .lk-ed__chip {
|
|
1123
|
-
background: var(--bg);
|
|
1124
|
-
border-color: var(--border);
|
|
1125
|
-
color: var(--muted);
|
|
1126
|
-
}
|
|
1127
1111
|
.lk-ed__chip svg {
|
|
1128
1112
|
width: 21px;
|
|
1129
1113
|
height: 21px;
|
|
@@ -1144,9 +1128,6 @@ body {
|
|
|
1144
1128
|
align-items: center;
|
|
1145
1129
|
justify-content: center;
|
|
1146
1130
|
}
|
|
1147
|
-
.lk-ed--ro .lk-ed__chip-no {
|
|
1148
|
-
background: var(--faint);
|
|
1149
|
-
}
|
|
1150
1131
|
.lk-ed__step-t {
|
|
1151
1132
|
font-size: 13.5px;
|
|
1152
1133
|
font-weight: 700;
|
|
@@ -2050,185 +2031,12 @@ textarea.input {
|
|
|
2050
2031
|
line-height: 1.65;
|
|
2051
2032
|
}
|
|
2052
2033
|
|
|
2053
|
-
/* ===========================================================================
|
|
2054
|
-
promote section
|
|
2055
|
-
=========================================================================== */
|
|
2056
|
-
.promote-actions {
|
|
2057
|
-
display: flex;
|
|
2058
|
-
gap: 10px;
|
|
2059
|
-
margin-top: 14px;
|
|
2060
|
-
flex-wrap: wrap;
|
|
2061
|
-
}
|
|
2062
|
-
.promote-hint {
|
|
2063
|
-
margin-top: 12px;
|
|
2064
|
-
font-size: 12.5px;
|
|
2065
|
-
color: var(--muted);
|
|
2066
|
-
display: flex;
|
|
2067
|
-
align-items: flex-start;
|
|
2068
|
-
gap: 7px;
|
|
2069
|
-
line-height: 1.5;
|
|
2070
|
-
}
|
|
2071
|
-
.promote-hint .icon {
|
|
2072
|
-
color: var(--destructive-strong);
|
|
2073
|
-
flex-shrink: 0;
|
|
2074
|
-
margin-top: 1px;
|
|
2075
|
-
}
|
|
2076
|
-
/* 未连接引导条(LkPromoteCard 未连接态):indigo 提示 + 「去连接」按钮 */
|
|
2077
|
-
.promote-connect-hint {
|
|
2078
|
-
margin-top: 14px;
|
|
2079
|
-
display: flex;
|
|
2080
|
-
align-items: center;
|
|
2081
|
-
gap: 9px;
|
|
2082
|
-
padding: 11px 14px;
|
|
2083
|
-
border-radius: 10px;
|
|
2084
|
-
background: var(--br-soft);
|
|
2085
|
-
border: 1px solid var(--br-edge);
|
|
2086
|
-
font-size: 13px;
|
|
2087
|
-
color: #334155;
|
|
2088
|
-
line-height: 1.5;
|
|
2089
|
-
}
|
|
2090
|
-
.promote-connect-hint .icon {
|
|
2091
|
-
color: var(--br);
|
|
2092
|
-
flex-shrink: 0;
|
|
2093
|
-
}
|
|
2094
|
-
.promote-connect-hint > button {
|
|
2095
|
-
margin-left: auto;
|
|
2096
|
-
flex-shrink: 0;
|
|
2097
|
-
white-space: nowrap;
|
|
2098
|
-
}
|
|
2099
|
-
/* 晋升内联结果面板(成功 / 失败):包裹 badge + 正文 + 按钮 */
|
|
2100
|
-
.promote-result-panel {
|
|
2101
|
-
display: flex;
|
|
2102
|
-
gap: 13px;
|
|
2103
|
-
margin-top: 14px;
|
|
2104
|
-
padding: 15px 16px;
|
|
2105
|
-
border-radius: 12px;
|
|
2106
|
-
}
|
|
2107
|
-
.promote-result-panel .prp-badge {
|
|
2108
|
-
flex-shrink: 0;
|
|
2109
|
-
width: 34px;
|
|
2110
|
-
height: 34px;
|
|
2111
|
-
border-radius: 10px;
|
|
2112
|
-
background: #fff;
|
|
2113
|
-
display: inline-flex;
|
|
2114
|
-
align-items: center;
|
|
2115
|
-
justify-content: center;
|
|
2116
|
-
}
|
|
2117
|
-
.promote-result-panel .prp-body {
|
|
2118
|
-
min-width: 0;
|
|
2119
|
-
flex: 1;
|
|
2120
|
-
}
|
|
2121
|
-
.promote-result-panel .prp-title {
|
|
2122
|
-
font-size: 14.5px;
|
|
2123
|
-
font-weight: 700;
|
|
2124
|
-
line-height: 1.35;
|
|
2125
|
-
}
|
|
2126
|
-
.promote-result-panel .prp-desc {
|
|
2127
|
-
font-size: 13px;
|
|
2128
|
-
color: #334155;
|
|
2129
|
-
line-height: 1.55;
|
|
2130
|
-
margin: 3px 0 0;
|
|
2131
|
-
}
|
|
2132
|
-
.promote-result-panel .prp-meta {
|
|
2133
|
-
display: flex;
|
|
2134
|
-
align-items: center;
|
|
2135
|
-
gap: 8px;
|
|
2136
|
-
margin-top: 8px;
|
|
2137
|
-
font-size: 12px;
|
|
2138
|
-
color: var(--muted);
|
|
2139
|
-
flex-wrap: wrap;
|
|
2140
|
-
}
|
|
2141
|
-
.promote-result-panel .prp-actions {
|
|
2142
|
-
display: flex;
|
|
2143
|
-
gap: 9px;
|
|
2144
|
-
flex-wrap: wrap;
|
|
2145
|
-
margin-top: 12px;
|
|
2146
|
-
}
|
|
2147
|
-
/* 同步弹窗 header 升级:indigo 徽章 + 右侧 x 关闭按钮 */
|
|
2148
|
-
.modal-header-sync {
|
|
2149
|
-
padding: 22px 26px 0;
|
|
2150
|
-
}
|
|
2151
|
-
.modal-header-sync-row {
|
|
2152
|
-
display: flex;
|
|
2153
|
-
align-items: center;
|
|
2154
|
-
justify-content: space-between;
|
|
2155
|
-
}
|
|
2156
|
-
.modal-header-sync h3 {
|
|
2157
|
-
margin: 0;
|
|
2158
|
-
font-size: 18px;
|
|
2159
|
-
font-weight: 700;
|
|
2160
|
-
color: var(--text);
|
|
2161
|
-
display: flex;
|
|
2162
|
-
align-items: center;
|
|
2163
|
-
gap: 9px;
|
|
2164
|
-
}
|
|
2165
|
-
.modal-header-sync .sync-icon-badge {
|
|
2166
|
-
width: 30px;
|
|
2167
|
-
height: 30px;
|
|
2168
|
-
border-radius: 9px;
|
|
2169
|
-
background: var(--br-soft);
|
|
2170
|
-
border: 1px solid var(--br-edge);
|
|
2171
|
-
color: var(--br);
|
|
2172
|
-
display: inline-flex;
|
|
2173
|
-
align-items: center;
|
|
2174
|
-
justify-content: center;
|
|
2175
|
-
flex-shrink: 0;
|
|
2176
|
-
}
|
|
2177
|
-
.modal-header-sync .sync-close-btn {
|
|
2178
|
-
display: inline-flex;
|
|
2179
|
-
padding: 6px;
|
|
2180
|
-
border: none;
|
|
2181
|
-
border-radius: 8px;
|
|
2182
|
-
background: transparent;
|
|
2183
|
-
color: var(--muted);
|
|
2184
|
-
cursor: pointer;
|
|
2185
|
-
flex-shrink: 0;
|
|
2186
|
-
}
|
|
2187
|
-
.modal-header-sync .sync-close-btn:hover {
|
|
2188
|
-
background: var(--bg);
|
|
2189
|
-
color: var(--text);
|
|
2190
|
-
}
|
|
2191
|
-
.modal-header-sync p {
|
|
2192
|
-
margin: 8px 0 0;
|
|
2193
|
-
font-size: 13.5px;
|
|
2194
|
-
color: var(--muted);
|
|
2195
|
-
line-height: 1.55;
|
|
2196
|
-
}
|
|
2197
2034
|
.btn-sm {
|
|
2198
2035
|
padding: 7px 14px;
|
|
2199
2036
|
font-size: 13px;
|
|
2200
2037
|
border-radius: 9px;
|
|
2201
2038
|
}
|
|
2202
2039
|
|
|
2203
|
-
/* ===========================================================================
|
|
2204
|
-
sync group(modal)
|
|
2205
|
-
=========================================================================== */
|
|
2206
|
-
.sync-group {
|
|
2207
|
-
margin-bottom: 14px;
|
|
2208
|
-
}
|
|
2209
|
-
.sync-label {
|
|
2210
|
-
font-size: 13px;
|
|
2211
|
-
font-weight: 700;
|
|
2212
|
-
display: block;
|
|
2213
|
-
margin-bottom: 5px;
|
|
2214
|
-
}
|
|
2215
|
-
.sync-ok {
|
|
2216
|
-
color: #15803d;
|
|
2217
|
-
}
|
|
2218
|
-
.sync-warn {
|
|
2219
|
-
color: #b45309;
|
|
2220
|
-
}
|
|
2221
|
-
.sync-dim {
|
|
2222
|
-
color: var(--muted);
|
|
2223
|
-
}
|
|
2224
|
-
.sync-list {
|
|
2225
|
-
list-style: disc;
|
|
2226
|
-
padding-left: 22px;
|
|
2227
|
-
margin: 0;
|
|
2228
|
-
font-family: ui-monospace, "Cascadia Code", monospace;
|
|
2229
|
-
font-size: 13px;
|
|
2230
|
-
}
|
|
2231
|
-
|
|
2232
2040
|
/* ===========================================================================
|
|
2233
2041
|
buttons
|
|
2234
2042
|
=========================================================================== */
|
|
@@ -3458,18 +3266,12 @@ textarea.input {
|
|
|
3458
3266
|
.ac-repo-row {
|
|
3459
3267
|
position: relative;
|
|
3460
3268
|
padding: 13px 14px;
|
|
3269
|
+
padding-right: 52px;
|
|
3461
3270
|
border-radius: 11px;
|
|
3462
3271
|
border: 1px solid var(--border);
|
|
3463
3272
|
background: #fff;
|
|
3464
3273
|
}
|
|
3465
3274
|
|
|
3466
|
-
.ac-repo-grid {
|
|
3467
|
-
display: grid;
|
|
3468
|
-
grid-template-columns: 1fr 120px;
|
|
3469
|
-
gap: 10px;
|
|
3470
|
-
margin-bottom: 10px;
|
|
3471
|
-
}
|
|
3472
|
-
|
|
3473
3275
|
.ac-repo-del {
|
|
3474
3276
|
position: absolute;
|
|
3475
3277
|
top: 11px;
|
|
@@ -3550,6 +3352,39 @@ textarea.input {
|
|
|
3550
3352
|
gap: 16px;
|
|
3551
3353
|
}
|
|
3552
3354
|
|
|
3355
|
+
.ac-token-advanced {
|
|
3356
|
+
border: 1px solid var(--border);
|
|
3357
|
+
border-radius: 10px;
|
|
3358
|
+
background: #fff;
|
|
3359
|
+
padding: 0;
|
|
3360
|
+
}
|
|
3361
|
+
|
|
3362
|
+
.ac-token-advanced > summary {
|
|
3363
|
+
display: flex;
|
|
3364
|
+
align-items: baseline;
|
|
3365
|
+
gap: 8px;
|
|
3366
|
+
padding: 11px 13px;
|
|
3367
|
+
cursor: pointer;
|
|
3368
|
+
list-style: none;
|
|
3369
|
+
font-size: 13.5px;
|
|
3370
|
+
font-weight: 700;
|
|
3371
|
+
color: var(--text);
|
|
3372
|
+
}
|
|
3373
|
+
|
|
3374
|
+
.ac-token-advanced > summary::-webkit-details-marker {
|
|
3375
|
+
display: none;
|
|
3376
|
+
}
|
|
3377
|
+
|
|
3378
|
+
.ac-token-advanced > summary span {
|
|
3379
|
+
font-size: 12.5px;
|
|
3380
|
+
font-weight: 500;
|
|
3381
|
+
color: var(--muted);
|
|
3382
|
+
}
|
|
3383
|
+
|
|
3384
|
+
.ac-token-advanced > .ac-field {
|
|
3385
|
+
padding: 0 13px 13px;
|
|
3386
|
+
}
|
|
3387
|
+
|
|
3553
3388
|
/* ── 保存栏(edit 模式 sticky,复用 .form-actions-sticky 的 sticky + gradient) ── */
|
|
3554
3389
|
.ac-save-bar {
|
|
3555
3390
|
display: flex;
|
|
@@ -3730,295 +3565,6 @@ textarea.input {
|
|
|
3730
3565
|
flex-direction: column;
|
|
3731
3566
|
}
|
|
3732
3567
|
|
|
3733
|
-
/* ===========================================================================
|
|
3734
|
-
公司中心库 tab(centralConnect / centralTab / centralSync 复刻)
|
|
3735
|
-
配色铁律:连接 / 同步 = indigo(--br);移除告警 = amber;不可逆外发 = 红。
|
|
3736
|
-
中心库存「配置」不是「进程」→ 不显在线 / 心跳,只显「谁晋升的 · 多久前更新」。
|
|
3737
|
-
=========================================================================== */
|
|
3738
|
-
|
|
3739
|
-
/* ── 来源条(LkSyncBar):来自 <仓库>@<分支> · 最近同步 N 分钟前 + 同步入口 ── */
|
|
3740
|
-
.central-source-bar {
|
|
3741
|
-
display: flex;
|
|
3742
|
-
align-items: center;
|
|
3743
|
-
gap: 14px;
|
|
3744
|
-
flex-wrap: wrap;
|
|
3745
|
-
padding: 12px 24px;
|
|
3746
|
-
background: var(--surface);
|
|
3747
|
-
border-bottom: 1px solid var(--border);
|
|
3748
|
-
flex-shrink: 0;
|
|
3749
|
-
}
|
|
3750
|
-
.central-source-bar[hidden] {
|
|
3751
|
-
display: none;
|
|
3752
|
-
}
|
|
3753
|
-
.csb-from {
|
|
3754
|
-
display: inline-flex;
|
|
3755
|
-
align-items: center;
|
|
3756
|
-
gap: 8px;
|
|
3757
|
-
min-width: 0;
|
|
3758
|
-
font-size: 13px;
|
|
3759
|
-
color: var(--muted);
|
|
3760
|
-
}
|
|
3761
|
-
.csb-from .icon {
|
|
3762
|
-
color: var(--faint);
|
|
3763
|
-
flex-shrink: 0;
|
|
3764
|
-
}
|
|
3765
|
-
.csb-repo {
|
|
3766
|
-
color: var(--text);
|
|
3767
|
-
font-family: ui-monospace, "Cascadia Code", monospace;
|
|
3768
|
-
font-weight: 600;
|
|
3769
|
-
}
|
|
3770
|
-
.csb-branch {
|
|
3771
|
-
display: inline-flex;
|
|
3772
|
-
align-items: center;
|
|
3773
|
-
gap: 3px;
|
|
3774
|
-
color: var(--faint);
|
|
3775
|
-
}
|
|
3776
|
-
.csb-sep {
|
|
3777
|
-
color: var(--faint);
|
|
3778
|
-
}
|
|
3779
|
-
.csb-synced {
|
|
3780
|
-
color: var(--faint);
|
|
3781
|
-
white-space: nowrap;
|
|
3782
|
-
}
|
|
3783
|
-
.csb-right {
|
|
3784
|
-
margin-left: auto;
|
|
3785
|
-
display: inline-flex;
|
|
3786
|
-
align-items: center;
|
|
3787
|
-
gap: 12px;
|
|
3788
|
-
}
|
|
3789
|
-
/* 「N 项可更新」indigo pill */
|
|
3790
|
-
.csb-updates {
|
|
3791
|
-
display: inline-flex;
|
|
3792
|
-
align-items: center;
|
|
3793
|
-
gap: 6px;
|
|
3794
|
-
font-size: 12.5px;
|
|
3795
|
-
font-weight: 600;
|
|
3796
|
-
color: var(--br-text);
|
|
3797
|
-
padding: 4px 11px;
|
|
3798
|
-
border-radius: 999px;
|
|
3799
|
-
background: var(--br-soft);
|
|
3800
|
-
border: 1px solid var(--br-edge);
|
|
3801
|
-
}
|
|
3802
|
-
.csb-updates::before {
|
|
3803
|
-
content: "";
|
|
3804
|
-
width: 7px;
|
|
3805
|
-
height: 7px;
|
|
3806
|
-
border-radius: 50%;
|
|
3807
|
-
background: var(--br);
|
|
3808
|
-
}
|
|
3809
|
-
/* 「已是最新」绿色平静态 */
|
|
3810
|
-
.csb-fresh {
|
|
3811
|
-
display: inline-flex;
|
|
3812
|
-
align-items: center;
|
|
3813
|
-
gap: 6px;
|
|
3814
|
-
font-size: 12.5px;
|
|
3815
|
-
color: #15803d;
|
|
3816
|
-
}
|
|
3817
|
-
/* 同步按钮:有更新 = indigo 实底;否则描边「检查更新」 */
|
|
3818
|
-
.csb-sync-btn {
|
|
3819
|
-
display: inline-flex;
|
|
3820
|
-
align-items: center;
|
|
3821
|
-
gap: 7px;
|
|
3822
|
-
padding: 8px 15px;
|
|
3823
|
-
border-radius: 9px;
|
|
3824
|
-
border: 1px solid var(--border);
|
|
3825
|
-
background: var(--surface);
|
|
3826
|
-
color: var(--text);
|
|
3827
|
-
font-size: 13px;
|
|
3828
|
-
font-weight: 600;
|
|
3829
|
-
font-family: inherit;
|
|
3830
|
-
white-space: nowrap;
|
|
3831
|
-
cursor: pointer;
|
|
3832
|
-
transition: background 0.14s, border-color 0.14s, color 0.14s;
|
|
3833
|
-
}
|
|
3834
|
-
.csb-sync-btn:hover:not(:disabled) {
|
|
3835
|
-
background: var(--bg);
|
|
3836
|
-
}
|
|
3837
|
-
.csb-sync-btn.has-updates {
|
|
3838
|
-
border: none;
|
|
3839
|
-
background: var(--br);
|
|
3840
|
-
color: #fff;
|
|
3841
|
-
}
|
|
3842
|
-
.csb-sync-btn.has-updates:hover:not(:disabled) {
|
|
3843
|
-
background: #4338ca;
|
|
3844
|
-
}
|
|
3845
|
-
.csb-sync-btn:disabled {
|
|
3846
|
-
cursor: wait;
|
|
3847
|
-
}
|
|
3848
|
-
|
|
3849
|
-
/* ── 中心库只读名册行:头像 + 名字 + 「<by> 晋升 · <updated>」(无在线/心跳)── */
|
|
3850
|
-
.bot-list li.cc-roster-item .roster-state {
|
|
3851
|
-
/* 复用 .roster-meta 容器,但替换底部行内容(by/updated)。 */
|
|
3852
|
-
}
|
|
3853
|
-
.cc-roster-by {
|
|
3854
|
-
display: inline-flex;
|
|
3855
|
-
align-items: center;
|
|
3856
|
-
gap: 5px;
|
|
3857
|
-
font-size: 11.5px;
|
|
3858
|
-
color: var(--faint);
|
|
3859
|
-
}
|
|
3860
|
-
.cc-roster-by .icon {
|
|
3861
|
-
width: 11px;
|
|
3862
|
-
height: 11px;
|
|
3863
|
-
flex-shrink: 0;
|
|
3864
|
-
}
|
|
3865
|
-
|
|
3866
|
-
/* ── 「想改?回本机」只读横幅(中心库详情顶部)── */
|
|
3867
|
-
.cc-readonly-banner {
|
|
3868
|
-
display: flex;
|
|
3869
|
-
align-items: center;
|
|
3870
|
-
gap: 12px;
|
|
3871
|
-
padding: 14px 16px;
|
|
3872
|
-
border-radius: var(--radius-sm);
|
|
3873
|
-
background: var(--br-soft);
|
|
3874
|
-
border: 1px solid var(--br-edge);
|
|
3875
|
-
margin-bottom: 20px;
|
|
3876
|
-
}
|
|
3877
|
-
.cc-readonly-banner .icon {
|
|
3878
|
-
color: var(--br);
|
|
3879
|
-
flex-shrink: 0;
|
|
3880
|
-
width: 18px;
|
|
3881
|
-
height: 18px;
|
|
3882
|
-
}
|
|
3883
|
-
.cc-readonly-banner-title {
|
|
3884
|
-
font-size: 13.5px;
|
|
3885
|
-
font-weight: 700;
|
|
3886
|
-
color: var(--br-text);
|
|
3887
|
-
}
|
|
3888
|
-
.cc-readonly-banner-sub {
|
|
3889
|
-
font-size: 12.5px;
|
|
3890
|
-
color: #334155;
|
|
3891
|
-
line-height: 1.5;
|
|
3892
|
-
margin-top: 1px;
|
|
3893
|
-
}
|
|
3894
|
-
.cc-go-local-btn {
|
|
3895
|
-
display: inline-flex;
|
|
3896
|
-
align-items: center;
|
|
3897
|
-
gap: 6px;
|
|
3898
|
-
padding: 8px 14px;
|
|
3899
|
-
border-radius: 9px;
|
|
3900
|
-
border: none;
|
|
3901
|
-
background: var(--br);
|
|
3902
|
-
color: #fff;
|
|
3903
|
-
font-size: 13px;
|
|
3904
|
-
font-weight: 600;
|
|
3905
|
-
font-family: inherit;
|
|
3906
|
-
cursor: pointer;
|
|
3907
|
-
white-space: nowrap;
|
|
3908
|
-
flex-shrink: 0;
|
|
3909
|
-
margin-left: auto;
|
|
3910
|
-
transition: background 0.14s;
|
|
3911
|
-
}
|
|
3912
|
-
.cc-go-local-btn:hover {
|
|
3913
|
-
background: #4338ca;
|
|
3914
|
-
}
|
|
3915
|
-
|
|
3916
|
-
/* ── 中心库侧栏底部「去本机添加/晋升」(只读 = 无添加按钮)── */
|
|
3917
|
-
.sidebar-actions .cc-go-local-block {
|
|
3918
|
-
width: 100%;
|
|
3919
|
-
display: flex;
|
|
3920
|
-
align-items: center;
|
|
3921
|
-
justify-content: center;
|
|
3922
|
-
gap: 7px;
|
|
3923
|
-
padding: 10px 14px;
|
|
3924
|
-
font-size: 13px;
|
|
3925
|
-
font-weight: 600;
|
|
3926
|
-
color: var(--br-text);
|
|
3927
|
-
background: var(--br-soft);
|
|
3928
|
-
border: 1px solid var(--br-edge);
|
|
3929
|
-
border-radius: 10px;
|
|
3930
|
-
cursor: pointer;
|
|
3931
|
-
font-family: inherit;
|
|
3932
|
-
}
|
|
3933
|
-
.sidebar-actions .cc-go-local-block:hover {
|
|
3934
|
-
background: var(--br-hover);
|
|
3935
|
-
}
|
|
3936
|
-
|
|
3937
|
-
/* 同步预览弹窗:设计稿 520px / 圆角 16px(加 .modal--sync class 时生效,关闭后清掉) */
|
|
3938
|
-
.modal--sync {
|
|
3939
|
-
width: 520px;
|
|
3940
|
-
border-radius: 16px;
|
|
3941
|
-
}
|
|
3942
|
-
/* ── 连接弹窗:整张卡内容由 JS 注入,这里只放容器尺寸 ── */
|
|
3943
|
-
.connect-modal {
|
|
3944
|
-
width: 520px;
|
|
3945
|
-
padding: 0;
|
|
3946
|
-
overflow-y: auto;
|
|
3947
|
-
}
|
|
3948
|
-
.connect-modal .modal-body,
|
|
3949
|
-
.connect-modal .modal-footer,
|
|
3950
|
-
.connect-modal .modal-header {
|
|
3951
|
-
/* 各 phase 自带内边距,容器不重复加。 */
|
|
3952
|
-
}
|
|
3953
|
-
|
|
3954
|
-
/* 连接表单输入(沿用 LkConfigForm 视觉:mono + focus 环) */
|
|
3955
|
-
.cc-input {
|
|
3956
|
-
width: 100%;
|
|
3957
|
-
padding: 10px 12px;
|
|
3958
|
-
border: 1px solid var(--border);
|
|
3959
|
-
border-radius: 9px;
|
|
3960
|
-
font-size: 13.5px;
|
|
3961
|
-
font-family: ui-monospace, "Cascadia Code", monospace;
|
|
3962
|
-
color: var(--text);
|
|
3963
|
-
background: var(--surface);
|
|
3964
|
-
outline: none;
|
|
3965
|
-
box-sizing: border-box;
|
|
3966
|
-
transition: border-color 0.15s, box-shadow 0.15s;
|
|
3967
|
-
}
|
|
3968
|
-
.cc-input:focus {
|
|
3969
|
-
border-color: var(--br-focus);
|
|
3970
|
-
box-shadow: var(--ring);
|
|
3971
|
-
}
|
|
3972
|
-
|
|
3973
|
-
/* 同步预览变更行(LkSyncPreview · CcChangeRow):新增=绿 / 更新=indigo / 移除=amber */
|
|
3974
|
-
.cc-change-row {
|
|
3975
|
-
display: flex;
|
|
3976
|
-
align-items: flex-start;
|
|
3977
|
-
gap: 11px;
|
|
3978
|
-
padding: 11px 13px;
|
|
3979
|
-
border-radius: 10px;
|
|
3980
|
-
background: var(--bg);
|
|
3981
|
-
border: 1px solid var(--border);
|
|
3982
|
-
}
|
|
3983
|
-
.cc-change-row.is-removed {
|
|
3984
|
-
background: #fffbeb;
|
|
3985
|
-
border-color: #fde68a;
|
|
3986
|
-
}
|
|
3987
|
-
.cc-change-badge {
|
|
3988
|
-
flex-shrink: 0;
|
|
3989
|
-
width: 26px;
|
|
3990
|
-
height: 26px;
|
|
3991
|
-
border-radius: 8px;
|
|
3992
|
-
background: var(--surface);
|
|
3993
|
-
display: inline-flex;
|
|
3994
|
-
align-items: center;
|
|
3995
|
-
justify-content: center;
|
|
3996
|
-
}
|
|
3997
|
-
.cc-change-tag {
|
|
3998
|
-
font-size: 10.5px;
|
|
3999
|
-
font-weight: 700;
|
|
4000
|
-
padding: 1px 7px;
|
|
4001
|
-
border-radius: 999px;
|
|
4002
|
-
}
|
|
4003
|
-
|
|
4004
|
-
/* 中心库只读详情:大头像(68px 圆角方,对齐 CcReadonlyDetail LkAvatar size=68 radius=19) */
|
|
4005
|
-
.avatar-list.cc-detail-avatar {
|
|
4006
|
-
width: 68px;
|
|
4007
|
-
height: 68px;
|
|
4008
|
-
border-radius: 19px;
|
|
4009
|
-
}
|
|
4010
|
-
.avatar-list.cc-detail-avatar .avatar-fallback {
|
|
4011
|
-
font-size: 28px;
|
|
4012
|
-
border-radius: inherit;
|
|
4013
|
-
}
|
|
4014
|
-
|
|
4015
|
-
/* 断开按钮:hover 走危险红(不可逆外发以外的破坏性操作,与 LkConnectedBlock 一致) */
|
|
4016
|
-
.csb-disconnect-btn:hover:not(:disabled) {
|
|
4017
|
-
color: var(--destructive-text);
|
|
4018
|
-
border-color: #fecaca;
|
|
4019
|
-
background: var(--destructive-weak);
|
|
4020
|
-
}
|
|
4021
|
-
|
|
4022
3568
|
/* ── Backend 身份层组件(backendKit.jsx 复刻)── */
|
|
4023
3569
|
/*
|
|
4024
3570
|
* 三轴分离颜色铁律:
|
|
@@ -4194,29 +3740,6 @@ textarea.input {
|
|
|
4194
3740
|
font-size: 12.5px;
|
|
4195
3741
|
}
|
|
4196
3742
|
|
|
4197
|
-
/* readonly 展示(中心库) */
|
|
4198
|
-
.lk-bk-readonly {
|
|
4199
|
-
display: flex;
|
|
4200
|
-
align-items: center;
|
|
4201
|
-
gap: 12px;
|
|
4202
|
-
padding: 13px 15px;
|
|
4203
|
-
border-radius: 11px;
|
|
4204
|
-
background: #f8fafc;
|
|
4205
|
-
border: 1px solid #e2e8f0;
|
|
4206
|
-
}
|
|
4207
|
-
.lk-bk-readonly-name { font-size: 14px; font-weight: 700; color: #1e293b; }
|
|
4208
|
-
.lk-bk-readonly-vendor { font-size: 12.5px; color: #64748b; margin-top: 1px; }
|
|
4209
|
-
.lk-bk-readonly-lock {
|
|
4210
|
-
display: inline-flex;
|
|
4211
|
-
align-items: center;
|
|
4212
|
-
gap: 5px;
|
|
4213
|
-
font-size: 12px;
|
|
4214
|
-
font-weight: 600;
|
|
4215
|
-
color: #94a3b8;
|
|
4216
|
-
margin-left: auto;
|
|
4217
|
-
flex-shrink: 0;
|
|
4218
|
-
}
|
|
4219
|
-
|
|
4220
3743
|
/* meta strip 5 列(原 4 列扩展;响应自动折行) */
|
|
4221
3744
|
.hero-meta.hero-meta-5 {
|
|
4222
3745
|
grid-template-columns: repeat(5, 1fr);
|
|
@@ -4256,3 +3779,32 @@ textarea.input {
|
|
|
4256
3779
|
font-size: 13px;
|
|
4257
3780
|
line-height: 1.55;
|
|
4258
3781
|
}
|
|
3782
|
+
|
|
3783
|
+
/* ── 页头 B:本机静态标识(非交互) ── */
|
|
3784
|
+
.ctx-static {
|
|
3785
|
+
display: inline-flex;
|
|
3786
|
+
align-items: center;
|
|
3787
|
+
gap: 6px;
|
|
3788
|
+
margin-left: 10px;
|
|
3789
|
+
padding: 4px 11px 4px 9px;
|
|
3790
|
+
border-radius: 999px;
|
|
3791
|
+
background: var(--bg);
|
|
3792
|
+
border: 1px solid var(--border);
|
|
3793
|
+
font-size: 12.5px;
|
|
3794
|
+
font-weight: 600;
|
|
3795
|
+
color: var(--muted);
|
|
3796
|
+
white-space: nowrap;
|
|
3797
|
+
}
|
|
3798
|
+
.ctx-static .ctx-dot {
|
|
3799
|
+
width: 6px;
|
|
3800
|
+
height: 6px;
|
|
3801
|
+
border-radius: 50%;
|
|
3802
|
+
background: var(--br);
|
|
3803
|
+
flex-shrink: 0;
|
|
3804
|
+
}
|
|
3805
|
+
.ctx-static .ctx-host {
|
|
3806
|
+
font-family: ui-monospace, "Cascadia Code", monospace;
|
|
3807
|
+
font-size: 11.5px;
|
|
3808
|
+
font-weight: 500;
|
|
3809
|
+
color: var(--faint);
|
|
3810
|
+
}
|