@huaqiu/dsh-tool-plugin-update 0.6.7 → 0.6.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.
@@ -127,8 +127,12 @@ const ENTRY_CSS_TEXT = `
127
127
  text-align: center;
128
128
  font-variant-numeric: tabular-nums;
129
129
  }
130
- /* Collapsed rail: icon-only, centered — same 36px square the shell uses. */
130
+ /* Collapsed rail: icon-only, centered — same 36px square the shell uses.
131
+ The update-count badge moves to the button's bottom-right corner. The
132
+ sidebar-entry helper only renders the badge element while count > 0, so a
133
+ zero count shows a bare icon with no dot. */
131
134
  [data-sidebar-collapsed] .hqpu-sidebar-entry {
135
+ position: relative;
132
136
  justify-content: center;
133
137
  width: 36px;
134
138
  height: 36px;
@@ -139,10 +143,25 @@ const ENTRY_CSS_TEXT = `
139
143
  width: 18px;
140
144
  height: 18px;
141
145
  }
142
- [data-sidebar-collapsed] .hqpu-sidebar-entry__label,
143
- [data-sidebar-collapsed] .hqpu-sidebar-entry__badge {
146
+ [data-sidebar-collapsed] .hqpu-sidebar-entry__label {
144
147
  display: none;
145
148
  }
149
+ [data-sidebar-collapsed] .hqpu-sidebar-entry__badge {
150
+ /* Corner count badge: overlaps the icon's bottom-right like a notification
151
+ dot. The ring uses the rail's own fill (HuaQiu override when the theme is
152
+ mounted, shell layer-1 otherwise) so it reads on any sidebar surface. */
153
+ position: absolute;
154
+ right: 0;
155
+ bottom: 0;
156
+ min-width: 14px;
157
+ height: 14px;
158
+ padding: 0 3px;
159
+ border-radius: 7px;
160
+ font-size: 9px;
161
+ line-height: 14px;
162
+ box-shadow: 0 0 0 1.5px var(--dsw-specific-sidebar-fill, var(--dsw-alias-bg-layer-1));
163
+ transform: translate(12%, 12%);
164
+ }
146
165
  `
147
166
 
148
167
  /**
@@ -884,10 +903,668 @@ const VIEW_CSS_TEXT = `
884
903
  .hqpu-panel,
885
904
  .hqpu-skeleton-fill,
886
905
  .hqpu-spinner,
887
- .hqpu-toast {
906
+ .hqpu-toast,
907
+ .hqpu-pulse-ring,
908
+ .hqpu-job-step--active {
888
909
  animation: none;
889
910
  }
890
911
  }
912
+
913
+ /* ════════════════════════════════════════════════════════════════════════
914
+ * Refactored dock (interactive_refactored_ui_mockup.html) — a fluid
915
+ * update-center column. These rules cascade over the shell-token base: the
916
+ * panel takes the available width (up to 720px), every colour is a
917
+ * --dsw-alias-* token so light/dark follow the shell's
918
+ * body[data-ds-dark-theme] and the brand follows the HuaQiu theme overrides,
919
+ * with a sticky header / scroll body / sticky footer. No Tailwind, no
920
+ * dependencies.
921
+ * ════════════════════════════════════════════════════════════════════════ */
922
+ .hqpu-panel,
923
+ .hqpu-panel * {
924
+ /* Every colour rides a shell theme token, so light/dark follow
925
+ * body[data-ds-dark-theme] automatically. The brand tokens are exactly the
926
+ * ones @huaqiu/dsh-ui-theme-huaqiu overrides (light #C7000B / dark #FF6B74),
927
+ * so the dock honours the HuaQiu brand scheme in both themes without knowing
928
+ * which theme is active. */
929
+ --hq-bg: var(--dsw-alias-bg-layer-1);
930
+ --hq-card: var(--dsw-alias-bg-layer-2);
931
+ --hq-card-soft: var(--dsw-alias-bg-overlay);
932
+ --hq-border: var(--dsw-alias-border-l2);
933
+ --hq-border-strong: var(--dsw-alias-border-l3);
934
+ --hq-hover: var(--dsw-alias-interactive-bg-hover);
935
+ --hq-text: var(--dsw-alias-label-primary);
936
+ --hq-text-strong: var(--dsw-alias-label-primary);
937
+ --hq-text-code: var(--dsw-alias-label-secondary);
938
+ --hq-muted: var(--dsw-alias-label-secondary);
939
+ --hq-faint: var(--dsw-alias-label-tertiary);
940
+ --hq-brand: var(--dsw-alias-brand-primary);
941
+ --hq-brand-soft: var(--dsw-alias-button-primary-hover);
942
+ --hq-brand-dim: var(--dsw-alias-button-primary-dimmed);
943
+ --hq-brand-fg: var(--dsw-alias-brand-primary-invert);
944
+ --hq-emerald: var(--dsw-alias-state-success-primary);
945
+ --hq-amber: var(--dsw-alias-state-warn-primary);
946
+ --hq-rose: var(--dsw-alias-state-error-primary);
947
+ }
948
+ .hqpu-panel {
949
+ width: min(360px, calc(100vw - 32px));
950
+ max-height: min(86vh, 720px);
951
+ background: var(--hq-bg);
952
+ color: var(--hq-text);
953
+ border: 0.5px solid var(--hq-border);
954
+ border-radius: 12px;
955
+ gap: 0;
956
+ overflow: hidden;
957
+ }
958
+ .hqpu-scrim {
959
+ background: var(--dsw-alias-bg-mask-3);
960
+ }
961
+
962
+ /* Sticky header */
963
+ .hqpu-head {
964
+ flex: none;
965
+ display: flex;
966
+ align-items: center;
967
+ justify-content: space-between;
968
+ gap: 8px;
969
+ padding: 10px 12px;
970
+ border-bottom: 0.5px solid var(--hq-border);
971
+ background: color-mix(in srgb, var(--hq-bg) 95%, transparent);
972
+ position: sticky;
973
+ top: 0;
974
+ z-index: 2;
975
+ }
976
+ .hqpu-head-main {
977
+ display: flex;
978
+ align-items: center;
979
+ gap: 8px;
980
+ min-width: 0;
981
+ margin: 0;
982
+ }
983
+ .hqpu-brand-icon {
984
+ display: flex;
985
+ align-items: center;
986
+ justify-content: center;
987
+ flex: none;
988
+ width: 24px;
989
+ height: 24px;
990
+ border-radius: 6px;
991
+ background: color-mix(in srgb, var(--hq-brand) 20%, transparent);
992
+ color: var(--hq-brand-soft);
993
+ }
994
+ .hqpu-brand-icon svg { width: 14px; height: 14px; display: block; }
995
+ .hqpu-title-block { min-width: 0; }
996
+ .hqpu-title {
997
+ margin: 0;
998
+ font-size: 13px;
999
+ font-weight: 600;
1000
+ line-height: 16px;
1001
+ color: var(--hq-text);
1002
+ }
1003
+ .hqpu-sub {
1004
+ margin: 2px 0 0;
1005
+ font-size: 10px;
1006
+ line-height: 14px;
1007
+ color: var(--hq-muted);
1008
+ white-space: nowrap;
1009
+ overflow: hidden;
1010
+ text-overflow: ellipsis;
1011
+ }
1012
+ .hqpu-toolbar { gap: 2px; }
1013
+ .hqpu-icon-btn {
1014
+ width: 26px;
1015
+ height: 26px;
1016
+ border-radius: 6px;
1017
+ color: var(--hq-muted);
1018
+ }
1019
+ .hqpu-icon-btn:hover:not(:disabled) {
1020
+ background: var(--hq-hover);
1021
+ color: var(--hq-text);
1022
+ }
1023
+ .hqpu-icon-btn svg { width: 14px; height: 14px; }
1024
+
1025
+ /* Collapsible settings panel */
1026
+ .hqpu-settings {
1027
+ flex: none;
1028
+ padding: 10px 12px;
1029
+ border-bottom: 0.5px solid var(--hq-border);
1030
+ background: var(--hq-card-soft);
1031
+ }
1032
+ .hqpu-settings-row {
1033
+ display: flex;
1034
+ align-items: center;
1035
+ justify-content: space-between;
1036
+ gap: 8px;
1037
+ margin-bottom: 8px;
1038
+ }
1039
+ .hqpu-settings-title {
1040
+ font-size: 11px;
1041
+ font-weight: 500;
1042
+ color: var(--hq-text-code);
1043
+ }
1044
+ .hqpu-origin-badge {
1045
+ font-size: 9px;
1046
+ padding: 1px 6px;
1047
+ border-radius: 4px;
1048
+ border: 0.5px solid;
1049
+ }
1050
+ .hqpu-origin-badge[data-origin='config'] {
1051
+ background: color-mix(in srgb, var(--dsw-alias-state-success-tertiary) 55%, transparent);
1052
+ color: var(--hq-emerald);
1053
+ border-color: color-mix(in srgb, var(--hq-emerald) 40%, transparent);
1054
+ }
1055
+ .hqpu-origin-badge[data-origin='override'] {
1056
+ background: color-mix(in srgb, var(--dsw-alias-state-warn-tertiary) 55%, transparent);
1057
+ color: var(--hq-amber);
1058
+ border-color: color-mix(in srgb, var(--hq-amber) 40%, transparent);
1059
+ }
1060
+ .hqpu-settings label {
1061
+ display: block;
1062
+ font-size: 10px;
1063
+ color: var(--hq-muted);
1064
+ margin: 6px 0 3px;
1065
+ }
1066
+ .hqpu-source-input {
1067
+ width: 100%;
1068
+ height: 26px;
1069
+ font-size: 10px;
1070
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1071
+ background: var(--hq-bg);
1072
+ border: 0.5px solid var(--hq-border);
1073
+ border-radius: 5px;
1074
+ color: var(--hq-text-code);
1075
+ padding: 0 8px;
1076
+ box-sizing: border-box;
1077
+ }
1078
+ .hqpu-source-input:focus-visible {
1079
+ outline: none;
1080
+ border-color: var(--hq-brand-soft);
1081
+ }
1082
+ .hqpu-settings-actions {
1083
+ display: flex;
1084
+ justify-content: flex-end;
1085
+ gap: 6px;
1086
+ margin-top: 8px;
1087
+ }
1088
+
1089
+ /* Scroll body */
1090
+ .hqpu-scroll {
1091
+ flex: 1;
1092
+ padding: 12px;
1093
+ background: var(--hq-bg);
1094
+ --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);
1095
+ --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);
1096
+ }
1097
+ .hqpu-column {
1098
+ max-width: none;
1099
+ margin: 0;
1100
+ gap: 10px;
1101
+ }
1102
+ .hqpu-stack { gap: 10px; }
1103
+
1104
+ /* ── Active-job banner ─────────────────────────────────────────────────── */
1105
+ .hqpu-active {
1106
+ position: relative;
1107
+ padding: 12px;
1108
+ border-radius: 8px;
1109
+ border: 0.5px solid color-mix(in srgb, var(--hq-brand-soft) 30%, transparent);
1110
+ background: var(--hq-bg);
1111
+ box-shadow: var(--dsw-elevation-prominent);
1112
+ }
1113
+ .hqpu-active-top {
1114
+ display: flex;
1115
+ align-items: center;
1116
+ justify-content: space-between;
1117
+ gap: 8px;
1118
+ }
1119
+ .hqpu-active-title {
1120
+ display: flex;
1121
+ align-items: center;
1122
+ gap: 6px;
1123
+ min-width: 0;
1124
+ font-size: 11px;
1125
+ font-weight: 600;
1126
+ color: var(--hq-text-strong);
1127
+ }
1128
+ .hqpu-pulse-dot {
1129
+ position: relative;
1130
+ flex: none;
1131
+ width: 8px;
1132
+ height: 8px;
1133
+ }
1134
+ .hqpu-pulse-dot::before {
1135
+ content: '';
1136
+ position: absolute;
1137
+ inset: 0;
1138
+ border-radius: 50%;
1139
+ background: var(--hq-brand-soft);
1140
+ }
1141
+ .hqpu-pulse-ring {
1142
+ position: absolute;
1143
+ inset: 0;
1144
+ border-radius: 50%;
1145
+ background: var(--hq-brand-soft);
1146
+ opacity: 0.6;
1147
+ animation: hqpu-ping 1.4s cubic-bezier(0, 0, 0.2, 1) infinite;
1148
+ }
1149
+ @keyframes hqpu-ping {
1150
+ 75%, 100% { transform: scale(2.2); opacity: 0; }
1151
+ }
1152
+ .hqpu-active-percent {
1153
+ flex: none;
1154
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1155
+ font-size: 11px;
1156
+ font-weight: 500;
1157
+ color: var(--hq-brand-soft);
1158
+ }
1159
+ .hqpu-progress {
1160
+ height: 6px;
1161
+ margin-top: 10px;
1162
+ border-radius: 999px;
1163
+ background: var(--hq-card);
1164
+ overflow: hidden;
1165
+ }
1166
+ .hqpu-progress-fill {
1167
+ background: linear-gradient(to right, var(--hq-brand), var(--hq-brand-soft));
1168
+ transition: width 0.3s ease;
1169
+ }
1170
+ .hqpu-active-meta {
1171
+ display: flex;
1172
+ justify-content: space-between;
1173
+ gap: 8px;
1174
+ margin-top: 4px;
1175
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1176
+ font-size: 10px;
1177
+ color: var(--hq-muted);
1178
+ }
1179
+ /* 4-step indicator row */
1180
+ .hqpu-job-steps4 {
1181
+ display: grid;
1182
+ grid-template-columns: repeat(4, 1fr);
1183
+ gap: 4px;
1184
+ margin-top: 10px;
1185
+ padding-top: 8px;
1186
+ border-top: 0.5px solid var(--hq-border);
1187
+ text-align: center;
1188
+ font-size: 9px;
1189
+ font-weight: 500;
1190
+ }
1191
+ .hqpu-job-step--done { color: var(--hq-emerald); }
1192
+ .hqpu-job-step--active {
1193
+ color: var(--hq-brand-soft);
1194
+ animation: hqpu-step-pulse 1.2s ease-in-out infinite;
1195
+ }
1196
+ .hqpu-job-step--todo { color: var(--hq-muted); }
1197
+ @keyframes hqpu-step-pulse {
1198
+ 0%, 100% { opacity: 1; }
1199
+ 50% { opacity: 0.45; }
1200
+ }
1201
+
1202
+ /* ── Result / rollback alert (amber) vs green success ──────────────────── */
1203
+ .hqpu-alert {
1204
+ display: flex;
1205
+ align-items: flex-start;
1206
+ gap: 8px;
1207
+ padding: 10px;
1208
+ border-radius: 8px;
1209
+ }
1210
+ .hqpu-alert--amber {
1211
+ background: color-mix(in srgb, var(--dsw-alias-state-warn-tertiary) 60%, transparent);
1212
+ border: 0.5px solid color-mix(in srgb, var(--hq-amber) 35%, transparent);
1213
+ }
1214
+ .hqpu-alert--amber svg { color: var(--hq-amber); flex: none; margin-top: 1px; }
1215
+ .hqpu-alert-green {
1216
+ background: color-mix(in srgb, var(--dsw-alias-state-success-tertiary) 55%, transparent);
1217
+ border: 0.5px solid color-mix(in srgb, var(--hq-emerald) 35%, transparent);
1218
+ color: var(--hq-emerald);
1219
+ font-size: 11px;
1220
+ }
1221
+ .hqpu-alert-title {
1222
+ font-size: 11px;
1223
+ font-weight: 500;
1224
+ color: var(--dsw-alias-state-warn-label);
1225
+ }
1226
+ .hqpu-alert-body {
1227
+ margin: 2px 0 0;
1228
+ font-size: 10px;
1229
+ line-height: 15px;
1230
+ color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 85%, transparent);
1231
+ }
1232
+ .hqpu-alert-body code {
1233
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1234
+ background: color-mix(in srgb, var(--hq-amber) 18%, transparent);
1235
+ padding: 1px 4px;
1236
+ border-radius: 3px;
1237
+ }
1238
+ .hqpu-alert-actions {
1239
+ display: flex;
1240
+ gap: 8px;
1241
+ margin-top: 6px;
1242
+ }
1243
+ .hqpu-alert-dismiss {
1244
+ background: none;
1245
+ border: 0;
1246
+ padding: 0;
1247
+ font-size: 10px;
1248
+ color: var(--dsw-alias-state-warn-label);
1249
+ cursor: pointer;
1250
+ text-decoration: underline;
1251
+ }
1252
+
1253
+ /* ── Runtime engine card ────────────────────────────────────────────────── */
1254
+ .hqpu-engine {
1255
+ padding: 12px;
1256
+ border-radius: 8px;
1257
+ border: 0.5px solid var(--hq-border);
1258
+ background: var(--hq-card);
1259
+ }
1260
+ .hqpu-engine-head {
1261
+ display: flex;
1262
+ align-items: center;
1263
+ justify-content: space-between;
1264
+ gap: 8px;
1265
+ }
1266
+ .hqpu-engine-title {
1267
+ display: flex;
1268
+ align-items: center;
1269
+ gap: 6px;
1270
+ font-size: 12px;
1271
+ font-weight: 600;
1272
+ color: var(--hq-text-strong);
1273
+ }
1274
+ .hqpu-engine-title svg { width: 14px; height: 14px; color: var(--hq-muted); }
1275
+ .hqpu-chip {
1276
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1277
+ font-size: 9px;
1278
+ padding: 2px 6px;
1279
+ border-radius: 4px;
1280
+ background: var(--hq-card);
1281
+ border: 0.5px solid var(--hq-border-strong);
1282
+ color: var(--hq-text-code);
1283
+ }
1284
+ .hqpu-engine-update-row {
1285
+ display: flex;
1286
+ align-items: center;
1287
+ justify-content: space-between;
1288
+ gap: 8px;
1289
+ margin-top: 10px;
1290
+ padding: 8px;
1291
+ border-radius: 6px;
1292
+ border: 0.5px solid color-mix(in srgb, var(--hq-border) 70%, transparent);
1293
+ background: color-mix(in srgb, var(--hq-card) 60%, transparent);
1294
+ }
1295
+ .hqpu-engine-new-line {
1296
+ display: flex;
1297
+ align-items: center;
1298
+ gap: 4px;
1299
+ font-size: 11px;
1300
+ font-weight: 500;
1301
+ color: var(--hq-text-code);
1302
+ }
1303
+ .hqpu-tag--brand {
1304
+ font-size: 9px;
1305
+ padding: 1px 4px;
1306
+ border-radius: 3px;
1307
+ color: var(--hq-brand-soft);
1308
+ background: color-mix(in srgb, var(--hq-brand-dim) 60%, transparent);
1309
+ border: 0.5px solid color-mix(in srgb, var(--hq-brand) 45%, transparent);
1310
+ }
1311
+ .hqpu-engine-size {
1312
+ margin: 3px 0 0;
1313
+ font-size: 10px;
1314
+ color: var(--hq-muted);
1315
+ overflow: hidden;
1316
+ text-overflow: ellipsis;
1317
+ white-space: nowrap;
1318
+ }
1319
+ .hqpu-btn--engine {
1320
+ flex: none;
1321
+ height: auto;
1322
+ padding: 6px 10px;
1323
+ font-size: 10px;
1324
+ background: var(--hq-card);
1325
+ border: 0.5px solid var(--hq-border-strong);
1326
+ color: var(--hq-text-strong);
1327
+ border-radius: 5px;
1328
+ }
1329
+ .hqpu-btn--engine:hover:not(:disabled) { background: var(--hq-border); }
1330
+ .hqpu-engine-note {
1331
+ display: flex;
1332
+ align-items: center;
1333
+ gap: 4px;
1334
+ margin: 8px 0 0;
1335
+ font-size: 9px;
1336
+ color: var(--hq-muted);
1337
+ }
1338
+ .hqpu-engine-note svg { width: 10px; height: 10px; color: var(--hq-amber); flex: none; }
1339
+
1340
+ /* ── Plugin cards ───────────────────────────────────────────────────────── */
1341
+ .hqpu-section-head {
1342
+ display: flex;
1343
+ align-items: center;
1344
+ justify-content: space-between;
1345
+ gap: 8px;
1346
+ padding: 0 2px;
1347
+ }
1348
+ .hqpu-section-title {
1349
+ display: flex;
1350
+ align-items: center;
1351
+ gap: 6px;
1352
+ font-size: 12px;
1353
+ font-weight: 600;
1354
+ color: var(--hq-text-strong);
1355
+ }
1356
+ .hqpu-count-pill {
1357
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1358
+ font-size: 10px;
1359
+ font-weight: 700;
1360
+ padding: 1px 6px;
1361
+ border-radius: 999px;
1362
+ background: color-mix(in srgb, var(--hq-brand) 20%, transparent);
1363
+ color: var(--hq-brand-soft);
1364
+ }
1365
+ .hqpu-all-changelog {
1366
+ background: none;
1367
+ border: 0;
1368
+ padding: 0;
1369
+ font-size: 10px;
1370
+ color: var(--hq-muted);
1371
+ cursor: pointer;
1372
+ }
1373
+ .hqpu-all-changelog:hover { color: var(--hq-text); }
1374
+
1375
+ .hqpu-cards {
1376
+ gap: 8px;
1377
+ display: grid;
1378
+ grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
1379
+ align-items: start;
1380
+ }
1381
+ .hqpu-card {
1382
+ margin: 0;
1383
+ padding: 10px;
1384
+ border-radius: 8px;
1385
+ border: 0.5px solid var(--hq-border);
1386
+ background: var(--hq-card);
1387
+ transition: border-color 0.15s ease;
1388
+ }
1389
+ .hqpu-card:hover { border-color: var(--hq-border-strong); }
1390
+ .hqpu-card-head {
1391
+ display: flex;
1392
+ align-items: flex-start;
1393
+ justify-content: space-between;
1394
+ gap: 8px;
1395
+ padding: 0;
1396
+ }
1397
+ .hqpu-card-head > * { display: flex; align-items: center; gap: 8px; min-width: 0; }
1398
+ .hqpu-avatar {
1399
+ display: flex;
1400
+ align-items: center;
1401
+ justify-content: center;
1402
+ flex: none;
1403
+ width: 28px;
1404
+ height: 28px;
1405
+ border-radius: 6px;
1406
+ border: 0.5px solid var(--hq-border-strong);
1407
+ background: var(--hq-card);
1408
+ color: var(--hq-text-code);
1409
+ font-size: 10px;
1410
+ font-weight: 700;
1411
+ }
1412
+ .hqpu-card-title {
1413
+ font-size: 12px;
1414
+ font-weight: 600;
1415
+ color: var(--hq-text-strong);
1416
+ }
1417
+ .hqpu-card-sub {
1418
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1419
+ font-size: 9px;
1420
+ color: var(--hq-faint);
1421
+ }
1422
+ .hqpu-version-row {
1423
+ display: flex;
1424
+ align-items: center;
1425
+ gap: 4px;
1426
+ margin-top: 2px;
1427
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1428
+ font-size: 10px;
1429
+ }
1430
+ .hqpu-ver-old { color: var(--hq-muted); }
1431
+ .hqpu-ver-arrow { color: var(--hq-border-strong); }
1432
+ .hqpu-ver-new { color: var(--hq-emerald); font-weight: 700; }
1433
+ .hqpu-log-toggle {
1434
+ display: inline-flex;
1435
+ align-items: center;
1436
+ gap: 2px;
1437
+ background: none;
1438
+ border: 0;
1439
+ padding: 4px;
1440
+ font-size: 10px;
1441
+ color: var(--hq-muted);
1442
+ cursor: pointer;
1443
+ }
1444
+ .hqpu-log-toggle:hover { color: var(--hq-text); }
1445
+ .hqpu-log-toggle svg { width: 12px; height: 12px; transition: transform 0.15s ease; }
1446
+ .hqpu-log-toggle[data-open='true'] svg { transform: rotate(180deg); }
1447
+ .hqpu-changelog-drawer {
1448
+ margin-top: 8px;
1449
+ padding: 8px;
1450
+ border-radius: 6px;
1451
+ border: 0.5px solid var(--hq-border);
1452
+ background: color-mix(in srgb, var(--hq-card) 80%, transparent);
1453
+ font-size: 10px;
1454
+ }
1455
+ .hqpu-changelog-drawer-title {
1456
+ font-size: 9px;
1457
+ font-weight: 500;
1458
+ text-transform: uppercase;
1459
+ letter-spacing: 0.05em;
1460
+ color: var(--hq-muted);
1461
+ }
1462
+ .hqpu-changelog-drawer ul {
1463
+ margin: 4px 0 0;
1464
+ padding-left: 16px;
1465
+ color: var(--hq-text-code);
1466
+ line-height: 16px;
1467
+ }
1468
+
1469
+ /* Blocked / incompatible card: dimmed, rose badge, no install button */
1470
+ .hqpu-card--blocked {
1471
+ opacity: 0.8;
1472
+ background: color-mix(in srgb, var(--hq-card) 60%, transparent);
1473
+ border-color: var(--hq-border);
1474
+ }
1475
+ .hqpu-card--blocked .hqpu-avatar {
1476
+ background: color-mix(in srgb, var(--hq-card) 50%, transparent);
1477
+ border-color: var(--hq-border);
1478
+ color: var(--hq-faint);
1479
+ }
1480
+ .hqpu-card--blocked .hqpu-card-title { color: var(--hq-muted); }
1481
+ .hqpu-blocked-badge {
1482
+ font-size: 9px;
1483
+ padding: 2px 6px;
1484
+ border-radius: 4px;
1485
+ color: var(--hq-rose);
1486
+ background: color-mix(in srgb, var(--hq-rose) 18%, transparent);
1487
+ border: 0.5px solid color-mix(in srgb, var(--hq-rose) 40%, transparent);
1488
+ }
1489
+ .hqpu-reason-line {
1490
+ display: flex;
1491
+ align-items: flex-start;
1492
+ gap: 4px;
1493
+ margin: 8px 0 0;
1494
+ padding: 6px;
1495
+ border-radius: 5px;
1496
+ border: 0.5px solid color-mix(in srgb, var(--hq-rose) 20%, transparent);
1497
+ background: color-mix(in srgb, var(--hq-rose) 8%, transparent);
1498
+ font-size: 10px;
1499
+ color: var(--hq-rose);
1500
+ }
1501
+ .hqpu-reason-line svg { width: 12px; height: 12px; flex: none; margin-top: 1px; }
1502
+
1503
+ /* Sticky footer */
1504
+ .hqpu-footer {
1505
+ flex: none;
1506
+ display: flex;
1507
+ flex-direction: column;
1508
+ align-items: stretch;
1509
+ gap: 8px;
1510
+ padding: 10px 12px 12px;
1511
+ border-top: 0.5px solid var(--hq-border);
1512
+ background: color-mix(in srgb, var(--hq-bg) 95%, transparent);
1513
+ }
1514
+ .hqpu-foot-meta {
1515
+ display: flex;
1516
+ align-items: center;
1517
+ justify-content: space-between;
1518
+ gap: 8px;
1519
+ font-size: 10px;
1520
+ color: var(--hq-muted);
1521
+ }
1522
+ .hqpu-foot-set {
1523
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1524
+ }
1525
+ .hqpu-foot-actions {
1526
+ display: flex;
1527
+ gap: 8px;
1528
+ }
1529
+ .hqpu-btn--block {
1530
+ flex: 1;
1531
+ height: 32px;
1532
+ background: var(--hq-brand);
1533
+ color: var(--hq-brand-fg);
1534
+ font-size: 11px;
1535
+ font-weight: 500;
1536
+ border-radius: 6px;
1537
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--hq-brand) 40%, transparent);
1538
+ }
1539
+ .hqpu-btn--block:hover:not(:disabled) { background: var(--hq-brand-soft); }
1540
+ .hqpu-btn--block:disabled { opacity: 0.5; box-shadow: none; }
1541
+ .hqpu-btn--ignore {
1542
+ height: 32px;
1543
+ padding: 0 10px;
1544
+ background: var(--hq-card);
1545
+ border: 0.5px solid var(--hq-border);
1546
+ color: var(--hq-muted);
1547
+ font-size: 10px;
1548
+ border-radius: 6px;
1549
+ }
1550
+ .hqpu-btn--ignore:hover:not(:disabled) { background: var(--hq-hover); color: var(--hq-text); }
1551
+ .hqpu-footnote {
1552
+ margin: 0;
1553
+ font-size: 9px;
1554
+ text-align: center;
1555
+ color: var(--hq-muted);
1556
+ }
1557
+
1558
+ /* Shared bits on the new palette */
1559
+ .hqpu-status { color: var(--hq-muted); font-size: 11px; }
1560
+ .hqpu-empty { color: var(--hq-muted); font-size: 11px; padding: 16px 0; }
1561
+ .hqpu-toast { background: var(--hq-card); border: 0.5px solid var(--hq-border); color: var(--hq-text); font-size: 12px; }
1562
+ .hqpu-skeleton-fill { background: var(--hq-border); }
1563
+ .hqpu-job { background: var(--hq-card); border-color: var(--hq-border); }
1564
+ .hqpu-job-meta { color: var(--hq-muted); }
1565
+ .hqpu-release-notes { color: var(--hq-muted); font-size: 11px; }
1566
+ .hqpu-advanced > summary { color: var(--hq-muted); }
1567
+ .hqpu-recent-jobs li { color: var(--hq-muted); font-size: 10px; }
891
1568
  `
892
1569
 
893
1570
  const STYLE_TAG_ID = 'data-plugin-css="huaqiu-plugin-update"'