:root{--sb-dim:#aebdba;--sb-dim2:#d2ded9;--sb-hint:#93a5a1;   /* 侧栏暗底次级文字三档(2026-07-07 提亮,原 #7d8f8c/#9fb3b0/#5d6f6c 太暗融背景) */

--brand-50:#f0fdfa;--brand-100:#ccfbf1;--brand-300:#5eead4;--brand-500:#14b8a6;--brand-600:#0d9488;--brand-700:#0f766e;--brand-900:#134e4a;--sidebar-bg:#0f1f1d;
--bg:#f6f8fa;--surface:#fff;--surface-2:#f8fafc;--line:#e8eef2;--text:#0f1f2a;--text-2:#475569;--text-3:#94a3b8;
--success:#047857;--success-bg:#ecfdf5;--warning:#b45309;--warning-bg:#fffbeb;--danger:#b91c1c;--danger-bg:#fef2f2;
/* --info:第四组语义色(2026-08-06 补)。此前规范只有 成功/警告/危险 三组,"在途/运输中/信息类"状态
   没有可用 token,于是各处各写各的蓝(#1c5fb0 / #1e88e5 / #1c5aa6 …)。补齐后统一走这一组。
   取值与 teal 标尺同一套 slate/蓝阶,饱和度对齐 --danger/--success,不抢品牌色的视觉重量。 */
--info:#1d4ed8;--info-bg:#eff6ff;
--radius-sm:8px;--radius:10px;--radius-full:999px;--shadow:0 1px 3px rgba(15,23,42,.07);--shadow-pop:0 8px 24px rgba(15,23,42,.12);
--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--sp-12:48px;
--font:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--transition:180ms ease;}
*{box-sizing:border-box}
body.dsapp{margin:0;font-family:var(--font);font-size:15px;line-height:1.55;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;display:flex;min-height:100vh}
.ds-main a{color:var(--brand-600);text-decoration:none}.ds-main a:hover{color:var(--brand-700)}
.t-page{font-size:20px;font-weight:650;color:var(--text);margin:0}
.t-section{font-size:15px;font-weight:600;color:var(--text);margin:0}
.t-sub{font-size:13px;color:var(--text-2)}.t-cap{font-size:12px;color:var(--text-3)}
.t-num{font-weight:600;font-variant-numeric:tabular-nums}
/* 侧边栏 */
.ds-side{width:220px;flex:none;background:var(--sidebar-bg);display:flex;flex-direction:column;padding:var(--sp-3) var(--sp-2);position:sticky;top:0;height:100vh;overflow:auto;zoom:calc(1/var(--pz,1))}
.ds-brand{display:flex;align-items:center;gap:var(--sp-2);color:#fff;font-weight:650;font-size:15px;padding:var(--sp-2) var(--sp-3) var(--sp-3)}
.ds-brand img{width:22px;height:22px;border-radius:6px}
.ds-nav{display:flex;flex-direction:column;gap:2px}
.ds-ngt{font-size:12px;color:rgba(215,225,235,.82);padding:var(--sp-3) var(--sp-3) var(--sp-1);text-transform:uppercase;letter-spacing:.05em;font-weight:600}
.nav-item{display:flex;align-items:center;gap:var(--sp-2);padding:6px var(--sp-3);border-radius:var(--radius-sm);color:#e6edf3;font-size:15px;cursor:pointer;border-left:3px solid transparent;transition:background var(--transition),color var(--transition)}
.nav-item:hover{background:rgba(255,255,255,.06);color:#fff}
.nav-item.active{background:rgba(94,234,212,.08);color:var(--brand-300);border-left-color:var(--brand-500)}
.nav-item .np{margin-left:auto;font-size:11px;background:rgba(255,255,255,.14);color:#e2e8f0;border-radius:999px;padding:0 7px;min-width:18px;text-align:center;font-variant-numeric:tabular-nums}
.nav-item .np.r{background:var(--danger);color:#fff}
.ds-foot{margin-top:auto;padding-top:var(--sp-4);display:flex;align-items:center;gap:var(--sp-2)}
.ds-user{display:flex;align-items:center;gap:var(--sp-2);color:#cbd5e1;flex:1;min-width:0;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm)}
.ds-user:hover{background:rgba(255,255,255,.06);color:#fff}
.ds-ava{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;font-weight:600;flex:none}
.ds-uname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.ds-logout{color:rgba(203,213,225,.7);font-size:12px;padding:var(--sp-2)}
.ds-logout:hover{color:#fff}
/* 主区 */
.ds-main{flex:1;min-width:0;display:flex;flex-direction:column}
.ds-top{height:56px;background:var(--surface);display:flex;align-items:center;gap:var(--sp-4);padding:0 var(--sp-6);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.ds-top-r{margin-left:auto;display:flex;align-items:center;gap:var(--sp-4)}
.ds-top-r .ds-actions{display:flex;gap:var(--sp-2)}
.ds-fs{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--text-3)}
.ds-fs button{border:1px solid var(--line);background:var(--surface);color:var(--text-2);border-radius:var(--radius-sm);height:26px;min-width:30px;padding:0 6px;font-size:12px;cursor:pointer}
.ds-fs button:hover{background:var(--surface-2)}
.ds-fs button.on{background:var(--brand-600);color:#fff;border-color:var(--brand-600)}
.ds-topuser{display:flex;align-items:center;gap:6px;text-decoration:none;padding:3px 8px;border-radius:var(--radius-sm)}
.ds-topuser:hover{background:var(--surface-2)}
.ds-topuser .ds-uname{color:var(--text);font-size:13px;max-width:120px}
.ds-toplogout{color:var(--text-3);font-size:12px;text-decoration:none;padding:4px 6px}
.ds-toplogout:hover{color:var(--text)}
/* 谁在线(顶栏,所有DS页) */
.ds-online{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--text-2);background:var(--surface-2);padding:4px 11px;border-radius:999px;cursor:pointer}   /* 与 /mail 顶栏在线胶囊统一大小 */
.ds-online .ds-odot{width:8px;height:8px;border-radius:50%;background:var(--success);box-shadow:0 0 0 3px var(--success-bg);flex:none}
.ds-oav{display:flex;align-items:center}
.ds-oa{width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:10px;font-weight:600;margin-left:-6px;border:2px solid var(--surface)}
.ds-oa:first-child{margin-left:4px}
/* 侧栏收起/展开 */
.ds-brandt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-navtog{margin-left:auto;background:rgba(255,255,255,.08);color:#cbd5e1;border:0;width:24px;height:24px;border-radius:6px;cursor:pointer;font-size:15px;line-height:1;flex:none;display:flex;align-items:center;justify-content:center}
.ds-navtog:hover{background:rgba(255,255,255,.16);color:#fff}
html.navcol .ds-side{width:64px;padding-left:7px;padding-right:7px}
html.navcol .ds-brandt,html.navcol .ds-ngt,html.navcol .nav-item .nlabel,html.navcol .nav-item .np,html.navcol .ds-uname,html.navcol .ds-logout{display:none}
html.navcol .ds-brand{flex-direction:column;gap:8px;padding:8px 0 12px}
html.navcol .ds-navtog{margin:0;transform:rotate(180deg)}
html.navcol .nav-item{justify-content:center;padding:var(--sp-2) 0;gap:0}
html.navcol .ds-foot{flex-direction:column;gap:8px;align-items:center}
html.navcol .ds-user{justify-content:center;padding:var(--sp-2) 0;flex:none}
.ds-body{padding:var(--sp-6);flex:1}
/* 卡片 */
.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--sp-4)}
.card+.card{margin-top:var(--sp-4)}
.card-hd{display:flex;align-items:center;gap:var(--sp-2);margin:0 0 var(--sp-3)}
.card-grid{display:grid;gap:var(--sp-4);grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}
.stat-num{font-size:24px;font-weight:650;font-variant-numeric:tabular-nums}
/* 按钮 */
:root{--line-ctl:#cbd5e1}   /* 控件可见边框(按钮/输入框),防"白卡上白底隐形按钮" */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 var(--sp-4);border:1px solid transparent;border-radius:var(--radius-sm);font:500 14px var(--font);cursor:pointer;background:transparent;color:var(--text);transition:background var(--transition),border-color var(--transition),color var(--transition);white-space:nowrap}
.btn-sm{height:30px;padding:0 var(--sp-3);font-size:13px}
.btn:disabled{opacity:.6;cursor:not-allowed;filter:grayscale(.3)}
.btn-primary{background:var(--brand-600);color:#fff;box-shadow:0 2px 8px rgba(13,148,136,.28)}.btn-primary:hover:not(:disabled){background:var(--brand-700);box-shadow:0 3px 12px rgba(13,148,136,.36)}
.btn-tonal{background:var(--brand-50);border-color:var(--brand-300);color:var(--brand-700)}.btn-tonal:hover:not(:disabled){background:var(--brand-100);border-color:var(--brand-500)}
.btn-secondary{background:var(--surface-2);border-color:var(--line-ctl);color:var(--text)}.btn-secondary:hover:not(:disabled){background:#eef2f6;border-color:#b6c2cd}
.btn-ghost{color:var(--text-2)}.btn-ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}
.btn-text{color:var(--brand-600);padding:0 var(--sp-1);height:auto}.btn-text:hover:not(:disabled){color:var(--brand-700);text-decoration:underline}
.btn-danger{background:var(--surface);border-color:#fecaca;color:var(--danger)}.btn-danger:hover:not(:disabled){background:var(--danger-bg)}
/* Badge */
.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:var(--radius-full);font-size:11px;font-weight:500;background:var(--surface-2);color:var(--text-2)}
.badge-success{background:var(--success-bg);color:var(--success)}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge-danger{background:var(--danger-bg);color:var(--danger)}.badge-brand{background:var(--brand-50);color:var(--brand-700)}
.badge .dot{width:6px;height:6px;border-radius:50%;background:var(--text-3);flex:none}
.badge .dot-success{background:var(--success)}.badge .dot-warning{background:var(--warning)}.badge .dot-danger{background:var(--danger)}.badge .dot-brand{background:var(--brand-600)}
/* 表格 */
.table{width:100%;border-collapse:collapse;font-size:14px}
.table th{position:sticky;top:56px;z-index:1;background:var(--surface);font-size:12px;font-weight:500;color:var(--text-3);text-align:left;padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--line)}
.table td{padding:var(--sp-2) var(--sp-3);height:40px;border-bottom:1px solid var(--line);vertical-align:top}
.table tbody tr{transition:background var(--transition)}
.table tbody tr:hover{background:var(--surface-2)}
.table .row-actions{opacity:0;transition:opacity var(--transition)}
.table tr:hover .row-actions{opacity:1}
/* 表单 */
.field{display:flex;flex-direction:column;gap:var(--sp-1)}
.field label{font-size:13px;color:var(--text-2)}
.input,select.input,textarea.input{height:36px;padding:0 var(--sp-3);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);font:400 14px var(--font);color:var(--text);outline:none;transition:border-color var(--transition),box-shadow var(--transition)}
textarea.input{height:auto;padding:var(--sp-2) var(--sp-3);resize:vertical}
.input:focus{border-color:var(--brand-600);box-shadow:0 0 0 2px rgba(13,148,136,.12);background:var(--surface)}
.input::placeholder{color:var(--text-3)}
/* Toast / 空态 */
.toast-stack{position:fixed;top:var(--sp-4);right:var(--sp-4);z-index:2000;display:flex;flex-direction:column;gap:var(--sp-2)}
.toast{background:var(--surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-pop);padding:var(--sp-3) var(--sp-4);border-left:3px solid var(--brand-600);font-size:13px;max-width:360px;animation:ds-slidein 200ms ease}
.toast-success{border-left-color:var(--success)}.toast-warning{border-left-color:var(--warning)}.toast-danger{border-left-color:var(--danger)}
@keyframes ds-slidein{from{transform:translateX(16px);opacity:0}}
.empty{display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);padding:var(--sp-10) var(--sp-4);color:var(--text-3);text-align:center}
.empty .empty-icon{font-size:26px;opacity:.6}.empty .empty-text{font-size:13px;color:var(--text-2)}
.divider{height:1px;background:var(--line);margin:var(--sp-4) 0;border:0}
.hidden{display:none!important}
/* 只作用于 Lucide 图标(LI() 一律输出 <svg class=li>)。原写成裸 .li 会连坐总览页图例行
   (d2lg 的 .li 是 flex 行)——行被压成 15px 宽,主题文字 overflow:hidden 直接隐形,只剩数字。 */
svg.li{width:15px;height:15px;flex:none;vertical-align:-2px}
/* 侧栏「收件箱」二级目录(全站,与 /mail 同款) */
.ds-sub{display:flex;flex-direction:column;gap:1px;margin:1px 0 4px}
html.navcol .ds-sub{display:none}
html.inbsubhid .ds-sub{display:none}
.ds-caret{margin-left:4px;color:var(--sb-dim);cursor:pointer;padding:0 5px;font-size:10px;border-radius:4px;user-select:none;flex:none}
.ds-caret:hover{color:#fff;background:rgba(255,255,255,.1)}
.ds-caret::after{content:"▾"}
html.inbsubhid .ds-caret::after{content:"▸"}
html.navcol .ds-caret{display:none}
.ds-sub .ds-subitem{display:flex;align-items:center;gap:6px;padding:4px 10px 4px 35px;border-left:3px solid transparent;color:var(--sb-dim2);font-size:14px;text-decoration:none;border-radius:0 8px 8px 0}
.ds-sub .ds-subitem:hover{background:rgba(255,255,255,.06);color:#fff}
.ds-sub .ds-subitem .pill{margin-left:auto;background:rgba(255,255,255,.12);color:#e6f2f0;border-radius:999px;padding:0 8px;font-size:11px}
.ds-sub .ds-subitem .pill.r{background:var(--danger);color:#fff}
.ds-sub .ldot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}
/* 在线人数下拉名单(与回复页同款交互:点开看有谁) */
.ds-online{position:relative;cursor:pointer;border-radius:999px;padding:4px 10px}
.ds-online:hover{background:var(--surface-2)}
.ds-onmenu{display:none;position:absolute;top:34px;right:0;background:var(--surface);color:var(--text);border:1px solid var(--line);border-radius:11px;box-shadow:var(--shadow-pop);padding:8px;min-width:200px;z-index:80;text-align:left}
.ds-onmenu.show{display:block}
.ds-onmenu .omhd{font-size:11px;color:var(--text-3);font-weight:700;letter-spacing:.5px;padding:4px 9px 6px}
.ds-onmenu .omrow{display:flex;align-items:center;gap:8px;padding:5px 9px;border-radius:7px;font-size:13px;color:var(--text)}
.ds-onmenu .omrow:hover{background:var(--surface-2)}
.ds-onmenu .omnone{padding:6px 9px;font-size:12px;color:var(--text-3)}
.ds-more>summary{cursor:pointer;list-style:none;color:var(--sb-dim);font-size:13px;padding:3px 0 3px 35px;user-select:none}
.ds-more>summary::-webkit-details-marker{display:none}
.ds-more>summary::after{content:" ▾"}
.ds-more[open]>summary::after{content:" ▴"}
::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-3)}
/* 跨文档 View Transitions 已关闭(2026-07-07):切换文件夹时两个视图内容差异大,过渡的淡出淡入被感知成"闪过上一个页面"→改回普通导航(干净重载,不残留上一页画面)。如需重新平滑过渡改回 navigation:auto。 */
@view-transition{navigation:none}
/* 群发次级标签栏(文件群发 / 群发历史 / 文本群发 互通) */
.bctabs{display:flex;gap:4px;margin:0 0 16px;border-bottom:1px solid var(--line)}
.bctabs a{padding:8px 14px;font-size:13px;color:var(--text-2);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.bctabs a:hover{color:var(--text)}
.bctabs a.on{color:var(--brand-700);border-bottom-color:var(--brand-600);font-weight:600}
