*{box-sizing:border-box;margin:0;padding:0}
.app,.topbar,.workspace,.statusbar,.modal-mask,.shelf-inner,.landing,.lib-page,.modal{-webkit-user-select:none;user-select:none}
.prose{-webkit-user-select:text;user-select:text}
/* ===== 原生滚动条 ===== */
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(--text-3)}
/* ===== 全局光标 ===== */
body{cursor:default}
button,input,select,textarea{cursor:default}
button[onclick],input[type=range],input[type=radio]{cursor:pointer}
/* ===== 四套主题 ===== */
:root,[data-theme="ink"]{
  --canvas:#e6ddc7;--paper:#f4efe2;--panel:#fffdf6;
  --ink:#2b2620;--text-2:#7a7368;--text-3:#a89e8c;
  --ink-cyan:#1f5f5b;--cinnabar:#b8413a;--ochre:#a86a2d;
  --border:#e0d9c8;--border-2:#d8cfb8;
  --hover:rgba(31,95,91,.06);--active-bg:rgba(31,95,91,.10);
  --shadow:none;
  --brand:#b8413a;
  --prose-font:'STKaiti','KaiTi','楷体','Songti SC',serif;
  --prose-size:16.5px;--prose-lh:2.0;--prose-gap:16px;
}
[data-theme="night"]{
  --canvas:#0f0e0c;--paper:#1c1a17;--panel:#252320;
  --ink:#e8e2d4;--text-2:#9a9183;--text-3:#6f6759;
  --ink-cyan:#5fa39d;--cinnabar:#d5635a;--ochre:#c89556;
  --border:#3a362f;--border-2:#4a443a;
  --hover:rgba(95,163,157,.08);--active-bg:rgba(95,163,157,.14);
  --shadow:none;--brand:#d5635a;
}
[data-theme="plain"]{
  --canvas:#e8e7e1;--paper:#ffffff;--panel:#f8f7f2;
  --ink:#1f2937;--text-2:#6b7280;--text-3:#9ca3af;
  --ink-cyan:#16a34a;--cinnabar:#ef4444;--ochre:#f59e0b;
  --border:#e5e7eb;--border-2:#d1d5db;
  --hover:rgba(22,163,74,.06);--active-bg:rgba(22,163,74,.10);
  --shadow:none;--brand:#16a34a;
}
[data-theme="slate"]{
  --canvas:#d8dee6;--paper:#f5f7f9;--panel:#ffffff;
  --ink:#1e2a32;--text-2:#5a6b78;--text-3:#94a3b0;
  --ink-cyan:#2f6b6b;--cinnabar:#b1453b;--ochre:#b88a3e;
  --border:#dde3ea;--border-2:#c8d1da;
  --hover:rgba(47,107,107,.06);--active-bg:rgba(47,107,107,.10);
  --shadow:none;--brand:#2f6b6b;
}
[data-theme="cloud"]{
  --canvas:#eef1f6;--paper:#ffffff;--panel:#ffffff;
  --ink:#1e2330;--text-2:#6b7280;--text-3:#9aa3af;
  --ink-cyan:#2563eb;--cinnabar:#ef4444;--ochre:#f59e0b;
  --border:#e5e8ee;--border-2:#d4d9e3;
  --hover:rgba(37,99,235,.06);--active-bg:rgba(37,99,235,.10);
  --shadow:none;--brand:#2563eb;
}
[data-theme="space"]{
  --canvas:#0d1117;--paper:#161b22;--panel:#1c2128;
  --ink:#e6edf3;--text-2:#8b949e;--text-3:#6e7681;
  --ink-cyan:#58a6ff;--cinnabar:#ff7b72;--ochre:#d29922;
  --border:#2d333b;--border-2:#3d444d;
  --hover:rgba(88,166,255,.08);--active-bg:rgba(88,166,255,.14);
  --shadow:none;--brand:#58a6ff;
}
[data-theme="moran"]{
  --canvas:#e0ddd6;--paper:#f3f1ec;--panel:#fbfaf7;
  --ink:#3d3a35;--text-2:#8a857c;--text-3:#b0aaa0;
  --ink-cyan:#7a8ca6;--cinnabar:#c08a82;--ochre:#bda06a;
  --border:#ddd9d0;--border-2:#cec9bd;
  --hover:rgba(122,140,166,.07);--active-bg:rgba(122,140,166,.12);
  --shadow:none;--brand:#7a8ca6;
}
html{height:100%}
body{font-family:system-ui,-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;color:var(--ink);background:var(--canvas);font-size:13px;height:100vh;overflow:hidden;-webkit-font-smoothing:antialiased;transition:background .3s,color .3s}
.app{display:flex;flex-direction:column;height:100vh}

