/* ===== Biji Note — three-pane rich text notebook ===== */
:root[data-theme="light"]{
  --bg:#f4f6f8; --panel:#ffffff; --panel-2:#f8f9fb; --panel-3:#f1f3f6;
  --border:#e5e8ed; --border-2:#d7dce4; --text:#1f2329; --text-2:#5f6672; --text-3:#9aa1ab;
  --accent:#4c6ef5; --accent-2:#3b5bdb; --accent-soft:#eaf0ff; --hover:#f0f2f6; --active:#e8edff;
  --danger:#e03131; --danger-soft:#fff0f0; --success:#2f9e44; --warn:#f59f00;
  --shadow:0 8px 30px rgba(20,30,60,.13); --shadow-sm:0 2px 10px rgba(20,30,60,.09);
  --code-bg:#f2f2f2; --sel:#cfe0ff;
}
:root{color-scheme:light}
:root[data-theme="dark"]{
  color-scheme:dark;
  /* 三栏底色：一栏最深、二栏居中、三栏最亮，全部用中性灰（不带蓝调） */
  --col1:#121212; --col2:#28292a; --col3:#333333; --chrome:#2d2e2f;
  --bg:#121212; --panel:#242526; --panel-2:#2b2c2d; --panel-3:#343536;
  --border:#353637; --border-2:#464748; --text:#e6e7e8; --text-2:#a4a5a6; --text-3:#7b7c7d;
  --accent:#4a8aff; --accent-2:#6da2ff; --accent-soft:#1d2b45; --hover:#303132; --active:#3a3b3c;
  --danger:#ff6b6b; --danger-soft:#3a2426; --success:#51cf66; --warn:#ffd43b;
  --shadow:0 10px 34px rgba(0,0,0,.6); --shadow-sm:0 2px 10px rgba(0,0,0,.45);
  --code-bg:#4c4c4c; --sel:#2b4a7a;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden}
body{font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
button{cursor:pointer;background:none;border:0;padding:0}
input,select{outline:none}
.hidden{display:none !important}
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.ic{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:7px;color:var(--text-2)}
.icon-btn:hover{background:var(--hover);color:var(--text)}
.icon-btn.tiny{width:22px;height:22px}
.icon-btn.tiny .ic{width:14px;height:14px}
.icon-btn.on{color:var(--accent);background:var(--accent-soft)}
.text-btn{color:var(--accent);font-size:12px;padding:4px 8px;border-radius:6px}
.text-btn:hover{background:var(--accent-soft)}
/* 回收站「清空」：胶囊按钮，避免看起来像普通文字链接 */
#btnEmptyTrash{font-size:12px;padding:3px 13px;border-radius:999px;border:1px solid var(--border-2);background:var(--panel);color:var(--text-2);line-height:1.6;flex:none}
#btnEmptyTrash:hover{background:var(--hover);color:var(--danger);border-color:var(--danger)}
#btnEmptyTrash:disabled{opacity:.45;cursor:default;background:var(--panel);color:var(--text-3);border-color:var(--border)}
#btnEmptyTrash:disabled:hover{background:var(--panel);color:var(--text-3);border-color:var(--border)}
.btn-primary{display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#fff;border-radius:8px;padding:8px 14px;font-weight:600;font-size:13px;box-shadow:0 2px 6px rgba(76,110,245,.25)}
.btn-primary:hover{background:var(--accent-2)}
.btn-primary.big{width:100%;justify-content:center;padding:12px;font-size:15px}
.plain-select,.tb-select{border:1px solid var(--border);background:var(--panel);border-radius:7px;padding:5px 8px;font-size:12px;color:var(--text-2);max-width:160px}
.plain-select:hover,.tb-select:hover{border-color:var(--accent)}
.pill{background:var(--panel-3);color:var(--text-2);border-radius:20px;padding:1px 9px;font-size:12px;font-weight:600}
kbd{border:1px solid var(--border-2);border-bottom-width:2px;border-radius:5px;padding:1px 6px;font:12px ui-monospace,Consolas,monospace;background:var(--panel-2)}

/* ===== login ===== */
.login-mask{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#e8edff 0%,#f6f8fc 45%,#e6f7f2 100%);z-index:200}
:root[data-theme="dark"] .login-mask{background:linear-gradient(135deg,#1a2036,#171a20 50%,#16251f)}
.login-card{width:380px;background:var(--panel);border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow);padding:36px 34px 28px;text-align:center}
.login-mark{width:58px;height:58px;margin:0 auto 14px;border-radius:16px;background:var(--accent);color:#fff;font-size:30px;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 18px rgba(76,110,245,.35)}
.login-card h1{margin:0 0 26px;font-size:23px;letter-spacing:1px}
.login-card label{display:block;text-align:left;font-size:12px;color:var(--text-2);margin-bottom:14px}
.login-card label input{display:block;width:100%;margin-top:6px;padding:11px 12px;border:1px solid var(--border);border-radius:9px;background:var(--panel-2);font-size:14px;color:var(--text)}
.login-card label input:focus{border-color:var(--accent);background:var(--panel)}
.login-err{color:var(--danger);font-size:12px;min-height:20px;text-align:left}

/* ===== layout ===== */
.app{display:grid;grid-template-columns:250px 322px minmax(0,1fr);height:100vh}
.sidebar{background:var(--col1,var(--panel));border-right:1px solid var(--border);display:flex;flex-direction:column;min-height:0}
.listpane{background:var(--col2,var(--panel-2));border-right:1px solid var(--border);display:flex;flex-direction:column;min-height:0}
.editorpane{background:var(--col3,var(--panel));display:flex;flex-direction:column;min-width:0;min-height:0;position:relative}

.side-head{height:56px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--border);flex:none}
.brand{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:700;letter-spacing:1px}
.brand-mark{width:28px;height:28px;border-radius:8px;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:17px}
.side-search{margin:12px 14px 6px;display:flex;align-items:center;gap:7px;padding:0 10px;height:34px;border:1px solid var(--border);background:var(--panel-2);border-radius:8px;color:var(--text-3)}
.side-search:focus-within{border-color:var(--accent);background:var(--panel)}
.side-search input{flex:1;min-width:0;border:0;background:transparent;font-size:13px;color:var(--text)}
.mini-x{color:var(--text-3);display:flex}
.quick{padding:6px 10px 10px;display:flex;flex-direction:column;gap:2px;border-bottom:1px solid var(--border)}
.quick button{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;color:var(--text-2);font-size:13px;text-align:left;width:100%}
.quick button:hover{background:var(--hover);color:var(--text)}
.quick button.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
.quick button span{flex:1}
.quick button em{font-style:normal;font-size:11px;color:var(--text-3);background:var(--panel-3);border-radius:12px;padding:0 7px}
.quick button.active em{background:var(--panel);color:var(--accent)}
.side-section{padding:12px 10px 4px;overflow-y:auto;min-height:0;flex:1}
.side-section+.side-section{flex:0 1 auto;max-height:180px;border-top:1px solid var(--border)}
.section-title{display:flex;align-items:center;justify-content:space-between;padding:0 8px 8px;font-size:11px;font-weight:700;letter-spacing:1px;color:var(--text-3);text-transform:uppercase}
.tree-node{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:7px;font-size:13px;color:var(--text-2);cursor:pointer;position:relative}
.tree-node:hover{background:var(--hover);color:var(--text)}
.tree-node.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
.tree-node .twist{width:16px;height:16px;display:flex;align-items:center;justify-content:center;color:var(--text-3);transition:transform .15s}
.tree-node .twist.open{transform:rotate(90deg)}
.tree-node .twist.empty{opacity:0}
.tree-node .dot{width:8px;height:8px;border-radius:3px;flex:none}
.tree-node .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tree-node .cnt{font-size:11px;color:var(--text-3);font-weight:400}
.tree-node .ops{display:none;gap:2px}
.tree-node:hover .ops{display:flex}
.tree-node .ops button{color:var(--text-3);padding:2px;border-radius:4px;display:flex}
.tree-node .ops button:hover{background:var(--panel-3);color:var(--accent)}
.tree-children{margin-left:14px;border-left:1px solid var(--border);padding-left:4px}
.tag-list{display:flex;flex-wrap:wrap;gap:6px;padding:2px 8px 10px}
.tag-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:20px;background:var(--panel-3);color:var(--text-2);font-size:12px;cursor:pointer}
.tag-pill:hover,.tag-pill.active{background:var(--accent-soft);color:var(--accent)}
.tag-pill .x{color:var(--text-3);display:none}
.tag-pill:hover .x{display:inline}
.side-foot{flex:none;border-top:1px solid var(--border);padding:10px 14px 12px}
.user-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-2);margin-bottom:8px}
.user-row>span:nth-child(2){flex:1}
.avatar{width:24px;height:24px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
.foot-actions{display:flex;gap:6px}
.foot-actions button{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;font-size:11px;color:var(--text-3);border:1px solid var(--border);border-radius:7px;padding:6px}
.foot-actions button:hover{color:var(--accent);border-color:var(--accent)}

/* ===== note list ===== */
.list-head{flex:none;padding:16px 16px 12px;border-bottom:1px solid var(--border)}
.list-title-row{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.list-title-row h2{margin:0;font-size:16px;font-weight:700;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-tools{display:flex;gap:8px;align-items:center}
.list-tools .btn-primary{flex:1;justify-content:center}
.list-tools .plain-select{width:112px}
.note-list{flex:1;overflow-y:auto;padding:8px}
.note-card{padding:12px 13px;border-radius:10px;border:1px solid transparent;margin-bottom:4px;cursor:pointer;position:relative}
.note-card:hover{background:var(--panel);border-color:var(--border)}
.note-card.active{background:var(--panel);border-color:var(--accent);box-shadow:var(--shadow-sm)}
.note-card h3{margin:0 0 5px;font-size:14px;font-weight:600;display:flex;align-items:center;gap:6px;overflow:hidden}
.note-card h3 span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.note-card p{margin:0 0 8px;font-size:12px;color:var(--text-3);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:18px}
.note-card .meta{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-3)}
.note-card .meta .tag{background:var(--panel-3);border-radius:4px;padding:0 5px;color:var(--text-2)}
.note-card .meta .star{color:var(--warn)}
.note-card .row-ops{position:absolute;right:8px;top:9px;display:none;gap:2px}
.note-card:hover .row-ops{display:flex}
.note-card .row-ops button{background:var(--panel);border:1px solid var(--border);border-radius:5px;padding:2px;color:var(--text-3);display:flex}
.note-card .row-ops button:hover{color:var(--accent)}
.empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-3);gap:4px}
.empty-mark{font-size:40px;margin-bottom:8px}
.empty p{margin:0;color:var(--text-2);font-weight:600}
.empty span{font-size:12px}
.editor-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text-3)}
.empty-illu{width:132px;height:132px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(120% 120% at 28% 20%,#fdfeff 0%,#e7eeff 54%,#cfdcff 100%);
  box-shadow:0 12px 28px -18px rgba(76,110,245,.5),inset 0 0 0 1px rgba(120,150,230,.22)}
.empty-illu svg{width:72%;height:72%;display:block}
.editor-empty h2{color:var(--text-2);font-size:19px;font-weight:600;margin:6px 0 0;letter-spacing:.2px}
.editor-empty p{font-size:13px;margin:0}
.empty-keys{margin-top:14px;font-size:12px;background:var(--panel-2);padding:8px 14px;border-radius:8px}

/* ===== editor pane ===== */
.editor-wrap{position:relative;display:flex;flex-direction:column;height:100%;min-height:0;padding-right:46px}
.doc-head{flex:none;display:flex;align-items:center;gap:10px;padding:16px clamp(24px,4vw,64px) 6px}
.doc-title{flex:1;border:0;background:transparent;font-size:24px;font-weight:700;letter-spacing:.3px;color:var(--text);min-width:0}
.doc-title::placeholder{color:var(--text-3)}
.doc-actions{display:flex;gap:2px}
.doc-meta{flex:none;display:flex;align-items:center;gap:8px;padding:0 clamp(24px,4vw,64px) 10px;flex-wrap:wrap;border-bottom:1px solid var(--border)}
.doc-meta .plain-select{max-width:150px;font-size:12px}
.chips{display:flex;gap:5px;flex-wrap:wrap}
.chip{font-size:11px;padding:2px 8px;border-radius:20px;background:var(--accent-soft);color:var(--accent);display:inline-flex;align-items:center;gap:4px}
.chip .x{cursor:pointer;opacity:.7}
.chip.add{background:transparent;border:1px dashed var(--border-2);color:var(--text-3);cursor:pointer}
.chip.add:hover{color:var(--accent);border-color:var(--accent)}
.meta-time{margin-left:auto;font-size:11px;color:var(--text-3)}

.toolbar{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:3px;padding:7px 16px;background:var(--panel-2);border-bottom:1px solid var(--border);position:relative;z-index:5}
.tb-group{display:flex;align-items:center;gap:2px}
.tb-sep{width:1px;height:20px;background:var(--border-2);margin:0 4px;flex:none;display:inline-block}
.tb{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;color:var(--text-2);font-size:13px}
.tb:hover{background:var(--hover);color:var(--text)}
.tb.on{background:var(--accent-soft);color:var(--accent)}
.tb-text{font:13px Georgia,serif}
.tb-text.mono{font:11px ui-monospace,Consolas,monospace}
.tb-select{height:28px;padding:2px 6px;max-width:104px;font-size:12px}
#selFont{max-width:110px}
#selSize,#selLine{max-width:66px}

.table-bar{flex:none;display:flex;align-items:flex-start;gap:4px 8px;padding:6px 12px;background:var(--accent-soft);border-bottom:1px solid var(--border);flex-wrap:wrap;max-height:112px;overflow:auto}
.table-bar .tb-label{display:flex;align-items:center;gap:5px;font-size:12px;font-weight:700;color:var(--accent);flex:0 0 auto;height:24px}
.table-bar-ops{display:flex;align-items:center;gap:3px;flex-wrap:wrap;flex:1 1 0;min-width:0}
.table-bar button{font-size:11px;color:var(--text-2);padding:4px 7px;border-radius:6px;background:var(--panel);border:1px solid var(--border)}
.table-bar button:hover{color:var(--accent);border-color:var(--accent)}
.table-bar button.danger{color:var(--danger)}
.table-bar .tb-sep{margin:0 4px;height:16px;background:var(--border-2)}
.table-info{display:none}

.find-bar{flex:none;display:flex;align-items:center;gap:7px;padding:7px 16px;background:var(--panel-2);border-bottom:1px solid var(--border);color:var(--text-3)}
.find-bar input{border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:4px 8px;font-size:12px;color:var(--text);width:170px}
.find-bar input:focus{border-color:var(--accent)}
.find-bar>button:not(.icon-btn){font-size:12px;color:var(--text-2);border:1px solid var(--border);border-radius:6px;padding:3px 9px;background:var(--panel)}
.find-bar>button:hover{color:var(--accent);border-color:var(--accent)}
.find-count{font-size:11px;min-width:42px;color:var(--text-3)}
.case-opt{font-size:11px;display:flex;align-items:center;gap:3px;white-space:nowrap}
.case-opt input{width:auto}

.editor-scroll{flex:1;overflow:auto;min-height:0;scroll-behavior:smooth}
.editor{width:100%;max-width:none;margin:0;padding:30px clamp(24px,4vw,64px) 32px}
.statusbar{flex:none;display:flex;align-items:center;gap:10px;padding:6px 16px;border-top:1px solid var(--border);background:var(--panel-2);font-size:11px;color:var(--text-3)}
.statusbar .spacer{flex:1}
.save-state{color:var(--success)}
.save-state.dirty{color:var(--warn)}
.save-state.saving{color:var(--accent)}
.status-tip{opacity:.75}

/* ===== ProseMirror content ===== */
.ProseMirror{outline:none;min-height:0;font-size:15px;line-height:1.6;color:var(--text);word-wrap:break-word}
.ProseMirror>*:first-child{margin-top:0}
/* 段落间距对齐为知 X：块上下 16 / 8（相邻块外边距折叠后约 16px） */
.ProseMirror p{margin:16px 0 8px}
/* 标题完全对齐「为知笔记 X」编辑器（www.wiz.cn/xapp 实测变量）：
   H1 28/1.5 · H2 26/1.5 · H3 24/1.5 · H4 22/1.5 · H5 20/1.6 · H6 18/1.6
   字重 500、字间距 1px、段间距 24/8（H5、H6 为 16/8），无下边框 */
.ProseMirror h1,.ProseMirror h2,.ProseMirror h3,.ProseMirror h4,.ProseMirror h5,.ProseMirror h6{font-weight:500;letter-spacing:1px;border:0}
.ProseMirror h1{font-size:28px;line-height:1.5;margin:24px 0 8px}
.ProseMirror h2{font-size:26px;line-height:1.5;margin:24px 0 8px}
.ProseMirror h3{font-size:24px;line-height:1.5;margin:20px 0 8px}
.ProseMirror h4{font-size:22px;line-height:1.5;margin:20px 0 8px}
.ProseMirror h5{font-size:20px;line-height:1.6;margin:16px 0 8px}
.ProseMirror h6{font-size:18px;line-height:1.6;margin:16px 0 8px;color:var(--text-2)}
.ProseMirror p.is-editor-empty:first-child::before,.ProseMirror .is-empty::before{content:attr(data-placeholder);float:left;height:0;pointer-events:none;color:var(--text-3);opacity:.8}
.ProseMirror pre.is-empty::before,.ProseMirror .code-wrap.is-empty::before{content:none!important}
.ProseMirror ul,.ProseMirror ol{padding-left:26px;margin:16px 0 10px}
.ProseMirror li{margin:3px 0}
.ProseMirror li p{margin:2px 0}
/* 待办事项：自定义复选框，替代浏览器原生的灰实心方块 */
.ProseMirror ul[data-type="taskList"]{list-style:none;padding-left:4px}
.ProseMirror ul[data-type="taskList"] li{display:flex;align-items:flex-start;gap:9px}
.ProseMirror ul[data-type="taskList"] li>label{flex:none;margin:2px 0 0;height:1.85em;user-select:none;display:flex;align-items:center}
.ProseMirror ul[data-type="taskList"] li>div{flex:1;min-width:0}
.ProseMirror ul[data-type="taskList"] input[type="checkbox"]{
  -webkit-appearance:none;appearance:none;
  width:16px;height:16px;margin:0;flex:none;
  border:1.5px solid var(--text-3);border-radius:5px;
  background-color:transparent;background-image:none;background-position:center;background-repeat:no-repeat;background-size:12px 12px;
  cursor:pointer;transition:border-color .16s,background-color .16s,box-shadow .16s,transform .16s;
}
.ProseMirror ul[data-type="taskList"] input[type="checkbox"]:hover{
  border-color:var(--accent);background-color:var(--accent-soft);box-shadow:0 0 0 3px var(--accent-soft);
}
.ProseMirror ul[data-type="taskList"] input[type="checkbox"]:focus-visible{
  outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);
}
.ProseMirror ul[data-type="taskList"] input[type="checkbox"]:checked{
  border-color:var(--accent);background-color:var(--accent);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.2 8.4l3.1 3.1 6.5-6.6' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.ProseMirror ul[data-type="taskList"] input[type="checkbox"]:checked:hover{
  background-color:var(--accent-2);border-color:var(--accent-2);box-shadow:0 0 0 3px var(--accent-soft);
}
.ProseMirror ul[data-type="taskList"] input[type="checkbox"]:active{transform:scale(.9)}
.ProseMirror ul[data-type="taskList"] li[data-checked="true"]>div{text-decoration:line-through;color:var(--text-3);opacity:.8}
.ProseMirror blockquote{border-left:3px solid var(--accent);background:var(--accent-soft);padding:8px 14px;margin:14px 0;border-radius:0 8px 8px 0;color:var(--text-2)}
.ProseMirror blockquote p{margin:0}
.ProseMirror hr{border:0;border-top:1px solid var(--border-2);margin:24px 0}
.ProseMirror code{background:var(--panel-3);color:var(--danger);border-radius:4px;padding:1px 5px;font:13px ui-monospace,SFMono-Regular,Consolas,monospace}
.ProseMirror pre{background:var(--code-bg);border:0;border-radius:6px;padding:14px 16px;margin:16px 0;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;font:13px/1.9 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--text);tab-size:4}
.ProseMirror pre code{background:none;color:inherit;padding:0;font:inherit}
.ProseMirror pre .hljs-comment,.ProseMirror pre .hljs-quote{color:var(--text-3);font-style:italic}
.ProseMirror pre .hljs-keyword,.ProseMirror pre .hljs-selector-tag,.ProseMirror pre .hljs-literal,.ProseMirror pre .hljs-built_in{color:#c678dd}
.ProseMirror pre .hljs-string,.ProseMirror pre .hljs-attr,.ProseMirror pre .hljs-addition{color:#98c379}
.ProseMirror pre .hljs-number,.ProseMirror pre .hljs-symbol,.ProseMirror pre .hljs-variable{color:#d19a66}
.ProseMirror pre .hljs-title,.ProseMirror pre .hljs-function,.ProseMirror pre .hljs-section{color:#61afef}
.ProseMirror pre .hljs-type,.ProseMirror pre .hljs-class .hljs-title{color:#e5c07b}
:root[data-theme="light"] .ProseMirror pre .hljs-keyword{color:#a626a4}
:root[data-theme="light"] .ProseMirror pre .hljs-string{color:#50a14f}
:root[data-theme="light"] .ProseMirror pre .hljs-number{color:#986801}
:root[data-theme="light"] .ProseMirror pre .hljs-title{color:#4078f2}
.ProseMirror a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.ProseMirror mark{background:#fff3a3;color:inherit;border-radius:2px;padding:0 2px}
:root[data-theme="dark"] .ProseMirror mark{color:#1f2329}
.ProseMirror img{display:block;max-width:100%;height:auto;border-radius:8px;margin:14px auto;border:1px solid var(--border);cursor:pointer}
.ProseMirror img[data-align="left"]{margin-left:0;margin-right:auto}
.ProseMirror img[data-align="right"]{margin-right:0;margin-left:auto}
.ProseMirror img.ProseMirror-selectednode{outline:3px solid var(--accent);outline-offset:2px}
.ProseMirror iframe{display:block;width:100%;max-width:720px;aspect-ratio:16/9;border:0;border-radius:10px;margin:16px auto}
.ProseMirror sup{vertical-align:super;font-size:.75em}
.ProseMirror sub{vertical-align:sub;font-size:.75em}
.ProseMirror details{border:1px solid var(--border);border-radius:8px;padding:8px 12px;margin:14px 0;background:var(--panel-2)}
.ProseMirror details summary{cursor:pointer;font-weight:600;color:var(--accent);outline:none}
.ProseMirror details[open] summary{margin-bottom:8px}
.ProseMirror .biji-hit{background:#ffeaa7;color:#1f2329;border-radius:2px}
.ProseMirror .biji-hit-current{background:#ff922b;color:#fff;border-radius:2px;box-shadow:0 0 0 2px rgba(255,146,43,.3)}
.ProseMirror .ProseMirror-gapcursor:after{border-top-color:var(--accent)}
.ProseMirror ::selection,.ProseMirror::selection{background:var(--sel)}

/* tables */
.ProseMirror .tableWrapper{overflow-x:auto;margin:14px 0;position:relative}
/* 固定布局：列宽由表格/colgroup 决定，不随单元格内容自适应（编辑时不跳动） */
.ProseMirror table{border-collapse:collapse;width:100%;table-layout:fixed;margin:0;overflow:hidden;border-radius:6px;font-size:14px}
.ProseMirror table[data-layout="fixed"]{table-layout:fixed}
/* 仅在用户主动切换「自动布局」时启用自适应 */
.ProseMirror table[data-layout="auto"]{table-layout:auto}
/* 表格宽度档位用属性而非 inline style，避免被列宽插件覆盖 */
.ProseMirror table[data-table-width="100%"]{width:100%}
.ProseMirror table[data-table-width="80%"]{width:80%}
.ProseMirror table[data-table-width="60%"]{width:60%}
.ProseMirror table td,.ProseMirror table th{border:1px solid var(--border-2);padding:7px 10px;min-width:60px;position:relative;vertical-align:top;box-sizing:border-box;height:41px;overflow-wrap:anywhere;word-break:break-word}
/* 空单元格不显示正文占位文字，避免视觉上多出一行 */
.ProseMirror table td p.is-editor-empty::before,.ProseMirror table th p.is-editor-empty::before,.ProseMirror table td p.is-empty::before,.ProseMirror table th p.is-empty::before,.ProseMirror table td.is-empty::before,.ProseMirror table th.is-empty::before{content:none}
.ProseMirror table th{background:var(--panel-3);font-weight:700;text-align:left;color:var(--text)}
.ProseMirror table td>p,.ProseMirror table th>p{margin:0}
.ProseMirror table p{margin:0 0 4px}
.ProseMirror table p:last-child{margin-bottom:0}
.ProseMirror table ul,.ProseMirror table ol{margin:4px 0}
.ProseMirror .selectedCell:after{content:"";position:absolute;inset:0;background:rgba(76,110,245,.16);pointer-events:none;z-index:2}
.ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:-2px;width:4px;background:var(--accent);pointer-events:none;z-index:5}
.ProseMirror.resize-cursor{cursor:col-resize}
.ProseMirror .tableWrapper::-webkit-scrollbar{height:8px}
.ProseMirror .tableWrapper::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:4px}

/* ===== floating UI ===== */
.bubble-menu,.slash-menu,.context-menu,.pop-layer{position:fixed;z-index:120;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:5px}
.bubble-menu{display:flex;align-items:center;gap:2px;max-width:92vw;flex-wrap:wrap}
.bubble-menu .tb{width:26px;height:26px}
.bubble-menu .tb-sep{margin:0 3px;height:18px}
/* 光标停在链接里（未选中文字）时，只留「编辑 / 取消链接」两项 */
.bubble-menu.link-only [data-act]:not([data-act="link"]):not([data-act="unlink"]){display:none}
.bubble-menu.link-only .tb-sep{display:none}
.slash-menu{width:264px;max-height:340px;overflow-y:auto;padding:6px}
.slash-group{font-size:10px;font-weight:700;letter-spacing:1px;color:var(--text-3);padding:7px 8px 3px;text-transform:uppercase}
.slash-item{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:7px;font-size:13px;color:var(--text-2);cursor:pointer;width:100%;text-align:left}
.slash-item:hover,.slash-item.active{background:var(--accent-soft);color:var(--accent)}
.slash-item .si-ico{width:22px;height:22px;border-radius:6px;background:var(--panel-3);display:flex;align-items:center;justify-content:center;font-size:13px;flex:none}
.slash-item .si-desc{font-size:11px;color:var(--text-3);margin-left:auto}
.context-menu{min-width:190px;padding:6px}
.ctx-item{display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;border-radius:7px;font-size:13px;color:var(--text-2);text-align:left}
.ctx-item:hover{background:var(--hover);color:var(--text)}
.ctx-item.danger:hover{background:var(--danger-soft);color:var(--danger)}
.ctx-sep{height:1px;background:var(--border);margin:5px 4px}
.pop-layer{padding:10px;min-width:180px}
.pop-title{font-size:11px;font-weight:700;color:var(--text-3);margin:0 0 8px;letter-spacing:1px;text-transform:uppercase}
.swatch-grid{display:grid;grid-template-columns:repeat(8,22px);gap:5px}
.swatch{width:22px;height:22px;border-radius:5px;border:1px solid var(--border-2);cursor:pointer}
.swatch:hover{transform:scale(1.14);box-shadow:var(--shadow-sm)}
.pop-row{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:12px;color:var(--text-2)}
.pop-row input[type=color]{width:30px;height:26px;border:1px solid var(--border);border-radius:5px;background:var(--panel);padding:1px;cursor:pointer}
.pop-row input[type=text],.pop-row select{flex:1;border:1px solid var(--border);background:var(--panel-2);border-radius:6px;padding:5px 8px;font-size:12px;min-width:0}
.matrix{display:grid;grid-template-columns:repeat(10,18px);gap:3px}
.matrix .cell{width:18px;height:18px;border:1px solid var(--border-2);border-radius:3px;cursor:pointer}
.matrix .cell.on{background:var(--accent);border-color:var(--accent)}
.matrix-hint{text-align:center;font-size:12px;color:var(--text-2);margin-top:8px;min-height:18px}
.emoji-grid{display:grid;grid-template-columns:repeat(9,26px);gap:3px;max-height:230px;overflow-y:auto}
.emoji-grid button{font-size:18px;height:26px;border-radius:5px}
.emoji-grid button:hover{background:var(--hover)}
.pop-list{display:flex;flex-direction:column;gap:3px;min-width:180px}
.pop-list button{text-align:left;font-size:13px;color:var(--text-2);padding:7px 10px;border-radius:7px;display:flex;align-items:center;gap:8px}
.pop-list button:hover{background:var(--hover);color:var(--text)}
.pop-list button.danger{color:var(--danger)}

.modal-mask{position:fixed;inset:0;background:rgba(12,16,24,.45);z-index:150;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
.modal{width:440px;max-width:100%;max-height:86vh;overflow:auto;background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow)}
.modal.wide{width:620px}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}
.modal-head h3{margin:0;font-size:15px}
.modal-body{padding:18px 20px;font-size:13px;color:var(--text-2)}
.set-check{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--text);cursor:pointer;line-height:1.5}
.set-check input{width:15px;height:15px;margin:2px 0 0;accent-color:var(--accent);cursor:pointer;flex:none}
.modal-body label{display:block;margin-bottom:14px;font-size:12px;color:var(--text-2)}
.modal-body label input,.modal-body label select,.modal-body label textarea{display:block;width:100%;margin-top:6px;padding:9px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel-2);color:var(--text);font-size:13px}
.modal-body label input:focus,.modal-body label textarea:focus{border-color:var(--accent)}
.modal-body .hint{font-size:11px;color:var(--text-3);margin:6px 0 0}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px;border-top:1px solid var(--border)}
.modal-foot button{padding:8px 16px;border-radius:8px;font-size:13px;border:1px solid var(--border);color:var(--text-2)}
.modal-foot button:hover{background:var(--hover)}
.modal-foot button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.version-item{display:flex;align-items:center;gap:10px;padding:10px 4px;border-bottom:1px solid var(--border);font-size:13px}
.version-item .vtime{flex:1;color:var(--text-2)}
.version-item .vsize{color:var(--text-3);font-size:11px}
.version-item button{font-size:11px;color:var(--accent);padding:3px 8px;border:1px solid var(--border);border-radius:6px}
.toast{position:fixed;left:50%;bottom:40px;transform:translate(-50%,20px);background:#222831;color:#fff;padding:10px 20px;border-radius:9px;font-size:13px;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.22s;z-index:300;max-width:80vw;text-align:center}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.error{background:#c92a2a}

/* fullscreen / responsive */
body.focus-mode .sidebar,body.focus-mode .listpane,body.focus-mode .doc-meta,body.focus-mode .table-bar,body.focus-mode .find-bar{display:none}
body.focus-mode .doc-head{display:none}
body.focus-mode .doc-title{display:none}
body.focus-mode .app{grid-template-columns:minmax(0,1fr)}
body.focus-mode .editor{max-width:none}
@media(max-width:1180px){.app{grid-template-columns:210px 270px minmax(0,1fr)}.editor{padding:24px 20px 28px}.doc-head,.doc-meta{padding-left:20px;padding-right:20px}.table-bar-ops button{font-size:10px}}
@media(max-width:900px){.app{grid-template-columns:0 240px minmax(0,1fr)}.sidebar{position:fixed;left:0;top:0;bottom:0;width:250px;z-index:60;transform:translateX(-100%);transition:.2s}body.side-open .sidebar{transform:none;box-shadow:var(--shadow)}.toolbar{row-gap:4px}}
@media print{.sidebar,.listpane,.toolbar,.table-bar,.find-bar,.statusbar,.doc-actions,.doc-meta,.doc-tabs,.doc-rail,.bubble-menu,.slash-menu,.pop-layer,.context-menu{display:none !important}.app{display:block;height:auto}.editorpane,.editor-wrap{height:auto;display:block;padding-right:0}.editor-scroll{overflow:visible}.editor{padding:0;max-width:none}body{overflow:visible}}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:var(--text-3)}
::-webkit-scrollbar-track{background:transparent}

/* ===== unified navigation tree ===== */
.navtree{flex:1;min-height:0;overflow-y:auto;padding:10px 10px 14px}
.tree-node.root{background:var(--panel-2);border:1px solid var(--border);font-weight:600;margin-bottom:4px}
.tree-node.root.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.root-ico,.v-ico{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--accent);flex:none}
.tree-node.virtual .v-ico{color:var(--text-3)}
.tree-node.virtual.active .v-ico{color:var(--accent)}
.tree-children.root-children{margin-left:10px;border-left:1px solid var(--border);padding-left:6px}
.nav-divider{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:10px 4px 4px;padding-top:10px;border-top:1px solid var(--border);font-size:10px;font-weight:700;letter-spacing:1px;color:var(--text-3);text-transform:uppercase}
.nav-divider button{display:flex;color:var(--text-3);padding:2px;border-radius:4px}
.nav-divider button:hover{background:var(--panel-3);color:var(--accent)}
.nav-hint{font-size:12px;color:var(--text-3);padding:4px 8px}
.navtree .tag-list{padding:2px 4px 8px}

/* ===== application context menu ===== */
.context-menu{min-width:212px;max-height:calc(100vh - 16px);overflow-y:auto;overscroll-behavior:contain}
.ctx-head{font-size:11px;font-weight:700;color:var(--text-3);padding:4px 10px 9px;margin-bottom:5px;border-bottom:1px solid var(--border);max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ctx-item .ctx-gap{width:16px;flex:none}
.ctx-item em{margin-left:auto;font-style:normal;font-size:10px;color:var(--text-3)}

/* ===== 表格浮动工具栏：跟随光标出现在表格上方 ===== */
.tbl-float{position:fixed;z-index:118;display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:5px 7px;background:var(--panel);
  border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);max-width:calc(100vw - 16px);
  animation:tfIn .12s ease-out}
@keyframes tfIn{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
.tbl-float .tf-label{display:flex;align-items:center;gap:4px;padding:0 7px 0 2px;font-size:11px;font-weight:600;
  color:var(--text-3);white-space:nowrap;flex:none;letter-spacing:.2px}
.tbl-float .tf-label .ic{width:13px;height:13px}
.tbl-float .tb{width:26px;height:26px;flex:none;border-radius:6px;color:var(--text-2)}
.tbl-float .tb:hover{background:var(--accent-soft);color:var(--accent)}
.tbl-float .tb.on{background:var(--accent-soft);color:var(--accent)}
.tbl-float .tb.danger{color:var(--danger)}
.tbl-float .tb.danger:hover{background:var(--danger-soft)}
.tbl-float .tt-sep{width:1px;height:16px;background:var(--border-2);margin:0 3px;flex:none}
.tb[data-tip]{position:relative}
.tb[data-tip]:hover::after{content:attr(data-tip);position:absolute;top:calc(100% + 7px);left:50%;transform:translateX(-50%);background:#222831;color:#fff;font-size:11px;line-height:1.4;padding:5px 9px;border-radius:6px;white-space:nowrap;z-index:200;box-shadow:var(--shadow);pointer-events:none}
.tb[data-tip]:hover::before{content:"";position:absolute;top:calc(100% + 1px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-bottom-color:#222831;z-index:200;pointer-events:none}
.pop-group{font-size:10px;font-weight:700;letter-spacing:1px;color:var(--text-3);text-transform:uppercase;padding:8px 8px 3px}
.pop-list .ctx-sep{margin:4px 2px}

/* ===== single-row toolbar (wide screens) ===== */
.toolbar{flex-wrap:wrap;overflow:visible;row-gap:4px}
.pop-list button em{margin-left:auto;font-style:normal;font-size:10px;color:var(--text-3)}
.tt-txt{width:16px;text-align:center;font:12px Georgia,serif;flex:none;color:var(--text-2)}
.pop-row span{font-size:12px;color:var(--text-2);white-space:nowrap;width:34px;flex:none}

/* ===== shortcut reference ===== */
.sc-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}
.sc-title{font-size:11px;font-weight:700;letter-spacing:1px;color:var(--accent);text-transform:uppercase;padding-bottom:6px;border-bottom:1px solid var(--border);margin-bottom:4px}
.sc-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:5px 0;font-size:12px;color:var(--text-2)}
.sc-keys{display:flex;gap:3px;flex:none}
.sc-keys kbd{font-size:10px;padding:1px 5px;background:var(--panel-2)}
@media(max-width:700px){.sc-grid{grid-template-columns:1fr}}

/* ===== compact two-pane layout ===== */
.app{grid-template-columns:226px 286px minmax(0,1fr)}
.sidebar{position:relative}
.side-head{height:56px;padding:0 12px;border-bottom:0}
.brand{font-size:15px;letter-spacing:.5px}
.brand-mark{width:26px;height:26px;font-size:16px}
.head-actions{display:flex;align-items:center;gap:2px}
.avatar-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%}
.avatar-btn:hover{background:var(--hover)}
.avatar{width:24px;height:24px;font-size:11px}
.user-menu{position:absolute;top:52px;right:8px;width:190px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:6px;z-index:80}
.um-head{padding:8px 10px;border-bottom:1px solid var(--border);margin-bottom:5px;font-size:12px;font-weight:600;color:var(--text-2)}
.user-menu button{display:flex;align-items:center;gap:9px;width:100%;padding:8px 10px;border-radius:7px;font-size:12px;color:var(--text-2);text-align:left}
.user-menu button:hover{background:var(--hover);color:var(--text)}
.navtree{padding:6px 8px 12px}
.tree-node{padding:5px 8px;font-size:12.5px;border-radius:6px}
.tree-node.root{border:0;background:transparent;font-weight:600;margin-bottom:0}
.tree-node.root.active{background:var(--panel-3);color:var(--text);border:0}
.tree-node.active{background:var(--panel-3);color:var(--text)}
.tree-node.active .root-ico,.tree-node.active .v-ico{color:var(--text-2)}
.tree-children.root-children{margin-left:8px;padding-left:4px;border-left:1px solid var(--border)}
.nav-divider{margin-top:12px;padding-top:12px}
.nav-hint{padding-left:8px}
.list-head{padding:10px 12px 8px;border-bottom:1px solid var(--border)}
.list-search-row{display:flex;gap:6px;align-items:center}
.side-search.list-search{margin:0;flex:1;min-width:0;height:32px;padding:0 8px}
.new-note-group{display:flex;flex:none}
.btn-primary.new-note-main{border-radius:8px;padding:7px 10px;font-size:12px;gap:3px}
/* 新建按钮拆成「主按钮 + 模板下拉」，两者拼成一组 */
.new-note-group{gap:0}
.btn-primary.new-note-main{border-top-right-radius:0;border-bottom-right-radius:0}
.btn-primary.new-note-more{border-top-left-radius:0;border-bottom-left-radius:0;padding:7px 7px;font-size:10px;box-shadow:none;border-left:1px solid rgba(255,255,255,.28)}
.btn-primary.new-note-more:hover{background:var(--accent-2)}
.tpl-pop{width:236px;padding:6px}
.tpl-title{font-size:11px;color:var(--text-3);padding:3px 8px 6px}
.tpl-pop button{display:flex;flex-direction:column;gap:1px;width:100%;text-align:left;padding:7px 9px;border-radius:8px}
.tpl-pop button:hover{background:var(--hover)}
.tpl-pop button b{font-size:12.5px;font-weight:600;color:var(--text)}
.tpl-pop button em{font-style:normal;font-size:10.5px;color:var(--text-3)}
.tpl-sep{height:1px;background:var(--border);margin:5px 6px}
.list-meta-row{display:flex;align-items:center;gap:6px;margin-top:9px;font-size:11px;color:var(--text-3)}
.list-meta-row .spacer{flex:1}
.list-title-mini{font-weight:600;color:var(--text-2);max-width:min(200px,62%);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-count-text b{color:var(--text-2)}
.plain-select.mini-sort{width:auto;max-width:104px;padding:3px 5px;font-size:11px;border:0;background:transparent;color:var(--text-3)}
.note-list{padding:0 12px}
.note-card{display:flex;align-items:center;gap:8px;padding:11px 10px;border:0;border-bottom:1px solid var(--border);border-radius:0;margin:0;background:transparent}
.note-card:hover{background:var(--hover);border-color:var(--border)}
.note-card.active{background:var(--accent-soft);border-color:var(--border);box-shadow:inset 3px 0 0 var(--accent)}
.note-card h3,.note-card p,.note-card .meta{display:none}
.nc-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;color:var(--text)}
.note-card.active .nc-title{color:var(--accent)}
.nc-star{color:var(--warn);font-size:12px;flex:none}
.note-card .row-ops{position:static;display:none;gap:2px;flex:none}
.note-card:hover .row-ops{display:flex}
.note-card .row-ops button{width:20px;height:20px;padding:1px}
.note-card .row-ops button .ic{width:12px;height:12px}
@media(max-width:1180px){.app{grid-template-columns:210px 260px minmax(0,1fr)}}

/* ===== list pane: search button / options menu / display modes ===== */
.list-search-row .row-spacer{flex:1}
.list-search-row.searching .row-spacer{display:none}
.search-toggle .ic{width:18px;height:18px}
.search-toggle:hover{color:var(--accent)}
.list-search .mini-x{width:20px;height:20px;align-items:center;justify-content:center;flex:none;border-radius:5px}
.list-search .mini-x:hover{background:var(--hover);color:var(--text)}
.list-menu-btn{width:26px;height:26px;color:var(--text-3)}
.list-menu-btn:hover{color:var(--text)}
.list-menu-btn.active{color:var(--accent);background:var(--accent-soft)}
.list-menu-btn .ic{width:17px;height:17px}
.lm-wrap{min-width:236px}
.lm-sec{padding:1px 0 7px}
.lm-sec + .lm-sec{border-top:1px solid var(--border);padding-top:7px}
.lm-item{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border-radius:7px;font-size:12.5px;color:var(--text-2);text-align:left}
.lm-item:hover{background:var(--hover);color:var(--text)}
.lm-item.on{color:var(--accent);font-weight:600}
.lm-item > span{flex:1}
.lm-item em{font-style:normal;font-size:11px;color:var(--text-3);margin-left:auto}
.lm-item .ic{width:14px;height:14px;color:var(--accent);flex:none}
.mark-filter{padding:6px 10px 4px}
.mf-label{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--text-3);margin-bottom:9px}
.mf-clear{font-size:11px;color:var(--accent);padding:2px 5px;border-radius:5px}
.mf-clear:hover{background:var(--accent-soft)}
.mark-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.mark-dot{width:19px;height:19px;border-radius:50%;border:2px solid transparent;display:flex;align-items:center;justify-content:center;color:#fff;flex:none;transition:transform .12s}
.mark-dot:hover{transform:scale(1.14)}
.mark-dot.on{box-shadow:0 0 0 2px var(--accent)}
.mark-dot .ic{width:12px;height:12px}
.mark-row.big{padding:8px 4px;gap:9px;min-width:226px}
.note-card{display:block;position:relative;padding:11px 10px;border:0;border-bottom:1px solid var(--border);border-radius:0;margin:0;background:transparent}
.nc-line{display:flex;align-items:center;gap:6px;min-width:0}
.nc-mark{width:8px;height:8px;border-radius:50%;flex:none}
.nc-pin{display:flex;color:var(--accent);flex:none}
.nc-pin .ic{width:12px;height:12px}
.nc-excerpt{margin-top:4px;font-size:11px;line-height:1.5;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nc-cover{display:block;width:100%;height:74px;margin-top:7px;border-radius:6px;object-fit:cover;background:var(--panel-3)}
.nc-meta{display:flex;gap:8px;margin-top:5px;font-size:10px;color:var(--text-3)}
.list-group-head{display:flex;align-items:center;gap:5px;padding:9px 10px 5px;font-size:11px;color:var(--text-3);cursor:pointer;user-select:none}
.list-group-head:hover{color:var(--text-2)}
.list-group-head .ic{width:12px;height:12px;transition:transform .15s}
.list-group-head:not(.collapsed) .ic{transform:rotate(90deg)}
.list-group-head em{font-style:normal;margin-left:auto}

/* ===== flat sidebar navigation ===== */
.navtree{padding:6px 8px 16px}
.nav-row{display:flex;align-items:center;gap:7px;min-height:31px;padding:5px 8px;border-radius:6px;font-size:12.5px;color:var(--text-2);cursor:pointer;user-select:none;position:relative}
.nav-row:hover{background:var(--hover);color:var(--text)}
.nav-row.active{background:var(--panel-3);color:var(--text);font-weight:600}
.nav-row .nav-ico{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex:none;color:var(--text-3)}
.nav-row .nav-ico .ic{width:15px;height:15px}
.nav-row.active .nav-ico{color:var(--text-2)}
.nav-row .all-ico{color:var(--accent)}
.nav-row .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-row .cnt{font-size:11px;color:var(--text-3);font-weight:400;flex:none}
.nav-row .ops{display:none;gap:2px;flex:none}
.nav-row:hover .ops{display:flex}
.nav-row .ops button{color:var(--text-3);padding:2px;border-radius:4px;display:flex}
.nav-row .ops button:hover{background:var(--panel-3);color:var(--accent)}
.nav-row .ops button .ic{width:13px;height:13px}
.nav-row.fav{margin:2px 0 2px;font-size:13px;font-weight:600;color:var(--text)}
.nav-row.fav .nav-ico{color:var(--warn)}
.nav-row.fav .nav-ico .ic{width:16px;height:16px}
.nav-section{display:flex;align-items:center;justify-content:space-between;padding:0 8px 7px;font-size:10px;font-weight:700;letter-spacing:1px;color:var(--text-3);text-transform:uppercase}
.nav-section button{display:flex;color:var(--text-3);padding:3px;border-radius:5px}
.nav-section button:hover{background:var(--panel-3);color:var(--accent)}
.nav-section button .ic{width:15px;height:15px}
.nb-list .nav-row{min-height:29px}
.nav-row .twist{width:14px;height:14px;display:flex;align-items:center;justify-content:center;flex:none;color:var(--text-3);transition:transform .15s}
.nav-row .twist .ic{width:12px;height:12px}
.nav-row .twist.open{transform:rotate(90deg)}
.nav-row .twist.empty{opacity:0}
.nav-row .dot{width:7px;height:7px;border-radius:50%;flex:none}
.nav-row.virtual .nav-ico{opacity:.65}
.nav-row.tail{margin-top:9px}
.nav-row.tag-row{margin-top:12px}
.nav-row .tail-chev{display:flex;color:var(--text-3);transform:rotate(-90deg);transition:transform .15s}
.nav-row.tag-row.open .tail-chev{transform:rotate(0deg)}
.navtree .tag-list{padding:6px 8px 4px}

/* ===== history versions / diff / action timeline ===== */
.ver-toolbar{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--border);font-size:12px;color:var(--text-3)}
.ver-toolbar .spacer{flex:1}
.ver-toolbar .plain-select{max-width:230px;font-size:11px;padding:4px 6px}
.ver-list{max-height:310px;overflow-y:auto;margin-top:6px}
.ver-row{display:flex;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px solid var(--border)}
.ver-main{flex:1;min-width:0}
.ver-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ver-time{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums}
.ver-label{font-size:13px;color:var(--text);margin-top:3px}
.ver-kind{font-size:10px;padding:1px 6px;border-radius:10px;background:var(--panel-3);color:var(--text-3);flex:none}
.ver-kind.snapshot{background:var(--accent-soft);color:var(--accent)}
.ver-kind.delta{background:var(--warn-soft,var(--panel-3));color:var(--warn,#b7791f)}
.ver-kind.manual{background:var(--panel-3);color:var(--text-2)}
.ver-merged{font-size:10px;color:var(--text-3)}
.ver-size{font-size:11px;color:var(--text-3);flex:none;font-variant-numeric:tabular-nums}
.ver-ops{display:flex;gap:4px;flex:none}
.ver-ops button,.chg-row button{font-size:11px;color:var(--accent);padding:3px 8px;border:1px solid var(--border);border-radius:6px}
.ver-ops button:hover{background:var(--accent-soft)}
.ver-changes{margin-top:12px;border-top:1px solid var(--border);padding-top:10px}
.ver-toggle{font-size:12px;color:var(--text-2);padding:3px 0}
.ver-toggle:hover{color:var(--accent)}
.chg-list{max-height:200px;overflow-y:auto;margin-top:8px}
.chg-row{display:flex;align-items:center;gap:8px;padding:5px 2px;border-bottom:1px dashed var(--border);font-size:11px}
.chg-time{color:var(--text-3);font-variant-numeric:tabular-nums;flex:none}
.chg-label{color:var(--text-2);font-weight:600;flex:none}
.chg-hits{color:var(--accent);background:var(--accent-soft);border-radius:8px;padding:0 5px;flex:none}
.chg-detail{color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;text-align:right}
.diff-head{font-size:12px;color:var(--text-2);word-break:break-all}
.diff-stat{font-size:11px;color:var(--text-3);margin:8px 0}
.diff-only{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-3);margin-bottom:8px;cursor:pointer}
.diff-list{max-height:420px;overflow-y:auto;border:1px solid var(--border);border-radius:8px}
.diff-list.hide-same .diff-row.same{display:none}
.diff-row{padding:8px 10px;border-bottom:1px solid var(--border);font-size:12px;line-height:1.6;color:var(--text-2)}
.diff-row:last-child{border-bottom:0}
.diff-tag{display:inline-block;font-size:10px;color:var(--text-3);background:var(--panel-3);border-radius:4px;padding:0 5px;margin-right:8px}
.diff-row.same{color:var(--text-3);font-size:11px}
.diff-row.added{background:rgba(63,179,118,.10);border-left:3px solid #3fb376}
.diff-row.removed{background:rgba(230,90,90,.10);border-left:3px solid #e65a5a;text-decoration:line-through;color:var(--text-3)}
.diff-row.changed{background:rgba(230,175,60,.10);border-left:3px solid #e6af3c}
.diff-before{color:#c05555;margin:4px 0}
.diff-after{color:#2f8f5f}

/* ===== table: icon-based overflow panel + in-cell blocks ===== */
.tm-grid{min-width:268px;max-width:300px}
.tm-group{padding:7px 0;border-top:1px solid var(--border)}
.tm-group:first-child{border-top:0;padding-top:2px}
.tm-title{font-size:10px;font-weight:700;letter-spacing:.6px;color:var(--text-3);padding:0 2px 6px}
.tm-row{display:flex;flex-wrap:wrap;gap:5px}
.tm-ico{position:relative;width:31px;height:31px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:7px;color:var(--text-2);background:var(--panel)}
.tm-ico:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.tm-ico .ic{width:17px;height:17px}
.tm-ico[data-tip]:hover::after{content:attr(data-tip);position:absolute;top:calc(100% + 7px);left:50%;transform:translateX(-50%);background:#222831;color:#fff;font-size:11px;line-height:1.4;padding:5px 9px;border-radius:6px;white-space:nowrap;z-index:200;box-shadow:var(--shadow);pointer-events:none}
.tm-ico[data-tip]:hover::before{content:"";position:absolute;top:calc(100% + 1px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-bottom-color:#222831;z-index:200;pointer-events:none}
.ProseMirror table ul,.ProseMirror table ol{padding-left:18px;margin:4px 0}
.ProseMirror table ul[data-type="taskList"]{padding-left:2px;list-style:none}
.ProseMirror table ul[data-type="taskList"] li{gap:6px}
.ProseMirror table ul[data-type="taskList"] li>label{margin:0}
.ProseMirror table blockquote{margin:4px 0;padding-left:10px}
.ProseMirror table pre{margin:4px 0;font-size:12px}

body.pop-open .tb[data-tip]:hover::after,body.pop-open .tb[data-tip]:hover::before{display:none}

/* ===== note tabs / right rail / note info ===== */
.doc-tabs{flex:none;display:flex;align-items:center;gap:4px;padding:8px clamp(20px,3vw,48px) 0;overflow-x:auto;background:var(--panel-2);border-bottom:1px solid var(--border);scrollbar-width:thin}
.doc-tabs::-webkit-scrollbar{height:4px}
.doc-tabs::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:4px}
.doc-tab{display:flex;align-items:center;gap:6px;flex:none;max-width:200px;padding:6px 8px 6px 10px;border-radius:8px 8px 0 0;font-size:12px;color:var(--text-3);cursor:pointer;border:1px solid transparent;border-bottom:0;white-space:nowrap}
.doc-tab:hover{background:var(--hover);color:var(--text-2)}
.doc-tab.active{background:var(--panel);color:var(--text);border-color:var(--border);font-weight:600}
.dt-ico{display:flex;color:var(--text-3);flex:none}
.dt-ico .ic{width:13px;height:13px}
.doc-tab.active .dt-ico{color:var(--accent)}
.dt-name{overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}
.dt-x{display:flex;color:var(--text-3);padding:1px;border-radius:4px;flex:none;opacity:.45}
.dt-x:hover{opacity:1;background:var(--hover);color:var(--danger)}
.dt-x .ic{width:12px;height:12px}
.doc-head{padding:14px clamp(24px,4vw,64px) 12px;gap:12px}
.doc-title{font-size:28px;font-weight:500;line-height:32px}
.doc-rail{position:absolute;top:0;right:0;bottom:0;width:46px;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 0;background:var(--panel-2);border-left:1px solid var(--border);z-index:6;overflow-y:auto;scrollbar-width:none}
.doc-rail::-webkit-scrollbar{width:0}
.doc-rail .act-btn{width:32px;height:32px}
.doc-rail .act-sep{width:20px;height:1px;margin:5px 0}
.act-btn{width:31px;height:31px;display:flex;align-items:center;justify-content:center;border-radius:8px;color:var(--text-2);flex:none;transition:background .12s,color .12s}
.act-btn:hover{background:var(--accent-soft);color:var(--accent)}
.act-btn.on{color:var(--accent)}
.act-btn.on .ic{fill:currentColor}
.act-btn .ic{width:17px;height:17px}
.act-sep{width:1px;height:17px;background:var(--border);margin:0 4px;flex:none}
@media(max-width:1180px){.act-btn{width:28px;height:28px}.act-btn .ic{width:16px;height:16px}}
body.focus-mode .doc-tabs{display:none}
.info-head{display:flex;align-items:baseline;gap:10px;padding-bottom:10px;border-bottom:1px solid var(--border);margin-bottom:10px}
.info-head b{font-size:14px}
.info-head span{font-size:11px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.info-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0;font-size:12px}
.info-row span{color:var(--text-3)}
.info-row b{font-weight:600;color:var(--text-2)}
.info-sec{font-size:10px;font-weight:700;letter-spacing:1px;color:var(--text-3);text-transform:uppercase;padding:12px 0 6px;margin-top:6px;border-top:1px solid var(--border)}
.info-loc{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:8px;font-size:12px;color:var(--text-2);text-align:left}
.info-loc:hover{border-color:var(--accent);color:var(--accent)}
.info-loc .ic{width:16px;height:16px}
.info-loc span{flex:1}
.info-loc em{font-style:normal;font-size:11px;color:var(--accent)}
.info-tags-head{display:flex;align-items:center;justify-content:space-between;border-top:0;padding-top:4px}
.info-add{font-size:15px;color:var(--accent);width:24px;height:24px;border:1px solid var(--border);border-radius:6px;display:flex;align-items:center;justify-content:center}
.info-add:hover{background:var(--accent-soft)}
.info-tags{display:flex;flex-wrap:wrap;gap:6px;min-height:26px;align-items:center}
.info-ops{display:flex;flex-direction:column;gap:2px}
.info-ops button{display:flex;align-items:center;gap:9px;width:100%;padding:8px 6px;border-radius:7px;font-size:12px;color:var(--text-2);text-align:left}
.info-ops button:hover{background:var(--hover);color:var(--text)}
.info-ops button.danger{color:var(--danger)}
.info-ops button .ic{width:16px;height:16px}
.outline-list{min-width:190px;max-height:320px;overflow-y:auto}

.info-panel{width:272px}
.info-foot{margin-top:10px;padding-top:8px;border-top:1px solid var(--border);text-align:right}
.info-foot button{font-size:11px;color:var(--text-3);padding:4px 10px;border:1px solid var(--border);border-radius:6px}
.info-foot button:hover{color:var(--accent);border-color:var(--accent)}

/* ===== code block：结构与尺寸对齐为知笔记 X（32px 头部 / 13px 代码 / 行号） ===== */
.code-wrap{position:relative;margin:16px 0;border-radius:6px;background:var(--code-bg)}
.ProseMirror > .code-wrap:first-child{margin-top:16px}
.code-bar{display:flex;align-items:center;height:32px;padding:0 8px;gap:2px;user-select:none;-webkit-user-select:none;opacity:.6;transition:opacity .15s ease-in}
/* 头部（语言下拉、按钮）不参与选中与复制，避免复制正文时把「纯文本/JavaScript…」带进去 */
.code-bar *{user-select:none;-webkit-user-select:none}
.code-lang-static{font-size:14px;line-height:1;color:var(--text);padding:0 8px;white-space:nowrap}
.code-wrap:hover .code-bar,.code-wrap:focus-within .code-bar,.ProseMirror-selectednode .code-bar{opacity:1}
.code-lang{background:transparent;border:0;outline:none;height:100%;max-width:190px;padding:0 4px;font-family:inherit;font-size:14px;line-height:1;color:var(--text);cursor:pointer}
.code-lang:focus-visible{outline:1px solid var(--accent);outline-offset:-1px;border-radius:3px}
.code-bar.readonly .code-lang{appearance:none;-webkit-appearance:none;pointer-events:none;padding-left:4px}
.code-bar.readonly{opacity:.85}
.code-spacer{flex:1 1 auto;min-width:8px}
.code-tool{display:inline-flex;align-items:center;justify-content:center;width:26px;height:24px;flex:none;border-radius:4px;color:var(--text-2);transition:background .12s,color .12s}
.code-tool:hover{background:rgba(127,127,127,.18);color:var(--text)}
.code-tool.on{color:var(--accent)}
.code-tool.ok{color:var(--success)}
.code-tool.fail{color:var(--danger)}
.code-body{display:flex;align-items:flex-start;padding:6px 16px 24px}
.code-gutter{position:relative;flex:none;width:20px;margin-right:14px;pointer-events:none;user-select:none;-webkit-user-select:none}
.code-gutter span{position:absolute;right:0;font:13px/1.9 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--text-3);opacity:.75;text-align:right}
.code-wrap .code-pre{flex:1 1 auto;min-width:0;margin:0;padding:0;border:0;border-radius:0;background:none;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;overflow-x:hidden;font:13px/1.9 ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--text);tab-size:4}
.code-wrap.no-wrap .code-pre{white-space:pre;overflow-wrap:normal;word-break:normal;overflow-x:auto}
.ProseMirror pre::-webkit-scrollbar{height:8px}
.ProseMirror pre::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:8px}

/* ===== multi-level tag tree ===== */
.tag-tree{padding:2px 0 6px}
.nav-row.tag-node{min-height:28px;font-size:12px}
.nav-row.tag-node .nav-ico{opacity:.7}
.nav-row.tag-node .nav-ico .ic{width:13px;height:13px}
.nav-row.tag-node.active .nav-ico{opacity:1;color:var(--accent)}
.nav-row.tag-node .nm{font-size:12px}

/* ===== media: video / attachment / library ===== */
.video-wrap{margin:16px 0}
.video-wrap video{display:block;width:100%;max-width:100%;border-radius:10px;background:#000;border:1px solid var(--border)}
.attach-card{display:flex;align-items:center;gap:10px;margin:12px 0;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--panel-2);max-width:520px}
.attach-ico{width:34px;height:34px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:8px;background:var(--accent-soft);color:var(--accent);font:700 10px/1 ui-monospace,Consolas,monospace;letter-spacing:.3px}
.attach-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.attach-main b{font-size:13px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.attach-main em{font-style:normal;font-size:11px;color:var(--text-3)}
.attach-dl{font-size:11px;color:var(--accent);border:1px solid var(--border);border-radius:6px;padding:3px 10px;flex:none;text-decoration:none}
.attach-dl:hover{background:var(--accent-soft);border-color:var(--accent)}
.ProseMirror-selectednode.attach-card,.ProseMirror-selectednode.video-wrap{outline:2px solid var(--accent);outline-offset:2px;border-radius:10px}
.media-panel{min-width:520px}
.media-head{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:12px;color:var(--text-3);padding-bottom:9px;border-bottom:1px solid var(--border)}
.media-tabs{display:flex;gap:2px}
.media-tabs button{font-size:11px;padding:3px 9px;border-radius:6px;color:var(--text-3)}
.media-tabs button.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.media-list{max-height:360px;overflow-y:auto}
.media-row{display:flex;align-items:center;gap:10px;padding:9px 2px;border-bottom:1px solid var(--border)}
.media-ico{width:30px;height:30px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:7px;background:var(--panel-3);color:var(--text-2)}
.media-ico .ic{width:16px;height:16px}
.media-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.media-main b{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.media-main em{font-style:normal;font-size:11px;color:var(--text-3)}
.media-ops{display:flex;gap:2px;flex:none}
.media-ops button{width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:var(--text-3)}
.media-ops button:hover{background:var(--hover);color:var(--accent)}
.media-ops button.danger:hover{background:var(--danger-soft);color:var(--danger)}
.media-ops .ic{width:14px;height:14px}
.media-orphan{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border);font-size:11px;color:var(--text-3)}
.media-ver{display:flex;align-items:center;gap:10px;padding:7px 2px;border-bottom:1px solid var(--border);font-size:12px}
.media-ver span:first-child{font-weight:600;color:var(--accent);width:34px;flex:none}
.media-ver em{font-style:normal;color:var(--text-3);flex:1}
.media-ver a{color:var(--accent);font-size:11px}

/* ===== calendar + todos ===== */
.cal-view{flex:1;min-height:0;overflow:hidden;padding:12px 14px 10px;display:flex;flex-direction:column}
.cal-head{display:flex;align-items:center;gap:5px;padding:2px 0 10px}
.cal-head b{font-size:13px;font-weight:600;color:var(--text)}
.cal-head > button{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:var(--text-3);font-size:16px;line-height:1}
.cal-head > button:hover{background:var(--hover);color:var(--accent)}
.cal-head .spacer{flex:1}
.cal-head .cal-today-btn{width:auto;padding:0 8px;font-size:11px;border:1px solid var(--border);height:24px}
.cal-week{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;font-size:10px;color:var(--text-3);text-align:center;padding-bottom:5px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal-day{position:relative;height:34px;display:flex;align-items:center;justify-content:center;border-radius:7px;font-size:12px;color:var(--text-2);cursor:pointer;user-select:none;border:0;background:none;padding:0;font-family:inherit}
.cal-day:hover{background:var(--hover)}
.cal-day.blank{cursor:default;background:none}
.cal-day b{font-weight:500}
.cal-day.today b{color:var(--accent);font-weight:700}
.cal-day.sel{background:var(--accent);color:#fff}
.cal-day.sel b{color:#fff;font-weight:700}
.cal-day em{position:absolute;bottom:3px;left:50%;transform:translateX(-50%);font-style:normal;font-size:9px;line-height:1.2;padding:0 4px;border-radius:8px;background:var(--accent-soft);color:var(--accent)}
.cal-day.sel em{background:#fff;color:var(--accent)}
.cal-day em.all-done{background:var(--panel-3);color:var(--text-3)}
.cal-day-head{display:flex;align-items:center;justify-content:space-between;padding:14px 2px 8px;font-size:12px;border-top:1px solid var(--border);margin-top:14px}
.cal-day-head b{font-weight:600;color:var(--text)}
.cal-day-head span{color:var(--text-3);font-size:11px}
.cal-new{display:flex;gap:6px;margin-bottom:6px}
.cal-new input{flex:1;min-width:0;height:32px;padding:0 9px;border:1px solid var(--border);border-radius:8px;font-size:12px;background:var(--panel);color:var(--text)}
.cal-new input:focus{outline:none;border-color:var(--accent)}
.cal-new button{width:32px;height:32px;flex:none;border:1px solid var(--border);border-radius:8px;color:var(--accent);font-size:16px;display:flex;align-items:center;justify-content:center}
.cal-new button:hover{background:var(--accent-soft);border-color:var(--accent)}
/* 重复标记：日历／列表里的 ↻ */
.cal-chip .rep,.cal-todo .rep{font-style:normal;font-size:10px;color:var(--text-3);margin-left:3px;flex:none;opacity:.85}
.cal-chip.ev .rep{color:inherit;opacity:.7}
.cal-chip.done .rep{opacity:.5}
.ev-state-hint{font-size:11.5px;color:var(--text-3)}
.cal-todo{display:flex;align-items:flex-start;gap:8px;padding:7px 4px;border-bottom:1px solid var(--border);font-size:12.5px}
.cal-todo input[type="checkbox"]{appearance:none;-webkit-appearance:none;width:15px;height:15px;margin:2px 0 0;border:1.5px solid var(--text-3);border-radius:4px;flex:none;cursor:pointer;background-position:center;background-repeat:no-repeat;background-size:11px}
.cal-todo input[type="checkbox"]:checked{background-color:var(--accent);border-color:var(--accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.2 8.4l3.1 3.1 6.5-6.6' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.cal-todo span{flex:1;min-width:0;word-break:break-word;color:var(--text)}
.cal-todo.done span{text-decoration:line-through;color:var(--text-3)}
/* 日程行：只给主题加删除线，时间保持可读 */
.cal-todo.ev.done .ev-time{text-decoration:none}
.cal-todo.ev.done .ev-main>span{text-decoration:line-through;color:var(--text-3)}
.cal-todo button{width:20px;height:20px;flex:none;display:flex;align-items:center;justify-content:center;color:var(--text-3);border-radius:5px;opacity:0}
.cal-todo:hover button{opacity:1}
.cal-todo button:hover{background:var(--hover);color:var(--danger)}
.cal-todo button .ic{width:12px;height:12px}
.cal-undated{margin-top:4px}

/* ===== calendar v2 — mini month (middle) + detailed calendar (right) ===== */
.cal-mini{flex:none;padding:2px 0 4px}
.cal-mini-head{display:flex;align-items:center;gap:2px;padding:0 0 8px}
.cal-mini-head b{font-size:13px;font-weight:600;margin-right:auto;color:var(--text);letter-spacing:.2px}
.cal-mini-head button{min-width:22px;height:22px;padding:0 4px;border-radius:6px;color:var(--text-3);font-size:13px;display:flex;align-items:center;justify-content:center}
.cal-mini-head button:hover{background:var(--hover);color:var(--accent)}
.cal-mini-head .mini-today{font-size:11px;padding:0 6px;border:1px solid var(--border);height:22px}
.cal-grid.mini{gap:2px}
.cal-grid.mini .cal-day{height:38px;display:flex;align-items:center;justify-content:center;padding-bottom:7px;border-radius:8px}
.cal-grid.mini .cal-day b{font-size:12.5px;line-height:1;font-weight:500}
.cal-dots{position:absolute;left:0;right:0;bottom:5px;display:flex;align-items:center;justify-content:center;gap:2.5px;height:4px}
.cal-dots i{width:3.5px;height:3.5px;border-radius:50%;background:var(--accent);display:block}
.cal-dots i.done{background:var(--text-3);opacity:.55}
.cal-day.sel .cal-dots i{background:#fff;opacity:.9}
.cal-day.out .cal-dots i{opacity:.45}
.cal-day.out{opacity:.42}
.listpane.cal-mode #btnSearchToggle{display:none}

.cal-src{flex:none;border-top:1px solid var(--border);margin-top:8px;padding:9px 0 4px}
.cal-src-head{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-3);padding:0 4px 5px}
.cal-src-head span{font-weight:600;color:var(--text-2);font-size:11.5px}
.cal-src-head em,.cal-src-head .cnt{margin-left:auto;font-style:normal;font-size:11px}
.cal-src-head button{width:20px;height:20px;border-radius:5px;color:var(--text-3);display:flex;align-items:center;justify-content:center;margin-left:auto;font-size:14px;line-height:1}
.cal-src-head button:hover{background:var(--hover);color:var(--accent)}
.cal-src-row{display:flex;align-items:center;gap:8px;padding:6px;border-radius:7px;font-size:12.5px;color:var(--text);cursor:pointer}
.cal-src-row:hover{background:var(--hover)}
.cal-src-row .sw{width:11px;height:11px;border-radius:3px;background:var(--accent);flex:none}
.cal-src-row .sw.done{background:var(--text-3);opacity:.3}
.cal-src-row.on .sw.done{opacity:1}
.cal-src-row .nm{flex:1;min-width:0}
.cal-src-row em{font-style:normal;font-size:11px;color:var(--text-3);background:var(--panel-3);border-radius:9px;padding:0 6px;min-width:20px;text-align:center}
.cal-undated{border-top:1px solid var(--border);margin-top:6px;padding-top:8px;display:flex;flex-direction:column;min-height:0;flex:1}
.cal-undated-list{overflow:auto;min-height:0;flex:1;padding-right:2px}
.cal-undated .hint{padding:4px 2px;font-size:12px}
.cal-undated .cal-new{margin:8px 0 2px}

/* right pane shell */
.calpane{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;background:var(--col3,var(--panel))}
.calpane-head{flex:none;display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.cp-left{display:flex;align-items:center;gap:4px;min-width:0}
.cp-nav{width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:7px;color:var(--text-2);font-size:17px;line-height:1}
.cp-nav:hover{background:var(--hover);color:var(--accent)}
.cp-today{height:26px;padding:0 10px;border:1px solid var(--border);border-radius:7px;font-size:12px;color:var(--text-2)}
.cp-today:hover{border-color:var(--accent);color:var(--accent)}
.cp-title{font-size:16.5px;font-weight:650;letter-spacing:.2px;color:var(--text);margin:0 4px 0 8px;white-space:nowrap}
.cp-sub{font-size:11.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cp-right{margin-left:auto;display:flex;align-items:center;gap:8px}
.cp-seg{display:flex;background:var(--panel-3);border-radius:8px;padding:2px;gap:2px}
.cp-seg button{height:24px;padding:0 12px;border-radius:6px;font-size:12px;color:var(--text-2)}
.cp-seg button:hover{color:var(--text)}
.cp-seg button.on{background:var(--panel);color:var(--accent);font-weight:600;box-shadow:var(--shadow-sm)}
.cp-input{height:27px;padding:0 9px;border:1px solid var(--border);border-radius:7px;background:var(--panel-2);color:var(--text-2);font:inherit;font-size:12px;outline:none;min-width:0}
.cp-input:focus{border-color:var(--accent);background:var(--panel)}
.cp-btn{height:27px;padding:0 10px;border:1px solid var(--border);border-radius:7px;font-size:12px;color:var(--text-2);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.cp-btn:hover{border-color:var(--accent);color:var(--accent)}
.cp-btn.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.cp-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.cp-btn.primary:hover{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
.cp-btn .ic{width:14px;height:14px}

.calpane-body{flex:1;display:flex;min-height:0;min-width:0}
.calpane-main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;padding:10px 14px 14px;overflow:hidden}
.cal-mhead{flex:none;display:grid;grid-template-columns:repeat(7,1fr);gap:6px;padding-bottom:6px}
.cal-mhead span{font-size:11.5px;color:var(--text-3);text-align:center}
.cal-mhead span.we{color:var(--warn)}

/* month grid */
.cal-month{flex:1;display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(var(--rows,6),minmax(0,1fr));gap:6px;min-height:0;overflow:hidden}
.cal-cell{border:1px solid var(--border);border-radius:8px;padding:5px 6px 4px;display:flex;flex-direction:column;min-height:72px;min-width:0;background:var(--panel);cursor:pointer;transition:border-color .12s,background .12s}
.cal-cell:hover{border-color:var(--border-2);background:var(--panel-2)}
.cal-cell.out{background:var(--panel-2)}
.cal-cell.out .cell-top b,.cal-cell.out .cell-items{opacity:.55}
.cal-cell.today{border-color:var(--accent)}
.cal-cell.sel{background:var(--accent-soft);border-color:var(--accent)}
.cal-cell.weekend .cell-top b{color:var(--warn)}
.cal-cell.today .cell-top b{color:var(--accent);font-weight:700}
.cal-cell.drop-hover{border-color:var(--accent);box-shadow:inset 0 0 0 2px var(--accent-soft)}
.cell-top{display:flex;align-items:center;gap:4px;flex:none;min-height:18px}
.cell-top b{font-size:12.5px;font-weight:600;color:var(--text-2);line-height:18px}
.cell-md{font-size:10px;color:var(--text-3)}
.cell-add{margin-left:auto;width:18px;height:18px;border-radius:5px;color:var(--text-3);font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .12s}
.cal-cell:hover .cell-add{opacity:1}
.cell-add:hover{background:var(--accent);color:#fff}
.cell-items{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:2px;margin-top:3px}
.cal-chip{display:flex;align-items:center;gap:5px;padding:2px 5px;border-radius:5px;font-size:11.5px;line-height:1.45;background:var(--accent-soft);color:var(--text);cursor:pointer;min-width:0;border:1px solid transparent}
.cal-chip:hover{border-color:var(--accent)}
.cal-chip span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-chip .ck{width:9px;height:9px;border-radius:2.5px;background:var(--accent);flex:none;opacity:.5;cursor:pointer}
.cal-chip .ck:hover{opacity:1;box-shadow:0 0 0 3px var(--accent-soft)}
.cal-chip.done{background:var(--panel-3);color:var(--text-3)}
.cal-chip.done span{text-decoration:line-through}
.cal-chip.done .ck{background:var(--text-3)}
.cal-chip.dragging{opacity:.35}
.cal-more{font-size:10.5px;color:var(--text-3);padding-left:2px;cursor:pointer}
.cal-more:hover{color:var(--accent)}

/* week view */
.cal-weekwrap{flex:1;display:grid;grid-template-columns:repeat(7,1fr);gap:8px;min-height:0;overflow:auto}
.cal-wcol{border:1px solid var(--border);border-radius:9px;display:flex;flex-direction:column;min-width:0;min-height:0;padding:8px;background:var(--panel)}
.cal-wcol:hover{border-color:var(--border-2)}
.cal-wcol.today{border-color:var(--accent)}
.cal-wcol.sel{background:var(--accent-soft);border-color:var(--accent)}
.cal-wcol.drop-hover{box-shadow:inset 0 0 0 2px var(--accent);border-color:var(--accent)}
.wcol-head{flex:none;text-align:center;padding-bottom:6px;border-bottom:1px solid var(--border);margin-bottom:6px}
.wcol-head b{display:block;font-size:12px;color:var(--text-2)}
.wcol-head span{font-size:11px;color:var(--text-3)}
.cal-wcol.today .wcol-head b{color:var(--accent)}
.wcol-items{flex:0 1 auto;overflow:auto;display:flex;flex-direction:column;gap:4px;min-height:0}
.cal-wcol .cal-chip{align-items:flex-start;white-space:normal}
.cal-wcol .cal-chip span{white-space:normal;overflow:visible}
.cal-wcol .cal-chip .ck{margin-top:4px}
.wcol-empty{font-size:11px;color:var(--text-3);text-align:center;padding:14px 0;margin:0}
.wcol-add{flex:none;margin-top:6px;height:26px;border-radius:6px;font-size:11.5px;color:var(--text-3);border:1px dashed var(--border)}
.wcol-add:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}

/* day view */
.cal-daysingle{flex:1;display:flex;flex-direction:column;min-height:0;width:100%;max-width:860px;margin:0 auto}
.ds-head{flex:none;display:flex;align-items:baseline;gap:10px;padding:2px 2px 12px;border-bottom:1px solid var(--border)}
.ds-head b{font-size:21px;font-weight:650;letter-spacing:.3px}
.ds-head span{font-size:12.5px;color:var(--text-2)}
.ds-head em{font-style:normal;margin-left:auto;font-size:11.5px;color:var(--text-3)}
.ds-list{flex:1;overflow:auto;min-height:0;padding:4px 0}
.cal-todo.big{font-size:13.5px;padding:10px 6px}
.cal-todo.big input[type="checkbox"]{width:17px;height:17px;background-size:12px}
.ds-empty{color:var(--text-3);font-size:12px;text-align:center;padding:44px 0;margin:0}
.cal-daysingle .ds-new{margin:12px 0 4px;max-width:520px}

/* right detail panel */
.cal-daypanel{flex:none;width:300px;border-left:1px solid var(--border);display:flex;flex-direction:column;min-height:0;background:var(--panel-2)}
.dp-head{flex:none;display:flex;align-items:flex-start;justify-content:space-between;gap:8px;padding:14px 14px 8px}
.dp-head b{display:block;font-size:15px;font-weight:650}
.dp-head span{font-size:11.5px;color:var(--text-3)}
.dp-close{width:24px;height:24px;border-radius:6px;color:var(--text-3);display:flex;align-items:center;justify-content:center;flex:none}
.dp-close:hover{background:var(--hover);color:var(--text)}
.dp-close .ic{width:13px;height:13px}
.dp-body{flex:1;overflow:auto;min-height:0;padding:0 12px 8px}
.dp-body .ds-empty{padding:28px 0}
.dp-add{flex:none;display:flex;gap:6px;padding:10px 12px 14px;border-top:1px solid var(--border)}
.dp-add input{flex:1;min-width:0;height:32px;padding:0 9px;border:1px solid var(--border);border-radius:8px;font-size:12px;background:var(--panel);color:var(--text)}
.dp-add input:focus{border-color:var(--accent);outline:none}
.dp-add button{width:32px;height:32px;flex:none;border-radius:8px;background:var(--accent);color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center}
.dp-add button:hover{background:var(--accent-2)}

/* ===== 日程（event）与新建弹窗 ===== */
:root[data-theme="light"]{--event:#7c5cff;--event-soft:#efecff}
:root[data-theme="dark"]{--event:#a48bff;--event-soft:#2b2545}
.cal-chip.ev{background:var(--event-soft)}
.cal-chip.ev:hover{border-color:var(--event)}
.cal-chip.ev .ck{background:var(--event)}
.cal-chip.ev .ck:hover{box-shadow:0 0 0 3px var(--event-soft)}
.cal-chip.ev.done .ck{background:var(--text-3)}
.cal-chip .tm{font-style:normal;font-size:10.5px;font-weight:600;color:var(--event);flex:none;font-variant-numeric:tabular-nums}
.cal-dots i.ev{background:var(--event)}
.cal-src-row .sw.ev{background:var(--event);opacity:.55}
.cal-src-row.on .sw.ev{opacity:1}
.cal-todo.ev{align-items:flex-start;cursor:pointer}
.cal-todo.ev:hover{background:var(--hover)}
.cal-todo .ev-time{flex:none;font-size:11.5px;font-weight:600;color:var(--event);min-width:72px;font-variant-numeric:tabular-nums;padding-top:1px;display:flex;flex-direction:column;line-height:1.5}
.cal-todo .ev-time em{font-style:normal;font-size:10px;color:var(--text-3);font-weight:400}
.cal-todo .ev-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.cal-todo .ev-main>span{word-break:break-word}
.cal-todo .ev-loc{font-style:normal;font-size:11px;color:var(--text-3);word-break:break-word}

.ds-new .ds-ev,.dp-add button.dp-ev{background:var(--panel);border:1px solid var(--border);color:var(--text-2)}
.ds-new .ds-ev:hover,.dp-add button.dp-ev:hover{background:var(--event-soft);border-color:var(--event);color:var(--event)}
.ds-new .ds-ev .ic,.dp-add .dp-ev .ic{width:15px;height:15px}

.ev-tabs{display:flex;gap:20px;border-bottom:1px solid var(--border);margin:-2px 0 14px}
.ev-tabs button{padding:4px 2px 10px;font-size:13.5px;color:var(--text-2);border-bottom:2px solid transparent;margin-bottom:-1px}
.ev-tabs button:hover{color:var(--text)}
.ev-tabs button.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.ev-title{display:block;width:100%;border:0;border-bottom:1px solid var(--border);border-radius:0;padding:4px 2px 10px;font-size:16px;font-weight:600;background:none;color:var(--text);margin-bottom:2px;font-family:inherit}
.ev-title:focus{outline:none;border-bottom-color:var(--accent)}
.ev-row{display:flex;align-items:flex-start;gap:10px;padding:10px 2px;border-bottom:1px solid var(--border);font-size:13px}
.ev-row:last-child{border-bottom:0}
.ev-row .ev-ic{width:18px;flex:none;color:var(--text-3);padding-top:3px;display:flex}
.ev-row .ev-ic .ic{width:15px;height:15px}
.ev-row.ev-state{align-items:center;color:var(--text)}
.ev-row.ev-state .ev-ic{padding-top:0}
.ev-row.ev-state .ev-check{margin:0}
.ev-state-hint{margin-left:auto;font-size:11px;color:var(--text-3)}
.ev-fields{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.ev-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ev-line input[type="date"],.ev-line input[type="time"]{border:1px solid var(--border);border-radius:7px;padding:5px 7px;font-size:12.5px;background:var(--panel-2);color:var(--text);width:auto}
.ev-line input[type="time"]{width:86px}
.ev-line input:disabled{opacity:.45}
.ev-dash{color:var(--text-3)}
.modal-body .ev-check{display:inline-flex;align-items:center;gap:5px;margin:0 0 0 auto;font-size:12.5px;color:var(--text-2);cursor:pointer;white-space:nowrap}
.modal-body .ev-check input{width:14px;height:14px;margin:0;padding:0;display:inline-block;flex:none;border-radius:4px}
.ev-cap{font-size:12px;color:var(--text-3);white-space:nowrap}
.modal-body .ev-input{flex:1;min-width:0;width:auto;border:0;background:none;padding:3px 0;margin:0;font-size:13px;color:var(--text);font-family:inherit;border-radius:0}
.modal-body .ev-input::placeholder{color:var(--text-3)}
.modal-body .ev-input:focus{outline:none;border:0}
.ev-area{resize:vertical;min-height:42px;line-height:1.6}
.ev-line.allday input[type="time"],.ev-line.allday .ev-dash{display:none}

/* ===== sidebar: 收藏 + 日历 作为顶部同一组 ===== */
.nav-row.cal-row{margin:0 0 14px;font-size:13px;font-weight:500;color:var(--text-2)}
.nav-row.cal-row .nav-ico{color:var(--accent)}
.nav-row.cal-row .nav-ico .ic{width:16px;height:16px}
.nav-row.cal-row:hover{color:var(--text)}
.nav-row.cal-row.active{background:var(--panel-3);color:var(--text);font-weight:600}
.nav-row.cal-row.active .nav-ico{color:var(--accent)}
/* 待办行计数：与「我的收藏 (1)」同一样式，前一格=今日待办，后一格=未完成日程 */
.nav-row.cal-row .cnt.cal-cnt{margin-left:2px;font-size:11px;color:var(--text-3);font-weight:400;font-variant-numeric:tabular-nums}
.nav-row.cal-row .cnt.cal-cnt.ev{margin-left:1px;opacity:.78}

/* ===== 待办管理（清单模式） ===== */
.td-wrap{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;width:100%;max-width:840px;margin:0 auto}
.td-bar{flex:none;display:flex;align-items:center;gap:8px;padding-bottom:10px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.td-search{display:flex;align-items:center;gap:6px;height:30px;padding:0 9px;border:1px solid var(--border);border-radius:8px;background:var(--panel-2);color:var(--text-3);flex:0 1 260px;min-width:180px}
.td-search:focus-within{border-color:var(--accent);background:var(--panel)}
.td-search input{flex:1;min-width:0;border:0;background:none;font-size:12.5px;color:var(--text);outline:none}
.td-search .ic{width:14px;height:14px}
.td-selall{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text-2);cursor:pointer;white-space:nowrap}
.td-selall input{width:14px;height:14px;margin:0;accent-color:var(--accent);cursor:pointer}
.td-selcount{font-size:11.5px;color:var(--accent);min-width:52px;white-space:nowrap}
.td-act{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 9px;border:1px solid var(--border);border-radius:7px;font-size:12px;color:var(--text-2);white-space:nowrap}
.td-act:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.td-act.danger:hover{border-color:var(--danger);color:var(--danger);background:var(--danger-soft)}
.td-act .ic{width:13px;height:13px}
.td-chips{flex:none;display:flex;gap:6px;flex-wrap:wrap;padding:10px 0 8px}
.td-chip{height:26px;padding:0 10px;border-radius:14px;border:1px solid var(--border);font-size:12px;color:var(--text-2);display:inline-flex;align-items:center;gap:5px;background:var(--panel)}
.td-chip em{font-style:normal;font-size:10.5px;color:var(--text-3)}
.td-chip:hover{border-color:var(--accent);color:var(--accent)}
.td-chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}
.td-chip.on em{color:var(--accent)}
.td-chip.danger.on{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}
.td-chip.danger.on em{color:var(--danger)}
.td-list{flex:1;overflow:auto;min-height:0;padding-right:4px}
.td-group{margin-bottom:12px}
.td-ghead{display:flex;align-items:baseline;gap:6px;padding:6px 2px 6px;position:sticky;top:0;background:var(--panel);z-index:1}
.td-ghead b{font-size:12px;font-weight:600;color:var(--text-2)}
.td-ghead b.danger{color:var(--danger)}
.td-ghead em{font-style:normal;font-size:11px;color:var(--text-3)}
.td-row{display:grid;grid-template-columns:16px 18px minmax(0,1fr) 118px 54px;align-items:center;gap:10px;padding:7px 8px;border:1px solid transparent;border-bottom-color:var(--border);border-radius:8px;font-size:13px}
.td-row:hover{background:var(--panel-2);border-color:var(--border)}
.td-group .td-row:last-child{border-bottom-color:transparent}
.td-row.sel{background:var(--accent-soft);border-color:var(--accent)}
.td-row input[type="checkbox"]{appearance:none;-webkit-appearance:none;width:15px;height:15px;margin:0;border:1.5px solid var(--text-3);border-radius:4px;flex:none;cursor:pointer;background-position:center;background-repeat:no-repeat;background-size:11px}
.td-row input[type="checkbox"]:checked{background-color:var(--accent);border-color:var(--accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.2 8.4l3.1 3.1 6.5-6.6' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.td-type{width:18px;flex:none;display:flex;color:var(--text-3)}
.td-row.ev .td-type{color:var(--event)}
.td-type .ic{width:15px;height:15px}
.td-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.td-title{font-size:13px;color:var(--text);word-break:break-word;cursor:text}
.td-row.done .td-title{text-decoration:line-through;color:var(--text-3)}
.td-meta{font-size:11px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.td-when{font-size:11.5px;color:var(--text-2);white-space:nowrap;display:inline-flex;gap:5px;align-items:center;font-variant-numeric:tabular-nums;justify-content:flex-end}
.td-when em{font-style:normal;color:var(--text-3);font-size:11px}
.td-row.ev .td-when{color:var(--event)}
.td-ops{display:flex;gap:2px;justify-content:flex-end;opacity:0;transition:opacity .12s}
.td-row:hover .td-ops{opacity:1}
.td-ops button{width:24px;height:24px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--text-3)}
.td-ops button:hover{background:var(--panel-3);color:var(--accent)}
.td-ops button.danger:hover{background:var(--danger-soft);color:var(--danger)}
.td-ops .ic{width:13px;height:13px}
.td-empty{color:var(--text-3);font-size:12.5px;text-align:center;padding:64px 0}
.td-foot{flex:none;padding:8px 2px 0;border-top:1px solid var(--border);font-size:11px;color:var(--text-3)}
.cal-src-row.active{background:var(--panel-3);color:var(--text);font-weight:600}

/* ===== notebook color swatches ===== */
.nb-colors{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;padding:2px 0 4px}
.nb-color{position:relative;width:24px;height:24px;border-radius:50%;background:var(--c);border:0;padding:0;cursor:pointer;transition:transform .12s;box-shadow:inset 0 0 0 1px rgba(20,30,60,.08)}
.nb-color:hover{transform:scale(1.12)}
.nb-color.on{box-shadow:0 0 0 2px var(--panel),0 0 0 4px var(--c)}
.nb-color.on::after{content:'';position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.4 8.5l3 3 6.2-6.5' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat}
:root[data-theme="dark"] .nb-color{box-shadow:inset 0 0 0 1px rgba(255,255,255,.14)}
:root[data-theme="dark"] .nb-color.on{box-shadow:0 0 0 2px var(--panel),0 0 0 4px var(--c)}

/* ===== 侧栏字号整体放大 ===== */
.nav-row{font-size:13.5px;min-height:33px;padding:6px 8px;gap:8px}
.nav-row .nav-ico .ic{width:16px;height:16px}
.nav-row .cnt{font-size:11.5px}
.nav-row.fav{font-size:14px;margin:2px 0 2px}
.nav-row.cal-row{font-size:14px;margin:0 0 14px}
.nav-section{font-size:13px;font-weight:600;letter-spacing:.2px;text-transform:none;color:var(--text-2);padding:0 6px 8px 8px}
.nav-section button{width:24px;height:24px;align-items:center;justify-content:center}
.nav-section button .ic{width:16px;height:16px}
.nav-row.tag-node{font-size:12.8px;min-height:30px}
.nav-hint{font-size:12.5px}
.space-head{padding-top:2px}
.space-head .space-name{display:flex;align-items:center;gap:6px;min-width:0;color:var(--text-2)}
.space-head .space-name b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.space-head .sp-ico{width:15px;height:15px;color:var(--accent)}
.nav-row.group-link{margin-top:10px;color:var(--text-3)}
.nav-row.group-link:hover{color:var(--text)}

/* ===== 空间切换弹层 ===== */
.space-pop{width:300px;padding:10px;margin:-10px}
.sp-search{display:flex;align-items:center;gap:7px;height:34px;padding:0 10px;border:1px solid var(--border);border-radius:9px;background:var(--panel-2);color:var(--text-3);margin-bottom:4px}
.sp-search:focus-within{border-color:var(--accent);background:var(--panel)}
.sp-search input{flex:1;min-width:0;border:0;background:none;outline:none;font-size:13px;color:var(--text)}
.sp-search .ic{width:14px;height:14px}
.sp-list{max-height:330px;overflow:auto}
.sp-item{display:flex;align-items:center;gap:9px;padding:8px 9px;border-radius:8px;cursor:pointer;font-size:13px;color:var(--text)}
.sp-item:hover{background:var(--hover)}
.sp-item.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.sp-item .sw{width:9px;height:9px;border-radius:3px;background:var(--text-3);flex:none;opacity:.45}
.sp-item .sw.personal{background:var(--accent);opacity:1}
.sp-item.on .sw{background:var(--accent);opacity:1}
.sp-item .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sp-gear{width:22px;height:22px;border-radius:6px;color:var(--text-3);display:flex;align-items:center;justify-content:center;flex:none;opacity:0;transition:opacity .12s}
.sp-item:hover .sp-gear,.sp-item.on .sp-gear{opacity:1}
.sp-gear:hover{background:var(--panel-3);color:var(--accent)}
.sp-gear .ic{width:13px;height:13px}
.sp-sec{display:flex;align-items:center;justify-content:space-between;padding:12px 9px 4px;font-size:11.5px;color:var(--text-3)}
.sp-sec button{width:22px;height:22px;border-radius:5px;color:var(--text-3);display:flex;align-items:center;justify-content:center}
.sp-sec button:hover{background:var(--panel-3);color:var(--accent)}
.sp-sec .sp-sec-t{cursor:pointer;transition:color .12s}
.sp-sec .sp-sec-t:hover{color:var(--accent)}
.sp-sec .ic{width:13px;height:13px}
.sp-groups{display:flex;flex-direction:column;gap:1px}
.sp-empty{font-size:12px;color:var(--text-3);padding:8px 9px}
.sp-foot{border-top:1px solid var(--border);margin-top:8px;padding-top:6px}
.sp-foot button{display:flex;align-items:center;gap:6px;width:100%;padding:8px 9px;border-radius:8px;font-size:13px;color:var(--accent)}
.sp-foot button:hover{background:var(--accent-soft)}
.sp-foot .ic{width:14px;height:14px}

/* ===== 空间切换：贴着按钮的浮动卡片 ===== */
.spk-pop{width:334px;padding:10px;margin:-10px;display:flex;flex-direction:column;max-height:min(66vh,470px)}
.spk-search{display:flex;align-items:center;gap:8px;height:34px;margin:0 0 8px;padding:0 12px;border-radius:9px;background:var(--panel-2);border:1px solid var(--border);color:var(--text-3);flex:none}
.spk-search:focus-within{border-color:var(--accent);background:var(--panel)}
.spk-search input{flex:1;min-width:0;border:0;background:none;outline:none;font-size:12.5px;color:var(--text)}
.spk-search .ic{width:14px;height:14px;flex:none}
.spk-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 2px 2px}
.spk-body::-webkit-scrollbar{width:7px}
.spk-body::-webkit-scrollbar-thumb{background:var(--panel-3);border-radius:8px}
.spk-body::-webkit-scrollbar-thumb:hover{background:var(--text-3)}
.spk-card{display:flex;align-items:center;gap:8px;height:38px;padding:0 11px;border-radius:8px;border:1px solid transparent;background:var(--panel-2);color:var(--text);font-size:12.5px;cursor:pointer;transition:background .12s,border-color .12s,color .12s}
.spk-card:hover{border-color:var(--border);background:var(--panel-3)}
.spk-card.on{background:var(--accent-soft);border-color:transparent;color:var(--accent);font-weight:600}
.spk-card .sw{width:9px;height:9px;border-radius:3px;background:var(--text-3);flex:none;opacity:.45}
.spk-card .sw.personal{background:var(--accent);opacity:1}
.spk-card.on .sw{background:var(--accent);opacity:1}
.spk-card .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.spk-card .spk-now{font-style:normal;font-size:10.5px;color:var(--accent);opacity:.8;flex:none}
.spk-gear{width:20px;height:20px;border-radius:6px;color:var(--text-3);display:flex;align-items:center;justify-content:center;flex:none;opacity:0;transition:opacity .12s}
.spk-card:hover .spk-gear,.spk-card.on .spk-gear{opacity:1}
.spk-gear:hover{background:var(--panel-3);color:var(--accent)}
.spk-gear .ic{width:12px;height:12px}
.spk-sec{display:flex;align-items:center;justify-content:space-between;padding:12px 2px 6px;font-size:11px;color:var(--text-3)}
.spk-sec button{width:20px;height:20px;border-radius:6px;color:var(--text-3);display:flex;align-items:center;justify-content:center}
.spk-sec button:hover{background:var(--panel-3);color:var(--accent)}
.spk-sec .ic{width:12px;height:12px}
.spk-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.spk-empty{grid-column:1/-1;font-size:11.5px;color:var(--text-3);padding:8px 2px}
.spk-foot{display:flex;align-items:center;gap:8px;flex:none;border-top:1px solid var(--border);margin-top:6px;padding:8px 2px 0}
.spk-foot button{display:flex;align-items:center;gap:5px;padding:6px 8px;border-radius:7px;font-size:12.5px;color:var(--accent)}
.spk-foot button:hover{background:var(--accent-soft)}
.spk-foot .ic{width:13px;height:13px}
.spk-hint{margin-left:auto;font-size:11px;color:var(--text-3)}


/* ===== 中栏：群组列表 ===== */
.group-list{flex:1;min-height:0;display:flex;flex-direction:column;padding:10px 10px 14px}
.gl-wrap{display:flex;flex-direction:column;min-height:0;flex:1}
.gl-rows{flex:0 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:3px}
.gl-row{display:flex;align-items:center;gap:9px;padding:9px;border-radius:8px;cursor:pointer;min-width:0}
.gl-row:hover{background:var(--hover)}
.gl-row.on{background:var(--accent-soft)}
.gl-ico{width:28px;height:28px;border-radius:8px;background:var(--panel-3);color:var(--text-2);display:flex;align-items:center;justify-content:center;flex:none}
.gl-row.on .gl-ico{background:var(--accent);color:#fff}
.gl-ico .ic{width:15px;height:15px}
.gl-main{min-width:0;display:flex;flex-direction:column;gap:1px}
.gl-main b{font-size:13.5px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gl-main em{font-style:normal;font-size:11px;color:var(--text-3)}
.gl-new{flex:none;margin-top:8px;display:flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:8px;font-size:13px;color:var(--accent)}
.gl-new:hover{background:var(--accent-soft)}
.gl-new .ic{width:14px;height:14px}
.gl-empty{font-size:12.5px;color:var(--text-3);text-align:center;padding:40px 8px;line-height:1.9}
.gl-empty span{font-size:11.5px}

/* ===== 右栏：群组管理 ===== */
.groupspane{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;background:var(--panel)}
.gp-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 22px 12px}
.gp-title{display:flex;align-items:center;gap:11px;min-width:0}
.gp-badge{width:38px;height:38px;border-radius:10px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;flex:none}
.gp-badge .ic{width:19px;height:19px}
.gp-title b{display:block;font-size:16px;font-weight:650;color:var(--text)}
.gp-title em{font-style:normal;font-size:12px;color:var(--text-3)}
.gp-acts{display:flex;gap:8px;flex:none}
.gp-tabs{flex:none;display:flex;gap:24px;padding:0 22px;border-bottom:1px solid var(--border)}
.gp-tabs button{padding:6px 2px 11px;font-size:13.5px;color:var(--text-2);border-bottom:2px solid transparent;margin-bottom:-1px}
.gp-tabs button:hover{color:var(--text)}
.gp-tabs button.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.gp-body{flex:1;overflow:auto;min-height:0;padding:16px 22px 26px;display:flex;flex-direction:column}
.gp-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--text-3);text-align:center;padding:40px}
.gp-empty h2{font-size:17px;font-weight:600;color:var(--text);margin:6px 0 0}
.gp-empty p{font-size:13px;margin:0 0 10px;max-width:360px;line-height:1.7}

/* 成员表 */
.gm-bar{display:flex;align-items:center;gap:10px;padding-bottom:14px;flex-wrap:wrap}
.gm-search{display:flex;align-items:center;gap:6px;height:32px;padding:0 10px;border:1px solid var(--border);border-radius:9px;background:var(--panel-2);color:var(--text-3);width:240px}
.gm-search:focus-within{border-color:var(--accent);background:var(--panel)}
.gm-search input{flex:1;min-width:0;border:0;background:none;outline:none;font-size:13px;color:var(--text)}
.gm-search .ic{width:14px;height:14px}
.gm-selcount{font-size:12px;color:var(--accent)}
.gm-tablewrap{border-top:1px solid var(--border);overflow:auto}
.gm-table{width:100%;border-collapse:collapse}
.gm-table th{text-align:left;font-size:12px;font-weight:500;color:var(--text-3);padding:10px 8px;border-bottom:1px solid var(--border);white-space:nowrap}
.gm-table td{padding:10px 8px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle;color:var(--text)}
.gm-table th.ck,.gm-table td.ck{width:30px;padding-right:0}
.gm-table input[type="checkbox"]{width:14px;height:14px;margin:0;accent-color:var(--accent);cursor:pointer}
.gm-user{display:flex;align-items:center;gap:9px}
.gm-avatar{width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:none}
.gm-nm{font-size:13px}
.gm-nm i{font-style:normal;font-size:10px;color:var(--accent);background:var(--accent-soft);border-radius:4px;padding:1px 4px;margin-left:5px;vertical-align:1px}
.gm-acc{color:var(--text-3);font-size:12.5px}
.gm-sel{height:27px;border:1px solid var(--border);border-radius:7px;background:var(--panel-2);color:var(--text-2);font-size:12px;padding:0 6px}
.gm-sel:hover{border-color:var(--accent);color:var(--accent)}
.gm-tag{font-size:12.5px;color:var(--text-2)}
.gm-tag.owner{font-weight:600;color:var(--text)}
.gm-ops{width:40px;text-align:right}
.gm-ops button{width:24px;height:24px;border-radius:6px;color:var(--text-3);display:inline-flex;align-items:center;justify-content:center}
.gm-ops button:hover{background:var(--danger-soft);color:var(--danger)}
.gm-ops .ic{width:12px;height:12px}
.gm-empty{text-align:center;color:var(--text-3);font-size:12.5px;padding:36px 0}

/* 团队设置 */
.gs-form{max-width:640px;display:flex;flex-direction:column;gap:16px}
.gs-field{display:flex;flex-direction:column;gap:6px}
.gs-field.block{display:flex}
.gs-field span{font-size:12.5px;color:var(--text-2)}
.gs-field input,.gs-field select{height:35px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:var(--panel-2);color:var(--text);font-family:inherit;width:100%}
.gs-field input:focus,.gs-field select:focus{outline:none;border-color:var(--accent);background:var(--panel)}
.gs-toggles{display:flex;flex-direction:column;gap:16px;padding-top:6px}
.sw-row{position:relative;display:flex;align-items:flex-start;gap:16px;cursor:pointer}
.sw-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.sw-txt b{font-size:13px;font-weight:500;color:var(--text)}
.sw-txt em{font-style:normal;font-size:11.5px;line-height:1.55;color:var(--text-3)}
.sw-input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.sw-ui{width:38px;height:22px;border-radius:11px;background:var(--panel-3);border:1px solid var(--border);position:relative;flex:none;transition:background .16s,border-color .16s;margin-top:2px}
.sw-ui::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--panel);box-shadow:0 1px 3px rgba(20,30,60,.25);transition:left .16s}
.sw-input:checked ~ .sw-ui{background:var(--accent);border-color:var(--accent)}
.sw-input:checked ~ .sw-ui::after{left:18px;background:#fff}
.gs-actions{display:flex;gap:10px;padding-top:4px}
.gs-sec{margin-top:26px;padding-top:16px;border-top:1px solid var(--border);max-width:640px}
.gs-sec h4{margin:0 0 6px;font-size:13px;font-weight:600;color:var(--text)}
.gs-table{width:100%;border-collapse:collapse}
.gs-table th{text-align:left;font-size:12px;font-weight:500;color:var(--text-3);padding:8px 0;border-bottom:1px solid var(--border)}
.gs-empty{margin:0;padding:14px 0;font-size:12.5px;color:var(--text-3)}
.gs-danger{margin-top:26px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gs-tip{font-size:11.5px;color:var(--text-3)}
.cp-btn.danger{color:var(--text-2)}
.cp-btn.danger:hover{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}
.cp-btn[disabled]{opacity:.45;cursor:not-allowed}
.ng-ok{width:100%;justify-content:center;height:36px}

/* 弹窗内的开关（.modal-body label 的 display:block 会破坏 flex 布局，这里显式覆盖） */
.modal-body .sw-row{display:flex;align-items:flex-start;gap:16px;margin:0 0 2px;padding:2px 0}
.modal-body .sw-row .sw-txt{display:flex;flex-direction:column;gap:3px}
.modal-body .sw-row .sw-input{display:none;position:static;width:0;height:0;margin:0;padding:0;border:0}
.modal-body .sw-ui{display:block;width:38px;height:22px;margin:2px 0 0;padding:0;flex:none}
.modal-body .sw-input:checked ~ .sw-ui{background:var(--accent);border-color:var(--accent)}
.modal-body .sw-input:checked ~ .sw-ui::after{left:18px;background:#fff}
.modal-body .gs-field input{height:35px;padding:0 10px;margin:0}

/* ===== 企业群组悬浮窗 ===== */
#groupsModalRoot .gm-mask{position:fixed;inset:0;background:rgba(12,16,24,.45);z-index:140;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
.gm-modal{display:flex;width:940px;max-width:100%;height:620px;max-height:88vh;background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}
.gm-side{width:236px;flex:none;display:flex;flex-direction:column;background:var(--panel-2);border-right:1px solid var(--border);min-height:0}
.gm-side-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:13px 10px 6px 16px;font-size:13px;font-weight:600;color:var(--text)}
.gm-side-head .icon-btn{width:26px;height:26px}
.gm-side-body{flex:1;min-height:0;display:flex;padding:0 8px 12px}
.gm-side-body .gl-wrap{flex:1;min-height:0}
.gm-side-body .gl-rows{flex:1;overflow:auto}
.gm-side-body .gl-row{padding:8px}
.gm-side-body .gl-main b{font-size:13px}
@media(max-width:860px){.gm-side{width:180px}.gm-modal{height:78vh}}

/* ===== 计数紧跟名称显示（不再统一推到最右） ===== */
.nav-row .nm{flex:0 1 auto}
.nav-row .cnt{flex:none;margin-left:-3px}
.nav-row .ops{margin-left:auto}
.nav-row .tail-chev{margin-left:auto}

/* ===== 事件清单：待办四象限 ===== */

.todopane{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;background:var(--col3,var(--panel))}
.tp-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 26px 14px;flex-wrap:wrap}
.tp-title{display:flex;align-items:center;gap:11px;min-width:0}
.tp-badge{width:38px;height:38px;border-radius:10px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;flex:none}
.tp-badge .ic{width:19px;height:19px}
.tp-title b{display:block;font-size:16px;font-weight:650;color:var(--text)}
.tp-title em{font-style:normal;font-size:12px;color:var(--text-3);font-variant-numeric:tabular-nums}
.tp-tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tp-search{display:flex;align-items:center;gap:6px;height:32px;padding:0 10px;border:1px solid var(--border);border-radius:9px;background:var(--panel-2);color:var(--text-3);width:220px}
.tp-search:focus-within{border-color:var(--accent);background:var(--panel)}
.tp-search input{flex:1;min-width:0;border:0;background:none;outline:none;font-size:13px;color:var(--text)}
.tp-search .ic{width:14px;height:14px}
.tp-done{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--text-2);cursor:pointer;white-space:nowrap}
.tp-done input{width:14px;height:14px;margin:0;accent-color:var(--accent);cursor:pointer}

.tp-scroll{flex:1;min-height:0;overflow:auto;padding:0 26px 26px;display:flex;flex-direction:column;gap:14px}
.tp-inbox{border:1px dashed var(--border-2);border-radius:12px;background:var(--panel-2);padding:10px 14px 12px;transition:border-color .12s,background .12s}
.tp-inbox.drop-hover{border-color:var(--accent);background:var(--accent-soft)}
.tp-qhead{display:flex;align-items:center;gap:8px;min-width:0}
.tp-qhead b{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap}
.tp-qhead em{font-style:normal;font-size:11.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tp-dot{width:8px;height:8px;border-radius:3px;background:var(--text-3);flex:none}
.tp-count{margin-left:auto;font-size:11.5px;color:var(--text-3);background:var(--panel-3);border-radius:9px;padding:1px 7px;flex:none;font-variant-numeric:tabular-nums}
.tp-count i{font-style:normal;opacity:.65}
.tp-qadd{width:22px;height:22px;border-radius:6px;color:var(--text-3);display:flex;align-items:center;justify-content:center;flex:none;opacity:0;transition:opacity .12s}
.tp-quad:hover .tp-qadd{opacity:1}
.tp-qadd:hover{background:var(--accent-soft);color:var(--accent)}
.tp-qadd .ic{width:13px;height:13px}

.tp-quick{display:flex;gap:8px;margin:8px 0 10px}
.tp-quick input{flex:1;min-width:0;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 11px;font-size:13px;background:var(--panel);color:var(--text);font-family:inherit}
.tp-quick input:focus{outline:none;border-color:var(--accent)}
.tp-quick button{width:34px;height:34px;border-radius:8px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;flex:none}
.tp-quick button:hover{background:var(--accent-2)}
.tp-quick button .ic{width:15px;height:15px}
.tp-ichips{display:flex;flex-wrap:wrap;gap:6px}
.tp-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border-radius:8px;background:var(--panel);border:1px solid var(--border);font-size:12.5px;color:var(--text);cursor:grab;max-width:100%}
.tp-chip:hover{border-color:var(--border-2)}
.tp-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}
.tp-chip em{font-style:normal;font-size:10.5px;color:var(--text-3)}
.tp-chip em.late{color:var(--danger)}
.tp-chip.done span{text-decoration:line-through;color:var(--text-3)}
.tp-chip input[type="checkbox"]{width:13px;height:13px;accent-color:var(--accent);margin:0;flex:none;cursor:pointer}
.tp-chip.dragging,.tp-item.dragging{opacity:.4}

.tp-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;align-items:stretch}
.tp-quad{border:1px solid var(--border);border-top:3px solid var(--border-2);border-radius:12px;background:var(--panel-2);display:flex;flex-direction:column;min-height:186px;min-width:0;transition:border-color .12s,background .12s}
.tp-quad.q1{border-top-color:#e8684a}
.tp-quad.q2{border-top-color:#5b8ff9}
.tp-quad.q3{border-top-color:#f6bd16}
.tp-quad.q4{border-top-color:#9aa3b2}
.tp-quad.q1 .tp-dot{background:#e8684a}
.tp-quad.q2 .tp-dot{background:#5b8ff9}
.tp-quad.q3 .tp-dot{background:#f6bd16}
.tp-quad.q4 .tp-dot{background:#9aa3b2}
.tp-quad.drop-hover{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent-soft)}
.tp-quad .tp-qhead{padding:9px 12px 4px}
.tp-qbody{padding:2px 8px 10px;display:flex;flex-direction:column;gap:1px;min-height:0;overflow:auto}
.tp-item{display:flex;align-items:center;gap:8px;padding:7px 6px;border-radius:7px;font-size:13px;color:var(--text);cursor:grab}
.tp-item:hover{background:var(--hover)}
.tp-item input[type="checkbox"]{width:15px;height:15px;margin:0;flex:none;accent-color:var(--accent);cursor:pointer}
.tp-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text}
.tp-item.done .tp-name{text-decoration:line-through;color:var(--text-3)}
.tp-due{flex:none;font-size:11px;color:var(--text-3);background:var(--panel-3);border-radius:6px;padding:1px 5px;font-variant-numeric:tabular-nums}
.tp-due.late{color:var(--danger);background:var(--danger-soft)}
.tp-del{width:20px;height:20px;border-radius:5px;color:var(--text-3);display:flex;align-items:center;justify-content:center;flex:none;opacity:0;transition:opacity .12s}
.tp-item:hover .tp-del{opacity:1}
.tp-del:hover{background:var(--danger-soft);color:var(--danger)}
.tp-del .ic{width:11px;height:11px}
.tp-empty{margin:0;padding:22px 6px;text-align:center;font-size:12px;color:var(--text-3)}
.tp-empty.mini{padding:6px 2px 2px;text-align:left}
.ev-line select.ev-quad{border:1px solid var(--border);border-radius:7px;padding:5px 7px;font-size:12.5px;background:var(--panel-2);color:var(--text);font-family:inherit;width:auto}
/* 看板高度自适应：任务少时紧凑，任务多时卡片内部滚动 */
.tp-grid{flex:none;grid-template-rows:auto auto;align-items:start}
.tp-quad{min-height:156px;max-height:288px}
.tp-quick input{max-width:520px}
@media(max-width:900px){.tp-grid{grid-template-columns:1fr}.tp-head{padding:14px 16px 10px}.tp-scroll{padding:0 16px 18px}}

/* ===== 周计划表（四象限下方） ===== */
.wp{flex:none;border:1px solid var(--border);border-radius:12px;background:var(--panel-2);padding:12px 14px 14px}
.wp-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.wp-title{display:flex;align-items:center;gap:9px;min-width:0}
.wp-badge{width:26px;height:26px;border-radius:8px;background:var(--accent-soft);color:var(--accent);display:flex;align-items:center;justify-content:center;flex:none}
.wp-badge .ic{width:14px;height:14px}
.wp-title b{display:block;font-size:13.5px;font-weight:650;color:var(--text)}
.wp-title em{font-style:normal;font-size:11.5px;color:var(--text-3);font-variant-numeric:tabular-nums}
.wp-tools{display:flex;align-items:center;gap:10px}
.wp-hint{font-size:11.5px;color:var(--text-3)}
.wp-nav{display:flex;align-items:center;gap:2px;background:var(--panel-3);border-radius:8px;padding:2px}
.wp-nav button{height:24px;min-width:24px;padding:0 7px;border-radius:6px;font-size:12px;color:var(--text-2)}
.wp-nav button:hover{background:var(--hover);color:var(--text)}
.wp-nav button.on{background:var(--panel);color:var(--accent);font-weight:600}
.wp-wrap{overflow-x:auto}
.wp-table{width:100%;min-width:680px;border-collapse:separate;border-spacing:0;table-layout:fixed}
.wp-table th,.wp-table td{border-right:1px solid var(--border);border-bottom:1px solid var(--border)}
.wp-table tr>:first-child{border-left:1px solid var(--border)}
.wp-table thead th{border-top:1px solid var(--border);background:var(--panel-3);height:40px;font-weight:500;text-align:center;padding:5px 4px}
.wp-table thead th b{display:block;font-size:12px;color:var(--text-2);font-weight:600}
.wp-table thead th em{display:block;font-style:normal;font-size:10px;color:var(--text-3);margin-top:1px;font-variant-numeric:tabular-nums}
.wp-table thead th.today b,.wp-table thead th.today em{color:var(--accent)}
.wp-corner{width:64px;background:var(--panel-2)}
.wp-rowhead{width:64px;background:var(--panel-2);text-align:center;padding:6px 4px}
.wp-rowhead b{display:block;font-size:12px;font-weight:600;color:var(--text-2)}
.wp-rowhead em{display:block;font-style:normal;font-size:9.5px;color:var(--text-3);margin-top:1px;font-variant-numeric:tabular-nums}
.wp-rowhead.now{background:var(--accent-soft)}
.wp-rowhead.now b{color:var(--accent)}
.wp-table td{height:86px;vertical-align:top;padding:0;background:var(--panel)}
.wp-cell{position:relative;height:100%;padding:5px 6px 4px;display:flex;flex-direction:column;gap:3px;min-width:0;transition:background .12s,box-shadow .12s}
.wp-cell.today{background:rgba(91,143,249,.05)}
.wp-cell.drop-hover{background:var(--accent-soft);box-shadow:inset 0 0 0 1.5px var(--accent)}
.wp-add{position:absolute;right:4px;bottom:3px;width:18px;height:18px;border-radius:5px;color:var(--text-3);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .12s}
.wp-cell:hover .wp-add{opacity:1}
.wp-add:hover{background:var(--accent-soft);color:var(--accent)}
.wp-add .ic{width:11px;height:11px}
.wp-chip{display:flex;align-items:center;gap:4px;min-width:0;padding:2px 5px;border-radius:5px;background:var(--panel-2);border:1px solid var(--border);font-size:11.5px;line-height:1.45;color:var(--text);cursor:grab}
.wp-cell.today .wp-chip{background:var(--panel)}
.wp-chip:hover{border-color:var(--border-2)}
.wp-chip input[type="checkbox"]{width:12px;height:12px;margin:0;flex:none;cursor:pointer}
.wp-chip span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text}
.wp-chip em{flex:none;font-style:normal;font-size:10px;color:var(--text-3);font-variant-numeric:tabular-nums}
.wp-chip.ev{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.wp-chip.ev em{color:var(--accent);opacity:.85}
.wp-chip.done{opacity:.72}
.wp-chip.done span{text-decoration:line-through;color:var(--text-3)}
.wp-chip.done input[type="checkbox"]{opacity:.85}
.wp-chip.dragging{opacity:.4}
.wp-more{align-self:flex-start;font-size:10.5px;color:var(--text-3);padding:1px 4px;border-radius:4px;white-space:nowrap}
.wp-more:hover{color:var(--accent);background:var(--accent-soft)}
.wp-new{padding:1px 0}
.wp-new input{width:100%;height:22px;border:1px solid var(--accent);border-radius:5px;padding:0 6px;font-size:11.5px;background:var(--panel);color:var(--text);font-family:inherit;outline:none}
.wp-wkcell{padding:0;background:var(--panel);display:flex}
.wp-half{position:relative;flex:1 1 50%;min-width:0;display:flex}
.wp-half+.wp-half{border-left:1px dashed var(--border-2)}
.wp-half .wp-cell{flex:1;min-width:0;padding-top:12px}
.wp-half-tag{position:absolute;left:4px;top:1px;font-style:normal;font-size:9px;color:var(--text-3);opacity:.85;z-index:1;pointer-events:none}
@media(max-width:1100px){.wp-hint{display:none}}


/* 中栏事件清单入口 */
.cal-src-head.inbox-head{cursor:pointer;border-radius:6px;padding:2px 4px 6px;margin:0 -4px;transition:background .12s}
.cal-src-head.inbox-head:hover{background:var(--hover)}
.cal-src-head.inbox-head:hover span{color:var(--accent)}
.cal-src-head .inbox-go{display:flex;align-items:center;color:var(--text-3);flex:none;margin-left:2px}
.cal-src-head .inbox-go .ic{width:13px;height:13px}
.cal-src-head.inbox-head .cnt{margin-left:auto}
.cal-src-head .inbox-go{font-size:11px;font-weight:400;color:var(--text-3);gap:1px}
.cal-src-head.inbox-head:hover .inbox-go{color:var(--accent)}
.cal-src-head.inbox-head .cnt{margin-left:0}
.cal-src-head.inbox-head .inbox-go{margin-left:auto;padding-left:6px}

/* 看板返回按钮 */
.tp-back{width:28px;height:28px;border-radius:8px;border:1px solid var(--border);display:flex;align-items:center;justify-content:center;color:var(--text-2);flex:none}
.tp-back:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.tp-back .ic{width:14px;height:14px;transform:rotate(180deg)}
/* 看板复选框统一外观（深色下不再是白块） */
.tp-chip input[type="checkbox"],.tp-item input[type="checkbox"]{appearance:none;-webkit-appearance:none;border:1.5px solid var(--text-3);border-radius:4px;flex:none;cursor:pointer;background-position:center;background-repeat:no-repeat;background-size:11px;margin:0}
.tp-chip input[type="checkbox"]{width:13px;height:13px;background-size:9px}
.tp-item input[type="checkbox"]{width:15px;height:15px}
.tp-chip input[type="checkbox"]:checked,.tp-item input[type="checkbox"]:checked{background-color:var(--accent);border-color:var(--accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.2 8.4l3.1 3.1 6.5-6.6' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}

/* ===== 二栏多选与拖拽 ===== */
.note-card.sel{background:var(--accent-soft)}
.note-card.sel .nc-title{color:var(--accent)}
.note-card .nc-grip{position:absolute;left:2px;top:50%;transform:translateY(-50%);width:6px;height:16px;opacity:0;color:var(--text-3);pointer-events:none;background-image:radial-gradient(currentColor 1.1px,transparent 1.3px);background-size:3px 5px;background-repeat:repeat;transition:opacity .12s}
.note-card:hover .nc-grip{opacity:.5}
.note-card.sel .nc-grip{opacity:.85;color:var(--accent)}
.bulk-bar{flex:none;display:flex;align-items:center;flex-wrap:nowrap;gap:6px;padding:6px 10px;overflow:hidden;background:var(--accent-soft);border-bottom:1px solid var(--border);font-size:12px;color:var(--text-2)}
.bulk-bar .bb-count{white-space:nowrap;flex:none;font-size:11.5px}
.bulk-bar .bb-count b{color:var(--accent)}
.bulk-bar .spacer{flex:1}
.bb-btn{flex:none;height:23px;padding:0 7px;border-radius:6px;font-size:11.5px;color:var(--text-2);border:1px solid var(--border);background:var(--panel);white-space:nowrap}
.bb-btn:hover{border-color:var(--accent);color:var(--accent)}
.bb-btn.danger{color:var(--danger);border-color:transparent;background:transparent}
.bb-btn.danger:hover{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}
.bb-btn.ghost{border-color:transparent;background:transparent}
.bb-btn.ghost:hover{background:var(--panel-3);color:var(--text)}
.drag-ghost{position:fixed;top:-1000px;left:-1000px;z-index:9999;pointer-events:none;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:6px;min-width:168px;max-width:230px}
.dg-card{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--text);padding:5px 7px;border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden}
.dg-card:last-child{border-bottom:0}
.dg-card span{overflow:hidden;text-overflow:ellipsis}
.dg-ico{width:12px;height:12px;border-radius:3px;background:var(--accent-soft);border:1px solid var(--accent);flex:none}
.dg-badge{position:absolute;left:-7px;top:-7px;display:flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 5px;border-radius:11px;background:#ef5b8a;color:#fff;font-size:11px;font-weight:700;box-shadow:0 2px 6px rgba(0,0,0,.28)}

/* ===== 草稿条 / 冲突弹窗 / 批量标签 / 回收站提示 ===== */
.draft-bar{display:flex;align-items:center;gap:8px;margin:8px 12px 0;padding:7px 10px;border-radius:9px;background:var(--accent-soft);border:1px solid var(--border);font-size:12px;color:var(--text-2)}
.db-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex:none}
.db-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2)}
.db-btn{flex:none;height:23px;padding:0 9px;border-radius:6px;border:1px solid var(--border);background:var(--panel);font-size:11.5px;color:var(--text-2)}
.db-btn:hover{border-color:var(--accent);color:var(--accent)}
.db-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.db-btn.primary:hover{background:var(--accent-2);color:#fff}
.cf-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0 12px}
.cf-card{display:flex;flex-direction:column;gap:4px;padding:9px 10px;border:1px solid var(--border);border-radius:9px;background:var(--panel-2);font-size:12px;min-width:0}
.cf-card b{font-size:11px;font-weight:600;color:var(--text-3)}
.cf-card span{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cf-card em{font-style:normal;color:var(--text-3);font-size:11px}
.tag-pick-wrap{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.trash-hint{padding:2px 14px 9px;font-size:11.5px;color:var(--text-3);line-height:1.5}
.nc-draft{flex:none;font-size:9.5px;line-height:1;padding:2px 4px;border-radius:4px;color:var(--warn);border:1px solid var(--warn);opacity:.85;letter-spacing:.2px}
mark.hl{background:#ffe58a;color:#5a4300;padding:0 1px;border-radius:2px}
:root[data-theme="dark"] mark.hl{background:#6b5a12;color:#ffeaa0}

/* ===== 窄屏抽屉 ===== */
.mobile-only,.mobile-back{display:none}
.mobile-scrim{position:fixed;inset:0;background:rgba(10,14,22,.42);z-index:59;display:none;backdrop-filter:blur(1px)}
.mobile-scrim.show{display:block}
@media(min-width:901px){.mobile-scrim{display:none !important}}
@media(max-width:900px){
  .mobile-only{display:inline-flex}
  .app{grid-template-columns:0 260px minmax(0,1fr)}
  /* 左栏必须真正脱离栅格流：否则它会占住第一行，编辑区被挤到第二行 */
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:250px;z-index:60;transform:translateX(-100%);transition:transform .2s}
  body.side-open .sidebar{transform:none;box-shadow:var(--shadow)}
  .editorpane{grid-row:1}
  /* 左栏改为抽屉后已脱离栅格流，必须显式指定列，否则二栏/编辑区会错位 */
  .listpane{grid-column:2}
  .editorpane{grid-column:3}
}
@media(max-width:760px){
  .mobile-back{display:inline-flex}
  .app{grid-template-columns:0 0 minmax(0,1fr)}
  .listpane{grid-column:2}
  .editorpane{grid-column:1 / -1}
  .listpane{position:fixed;left:0;top:0;bottom:0;width:min(86vw,330px);z-index:62;transform:translateX(-100%);transition:transform .2s;box-shadow:none;background:var(--panel)}
  body.list-open .listpane{transform:none;box-shadow:var(--shadow)}
  .doc-rail{width:38px}
  .editor-wrap{padding-right:38px}
  .doc-rail .act-btn{width:28px;height:28px}
  .doc-head{padding:10px 12px 0}
  .doc-title{font-size:19px}
  .editor{padding:16px 14px 24px}
  .statusbar{padding:0 12px;font-size:11px}
  .toolbar{padding:6px 10px;gap:1px}
  .toolbar .tb{width:26px;height:26px}
  .toolbar .tb-sep{display:none}
  .tb-group{gap:1px;margin-right:6px}
  .bulk-bar{padding:5px 8px;gap:4px}
  .bb-btn{padding:0 6px;font-size:11px}
  .cal-view .cal-grid{font-size:11px}
  .draft-bar{margin:6px 10px 0}
}
@media(max-width:760px){
  .wp-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .wp-table{min-width:620px}
  .tp-scroll{overflow-x:auto}
  .gm-modal{width:100%;height:82vh;flex-direction:column}
  .gm-side{width:100%;max-height:38%;border-right:0;border-bottom:1px solid var(--border)}
  .gm-side-body{min-height:120px}
}

/* ===== 双向链接 / 链接选择器 / 加载更多 ===== */
.ProseMirror a.note-link{display:inline-block;padding:0 5px;border-radius:5px;background:var(--accent-soft);color:var(--accent);text-decoration:none;font-size:.95em;border:1px solid transparent;cursor:pointer;line-height:1.5}
.ProseMirror a.note-link:hover{border-color:var(--accent)}
.ProseMirror a.note-link.ProseMirror-selectednode{outline:2px solid var(--accent);outline-offset:1px}
.link-pick{position:fixed;z-index:150;width:290px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);overflow:hidden}
.lp-head{padding:8px 10px 4px;font-size:11px;color:var(--text-3)}
.link-pick input{width:calc(100% - 16px);margin:0 8px 6px;padding:6px 8px;border:1px solid var(--border);border-radius:7px;background:var(--panel-2);font-size:12.5px;color:var(--text)}
.lp-list{max-height:240px;overflow:auto;padding:0 4px 5px}
.lp-row{display:flex;width:100%;align-items:center;gap:8px;padding:6px 7px;border-radius:6px;font-size:12.5px;color:var(--text);text-align:left}
.lp-row em{margin-left:auto;font-style:normal;font-size:11px;color:var(--text-3)}
.lp-row:hover,.lp-row.active{background:var(--accent-soft)}
.lp-empty{padding:10px;font-size:12px;color:var(--text-3)}
.bl-list{max-height:62vh;overflow:auto}
.bl-sec{padding:8px 10px 3px;font-size:11px;color:var(--text-3)}
.bl-row{display:flex;width:100%;align-items:center;gap:7px;padding:6px 9px;border-radius:6px;font-size:12.5px;color:var(--text);text-align:left}
.bl-row:hover{background:var(--accent-soft)}
.bl-ico{display:inline-flex;color:var(--text-3)}
.bl-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bl-time{font-size:11px;color:var(--text-3)}
.load-more{display:block;width:calc(100% - 20px);margin:8px 10px 14px;padding:8px;border-radius:8px;background:var(--panel);border:1px dashed var(--border-2);color:var(--text-2);font-size:12px}
.load-more:hover{border-color:var(--accent);color:var(--accent)}

/* ===== 分享 / 命令面板 / 统计 ===== */
.share-list{margin-top:10px;max-height:230px;overflow:auto;border-top:1px solid var(--border);padding-top:8px}
.share-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:7px 0;border-bottom:1px dashed var(--border);font-size:11.5px;color:var(--text-3)}
.share-row code{font-size:11px;color:var(--text);word-break:break-all;flex:1 1 100%;font-family:ui-monospace,Consolas,monospace}
.share-row button{padding:2px 7px;border:1px solid var(--border);border-radius:5px;font-size:11px;color:var(--text-2)}
.share-row button:hover{border-color:var(--accent);color:var(--accent)}
.share-row button.danger{color:var(--danger);border-color:transparent}
.palette{position:fixed;inset:0;z-index:160}
.pal-mask{position:absolute;inset:0;background:rgba(10,14,22,.36);backdrop-filter:blur(2px)}
.pal-box{position:relative;width:min(560px,90vw);margin:12vh auto 0;background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}
.pal-box input{width:100%;padding:14px 16px;border:0;border-bottom:1px solid var(--border);background:transparent;font-size:15px;color:var(--text);outline:none}
.pal-list{max-height:46vh;overflow:auto;padding:6px}
.pal-row{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;border-radius:8px;text-align:left;font-size:13px;color:var(--text)}
.pal-row.active{background:var(--accent-soft)}
.pal-kind{font-size:10px;color:var(--text-3);border:1px solid var(--border);border-radius:4px;padding:1px 4px;flex:none}
.pal-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pal-row em{font-style:normal;font-size:11px;color:var(--text-3);flex:none}
.pal-empty{padding:14px;font-size:12px;color:var(--text-3)}
.pal-foot{display:flex;gap:14px;padding:8px 12px;border-top:1px solid var(--border);font-size:11px;color:var(--text-3)}
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.stat-card{background:var(--panel-2);border:1px solid var(--border);border-radius:9px;padding:10px;text-align:center}
.stat-card b{display:block;font-size:18px;color:var(--text);line-height:1.3}
.stat-card span{font-size:11px;color:var(--text-3)}
.hm-wrap{overflow-x:auto;padding-bottom:6px}
.hm-grid{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,11px);gap:3px;width:max-content}
.hm-c{width:11px;height:11px;border-radius:2px;background:var(--panel-3);display:inline-block}
.hm-c.lv1{background:#cddcff}.hm-c.lv2{background:#9db4ff}.hm-c.lv3{background:#5b7ef5}.hm-c.lv4{background:#3b5bdb}
:root[data-theme="dark"] .hm-c.lv1{background:#2b3a5e}
:root[data-theme="dark"] .hm-c.lv2{background:#3d5a9e}
:root[data-theme="dark"] .hm-c.lv3{background:#5b7ef5}
:root[data-theme="dark"] .hm-c.lv4{background:#91a7ff}
.hm-legend{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-3);margin-top:8px}
@media(max-width:760px){.stat-grid{grid-template-columns:repeat(2,1fr)}.pal-box{margin-top:8vh}}
.gs-sub{margin:14px 0 6px;font-size:12px;font-weight:600;color:var(--text-2)}

/* ===== 统计增强：月视图 / 年视图 / 当日明细 / 回顾卡片 ===== */
.hm-toolbar{display:flex;align-items:center;gap:10px;margin:4px 0 10px}
.hm-tabs{display:flex;gap:3px;background:var(--panel-3);padding:3px;border-radius:8px}
.hm-tab{padding:3px 10px;border-radius:6px;font-size:12px;color:var(--text-2)}
.hm-tab:hover{color:var(--text)}
.hm-tab.active{background:var(--panel);color:var(--accent);box-shadow:var(--shadow-sm)}
.hm-toolbar .hm-legend{margin:0 0 0 auto}
.hm-body{min-height:118px}
.hm-c.today{outline:1.5px solid var(--accent);outline-offset:1px}
.hm-c.blank{background:transparent}
.hm-c.md{width:100%;height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:10.5px;color:var(--text-3);font-style:normal}
.hm-c.lv3.md,.hm-c.lv4.md{color:#fff}
.hm-month{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.hm-month-head{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:6px;font-size:12.5px;color:var(--text)}
.hm-nav{width:22px;height:22px;border-radius:6px;color:var(--text-2);font-size:14px;line-height:1}
.hm-nav:hover{background:var(--panel-3);color:var(--accent)}
.hm-week-head{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:4px}
.hm-week-head span{text-align:center;font-size:10.5px;color:var(--text-3)}
.hm-months{display:flex;flex-direction:column;gap:3px}
.hm-mrow{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:6px;font-size:12px;color:var(--text-2);text-align:left}
.hm-mrow:hover{background:var(--accent-soft)}
.hm-mlabel{width:56px;flex:none;color:var(--text-3);font-size:11.5px}
.hm-mbar{flex:1;height:8px;border-radius:4px;background:var(--panel-3);overflow:hidden;display:block}
.hm-mbar b{display:block;height:100%;background:var(--accent);border-radius:4px}
.hm-mrow em{width:92px;flex:none;font-style:normal;text-align:right;font-size:11px;color:var(--text-3)}
.hm-foot{margin-top:10px;font-size:11.5px;color:var(--text-3)}
.hm-day{margin-top:12px;border-top:1px solid var(--border);padding-top:8px}
.hm-day-head{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-2);margin-bottom:4px}
.hm-day-head b{color:var(--text);font-size:12.5px}
.hm-day-head span{color:var(--text-3);font-size:11.5px}
.hm-day-close{margin-left:auto;width:20px;height:20px;border-radius:5px;color:var(--text-3)}
.hm-day-close:hover{background:var(--panel-3);color:var(--text)}
.hm-day-body{max-height:158px;overflow:auto}
.hm-note{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:6px;font-size:12.5px;color:var(--text);text-align:left}
.hm-note:hover{background:var(--accent-soft)}
.hm-note-t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hm-note em{font-style:normal;font-size:11px;color:var(--text-3);flex:none}
.rv-card{padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--panel-2)}
.rv-meta{font-size:11.5px;color:var(--text-3);margin-bottom:6px}
.rv-title{margin:0 0 8px;font-size:17px;line-height:1.4}
.rv-text{margin:0;font-size:13.5px;line-height:1.8;color:var(--text-2);white-space:pre-wrap}
/* 统计面板留白微调：周视图居中并放大格子，月视图限宽居中 */
.hm-grid{margin:0 auto;grid-template-rows:repeat(7,13px)}
.hm-grid .hm-c{width:13px;height:13px;border-radius:3px}
.hm-month{max-width:430px;margin:0 auto}
.hm-months{max-width:520px;margin:0 auto}
.hm-day{max-width:100%}
.hm-day-body .hint{padding:6px 2px}

/* ===== media library: filters / version manager / recycle bin ===== */
.media-filter{display:flex;align-items:center;gap:4px;padding:9px 0 3px;font-size:11px;color:var(--text-3);flex-wrap:wrap}
.media-filter > button{font-size:11px;padding:3px 9px;border-radius:6px;color:var(--text-3);border:1px solid transparent;flex:none}
.media-filter > button:hover{background:var(--hover)}
.media-filter > button.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.media-filter .mtr-tip{flex:1;min-width:120px}
.media-ops .mop-txt{width:auto;min-width:0;padding:0 9px;font-size:11px;height:24px;border:1px solid var(--border);border-radius:6px;color:var(--text-2);background:transparent;white-space:nowrap}
.mop-txt{width:auto;padding:0 9px;font-size:11px;height:24px;border:1px solid var(--border);border-radius:6px;color:var(--text-2);background:transparent;white-space:nowrap}
.media-ops .mop-txt:hover,.mop-txt:hover{border-color:var(--accent);color:var(--accent);background:transparent}
.media-ops .mop-txt.danger,.mop-txt.danger{color:var(--danger);border-color:var(--danger-border,#f0c9c9)}
.media-ops .mop-txt.danger:hover,.mop-txt.danger:hover{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}
.media-filter > button.danger{color:var(--danger);border-color:var(--danger-border,#f0c9c9)}
.media-filter > button.danger:hover{background:var(--danger-soft);color:var(--danger)}
.mtr-left{color:var(--warn,#bf7a10)}

/* 版本管理弹窗 */
.mv-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.mv-title{display:flex;flex-direction:column;gap:2px;min-width:0}
.mv-title b{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mv-title em{font-style:normal;font-size:11px;color:var(--text-3)}
.mv-list{max-height:340px;overflow-y:auto;padding:4px 0}
.mv-row{display:flex;align-items:center;gap:10px;padding:8px 2px;border-bottom:1px solid var(--border)}
.mv-row.cur{background:var(--accent-soft);border-radius:8px;padding:8px;border-bottom-color:transparent;margin-top:6px}
.mv-thumb{width:38px;height:38px;flex:none;border-radius:7px;object-fit:cover;background:var(--panel-3);display:flex;align-items:center;justify-content:center;color:var(--text-3)}
.mv-thumb.ico .ic{width:16px;height:16px}
.mv-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.mv-main b{font-size:12.5px}
.mv-main em{font-style:normal;font-size:11px;color:var(--text-3)}
.mv-badge{font-size:10px;font-weight:600;color:#fff;background:var(--accent);border-radius:5px;padding:1px 5px;margin-left:4px;vertical-align:1px}
.mv-ops{display:flex;gap:6px;flex:none;align-items:center;justify-content:flex-end;min-width:150px}
.mv-btn{font-size:11px;color:var(--text-2);border:1px solid var(--border);border-radius:6px;padding:3px 9px;background:transparent;text-decoration:none;cursor:pointer;white-space:nowrap}
.mv-btn:hover{border-color:var(--accent);color:var(--accent)}
.ver-retention{margin:6px 0 0}
@media (max-width:640px){
  .media-panel{min-width:0}
  .media-row{flex-wrap:wrap}
  .mv-row{flex-wrap:wrap}
}

/* ===== 「最近」时间树 ===== */
.nav-row.recent-row{margin:2px 0;font-size:14px;font-weight:600;color:var(--text)}
.nav-row.recent-row .nav-ico{color:var(--accent)}
.nav-row.recent-row .nav-ico .ic{width:16px;height:16px}
.list-group-head.time-head{cursor:default;font-weight:600;color:var(--text-2);padding:13px 10px 5px;letter-spacing:.2px}
.list-group-head.time-head:hover{color:var(--text-2)}
.list-group-head.time-head:first-child{padding-top:4px}
.list-group-head.time-head em{font-weight:400;color:var(--text-3)}

/* ===== 回收站分组：笔记回收站 / 附件回收站 ===== */
.nav-row.trash-row{margin-top:12px}
.trash-tree{padding:2px 0 8px}
.nav-row.sub-row{min-height:28px;font-size:12.5px;padding-left:26px}
.nav-row.sub-row .sub-dot{width:5px;height:5px;border-radius:50%;background:var(--border-2);flex:none}
.nav-row.sub-row .nm{font-weight:400}
.nav-row.sub-row.active{background:var(--panel-3);color:var(--text);font-weight:600}
.nav-row.sub-row.active .sub-dot{background:var(--text)}

/* ===== 「最近」：竖向时间轴页面（含统计与回顾） ===== */
.app.timeline-mode{grid-template-columns:226px minmax(0,1fr)}
.app.timeline-mode .listpane{display:none}
.tlpane{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;background:var(--col3,var(--panel))}
.tlp-head{flex:none;display:flex;align-items:center;gap:10px;padding:13px 26px;border-bottom:1px solid var(--border)}
.tlp-title{display:flex;align-items:baseline;gap:10px;min-width:0}
.tlp-title b{font-size:16px;font-weight:700}
.tlp-title span{font-size:12px;color:var(--text-3)}
.tlp-acts{margin-left:auto;display:flex;gap:8px;align-items:center;flex:none}
.tlp-scroll{flex:1;overflow-y:auto;padding:18px 26px 60px;width:100%;min-width:0}
.tlp-stats{margin-bottom:22px;padding-bottom:20px;border-bottom:1px dashed var(--border)}
.tlp-stats.hidden{display:none}

.tl-group{margin-bottom:18px}
.tl-date{display:flex;align-items:baseline;gap:8px;margin-bottom:8px;font-size:12px;color:var(--text-3)}
.tl-date b{font-size:13.5px;font-weight:700;color:var(--text)}
.tl-date em{font-style:normal;font-size:11px}
.tl-date span{margin-left:auto;font-size:11px}
.tl-items{position:relative;padding-left:20px}
.tl-items::before{content:'';position:absolute;left:5px;top:10px;bottom:12px;width:1px;background:var(--border-2)}
.tl-item{position:relative;display:flex;gap:8px;align-items:flex-start;margin-bottom:10px;cursor:pointer;outline:none}
.tl-item::before{content:'';position:absolute;left:-19px;top:10px;width:9px;height:9px;border-radius:50%;background:var(--panel);border:2px solid var(--accent);z-index:1}
.tl-item:hover::before,.tl-item:focus-visible::before{background:var(--accent)}
.tl-time{flex:none;width:40px;font-size:11px;color:var(--text-3);padding-top:9px;font-variant-numeric:tabular-nums}
.tl-card{flex:1;min-width:0;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:9px 12px;transition:border-color .15s,background .15s}
.tl-item:hover .tl-card{border-color:var(--accent);background:var(--panel)}
.tl-item:focus-visible .tl-card{box-shadow:0 0 0 2px var(--accent-soft)}
.tl-card b{display:block;font-size:13px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-card p{margin:3px 0 0;font-size:12px;line-height:1.55;color:var(--text-3);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tl-meta{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px;font-size:11px;color:var(--text-3)}
@media (max-width:1180px){.app.timeline-mode{grid-template-columns:226px minmax(0,1fr)}}
@media (max-width:900px){
  .app.timeline-mode{grid-template-columns:minmax(0,1fr)}
  /* 侧栏在窄屏是抽屉，编辑区必须显式占满整行，否则会被 grid-column:3 挤到隐式列 */
  .app.timeline-mode .editorpane{grid-column:1 / -1}
  .tlp-scroll{padding:14px 14px 60px}
  .tlp-head{padding:11px 14px;gap:8px;flex-wrap:wrap}
  .tlp-title span{display:none}
  #tlMenu{display:inline-flex}
  .tlp-acts{margin-left:auto;flex-wrap:wrap;justify-content:flex-end}
}

/* 时间轴页里的统计块：热力图左对齐、格子略大，避免在大留白里显得悬空 */
.tlp-stats .hm-grid{margin:0;grid-template-rows:repeat(7,15px);gap:4px}
.tlp-stats .hm-grid .hm-c{width:15px;height:15px;border-radius:3px}
.tlp-stats .hm-body{min-height:0}
.tlp-stats .hm-month{margin:0}

/* ===== 暗色主题：三栏分层 + 编辑器外框 ===== */
/* 编辑区里的标签条 / 工具栏 / 状态栏 / 右侧栏比正文底色略深，形成层次 */
:root[data-theme="dark"] .toolbar,
:root[data-theme="dark"] .doc-tabs,
:root[data-theme="dark"] .statusbar,
:root[data-theme="dark"] .doc-rail{background:var(--chrome)}
/* 侧栏底色很深，hover / 选中要用更细的灰阶，直接用 --hover 会过亮 */
:root[data-theme="dark"] .nav-row:hover{background:#242424}
:root[data-theme="dark"] .nav-row.active{background:#2f3031}
:root[data-theme="dark"] .side-search{background:#1c1c1c;border-color:#2e2f30}
:root[data-theme="dark"] .side-search:focus-within{background:#1c1c1c}
:root[data-theme="dark"] .side-search input{color:var(--text)}
/* 顶栏品牌区与列表头的分隔线在暗色下更克制 */
:root[data-theme="dark"] .list-head{border-bottom-color:#333435}
:root[data-theme="dark"] .note-card{border-bottom-color:#333435}
:root[data-theme="dark"] .note-card:hover{background:#2e2f30}
:root[data-theme="dark"] .note-card.active{background:#313233;border-color:var(--accent)}
:root[data-theme="dark"] .login-mask{background:radial-gradient(1200px 620px at 50% 0%,#1e1f20,#121212 60%)}
:root[data-theme="dark"] .hm-c.lv1{background:#22304a}
:root[data-theme="dark"] .hm-c.lv2{background:#2c4a7d}
:root[data-theme="dark"] .hm-c.lv3{background:#3a68b8}
:root[data-theme="dark"] .hm-c.lv4{background:#4a8aff}
/* 暗色下的选中态：标签页与正文同色=「抬起」，卡片用更柔和的边框 */
:root[data-theme="dark"] .doc-tab.active{background:var(--col3);border-color:#3f4041;color:var(--text)}
:root[data-theme="dark"] .doc-tab:hover{background:#333435}
:root[data-theme="dark"] .note-card.active{background:#303132;border-color:rgba(74,138,255,.5);box-shadow:none}
:root[data-theme="dark"] .note-card .row-ops button{background:var(--col3);border-color:#404142}
:root[data-theme="dark"] .note-card .row-ops button:hover{background:#3d3e3f;color:var(--text)}
/* 暗色下热力图空格子要浮起来，否则和编辑区底色糊在一起 */
:root[data-theme="dark"] .hm-c:not(.blank){background:#3f4041}
:root[data-theme="dark"] .hm-c.lv1{background:#22304a}
:root[data-theme="dark"] .hm-c.lv2{background:#2c4a7d}
:root[data-theme="dark"] .hm-c.lv3{background:#3a68b8}
:root[data-theme="dark"] .hm-c.lv4{background:#4a8aff}

/* ===== 一栏 / 二栏 排版统一 ===== */
/* 一栏主行 13，顶部三项 13.5，分组标题 12，形成清晰层级 */
.nav-row{font-size:13px;min-height:32px;gap:8px}
.nav-row .nm{line-height:1.35}
.nav-row .cnt{font-size:11px}

/* 顶部三项（最近 / 我的收藏 / 待办）：未选中浅灰，选中转黑 */
.nav-row.recent-row,
.nav-row.fav{font-size:13.5px;font-weight:500;color:var(--text-2);margin:1px 0;min-height:33px}
.nav-row.cal-row{font-size:13.5px;font-weight:500;color:var(--text-2);margin:1px 0 12px;min-height:33px}
.nav-row.recent-row .nav-ico,
.nav-row.fav .nav-ico,
.nav-row.cal-row .nav-ico{color:var(--text-3)}
.nav-row.recent-row .nav-ico .ic,
.nav-row.fav .nav-ico .ic,
.nav-row.cal-row .nav-ico .ic{width:16px;height:16px}
.nav-row.recent-row:hover,
.nav-row.fav:hover,
.nav-row.cal-row:hover{color:var(--text)}
.nav-row.recent-row.active,
.nav-row.fav.active,
.nav-row.cal-row.active{background:var(--panel-3);color:var(--text);font-weight:600}
.nav-row.recent-row.active .nav-ico,
.nav-row.fav.active .nav-ico,
.nav-row.cal-row.active .nav-ico{color:var(--text)}

/* 分组标题（个人笔记 / 标签 / 回收站）比条目更小更淡 */
.nav-section{font-size:12px;font-weight:600;letter-spacing:.3px;color:var(--text-3);padding:0 8px 6px}
.nav-section .space-name{color:var(--text-3)}
.nav-row.tail{font-size:13px;font-weight:500}
.nav-row.nb-row{font-size:13px;min-height:30px}
.nav-row.tag-node{font-size:12.5px;min-height:28px}
.nav-row.tag-node .nm{font-size:12.5px}
.nav-row.sub-row{font-size:12.5px;min-height:28px}

/* 二栏：标题 13.5 / 元信息 11，和左栏 13 / 12 的层级对齐 */
.list-meta-row{font-size:12px}
.list-title-mini{font-size:13px;font-weight:600}
.list-count-text{font-size:11.5px}
.nc-title{font-size:13.5px}
.note-card.active .nc-title{color:var(--text);font-weight:600}
.nc-meta{font-size:11px}
.nc-excerpt{font-size:11.5px;line-height:1.55}
.list-group-head{font-size:11.5px}

/* ===== 「最近」页：整宽布局 + 日历式日统计 ===== */
.tlp-cal{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,380px);gap:16px;align-items:stretch}
.tlcal-panel{background:var(--panel-2);border:1px solid var(--border);border-radius:12px;padding:12px 14px 10px}
.tlcal-head{display:flex;align-items:center;gap:6px;margin-bottom:9px}
.tlcal-title{font-size:14px;font-weight:600;color:var(--text);min-width:104px}
.tlcal-nav{width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:7px;color:var(--text-2);font-size:16px;line-height:1}
.tlcal-nav:hover{background:var(--hover);color:var(--text)}
.tlcal-today{height:26px;padding:0 10px;border:1px solid var(--border);border-radius:7px;font-size:11.5px;color:var(--text-2)}
.tlcal-today:hover{border-color:var(--accent);color:var(--accent)}
.tlcal-legend{margin-left:auto;display:flex;align-items:center;gap:4px;font-size:11px;color:var(--text-3)}
.tlcal-legend .hm-c{width:10px;height:10px;border-radius:2px}

/* ===== 日历下方的当天统计 ===== */
.tlday{margin-top:12px;border:1px solid var(--border);border-radius:12px;padding:13px 14px;background:var(--panel)}
.tlday-head{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.tlday-head b{font-size:13.5px;font-weight:600;color:var(--text)}
.tlday-head span{font-size:11.5px;color:var(--text-3)}
.tlday-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.tlday-cell{background:var(--panel-2);border-radius:9px;padding:9px 11px}
.tlday-cell b{display:block;font-size:17px;font-weight:600;line-height:1.25;color:var(--text);font-variant-numeric:tabular-nums}
.tlday-cell span{font-size:11px;color:var(--text-3)}

.tlcal-week{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:5px}
.tlcal-week span{text-align:center;font-size:11px;color:var(--text-3)}
.tlcal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.tlcal-d{min-height:76px;border-radius:8px;border:1px solid transparent;background:transparent;padding:6px 7px 7px;display:flex;flex-direction:column;gap:2px;text-align:left;color:var(--text-2);overflow:hidden}
.tlcal-d b{font-size:12.5px;font-weight:600;line-height:1.1}
.tlcal-d em{font-style:normal;font-size:10.5px;color:var(--text-3)}
.tlcal-d.blank{border-color:transparent;background:transparent;cursor:default}
.tlcal-d:not(.blank):hover{background:var(--hover);color:var(--text)}
/* 深色级（4/5）hover 时保持深底，否则白字落在浅底上看不见 */
.tlcal-d.lv4:hover,.tlcal-d.lv5:hover{background:#3b5bdb;border-color:#3b5bdb;color:#fff}
.tlcal-d.lv4:hover em,.tlcal-d.lv5:hover em{color:rgba(255,255,255,.92)}
:root[data-theme="dark"] .tlcal-d.lv4:hover,:root[data-theme="dark"] .tlcal-d.lv5:hover{background:#3a76e8;border-color:#3a76e8;color:#fff}
.tlcal-d.lv0 b{font-weight:500}
.tlcal-d.today{border-color:var(--accent)}
.tlcal-d.sel{box-shadow:0 0 0 2px var(--accent-soft),0 0 0 1px var(--accent)}
.tlcal-d.lv1{background:#e8efff;color:var(--text)}
.tlcal-d.lv2{background:#cfdcff;color:var(--text)}
.tlcal-d.lv3{background:#a9c4ff;color:var(--text)}
.tlcal-d.lv4{background:#4c6ef5;color:#fff;border-color:#4c6ef5}
.tlcal-d.lv4 em{color:rgba(255,255,255,.82)}
.tlcal-foot{margin-top:9px;font-size:11px;color:var(--text-3)}
.tlcal-side{background:var(--panel-2);border:1px solid var(--border);border-radius:12px;padding:12px 14px;min-height:140px;max-height:460px;overflow-y:auto}
.tlcal-side .hm-day{max-width:100%}
.tlcal-side .hm-note{width:100%}
:root[data-theme="dark"] .tlcal-d.lv1{background:#23304a;border-color:#2c3d5c}
:root[data-theme="dark"] .tlcal-d.lv2{background:#2c4a7d;border-color:#38598f}
:root[data-theme="dark"] .tlcal-d.lv3{background:#3a68b8;border-color:#4879ca}
:root[data-theme="dark"] .tlcal-d.lv4{background:#4a8aff;border-color:#4a8aff;color:#fff}
:root[data-theme="dark"] .tlcal-panel,:root[data-theme="dark"] .tlcal-side{background:#2b2c2d}
@media (max-width:1080px){
  .tlp-cal{grid-template-columns:minmax(0,1fr)}
  .tlcal-side{max-height:none}
}
/* 日历头里的按钮：避开旧日历面板 `.tlcal-head > button` 的 24×24 图标约束 */
.tlcal-head .tlcal-today{width:auto;min-width:0;height:26px;padding:0 10px;font-size:11.5px;line-height:1;color:var(--text-2);display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:7px}
.tlcal-head .tlcal-nav{width:26px;height:26px;font-size:16px;color:var(--text-2)}
.tlcal-head .tlcal-title{font-size:14px;font-weight:600;color:var(--text)}

/* ===== 侧栏用户区：头像 + 同步按钮 ===== */
.side-user{display:flex;align-items:center;gap:9px;padding:0 12px 10px}
.side-user .avatar-btn{width:32px;height:32px;flex:none}
.side-user .avatar{width:30px;height:30px;font-size:13px}
.avatar.has-img{background:transparent;padding:0;overflow:hidden;color:transparent}
.avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.side-user .su-name{flex:1;min-width:0;font-size:12.5px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sync-btn{width:28px;height:28px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:8px;color:var(--text-3)}
.sync-btn:hover{background:var(--hover);color:var(--text)}
.sync-btn .ic{width:16px;height:16px}
.sync-btn.syncing{color:var(--accent)}
.sync-btn.syncing .ic{animation:syncspin .8s linear infinite}
@keyframes syncspin{to{transform:rotate(360deg)}}

/* 用户菜单：挂在头像下方 */
.sidebar{position:relative}
.user-menu{top:98px;left:8px;right:auto;width:236px}
.user-menu .um-head{display:flex;align-items:center;gap:9px;padding:8px 8px 10px;margin-bottom:5px;border-bottom:1px solid var(--border);font-weight:400;color:var(--text)}
.um-head .um-avatar{width:34px;height:34px;font-size:14px;flex:none}
.um-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.um-info b{font-size:12.5px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.um-info em{font-style:normal;font-size:11px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.um-ver{font-size:10.5px;color:var(--text-3);flex:none;align-self:flex-start;margin-top:2px}

/* 个人资料弹窗 */
.prof{display:flex;gap:16px;align-items:flex-start;padding:4px 0 8px}
.prof-avatar{position:relative;width:76px;height:76px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:700;flex:none;overflow:hidden}
.prof-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.prof-avatar em{position:absolute;left:0;right:0;bottom:0;font-style:normal;font-size:10px;line-height:1;padding:3px 0 4px;background:rgba(0,0,0,.55);color:#fff;display:flex;align-items:center;justify-content:center;gap:3px}
.prof-avatar em .ic{width:10px;height:10px}
.prof-main{flex:1;min-width:0}
.prof-main label{display:block;font-size:12px;color:var(--text-2);margin:0 0 8px}
.prof-main input{display:block;width:100%;margin-top:5px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel-2);font-size:13px;color:var(--text)}
.prof-main input:focus{border-color:var(--accent);background:var(--panel)}

/* ===== 「最近」页整宽改版 ===== */
/* 统计改成一整条：数字+标签横排，四段用细线分隔，不用四张空卡片 */
.tlp-stats .stat-grid{gap:0;margin-bottom:16px;background:var(--panel-2);border:1px solid var(--border);border-radius:12px;padding:12px 4px}
.tlp-stats .stat-card{background:transparent;border:0;border-radius:0;text-align:left;padding:1px 18px;border-right:1px solid var(--border);display:flex;align-items:baseline;gap:9px;min-width:0}
.tlp-stats .stat-card:last-child{border-right:0}
.tlp-stats .stat-card b{font-size:20px;line-height:1.2;white-space:nowrap}
.tlp-stats .stat-card span{font-size:12px;color:var(--text-3);white-space:nowrap}

/* 日历格子：日号 + 次数在顶行，下面两行笔记标题 */
.tlcal-dh{display:flex;align-items:center;justify-content:space-between;gap:4px;min-height:15px}
.tlcal-d b{font-size:12.5px;font-weight:600;line-height:1.15;margin-bottom:1px}
.tlcal-d em{font-style:normal;font-size:9.5px;color:var(--text-3);line-height:1;padding:2px 3px;border-radius:4px;background:rgba(0,0,0,.045);flex:none;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.tlcal-nt{font-style:normal;display:block;font-size:10.5px;line-height:1.45;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.tlcal-nt.more{opacity:.7}
.tlcal-d.lv1 .tlcal-nt,.tlcal-d.lv2 .tlcal-nt,.tlcal-d.lv3 .tlcal-nt{color:var(--text-2)}
.tlcal-d.lv3 .tlcal-nt{color:var(--text)}
.tlcal-d.lv4 .tlcal-nt{color:rgba(255,255,255,.86)}
.tlcal-d.lv4 em{background:rgba(255,255,255,.2);color:#fff}

/* 右侧明细：内容撑满面板，不要中间那截 max-height 空白 */
.tlcal-side .hm-day-body{max-height:none}
.tlcal-side .hm-day-head{position:sticky;top:0;background:inherit;z-index:1;padding-bottom:6px}
.tlcal-recent{margin-top:2px;border-top:1px dashed var(--border);padding-top:10px;display:flex;flex-wrap:wrap;gap:5px}
.tlcal-recent > span{width:100%;font-size:11px;color:var(--text-3);margin-bottom:2px}
.tlcal-recent button{font-size:11.5px;color:var(--text-2);border:1px solid var(--border);border-radius:6px;padding:3px 7px;display:inline-flex;align-items:center;gap:4px}
.tlcal-recent button:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.tlcal-recent button em{font-style:normal;font-size:10px;color:var(--text-3)}

/* 时间轴条目整宽：标题左、元信息右，摘要一行 */
.tl-card{padding:8px 14px 9px}
.tl-top{display:flex;align-items:baseline;gap:16px;min-width:0}
.tl-top > b{flex:1;min-width:0;display:block;font-size:13px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-meta{margin:0;margin-left:auto;flex:none;display:flex;gap:12px;flex-wrap:nowrap;font-size:11px;color:var(--text-3)}
.tl-meta > span{white-space:nowrap}
/* 跨空间时间轴：群组笔记标出所属空间，个人笔记不标 */
.tl-meta .tl-space{padding:0 6px;border-radius:5px;background:var(--panel-3);color:var(--text-2);font-size:10.5px;line-height:16px}
.tl-card p{margin-top:4px;max-width:110ch}
@media (max-width:900px){
  .tlp-stats .stat-grid{grid-template-columns:repeat(2,1fr);padding:10px 2px}
  .tlp-stats .stat-card{border-right:0;padding:3px 14px}
  .tl-top{flex-wrap:wrap;gap:6px}
  .tl-meta{margin-left:0}
}

/* 右侧明细：竖向弹性布局，「最近有记录」压到底部，撑满高度 */
.tlcal-side{display:flex;flex-direction:column;max-height:none;overflow-y:auto}
.tlcal-side .hm-day-body{flex:0 0 auto}
.tlcal-side .hm-day-head{flex:none}
.tlcal-recent{margin-top:auto}
.tlcal-side .tlcal-recent{margin-top:auto;position:sticky;bottom:0;background:var(--panel-2);padding-bottom:2px}
.tlcal-recent button.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.tlcal-sum{margin-left:8px;font-size:11px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.tlcal-head .tlcal-sum{color:var(--text-3)}
@media (max-width:1080px){.tlcal-sum{display:none}}

/* ===== 「最近」两列：左侧时间轴 + 右侧统计与日历 ===== */
.tlp-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,420px);gap:24px;align-items:start}
.tlp-main{min-width:0}
.tlp-side{position:sticky;top:0;display:flex;flex-direction:column;gap:12px;max-height:calc(100vh - 74px);overflow-y:auto;padding:0 2px 8px;scrollbar-width:thin}
.tlp-side::-webkit-scrollbar{width:6px}
.tlp-side::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:3px}
.tlp-side.hidden{display:none}
.tlp-side .stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:0}
.tlp-side .stat-card{text-align:left;padding:9px 12px}
.tlp-side .stat-card b{font-size:17px}
.tlp-side .stat-card span{font-size:11px}
/* 日历紧凑：格子里只有日号，颜色深浅表示当天改得多不多 */
.tlp-side .tlcal-panel{padding:10px 10px 8px;border-radius:10px}
.tlp-side .tlcal-head{gap:2px;margin-bottom:6px}
.tlp-side .tlcal-title{font-size:13px;min-width:0;flex:1}
.tlp-side .tlcal-nav{width:24px;height:24px;font-size:15px}
.tlp-side .tlcal-today{height:24px;padding:0 9px;font-size:11px}
.tlp-side .tlcal-week{gap:3px;margin-bottom:3px}
.tlp-side .tlcal-week span{font-size:10.5px}
.tlp-side .tlcal-grid{gap:3px;grid-auto-rows:44px}
.tlp-side .tlcal-d{min-height:44px;height:44px;padding:4px 6px;border-radius:6px;gap:0}
.tlp-side .tlcal-d b{font-size:11.5px}
.tlp-side .tlcal-foot{display:flex;align-items:center;gap:8px;margin-top:7px;font-size:10.5px}
.tlp-side .tlcal-foot > span:first-child{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tlp-side .tlcal-legend{margin-left:auto;gap:3px;flex:none}
.tlp-side .tlcal-legend .hm-c{width:8px;height:8px;border-radius:2px}
.tlp-side .tlcal-side{padding:10px 12px;min-height:96px;border-radius:10px}
.tlp-side .hm-day-body{max-height:220px}
@media (max-width:1080px){
  .tlp-grid{grid-template-columns:minmax(0,1fr);gap:16px}
  .tlp-side{position:static;max-height:none;overflow:visible;order:-1}
  .tlp-side .hm-day-body{max-height:none}
  .tlp-side .tlcal-d,.tlp-side .tlcal-grid{grid-auto-rows:46px}
  .tlp-side .tlcal-d{min-height:46px;height:46px}
}

/* 窄屏回归修正：≤900 时侧栏必须退出栅格流，否则 timeline-mode 只有 1 列，
   侧栏会占掉第一行，把编辑区挤到第二行（高度只剩一半） */
@media (max-width:900px){
  .app.timeline-mode .sidebar{position:fixed;left:0;top:0;bottom:0;width:250px;z-index:60;transform:translateX(-100%);transition:transform .2s}
  body.side-open .app.timeline-mode .sidebar{transform:none;box-shadow:var(--shadow)}
}
.tlp-grid.no-side{grid-template-columns:minmax(0,1fr)}

/* ===== 侧栏头部：品牌图标即头像入口，标题显示昵称 ===== */
.side-head{gap:8px}
.brand{font:inherit;border:0;background:transparent;padding:0;cursor:pointer;gap:8px;min-width:0;border-radius:9px}
.brand:hover .brand-mark{box-shadow:0 0 0 3px var(--accent-soft)}
.brand-mark{width:30px;height:30px;border-radius:9px;font-size:15px;font-weight:700;flex:none;overflow:hidden;transition:box-shadow .15s}
.brand-mark.has-img{background:transparent}
.brand-mark img{width:100%;height:100%;object-fit:cover;display:block;border-radius:inherit}
.brand-name{font-size:15px;font-weight:700;letter-spacing:.4px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:132px}
.head-actions{gap:2px;flex:none}
.head-actions .sync-btn{width:26px;height:26px;border-radius:7px}
.head-actions .sync-btn .ic{width:15px;height:15px}
.head-actions .icon-btn{width:26px;height:26px}
.user-menu{top:62px;left:8px;right:auto;width:236px}
@media (max-width:1180px){
  .brand-name{max-width:104px;font-size:14px}
  .brand-mark{width:28px;height:28px}
}

/* 日历格：日号 + 少→多程度条 + 当天写入字数 */
.tlp-side .tlcal-grid{grid-auto-rows:54px}
.tlp-side .tlcal-d{height:54px;min-height:54px;padding:5px 6px 6px;gap:3px;justify-content:flex-start}
.tlcal-bar{display:block;height:3px;border-radius:2px;background:rgba(0,0,0,.075);overflow:hidden;margin-top:auto}
.tlcal-bar > i{display:block;height:100%;border-radius:2px;background:var(--accent)}
.tlcal-d em{font-style:normal;font-size:9px;line-height:1.1;letter-spacing:0;padding:0;background:none;border-radius:0;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tlcal-d.lv1 em,.tlcal-d.lv2 em{color:var(--text-2)}
.tlcal-d.lv3 em{color:var(--text-2)}
.tlcal-d.lv4 .tlcal-bar{background:rgba(255,255,255,.3)}
.tlcal-d.lv4 .tlcal-bar > i{background:#fff}
.tlcal-d.lv4 em{color:rgba(255,255,255,.9);background:none}
@media (max-width:1080px){
  .tlp-side .tlcal-grid{grid-auto-rows:56px}
  .tlp-side .tlcal-d{height:56px;min-height:56px}
}
/* 程度条再调：轨道更淡、填充更实，避免看成一条分隔线 */
.tlcal-bar{height:4px;background:rgba(15,23,42,.075)}
.tlcal-bar > i{min-width:3px;background:linear-gradient(90deg,var(--accent),#7aa2ff)}
:root[data-theme="dark"] .tlcal-bar{background:rgba(255,255,255,.14)}
:root[data-theme="dark"] .tlcal-bar > i{background:linear-gradient(90deg,#4a8aff,#7aa2ff)}
.tlcal-d.lv4 .tlcal-bar{background:rgba(255,255,255,.32)}
.tlcal-d.lv4 .tlcal-bar > i{background:#fff}
/* 少 → 多：五格状态条（和底部图例一一对应） */
.tlcal-meter{display:flex;gap:2px;height:4px;margin-top:auto;flex:none}
.tlcal-meter i{flex:1;border-radius:1px;background:rgba(15,23,42,.1)}
.tlcal-meter i.on{background:var(--accent)}
:root[data-theme="dark"] .tlcal-meter i{background:rgba(255,255,255,.13)}
:root[data-theme="dark"] .tlcal-meter i.on{background:#5b8dff}
.tlcal-d.lv4 .tlcal-meter i{background:rgba(255,255,255,.3)}
.tlcal-d.lv4 .tlcal-meter i.on{background:#fff}

/* ===== 同步状态浮层 ===== */
.sync-pop{min-width:196px;padding:2px 4px 3px}
.sp-title{font-size:12.5px;font-weight:600;color:var(--text);margin:2px 0 11px;letter-spacing:.2px}
.sp-rows{display:flex;flex-direction:column;gap:11px;padding-bottom:3px}
.sp-row{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--text-2)}
.sp-ico{width:17px;height:17px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center}
.sp-ico .ic{width:10px;height:10px}
.sp-ico.ok{background:var(--success);color:#fff}
.sp-ico.err{background:var(--danger);color:#fff}
.sp-ico.spin{background:transparent;border:2px solid var(--border-2);border-top-color:var(--accent);animation:syncspin .8s linear infinite}
.sp-msg{margin:10px 0 2px;font-size:11px;line-height:1.55;color:var(--danger)}
:root[data-theme="dark"] .sp-ico.spin{border-color:#4a4b4d;border-top-color:#5b8dff}

/* 分组箭头：收起指向右、展开指向下（原来只有标签行有旋转规则，且方向是反的） */
.nav-row.tag-row .tail-chev,
.nav-row.trash-row .tail-chev{transform:rotate(0deg)}
.nav-row.tag-row.open .tail-chev,
.nav-row.trash-row.open .tail-chev{transform:rotate(90deg)}

/* ===== 日历五级色阶（按当天篇数：1-4 / 5-9 / 10-19 / 20-49 / 50+） ===== */
.tlcal-d.lv1{background:#e9efff;color:var(--text-2)}
.tlcal-d.lv2{background:#cfdcff;color:var(--text-2)}
.tlcal-d.lv3{background:#abc7ff;color:var(--text)}
.tlcal-d.lv4{background:#7d9bf8;color:#fff;border-color:#7d9bf8}
.tlcal-d.lv5{background:#4c6ef5;color:#fff;border-color:#4c6ef5}
.tlcal-d.lv4 em{color:rgba(255,255,255,.88)}
.tlcal-d.lv5 em{color:rgba(255,255,255,.9)}
.tlcal-d.lv4 .tlcal-meter i,.tlcal-d.lv5 .tlcal-meter i{background:rgba(255,255,255,.32)}
.tlcal-d.lv4 .tlcal-meter i.on,.tlcal-d.lv5 .tlcal-meter i.on{background:#fff}
:root[data-theme="dark"] .tlcal-d.lv1{background:#22304a;border-color:#2b3b57;color:var(--text-2)}
:root[data-theme="dark"] .tlcal-d.lv2{background:#2c4a7d;border-color:#35558c;color:var(--text-2)}
:root[data-theme="dark"] .tlcal-d.lv3{background:#34599a;border-color:#3d66ad;color:var(--text)}
:root[data-theme="dark"] .tlcal-d.lv4{background:#3f76d6;border-color:#4a82e2;color:#fff}
:root[data-theme="dark"] .tlcal-d.lv5{background:#4a8aff;border-color:#4a8aff;color:#fff}

/* 图例：五个色块下带阈值数字 */
.tlcal-legend{gap:6px;align-items:flex-start;flex:none}
.tlcal-legend > em{font-style:normal;font-size:10px;color:var(--text-3);line-height:10px;padding-top:1px}
.tlcal-legend .lg{display:flex;flex-direction:column;align-items:center;gap:2px}
.tlcal-legend .lg i{width:11px;height:11px;border-radius:2px;display:block;flex:none}
.tlcal-legend .lg b{font-size:8px;font-weight:500;line-height:1;color:var(--text-3);letter-spacing:-.2px}
.tlcal-legend .hm-c.lv1{background:#e9efff}
.tlcal-legend .hm-c.lv2{background:#cfdcff}
.tlcal-legend .hm-c.lv3{background:#abc7ff}
.tlcal-legend .hm-c.lv4{background:#7d9bf8}
.tlcal-legend .hm-c.lv5{background:#4c6ef5}
:root[data-theme="dark"] .tlcal-legend .hm-c.lv1{background:#22304a}
:root[data-theme="dark"] .tlcal-legend .hm-c.lv2{background:#2c4a7d}
:root[data-theme="dark"] .tlcal-legend .hm-c.lv3{background:#34599a}
:root[data-theme="dark"] .tlcal-legend .hm-c.lv4{background:#3f76d6}
:root[data-theme="dark"] .tlcal-legend .hm-c.lv5{background:#4a8aff}
/* 图例数字别被面板底边裁掉 */
.tlp-side .tlcal-foot{align-items:flex-end;min-height:26px;gap:10px;padding-bottom:1px}
.tlp-side .tlcal-legend{gap:4px;align-items:flex-end}
.tlcal-legend .lg{gap:1px}
.tlcal-legend .lg b{font-size:8px;line-height:9px}
.tlp-side .tlcal-panel{padding-bottom:11px}
/* 图例对齐参考图：五个方块一行，「少/多」与方块行垂直居中，数字在方块下方居中 */
.tlp-side .tlcal-legend{align-items:flex-start;gap:5px}
.tlcal-legend > em{line-height:12px;padding-top:0;font-size:10px;align-self:flex-start;margin-top:0}
.tlcal-legend .lg{gap:2px;min-width:12px}
.tlcal-legend .lg i{width:12px;height:12px;border-radius:3px}
.tlcal-legend .lg b{font-size:8.5px;line-height:9px;text-align:center;width:100%}
.tlp-side .tlcal-foot{min-height:28px;align-items:flex-end;padding-top:2px}
