

/* ===== 背景环境光晕 ===== */
#ambient-orbs {
  position: fixed;
  top: 0; left: 0;
  width: 100%; height: 100%;
  pointer-events: none;
  z-index: 0;
  overflow: hidden;
}
.ambient-orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.12;
  will-change: transform;
  animation: orbFloat 24s var(--ease-smooth) infinite;
}
.ambient-orb:nth-child(1) {
  width: 500px; height: 500px;
  background: var(--accent);
  top: -10%; left: -5%;
  animation-delay: 0s;
  animation-duration: 26s;
}
.ambient-orb:nth-child(2) {
  width: 400px; height: 400px;
  background: var(--accent2);
  bottom: -8%; right: -5%;
  animation-delay: -9s;
  animation-duration: 22s;
}
.ambient-orb:nth-child(3) {
  width: 300px; height: 300px;
  background: var(--warn);
  top: 40%; left: 50%;
  animation-delay: -17s;
  animation-duration: 28s;
  opacity: 0.06;
}
@keyframes orbFloat {
  0%   { transform: translate(0, 0) scale(1); }
  16%  { transform: translate(80px, -50px) scale(1.08); }
  33%  { transform: translate(-50px, 70px) scale(0.93); }
  50%  { transform: translate(90px, 30px) scale(1.04); }
  66%  { transform: translate(-60px, -40px) scale(0.96); }
  83%  { transform: translate(40px, 50px) scale(1.06); }
  100% { transform: translate(0, 0) scale(1); }
}

