  .z2o-logo-anim .z2o-particles circle:nth-child(6){ animation-delay:0.40s }
  .z2o-logo-anim .z2o-particles circle:nth-child(7){ animation-delay:0.48s }
  .z2o-logo-anim .z2o-particles circle:nth-child(8){ animation-delay:0.56s }
  .z2o-logo-anim .z2o-particles circle:nth-child(9){ animation-delay:0.64s }
  .z2o-logo-anim .z2o-particles circle:nth-child(10){ animation-delay:0.72s }
  .z2o-logo-anim .z2o-particles circle:nth-child(11){ animation-delay:0.80s }
  .z2o-logo-anim .z2o-particles circle:nth-child(12){ animation-delay:0.88s }
  .z2o-logo-anim .z2o-particles circle:nth-child(13){ animation-delay:0.96s }
  .z2o-logo-anim .z2o-particles circle:nth-child(14){ animation-delay:1.04s }

/* Z2O-EXTRA-V1 —— 抽屉里补的操作条 / 相册缩略图 / 放大层（只加新类，不覆盖原样式） */
.zx-bar{display:flex;gap:6px;flex-wrap:wrap;padding:8px 2px 10px;border-bottom:1px dashed rgba(15,23,42,.14);margin-bottom:8px}
.zx-btn{display:inline-flex;align-items:center;gap:5px;border:1px solid rgba(15,23,42,.16);background:#fff;
  border-radius:6px;padding:5px 9px;font-size:12px;font-weight:600;color:#0f172a;cursor:pointer;line-height:1.2}
.zx-btn:hover{background:rgba(15,23,42,.05)}
.zx-btn.on{background:#0f766e;border-color:#0f766e;color:#fff}
.zx-btn[disabled]{opacity:.45;cursor:default}
.zx-btn svg{width:13px;height:13px;flex:none}
.zx-chat{margin:6px 0 10px;border:1px solid rgba(15,23,42,.10);border-radius:7px;overflow:hidden}
.zx-chat .h{display:flex;justify-content:space-between;padding:6px 9px;background:#f8fafc;font-size:11.5px;color:#475467;font-weight:600}
.zx-chat .r{max-height:210px;overflow:auto}
.zx-chat .row{display:flex;gap:8px;padding:5px 9px;border-top:1px solid rgba(15,23,42,.06);font-size:12px}
.zx-chat .row b{min-width:96px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.zx-chat .row span{color:#475467;font-family:ui-monospace,Menlo,monospace;font-size:11.5px}
.zx-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(86px,1fr));gap:8px;padding:6px 2px 10px}
.zx-ph{position:relative;aspect-ratio:1/1;border-radius:8px;overflow:hidden;background:#0f172a0d;
  border:1px solid rgba(15,23,42,.10);cursor:zoom-in}
.zx-ph img{width:100%;height:100%;object-fit:cover;display:block}
.zx-ph .cap{position:absolute;left:0;right:0;bottom:0;padding:2px 5px;font-size:10.5px;color:#fff;
  background:linear-gradient(transparent,rgba(0,0,0,.55));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.zx-lb{position:fixed;inset:0;z-index:9999;background:rgba(8,12,20,.86);display:flex;align-items:center;
  justify-content:center;flex-direction:column;gap:10px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.zx-lb img{max-width:92vw;max-height:82vh;border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,.5);background:#fff}
.zx-lb .bar{display:flex;gap:10px;align-items:center;color:#e2e8f0;font-size:12.5px}
.zx-lb a,.zx-lb button{color:#fff;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);
  border-radius:6px;padding:5px 11px;font-size:12px;cursor:pointer;text-decoration:none}
.zx-toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:10000;background:#0f172a;
  color:#fff;font-size:12.5px;padding:8px 14px;border-radius:8px;opacity:0;transition:opacity .18s;pointer-events:none}
.zx-toast.on{opacity:.96}

/* Z2O-CHART-V4 —— 只画访问量，但把原来的动效全带回来 */
#hbChart .zx-area{opacity:0;animation:zxAreaIn .7s .35s ease forwards}
@keyframes zxAreaIn{to{opacity:1}}
#hbChart .zx-dot{transform-box:fill-box;transform-origin:center;opacity:0;
  animation:zxDotIn .34s cubic-bezier(.2,.9,.3,1.25) forwards}
@keyframes zxDotIn{from{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}
#hbChart text.zx-v{font:800 12.5px "JetBrains Mono",ui-monospace,Menlo,monospace;fill:#0b5f57;
  paint-order:stroke;stroke:#fff;stroke-width:3.2px;stroke-linejoin:round;opacity:0;
  animation:zxTxtIn .4s ease forwards}
@keyframes zxTxtIn{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
#hbChart text.zx-y{font:600 9px "JetBrains Mono",ui-monospace,Menlo,monospace;fill:#94a3b8}

/* Z2O-LOG-V1 —— 日志面板不再刷屏：去掉按钮日志 + 合并连续重复 + 限 60 条 */
#logs .log .dup{margin-left:auto;font:700 10.5px "JetBrains Mono",monospace;color:#0f766e;
  background:rgba(15,118,110,.10);border-radius:4px;padding:0 5px;flex:none}
#logs .log .m{flex:1;min-width:0}

/* Z2O-CARD1-V1 —— 卡片1（筛选结果）行可点，样式跟主表一致 */
#twBody tr[data-i]{cursor:pointer}
#twBody tr[data-i]:hover{background:rgba(15,23,42,.035)}

/* Z2O-TOPBAR-V1 —— 顶部下滑条去掉「刷新」按钮 */
#btnRefresh{display:none !important}

/* Z2O-NOTE-V2 —— 备注做成抽屉里的卡片；按钮贴在设备名右边 */
#dhTitle{display:inline-block;vertical-align:middle}
#dhNote{margin-left:7px;vertical-align:middle;display:inline-flex;align-items:center;gap:4px;
  border:1px solid rgba(15,23,42,.16);background:#fff;border-radius:6px;
  padding:2px 7px;font-size:11px;font-weight:600;color:#0f172a;cursor:pointer;line-height:1.3}
#dhNote:hover{background:rgba(15,23,42,.05)}
#dhNote svg{width:11px;height:11px;flex:none}
#dhNote.on{background:#0f766e;border-color:#0f766e;color:#fff}
#zxNoteCard{margin:0 0 10px}
#zxNoteCard .zx-note-ta{width:100%;box-sizing:border-box;min-height:56px;resize:vertical;
  border:1px solid rgba(15,23,42,.14);border-radius:6px;padding:7px 9px;font:12.5px/1.6 var(--font-body);
  background:#fff;color:#0f172a;outline:none}
#zxNoteCard .zx-note-ta:focus{border-color:#0f766e;box-shadow:0 0 0 2px rgba(15,118,110,.12)}
#zxNoteCard .zx-note-bar{display:flex;gap:6px;margin-top:6px}
#zxNoteCard .zx-note-btn{border:1px solid rgba(15,23,42,.16);background:#fff;border-radius:6px;
  padding:4px 10px;font-size:11.5px;font-weight:600;cursor:pointer;color:#0f172a;line-height:1.3}
#zxNoteCard .zx-note-btn:hover{background:rgba(15,23,42,.05)}
#zxNoteCard .zx-note-btn.primary{background:#0f766e;border-color:#0f766e;color:#fff}
#zxNoteCard .zx-note-btn.primary:hover{background:#0b5f57}
#zxNoteCard .zx-note-btn[disabled]{opacity:.5;cursor:default}
#zxNoteCard .zx-note-tip{font-size:11px;color:#94a3b8;margin-left:auto;align-self:center}

/* Z2O-LOADING-V1 —— 主面板首次加载：居中播品牌动画图标（与抽屉展开时同一份克隆逻辑） */
#zxMainLoad{position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;
  background:rgba(238,243,250,.72);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  opacity:0;transition:opacity .28s ease;pointer-events:none}
#zxMainLoad.on{opacity:1}
#zxMainLoad .zx-ml-box{display:flex;align-items:center;justify-content:center;
  width:auto;height:auto;border-radius:0;background:none;box-shadow:none}
#zxMainLoad svg{width:44px;height:44px;display:block;overflow:visible}

.zsys-cell{display:flex;flex-direction:column;gap:2px;line-height:1.25}
.zsys-note{font-size:10.5px;color:#8c97a8;letter-spacing:.2px;max-width:190px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.zsys-note::before{content:"备注 ";color:#b6bfcc}
.zsys-sys{display:inline-block}

#zw5root{margin:0 0 14px}
.zw5-apps{margin:0 0 14px}
.zw5-at{font-size:10px;font-weight:600;color:var(--ink-3,#6b7280);letter-spacing:.14em;
  text-transform:uppercase;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.zw5-at em{font-style:normal;letter-spacing:0;text-transform:none;font-weight:500;
  font-size:11px;color:var(--ink-3,#9ca3af)}
.zw5-chips{display:flex;flex-wrap:wrap;gap:6px}
.zw5-app{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 9px;border-radius:6px;
  font-size:11.5px;font-weight:500;border:1px solid var(--line-2,#e5e7eb);
  background:#fff;color:var(--ink-2,#475569)}
.zw5-app i{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.75}
.zw5-app em{font-style:normal;color:var(--ink-3,#9ca3af);font-size:10.5px}
.zw5-app.ok{background:#ecfdf5;border-color:#a7f3d0;color:#0f766e}
.zw5-app.wait{background:#fffbeb;border-color:#fde68a;color:#b45309}
.zw5-app.none{background:rgba(15,23,42,.03);border-color:var(--line-2,#e5e7eb);color:#94a3b8}
.zw5-hd{display:flex;align-items:center;justify-content:space-between;margin:0 0 8px}
.zw5-hd b{font-size:10px;font-weight:600;color:var(--ink-3,#6b7280);letter-spacing:.14em;text-transform:uppercase}
.zw5-rf{font-size:11.5px;color:#0f766e;cursor:pointer;padding:3px 9px;border-radius:6px;
  border:1px solid rgba(15,118,110,.22);background:rgba(15,118,110,.05);transition:.14s}
.zw5-rf:hover{background:rgba(15,118,110,.10);border-color:rgba(15,118,110,.38)}
.zw5-card{border:1px solid var(--line-2,#e5e7eb);border-radius:8px;background:#fff;
  padding:10px 12px;margin-bottom:8px;box-shadow:0 1px 2px rgba(15,23,42,.04);transition:.16s}
.zw5-card:hover{box-shadow:0 4px 14px rgba(15,23,42,.08);border-color:#cbd5e1}
.zw5-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.zw5-nm{font-size:12.5px;font-weight:600;color:var(--ink,#111827)}
.zw5-chip{font-size:11px;font-weight:600;padding:2px 8px;border-radius:5px;border:1px solid transparent}
.zw5-chip.ok{background:#ecfdf5;color:#0f766e;border-color:#a7f3d0}
.zw5-chip.wait{background:#fffbeb;color:#b45309;border-color:#fde68a}
.zw5-chip.none{background:rgba(15,23,42,.04);color:#94a3b8;border-color:rgba(15,23,42,.06)}
.zw5-chip.run{background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe}
.zw5-meta{margin-top:5px;font-size:11.5px;color:var(--ink-3,#94a3b8);line-height:1.55;
  font-family:var(--font-mono,ui-monospace,Menlo,monospace);word-break:break-all}
.zw5-mn{margin-top:8px;font:11.5px/1.6 ui-monospace,Menlo,monospace;color:#1e293b;
  background:rgba(15,23,42,.03);border:1px solid var(--line-2,#e5e7eb);border-radius:6px;