.topbar{height:42px;display:flex;align-items:center;background:var(--panel);padding:0 12px;gap:8px;flex-shrink:0}
.logo{width:28px;height:28px;background:var(--brand);color:#fff;border-radius:6px;display:flex;align-items:center;justify-content:center;font-family:'STKaiti','KaiTi','楷体',serif;font-size:16px;font-weight:700;flex-shrink:0;cursor:pointer}
.brand{font-size:13px;font-weight:600;letter-spacing:.5px}
.vault{display:flex;align-items:center;gap:6px;color:var(--text-2);font-size:12px;padding-left:12px;border-left:1px solid var(--border);cursor:pointer;position:relative}
.vault:hover{color:var(--ink)}
.vault b{color:var(--ink);font-weight:600}
.vault-caret{font-size:9px;color:var(--text-3)}
.vault-menu{position:absolute;top:calc(100% + 6px);left:0;background:var(--panel);border:1px solid var(--border);border-radius:7px;padding:4px;min-width:200px;z-index:50;display:none}
.vault-menu.show{display:block}
.vm-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:6px;cursor:pointer}
.vm-item:hover{background:var(--hover)}
.vm-item.active{background:var(--active-bg)}
.vm-item b{font-size:13px;color:var(--ink)}
.vm-item .vm-sub{margin-left:auto;font-size:10px;color:var(--text-3);white-space:nowrap}
/* 书架页 / 建书页（全屏 view） */
.workspace.full{padding:36px 28px;overflow-y:auto;display:block;background:var(--canvas)}
.shelf-inner{max-width:1040px;margin:0 auto}
.shelf-head{display:flex;align-items:center;gap:14px;margin-bottom:6px}
.shelf-title{font-size:22px;font-weight:600;color:var(--ink)}
.shelf-sub{margin-left:auto;color:var(--text-3);font-size:11px;font-family:ui-monospace,monospace;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shelf-stats{display:flex;gap:8px;margin:18px 0 22px;flex-wrap:wrap}
.shelf-stat{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px 14px;font-size:12px;color:var(--text-2)}
.shelf-stat b{color:var(--ink-cyan);font-weight:600;font-size:14px;margin-right:3px}
.book-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:14px}
.book-card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:14px;cursor:pointer;transition:border-color .1s}
.book-card:hover{border-color:var(--ink-cyan)}
.book-card.demo{opacity:.6}
.bc-top{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.bc-name{font-weight:600;font-size:15px;color:var(--ink);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bc-kind{font-size:10px;padding:2px 8px;border-radius:8px;background:var(--active-bg);color:var(--ink-cyan);white-space:nowrap}
.bc-kind.short{background:rgba(184,138,62,.14);color:var(--ochre)}
.bc-meta{color:var(--text-2);font-size:12px;line-height:1.6}
.bc-foot{margin-top:4px;display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--text-3)}
.shelf-new-card{background:var(--paper);border:1px dashed var(--border-2);border-radius:10px;padding:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;cursor:pointer;color:var(--text-3);min-height:118px}
.shelf-new-card:hover{border-color:var(--ink-cyan);color:var(--ink-cyan)}
.shelf-new-card .plus{font-size:26px;line-height:1}
/* 启动页 */
.landing{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:40px;text-align:center;background:var(--canvas)}
.landing-logo{width:56px;height:56px;background:var(--brand);color:#fff;border-radius:14px;display:flex;align-items:center;justify-content:center;font-family:'STKaiti','KaiTi','楷体',serif;font-size:30px;font-weight:700;margin-bottom:16px}
.landing-title{font-size:22px;font-weight:700;color:var(--ink);margin-bottom:4px;letter-spacing:.5px}
.landing-sub{font-size:12px;color:var(--text-3);margin-bottom:36px;letter-spacing:.3px}
.landing-recent{width:100%;max-width:480px;margin-bottom:24px}
.landing-recent-title{font-size:11px;color:var(--text-3);letter-spacing:.5px;margin-bottom:10px;text-align:left}
.landing-card{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--panel);border:1px solid var(--border);border-radius:8px;margin-bottom:8px;cursor:pointer;transition:border-color .1s;text-align:left}
.landing-card:hover{border-color:var(--ink-cyan)}
.landing-card .lc-icon{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
.landing-card .lc-icon.long{background:rgba(31,95,91,.10);color:var(--ink-cyan)}
.landing-card .lc-icon.short{background:rgba(184,138,62,.10);color:var(--ochre)}
.landing-card .lc-info{flex:1;min-width:0}
.landing-card .lc-name{font-weight:600;font-size:14px;color:var(--ink)}
.landing-card .lc-meta{font-size:11px;color:var(--text-3);margin-top:3px}
.landing-card .lc-badge{margin-left:auto;font-size:10px;padding:3px 10px;border-radius:10px;background:var(--active-bg);color:var(--ink-cyan);white-space:nowrap;flex-shrink:0}
.landing-actions{display:flex;gap:12px}
.landing-actions .btn{padding:10px 24px;font-size:13px;border-radius:10px}
/* 书库管理页 */
.lib-page{max-width:960px;margin:0 auto;padding:32px 28px;overflow-y:auto;height:100%}
.lib-head{display:flex;align-items:center;gap:14px;margin-bottom:28px}
.lib-head .lib-title{font-size:22px;font-weight:600}
.lib-head .lib-sub{margin-left:auto;font-size:11px;color:var(--text-3)}
.lib-card{display:flex;align-items:center;gap:12px;padding:14px 16px;background:var(--panel);border:1px solid var(--border);border-radius:8px;margin-bottom:8px;transition:border-color .1s}
.lib-card:hover{border-color:var(--ink-cyan)}
.lib-card .lib-icon{width:44px;height:44px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.lib-card .lib-icon.long{background:rgba(31,95,91,.10);color:var(--ink-cyan)}
.lib-card .lib-icon.short{background:rgba(184,138,62,.10);color:var(--ochre)}
.lib-card .lib-info{flex:1;min-width:0}
.lib-card .lib-name{font-weight:600;font-size:14px;color:var(--ink);display:flex;align-items:center;gap:8px}
.lib-card .lib-path{font-size:11px;color:var(--text-3);font-family:ui-monospace,monospace;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib-card .lib-stats{display:flex;gap:12px;margin-top:6px}
.lib-card .lib-stat{font-size:11px;color:var(--text-2)}
.lib-card .lib-stat b{color:var(--ink);font-weight:600}
.lib-card .lib-actions{display:flex;gap:6px;flex-shrink:0}
.lib-card .lib-actions .btn{padding:5px 12px;font-size:11px;border-radius:6px}
.lib-empty{text-align:center;padding:60px 20px;color:var(--text-3)}
.lib-empty .le-icon{font-size:48px;margin-bottom:16px;opacity:.5}
.lib-empty .le-text{font-size:14px;margin-bottom:8px}
.lib-empty .le-sub{font-size:12px;color:var(--text-3)}
/* 新建书库弹层 */
.vault-form{display:flex;flex-direction:column;gap:14px}
.vf-row{display:flex;align-items:center;gap:12px}
.vf-row label{width:64px;color:var(--text-2);font-size:13px;flex-shrink:0;text-align:right}
.vf-row input,.vf-row select{flex:1;background:var(--paper);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13px;color:var(--ink);outline:none;font-family:inherit}
.vf-row input:focus,.vf-row select:focus{border-color:var(--ink-cyan)}
.vf-row select{max-width:160px}
.vf-path{font-size:11px;color:var(--text-3);font-family:ui-monospace,monospace;margin-top:2px}
.seg{display:inline-flex;gap:6px;flex:1}
.seg button{padding:7px 18px;border:1px solid var(--border);border-radius:6px;background:var(--panel);cursor:pointer;font-size:13px;color:var(--ink)}
.seg button.active{border-color:var(--ink-cyan);background:var(--active-bg);color:var(--ink-cyan);font-weight:600}
.dir-preview{flex:1;margin:0;padding:10px 12px;background:var(--paper);border:1px solid var(--border);border-radius:6px;font-family:ui-monospace,monospace;font-size:11px;color:var(--text-2);line-height:1.8;white-space:pre-wrap}
.nb-leads{display:flex;flex-wrap:wrap;gap:14px;flex:1}
.nb-lead{display:inline-flex;align-items:center;gap:5px;font-size:13px;cursor:pointer;color:var(--ink)}
.nb-lead input{accent-color:var(--ink-cyan)}
.nb-host{display:flex;gap:16px;font-size:13px;flex:1;align-items:center}
.nb-host .host-on{color:var(--ink-cyan);font-weight:600}
.nb-host .host-off{color:var(--text-3)}
.nb-step{margin-bottom:14px}
.nb-step.skipped{opacity:.55}
.step-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.step-label{font-weight:600;font-size:13px;color:var(--ink)}
.step-ops{display:flex;gap:6px;margin-left:auto}
.result-edit{width:100%;box-sizing:border-box;padding:10px;border:1px solid var(--border);border-radius:6px;font-size:13px;line-height:1.7;font-family:inherit;resize:vertical;background:var(--paper);color:var(--ink)}
.step-foot{display:flex;justify-content:space-between;align-items:center;margin-top:8px}
.result-path{font-size:11px;color:var(--text-3);font-family:ui-monospace,monospace}
.mode-tabs{display:flex;gap:4px;margin-left:18px;height:30px;align-items:center;background:var(--hover);border-radius:8px;padding:3px}
.mode-tab{padding:4px 14px;display:flex;align-items:center;color:var(--text-2);cursor:pointer;border-radius:6px;font-size:13px;user-select:none}
.mode-tab:hover{color:var(--ink)}
.mode-tab.active{color:var(--ink);background:var(--panel);font-weight:600}
.topbar-actions{display:flex;align-items:center;gap:6px;margin-left:auto;padding-left:12px}
.icon-btn{height:28px;min-width:28px;padding:0 8px;display:flex;align-items:center;justify-content:center;gap:5px;border-radius:7px;color:var(--text-2);cursor:pointer;font-size:14px;border:1px solid transparent}
.icon-btn:hover{background:var(--hover);color:var(--ink)}
.icon-btn .th-name{font-size:11px}
.cmd-hint{font-size:11px;color:var(--text-3);border:1px solid var(--border);border-radius:5px;padding:3px 7px;cursor:pointer}
.cmd-hint:hover{color:var(--ink-cyan);border-color:var(--ink-cyan)}

.workspace{flex:1;display:flex;gap:8px;padding:8px;background:var(--canvas);min-height:0}
.panel{border-radius:6px;background:var(--panel);overflow:hidden}
.workspace .sider-left,.workspace .sider-right,.workspace .wb-list{transition:width .25s ease,opacity .2s ease,margin .25s ease}
.workspace.fold-l .sider-left{width:0!important;opacity:0;margin-right:-8px;pointer-events:none}
.workspace.focus .sider-left,.workspace.focus .wb-list{width:0!important;opacity:0;margin-right:-8px;pointer-events:none}
.workspace.focus .sider-right{width:0!important;opacity:0;margin-left:-8px;pointer-events:none}
.workspace.focus .editor-inner{max-width:640px}

.sider-left{width:222px;display:flex;flex-direction:column;flex-shrink:0}
.sider-head{height:36px;display:flex;align-items:center;padding:0 14px;color:var(--text-3);font-size:11px;letter-spacing:1px;text-transform:uppercase;border-bottom:1px solid var(--border)}
.tree{padding:8px 10px 14px;overflow-y:auto;flex:1}
.nav-group{color:var(--text-3);font-size:10px;letter-spacing:1px;padding:10px 8px 4px;text-transform:uppercase}
.nav-group:first-child{padding-top:4px}
.folder{display:flex;align-items:center;gap:6px;padding:5px 6px;color:var(--ink);font-weight:500;cursor:pointer;border-radius:5px;font-size:13px;user-select:none}
.folder:hover{background:var(--hover)}
.folder .caret{width:10px;color:var(--text-3);font-size:9px}
.folder .tag{color:var(--text-3);font-weight:400;font-size:10px;margin-left:auto}
.file{display:flex;align-items:center;gap:7px;padding:6px 8px;color:var(--text-2);cursor:pointer;border-radius:5px;font-size:13px;position:relative;user-select:none}
.file.indent{padding-left:26px}
.file:hover{background:var(--hover);color:var(--ink)}
.file.active{color:var(--ink-cyan);background:var(--active-bg);font-weight:500}
.dot{width:7px;height:7px;border-radius:50%;background:var(--border-2);flex-shrink:0}
.dot.red{background:var(--cinnabar)} .dot.yellow{background:var(--ochre)} .dot.green{background:var(--ink-cyan)} .dot.gray{background:var(--text-3)} .dot.cyan{background:var(--ink-cyan)}
.badge{margin-left:auto;font-size:10px;color:var(--text-3);padding:0 2px}
.badge.num{background:var(--active-bg);color:var(--ink-cyan);padding:1px 7px;border-radius:8px}

.content{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--paper)}
@keyframes clwFade{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
.content-scroll{flex:1;overflow-y:auto;padding:24px 0;animation:clwFade .2s ease}
.editor-inner{max-width:720px;margin:0 auto;padding:0 48px}
.fm-bar{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.fm{font-size:11px;padding:3px 9px;border-radius:10px;background:var(--panel);border:1px solid var(--border);color:var(--text-2)}
.fm b{color:var(--ink);font-weight:600}
.fm.cyan b{color:var(--ink-cyan)} .fm.ochre b{color:var(--ochre)} .fm.red b{color:var(--cinnabar)}
.chapter-title{font-family:'STKaiti','KaiTi','楷体','Songti SC',serif;font-size:26px;font-weight:600;margin-bottom:6px;letter-spacing:1px}
.chapter-meta-line{color:var(--text-3);font-size:12px;margin-bottom:26px;padding-bottom:14px;border-bottom:1px dashed var(--border-2)}
.edit-toolbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:12px;background:var(--paper);padding:10px 0 12px;margin-bottom:4px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.edit-toolbar .et-file{font-weight:600;font-size:13px;color:var(--ink);white-space:nowrap}
.edit-toolbar .et-dirty{font-size:11px;color:var(--ochre);white-space:nowrap}
.edit-toolbar .et-dirty.saved{color:var(--ink-cyan)}
.edit-toolbar .et-wc{font-size:12px;color:var(--text-2);display:flex;align-items:center;gap:7px;white-space:nowrap}
.edit-toolbar .et-wc b{color:var(--ink);font-weight:600}
.edit-toolbar .et-bar{width:50px;height:4px;background:var(--border);border-radius:2px;overflow:hidden}
.edit-toolbar .et-bar>div{height:100%;background:var(--ink-cyan);transition:width .3s,background .3s}
.edit-toolbar .et-spacer{flex:1}
.edit-toolbar select{background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:3px 6px;font-size:12px;color:var(--ink);outline:none;cursor:pointer}
.edit-toolbar select:hover{border-color:var(--ink-cyan)}
.edit-toolbar .btn{padding:4px 10px}
.prose{font-family:var(--prose-font);font-size:var(--prose-size);line-height:var(--prose-lh);letter-spacing:.3px;outline:none;border-radius:8px;padding:12px 16px;margin:6px -16px 0;transition:background .15s;caret-color:var(--ink-cyan);min-height:140px}
.prose:focus{background:var(--panel);box-shadow:inset 3px 0 0 var(--ink-cyan),0 0 0 1px var(--border)}
.prose:empty::before{content:'在此续写…';color:var(--text-3)}
.prose p{margin-bottom:var(--prose-gap);text-indent:2em}
.prose::selection,.prose *::selection{background:rgba(31,95,91,.22)}
[data-theme="night"] .prose::selection,[data-theme="night"] .prose *::selection{background:rgba(95,163,157,.28)}
[data-theme="plain"] .prose::selection,[data-theme="plain"] .prose *::selection{background:rgba(22,163,74,.22)}
[data-theme="slate"] .prose::selection,[data-theme="slate"] .prose *::selection{background:rgba(47,107,107,.22)}
[data-theme="cloud"] .prose::selection,[data-theme="cloud"] .prose *::selection{background:rgba(37,99,235,.20)}
[data-theme="space"] .prose::selection,[data-theme="space"] .prose *::selection{background:rgba(88,166,255,.28)}
[data-theme="moran"] .prose::selection,[data-theme="moran"] .prose *::selection{background:rgba(122,140,166,.24)}
.prose p:first-child{text-indent:0}
.prose .quote{text-indent:0;text-align:center;color:var(--cinnabar);font-size:22px;margin:8px 0;letter-spacing:2px}

/* 设定/大纲 在编辑器内的可编辑表单 */
.sfield{display:flex;align-items:flex-start;gap:12px;padding:10px 0;border-bottom:1px dashed var(--border)}
.sfield label{width:64px;color:var(--text-2);font-size:12px;flex-shrink:0;padding-top:7px}
.sfield input,.sfield textarea{flex:1;background:transparent;border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:13px;color:var(--ink);font-family:inherit;outline:none;resize:vertical}
.sfield input:focus,.sfield textarea:focus{border-color:var(--ink-cyan);background:var(--panel)}
.sfield textarea{min-height:60px;line-height:1.7}
.ol-act{margin-bottom:22px}
.ol-act h3{font-family:'STKaiti','KaiTi','楷体',serif;font-size:17px;margin-bottom:2px}
.ol-act .ol-sub{color:var(--text-3);font-size:11px;margin-bottom:8px}
.ol-act .ol-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:text;font-size:13.5px;color:var(--ink)}
.ol-act .ol-item:hover{background:var(--hover)}
.ol-act .ol-item .n{color:var(--ink-cyan);font-size:11px;width:18px}

/* 总览/通用面板 */
.panel-pad{padding:24px 32px;max-width:940px;margin:0 auto;width:100%}
.panel-title{font-size:18px;font-weight:600;margin-bottom:4px}
.panel-sub{color:var(--text-3);font-size:12px;margin-bottom:20px}
.card-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.stat-card{background:var(--panel);border:1px solid var(--border);border-radius:9px;padding:14px}
.stat-card .n{font-size:22px;font-weight:700;color:var(--ink-cyan)}
.stat-card .l{font-size:11px;color:var(--text-2);margin-top:4px}
.bar-chart{display:flex;align-items:flex-end;gap:10px;height:160px;padding:16px;background:var(--panel);border:1px solid var(--border);border-radius:9px}
.bar-chart .bar{flex:1;background:var(--ink-cyan);border-radius:4px 4px 0 0;position:relative;opacity:.85;min-height:4px}
.bar-chart .bar.hot{background:var(--cinnabar)} .bar-chart .bar.warn{background:var(--ochre)}
.bar-chart .bar .v{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);font-size:10px;color:var(--text-2);margin-bottom:3px;white-space:nowrap}
.ring{width:90px;height:90px;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0}
.ring::after{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:66px;height:66px;border-radius:50%;background:var(--paper);z-index:0}
.ring.on-panel::after{background:var(--panel)}
.ring .ring-txt{position:relative;z-index:1;font-size:15px;font-weight:700;color:var(--ink)}
.list-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:9px;background:var(--panel);margin-bottom:8px}
.list-row .t{font-weight:500} .list-row .m{color:var(--text-2);font-size:12px;margin-top:2px}
.tag{font-size:11px;padding:2px 9px;border-radius:10px;background:var(--active-bg);color:var(--ink-cyan);white-space:nowrap}
.tag.red{background:rgba(184,65,58,.13);color:var(--cinnabar)} .tag.yellow{background:rgba(168,106,45,.16);color:var(--ochre)} .tag.gray{background:var(--hover);color:var(--text-2)} .tag.green{background:rgba(31,95,91,.13);color:var(--ink-cyan)}
.list-row .tag{margin-left:auto}
[data-theme="plain"] .tag.red{background:rgba(239,68,68,.12)} [data-theme="plain"] .tag.yellow{background:rgba(245,158,11,.14)} [data-theme="plain"] .tag.green{background:rgba(22,163,74,.12)}
[data-theme="slate"] .tag.red{background:rgba(177,69,59,.12)} [data-theme="slate"] .tag.yellow{background:rgba(184,138,62,.14)} [data-theme="slate"] .tag.green{background:rgba(47,107,107,.12)}
[data-theme="cloud"] .tag.red{background:rgba(239,68,68,.10)} [data-theme="cloud"] .tag.yellow{background:rgba(245,158,11,.14)} [data-theme="cloud"] .tag.green{background:rgba(37,99,235,.10)}
[data-theme="space"] .tag.red{background:rgba(255,123,114,.14)} [data-theme="space"] .tag.yellow{background:rgba(210,153,34,.16)} [data-theme="space"] .tag.green{background:rgba(88,166,255,.14)}
[data-theme="moran"] .tag.red{background:rgba(192,138,130,.16)} [data-theme="moran"] .tag.yellow{background:rgba(189,160,106,.18)} [data-theme="moran"] .tag.green{background:rgba(122,140,166,.16)}

.tl{position:relative;padding-left:22px;margin-bottom:16px}
.tl::before{content:'';position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--border)}
.tl-item{position:relative;padding-bottom:20px}
.tl-item::before{content:'';position:absolute;left:-22px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--ink-cyan);border:2px solid var(--paper);z-index:1}
.tl-item.red::before{background:var(--cinnabar)} .tl-item.yellow::before{background:var(--ochre)} .tl-item.gray::before{background:var(--border-2)}
.tl-t{font-size:11px;color:var(--text-3);text-transform:uppercase;letter-spacing:1px}
.tl-h{font-weight:500;margin:2px 0}
.tl-q{font-family:'STKaiti','KaiTi','楷体',serif;font-size:13px;color:var(--text-2);background:var(--panel);border:1px solid var(--border);border-radius:7px;padding:8px 10px;margin-top:5px;line-height:1.7}