/* ===== 卡片 3D 倾斜 ===== */
.tilt-card {
  transition: transform .15s ease-out;
  transform-style: preserve-3d;
  will-change: transform;
}
.tilt-card:hover {
  transition: transform .05s ease-out;
}
  /* ── ① Catppuccin Mocha（默认）── 暖柔暗色，最低眼疲劳 */
  :root, body[data-theme="catppuccin"] {
    --bg: rgba(17,17,27,0.88); --card: rgba(24,24,37,0.68); --text: #cdd6f4; --sub: #a6adc8;
    --border: rgba(255,255,255,0.06); --accent: #89b4fa; --accent2: #cba6f7;
    --hover: rgba(255,255,255,0.04); --shadow: 0 1px 4px rgba(0,0,0,0.4);
    --danger: #f38ba8; --ok: #a6e3a1; --warn: #f9e2af;
    --editor-bg: rgba(17,17,27,0.8); --preview-bg: rgba(24,24,37,0.6);
    --nav-bg: rgba(24,24,37,0.78); --glow: 0 0 20px rgba(137,180,250,0.15);
    --glass-highlight: rgba(255,255,255,0.04); --glass-blur: 18px;
  }
  /* ── ② Tokyo Night — 深邃科技霓虹 */
  body[data-theme="tokyo"] {
    --bg: rgba(13,14,25,0.88); --card: rgba(21,22,40,0.68); --text: #c0caf5; --sub: #9aa5ce;
    --border: rgba(255,255,255,0.06); --accent: #7aa2f7; --accent2: #bb9af7;
    --hover: rgba(255,255,255,0.04); --shadow: 0 1px 4px rgba(0,0,0,0.4);
    --danger: #f7768e; --ok: #9ece6a; --warn: #e0af68;
    --editor-bg: rgba(13,14,25,0.8); --preview-bg: rgba(21,22,40,0.6);
    --nav-bg: rgba(21,22,40,0.78); --glow: 0 0 20px rgba(122,162,247,0.18);
    --glass-highlight: rgba(255,255,255,0.04); --glass-blur: 18px;
  }
  /* ── ③ Dracula — 高对比经典紫 */
  body[data-theme="dracula"] {
    --bg: rgba(21,22,27,0.88); --card: rgba(31,32,41,0.68); --text: #f8f8f2; --sub: #6272a4;
    --border: rgba(255,255,255,0.06); --accent: #bd93f9; --accent2: #ff79c6;
    --hover: rgba(255,255,255,0.04); --shadow: 0 1px 4px rgba(0,0,0,0.4);
    --danger: #ff5555; --ok: #50fa7b; --warn: #f1fa8c;
    --editor-bg: rgba(21,22,27,0.8); --preview-bg: rgba(31,32,41,0.6);
    --nav-bg: rgba(31,32,41,0.78); --glow: 0 0 20px rgba(189,147,249,0.2);
    --glass-highlight: rgba(255,255,255,0.04); --glass-blur: 18px;
  }
  /* ── ④ Nord — 冰蓝专业风 */
  body[data-theme="nord"] {
    --bg: rgba(28,32,42,0.88); --card: rgba(38,42,55,0.68); --text: #eceff4; --sub: #d8dee9;
    --border: rgba(255,255,255,0.06); --accent: #88c0d0; --accent2: #81a1c1;
    --hover: rgba(255,255,255,0.04); --shadow: 0 1px 4px rgba(0,0,0,0.4);
    --danger: #bf616a; --ok: #a3be8c; --warn: #ebcb8b;
    --editor-bg: rgba(28,32,42,0.8); --preview-bg: rgba(38,42,55,0.6);
    --nav-bg: rgba(38,42,55,0.78); --glow: 0 0 20px rgba(136,192,208,0.15);
    --glass-highlight: rgba(255,255,255,0.04); --glass-blur: 18px;
  }
  /* ── ⑤ Catppuccin Latte — 暖白浅色 */
  body[data-theme="latte"] {
    --bg: rgba(239,241,245,0.85); --card: rgba(255,255,255,0.72); --text: #4c4f69; --sub: #9ca0b0;
    --border: rgba(0,0,0,0.08); --accent: #1e66f5; --accent2: #8839ef;
    --hover: rgba(0,0,0,0.03); --shadow: 0 1px 3px rgba(0,0,0,0.06);
    --danger: #d20f39; --ok: #40a02b; --warn: #df8e1d;
    --editor-bg: rgba(239,241,245,0.8); --preview-bg: rgba(255,255,255,0.65);
    --nav-bg: rgba(255,255,255,0.78); --glow: 0 0 20px rgba(30,102,245,0.08);
    --glass-highlight: rgba(255,255,255,0.6); --glass-blur: 18px;
    /* 浅色玻璃 */
    --modal-glass-bg: rgba(255,255,255,0.55);
    --modal-glass-border: rgba(0,0,0,0.08);
    --modal-glass-highlight: rgba(255,255,255,0.8);
    --modal-overlay-bg: rgba(255,255,255,0.25);
  }
  * { margin:0; padding:0; box-sizing:border-box; }
  body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    background: var(--bg); color: var(--text); min-height: 100vh;
    transition: background .3s, color .3s;
  }

  /* ===== 设计系统变量 ===== */
  :root {
    --radius-sm: 6px;
    --radius: 8px;
    --radius-md: 10px;
    --radius-lg: 14px;
    --transition: .2s ease;
    --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
    --shadow-md: 0 4px 12px rgba(0,0,0,0.08);
    --shadow-lg: 0 8px 24px rgba(0,0,0,0.12);
    --card-hover: 0 6px 16px rgba(0,0,0,0.15);
    /* 模态框玻璃变量（暗色主题共用）*/
    --modal-glass-bg: rgba(0,0,0,0.35);
    --modal-glass-border: rgba(255,255,255,0.08);
    --modal-glass-highlight: rgba(255,255,255,0.06);
    --modal-overlay-bg: rgba(0,0,0,0.2);
    /* ── 非线性缓动函数体系 ── */
    /* 快速衰减 — 入场、面板切换、悬浮反馈 */
    --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
    /* 弹簧回弹 — 弹窗、模态框、重要通知 */
    --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
    /* 弹性过冲 — 图标悬浮、徽章、趣味微交互 */
    --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
    /* 柔和弹簧 — 卡片悬浮、列表项 */
    --ease-spring: cubic-bezier(0.22, 1, 0.36, 1);
    /* 交互即时反馈 — 按钮点击、开关 */
    --ease-interact: cubic-bezier(0.32, 0.72, 0, 1);
    /* 对称平滑 — 循环动画、颜色过渡 */
    --ease-smooth: cubic-bezier(0.65, 0, 0.35, 1);
    /* 持续时间标记 */
    --dur-instant: 80ms;
    --dur-fast: 150ms;
    --dur-normal: 250ms;
    --dur-slow: 400ms;
    --dur-glacial: 600ms;
  }

  .navbar {
    display:flex; align-items:center; justify-content:center; gap:1.6rem;
    background:var(--nav-bg); backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
    border-bottom:1px solid var(--border);
    padding:.5rem 1rem; position:sticky; top:0; z-index:100;
    transition: transform var(--dur-slow) var(--ease-out-expo);
  }
  .navbar.nav-hidden { transform: translateY(-100%); }
  .nav-item {
    display:flex; flex-direction:column; align-items:center; gap:.1rem;
    cursor:pointer; padding:.35rem .6rem; border-radius:8px;
    transition: transform var(--dur-fast) var(--ease-out-back), background var(--dur-normal) var(--ease-smooth), color var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-smooth);
    color:var(--sub); font-size:.7rem;
    border:none; background:none; min-width:50px;
  }
  .nav-item:hover {
    background:var(--hover); color:var(--text);
    transform: scale(1.08) translateY(-1px);
    box-shadow: 0 2px 8px rgba(0,0,0,0.15);
  }
  .nav-item:active { transform: scale(0.94); transition: transform var(--dur-instant) var(--ease-interact); }
  .nav-item.active { color:var(--accent); text-shadow:0 0 12px var(--accent); }
  .nav-item .nav-icon {
    font-size:1.3rem; transition: transform var(--dur-normal) var(--ease-bounce), filter var(--dur-normal) var(--ease-smooth);
  }
  .nav-item:hover .nav-icon { transform: scale(1.15); }
  .nav-item .nav-icon.mi { font-size:22px; }
  .theme-btn {
    border:none; background:var(--card);
    cursor:pointer; font-size:1.2rem; padding:.3rem .5rem; border-radius:8px;
    border:1px solid var(--border);
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
    transition: transform var(--dur-fast) var(--ease-interact), box-shadow var(--dur-normal) var(--ease-smooth);
  }
  .theme-btn:hover { transform: scale(1.08); }
  .theme-btn:active { transform: scale(0.92); }

  /* API 设置按钮 (AK) */
  .api-btn {
    position:relative; border:none; background:var(--accent);
    cursor:pointer; min-width:36px; height:32px; border-radius:8px;
    display:flex; align-items:center;
    justify-content:center; transition: opacity var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-smooth), transform var(--dur-fast) var(--ease-interact); flex-shrink:0;
    opacity:.85;
  }
  .api-btn:hover { opacity:1; box-shadow:0 0 16px var(--accent); transform: scale(1.06); }
  .api-btn:active { transform: scale(0.94); }
  .api-btn-letter {
    font-size:.75rem; font-weight:800; color:#fff;
    font-family:"SF Pro Display",-apple-system,sans-serif;
    letter-spacing:.02em;
  }
  .api-btn-dot {
    position:absolute; top:3px; right:3px; width:5px; height:5px;
    border-radius:50%; background:rgba(255,255,255,.4); transition:background .2s;
  }
  .api-btn-dot.set { background:#fff; box-shadow:0 0 4px #fff; }

  /* API 弹窗 */
  .api-field { margin-bottom:.7rem; }
  .api-field label {
    display:block; font-size:.72rem; color:var(--sub); margin-bottom:.25rem;
  }
  .api-field input {
    width:100%; padding:.45rem .6rem; font-size:.8rem; font-family:inherit;
    background:var(--bg); border:1px solid var(--border); border-radius:8px;
    color:var(--text); outline:none; transition:border-color .15s;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .api-field input:focus { border-color:var(--accent); }
  .api-field input::placeholder { color:var(--sub); opacity:.5; }

  .api-presets-label { font-size:.7rem; color:var(--sub); margin-bottom:.35rem; }
  .api-presets { display:flex; flex-direction:column; gap:.25rem; margin-bottom:.6rem; }
  .api-presets button {
    display:flex; align-items:center; justify-content:space-between;
    width:100%; padding:.45rem .6rem; font-size:.76rem; font-family:inherit;
    border:1px solid var(--border); border-radius:8px;
    background:var(--bg); color:var(--text); cursor:pointer;
    transition:all .15s; text-align:left;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .api-presets button:hover { border-color:var(--accent); background:var(--hover); }
  .api-presets button.active { border-color:var(--accent); background:rgba(91,141,238,0.1); }
  .api-presets button strong { font-size:.78rem; }
  .api-presets button span { font-size:.68rem; color:var(--sub); }

  /* API Tab 切换 */
  .api-tabs {
    display:flex; gap:.3rem; margin-bottom:.8rem;
    background:var(--bg); border-radius:10px; padding:.25rem;
  }
  .api-tab {
    flex:1; padding:.5rem .6rem; font-size:.78rem; font-family:inherit;
    border:none; border-radius:8px; cursor:pointer; transition:all .15s;
    background:transparent; color:var(--sub); font-weight:500;
  }
  .api-tab.active {
    background:var(--accent); color:#fff; font-weight:600;
    box-shadow:0 1px 4px rgba(91,141,238,0.3);
  }
  .api-tab:not(.active):hover { color:var(--text); }

  .api-hint {
    display:flex; align-items:flex-start; gap:.35rem;
    font-size:.68rem; color:var(--sub); line-height:1.4;
    padding:.45rem .55rem; background:var(--bg); border-radius:8px;
  }
  .api-hint .mi { font-size:.85rem; flex-shrink:0; margin-top:1px; }
  .api-hint a { color:var(--accent); }

  .modal-footer {
    display:flex; justify-content:flex-end; gap:.4rem;
    padding:.7rem 1rem; border-top:1px solid var(--border);
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .panel { display:none; max-width:900px; margin:0 auto; padding:1.5rem 1rem; }
  #panel-chat.panel { max-width: none; padding: 0; }
  #panel-notes.panel { max-width: none; padding: .8rem 1rem .5rem; }
  .panel.active { display:block; }

  .time { font-size:3rem; font-weight:200; text-align:center; margin:.3rem 0; }
  .date { color:var(--sub); font-size:.9rem; text-align:center; }
  .greeting { color:var(--accent); font-size:.82rem; text-align:center; margin-top:.1rem; opacity:.8; }
  .search { margin:1.2rem 0 1.5rem; }
  .search form { display:flex; gap:.5rem; }
  .search input {
    border-radius: var(--radius-md);
    flex:1; padding:.7rem 1rem; border:1px solid var(--border);
    border-radius:12px; font-size:1rem; background:var(--card);
    color:var(--text); outline:none;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .search input:focus { border-color:var(--accent); box-shadow:0 0 0 3px rgba(91,141,238,0.15); }
  .search button {
    border-radius: var(--radius-md);
    padding:.7rem 1.5rem; border:none; border-radius:12px;
    background:var(--accent); color:#fff; font-size:1rem; cursor:pointer;
  }
  .search button:hover { opacity:.85; }
  .section { margin-bottom:1.2rem; }
  .section-title { font-size:.78rem; letter-spacing:.05em; color:var(--sub); margin-bottom:.4rem; padding-left:.2rem; }
  .grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(105px,1fr)); gap:.4rem; }
  .link {
    border-radius: var(--radius-md);
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    padding:.7rem .3rem; background:var(--card); border:1px solid var(--border);
    border-radius:10px; text-decoration:none; color:var(--text);
    transition: transform var(--dur-normal) var(--ease-spring), box-shadow var(--dur-normal) var(--ease-spring), background var(--dur-normal) var(--ease-smooth), border-color var(--dur-normal) var(--ease-smooth);
    box-shadow:var(--shadow),inset 0 1px 0 var(--glass-highlight); min-height:66px;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .link:hover {
    box-shadow:var(--card-hover), var(--glow);
    transform:translateY(-4px) scale(1.03);
    border-color:var(--accent); background:var(--hover);
  }
  .link .icon { font-size:1.5rem; margin-bottom:.15rem; transition:transform var(--dur-slow) var(--ease-bounce); }
  .link:hover .icon { transform:scale(1.25); }
  .link .name { font-size:.72rem; text-align:center; word-break:break-all; }
  .status-bar { display:flex; gap:1rem; justify-content:center; margin:1rem 0; font-size:.72rem; color:var(--sub); flex-wrap:wrap; }
  .dot { display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:.3rem; }
  .dot.green { background:var(--ok); box-shadow:0 0 6px rgba(74,222,128,0.5); }
  .dot.yellow { background:#eab308; box-shadow:0 0 6px rgba(234,179,8,0.5); }
  .dot.red { background:var(--danger); box-shadow:0 0 6px rgba(248,113,113,0.5); }

  .storage-bar { margin-bottom:1.5rem; }
  .storage-bar .label { display:flex; justify-content:space-between; font-size:.8rem; margin-bottom:.3rem; }
  .bar { height:8px; background:var(--border); border-radius:4px; overflow:hidden; }
  .bar .fill { height:100%; border-radius:4px; transition:width .3s; }
  .bar .fill.low { background:var(--ok); } .bar .fill.mid { background:#eab308; } .bar .fill.high { background:var(--danger); }
  .drop-zone {
    border-radius: var(--radius-lg);
    border:2px dashed var(--border); border-radius:14px; padding:2.5rem 1rem;
    text-align:center; transition:border var(--dur-normal) var(--ease-smooth), background var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-smooth); cursor:pointer; margin-bottom:1rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .drop-zone:hover, .drop-zone.drag-over { border-color:var(--accent); background:var(--hover); box-shadow:0 0 0 2px rgba(91,141,238,0.08); }
  .drop-zone .icon { font-size:2.2rem; margin-bottom:.4rem; }
  .drop-zone .hint { color:var(--sub); font-size:.8rem; }
  .drop-zone .hint strong { color:var(--accent); }
  .file-list { display:flex; flex-direction:column; gap:.25rem; min-height:40px; border-radius:8px; transition:background .2s; }
  .file-list.drag-over { background:var(--hover); }

  /* 网格视图 */
  .file-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:.5rem; min-height:40px; border-radius:8px; transition:background .2s; }
  .file-grid.drag-over { background:var(--hover); }
  .file-card {
    border-radius: var(--radius); background:var(--card); border:1px solid var(--border); border-radius:8px; overflow:hidden; transition:transform .15s,box-shadow .15s;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
    box-shadow:var(--shadow),inset 0 1px 0 var(--glass-highlight); }
  .file-card:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,0.2); }
  .file-card.drag-over { border-color:var(--accent); box-shadow:0 0 0 2px var(--accent); }
  .file-card-preview { width:100%; height:90px; background:var(--bg); display:flex; align-items:center; justify-content:center; cursor:pointer; overflow:hidden; }
  .file-card-icon { font-size:2rem; }
  .file-card-name { padding:.3rem .4rem; font-size:.72rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; cursor:pointer; }
  .file-card-name:hover { color:var(--accent); }
  .file-card-size { padding:0 .4rem .3rem; font-size:.65rem; color:var(--sub); }

  .file-row {
    border-radius: var(--radius);
    display:flex; align-items:center; justify-content:space-between;
    padding:.5rem .7rem; background:var(--card); border-radius:8px;
    border:1px solid var(--border); gap:.5rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .file-row .fname { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:.85rem; }
  .file-row .fname-text { cursor:pointer; display:inline-block; }
  .file-row .fname-text:hover { color:var(--accent); }
  .file-row .fsize { color:var(--sub); font-size:.72rem; min-width:55px; text-align:right; }
  .file-row .actions { display:flex; gap:.2rem; }
  .file-row.drag-over { border-color:var(--accent); background:var(--hover); box-shadow:0 0 0 2px var(--accent); }
  .file-row[draggable="true"]:active { opacity:0.6; }
  .file-row.selected { border-color:var(--accent); background:var(--hover); box-shadow:0 0 0 1px var(--accent); }
  .file-row .file-check { flex-shrink:0; cursor:pointer; accent-color:var(--accent); }

  /* grid card selection */
  .file-card { position:relative; }
  .file-card-check { position:absolute; top:4px; left:4px; z-index:3; opacity:0; transition:opacity .15s; accent-color:var(--accent); cursor:pointer; }
  .file-card:hover .file-card-check,
  .file-card.selected .file-card-check,
  .file-card.show-checks .file-card-check { opacity:1; }
  .file-card.selected { border-color:var(--accent); box-shadow:0 0 0 2px var(--accent),inset 0 1px 0 var(--glass-highlight); }

  /* upload progress */
  .upload-progress-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:.4rem; font-size:.8rem; }
  .upload-file-progress { margin-bottom:.35rem; }
  .upload-file-progress .ufp-top { display:flex; justify-content:space-between; font-size:.72rem; margin-bottom:.12rem; }
  .upload-file-progress .ufp-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:240px; color:var(--text); }
  .upload-file-progress .ufp-info { flex-shrink:0; margin-left:.5rem; color:var(--sub); font-variant-numeric:tabular-nums; }
  .ufp-bar-track { height:5px; background:var(--border); border-radius:3px; overflow:hidden; }
  .ufp-bar-fill { height:100%; background:var(--accent); border-radius:3px; transition:width .15s; width:0%; }
  .ufp-bar-fill.done { background:var(--ok); }
  .ufp-bar-fill.error { background:var(--danger); }

  .btn-sm {
    border-radius: var(--radius-sm);
    padding:.2rem .5rem; border:1px solid var(--border); border-radius:5px;
    cursor:pointer; font-size:.7rem; background:var(--card); color:var(--text);
    transition:background .15s;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .btn-sm:hover { background:var(--hover); }
  .btn-sm.danger { color:var(--danger); border-color:var(--danger); }
  .btn-sm.danger:hover { background:#fef2f2; }
  .empty-state { text-align:center; padding:2.5rem 1rem; color:var(--sub); font-size:.85rem; line-height:1.8; }
  .empty-state .mi { font-size:2rem; display:block; margin-bottom:.3rem; opacity:.5; }

  .notes-topbar { display:flex; gap:.5rem; align-items:center; margin-bottom:.8rem; flex-wrap:wrap; }
  .notes-topbar .auto-save { font-size:.72rem; color:var(--ok); margin-left:auto; }
  .notes-layout { display:flex; gap:0; height:calc(100vh - 155px); }
  .notes-sidebar { width:180px; min-width:180px; border-right:1px solid var(--border); flex-shrink:0; overflow-y:auto; overflow-x:hidden; padding-right:.2rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
    transition: width .35s cubic-bezier(.4,0,.2,1), min-width .35s cubic-bezier(.4,0,.2,1);
    position: relative; z-index: 5; }
  .notes-sidebar > * { transition: opacity .2s; }
  .notes-layout.dock-hidden .notes-sidebar { width: 8px; min-width: 8px; padding-right: 0; }
  .notes-layout.dock-hidden .notes-sidebar > * { opacity: 0; pointer-events: none; }
  .notes-sidebar::after {
    content: ''; position: absolute; right: -1px; top: 0; bottom: 0;
    width: 8px;
    background: linear-gradient(90deg, transparent, var(--accent));
    opacity: 0; transition: opacity .3s;
    pointer-events: none;
  }
  .notes-layout.dock-hidden .notes-sidebar::after { opacity: .4; }
  .notes-layout.dock-hidden .notes-sidebar:hover { width: 180px; min-width: 180px; }
  .notes-layout.dock-hidden .notes-sidebar:hover > * { opacity: 1; pointer-events: auto; }
  .notes-layout.dock-hidden .notes-sidebar:hover::after { opacity: 0; }
  /* 笔记 vs 小说侧栏视觉隔离 */
  .notes-sidebar.novel-sidebar { border-right-color: var(--accent); }
  .notes-sidebar.novel-sidebar .note-list-item.active { border-left: 3px solid var(--accent); padding-left: calc(.45rem - 3px); }
  .notes-sidebar.note-sidebar .note-list-item.active { border-left: 3px solid var(--accent2); padding-left: calc(.45rem - 3px); }
  .btn-new { width:100%; padding:.45rem; margin-bottom:.4rem; border:1px solid var(--border); border-radius:7px; cursor:pointer; background:var(--card); color:var(--accent); font-size:.8rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur)); }
  .btn-new:hover { background:var(--hover); }
  .note-list-item {
    border-radius: var(--radius-sm);
    padding:.45rem .5rem; cursor:pointer; border-radius:5px; font-size:.75rem;
    border-bottom:1px solid var(--border); display:flex; flex-direction:column; gap:.1rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .note-list-item:hover { background:var(--hover); }
  .note-list-item.active { background:var(--hover); color:var(--accent); font-weight:500; }
  .note-list-item .ntitle { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .note-list-item .ndate { font-size:.62rem; color:var(--sub); }
  .note-editor { flex:1; display:flex; flex-direction:column; gap:.4rem; min-width:0; }
  .note-editor .toolbar { display:flex; gap:.4rem; flex-wrap:wrap; }
  .note-editor input.title { padding:.4rem .6rem; border:1px solid var(--border); border-radius:7px; background:var(--card); color:var(--text); font-size:.95rem; outline:none;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur)); transition:border-color .3s,box-shadow .3s; }
  /* 笔记模式：无额外标记 */
  .note-editor.note-mode input.title { border-color:var(--border); box-shadow:none; }
  /* 小说模式：左侧强调色条 + pane 标题色 */
  .note-editor.novel-mode input.title { border-left:3px solid var(--accent); box-shadow:inset 3px 0 8px rgba(91,141,238,0.08); }
  .note-editor.novel-mode .pane-header:first-of-type { color:var(--accent); font-weight:600; }
  .split-pane { display:flex; gap:.4rem; flex:1; min-height:0; min-width:0; }
  .split-pane .pane { flex:1; display:flex; flex-direction:column; min-width:0; border:1px solid var(--border); border-radius:8px; overflow:hidden;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur)); }
  .split-pane .pane-header { font-size:.72rem; color:var(--sub); padding:.3rem .6rem; border-bottom:1px solid var(--border); background:var(--card); flex-shrink:0; }
  .split-pane textarea { flex:1; padding:.6rem; border:none; background:var(--editor-bg); color:var(--text); font-size:.85rem; resize:none; font-family:"SF Mono","Fira Code",monospace; outline:none; line-height:1.6; }
  /* ---- 笔记预览 Prose（Obsidian/Typora 风格）---- */
  .split-pane .preview {
    flex:1; padding:1.2rem 1.5rem; background:var(--preview-bg); overflow-y:auto;
    line-height:1.85; font-size:.88rem; color:var(--text);
    font-family: 'Noto Serif SC', Georgia, 'Times New Roman', serif;
    word-break:break-word;
  }
  .split-pane .preview h1 { font-size:1.5rem; font-weight:700; margin:1.5em 0 .4em; padding-bottom:.3em; border-bottom:2px solid var(--border); }
  .split-pane .preview h2 { font-size:1.25rem; font-weight:650; margin:1.3em 0 .35em; padding-bottom:.2em; border-bottom:1px solid var(--border); }
  .split-pane .preview h3 { font-size:1.1rem; font-weight:600; margin:1.1em 0 .3em; }
  .split-pane .preview h4 { font-size:1rem; font-weight:600; margin:.9em 0 .25em; color:var(--sub); }
  .split-pane .preview h5,.split-pane .preview h6 { font-size:.9rem; font-weight:600; margin:.7em 0 .2em; color:var(--sub); }
  .split-pane .preview p { margin:.5em 0; }
  .split-pane .preview :not(pre) > code {
    background:var(--hover); color:var(--accent2); padding:.1em .35em;
    border-radius:4px; font-size:.85em; font-family:'SF Mono','Fira Code',monospace; font-weight:500;
  }
  .split-pane .preview pre {
    background:#1a1b26; padding:1rem 1.2rem; border-radius:10px; overflow-x:auto;
    margin:.8em 0; border:1px solid var(--border); line-height:1.55; font-size:.82rem;
  }
  .split-pane .preview pre code { background:none; padding:0; font-size:inherit; color:#c0caf5; }
  .split-pane .preview pre[data-lang] { position:relative; padding-top:2rem; }
  .split-pane .preview pre[data-lang]::before {
    content:attr(data-lang); position:absolute; top:0; left:0; right:0;
    padding:2px .8rem; font-size:.65rem; color:var(--accent); background:rgba(0,0,0,.3);
    border-radius:10px 10px 0 0; border-bottom:1px solid var(--border);
    font-weight:600; text-transform:uppercase; letter-spacing:.5px;
  }
  .split-pane .preview blockquote {
    border-left:4px solid var(--accent); margin:.8em 0; padding:.4em 1em;
    color:var(--sub); background:rgba(128,128,160,.06); border-radius:0 6px 6px 0; font-style:italic;
  }
  .split-pane .preview table {
    width:100%; border-collapse:collapse; margin:.8em 0; font-size:.82rem;
    border-radius:8px; overflow:hidden; border:1px solid var(--border);
  }
  .split-pane .preview thead { background:rgba(128,128,160,.15); }
  .split-pane .preview th { padding:.5rem .8rem; text-align:left; font-weight:600; border-bottom:2px solid var(--border); }
  .split-pane .preview td { padding:.4rem .8rem; border-bottom:1px solid var(--border); }
  .split-pane .preview tbody tr:hover { background:var(--hover); }
  .split-pane .preview tbody tr:last-child td { border-bottom:none; }
  .split-pane .preview ul, .split-pane .preview ol { padding-left:1.5em; margin:.4em 0; }
  .split-pane .preview li { margin:.2em 0; }
  .split-pane .preview li::marker { color:var(--accent); }
  .split-pane .preview a { color:var(--accent); text-decoration:underline; text-underline-offset:2px; text-decoration-color:rgba(137,180,250,.4); }
  .split-pane .preview a:hover { text-decoration-color:var(--accent); }
  .split-pane .preview img { max-width:100%; border-radius:8px; margin:.4em 0; box-shadow:0 2px 8px rgba(0,0,0,.15); cursor:pointer; transition:transform .2s; }
  .split-pane .preview img:hover { transform:scale(1.02); }
  .split-pane .preview hr { border:none; border-top:2px solid var(--border); margin:1.5em 0; opacity:.4; }
  .split-pane .preview mark { background:rgba(250,200,100,.25); color:var(--text); padding:.05em .2em; border-radius:3px; }
  .split-pane .preview sub,.split-pane .preview sup { font-size:.7rem; }
  .split-pane .preview del { color:var(--sub); text-decoration:line-through; }
  /* 沉浸模式：隐藏预览面板，编辑区全宽 */
  .split-pane.no-preview .pane:last-child { display:none; }
  .split-pane.no-preview .pane:first-child { flex:1 1 100%; }
  .split-pane.no-preview textarea { font-size:.9rem; line-height:1.8; }
  /* 纯预览模式：隐藏编辑区，只显示渲染结果 */
  .split-pane.preview-only .pane:first-child { display:none; }
  .split-pane.preview-only .pane:last-child { flex:1 1 100%; }
  .split-pane.preview-only .preview { font-size:.92rem; line-height:1.9; max-width:860px; margin:0 auto; }
  .btn { padding:.4rem 1rem; border:none; border-radius:7px; cursor:pointer; font-size:.8rem; transition:all .2s; }
  .btn:hover { opacity:.9; transform:translateY(-1px); }
  .btn.accent { background:var(--accent); color:#fff; box-shadow:0 2px 8px rgba(91,141,238,0.25); }
  .btn.accent:hover { box-shadow:0 4px 16px rgba(91,141,238,0.35); transform:translateY(-1px); }
  .btn.outline { background:transparent; border:1px solid var(--border); color:var(--text); }
  .btn.danger { background:var(--danger); color:#fff; }

  /* 采集模块 */
  .scrape-form { display:flex; flex-direction:column; gap:.8rem; margin-bottom:1.5rem; }
  .scrape-form textarea {
    width:100%; padding:.7rem; border:1px solid var(--border); border-radius:10px;
    background:var(--card); color:var(--text); font-size:.85rem; resize:vertical;
    min-height:80px; font-family:inherit; outline:none;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .scrape-form textarea:focus { border-color:var(--accent); }
  .scrape-opts { display:flex; gap:1rem; align-items:center; flex-wrap:wrap; }
  .scrape-opts label { font-size:.85rem; display:flex; align-items:center; gap:.3rem; cursor:pointer; }
  .scrape-opts input[type="radio"] { accent-color:var(--accent); }
  .scrape-progress { font-size:.85rem; color:var(--accent); margin-bottom:1rem; }
  .scrape-sessions { display:flex; flex-direction:column; gap:.8rem; }
  .scrape-card {
    border-radius: var(--radius-md);
    background:var(--card); border:1px solid var(--border); border-radius:10px;
    padding:.8rem; box-shadow:var(--shadow);
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .scrape-card .sc-header { display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:.5rem; }
  .scrape-card .sc-title { font-weight:500; font-size:.9rem; word-break:break-all; }
  .scrape-card .sc-meta { font-size:.72rem; color:var(--sub); }
  .scrape-card .sc-preview { display:flex; gap:.4rem; flex-wrap:wrap; margin-top:.5rem; }
  .scrape-card .sc-preview img { width:80px; height:60px; object-fit:cover; border-radius:6px; border:1px solid var(--border); cursor:pointer; }
  .scrape-card .sc-preview img:hover { transform:scale(1.05); }
  .scrape-card .sc-actions { display:flex; gap:.3rem; margin-top:.5rem; }
  .sc-more-badge {
    display:inline-flex; align-items:center; justify-content:center;
    width:80px; height:60px; border-radius:6px; border:1px dashed var(--border);
    color:var(--accent); font-size:.8rem; font-weight:600; cursor:pointer;
  }
  .sc-more-badge:hover { background:var(--hover); }
  .sc-expand { margin-top:.4rem; padding:.5rem; background:var(--bg); border-radius:8px; border:1px solid var(--border); }

  /* 贴吧采集 */
  .tieba-section { margin-top:1rem; padding-top:1rem; border-top:1px solid var(--border); }
  .tieba-form { display:flex; flex-direction:column; gap:.7rem; }
  .tieba-form .tieba-row { display:flex; gap:.6rem; align-items:center; flex-wrap:wrap; }
  .tieba-form input[type="text"] {
    border-radius: var(--radius);
    flex:1; min-width:150px; padding:.55rem .7rem;
    border:1px solid var(--border);
    background:var(--card); color:var(--text); font-size:.85rem; outline:none;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .tieba-form input[type="text"]:focus { border-color:var(--accent); }
  .tieba-form select {
    padding:.5rem .7rem; border:1px solid var(--border); border-radius:8px;
    background:var(--card); color:var(--text); font-size:.8rem; outline:none;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .tieba-form select:focus { border-color:var(--accent); }
  .tieba-form .tieba-label { font-size:.8rem; color:var(--sub); white-space:nowrap; }
  .tieba-result { margin-top:.5rem; }
  .tieba-result .sc-meta a { color:var(--accent); text-decoration:none; }
  .tieba-result .sc-meta a:hover { text-decoration:underline; }

  .work-card {
    border-radius: var(--radius);
    background:var(--card); border:1px solid var(--border); border-radius:8px;
    padding:.5rem .7rem; margin-bottom:.4rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .work-card-header { display:flex; justify-content:space-between; align-items:center; }
  .work-card-title { font-weight:500; font-size:.85rem; }
  .work-card-meta { font-size:.68rem; color:var(--sub); margin-top:.15rem; }
  .work-card-actions { display:flex; gap:.2rem; align-items:center; flex-shrink:0; }
  .work-card-actions button {
    border:none; background:none; cursor:pointer; font-size:.8rem;
    padding:.15rem .3rem; border-radius:4px; color:var(--sub);
  }
  .work-card-actions button:hover { background:var(--hover); color:var(--accent); }
  .work-chapter-list { display:flex; flex-direction:column; gap:.2rem; margin-top:.4rem; padding-left:.5rem; border-left:2px solid var(--border); }
  .work-chapter-item {
    display:flex; align-items:center; gap:.4rem; font-size:.75rem;
    padding:.15rem .3rem; border-radius:4px; cursor:grab;
  }
  .work-chapter-item:hover { background:var(--hover); }
  .work-chapter-item .ch-order { color:var(--accent); font-weight:500; min-width:1.2rem; text-align:right; }
  .work-chapter-item .ch-title { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .work-chapter-item .ch-del { cursor:pointer; color:var(--danger); font-size:.7rem; }
  .work-chapter-item.dragging { opacity:.4; background:var(--accent); }
  .work-chapter-item .ch-grip { flex-shrink:0; }
  .work-export-btns { display:flex; gap:.3rem; margin-top:.3rem; }

  .toast {
    position:fixed; top:1rem; right:1rem; left:auto; bottom:auto; transform:none;
    padding:.5rem 1rem; border-radius:var(--radius-md); background:var(--card); color:var(--text);
    font-size:.82rem; z-index:9999; opacity:0; pointer-events:none;
    border:1px solid var(--border); border-left:4px solid var(--accent); box-shadow:var(--shadow-lg);
    transition: opacity var(--dur-normal) var(--ease-out-expo), transform var(--dur-slow) var(--ease-out-back) !important;
    transform: translateY(-12px) scale(0.95) !important;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .toast.show { opacity:1 !important; transform: translateY(0) scale(1) !important; }
  .toast.success { border-left-color: var(--ok); }
  .toast.error { border-left-color: var(--danger); }
  .toast.warning { border-left-color: #eab308; }
  .toast.info { border-left-color: #60a5fa; }

  /* ── 翻译面板 ── */
  .tl-lang-row { display:flex; align-items:center; gap:.5rem; margin-bottom:.8rem; flex-wrap:wrap; }
  .tl-lang-row select {
    padding:.5rem .7rem; border:1px solid var(--border); border-radius:8px;
    background:var(--card); color:var(--text); font-size:.85rem; outline:none; flex:1; min-width:100px;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .tl-lang-row select:focus { border-color:var(--accent); }
  .tl-swap {
    border:none; background:var(--card); color:var(--accent); cursor:pointer;
    font-size:1.3rem; padding:.3rem .5rem; border-radius:8px; border:1px solid var(--border);
    transition:transform .2s;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .tl-swap:hover { transform:scale(1.1); background:var(--hover); }
  .tl-detect { font-size:.75rem; color:var(--sub); padding:.2rem .5rem; }

  .tl-panes { display:flex; gap:.5rem; height:calc(100vh - 280px); min-height:200px; }
  .tl-pane { flex:1; display:flex; flex-direction:column; min-width:0; border:1px solid var(--border); border-radius:8px; overflow:hidden;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur)); }
  .tl-pane-header { font-size:.72rem; color:var(--sub); padding:.3rem .6rem; border-bottom:1px solid var(--border); background:var(--card); flex-shrink:0; }
  .tl-pane textarea {
    flex:1; padding:.6rem; border:none; background:var(--editor-bg); color:var(--text);
    font-size:.9rem; resize:none; font-family:inherit; outline:none; line-height:1.6;
  }
  .tl-output {
    flex:1; padding:.6rem; background:var(--editor-bg); color:var(--text);
    font-size:.9rem; line-height:1.6; overflow-y:auto; white-space:pre-wrap; word-wrap:break-word;
  }
  .tl-output .cursor { animation:blink 1s step-end infinite; }
  @keyframes blink { 50% { opacity:0; } }
  .tl-output .placeholder { color:var(--sub); font-size:.8rem; }

  /* ── 语法检查 ── */
  .tl-grammar { padding:.5rem .6rem; background:var(--card); overflow-y:auto; max-height:45%; flex-shrink:0;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur)); }
  .tl-grammar-header { display:flex; align-items:center; gap:.4rem; font-size:.75rem; color:var(--sub); margin-bottom:.3rem; }
  .tl-grammar-header .ok { color:var(--ok); } .tl-grammar-header .warn { color:var(--warn); }
  .tl-grammar-orig { font-size:.82rem; line-height:1.8; margin-bottom:.4rem; word-wrap:break-word; }
  .tl-grammar-orig .err {
    text-decoration-line: underline; text-decoration-style: wavy;
    text-decoration-color: var(--danger); text-underline-offset: 3px;
  }
  .tl-grammar-list { display:flex; flex-direction:column; gap:.25rem; }
  .tl-grammar-item {
    display:flex; align-items:flex-start; gap:.4rem; font-size:.75rem;
    padding:.25rem .4rem; border-radius:4px; background:rgba(248,113,113,0.08);
  }
  .tl-grammar-item .gi-arrow { color:var(--ok); font-weight:bold; flex-shrink:0; }
  .tl-grammar-item .gi-word { color:var(--danger); text-decoration:line-through; }
  .tl-grammar-item .gi-corr { color:var(--ok); font-weight:500; }
  .tl-grammar-item .gi-explain { color:var(--sub); font-size:.7rem; display:block; }
  .tl-grammar-empty { font-size:.72rem; color:var(--sub); text-align:center; padding:.3rem 0; }

  .tl-actions { display:flex; align-items:center; gap:.5rem; margin-top:.6rem; flex-wrap:wrap; }
  .tl-hint { font-size:.75rem; color:var(--sub); margin-left:auto; display:flex; align-items:center; gap:.3rem; }
  .tl-hint kbd, .note-editor kbd {
    display:inline-flex; align-items:center; justify-content:center;
    min-width:22px; height:22px; padding:0 5px; border-radius:4px;
    background:var(--card); border:1px solid var(--border);
    font-family:monospace; font-size:.75rem; color:var(--accent);
  }

  .tl-history { margin-top:1.2rem; border-top:1px solid var(--border); padding-top:.8rem; }
  .tl-history-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:.4rem; }
  .tl-history-header span { font-size:.82rem; color:var(--sub); }
  .tl-history-list { display:flex; flex-direction:column; gap:.3rem; max-height:200px; overflow-y:auto; }
  .tl-hist-item {
    display:flex; align-items:flex-start; gap:.5rem; padding:.4rem .6rem;
    background:var(--card); border:1px solid var(--border); border-radius:6px; font-size:.78rem;
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .tl-hist-item:hover { background:var(--hover); }
  .tl-hist-text { flex:1; min-width:0; }
  .tl-hist-orig { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--text); }
  .tl-hist-trans { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--accent); font-size:.72rem; }
  .tl-hist-meta { font-size:.65rem; color:var(--sub); margin-top:.1rem; }
  .tl-hist-actions { display:flex; gap:.2rem; flex-shrink:0; align-items:center; }
  .tl-hist-actions button {
    border:none; background:none; cursor:pointer; font-size:.8rem;
    padding:.15rem .25rem; border-radius:4px; color:var(--sub);
  }
  .tl-hist-actions button:hover { background:var(--hover); color:var(--accent); }
  .tl-hist-fav { color:#eab308 !important; }

  @media (max-width:700px) {
    .tl-panes { flex-direction:column; height:calc(100vh - 320px); }
    .tl-lang-row select { font-size:.8rem; }
  }

  /* 预览弹窗 */
  /* 模态框玻璃态：遮罩模糊页面 + 模态框透明高光 */
  .modal-overlay {
    position:fixed; inset:0; z-index:1000;
    background:var(--modal-overlay-bg);
    backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
    display:none; align-items:center; justify-content:center; padding:1rem;
    animation: overlayFadeIn var(--dur-normal) var(--ease-out-expo);
  }
  .modal-overlay.show { display:flex; }
  #wpUpscaleOverlay { z-index:2000; }
  #wpUpscaleBar.done { background:var(--ok) !important; }
  .modal {
    background:var(--modal-glass-bg); border-radius:12px; max-width:90vw; max-height:90vh;
    width:700px; display:flex; flex-direction:column;
    box-shadow:0 8px 32px rgba(0,0,0,0.35), inset 0 1px 0 var(--modal-glass-highlight);
    backdrop-filter:blur(22px); -webkit-backdrop-filter:blur(22px);
    border:1px solid var(--modal-glass-border);
    animation: modalSpringIn var(--dur-slow) var(--ease-out-back);
  }
  @keyframes modalSpringIn {
    from { opacity: 0; transform: translateY(24px) scale(0.94); }
    to { opacity: 1; transform: translateY(0) scale(1); }
  }
  @keyframes overlayFadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
  }
  .modal-header {
    display:flex; align-items:center; justify-content:space-between;
    padding:.8rem 1rem; border-bottom:1px solid var(--border);
  }
  .modal-header .m-title { font-weight:600; font-size:.9rem; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .modal-header .m-close {
    border:none; background:none; font-size:1.3rem; cursor:pointer; color:var(--sub);
    padding:0 .3rem;
  }
  .modal-header .m-close:hover { color:var(--text); }
  .modal-body { flex:1; overflow:auto; padding:1rem; }
  .modal-body img { max-width:100%; max-height:70vh; display:block; margin:0 auto; border-radius:6px; }
  .modal-body pre {
    background:var(--editor-bg); padding:1rem; border-radius:8px;
    font-size:.8rem; line-height:1.5; overflow-x:auto; white-space:pre-wrap; word-break:break-all;
  }
  .modal-body .file-info { text-align:center; padding:2rem; color:var(--sub); }
  .modal-body .file-info .fi-icon { font-size:3rem; margin-bottom:.5rem; }

  @media (max-width:700px) {
    .notes-layout { flex-direction:column; height:auto; }
    .notes-sidebar { width:100%; border-right:none; border-bottom:1px solid var(--border); display:flex; overflow-x:auto; padding-bottom:.3rem; gap:.3rem; }
    .notes-sidebar .btn-sm { flex-shrink:0; width:auto; }
    .note-list-item { flex-shrink:0; min-width:90px; border-bottom:none; }
    .split-pane { flex-direction:column; min-height:500px; }
    .grid { grid-template-columns:repeat(auto-fill,minmax(85px,1fr)); }
    .navbar { gap:.8rem; }
    #readerContent { height:calc(100vh - 100px) !important; }
  }

  /* 阅读器 */
  .book-card {
    display:flex; align-items:center; gap:.5rem;
    padding:.6rem .7rem; background:var(--card);
    border:1px solid var(--border); border-radius:var(--radius);
    cursor:pointer; transition: transform var(--dur-normal) var(--ease-spring), box-shadow var(--dur-normal) var(--ease-spring), border-color var(--dur-normal) var(--ease-smooth);
    box-shadow:var(--shadow);
    backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
  }
  .book-card:hover {
    border-color:var(--accent); transform:translateY(-3px) scale(1.02);
    box-shadow:var(--card-hover), var(--glow);
  }
  .book-card .cover { font-size:1.3rem; display:flex; align-items:center; flex-shrink:0; }
  .book-card .btitle { flex:1; font-size:.82rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .book-card .bprogress { font-size:.68rem; color:var(--sub); flex-shrink:0; }
  .reader-light { background:#fff;color:#333; }
  .reader-sepia { background:#f4ecd8;color:#5b4636; }
  .reader-dark { background:#1a1a2e;color:#ccc; }
  .reader-content-inner { max-width:750px;margin:0 auto;padding:2rem 1.5rem;line-height:1.9; }
  .reader-content-inner h1,.reader-content-inner h2,.reader-content-inner h3 { margin:1em 0 .5em; }
  .reader-content-inner p { margin:.8em 0;text-indent:2em; }

  /* EPUB 样式修复 */
  #readerContent iframe { width:100%;height:100%;border:none; }
  #readerContent img { max-width:100%;height:auto; }

  /* === 阅读器布局 === */
  #readerView { flex-direction:column; height:calc(100vh - 56px); }
  #readerView.active { display:flex !important; }
  #readerView > div:nth-child(2) { flex:1; overflow:hidden; min-height:0; }
  #readerContent { height:auto !important; flex:1; }
  #readerShelf .section { margin-bottom:1.5rem; }
  #readerShelf .section-title { font-size:.78rem; letter-spacing:.05em; color:var(--sub); margin-bottom:.5rem; padding-left:.2rem; }
  .reader-empty { text-align:center; padding:1.5rem 0; color:var(--sub); font-size:.8rem; }

  /* 作品/小说书架卡片 */
  .work-reader-card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); margin-bottom:.4rem; overflow:hidden; box-shadow:var(--shadow); backdrop-filter:blur(var(--glass-blur)); }
  .work-reader-header { display:flex; align-items:center; gap:.5rem; padding:.6rem .8rem; cursor:default; }
  .work-reader-title { flex:1; font-size:.85rem; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; cursor:pointer; }
  .work-reader-title:hover { color:var(--accent); }
  .work-reader-meta { font-size:.68rem; color:var(--sub); flex-shrink:0; }
  .work-expand-btn { transition:transform var(--dur-fast) var(--ease-smooth); }
  .work-reader-card.open .work-expand-btn { transform:rotate(180deg); }
  .work-reader-chapters { display:none; border-top:1px solid var(--border); }
  .work-reader-card.open .work-reader-chapters { display:block; }
  .work-reader-chapter { display:flex; align-items:center; gap:.4rem; padding:.4rem .8rem .4rem 1.6rem; cursor:pointer; font-size:.78rem; border-bottom:1px solid var(--hover); transition:background var(--dur-fast); }
  .work-reader-chapter:hover { background:var(--hover); }
  .work-reader-chapter .ch-num { color:var(--accent); font-size:.7rem; min-width:1.5rem; }

  /* 阅读器 TOC 目录 */
  .reader-toc-title { font-weight:600; font-size:.78rem; padding-bottom:.4rem; margin-bottom:.4rem; border-bottom:1px solid var(--border); }
  .reader-toc-item { padding:.35rem .4rem; cursor:pointer; border-radius:5px; font-size:.75rem; display:flex; align-items:center; gap:.3rem; }
  .reader-toc-item:hover { background:var(--hover); }
  .reader-toc-item.active { color:var(--accent); font-weight:600; background:var(--hover); }
  .reader-toc-item .ch-num { color:var(--sub); font-size:.65rem; min-width:1.4rem; }
  .reader-toc-item .toc-label { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .toc-pct { font-size:.6rem; color:var(--sub); flex-shrink:0; }
  #readerTOC.open { display:block !important; }

  /* 小说章内导航 */
  .novel-nav { display:flex; justify-content:space-between; gap:.8rem; margin-top:2rem; padding-top:1rem; border-top:1px solid var(--border); }
  .novel-nav-btn { flex:1; max-width:48%; }

  /* 阅读器沉浸模式 */
  #readerView .reader-toolbar,
  #readerView #readerProgress,
  #readerView #readerTOC,
  #readerView #readerProgress + div,
  #readerView #readerPosition,
  #readerView #readerShortcuts { transition:opacity var(--dur-normal) var(--ease-smooth), transform var(--dur-normal) var(--ease-smooth); }
  #readerView.immersive .reader-toolbar,
  #readerView.immersive #readerProgress,
  #readerView.immersive #readerTOC,
  #readerView.immersive #readerProgress + div { opacity:0; pointer-events:none; }
  #readerView.immersive #readerTOC { transform:translateX(-100%); }
  #readerView.immersive.reader-show-ui .reader-toolbar,
  #readerView.immersive.reader-show-ui #readerProgress,
  #readerView.immersive.reader-show-ui #readerProgress + div { opacity:1; pointer-events:auto; }

  /* 阅读器内容宽度 */
  .width-narrow .reader-content-inner { max-width:600px; }
  .width-medium .reader-content-inner { max-width:750px; }
  .width-wide .reader-content-inner { max-width:900px; }

  .preview table { border-collapse:collapse; margin:.8em 0; width:100%; }
  .preview th { background:var(--accent); color:#fff; padding:6px 10px; border:1px solid var(--accent); }
  .preview td { border:1px solid var(--border); padding:6px 10px; }
  .preview tr:nth-child(even) td { background:var(--hover); }
  .preview blockquote { border-left:3px solid var(--accent); margin:.8em 0; padding:.3em 1em; color:var(--sub); }
  .preview li.task { list-style:none; margin-left:-1.5em; }
  .preview ul, .preview ol { margin: .4em 0; padding-left: 1.8em; }
  .preview li { margin: .15em 0; }
  .preview li.task.done { text-decoration:line-through; opacity:0.6; }
  .preview del { opacity:0.6; }
  .preview hr { border:none; border-top:1px solid var(--border); margin:1em 0; }
  .preview mark { background:var(--accent); color:#fff; padding:0 3px; border-radius:2px; }
  .preview sub, .preview sup { font-size:.7rem; color:var(--sub); }
  .preview img { max-width:100%; border-radius:6px; }

/* ===== 语法高亮 Token 色（各主题自动适配）===== */
.syn-kw  { color:#c792ea; }  /* 关键字 */
.syn-str { color:#c3e88d; }  /* 字符串 */
.syn-cm  { color:#546e7a; font-style:italic; }  /* 注释 */
.syn-num { color:#f78c6c; }  /* 数字 */
.syn-fn  { color:#82aaff; }  /* 函数 */
.syn-op  { color:#89ddff; }  /* 运算符 */
.syn-tag { color:#f07178; }  /* 标签 */
.syn-attr{ color:#ffcb6b; }  /* 属性 */
/* 暗色主题适配 */
[data-theme="catppuccin"] .syn-str,[data-theme="dracula"] .syn-str,[data-theme="tokyo"] .syn-str,[data-theme="nord"] .syn-str { color:#a6e3a1; }
[data-theme="catppuccin"] .syn-num,[data-theme="dracula"] .syn-num,[data-theme="tokyo"] .syn-num,[data-theme="nord"] .syn-num { color:#fab387; }
[data-theme="latte"] .syn-kw  { color:#8839ef; }
[data-theme="latte"] .syn-str { color:#40a02b; }
[data-theme="latte"] .syn-cm  { color:#9ca0b0; }
[data-theme="latte"] .syn-num { color:#fe640b; }
[data-theme="latte"] .syn-fn  { color:#1e66f5; }
[data-theme="latte"] .syn-op  { color:#04a5e5; }
[data-theme="latte"] .syn-tag { color:#d20f39; }
[data-theme="latte"] .syn-attr{ color:#df8e1d; }
pre[data-lang] { position:relative; padding-top:1.7rem; }
pre[data-lang]::before { content:attr(data-lang); position:absolute; top:0; left:0; right:0; padding:1px .6rem; font-size:.62rem; color:var(--accent); background:var(--bg); border-radius:6px 6px 0 0; border-bottom:1px solid var(--border); font-weight:600; text-transform:uppercase; font-family:sans-serif; }

/* ===== 特效 ===== */

/* 面板切换动画 */
.panel {
  opacity: 0;
  transform: translateY(12px);
  transition: opacity var(--dur-slow) var(--ease-out-expo), transform var(--dur-slow) var(--ease-out-expo);
}
.panel.active {
  opacity: 1;
  transform: translateY(0);
}

/* 左侧导航栏激活指示条 */
.nav-item {
  position: relative;
}
.nav-item.active::before {
  content: '';
  position: absolute;
  top: 0; bottom: 0;
  left: -4px;
  width: 3px;
  background: var(--accent);
  border-radius: 3px;
  animation: navSlideIn .2s ease;
}
@keyframes navSlideIn {
  from { transform: scaleY(0); opacity: 0; }
  to { transform: scaleY(1); opacity: 1; }
}

/* 自定义滚动条 */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}
::-webkit-scrollbar-track {
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: var(--border);
  border-radius: 3px;
  transition: background .2s;
}
::-webkit-scrollbar-thumb:hover {
  background: var(--sub);
}

/* 按钮点击反馈 */
.btn:active, .btn-sm:active, .nav-item:active {
  transform: scale(0.96);
  transition: transform var(--dur-instant) var(--ease-interact);
}
.btn, .btn-sm {
  transition: transform var(--dur-fast) var(--ease-interact), background var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-smooth), opacity var(--dur-normal) var(--ease-smooth);
}

/* 卡片悬浮增强 */
.file-card, .book-card, .work-card, .scrape-card {
  transition: transform var(--dur-normal) var(--ease-spring), box-shadow var(--dur-normal) var(--ease-spring), border-color var(--dur-normal) var(--ease-smooth);
}
.file-card:hover, .book-card:hover {
  transform: translateY(-4px) scale(1.02);
  box-shadow: 0 10px 28px rgba(0,0,0,0.3), var(--glow);
}

/* 书签链接微动 — 已合并至 .link .icon 定义 */

/* 文件进度条动画 */
.storage-bar .fill {
  transition: width var(--dur-glacial) var(--ease-out-expo);
}
.bar .fill.low { background: var(--ok); box-shadow:0 0 8px rgba(74,222,128,0.3); }
.bar .fill.mid { background: #eab308; box-shadow:0 0 8px rgba(234,179,8,0.3); }
.bar .fill.high { background: var(--danger); box-shadow:0 0 8px rgba(248,113,113,0.3); }

/* 阅读器进度条渐变 */
#readerProgressFill {
  background: linear-gradient(90deg, var(--accent), var(--accent2)) !important;
}

/* 笔记编辑区聚焦光晕 */
.split-pane textarea:focus {
  box-shadow: inset 0 0 0 1px var(--accent);
}

/* 微交互：点击反馈 */
.file-row:active, .file-card:active, .work-card:active, .scrape-card:active, .book-card:active {
  transform: scale(0.97);
}
/* 图标悬停变色 */
.mi { transition: color .2s ease; }
.mi:hover { color: var(--accent); }
/* 面板平滑滚动 */
.panel { scroll-behavior: smooth; }
/* 按钮涟漪效果 */
.btn, .btn-sm {
  position: relative; overflow: hidden;
}
.btn::after, .btn-sm::after {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(circle, var(--accent) 10%, transparent 10%);
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0;
  transition: opacity var(--dur-slow) var(--ease-smooth), transform var(--dur-slow) var(--ease-smooth);
  transform: scale(5);
}
.btn:active::after, .btn-sm:active::after {
  opacity: .15; transform: scale(0); transition: 0s;
}

/* 选择项勾选过渡 */
.file-check, .scrape-check {
  accent-color: var(--accent);
  transition: transform .15s;
}
.file-check:checked, .scrape-check:checked {
  transform: scale(1.15);
}

/* 活跃导航项图标发光 */
.nav-item.active .nav-icon {
  filter: drop-shadow(0 0 6px var(--accent));
}

/* 时钟微光脉冲 */
.time {
  background: linear-gradient(135deg, var(--text), var(--accent));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  animation: clockPulse 4s var(--ease-smooth) infinite;
}
@keyframes clockPulse {
  0%, 100% { filter: brightness(1) saturate(1); }
  50% { filter: brightness(1.2) saturate(1.15); }
}

/* 搜索框聚焦光晕增强 */
.search input:focus {
  box-shadow: 0 0 0 3px rgba(91,141,238,0.15), 0 0 20px rgba(91,141,238,0.05) !important;
  transition: border-color var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-smooth);
}

/* ===== 网格入场交错动画 ===== */
.grid .link {
  animation: cardStaggerIn var(--dur-slow) var(--ease-out-back) both;
}
.grid .link:nth-child(1) { animation-delay: 0.02s; }
.grid .link:nth-child(2) { animation-delay: 0.05s; }
.grid .link:nth-child(3) { animation-delay: 0.08s; }
.grid .link:nth-child(4) { animation-delay: 0.11s; }
.grid .link:nth-child(5) { animation-delay: 0.14s; }
.grid .link:nth-child(6) { animation-delay: 0.17s; }
.grid .link:nth-child(7) { animation-delay: 0.20s; }
.grid .link:nth-child(8) { animation-delay: 0.23s; }
.grid .link:nth-child(9) { animation-delay: 0.26s; }
.grid .link:nth-child(10) { animation-delay: 0.29s; }
.grid .link:nth-child(n+11) { animation-delay: 0.32s; }
@keyframes cardStaggerIn {
  from { opacity: 0; transform: translateY(16px) scale(0.92); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ===== 首页区块标题入场 ===== */
.section {
  animation: sectionFadeIn var(--dur-slow) var(--ease-out-expo) both;
}
.section:nth-child(1) { animation-delay: 0.05s; }
.section:nth-child(2) { animation-delay: 0.12s; }
.section:nth-child(3) { animation-delay: 0.19s; }
.section:nth-child(4) { animation-delay: 0.26s; }
@keyframes sectionFadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* 空状态渐变图标 */
.empty-state {
  position: relative;
}

/* 采集快捷按钮图标居中 */
.scrape-opts label {
  display: inline-flex;
  align-items: center;
}

/* Material Icons 在按钮中的间距 */
.btn .mi, .btn-sm .mi, .nav-item .mi, button .mi, label .mi {
  vertical-align: middle;
  margin-right: 2px;
}

/* 回收站抽屉滑入 */
#trashDrawer {
    border-radius: var(--radius);
  animation: slideDown var(--dur-normal) var(--ease-out-expo);
}
@keyframes slideDown {
  from { opacity: 0; transform: translateY(-12px); }
  to { opacity: 1; transform: translateY(0); }
}

/* 文件预览弹窗动画 */
#previewModal.show {
  animation: overlayFadeIn var(--dur-fast) var(--ease-out-expo);
}
#previewModal .modal-content {
  animation: modalSlideIn var(--dur-slow) var(--ease-out-back);
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes modalSlideIn {
  from { opacity: 0; transform: translateY(24px) scale(0.94); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* 笔记分栏过渡 */
.note-list-item {
  transition: background .15s, transform .15s;
}
.note-list-item:active {
  transform: scale(0.98);
}


/* 文件行 hover 加强 */
.file-row {
  transition: border-color var(--dur-normal) var(--ease-smooth), background var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-smooth);
}
.file-row:hover {
  border-color: var(--accent);
  background: var(--hover);
}

/* 跳转链接颜色统一 */
.section-title .mi {
  vertical-align: middle;
  margin-right: 2px;
  font-size: 16px;
}

/* 上传进度条 */
#uploadProgress {
  color: var(--accent);
  font-size: .8rem;
  min-height: 1.2em;
}

/* 批处理栏固定定位 */
#batchBar {
  transition: opacity .2s;
  backdrop-filter:blur(var(--glass-blur)); -webkit-backdrop-filter:blur(var(--glass-blur));
}
#batchBar .batch-actions { display:flex; gap:.3rem; margin-left:auto; }





@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.6; }
}
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* 旋转动画 */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* 按钮波纹点击 */
/* ===== 对话面板 ===== */
.chat-layout { display: flex; height: calc(100vh - 60px); }
.chat-sidebar {
  width: 220px; flex-shrink: 0;
  border-right: 1px solid var(--border);
  background: var(--card);
  backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur));
  display: flex; flex-direction: column;
  overflow: hidden;
  transition: width .2s, opacity .2s;
}
.chat-sidebar.collapsed { width: 0; opacity: 0; border-right: none; }
.chat-sidebar-header {
  display: flex; align-items: center; gap: .3rem;
  padding: .5rem .6rem; font-size: .8rem; font-weight: 600;
  border-bottom: 1px solid var(--border);
  color: var(--text); white-space: nowrap;
}
.chat-conv-list { flex: 1; overflow-y: auto; padding: .3rem; }
.chat-conv-item {
  display: flex; align-items: center; gap: .3rem;
  padding: .45rem .5rem; border-radius: 8px; cursor: pointer;
  font-size: .78rem; transition: background .15s;
  margin-bottom: 2px;
}
.chat-conv-item:hover { background: var(--hover); }
.chat-conv-item.active { background: var(--accent); color: #fff; }
.chat-conv-item.active .chat-conv-date { color: rgba(255,255,255,.7); }
.chat-conv-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.chat-conv-date { font-size: .65rem; color: var(--sub); flex-shrink: 0; }
.chat-conv-del {
  opacity: 0; background: none; border: none; color: var(--danger); cursor: pointer;
  font-size: .7rem; padding: 0 .2rem; flex-shrink: 0;
}
.chat-conv-item:hover .chat-conv-del { opacity: .7; }
.chat-conv-item.active .chat-conv-del { color: rgba(255,255,255,.8); }
.chat-conv-empty { padding: 1rem; text-align: center; color: var(--sub); font-size: .75rem; }
.chat-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
#chatSidebarToggle {
  background: none; border: none; color: var(--sub); cursor: pointer;
  font-size: 1.1rem; padding: 0 .3rem; margin-right: .2rem;
}
#chatSidebarToggle:hover { color: var(--accent); }
.chat-header-bar {
  display: flex; align-items: center; justify-content: space-between;
  padding: .5rem .8rem;
  border-bottom: 1px solid var(--border);
  background: var(--card);
  backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur));
  flex-shrink: 0;
}
.chat-header-title { font-weight: 600; font-size: .85rem; display: flex; align-items: center; gap: .3rem; }
.chat-header-info { display: flex; align-items: center; gap: .5rem; }
.chat-compress-note {
  text-align: center; padding: .3rem;
  font-size: .7rem; color: var(--sub);
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center; gap: .3rem;
}
.chat-container {
  display: flex;
  flex-direction: column;
  height: 100%;
  width: 100%;
}
.chat-messages {
  flex: 1;
  overflow-y: auto;
  padding: 1rem;
  display: flex;
  flex-direction: column;
  gap: .8rem;
}
.chat-welcome {
  text-align: center;
  padding: 3rem 1rem;
  color: var(--sub);
}
.chat-welcome-icon {
  font-size: 3rem;
  margin-bottom: .8rem;
  opacity: .6;
}
.chat-welcome h3 {
  margin: 0 0 .4rem;
  font-size: 1.2rem;
  color: var(--text);
}
.chat-welcome p {
  font-size: .85rem;
  margin: 0;
}
.chat-msg {
  display: flex;
  gap: .6rem;
  animation: chatMsgIn var(--dur-normal) var(--ease-out-expo);
}
@keyframes chatMsgIn { from { opacity: 0; transform: translateY(10px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } }
.chat-msg.user { flex-direction: row-reverse; }
.chat-msg-avatar {
  width: 32px; height: 32px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 1.1rem;
  flex-shrink: 0;
  background: var(--hover);
}
.chat-msg.user .chat-msg-avatar { background: var(--accent); color: #fff; }
.chat-msg.assistant .chat-msg-avatar { background: var(--card); border: 1px solid var(--border); }
.chat-msg-body {
  max-width: 78%;
  padding: .6rem .9rem;
  border-radius: 14px;
  font-size: .88rem;
  line-height: 1.6;
  word-break: break-word;
}
.chat-msg.user .chat-msg-body {
  background: var(--accent);
  color: #fff;
  border-bottom-right-radius: 4px;
}
.chat-msg.assistant .chat-msg-body {
  background: var(--card);
  border: 1px solid var(--border);
  border-bottom-left-radius: 4px;
  backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur));
}
.chat-msg-body p { margin: 0 0 .4rem; }
.chat-msg-body p:last-child { margin: 0; }
.chat-msg-body pre {
  background: var(--hover);
  border-radius: 8px;
  padding: .6rem .8rem;
  overflow-x: auto;
  font-size: .8rem;
  line-height: 1.5;
  margin: .4rem 0;
  border: 1px solid var(--border);
}
.chat-msg-body code {
  font-family: 'Consolas', 'Monaco', monospace;
  font-size: .82rem;
}
.chat-msg-body :not(pre) > code {
  background: var(--hover);
  padding: .1rem .3rem;
  border-radius: 4px;
}
.chat-msg-body ul, .chat-msg-body ol { padding-left: 1.2rem; margin: .3rem 0; }
.chat-msg-body blockquote {
  border-left: 3px solid var(--accent);
  margin: .4rem 0;
  padding: .2rem .6rem;
  color: var(--sub);
}
.chat-thinking {
  font-size: .78rem;
  color: var(--sub);
  background: var(--hover);
  border-radius: 8px;
  padding: .4rem .7rem;
  margin-bottom: .3rem;
  border-left: 2px solid var(--accent);
  font-style: italic;
  max-height: 120px;
  overflow-y: auto;
  cursor: pointer;
}
.chat-thinking summary { outline: none; }
.chat-input-area {
  border-top: 1px solid var(--border);
  padding: .7rem 1rem;
  background: var(--card);
  backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur));
}
.chat-input-row {
  display: flex;
  gap: .5rem;
  align-items: flex-end;
}
.chat-input-row textarea {
  flex: 1;
  padding: .55rem .7rem;
  border: 1px solid var(--border);
  border-radius: 12px;
  background: var(--hover);
  color: var(--text);
  font-size: .88rem;
  outline: none;
  resize: none;
  font-family: inherit;
  max-height: 120px;
  line-height: 1.4;
}
.chat-input-row textarea:focus { border-color: var(--accent); }
#chatSendBtn {
  width: 38px; height: 38px;
  border-radius: 50%;
  border: none;
  background: var(--accent);
  color: #fff;
  cursor: pointer;
  font-size: 1rem;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  transition: transform .15s;
}
#chatSendBtn:active { transform: scale(.9); }
#chatSendBtn:disabled { opacity: .4; cursor: not-allowed; }
#chatImageBtn {
  width: 38px; height: 38px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--hover);
  color: var(--sub);
  cursor: pointer;
  font-size: 1rem;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  transition: all .15s;
}
#chatImageBtn:hover, #chatDocBtn:hover, #chatMicBtn:hover { color: var(--accent); border-color: var(--accent); }
#chatDocBtn, #chatMicBtn {
  width: 38px; height: 38px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--hover);
  color: var(--sub);
  cursor: pointer;
  font-size: 1rem;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  transition: all .15s;
}
#chatMicBtn.listening {
  background: #e74c3c; color: #fff; border-color: #e74c3c;
  animation: micPulse 1s infinite;
}
@keyframes micPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(231,76,60,.4); }
  50% { box-shadow: 0 0 0 8px rgba(231,76,60,0); }
}
.chat-input-area.drag-over {
  background: var(--accent);
  background: rgba(99,102,241,.08);
  border-color: var(--accent);
}
.chat-doc-chip {
  display: inline-flex; align-items: center; gap: .3rem;
  background: var(--accent); color: #fff;
  padding: .25rem .5rem;
  border-radius: 6px;
  font-size: .75rem;
  cursor: pointer;
  max-width: 260px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.chat-doc-chip:hover { opacity: .8; }
.chat-image-preview {
  display: flex; gap: .4rem; flex-wrap: wrap;
  padding-bottom: .5rem;
  min-height: 0;
  align-items: center;
}
.chat-img-chip {
  position: relative; width: 56px; height: 56px;
  border-radius: 8px; overflow: hidden;
  border: 1px solid var(--border);
}
.chat-img-chip img { width: 100%; height: 100%; object-fit: cover; }
.chat-img-remove {
  position: absolute; top: 2px; right: 2px;
  width: 18px; height: 18px; border-radius: 50%;
  background: rgba(0,0,0,.6); color: #fff;
  font-size: 14px; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.chat-imgs { display: flex; gap: .3rem; flex-wrap: wrap; margin-top: .3rem; }
.chat-imgs img { max-width: 200px; max-height: 200px; border-radius: 8px; cursor: pointer; border: 1px solid var(--border); }
.chat-typing {
  display: flex; gap: 4px; padding: .4rem .6rem;
}
.chat-typing span {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--sub);
  animation: chatDot 1.4s infinite ease-in-out;
}
.chat-typing span:nth-child(2) { animation-delay: .16s; }
.chat-typing span:nth-child(3) { animation-delay: .32s; }

/* ---- 代码块增强 ---- */
.code-block-wrap {
  position: relative;
  margin: .6rem 0;
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid var(--border);
  background: rgba(0,0,0,.25);
}
.code-lang {
  position: absolute;
  top: 0; left: 0;
  font-size: .65rem;
  color: var(--sub);
  background: var(--accent);
  color: #fff;
  padding: .1rem .45rem;
  border-radius: 0 0 6px 0;
  z-index: 1;
  text-transform: uppercase;
  letter-spacing: .5px;
}
.code-copy-btn {
  position: absolute;
  top: .3rem; right: .3rem;
  background: rgba(255,255,255,.08);
  border: 1px solid var(--border);
  color: var(--sub);
  border-radius: 6px;
  padding: .15rem .35rem;
  cursor: pointer;
  font-size: .7rem;
  z-index: 1;
  transition: all .2s;
  display: flex; align-items: center; gap: .2rem;
}
.code-copy-btn:hover { background: var(--accent); color: #fff; border-color: var(--accent); }
.code-copy-btn.copied { background: #27ae60; color: #fff; border-color: #27ae60; }
.code-block-wrap pre {
  margin: 0;
  padding: .8rem 1rem;
  padding-top: 1.5rem;
  overflow-x: auto;
  font-size: .78rem;
  line-height: 1.55;
  background: transparent !important;
  border: none;
}
.code-block-wrap pre code {
  background: transparent !important;
  padding: 0 !important;
  font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Consolas', monospace;
}

/* ---- 表格 ---- */
.table-wrap {
  overflow-x: auto;
  margin: .6rem 0;
  border-radius: 10px;
  border: 1px solid var(--border);
}
.table-wrap table {
  width: 100%;
  border-collapse: collapse;
  font-size: .82rem;
}
.table-wrap thead { background: rgba(0,0,0,.2); }
.table-wrap th {
  padding: .5rem .75rem;
  text-align: left;
  font-weight: 600;
  color: var(--text);
  border-bottom: 2px solid var(--border);
  white-space: nowrap;
}
.table-wrap td {
  padding: .4rem .75rem;
  border-bottom: 1px solid var(--border);
  color: var(--text);
}
.table-wrap tr:last-child td { border-bottom: none; }
.table-wrap tbody tr:hover { background: var(--hover); }

/* ---- 任务列表 ---- */
.task-item {
  display: flex; align-items: flex-start; gap: .4rem;
  padding: .15rem 0;
  font-size: .88rem;
}
.task-item input[type="checkbox"] {
  accent-color: var(--accent);
  margin-top: .2rem;
  flex-shrink: 0;
}
.task-item input[type="checkbox"]:checked + span {
  text-decoration: line-through;
  color: var(--sub);
}

/* ---- Mermaid 图表 ---- */
.mermaid-rendered {
  margin: .6rem 0;
  padding: .8rem;
  background: rgba(255,255,255,.05);
  border-radius: 10px;
  border: 1px solid var(--border);
  text-align: center;
  overflow-x: auto;
}
.mermaid-rendered svg { max-width: 100%; height: auto; }
.mermaid-fallback { opacity: .6; }
.mermaid-error { border-left: 3px solid #e74c3c !important; }

/* ---- 工具结果文件卡片 ---- */
.tool-file-card {
  display: flex; align-items: center; gap: .5rem;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: .5rem .6rem;
  margin: .3rem 0;
  transition: border-color .2s;
  flex-wrap: wrap;
}
.tool-file-card:hover { border-color: var(--accent); }
.tool-file-icon { font-size: 1.6rem; color: var(--accent); flex-shrink: 0; }
.tool-file-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: .1rem; }
.tool-file-name {
  font-weight: 500; font-size: .82rem;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.tool-file-meta { font-size: .68rem; color: var(--sub); }
.tool-file-actions { display: flex; gap: .25rem; flex-shrink: 0; }
.tool-file-btn {
  display: flex; align-items: center; justify-content: center;
  width: 28px; height: 28px;
  border-radius: 6px;
  background: var(--hover);
  color: var(--sub);
  text-decoration: none;
  font-size: .85rem;
  transition: all .2s;
}
.tool-file-btn:hover { background: var(--accent); color: #fff; }
.tool-img-preview {
  width: 100%; max-width: 300px; max-height: 200px;
  object-fit: cover; border-radius: 8px;
  cursor: pointer; margin-top: .4rem;
  border: 1px solid var(--border);
  transition: transform .2s;
}
.tool-img-preview:hover { transform: scale(1.02); }

/* ---- 图片网格 ---- */
.tool-img-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
  gap: .3rem;
  margin: .3rem 0;
}
.tool-img-grid-item {
  width: 100%; aspect-ratio: 1;
  object-fit: cover; border-radius: 6px;
  cursor: pointer; border: 1px solid var(--border);
  transition: transform .2s;
}
.tool-img-grid-item:hover { transform: scale(1.05); border-color: var(--accent); }

/* ---- 聊天内联图片 ---- */
.chat-img-inline {
  max-width: 100%; max-height: 400px;
  border-radius: 10px; cursor: pointer;
  margin: .3rem 0;
  border: 1px solid var(--border);
  transition: transform .15s;
}
.chat-img-inline:hover { transform: scale(1.01); }

/* ---- 图片灯箱 ---- */
.chat-img-overlay {
  position: fixed; inset: 0; z-index: 9999;
  background: rgba(0,0,0,.85);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
}
.chat-img-overlay img {
  max-width: 92vw; max-height: 92vh;
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0,0,0,.4);
  object-fit: contain;
}

/* ---- 链接 ---- */
.chat-content a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.chat-content a:hover { color: var(--accent2); }

/* ---- 分割线 ---- */
.chat-content hr {
  border: none; border-top: 1px solid var(--border);
  margin: .8rem 0;
}

/* ---- 列表样式 ---- */
.chat-list { padding-left: 1.2rem; margin: .3rem 0; }
.chat-list li { margin: .15rem 0; }

@keyframes chatDot {
  0%, 80%, 100% { opacity: .3; transform: scale(.8); }
  40% { opacity: 1; transform: scale(1.2); }
}
@media (max-width: 600px) {
  .chat-msg-body { max-width: 88%; }
  .chat-layout { height: calc(100vh - 50px); }
  .chat-container { height: auto; }
  .chat-sidebar { display: none; }
}

/* 工具调用卡片 */
.chat-tool-call {
  background: var(--hover);
  border: 1px solid var(--border);
  border-radius: 8px;
  margin: .4rem 0;
  padding: .4rem .6rem;
  font-size: .8rem;
  transition: border-color .2s;
}
.chat-tool-call[open] { border-color: var(--accent); }
.chat-tool-call.tool-error { border-color: #e74c3c; }
.chat-tool-call summary {
  cursor: pointer;
  outline: none;
  display: flex;
  align-items: center;
  gap: .4rem;
  user-select: none;
}
.tool-args-summary {
  color: var(--sub);
  font-size: .75rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1;
}
.tool-body { padding-top: .4rem; }
.tool-args {
  margin-bottom: .3rem;
}
.tool-args code {
  background: var(--card);
  padding: .2rem .4rem;
  border-radius: 4px;
  font-size: .75rem;
  white-space: pre-wrap;
  word-break: break-all;
  display: block;
  max-height: 120px;
  overflow-y: auto;
}
.tool-result pre {
  background: var(--card);
  padding: .3rem .5rem;
  border-radius: 4px;
  font-size: .75rem;
  overflow-x: auto;
  max-height: 200px;
  margin: .2rem 0;
  line-height: 1.4;
}
.tool-result.loading {
  color: var(--sub);
  font-style: italic;
}
.tool-err { color: #e74c3c; font-size: .8rem; }
.tool-ok { color: #27ae60; font-weight: 500; }
.tool-exit { color: var(--sub); font-size: .7rem; margin-top: .2rem; display: inline-block; }
.chat-content { line-height: 1.7; }


/* ===== 壁纸浮窗按钮 ===== */
.wp-fab {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 99;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: none;
  background: var(--accent);
  color: #fff;
  font-size: 22px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 12px rgba(0,0,0,0.3);
  transition: transform var(--dur-normal) var(--ease-bounce), box-shadow var(--dur-normal) var(--ease-smooth);
}
.wp-fab:hover {
  transform: scale(1.15);
  box-shadow: 0 8px 24px rgba(0,0,0,0.45);
}
.wp-fab:active {
  transform: scale(0.92);
  transition: transform var(--dur-instant) var(--ease-interact);
}

/* ===== 壁纸全屏覆盖层 ===== */
#wpOverlay {
  position: fixed; top: 0; left: 0;
  width: 100%; height: 100%;
  z-index: 0;
  pointer-events: none;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  transition: opacity .6s ease, background-image .6s ease;
}
/* 所有面板在壁纸之上，但 modal-overlay/toast 必须更高 */
.navbar {
  z-index: 100;
}
.panel,
#ambient-orbs, canvas {
  position: relative;
  z-index: 1;
}

/* 壁纸卡片选中态 */
.wp-card {
  cursor: pointer; border-radius: 10px; overflow: hidden;
  border: 2px solid var(--border); transition: border-color var(--dur-normal) var(--ease-smooth), box-shadow var(--dur-normal) var(--ease-spring);
}
.wp-card:hover { border-color: var(--accent); box-shadow: 0 4px 16px rgba(0,0,0,0.3); }
.wp-card.wp-active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 4px 16px rgba(0,0,0,0.3); }

/* ===== 壁纸覆盖层过渡 ===== */
#wpOverlay {
  transition: opacity var(--dur-glacial) var(--ease-smooth), background-image var(--dur-glacial) var(--ease-smooth);
}

/* ===== 自定义浮窗按钮 ===== */
.cust-fab {
  position: fixed;
  bottom: 76px;
  right: 24px;
  z-index: 99;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: none;
  background: var(--card);
  color: var(--accent);
  font-size: 20px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 10px rgba(0,0,0,0.25);
  transition: transform var(--dur-fast) var(--ease-out-back), box-shadow var(--dur-fast);
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
}
.cust-fab:hover {
  transform: scale(1.1);
  box-shadow: 0 4px 16px rgba(0,0,0,0.35);
}

/* ===== 自定义设置弹窗 ===== */
.cfg-field { margin-bottom: .8rem; }
.cfg-field label {
  display: flex; align-items: center; gap: .35rem;
  font-size: .78rem; font-weight: 500; color: var(--text); margin-bottom: .3rem;
}
.cfg-field label .mi { font-size: 1rem; color: var(--accent); }
.cfg-field select {
  width: 100%; padding: .45rem .6rem; font-size: .8rem; font-family: inherit;
  border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg); color: var(--text); outline: none;
  cursor: pointer;
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
}
.cfg-field select:focus { border-color: var(--accent); }
.cfg-hint {
  font-size: .68rem; color: var(--sub); margin-top: .2rem; line-height: 1.3;
}
.cfg-range-row {
  display: flex; align-items: center; gap: .5rem;
}
.cfg-range-row input[type="range"] {
  flex: 1; accent-color: var(--accent);
}
.cfg-range-val {
  font-size: .8rem; font-weight: 600; color: var(--accent); min-width: 2.8rem; text-align: right;
}
.cfg-check-label {
  display: flex !important; align-items: center; gap: .4rem; cursor: pointer; font-weight: 400 !important;
}
.cfg-check-label input[type="checkbox"] {
  width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer;
}

/* ===== 光晕速度控制 ===== */
body[data-orb-speed="slow"] .ambient-orb { animation-duration: 35s !important; }
body[data-orb-speed="fast"] .ambient-orb { animation-duration: 10s !important; }

/* ===== 无障碍：减少动画偏好 ===== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .ambient-orb { animation: none !important; }
  .time { animation: none !important; background: var(--text); -webkit-text-fill-color: var(--text); }
  .grid .link, .section { animation: none !important; opacity: 1; transform: none; }
}
