/* ================= 基础 ================= */
:root{
  --bg:#e9eaf6;
  --panel:#ffffff;
  --panel-2:#f6f7fd;
  --ink:#1b1c2c;
  --ink-2:#5b5e78;
  --ink-3:#979ab5;
  --indigo:#5558dd;
  --indigo-soft:#eceeff;
  --line:#ecedf6;
  --line-2:#e3e5f2;
  --r-lg:28px;
  --r-md:20px;
  --r-sm:14px;
  --shadow-sm:0 2px 8px rgba(35,32,90,.05);
  --shadow-md:0 14px 40px -12px rgba(48,44,120,.18);
  --shadow-lg:0 30px 70px -20px rgba(48,44,120,.28);
}
*{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html,body{height:100%}
body{
  font-family:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei UI","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",sans-serif;
  background:linear-gradient(160deg,#eceaf8 0%,#e9ecf9 42%,#eef0fb 100%);
  color:var(--ink);
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
  overflow-x:hidden;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;outline:none;border:none;background:none;color:inherit}
svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
::selection{background:#d9dcff}

/* 背景光斑 */
.bg-blob{position:fixed;border-radius:50%;filter:blur(70px);pointer-events:none;z-index:0}
.b1{width:520px;height:520px;left:-180px;top:120px;background:radial-gradient(circle,rgba(150,148,240,.5),rgba(150,148,240,0) 70%)}
.b2{width:640px;height:640px;right:-240px;bottom:-180px;background:radial-gradient(circle,rgba(163,163,245,.42),rgba(163,163,245,0) 70%)}
.b3{width:380px;height:380px;right:8%;top:-160px;background:radial-gradient(circle,rgba(198,196,255,.5),rgba(198,196,255,0) 70%)}

/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#d4d6e8;border-radius:20px;border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#bfc2dc;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ================= 布局 ================= */
.app{
  position:relative;z-index:1;
  max-width:1300px;margin:0 auto;
  padding:22px;
  display:flex;gap:18px;
  align-items:flex-start;
}

/* ================= 侧栏 ================= */
.sidebar{
  width:224px;flex:none;
  background:var(--panel);
  border-radius:var(--r-lg);
  padding:22px 16px 16px;
  box-shadow:var(--shadow-sm);
  position:sticky;top:22px;
  max-height:calc(100vh - 44px);
  display:flex;flex-direction:column;
}
.brand{display:flex;align-items:center;gap:10px;padding:0 6px 22px}
.brand-logo{
  width:34px;height:34px;border-radius:11px;
  background:linear-gradient(145deg,#7d7ff0,#5558dd);
  color:#fff;display:grid;place-items:center;
  box-shadow:0 6px 16px -6px rgba(85,88,221,.85);
}
.brand-logo svg{width:19px;height:19px;stroke-width:1.6}
.brand span{font-size:15.5px;font-weight:650;letter-spacing:.2px}

.nav{display:flex;flex-direction:column;gap:3px}
.nav-item{
  position:relative;display:flex;align-items:center;gap:11px;
  padding:9.5px 12px;border-radius:12px;
  font-size:13.6px;color:var(--ink-2);font-weight:500;
  transition:.16s;text-align:left;width:100%;
}
.nav-item svg{width:18px;height:18px;stroke-width:1.65;color:#8d90ab}
.nav-item em{
  margin-left:auto;font-style:normal;font-size:11.5px;
  color:var(--ink-3);background:var(--panel-2);
  padding:1px 6px;border-radius:7px;font-variant-numeric:tabular-nums;
}
.nav-item:hover{background:#f7f8fe;color:var(--ink)}
.nav-item.active{background:var(--indigo-soft);color:var(--indigo);font-weight:600}
.nav-item.active svg{color:var(--indigo)}
.nav-item.active em{background:#fff;color:var(--indigo)}
.nav-item.active::before{
  content:"";position:absolute;left:-16px;top:50%;transform:translateY(-50%);
  width:3.5px;height:19px;border-radius:0 4px 4px 0;background:var(--indigo);
}

.side-sub{
  font-size:11.5px;color:var(--ink-3);font-weight:600;
  padding:22px 12px 8px;letter-spacing:.6px;
}
.cat-list{display:flex;flex-direction:column;gap:1px;overflow-y:auto;flex:1;min-height:60px}
.cat-row{
  display:flex;align-items:center;gap:9px;padding:7.5px 12px;border-radius:10px;
  font-size:13px;color:var(--ink-2);transition:.15s;width:100%;text-align:left;
}
.cat-row .dot{width:7px;height:7px;border-radius:50%;flex:none}
.cat-row em{margin-left:auto;font-style:normal;font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.cat-row:hover{background:#f7f8fe;color:var(--ink)}
.cat-row.active{background:var(--panel-2);color:var(--ink);font-weight:600}

.side-foot{display:flex;gap:6px;padding-top:14px;margin-top:10px;border-top:1px solid var(--line)}
.ghost-btn{
  flex:1;display:flex;align-items:center;justify-content:center;gap:5px;
  font-size:12px;color:var(--ink-3);padding:7px 4px;border-radius:9px;transition:.15s;
}
.ghost-btn svg{width:14px;height:14px}
.ghost-btn:hover{background:var(--panel-2);color:var(--indigo)}

/* ================= 主面板 ================= */
.main{
  flex:1;min-width:0;
  background:var(--panel);
  border-radius:var(--r-lg);
  padding:26px 30px 30px;
  box-shadow:var(--shadow-sm);
  min-height:calc(100vh - 44px);
}
.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}
.topbar h1{font-size:25px;font-weight:700;letter-spacing:-.4px}
.sub{font-size:12.5px;color:var(--ink-3);margin-top:5px}
.topbar-right{display:flex;align-items:center;gap:10px}
.icon-btn{
  width:34px;height:34px;border-radius:50%;display:grid;place-items:center;
  color:var(--ink-2);transition:.15s;
}
.icon-btn svg{width:17px;height:17px}
.icon-btn:hover{background:var(--panel-2);color:var(--indigo)}
.user-pill{
  display:flex;align-items:center;gap:7px;
  background:var(--panel-2);border-radius:20px;padding:5px 11px 5px 5px;
  font-size:12.5px;color:var(--ink-2);cursor:default;white-space:nowrap;
}
.avatar-mini{
  width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(145deg,#8e90f2,#5558dd);color:#fff;font-size:11px;font-weight:600;
}
.user-pill .chev{width:13px;height:13px;color:var(--ink-3)}

/* ================= 导入区 ================= */
.import-card{
  background:var(--panel-2);
  border:1px solid #eff0f9;
  border-radius:var(--r-md);
  padding:14px;
  margin-bottom:18px;
  transition:.2s;
}
.import-card:focus-within{background:#f3f4fd;border-color:#dfe1f5}
.import-row{display:flex;gap:10px}
.import-input-wrap{
  flex:1;min-width:0;display:flex;align-items:center;gap:10px;
  background:#fff;border:1px solid #eceef8;border-radius:13px;
  padding:0 14px;transition:.18s;
}
.import-input-wrap input{min-width:0}
.import-card:focus-within .import-input-wrap{border-color:#cdd0f0;box-shadow:0 0 0 4px rgba(85,88,221,.06)}
.link-ico{width:16px;height:16px;color:var(--ink-3)}
#importInput,.import-input-wrap input{width:100%;padding:11.5px 0;font-size:13.5px;color:var(--ink)}
#importInput::placeholder{color:#a8abc2}

.primary-btn{
  flex:none;display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-width:104px;padding:0 20px;border-radius:13px;
  background:linear-gradient(145deg,#6f72e8,#5558dd);
  color:#fff;font-size:13.5px;font-weight:600;
  box-shadow:0 8px 20px -8px rgba(85,88,221,.9);
  transition:.18s;position:relative;
}
.primary-btn:hover{transform:translateY(-1px);box-shadow:0 12px 24px -8px rgba(85,88,221,.95)}
.primary-btn:active{transform:translateY(0)}
.primary-btn:disabled{opacity:.65;cursor:not-allowed;transform:none}
.primary-btn .spinner{
  width:13px;height:13px;border-radius:50%;
  border:2px solid rgba(255,255,255,.4);border-top-color:#fff;
  display:none;animation:spin .7s linear infinite;
}
.primary-btn.loading .spinner{display:block}
.primary-btn.loading .btn-label{opacity:.85}
@keyframes spin{to{transform:rotate(360deg)}}
.import-hint{font-size:11.5px;color:var(--ink-3);padding:9px 4px 0;line-height:1.5}

/* ================= 筛选栏 ================= */
.filterbar{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  margin-bottom:16px;flex-wrap:wrap;
}
.tabs{display:flex;gap:7px;flex-wrap:wrap}
.tab{
  padding:7px 15px;border-radius:20px;font-size:12.8px;font-weight:500;
  color:var(--ink-2);background:#f6f7fc;transition:.16s;white-space:nowrap;
}
.tab:hover{background:#eef0fa;color:var(--ink)}
.tab.active{
  background:linear-gradient(145deg,#6f72e8,#5558dd);color:#fff;font-weight:600;
  box-shadow:0 6px 14px -7px rgba(85,88,221,.9);
}
.filter-right{display:flex;align-items:center;gap:8px;margin-left:auto}
.search-wrap{
  display:flex;align-items:center;gap:7px;min-width:0;
  background:#fff;border:1px solid var(--line-2);border-radius:11px;
  padding:0 11px;height:34px;transition:.16s;width:190px;
}
.search-wrap input{min-width:0}
.search-wrap:focus-within{border-color:#cdd0f0;width:230px}
.search-wrap svg{width:14px;height:14px;color:var(--ink-3)}
.search-wrap input{width:100%;font-size:12.5px}
.search-wrap input::placeholder{color:#a8abc2}
.seg{display:flex;gap:2px;background:#f6f7fc;padding:3px;border-radius:11px}
.seg button{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;color:var(--ink-3);transition:.15s}
.seg button svg{width:15px;height:15px}
.seg button.on{background:#fff;color:var(--indigo);box-shadow:0 1px 4px rgba(40,40,90,.1)}
.select-wrap{position:relative;display:flex;align-items:center}
.select-wrap select{
  appearance:none;height:34px;padding:0 28px 0 12px;border-radius:11px;
  border:1px solid var(--line-2);background:#fff;font-size:12.5px;color:var(--ink-2);cursor:pointer;
}
.select-wrap select:hover{border-color:#d5d8ee}
.select-wrap .chev{position:absolute;right:9px;width:13px;height:13px;color:var(--ink-3);pointer-events:none}

/* ================= 列表 ================= */
.list-area{display:flex;flex-direction:column;gap:8px}
.list-area.grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;
}

.row{
  display:flex;gap:15px;align-items:center;
  padding:11px;border-radius:16px;
  border:1px solid transparent;
  transition:.18s;cursor:pointer;position:relative;
}
.row:hover{background:#fafbff;border-color:#eceef8;box-shadow:0 6px 18px -14px rgba(40,40,90,.4)}
.row .thumb{
  width:152px;height:92px;border-radius:12px;flex:none;position:relative;
  background:linear-gradient(135deg,#e8e9f6,#f2f3fb);overflow:hidden;
}
.row .thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:.3s}
.row:hover .thumb img{transform:scale(1.045)}
.thumb .dur{
  position:absolute;right:6px;bottom:6px;
  background:rgba(22,22,40,.72);color:#fff;font-size:10.5px;
  padding:1.5px 5px;border-radius:5px;font-variant-numeric:tabular-nums;
  backdrop-filter:blur(4px);
}
.thumb .play{
  position:absolute;inset:0;display:grid;place-items:center;
  background:rgba(30,30,60,.18);opacity:0;transition:.2s;
}
.thumb .play svg{width:30px;height:30px;color:#fff;filter:drop-shadow(0 2px 6px rgba(0,0,0,.35))}
.row:hover .thumb .play{opacity:1}

.row .body{flex:1;min-width:0;padding-right:6px}
.row .t{
  font-size:14px;font-weight:600;line-height:1.45;color:var(--ink);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  margin-bottom:7px;
}
.row:hover .t{color:var(--indigo)}
.meta{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:11.8px;color:var(--ink-3)}
.meta .up{display:flex;align-items:center;gap:5px;color:var(--ink-2);max-width:190px}
.meta .up img{width:17px;height:17px;border-radius:50%;object-fit:cover;background:#e8e9f6}
.meta .up span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.meta .sep{width:2.5px;height:2.5px;border-radius:50%;background:#c9cbe0}
.chip{
  display:inline-flex;align-items:center;gap:4px;
  font-size:11px;padding:2px 8px;border-radius:7px;font-weight:500;white-space:nowrap;
}
.row .side{
  flex:none;display:flex;align-items:center;gap:6px;
  opacity:.78;transition:.15s;
}
.row:hover .side{opacity:1}

.status-pill{
  display:inline-flex;align-items:center;gap:5px;
  font-size:11.5px;padding:4px 9px;border-radius:8px;font-weight:500;white-space:nowrap;
}
.status-pill .sd{width:5px;height:5px;border-radius:50%}
.st-todo{background:#f1f2f9;color:#8285a0}
.st-todo .sd{background:#a5a8c0}
.st-doing{background:#fff3e6;color:#c47d28}
.st-doing .sd{background:#e59a3c}
.st-done{background:#e9f7ef;color:#2f9563}
.st-done .sd{background:#3db97b}

.mini-btn{
  width:28px;height:28px;border-radius:9px;display:grid;place-items:center;
  color:var(--ink-3);transition:.15s;
}
.mini-btn svg{width:15px;height:15px}
.mini-btn:hover{background:var(--indigo-soft);color:var(--indigo)}
.mini-btn.faved{color:#f2a33c}
.mini-btn.faved svg{fill:#f7bd63;stroke:#eba53f}

/* 网格卡片 */
.card{
  border-radius:16px;border:1px solid #eff0f8;background:#fff;
  padding:9px;transition:.2s;cursor:pointer;overflow:hidden;
}
.card:hover{box-shadow:0 14px 30px -18px rgba(40,40,90,.45);border-color:#e4e6f6;transform:translateY(-2px)}
.card .thumb{width:100%;aspect-ratio:16/10;border-radius:11px;position:relative;overflow:hidden;background:linear-gradient(135deg,#e8e9f6,#f2f3fb)}
.card .thumb img{width:100%;height:100%;object-fit:cover;display:block}
.card .thumb .play{opacity:0}
.card:hover .thumb .play{opacity:1}
.card .badge-cat{
  position:absolute;left:7px;top:7px;background:rgba(255,255,255,.94);
  backdrop-filter:blur(6px);font-size:10.5px;padding:2px 7px;border-radius:6px;
  color:var(--indigo);font-weight:600;
}
.card .body{padding:9px 3px 2px}
.card .t{font-size:13.2px;font-weight:600;line-height:1.45;margin-bottom:7px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card:hover .t{color:var(--indigo)}
.card .meta{gap:7px}

/* ================= 空状态 ================= */
.empty{
  padding:64px 20px;text-align:center;color:var(--ink-3);
  display:flex;flex-direction:column;align-items:center;gap:14px;
}
.empty-ico{
  width:76px;height:76px;border-radius:24px;display:grid;place-items:center;
  background:linear-gradient(145deg,#f0f1fb,#e8eafb);color:#b9bce0;
}
.empty-ico svg{width:34px;height:34px;stroke-width:1.5}
.empty h3{font-size:15px;font-weight:600;color:var(--ink-2)}
.empty p{font-size:12.5px;line-height:1.7;max-width:340px}

/* ================= 分类管理 ================= */
.manage-area{display:flex;flex-direction:column;gap:18px}
.manage-block{
  border:1px solid var(--line);border-radius:var(--r-md);padding:18px 20px;
}
.manage-block h3{font-size:14px;font-weight:650;margin-bottom:4px}
.manage-block .desc{font-size:12px;color:var(--ink-3);margin-bottom:15px}
.add-cat{display:flex;gap:8px;margin-bottom:14px}
.add-cat input{
  flex:1;height:38px;border-radius:11px;border:1px solid var(--line-2);
  padding:0 13px;font-size:13px;background:#fff;
}
.add-cat input:focus{border-color:#cdd0f0}
.cat-grid{display:flex;flex-direction:column;gap:6px}
.cat-edit{
  display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:12px;transition:.15s;
}
.cat-edit:hover{background:var(--panel-2)}
.cat-edit .name{font-size:13.2px;font-weight:550;flex:1}
.cat-edit .cnt{font-size:11.5px;color:var(--ink-3)}
.palette{display:flex;gap:5px}
.swatch{width:17px;height:17px;border-radius:50%;cursor:pointer;transition:.15s;border:2px solid transparent}
.swatch:hover{transform:scale(1.12)}
.swatch.on{border-color:#fff;box-shadow:0 0 0 2px #b9bce0}
.drag-handle{color:#c9cbe0;cursor:grab;display:grid;place-items:center}

/* ================= 抽屉 ================= */
.drawer-mask{
  position:fixed;inset:0;background:rgba(30,30,60,.28);
  opacity:0;pointer-events:none;transition:.25s;z-index:40;backdrop-filter:blur(2px);
}
.drawer-mask.show{opacity:1;pointer-events:auto}
.drawer{
  position:fixed;top:16px;right:16px;bottom:16px;width:440px;max-width:calc(100vw - 32px);
  background:#fff;border-radius:26px;z-index:41;
  transform:translateX(calc(100% + 30px));transition:transform .32s cubic-bezier(.32,.9,.28,1);
  box-shadow:var(--shadow-lg);overflow-y:auto;padding:0 0 22px;
}
.drawer.show{transform:translateX(0)}
.dr-cover{position:relative;width:100%;aspect-ratio:16/9;background:#eceef7;overflow:hidden;border-radius:26px 26px 0 0}
.dr-cover img{width:100%;height:100%;object-fit:cover}
.dr-cover .dr-close{
  position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;
  background:rgba(255,255,255,.9);display:grid;place-items:center;color:var(--ink);
  backdrop-filter:blur(6px);transition:.15s;
}
.dr-cover .dr-close:hover{background:#fff;transform:rotate(90deg)}
.dr-cover .dr-play{
  position:absolute;left:14px;bottom:14px;display:inline-flex;align-items:center;gap:6px;
  background:rgba(255,255,255,.94);color:var(--ink);font-size:12px;font-weight:600;
  padding:6px 12px;border-radius:10px;text-decoration:none;backdrop-filter:blur(6px);
}
.dr-cover .dr-play:hover{background:#fff;color:var(--indigo)}
.dr-body{padding:18px 22px 0}
.dr-body h2{font-size:16.5px;font-weight:650;line-height:1.5;margin-bottom:12px}
.dr-up{display:flex;align-items:center;gap:8px;margin-bottom:14px}
.dr-up img{width:26px;height:26px;border-radius:50%;object-fit:cover;background:#eceef7}
.dr-up .n{font-size:12.8px;font-weight:550}
.dr-up .d{font-size:11px;color:var(--ink-3)}
.dr-stats{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}
.stat-box{flex:1;min-width:78px;background:var(--panel-2);border-radius:11px;padding:8px 10px}
.stat-box .v{font-size:13px;font-weight:650;font-variant-numeric:tabular-nums}
.stat-box .k{font-size:10.5px;color:var(--ink-3);margin-top:1px}
.dr-section{margin-bottom:16px}
.dr-label{font-size:11.5px;font-weight:650;color:var(--ink-3);letter-spacing:.4px;margin-bottom:8px}
.dr-status{display:flex;gap:6px}
.dr-status button{
  flex:1;padding:8px 0;border-radius:10px;font-size:12px;font-weight:550;
  background:var(--panel-2);color:var(--ink-2);transition:.15s;
}
.dr-status button:hover{background:#eceefa}
.dr-status button.on{background:var(--indigo);color:#fff;box-shadow:0 6px 14px -8px rgba(85,88,221,.9)}
.dr-status button.on[data-st="done"]{background:#3db97b;box-shadow:0 6px 14px -8px rgba(61,185,123,.9)}
.dr-status button.on[data-st="doing"]{background:#e59a3c;box-shadow:0 6px 14px -8px rgba(229,154,60,.9)}
.dr-desc{
  font-size:12.5px;line-height:1.75;color:var(--ink-2);white-space:pre-wrap;
  max-height:110px;overflow-y:auto;background:var(--panel-2);
  border-radius:11px;padding:11px 13px;
}
.dr-note{
  width:100%;min-height:74px;border-radius:11px;border:1px solid var(--line-2);
  padding:10px 12px;font-size:12.5px;line-height:1.6;resize:vertical;
}
.dr-note:focus{border-color:#cdd0f0;box-shadow:0 0 0 3px rgba(85,88,221,.06)}
.plist{display:flex;flex-direction:column;gap:2px;max-height:200px;overflow-y:auto}
.pitem{
  display:flex;gap:8px;align-items:center;font-size:12px;color:var(--ink-2);
  padding:6px 9px;border-radius:8px;width:100%;text-align:left;transition:.14s;
}
.pitem:hover:not(:disabled){background:var(--panel-2)}
.pitem .pi{width:20px;color:var(--ink-3);font-size:11px;font-variant-numeric:tabular-nums;flex:none}
.pitem .pt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pitem .pd{color:var(--ink-3);font-size:11px;flex:none}
.pitem .padd{font-size:10.5px;color:var(--indigo);flex:none;opacity:0;transition:.14s;padding-left:4px}
.pitem:hover:not(:disabled) .padd{opacity:1}
.pitem.cur{background:var(--indigo-soft);color:var(--indigo);font-weight:550}
.pitem.cur .padd{opacity:1}
.pitem:disabled{cursor:default;color:var(--ink-3)}
.pitem:disabled .padd{opacity:.75;color:var(--ink-3)}

.chip.pchip{background:#f3f1fb;color:#7b6bbd;font-weight:600;letter-spacing:.2px;max-width:186px;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:middle}
.dr-foot{display:flex;gap:8px;padding:4px 22px 0}
.dr-foot .danger{flex:none;padding:10px 16px;border-radius:11px;background:#fff1f1;color:#d9534f;font-size:12.5px;font-weight:550}
.dr-foot .danger:hover{background:#ffe5e5}
.dr-foot .primary-btn{flex:1;height:auto;padding:10px 0}

/* ================= Toast ================= */
.toast-wrap{position:fixed;left:50%;bottom:34px;transform:translateX(-50%);z-index:60;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{
  display:flex;align-items:center;gap:9px;
  background:rgba(27,28,44,.94);color:#fff;font-size:12.8px;
  padding:10px 17px;border-radius:14px;box-shadow:0 16px 40px -14px rgba(0,0,0,.55);
  animation:toastIn .28s cubic-bezier(.3,1.2,.4,1);backdrop-filter:blur(8px);
  max-width:80vw;
}
.toast.err{background:rgba(190,60,60,.96)}
.toast.ok{background:rgba(40,150,100,.96)}
.toast svg{width:15px;height:15px}
@keyframes toastIn{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:none}}
.toast.out{animation:toastOut .22s forwards}
@keyframes toastOut{to{opacity:0;transform:translateY(8px) scale(.97)}}

/* ================= 概览弹层 ================= */
.modal-mask{
  position:fixed;inset:0;background:rgba(30,30,60,.3);z-index:50;
  display:none;place-items:center;backdrop-filter:blur(3px);padding:20px;
}
.modal-mask.show{display:grid}
.modal{
  background:#fff;border-radius:24px;padding:26px 28px;width:420px;max-width:100%;
  box-shadow:var(--shadow-lg);animation:toastIn .3s cubic-bezier(.3,1.1,.4,1);
}
.modal h3{font-size:16px;font-weight:650;margin-bottom:18px}
.bar-row{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:12.5px}
.bar-row .lbl{width:70px;color:var(--ink-2);flex:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-track{flex:1;height:7px;background:var(--panel-2);border-radius:6px;overflow:hidden}
.bar-fill{height:100%;border-radius:6px;transition:width .5s cubic-bezier(.3,.9,.3,1)}
.bar-row .num{width:30px;text-align:right;color:var(--ink-3);font-size:11.5px;font-variant-numeric:tabular-nums}

/* ================= 响应式 ================= */
@media (max-width:1080px){
  .app{padding:14px;gap:14px}
  .sidebar{width:192px}
  .main{padding:22px}
}
@media (max-width:860px){
  .app{flex-direction:column;align-items:stretch}
  .sidebar{width:100%;position:static;max-height:none;flex-direction:row;flex-wrap:wrap;gap:8px;padding:14px}
  .main{width:100%;flex:none}
  .brand{padding:0 4px;width:100%}
  .nav{flex-direction:row;flex-wrap:wrap;gap:4px}
  .nav-item{padding:6px 10px;width:auto;font-size:12.5px;gap:7px}
  .nav-item svg{width:16px;height:16px}
  .nav-item em{display:none}
  .nav-item.active::before{display:none}
  .side-sub,.cat-list,.side-foot{display:none}
  .main{min-height:auto;padding:20px;border-radius:24px}
  .topbar{gap:10px;margin-bottom:16px}
  .topbar h1{font-size:19.5px;line-height:1.3}
  .user-pill>span:not(.avatar-mini),.user-pill .chev{display:none}
  .user-pill{padding:4px}
  .import-row{flex-direction:column;gap:8px}
  .import-row .primary-btn{width:100%;height:42px}
  .import-input-wrap{padding:0 12px}
  .row{gap:10px;padding:8px}
  .row .thumb{width:110px;height:66px}
  .row .t{font-size:13px}
  .row .side .status-pill{display:none}
  .meta{font-size:11px;gap:6px}
  .meta .sep{display:none}
  .filter-right{width:100%;margin-left:0;flex-wrap:wrap}
  .search-wrap{flex:1;width:auto}
  .drawer{width:100%;right:0;top:0;bottom:0;border-radius:24px 24px 0 0;max-width:none}
}