.btn{padding:6px 14px;border-radius:7px;font-size:12px;cursor:pointer;border:1px solid var(--border);background:var(--panel);color:var(--ink);user-select:none;display:inline-block}
.btn:hover{border-color:var(--ink-cyan);color:var(--ink-cyan)}
.btn.primary{background:var(--ink-cyan);color:#fff;border-color:var(--ink-cyan)}
.btn.primary:hover{opacity:.88;color:#fff}
.btn.danger{color:var(--cinnabar);border-color:var(--cinnabar)}
.btn-row{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.btn.disabled{opacity:.4;pointer-events:none;cursor:default}
/* 短篇篇详情 */
.emo-svg{width:100%;height:auto;max-height:170px;display:block}
.pd-pager{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.pd-no{font-size:13px;color:var(--text-2);font-weight:500}
.pd-reversal{display:flex;align-items:flex-start;gap:10px;background:var(--active-bg);border:1px solid var(--border);border-radius:9px;padding:12px 14px;margin-bottom:16px;font-size:14px;color:var(--ink);line-height:1.7}
.reversal-label{display:inline-block;padding:2px 9px;background:var(--cinnabar);color:#fff;border-radius:5px;font-size:11px;font-weight:600;letter-spacing:.5px;white-space:nowrap;flex-shrink:0;margin-top:2px}
.pd-core{display:flex;gap:8px;align-items:flex-start;padding:10px 12px;background:var(--hover);border-radius:6px;font-size:13px;color:var(--ink);line-height:1.6;margin-bottom:10px}
.pd-setups,.pd-payoffs{margin:0;padding:0;list-style:none;display:grid;gap:7px}
.pd-setups li{padding:8px 10px;background:var(--paper);border-radius:6px;font-size:13px;color:var(--ink);line-height:1.5}
.setup-pos{display:inline-block;margin-right:6px;padding:1px 7px;background:var(--active-bg);color:var(--ochre);border-radius:3px;font-size:11px;font-weight:600}
.pd-payoffs li{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 10px;background:var(--paper);border-radius:6px;font-size:13px}
.pd-payoffs li.unresolved{background:rgba(184,65,58,.07);border:1px solid rgba(184,65,58,.3)}
.payoff-name{color:var(--ink)}
.payoff-at{color:var(--text-2);margin-left:auto}

.sider-right{width:296px;display:flex;flex-direction:column;flex-shrink:0}
.sider-right-inner{padding:14px;overflow-y:auto;flex:1}
.card{background:var(--paper);border:1px solid var(--border);border-radius:9px;padding:12px 14px;margin-bottom:12px}
[data-theme="plain"] .card,[data-theme="slate"] .card,.content .card{background:var(--panel)}
.card-title{font-size:11px;color:var(--text-3);letter-spacing:1px;text-transform:uppercase;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between}
.kv{display:flex;justify-content:space-between;align-items:center;padding:5px 0;font-size:12px;gap:8px}
.kv .k{color:var(--text-2)} .kv .v{color:var(--ink);font-weight:500;text-align:right} .kv .v.cyan{color:var(--ink-cyan)} .kv .v.red{color:var(--cinnabar)} .kv .v.ochre{color:var(--ochre)}
.kv.click{cursor:pointer;border-radius:5px;padding:5px 6px;margin:0 -6px}
.kv.click:hover{background:var(--hover)}
.progress{height:5px;background:var(--border);border-radius:3px;overflow:hidden;margin:8px 0 4px}
.progress>div{height:100%;background:var(--ink-cyan);transition:width .3s}
.ledger-item{display:flex;align-items:flex-start;gap:8px;padding:7px 0;font-size:12px;border-bottom:1px dashed var(--border)}
.ledger-item:last-child{border-bottom:none}
.ledger-item.click{cursor:pointer}
.ledger-item.click:hover{color:var(--ink-cyan)}
.ledger-item .desc{color:var(--text-2);font-size:11px;margin-top:2px}
.ledger-item b{color:var(--ink);font-weight:500}

/* workbench */
.wb-list{width:252px;display:flex;flex-direction:column;flex-shrink:0}
.wb-head{padding:10px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.wb-new{font-size:11px;color:var(--ink-cyan);cursor:pointer;border:1px solid var(--border);border-radius:6px;padding:3px 9px;user-select:none}
.wb-new:hover{border-color:var(--ink-cyan)}
.wb-tasks{flex:1;overflow-y:auto;padding:8px}
.wb-task{padding:10px 12px;border-radius:7px;cursor:pointer;margin-bottom:3px;user-select:none}
.wb-task:hover{background:var(--hover)}
.wb-task.active{background:var(--active-bg)}
.wb-task .tt{font-weight:500;font-size:13px;display:flex;align-items:center;gap:7px}
.wb-task .ts{font-size:11px;color:var(--text-3);margin-top:3px;padding-left:14px}
.wb-chat-body{flex:1;overflow-y:auto;padding:18px 26px}
.msg{margin-bottom:16px;max-width:80%}
.msg.user{margin-left:auto}
.msg .msg-head{font-size:11px;font-weight:600;margin-bottom:4px;display:flex;gap:8px;align-items:center}
.msg.agent .msg-head{color:var(--ink-cyan)} .msg.user .msg-head{color:var(--ochre);justify-content:flex-end}
.msg-bubble{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px 14px;font-size:13px;line-height:1.75}
.msg-card{margin-top:8px;border:1px solid var(--border);border-radius:9px;background:var(--paper);padding:10px 12px;font-size:12px}
.msg-card .mh{font-size:11px;color:var(--text-3);margin-bottom:5px}
.msg-card pre{font-family:'STKaiti','KaiTi','楷体',serif;font-size:13px;color:var(--ink);white-space:pre-wrap;line-height:1.8}
.wb-pending{margin-top:10px;display:flex;gap:8px}
.wb-input{border-top:1px solid var(--border);padding:12px 16px;display:flex;gap:8px;align-items:center}
.wb-input input{flex:1;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13px;color:var(--ink);outline:none}
.wb-input input:focus{border-color:var(--ink-cyan)}
/* 工作台八阶段控制台 */
.state-card{padding:10px 14px;background:var(--active-bg);border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--ink-cyan);line-height:1.6;margin-bottom:12px}
.state-tag{font-weight:700;margin-right:6px}
.cc-banner{padding:8px 12px;background:var(--hover);color:var(--ink-cyan);border-radius:7px;font-size:12px;margin-bottom:14px;line-height:1.6}
.stages{display:flex;gap:6px;margin-bottom:16px;flex-wrap:wrap}
.stage{padding:5px 13px;border:1px solid var(--border);border-radius:14px;font-size:12px;color:var(--text-3);background:var(--panel);cursor:pointer;user-select:none}
.stage:hover{border-color:var(--ink-cyan);color:var(--ink-cyan)}
.stage.active{background:var(--ink-cyan);color:#fff;border-color:var(--ink-cyan);font-weight:600}
.ctrl-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ctrl-row label{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-2)}
.ctrl-row input[type=number]{width:56px;padding:5px 6px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:var(--panel);color:var(--ink);outline:none}
.btn-cli{padding:6px 11px;border:1px solid var(--border);border-radius:6px;background:var(--panel);color:var(--ink);font-size:12px;cursor:pointer;user-select:none;white-space:nowrap}
.btn-cli:hover{border-color:var(--ink-cyan);color:var(--ink-cyan)}
.btn-cli.disabled{opacity:.4;pointer-events:none}
.btn-fire{padding:6px 14px;border:none;border-radius:6px;background:var(--ink-cyan);color:#fff;font-size:12px;cursor:pointer;white-space:nowrap}
.btn-fire:hover{opacity:.9}
.btn-stop{padding:6px 12px;border:none;border-radius:6px;background:var(--cinnabar);color:#fff;font-size:12px;cursor:pointer}
.btn-review{padding:6px 12px;border:1px solid var(--ochre);border-radius:6px;background:var(--panel);color:var(--ochre);font-size:12px;cursor:pointer;white-space:nowrap}
.auto-toggle{display:inline-flex;align-items:center;gap:4px;margin-left:auto;font-size:12px;color:var(--text-2);cursor:pointer;white-space:nowrap}
.auto-toggle input{accent-color:var(--ink-cyan)}
.wb-out{background:var(--paper);border-radius:7px;padding:12px 14px;font-family:'STKaiti','KaiTi','楷体',serif;font-size:14px;line-height:1.9;color:var(--ink);white-space:pre-wrap;min-height:48px;max-height:300px;overflow-y:auto}
.wb-out.empty{font-family:inherit;color:var(--text-3);font-size:13px;text-align:center}
.wb-live{color:var(--cinnabar);font-size:11px;animation:clwBlink 1s infinite}
@keyframes clwBlink{50%{opacity:.3}}
.report{margin:0;background:var(--paper);border-radius:7px;padding:12px;font-size:12px;line-height:1.7;color:var(--ink);white-space:pre-wrap;font-family:ui-monospace,monospace;max-height:280px;overflow-y:auto}
.ev{display:grid;grid-template-columns:56px 50px 1fr;gap:6px;align-items:baseline;font-size:11px;padding:2px 0}
.ev-t{color:var(--text-3);font-family:ui-monospace,monospace}
.ev-type{color:var(--text-2)}
.ev-spawn .ev-type{color:var(--ochre)}
.ev-saved .ev-type,.ev-saved .ev-text{color:var(--ink-cyan)}
.ev-done .ev-type{color:var(--ink-cyan)}
.ev-error .ev-type,.ev-error .ev-text{color:var(--cinnabar)}
.ev-text{color:var(--text-2)}

.statusbar{height:28px;background:var(--panel);border-top:1px solid var(--border);display:flex;align-items:center;padding:0 14px;font-size:11px;color:var(--text-2);gap:16px;flex-shrink:0}
.statusbar .right{margin-left:auto;display:flex;gap:16px}
.statusbar .host{color:var(--ink-cyan)}
.hint-tip{position:fixed;bottom:38px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--paper);font-size:12px;padding:8px 16px;border-radius:8px;z-index:200;opacity:0;transition:opacity .2s;pointer-events:none}
[data-theme="night"] .hint-tip{background:#3a362f;color:var(--ink)}
.hint-tip.show{opacity:1}

/* config modal */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:100;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s}
.modal-mask.show{opacity:1;pointer-events:auto}
.modal{background:var(--panel);border-radius:12px;border:1px solid var(--border);width:600px;max-height:84vh;display:flex;flex-direction:column;overflow:hidden}
.modal-mask.show .modal{transform:none}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}
.modal-head h2{font-size:15px;font-weight:600}
.modal-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;cursor:pointer;color:var(--text-2);font-size:18px}
.modal-close:hover{background:var(--hover);color:var(--ink)}
.modal-body{padding:20px 22px;overflow-y:auto}
.mb-section{margin-bottom:18px}
.mb-section h3{font-size:12px;color:var(--text-3);letter-spacing:1px;text-transform:uppercase;margin-bottom:10px}
.theme-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.swatch-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;cursor:pointer}
.swatch-row:hover{border-color:var(--ink-cyan)}
.swatch-row input{accent-color:var(--ink-cyan)}
.swatch{width:34px;height:34px;border-radius:7px;flex-shrink:0;border:1px solid var(--border)}
.swatch-row .nm{font-weight:500;font-size:13px}
/* 命令面板 */
.cmd-mask{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:110;display:flex;align-items:flex-start;justify-content:center;padding-top:14vh;opacity:0;pointer-events:none;transition:opacity .15s}
.cmd-mask.show{opacity:1;pointer-events:auto}
.cmd-box{background:var(--panel);border:1px solid var(--border);border-radius:12px;width:540px;max-height:60vh;display:flex;flex-direction:column;overflow:hidden}
.cmd-input-wrap{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--border)}
.cmd-input-wrap .cmd-icon{font-size:16px;color:var(--text-3);flex-shrink:0}
.cmd-input-wrap input{flex:1;border:none;outline:none;font-size:15px;background:transparent;color:var(--ink);font-family:inherit}
.cmd-input-wrap input::placeholder{color:var(--text-3)}
.cmd-list{overflow-y:auto;padding:8px;flex:1}
.cmd-group-label{font-size:10px;color:var(--text-3);letter-spacing:1px;text-transform:uppercase;padding:8px 12px 4px}
.cmd-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:7px;cursor:pointer;font-size:13px;color:var(--ink);user-select:none}
.cmd-item:hover,.cmd-item.sel{background:var(--active-bg)}
.cmd-item .cmd-name{flex:1}
.cmd-item .cmd-shortcut{font-size:11px;color:var(--text-3);font-family:ui-monospace,monospace;background:var(--hover);padding:2px 7px;border-radius:4px}
.cmd-item .cmd-desc{font-size:10px;color:var(--text-3);margin-left:auto}
.cmd-empty{text-align:center;padding:24px;color:var(--text-3);font-size:13px}
/* diff 弹窗 */
.diff-modal{background:var(--panel);border:1px solid var(--border);border-radius:12px;width:860px;max-height:84vh;display:flex;flex-direction:column;overflow:hidden}
.diff-body{display:flex;flex:1;min-height:0;overflow:hidden}
.diff-pane{flex:1;overflow-y:auto;padding:16px 20px;min-width:0}
.diff-pane:first-child{border-right:1px solid var(--border);background:var(--paper)}
.diff-pane h4{font-size:11px;color:var(--text-3);letter-spacing:1px;text-transform:uppercase;margin-bottom:12px;display:flex;align-items:center;gap:8px}
.diff-pane h4 .tag{margin-left:auto}
.diff-line{padding:3px 8px;margin:2px -8px;border-radius:4px;font-family:'STKaiti','KaiTi','楷体','Songti SC',serif;font-size:15px;line-height:1.9;white-space:pre-wrap;word-break:break-all}
.diff-line.add{background:rgba(31,95,91,.12);color:var(--ink-cyan)}
.diff-line.del{background:rgba(184,65,58,.12);color:var(--cinnabar);text-decoration:line-through}
[data-theme="night"] .diff-line.add{background:rgba(95,163,157,.16)}
[data-theme="night"] .diff-line.del{background:rgba(213,99,90,.16)}
[data-theme="plain"] .diff-line.add{background:rgba(22,163,74,.12)}
[data-theme="plain"] .diff-line.del{background:rgba(239,68,68,.12)}
[data-theme="cloud"] .diff-line.add{background:rgba(37,99,235,.10)}
[data-theme="cloud"] .diff-line.del{background:rgba(239,68,68,.10)}
[data-theme="space"] .diff-line.add{background:rgba(88,166,255,.14)}
[data-theme="space"] .diff-line.del{background:rgba(255,123,114,.14)}
[data-theme="moran"] .diff-line.add{background:rgba(122,140,166,.14)}
[data-theme="moran"] .diff-line.del{background:rgba(192,138,130,.14)}
.diff-foot{display:flex;gap:10px;padding:14px 20px;border-top:1px solid var(--border);justify-content:flex-end}

/* ===== 桌面容器 ===== */
body{background:#2d2d2d}
.desktop{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:24px}
.window{background:var(--panel);border-radius:10px;border:1px solid var(--border);width:100%;max-width:1200px;height:calc(100vh - 48px);display:flex;flex-direction:column;overflow:hidden}
.window-chrome{height:38px;background:var(--panel);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 16px;gap:8px;flex-shrink:0}
.dot{width:12px;height:12px;border-radius:50%}
.dot.red{background:#ff5f57}
.dot.yellow{background:#ffbd2e}
.dot.green{background:#28c840}
.window-chrome .wc-title{margin-left:8px;font-size:12px;color:var(--text-2);font-weight:500}
.window-chrome .wc-actions{margin-left:auto;display:flex;gap:6px}
.window-chrome .wc-btn{width:20px;height:20px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--text-3);cursor:default}
.window-chrome .wc-btn:hover{background:var(--hover);color:var(--ink)}
.app{height:100%}