    /* ========== 深空暗霓 Deep Space Dark Neon ========== */
    :root {
      --bg-0: #05070f;
      --bg-1: #0a1020;
      --bg-2: #0f1a2e;
      --neon-cyan: #00e5ff;
      --neon-purple: #b14bff;
      --neon-pink: #ff3ea5;
      --neon-blue: #2b7bff;
      --text-0: #e8f1ff;
      --text-1: #9db0cc;
      --text-2: #64748b;
      --grid: rgba(0,229,255,0.07);
      --card: rgba(16, 26, 48, 0.92);
      --card-border: rgba(0,229,255,0.18);
      --glow: 0 0 18px rgba(0,229,255,0.25), 0 0 48px rgba(177,75,255,0.08);
    }
    * {
      box-sizing: border-box;
      margin: 0;
      padding: 0
    }

    html,
    body {
      height: 100%
    }

    body {
      font-family: system-ui, -apple-system, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
      background: var(--bg-0);
      color: var(--text-0);
      padding: 0;
      height: 100vh;
      overflow: hidden;
      position: relative;
      -webkit-font-smoothing: antialiased;
    }
    /* 背景三层 */
    .bg-layer{position:fixed;inset:0;z-index:-3;
      background:
        radial-gradient(1200px 800px at 12% -10%, rgba(43,123,255,0.18), transparent 60%),
        radial-gradient(1000px 700px at 100% 10%, rgba(177,75,255,0.16), transparent 60%),
        radial-gradient(800px 600px at 50% 120%, rgba(0,229,255,0.14), transparent 60%),
        linear-gradient(180deg, #04060c 0%, #050914 50%, #040811 100%);
    }
    .bg-grid{position:fixed;inset:0;z-index:-2;pointer-events:none;
      background-image:
        linear-gradient(var(--grid) 1px, transparent 1px),
        linear-gradient(90deg, var(--grid) 1px, transparent 1px);
      background-size:48px 48px,48px 48px;
      mask-image:radial-gradient(ellipse at 50% 40%, black 40%, transparent 85%);
      -webkit-mask-image:radial-gradient(ellipse at 50% 40%, black 40%, transparent 85%);
    }
    .bg-stars{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.55;
      background-image:
        radial-gradient(1px 1px at 10% 20%, rgba(255,255,255,0.8), transparent 50%),
        radial-gradient(1px 1px at 80% 40%, rgba(0,229,255,0.9), transparent 50%),
        radial-gradient(1.5px 1.5px at 30% 80%, rgba(177,75,255,0.8), transparent 50%),
        radial-gradient(1px 1px at 60% 10%, rgba(255,62,165,0.7), transparent 50%),
        radial-gradient(1px 1px at 90% 75%, rgba(255,255,255,0.7), transparent 50%),
        radial-gradient(1.5px 1.5px at 20% 55%, rgba(0,229,255,0.6), transparent 50%);
    }

    .app {
      display: grid;
      grid-template-columns: 400px 1fr;
      height: 100vh;
      gap: 0;
      position: relative;
      z-index: 1;
    }

    /* 左侧边栏：凭证 + 拖拽 + 上传控件 + 状态栏 */
    .sidebar {
      background: rgba(16,26,48,0.80);
      border-right: 1px solid var(--card-border);
      display: flex;
      flex-direction: column;
      min-height: 0;
      position: relative
    }
    .sidebar-scroll {
      overflow-y: auto;
      padding: 14px 14px 14px;
      display: flex;
      flex-direction: column;
      gap: 10px;
      flex: 1;
      min-height: 0
    }
    .sidebar-scroll::-webkit-scrollbar{width:8px}
    .sidebar-scroll::-webkit-scrollbar-thumb{background:rgba(0,229,255,0.18);border-radius:4px}
    .sidebar-scroll::-webkit-scrollbar-thumb:hover{background:rgba(0,229,255,0.32)}
    /* 左侧底部状态栏（替代原来全局底部操作栏） */
    .sb-action {
      background: rgba(10,16,32,0.9);
      border-top: 1px solid var(--card-border);
      padding: 10px 14px 12px;
      z-index: 10
    }

    .sidebar h1 {
      font-size: 18px;
      margin: 4px 2px 10px;
      line-height: 1.4;
      color: var(--text-0);
      letter-spacing: .3px;
    }

    .btn-home {
      position: absolute; top: 10px; right: 12px; z-index: 20;
      background: linear-gradient(135deg, var(--neon-purple), var(--neon-cyan));
      color: #02101a;
      text-decoration: none;
      padding: 5px 11px;
      border-radius: 9px;
      font-size: 12px;
      font-weight: 700;
      box-shadow: 0 3px 12px rgba(177,75,255,.35);
      display: inline-flex; align-items: center; gap: 5px;
      transition: all .15s;
    }
    .btn-home:hover { transform: translateY(-1px); box-shadow: 0 5px 18px rgba(177,75,255,.5); }

    /* 右侧主区：云端 / 本地两个大面板 */
    .main {
      display: flex;
      flex-direction: column;
      overflow: hidden;
      padding: 12px;
      gap: 10px;
      background: transparent;
    }

    .panels {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 10px;
      flex: 1;
      min-height: 0
    }

    .panel {
      background: var(--card);
      border-radius: 10px;
      border: 1px solid var(--card-border);
      display: flex;
      flex-direction: column;
      min-height: 0;
      overflow: hidden
    }

    .panel-hd {
      border-bottom: 1px solid var(--card-border);
      flex-shrink: 0
    }

    .panel-bd {
      flex: 1;
      min-height: 0;
      padding: 0;
      overflow: hidden;
      display: flex;
      flex-direction: column
    }

    /* 统一滚动容器样式（remote-wrap 不再自身滚动） */
    .unified-scroll { scroll-behavior: smooth }
    .unified-scroll::-webkit-scrollbar { width: 10px }
    .unified-scroll::-webkit-scrollbar-thumb { background: rgba(0,229,255,0.18); border-radius: 5px }
    .unified-scroll::-webkit-scrollbar-thumb:hover { background: rgba(0,229,255,0.32) }
    .remote-wrap {
      flex: 1;
      max-height: none !important;
      min-height: 0 !important;
      height: auto !important;
      overflow: visible !important
    }
    .list {
      flex: 1;
      max-height: none !important;
      min-height: 0 !important;
      height: 100% !important;
      scroll-behavior: smooth
    }

    /* 差异高亮：不再用行背景色，改用文件名文字颜色 */

    /* 文件行选中态（多选拖拽前视觉提示） */
    .remote-tbl tr.file-selected > td,
    .local-tbl tr.file-selected > td {
      background: rgba(52,199,89,.14) !important;
      box-shadow: inset 2px 0 0 #34c759;
    }
    /* 拖拽目标高亮：文件夹头行作为 drop target 时 */
    .remote-tbl tr.dir-header-row.drop-target > td,
    .local-tbl tr.dir-header-row.drop-target > td {
      outline: 2px dashed var(--neon-cyan);
      outline-offset: -2px;
      cursor: copy !important;
    }
    /* 拖拽时文件行光标 */
    .remote-tbl tr.dir-child-row[draggable="true"],
    .local-tbl tr.dir-child-row[draggable="true"] {
      cursor: grab;
    }
    .remote-tbl tr.dir-child-row[draggable="true"]:active,
    .local-tbl tr.dir-child-row[draggable="true"]:active {
      cursor: grabbing;
    }

    .row-link-btn {
      border: 1px solid var(--card-border);
      background: rgba(16,26,48,0.6);
      color: var(--text-1);
      border-radius: 6px;
      font-size: 11px;
      padding: 2px 7px;
      cursor: pointer;
      transition: all .15s;
      vertical-align: middle;
      margin-left: 4px
    }
    .row-link-btn:hover {
      background: linear-gradient(135deg, var(--neon-cyan), var(--neon-blue));
      border-color: transparent;
      color: #02101a;
      box-shadow: 0 0 10px rgba(0,229,255,0.35)
    }

    /* 本地面板内的小操作按钮（lbtn）：超紧凑小方块 */
    .remote-tbl .lbtn,
    .local-tbl .lbtn {
      display: inline-block;
      width: 16px;
      height: 16px;
      line-height: 14px;
      text-align: center;
      border-radius: 3px;
      border: 1px solid var(--card-border);
      background: rgba(10,16,32,0.6);
      color: var(--text-1);
      padding: 0;
      margin: 0;
      cursor: pointer;
      font-size: 9.5px;
      vertical-align: middle;
      transition: all .12s;
      flex-shrink: 0
    }
    .local-tbl .lbtn-up { color: var(--neon-cyan); border-color: rgba(0,229,255,.3); background: rgba(0,229,255,.08) }
    .local-tbl .lbtn-up:hover { background: var(--neon-cyan); color: #02101a; box-shadow: 0 0 8px rgba(0,229,255,.5) }
    .local-tbl .lbtn-vf { color: #34c759; border-color: rgba(52,199,89,.3); background: rgba(52,199,89,.08) }
    .local-tbl .lbtn-vf:hover { background: #34c759; color: #02101a; box-shadow: 0 0 8px rgba(52,199,89,.5) }
    .local-tbl .lbtn-tg { color: var(--neon-blue); border-color: rgba(43,123,255,.3); background: rgba(43,123,255,.08) }
    .local-tbl .lbtn-tg:hover { background: var(--neon-blue); color: #fff; box-shadow: 0 0 8px rgba(43,123,255,.5) }
    .local-tbl .lbtn-rm { color: #ff4d5a; border-color: rgba(255,77,90,.3); background: rgba(255,77,90,.08) }
    .local-tbl .lbtn-rm:hover { background: #ff4d5a; color: #fff; box-shadow: 0 0 8px rgba(255,77,90,.5) }
    .remote-tbl .lbtn-del { color: #ff4d5a; border-color: rgba(255,77,90,.3); background: rgba(255,77,90,.08) }
    .remote-tbl .lbtn-del:hover { background: #ff4d5a; color: #fff; box-shadow: 0 0 8px rgba(255,77,90,.5) }
    /* 从云端提取文件夹按钮 */
    .remote-tbl .lbtn-fetch {
      color: var(--neon-cyan);
      border-color: rgba(0,229,255,.35);
      background: rgba(0,229,255,.1);
      font-size: 13px;
      padding: 1px 5px;
    }
    .remote-tbl .lbtn-fetch:hover:not(:disabled) {
      background: var(--neon-cyan);
      color: #02101a;
      box-shadow: 0 0 10px rgba(0,229,255,.5);
      transform: scale(1.12);
    }
    .remote-tbl .lbtn-fetch:disabled {
      opacity: .5;
      cursor: not-allowed;
    }
    .remote-tbl .lbtn-fetch.is-loading {
      animation: spin 0.8s linear infinite;
    }
    @keyframes spin {
      from { transform: rotate(0deg); }
      to { transform: rotate(360deg); }
    }
    .remote-tbl .lbtn:hover { background: rgba(0,229,255,.15); color: var(--text-0) }

    .sync-bar {
      display: flex;
      align-items: center;
      gap: 8px;
      padding: 6px 10px;
      background: rgba(0,229,255,.07);
      border: 1px solid rgba(0,229,255,.16);
      border-radius: 6px;
      font-size: 11px;
      color: var(--neon-cyan);
      margin-top: 6px;
      flex-wrap: wrap
    }
    .sync-bar label {
      cursor: pointer;
      display: inline-flex;
      align-items: center;
      gap: 4px;
      margin: 0;
      font-size: 11px;
      color: var(--text-1);
      font-weight: 600
    }
    .sync-bar input {
      width: auto;
      margin: 0;
      accent-color: var(--neon-cyan)
    }
    .sync-bar .sep {
      color: rgba(0,229,255,.3)
    }

    /* ===== 行级严格对齐（双侧 1:1 等高） ===== */
    .remote-tbl {
      --ROW-H: 30px;        /* 压缩行高 */
      --INDENT: 24px;        /* 每级缩进宽度（加大，确保肉眼可见） */
      --TREE-GUIDE-C: rgba(100,116,139,.38)
    }
    /* 所有 tbody tr（包括本地的 local-tbl）严格等高，但排除 thead 和特殊跨行提示 */
    .remote-tbl tbody tr {
      height: var(--ROW-H);
      max-height: var(--ROW-H)
    }
    /* 特殊跨行提示行（空状态 / 超限提示）：高度自适应 — 只排除明确的无数据提示，不排除 data-dir 等正常行 */
    .remote-tbl tbody tr.spacer-row,
    .remote-tbl tbody tr.empty-row:where(:not([data-key]):not([data-dir])),
    .remote-tbl tbody tr:not([data-key]):not([data-dir]):not(.dir-header-row):not(.dir-child-row) {
      height: auto !important;
      max-height: none !important
    }
    .remote-tbl th,
    .remote-tbl td {
      box-sizing: border-box;
      padding: 2px 6px !important;
      vertical-align: middle;
      line-height: 1.15;
      font-size: 10.5px;
      white-space: nowrap;
      border-bottom: 1px solid rgba(0,229,255,0.05)
    }
    .remote-tbl th {
      padding: 4px 8px !important;
      background: rgba(10,16,32,0.98);
      color: var(--text-2);
      font-weight: 600;
      letter-spacing: .3px;
      border-bottom: 1px solid var(--card-border);
      text-transform: uppercase;
      font-size: 10px
    }
    /* 空行（双侧对称，极简占位） */
    .remote-tbl tr.empty-row td {
      padding: 2px 5px !important;
      height: var(--ROW-H);
      max-height: var(--ROW-H);
      font-style: italic;
      color: var(--text-3);
      font-size: 10px;
      background: rgba(10,16,32,.35) !important
    }
    .remote-tbl tr.empty-row td:first-child {
      border-left-style: dashed !important;
      border-left-color: rgba(0,229,255,.2) !important
    }
    .remote-tbl tr.empty-row td:last-child {
      border-right-style: dashed !important;
      border-right-color: rgba(0,229,255,.2) !important
    }

    /* 空行占位：用极简中性色，不再用花哨条纹 */

    /* ===== 树形缩进·竖线视觉（DOM inline-block 连接点列，稳定不漂移） ===== */
    .tree-gutter {
      display: inline-flex;
      vertical-align: middle;
      margin-right: 0;
      flex-shrink: 0;
      align-items: stretch;
      height: 100%
    }
    /* 每级 24px 的连接点列：左边框直接画竖线，高度等于行高 */
    .tg-v {
      display: inline-block;
      width: var(--INDENT);
      height: 100%;
      border-left: 1px solid var(--TREE-GUIDE-C);
      vertical-align: top;
      flex-shrink: 0
    }
    /* 最末级的"分支"：竖线 + 横向小分支 */
    .tg-branch {
      display: inline-flex;
      align-items: center;
      width: var(--INDENT);
      height: 100%;
      border-left: 1px solid var(--TREE-GUIDE-C);
      vertical-align: top;
      flex-shrink: 0
    }
    .tg-branch::after {
      content: "";
      display: inline-block;
      width: calc(var(--INDENT) * 0.45);
      border-top: 1px solid var(--TREE-GUIDE-C);
      margin-left: -1px
    }

    /* 对齐按钮（双侧统一 r-align-btn 样式） */
    .remote-tbl .r-align-btn {
      border: 1px solid rgba(0,229,255,.25);
      background: rgba(10,16,32,.6);
      color: var(--neon-cyan);
      border-radius: 5px;
      font-size: 10px;
      padding: 2px 6px;
      cursor: pointer;
      margin-left: 6px;
      font-weight: 600;
      vertical-align: middle
    }
    .remote-tbl .r-align-btn:hover {
      background: linear-gradient(135deg, var(--neon-cyan), var(--neon-blue));
      color: #02101a;
      border-color: transparent;
      box-shadow: 0 0 10px rgba(0,229,255,.4)
    }

    .card {
      background: var(--card);
      border-radius: 10px;
      padding: 14px;
      border: 1px solid var(--card-border);
      box-shadow: var(--glow)
    }

    h1 {
      font-size: 20px;
      margin-bottom: 16px;
      font-weight: 600;
      background: linear-gradient(135deg, var(--neon-cyan), var(--neon-purple));
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      background-clip: text
    }

    .card {
      background: var(--card);
      border-radius: 10px;
      padding: 16px;
      margin-bottom: 12px;
      border: 1px solid var(--card-border)
    }

    h2 {
      font-size: 14px;
      margin-bottom: 12px;
      color: var(--text-1);
      font-weight: 600;
      letter-spacing: .3px;
      text-transform: uppercase;
      font-size: 11px
    }

    label {
      display: block;
      font-size: 12px;
      color: var(--text-2);
      margin-bottom: 4px;
      letter-spacing: .2px
    }

    textarea,
    input {
      width: 100%;
      padding: 9px 12px;
      border: 1px solid var(--card-border);
      border-radius: 8px;
      font-size: 13px;
      font-family: ui-monospace, Menlo, Consolas, monospace;
      outline: none;
      background: rgba(5,7,15,0.8);
      color: var(--text-0);
      transition: all .15s
    }

    textarea:focus,
    input:focus {
      border-color: var(--neon-cyan);
      background: rgba(5,7,15,0.95);
      box-shadow: 0 0 0 2px rgba(0,229,255,.1), 0 0 14px rgba(0,229,255,.15)
    }
    textarea::placeholder, input::placeholder { color: rgba(100,116,139,.6) }

    textarea {
      min-height: 120px;
      resize: vertical;
      line-height: 1.6
    }

    .sidebar .card {
      padding: 12px
    }
    .sidebar textarea {
      min-height: 90px
    }
    .sidebar .drop {
      padding: 18px 14px
    }
    .sidebar .drop .big {
      font-size: 28px;
      margin-bottom: 2px
    }
    .sidebar .drop-btns .btn {
      font-size: 12px;
      padding: 7px 12px
    }
    .grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 10px
    }

    .grid .full {
      grid-column: 1/-1
    }

    .btn {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      padding: 8px 14px;
      border: none;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 600;
      cursor: pointer;
      transition: all .15s;
      white-space: nowrap;
      letter-spacing: .2px
    }

    .btn-primary {
      background: linear-gradient(135deg, var(--neon-cyan), var(--neon-blue));
      color: #02101a;
      box-shadow: 0 4px 14px rgba(0,229,255,.25)
    }

    .btn-primary:hover {
      transform: translateY(-1px);
      box-shadow: 0 6px 20px rgba(0,229,255,.4)
    }

    .btn-primary:disabled {
      background: rgba(0,229,255,.3) !important;
      color: rgba(2,16,26,.5) !important;
      cursor: not-allowed;
      box-shadow: none !important;
      transform: none !important
    }
    .btn-secondary:disabled,
    .btn-success:disabled,
    .btn-danger:disabled {
      opacity: .45;
      cursor: not-allowed;
      filter: grayscale(.3);
      position: relative;
      transform: none !important;
      box-shadow: none !important
    }
    @keyframes _btnSpin { to { transform: rotate(360deg) } }
    .btn.is-loading::before {
      content: '';
      display: inline-block;
      width: 12px;
      height: 12px;
      margin-right: 6px;
      border: 2px solid rgba(0,0,0,.25);
      border-top-color: currentColor;
      border-radius: 50%;
      animation: _btnSpin .8s linear infinite;
      vertical-align: middle
    }
    .btn-primary.is-loading::before { border-color: rgba(2,16,26,.3); border-top-color: #02101a }
    .btn-secondary.is-loading::before { border-color: rgba(156,163,175,.3); border-top-color: var(--text-0) }
    .btn-success.is-loading::before { border-color: rgba(52,199,89,.3); border-top-color: #34c759 }

    .btn-secondary {
      background: rgba(0,229,255,.08);
      border: 1px solid var(--card-border);
      color: var(--text-0)
    }

    .btn-secondary:hover {
      background: rgba(0,229,255,.16);
      border-color: rgba(0,229,255,.3)
    }

    .btn-danger {
      background: rgba(255,77,90,.12);
      border: 1px solid rgba(255,77,90,.3);
      color: #ff7a84
    }

    .btn-danger:hover {
      background: rgba(255,77,90,.22);
      box-shadow: 0 0 14px rgba(255,77,90,.2)
    }

    .btn-success {
      background: rgba(52,199,89,.12);
      border: 1px solid rgba(52,199,89,.3);
      color: #6ee7a0
    }

    .btn-success:hover {
      background: rgba(52,199,89,.22);
      box-shadow: 0 0 14px rgba(52,199,89,.2)
    }

    .btn-row {
      display: flex;
      gap: 8px;
      flex-wrap: wrap;
      margin-top: 10px
    }

    .row-between {
      display: flex;
      justify-content: space-between;
      align-items: center;
      gap: 8px;
      flex-wrap: wrap
    }

    .drop {
      border: 2px dashed rgba(0,229,255,.22);
      border-radius: 10px;
      padding: 24px 20px;
      text-align: center;
      cursor: pointer;
      background: rgba(0,229,255,.03);
      transition: all .15s;
      backdrop-filter: blur(4px)
    }

    .drop:hover {
      border-color: var(--neon-cyan);
      background: rgba(0,229,255,.07)
    }

    .drop.over {
      border-color: var(--neon-cyan);
      background: rgba(0,229,255,.12);
      transform: scale(1.01);
      box-shadow: 0 0 18px rgba(0,229,255,.25)
    }

    .drop p {
      font-size: 13px;
      color: var(--text-2);
      margin-top: 4px
    }

    .drop .big {
      font-size: 36px;
      margin-bottom: 6px;
      filter: drop-shadow(0 0 6px rgba(0,229,255,.5))
    }

    .drop-btns {
      margin-top: 12px;
      display: flex;
      gap: 8px;
      justify-content: center;
      flex-wrap: wrap
    }

    .drop-btns .btn {
      position: relative;
      overflow: hidden
    }

    .drop-btns .btn input {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      opacity: 0;
      cursor: pointer
    }

    /* 现在"本地面板"也用 <table class="remote-tbl"> 渲染，与云端完全同构，
       不再需要旧的 .list / .item / .empty-row-item 老样式；
       保留 #flist / .list 作为外层滚动容器 ID（与 .remote-wrap 共存），
       所以这里显式覆盖：.list 不再 flex，保持为空壳。 */
    .list#flist {
      display: block;
      padding: 0;
      margin: 0;
      overflow: auto;
      max-height: 100%;
      height: 100%
    }
    .list#flist .local-tbl {
      width: 100%;
      border-collapse: separate
    }

    /* 历史兼容：旧的 .item 类（已经不存在 DOM 中）置空，避免影响其他未知位置 */
    .item { display: none }

    .item .bd-l {
      position: absolute;
      left: 0;
      top: 0;
      bottom: 0;
      width: 3px;
      border-radius: 8px 0 0 8px
    }

    .bd-new {
      background: #34c759
    }

    .bd-same {
      background: #0071e3
    }

    .bd-diff {
      background: #ff9500
    }

    .bd-unknown {
      background: #aaa
    }

    .item .ic {
      width: 30px;
      height: 30px;
      border-radius: 6px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 15px;
      background: #f2f2f7;
      flex-shrink: 0;
      margin-left: 6px
    }

    .item .nm {
      flex: 1;
      min-width: 0;
      font-size: 12px;
      font-weight: 500;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap
    }

    .item .sub {
      font-size: 10px;
      color: #86868b;
      font-weight: 400;
      margin-top: 1px;
      line-height: 1.3
    }

    .item .sz {
      font-size: 11px;
      color: #555;
      white-space: nowrap;
      font-variant-numeric: tabular-nums;
      flex-shrink: 0
    }

    .item .st {
      font-size: 10px;
      padding: 2px 7px;
      border-radius: 5px;
      font-weight: 600;
      white-space: nowrap;
      flex-shrink: 0
    }

    /* 对比徽标 紧凑版 */
    .cmp {
      font-size: 10px;
      padding: 2px 7px;
      border-radius: 5px;
      font-weight: 700;
      white-space: nowrap;
      flex-shrink: 0
    }

    /* 操作按钮（上传/删除/校验等）: 默认不显示，hover 时才展示，避免撑破行 */
    .list .item button.btn[data-up],
    .list .item button.btn[data-rm],
    .list .item button.btn[data-vf],
    .list .item button.btn[data-tg] {
      display: none;
      padding: 3px 7px !important;
      font-size: 10px !important;
      line-height: 1.2;
      flex-shrink: 0
    }
    .list .item:hover button.btn[data-up],
    .list .item:hover button.btn[data-rm],
    .list .item:hover button.btn[data-vf],
    .list .item:hover button.btn[data-tg] {
      display: inline-flex;
      align-items: center;
      justify-content: center
    }

    /* 对齐按钮始终展示（小图标） */
    .list .item .row-link-btn {
      padding: 2px 6px !important;
      font-size: 11px !important;
      flex-shrink: 0
    }

    /* 上传进度条 / 哈希进度条 / URL块 / 错误块 / 详情：默认隐藏，避免撑破 54px */
    .list .item .pb,
    .list .item .hashbar,
    .list .item .ub,
    .list .item .err,
    .list .item .cmp-detail {
      display: none !important
    }
    /* 上传中 的进度条仍在尺寸右侧显示为文字百分比（sz里已有 pg%）*/

    .st-w {
      background: rgba(255,166,87,.12);
      color: #ffa657
    }

    .st-u {
      background: rgba(0,229,255,.10);
      color: var(--neon-cyan)
    }

    .st-o {
      background: rgba(52,199,89,.12);
      color: #6ee7a0
    }

    .st-e {
      background: rgba(255,77,90,.12);
      color: #ff7a84
    }

    .st-skip {
      background: rgba(43,123,255,.10);
      color: var(--neon-blue)
    }

    /* 云端对比状态徽标 */
    .cmp {
      font-size: 10px;
      padding: 2px 6px;
      border-radius: 4px;
      font-weight: 600;
      white-space: nowrap
    }
    /* 本地列里的徽标（cmp / st）紧凑化，确保不撑破行 */
    .local-tbl .cmp,
    .local-tbl .st {
      font-size: 10px;
      padding: 2px 5px;
      border-radius: 3px;
      font-weight: 600;
      display: inline-block;
      vertical-align: middle
    }
    .remote-tbl .cmp {
      font-size: 10px;
      padding: 1px 5px;
      border-radius: 3px;
      font-weight: 600
    }

    .pb {
      flex-basis: 100%;
      height: 5px;
      background: rgba(100,116,139,.18);
      border-radius: 3px;
      margin-top: 6px;
      overflow: hidden
    }

    .pbf {
      height: 100%;
      background: linear-gradient(90deg, var(--neon-cyan), var(--neon-blue));
      border-radius: 3px;
      transition: width .2s;
      width: 0;
      box-shadow: 0 0 8px rgba(0,229,255,.4)
    }

    .ub {
      flex-basis: 100%;
      margin-top: 6px;
      display: flex;
      align-items: center;
      gap: 6px;
      padding: 8px 10px;
      background: rgba(10,16,32,.8);
      border: 1px solid var(--card-border);
      border-radius: 6px
    }

    .ub input {
      flex: 1;
      border: 1px solid var(--card-border);
      background: rgba(5,7,15,.9);
      color: var(--text-0);
      padding: 5px 8px;
      font-size: 11px;
      border-radius: 4px
    }

    .ub button {
      padding: 5px 9px;
      font-size: 11px;
      border: none;
      background: linear-gradient(135deg, var(--neon-cyan), var(--neon-blue));
      color: #02101a;
      border-radius: 5px;
      cursor: pointer;
      font-weight: 600
    }

    .ub button:hover {
      box-shadow: 0 0 10px rgba(0,229,255,.4)
    }

    .err {
      flex-basis: 100%;
      font-size: 11px;
      color: #ff7a84;
      margin-top: 4px;
      line-height: 1.5
    }

    .cmp-detail {
      flex-basis: 100%;
      margin-top: 4px;
      font-size: 11px;
      padding: 6px 10px;
      border-radius: 6px;
      background: rgba(10,16,32,.7);
      border: 1px solid var(--card-border);
      color: var(--text-1);
      line-height: 1.7
    }

    .cmp-detail table {
      width: 100%;
      border-collapse: collapse;
      margin-top: 2px
    }

    .cmp-detail td {
      padding: 1px 4px;
      font-size: 11px;
      vertical-align: top
    }

    .cmp-detail td:first-child {
      color: var(--text-2);
      width: 64px;
      white-space: nowrap
    }

    .cmp-detail .diff {
      color: #ffa657;
      font-weight: 700
    }

    .cmp-detail .same {
      color: #6ee7a0;
      font-weight: 600
    }

    .hashbar {
      flex-basis: 100%;
      margin-top: 4px;
      height: 4px;
      background: rgba(100,116,139,.18);
      border-radius: 2px;
      overflow: hidden
    }

    .hashbar .fill {
      height: 100%;
      background: linear-gradient(90deg, var(--neon-purple), var(--neon-pink));
      width: 0;
      transition: width .1s;
      box-shadow: 0 0 6px rgba(177,75,255,.4)
    }

    .empty {
      text-align: center;
      padding: 28px 12px;
      font-size: 12px;
      color: var(--text-2)
    }

    .hidden {
      display: none !important
    }

    /* 云端文件列表 —— 与本地列表同高、同内边距，保证对齐 */
    .remote-tbl {
      width: 100%;
      border-collapse: separate;
      border-spacing: 0 4px;
      font-size: 12px;
      margin: 0
    }

    .remote-tbl th,
    .remote-tbl td {
      padding: 6px 8px;
      text-align: left;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      max-width: 260px
    }

    .remote-tbl th {
      background: rgba(10,16,32,.98);
      font-weight: 600;
      color: var(--text-2);
      font-size: 11px;
      position: sticky;
      top: 0;
      z-index: 2;
      border-bottom: 1px solid var(--card-border)
    }

    .remote-tbl tbody tr td {
      background: rgba(16,26,48,.55);
      border-top: 1px solid rgba(0,229,255,.06);
      border-bottom: 1px solid rgba(0,229,255,.06);
      color: var(--text-0)
    }
    .remote-tbl tbody tr td:first-child {
      border-left: 1px solid rgba(0,229,255,.06);
      border-radius: 8px 0 0 8px
    }
    .remote-tbl tbody tr td:last-child {
      border-right: 1px solid rgba(0,229,255,.06);
      border-radius: 0 8px 8px 0
    }

    .remote-tbl tr:hover td {
      background: rgba(0,229,255,.06)
    }

    .remote-wrap {
      max-height: 100%;
      height: 100%;
      overflow: auto;
      border: none;
      border-radius: 0;
      margin: 0;
      padding: 10px 12px 12px 8px
    }

    .remote-search {
      display: flex;
      gap: 6px;
      margin: 10px 0 4px;
      align-items: center;
      flex-wrap: wrap
    }

    .remote-search input {
      flex: 1;
      min-width: 180px;
      padding: 7px 10px;
      font-size: 12px
    }

    .remote-legend {
      display: flex;
      gap: 10px;
      flex-wrap: wrap;
      margin-top: 8px;
      font-size: 11px;
      color: var(--text-2)
    }

    .remote-legend span {
      display: inline-flex;
      align-items: center;
      gap: 4px
    }

    .remote-legend .dot {
      width: 8px;
      height: 8px;
      border-radius: 50%;
      display: inline-block;
      box-shadow: 0 0 6px currentColor
    }

    .dot-new {
      background: #34c759;
      color: rgba(52,199,89,.6)
    }

    .dot-same {
      background: var(--neon-cyan);
      color: rgba(0,229,255,.6)
    }

    .dot-diff {
      background: #ffa657;
      color: rgba(255,166,87,.6)
    }

    .dot-un {
      background: var(--text-2);
      color: rgba(100,116,139,.5)
    }

    /* Toast */
    #toast {
      position: fixed;
      top: 16px;
      right: 16px;
      display: flex;
      flex-direction: column;
      gap: 6px;
      z-index: 99999;
      max-width: calc(100% - 32px)
    }

    #toast div {
      padding: 10px 14px;
      border-radius: 8px;
      color: #fff;
      font-size: 13px;
      min-width: 180px;
      animation: si .2s ease;
      word-break: break-word;
      backdrop-filter: blur(10px)
    }

    @keyframes si {
      from {
        opacity: 0;
        transform: translateX(20px)
      }

      to {
        opacity: 1;
        transform: translateX(0)
      }
    }

    .t-s {
      background: rgba(52,199,89,.92);
      box-shadow: 0 0 16px rgba(52,199,89,.4)
    }

    .t-e {
      background: rgba(255,59,48,.92);
      box-shadow: 0 0 16px rgba(255,59,48,.4)
    }

    .t-i {
      background: rgba(0,229,255,.95);
      color: #02101a !important;
      box-shadow: 0 0 16px rgba(0,229,255,.45)
    }

    .t-w {
      background: rgba(255,166,87,.95);
      color: #3d2400 !important;
      box-shadow: 0 0 16px rgba(255,166,87,.4)
    }

    .cnt {
      font-size: 12px;
      color: var(--text-2);
      float: right;
      font-weight: 400
    }

    hr {
      border: none;
      border-top: 1px solid var(--card-border);
      margin: 14px 0
    }

    .tip {
      background: rgba(255,166,87,.08);
      border-left: 3px solid #ffa657;
      border-radius: 6px;
      padding: 10px 12px;
      font-size: 12px;
      color: var(--text-1);
      line-height: 1.7;
      margin-top: 10px
    }

    .tip b {
      color: #ffa657
    }

    /* 左侧底部：状态栏（原"底部固定操作栏"，现在归入侧边栏） */
    .actionbar {
      width: 100%
    }

    .actionbar-inner {}

    .actionbar-row1 {
      display: flex;
      flex-direction: column;
      gap: 8px;
      align-items: stretch;
      justify-content: stretch
    }

    .actionbar-stats {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 3px 10px;
      font-size: 11px;
      color: var(--text-2)
    }

    .actionbar-stats>div {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis
    }

    .actionbar-stats .b {
      font-weight: 700;
      color: var(--text-0)
    }

    .st-done {
      color: #6ee7a0;
      font-weight: 600
    }

    .st-fail {
      color: #ff7a84;
      font-weight: 600
    }

    .st-up {
      color: var(--neon-cyan);
      font-weight: 600
    }

    .st-sk {
      color: var(--neon-blue);
      font-weight: 600
    }

    .tprog {
      margin-top: 6px;
      width: 100%;
      height: 10px;
      background: rgba(100,116,139,.18);
      border-radius: 5px;
      overflow: hidden;
      position: relative
    }

    .tprog-fill {
      height: 100%;
      border-radius: 5px;
      background: linear-gradient(90deg, var(--neon-cyan), var(--neon-purple));
      width: 0;
      transition: width .25s ease;
      box-shadow: 0 0 12px rgba(0,229,255,.4)
    }

    .tprog-txt {
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 11px;
      font-weight: 700;
      color: #fff;
      letter-spacing: .5px;
      text-shadow: 0 1px 2px rgba(0, 0, 0, .45)
    }

    .ab-btns {
      display: flex;
      gap: 8px;
      flex-wrap: wrap
    }

    .ab-btns .btn {
      flex: 1 1 auto
    }

    .speed {
      font-variant-numeric: tabular-nums;
      grid-column: 1 / -1
    }

    .skip-switch {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      font-size: 12px;
      color: var(--neon-cyan);
      padding: 5px 8px;
      border-radius: 6px;
      background: rgba(0,229,255,.08);
      cursor: pointer;
      font-weight: 600;
      user-select: none;
      vertical-align: middle;
      border: 1px solid rgba(0,229,255,.18)
    }

    .skip-switch input {
      width: auto;
      margin: 0;
      accent-color: var(--neon-cyan)
    }

    @media(max-width:1200px) {
      .panels {
        grid-template-columns: 1fr
      }
    }
    @media(max-width:900px) {
      body { overflow: auto; height: auto }
      .app {
        grid-template-columns: 1fr;
        height: auto
      }
      .sidebar {
        border-right: none;
        border-bottom: 1px solid var(--card-border);
        min-height: auto;
        height: auto
      }
      .sidebar-scroll { padding-bottom: 10px }
      .main {
        padding-bottom: 14px;
        overflow: visible;
        height: auto;
        min-height: 0
      }
      .panels {
        grid-template-columns: 1fr;
        height: auto;
        min-height: 0
      }
      .panel {
        min-height: 420px
      }
      .speed {
        display: none
      }
      .grid {
        grid-template-columns: 1fr
      }
      .actionbar-stats {
        grid-template-columns: 1fr 1fr
      }
      .remote-tbl th,
      .remote-tbl td {
        max-width: 150px;
        font-size: 11px;
        padding: 6px 8px
      }
    }
    /* 文件夹选择器：深空暗霓主题 hover 效果 */
    #rootFolderList .dir-chk-label:hover {
      border-color: rgba(0, 229, 255, 0.35) !important;
      background: rgba(0, 229, 255, 0.08) !important;
    }
    #rootFolderList .dir-chk-label:has(.dir-chk:checked) {
      border-color: rgba(0, 229, 255, 0.5) !important;
      background: rgba(0, 229, 255, 0.10) !important;
      box-shadow: 0 0 10px rgba(0, 229, 255, 0.15);
    }

    /* ===== 凭证栏折叠 ===== */
    #credentialCard.collapsed #credBody { display: none; }
    #credentialCard.collapsed .cred-toggle { transform: rotate(-90deg); }
    .cred-toggle {
      display: inline-block;
      transition: transform .18s ease;
      font-size: 11px;
      color: var(--neon-cyan);
      width: 12px;
      text-align: center;
    }
    .cred-summary {
      font-size: 11px;
      color: var(--neon-cyan);
      font-weight: 600;
      margin-left: 6px;
      padding: 1px 7px;
      border: 1px solid rgba(0,229,255,.3);
      border-radius: 4px;
      background: rgba(0,229,255,.08);
    }
    .cred-summary:empty { display: none; }
    .cred-expand-hint {
      font-size: 10px;
      color: var(--text-2);
      opacity: .7;
      white-space: nowrap;
    }
    #credentialCard.collapsed .cred-expand-hint::before { content: '▴ 展开'; }
    #credentialCard.collapsed .cred-expand-hint { }
    #credentialCard:not(.collapsed) .cred-expand-hint { }
    #credHeader:hover .cred-expand-hint { opacity: 1; color: var(--neon-cyan); }

    /* ===== 文件列表：目录分组折叠头（紧凑版，与文件行等高） ===== */
    .remote-tbl tr.dir-header-row,
    .local-tbl tr.dir-header-row {
      cursor: pointer;
      user-select: none;
    }
    .remote-tbl tr.dir-header-row > td,
    .local-tbl tr.dir-header-row > td {
      background: linear-gradient(90deg, rgba(0,229,255,.10), rgba(177,75,255,.06));
      border-top: 1px solid rgba(0,229,255,.22) !important;
      border-bottom: 1px solid rgba(0,229,255,.22) !important;
      padding: 2px 6px !important;
      font-size: 10.5px;
      font-weight: 600;
      color: var(--text-0);
      line-height: 1.15;
      height: var(--ROW-H);
      max-height: var(--ROW-H)
    }
    .remote-tbl tr.dir-header-row:hover > td,
    .local-tbl tr.dir-header-row:hover > td {
      background: linear-gradient(90deg, rgba(0,229,255,.18), rgba(177,75,255,.10));
    }
    /* 最后一列：按钮列，右对齐（不使用 flex，避免影响行高） */
    .remote-tbl tr.dir-header-row > td:last-child,
    .local-tbl tr.dir-header-row > td:last-child {
      text-align: right;
      white-space: nowrap;
    }
    .dir-arrow {
      display: inline-block;
      width: 12px;
      text-align: center;
      color: var(--neon-cyan);
      transition: transform .15s ease;
      font-size: 9px;
    }
    .dir-collapsed .dir-arrow { transform: rotate(-90deg); }
    .dir-count {
      font-size: 9.5px;
      color: var(--text-2);
      font-weight: 400;
      margin-left: 5px;
    }
    .dir-size {
      font-size: 9.5px;
      color: var(--text-2);
      font-weight: 400;
      margin-left: 6px;
    }
    /* 折叠时隐藏该目录下的文件行（通过 JS 控制，这里只做视觉） */
    .remote-tbl tr.dir-child-row.dir-hidden { display: none; }

    /* ===== 目录头行：差异状态聚合色（树形视图，模仿文件管理器对比软件） ===== */
    /* 文件夹内有差异文件 → 橙色 */
    .remote-tbl tr.dir-header-row.dir-has-diff > td,
    .local-tbl tr.dir-header-row.dir-has-diff > td {
      background: linear-gradient(90deg, rgba(255,149,0,.18), rgba(255,149,0,.06));
      border-top: 1px solid rgba(255,166,87,.45) !important;
      border-bottom: 1px solid rgba(255,166,87,.45) !important;
      box-shadow: inset 3px 0 0 #ffa657;
    }
    /* 文件夹内有新增文件 → 绿色 */
    .remote-tbl tr.dir-header-row.dir-has-new > td,
    .local-tbl tr.dir-header-row.dir-has-new > td {
      background: linear-gradient(90deg, rgba(52,199,89,.16), rgba(52,199,89,.04));
      border-top: 1px solid rgba(52,199,89,.40) !important;
      border-bottom: 1px solid rgba(52,199,89,.40) !important;
      box-shadow: inset 3px 0 0 #34c759;
    }
    /* 文件夹内有仅云端文件 → 青色 */
    .remote-tbl tr.dir-header-row.dir-has-only-remote > td,
    .local-tbl tr.dir-header-row.dir-has-only-remote > td {
      background: linear-gradient(90deg, rgba(0,229,255,.14), rgba(0,229,255,.04));
      border-top: 1px solid rgba(0,229,255,.40) !important;
      border-bottom: 1px solid rgba(0,229,255,.40) !important;
      box-shadow: inset 3px 0 0 var(--neon-cyan);
    }
    /* 文件夹内未对比 → 灰色 */
    .remote-tbl tr.dir-header-row.dir-unknown > td,
    .local-tbl tr.dir-header-row.dir-unknown > td {
      background: linear-gradient(90deg, rgba(100,116,139,.14), rgba(100,116,139,.04));
      border-top: 1px solid rgba(100,116,139,.35) !important;
      border-bottom: 1px solid rgba(100,116,139,.35) !important;
      box-shadow: inset 3px 0 0 var(--text-2);
    }
    /* 文件夹内全部相同 → 轻微灰色提示 */
    .remote-tbl tr.dir-header-row.dir-all-same > td,
    .local-tbl tr.dir-header-row.dir-all-same > td {
      opacity: .82;
    }

    /* 目录状态徽章（紧凑） */
    .dir-badge {
      display: inline-block;
      font-size: 9px;
      padding: 0px 5px;
      margin-left: 5px;
      border-radius: 7px;
      font-weight: 500;
      vertical-align: middle;
      line-height: 1.45
    }
    .dir-badge-diff        { background: rgba(255,166,87,.18); color: #ffa657; border: 1px solid rgba(255,166,87,.4); }
    .dir-badge-new         { background: rgba(52,199,89,.18);  color: #6ee7a0; border: 1px solid rgba(52,199,89,.4); }
    .dir-badge-only-remote { background: rgba(0,229,255,.16); color: var(--neon-cyan); border: 1px solid rgba(0,229,255,.4); }
