* { margin:0; padding:0; box-sizing:border-box; }
html,body { height:100%; }
body {
  font-family:var(--sans); font-size:14px; line-height:1.6;
  background:
    radial-gradient(900px 480px at 8% -10%, rgba(46,94,78,.055), transparent 55%),
    radial-gradient(760px 620px at 102% 112%, rgba(16,185,129,.05), transparent 55%),
    var(--bg);
  background-attachment:fixed;
  color:var(--fg); overflow:hidden; -webkit-font-smoothing:antialiased;
}
button { font-family:inherit; cursor:pointer; border:none; background:none; color:inherit; }
a { text-decoration:none; color:inherit; }
::selection { background:rgba(16,185,129,.18); }
::-webkit-scrollbar { width:8px; height:8px; } ::-webkit-scrollbar-thumb { background:#D8D6CC; border-radius:8px; }
@keyframes rise { from { opacity:0; transform:translateY(12px); filter:blur(4px); } to { opacity:1; transform:none; filter:none; } }
@keyframes pop { from { opacity:0; transform:scale(.96); } to { opacity:1; transform:scale(1); } }

/* ============ 顶栏 ============ */
.topbar { height:50px; display:flex; align-items:center; gap:12px; padding:0 16px; background:rgba(255,255,255,.72); backdrop-filter:blur(16px) saturate(1.5); -webkit-backdrop-filter:blur(16px) saturate(1.5); border-bottom:1px solid rgba(228,226,218,.75); position:relative; z-index:40; }
.tb-logo { width:30px; height:30px; display:grid; place-items:center; }
.tb-logo img { height:26px; width:auto; display:block; }
.tb-name { font-weight:bold; }
.tb-name em { font-style:normal; color:var(--fg3); font-weight:normal; font-size:12px; margin-left:6px; }
.tb-right { margin-left:auto; display:flex; align-items:center; gap:6px; }
.tb-link { font-size:12.5px; color:var(--fg2); padding:6px 12px; border-radius:var(--r); transition:all .18s; }
.tb-link:hover { background:var(--bg-alt); color:var(--fg); }
.tb-link.on { color:var(--green); font-weight:bold; background:var(--accd); }
.tb-avatar { width:30px; height:30px; border-radius:var(--r); background:var(--green2); color:#fff; display:grid; place-items:center; font-size:13px; }
.ai-hint { display:flex; align-items:center; gap:7px; font-size:11.5px; color:var(--fg2); background:var(--accd); border-radius:var(--r); padding:6px 12px; }
.ai-hint .pulse { width:6px; height:6px; border-radius:50%; background:var(--acc); animation:pd 2s infinite; }
@keyframes pd { 50% { opacity:.35; } }

/* ============ 布局 ============ */
.layout { display:flex; height:calc(100vh - 50px); }
.side { width:188px; flex-shrink:0; background:rgba(255,255,255,.6); backdrop-filter:blur(14px) saturate(1.4); -webkit-backdrop-filter:blur(14px) saturate(1.4); border-right:1px solid rgba(228,226,218,.75); padding:12px 8px; overflow-y:auto; }
.side-sec { font-size:10.5px; color:var(--fg3); letter-spacing:1.5px; padding:12px 10px 6px; }
.side-item { display:flex; align-items:center; gap:9px; padding:8px 10px; border-radius:var(--r); font-size:13px; color:var(--fg2); cursor:pointer; margin-bottom:2px; transition:all .18s var(--ease); animation:rise .4s var(--ease) both; }
.side-item:hover { background:var(--bg-alt); color:var(--fg); transform:translateX(2px); }
.side-item.on { background:var(--accd); color:var(--green); font-weight:bold; box-shadow:inset 2px 0 0 var(--acc); }
.side-item .ico { width:22px; height:22px; border-radius:var(--r); display:grid; place-items:center; font-size:11px; background:var(--bg-alt); color:var(--fg2); flex-shrink:0; }
.side-item .ico svg { display:block; }
.side-item.on .ico { background:#fff; color:var(--green2); }
.side-item .bdg { margin-left:auto; font-size:10px; background:var(--redd); color:var(--red); border-radius:var(--r); padding:0 6px; }

.main { flex:1; overflow-y:auto; padding:20px 24px 60px; }
.page-hd { display:flex; align-items:baseline; gap:12px; margin-bottom:16px; animation:rise .4s var(--ease) both; }
.page-hd h1 { font-size:20px; letter-spacing:.3px; }
.page-hd .sub { font-size:12px; color:var(--fg3); }
.page-hd .acts { margin-left:auto; display:flex; gap:8px; }
.btn { padding:7px 14px; border-radius:var(--r); font-size:12.5px; font-weight:bold; transition:transform .16s var(--spring), filter .18s, background .18s; }
.btn:active { transform:scale(.95); }
.btn-pri { background:linear-gradient(135deg,#1E4434,#2E5E4E); color:#fff; box-shadow:0 2px 8px rgba(27,58,45,.2); } .btn-pri:hover { filter:brightness(1.15); }
.btn-ghost { border:1px solid var(--line2); color:var(--fg2); } .btn-ghost:hover { background:var(--bg-alt); color:var(--fg); }

.card { background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); animation:rise .45s var(--ease) both; margin-bottom:14px; }
.card-hd { padding:12px 16px; border-bottom:1px solid var(--line); display:flex; align-items:center; gap:8px; }
.card-hd .t { font-size:13.5px; font-weight:bold; }
.card-hd .more { margin-left:auto; font-size:11.5px; color:var(--fg3); cursor:pointer; }
.card-hd .more:hover { color:var(--green2); }
.card-bd { padding:14px 16px; }
.tag { font-size:9.5px; background:var(--accd); color:var(--green2); border-radius:var(--r); padding:2px 7px; }
.tag.am { background:var(--amberd); color:var(--amber); }
.tag.bl { background:var(--blued); color:var(--blue); }
.tag.rd { background:var(--redd); color:var(--red); }

/* AI 感知横幅 */
.ai-banner { display:none; align-items:center; gap:10px; background:#FFFBF2; border:1px solid #EBCF9A; border-radius:var(--r); padding:10px 14px; margin-bottom:14px; font-size:12.5px; color:#7A5B16; animation:pop .3s var(--spring) both; }
.ai-banner.show { display:flex; }
.ai-banner .acts { margin-left:auto; display:flex; gap:8px; flex-shrink:0; }
.ai-banner button { font-size:11.5px; font-weight:bold; padding:5px 12px; border-radius:var(--r); transition:transform .15s var(--spring); }
.ai-banner button:active { transform:scale(.94); }
.ai-banner .b1 { background:var(--green); color:#fff; }
.ai-banner .b2 { color:var(--fg3); }

/* AI 建议条（只读洞察） */
.ai-note { display:flex; gap:9px; align-items:flex-start; background:var(--accd); border:1px solid #D3E5DA; border-radius:var(--r); padding:11px 14px; font-size:12.5px; color:#24513F; margin-bottom:14px; line-height:1.65; animation:rise .4s both; }
.ai-note .spark { color:var(--acc); flex-shrink:0; font-weight:bold; }
.ai-note b { color:var(--green); }

/* ============ 表格 ============ */
.dtable { width:100%; border-collapse:collapse; font-size:13px; }
.dtable th { text-align:left; font-weight:normal; color:var(--fg3); font-size:11px; letter-spacing:.6px; padding:8px 10px; border-bottom:1px solid var(--line); background:var(--bg); white-space:nowrap; }
.dtable td { padding:9px 10px; border-bottom:1px solid #F1F0EA; color:#3A3B33; }
.dtable tr:hover td { background:#F8F9F5; }
.dtable td.ed { cursor:text; transition:background .15s; position:relative; }
.dtable td.ed::after { content:'✎'; position:absolute; right:4px; top:4px; font-size:8px; color:#B9CFC2; opacity:0; transition:opacity .2s; }
.dtable td.ed:hover::after { opacity:1; }
.dtable td.ed:hover { background:var(--accd); }
.dtable td.ed:focus { outline:2px solid rgba(16,185,129,.4); background:var(--accd); }
.dtable td.num { font-family:var(--mono); font-size:12px; text-align:right; }
.dtable tr.total td { font-weight:bold; color:var(--green); background:var(--accd); border-bottom:none; }
.dtable tr.sub td { color:var(--fg3); font-size:11.5px; }
.dtable td .cell-sub { display:block; font-size:10.5px; color:var(--fg3); margin-top:1px; }
.flash { animation:flash-bg 1.1s var(--ease); }
@keyframes flash-bg { 0% { background:rgba(16,185,129,.22); } 100% { background:transparent; } }
.row-link { cursor:pointer; }
.pill { font-size:10px; border-radius:var(--r); padding:2px 7px; white-space:nowrap; }
.pill.g { background:var(--accd); color:var(--green2); }
.pill.b { background:var(--blued); color:var(--blue); }
.pill.a { background:var(--amberd); color:var(--amber); }
.pill.r { background:var(--redd); color:var(--red); }
.pill.n { background:var(--bg-alt); color:var(--fg3); }

/* 字段卡 */
.frow { display:flex; font-size:12.5px; padding:6px 0; border-bottom:1px dashed #F1F0EA; animation:rise .3s both; }
.frow:last-child { border-bottom:none; }
.frow .k { width:78px; color:var(--fg3); flex-shrink:0; font-size:11.5px; padding-top:1px; }
.frow .v { color:#3A3B33; flex:1; }
.frow .v b { color:var(--green); }

/* 文件 */
.fg-name { font-size:11px; color:var(--fg3); letter-spacing:1px; margin:14px 2px 7px; }
.file-item { display:flex; align-items:center; gap:11px; background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:10px 13px; margin-bottom:7px; cursor:pointer; transition:transform .2s var(--spring), box-shadow .2s; animation:rise .4s var(--ease) both; }
.file-item:hover { transform:translateY(-2px); box-shadow:0 6px 16px rgba(30,32,26,.08); }
.file-ico { width:28px; height:28px; border-radius:var(--r); display:grid; place-items:center; font-size:11px; flex-shrink:0; }
.f-pdf { background:var(--redd); color:var(--red); } .f-img { background:var(--blued); color:var(--blue); }
.f-doc { background:var(--accd); color:var(--green2); } .f-xls { background:var(--amberd); color:var(--amber); }
.file-name { font-size:13px; }
.file-meta { font-size:10.5px; color:var(--fg3); margin-top:1px; }
.file-time { margin-left:auto; font-size:10.5px; color:var(--fg3); }

/* 文档 */
.doc-page { font-size:13px; line-height:1.85; color:#3A3B33; outline:none; border-radius:var(--r); padding:4px; }
.doc-page h4 { color:var(--green); font-size:14px; margin:12px 0 4px; }
.doc-page ul { padding-left:18px; }
.doc-page:focus { box-shadow:0 0 0 2px rgba(16,185,129,.25); }

/* ============ 生产工单 ============ */
.mo-card { background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); margin-bottom:14px; animation:rise .45s var(--ease) both; }
.mo-hd { padding:13px 16px 10px; display:flex; align-items:center; gap:10px; }
.mo-hd .no { font-family:var(--mono); font-size:12px; color:var(--fg3); }
.mo-hd .t { font-size:14px; font-weight:bold; }
.mo-hd .qty { font-size:12px; color:var(--fg2); }
.mo-bd { padding:0 16px 14px; }
.mo-prog { height:5px; background:#EFEEE7; border-radius:2px; overflow:hidden; margin:4px 0 12px; }
.mo-prog i { display:block; height:100%; background:linear-gradient(90deg,var(--green2),var(--acc)); border-radius:2px; animation:grow 1s var(--ease) both; }
@keyframes grow { from { width:0; } }
.mo-steps { display:flex; align-items:center; gap:0; margin:6px 0 10px; }
.mo-step { display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--fg3); }
.mo-step .st-dot { width:18px; height:18px; border-radius:50%; display:grid; place-items:center; font-size:9px; background:var(--bg-alt); color:var(--fg3); flex-shrink:0; }
.mo-step.done { color:var(--green2); }
.mo-step.done .st-dot { background:var(--accd); color:var(--green2); }
.mo-step.cur { color:var(--amber); font-weight:bold; }
.mo-step.cur .st-dot { background:var(--amberd); color:var(--amber); animation:pd 1.6s infinite; }
.mo-line { flex:1; height:1px; background:var(--line); margin:0 8px; min-width:16px; }
.mo-line.done { background:var(--acc); }
.mo-meta { display:flex; gap:14px; font-size:11.5px; color:var(--fg2); flex-wrap:wrap; }
.mo-meta .warn { color:var(--red); }
.mo-acts { display:flex; gap:8px; margin-top:10px; }

/* ============ Skill 管理 / 数字员工（老板） ============ */
.switch { position:relative; width:36px; height:20px; flex-shrink:0; margin-left:auto; }
.switch input { display:none; }
.switch i { position:absolute; inset:0; border-radius:var(--r); background:#D8D6CC; transition:background .22s; cursor:pointer; }
.switch i::after { content:''; position:absolute; left:3px; top:3px; width:14px; height:14px; border-radius:var(--r); background:#fff; transition:transform .25s var(--spring); box-shadow:0 1px 3px rgba(0,0,0,.2); }
.switch input:checked + i { background:var(--acc); }
.switch input:checked + i::after { transform:translateX(16px); }

.staff-strip { display:flex; gap:10px; margin-bottom:16px; flex-wrap:wrap; }
.staff-chip { display:flex; align-items:center; gap:9px; background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:9px 14px; cursor:pointer; transition:all .2s var(--spring); animation:rise .4s both; }
.staff-chip:hover { transform:translateY(-2px); box-shadow:var(--shadow); }
.staff-chip.on { border-color:var(--acc); background:var(--accd); box-shadow:inset 2px 0 0 var(--acc); }
.staff-chip .ava { width:28px; height:28px; border-radius:var(--r); color:#fff; display:grid; place-items:center; font-size:12px; }
.staff-chip .n { font-size:13px; font-weight:bold; }
.staff-chip .s { font-size:10px; color:var(--fg3); }

.mem-note { display:flex; gap:8px; align-items:flex-start; background:#FBF7EC; border:1px solid #EFE3C2; border-radius:var(--r); padding:10px 13px; font-size:12px; color:#8A6D1F; margin-bottom:12px; line-height:1.6; }
.mem-item { display:flex; gap:10px; align-items:flex-start; background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:10px 13px; margin-bottom:8px; animation:rise .35s both; }
.mem-item .mi { color:var(--green2); flex-shrink:0; }
.mem-txt { flex:1; font-size:13px; line-height:1.6; outline:none; border-radius:var(--r); padding:2px 4px; margin:-2px -4px; }
.mem-txt:focus { background:var(--accd); box-shadow:0 0 0 2px rgba(16,185,129,.25); }
.mem-txt:empty::before { content:'输入记忆…'; color:var(--fg3); }
.mem-del { color:var(--fg3); flex-shrink:0; } .mem-del:hover { color:var(--red); }
.add-row { border:1.5px dashed var(--line2); border-radius:var(--r); padding:11px; text-align:center; font-size:12.5px; color:var(--fg3); cursor:pointer; transition:all .18s; }
.add-row:hover { color:var(--green2); border-color:var(--acc); background:var(--accd); }

.ap-card { background:var(--card); border:1px solid var(--line); border-left:3px solid var(--amber); border-radius:var(--r); padding:13px 15px; margin-bottom:10px; animation:rise .4s var(--ease) both; }
.ap-card.approved { border-left-color:var(--acc); }
.ap-card.rejected { opacity:.5; border-left-color:var(--red); }
.ap-head { display:flex; align-items:center; gap:8px; }
.ap-from { font-size:11px; color:var(--fg3); margin-left:auto; }
.ap-body { font-size:13px; line-height:1.65; margin:8px 0; }
.ap-body b { color:var(--green); }
.ap-why { font-size:11.5px; color:var(--fg2); background:var(--bg); border-radius:var(--r); padding:7px 10px; margin-bottom:10px; }
.ap-acts { display:flex; gap:8px; }
.ap-btn { padding:6px 13px; border-radius:var(--r); font-size:12px; font-weight:bold; transition:transform .15s var(--spring); }
.ap-btn:active { transform:scale(.94); }
.ap-ok { background:linear-gradient(135deg,#1E4434,#2E5E4E); color:#fff; }
.ap-no { border:1px solid var(--line2); color:var(--fg2); } .ap-no:hover { color:var(--red); border-color:var(--red); }
.ap-result { font-size:12.5px; font-weight:bold; animation:pop .3s var(--spring); }
.ap-result.ok { color:var(--acc); } .ap-result.no { color:var(--red); }

.grid-2 { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.sub-tabs { display:flex; gap:4px; margin-bottom:14px; animation:rise .4s both; }
.sub-tab { font-size:12.5px; color:var(--fg2); padding:6px 13px; border-radius:var(--r); border:1px solid var(--line); background:var(--card); transition:all .18s; }
.sub-tab:hover { color:var(--fg); }
.sub-tab.on { background:var(--green); color:#fff; border-color:var(--green); font-weight:bold; }
.sub-tab .bdg { font-size:9.5px; background:var(--redd); color:var(--red); border-radius:var(--r); padding:0 5px; margin-left:4px; }
.sub-tab.on .bdg { background:rgba(255,255,255,.2); color:#fff; }

/* ============ 日历 ============ */
.cal-bar { display:flex; align-items:center; gap:8px; margin-bottom:14px; animation:rise .4s var(--ease) both; }
.cal-bar .nav-b { width:28px; height:28px; border:1px solid var(--line2); border-radius:var(--r); display:grid; place-items:center; color:var(--fg2); font-size:14px; background:var(--card); transition:all .18s var(--ease); }
.cal-bar .nav-b:hover { background:var(--bg-alt); color:var(--fg); transform:translateY(-1px); }
.cal-title { font-size:16px; font-weight:bold; min-width:150px; text-align:center; letter-spacing:.3px; }
.cal-tabs { margin-left:auto; display:flex; gap:4px; }
.cal-tab { font-size:12px; padding:5px 13px; border-radius:var(--r); border:1px solid var(--line); color:var(--fg2); background:rgba(255,255,255,.7); transition:all .18s var(--ease); }
.cal-tab:hover { color:var(--fg); }
.cal-tab.on { background:var(--green); color:#fff; border-color:var(--green); font-weight:bold; }
.cal-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:6px; }
.cal-wd { font-size:10.5px; color:var(--fg3); text-align:center; padding:4px 0 8px; letter-spacing:1.5px; }
.cal-cell { min-height:88px; background:rgba(255,255,255,.78); backdrop-filter:blur(8px); border:1px solid var(--line); border-radius:var(--r); padding:5px 6px; cursor:pointer; transition:transform .22s var(--spring), border-color .2s, box-shadow .22s; animation:rise .4s var(--ease) both; }
.cal-cell:hover { border-color:var(--acc); transform:translateY(-2px); box-shadow:var(--shadow); }
.cal-cell.dim { opacity:.36; }
.cal-cell.sel { border-color:var(--acc); box-shadow:0 0 0 2px rgba(16,185,129,.22); }
.cal-cell.today .d-num { background:var(--green); color:#fff; }
.d-num { width:20px; height:20px; border-radius:var(--r); display:grid; place-items:center; font-size:11px; font-weight:bold; }
.cal-ev { display:block; font-size:10px; border-radius:var(--r); padding:1.5px 5px; margin-top:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cal-ev.g { background:var(--accd); color:var(--green2); }
.cal-ev.b { background:var(--blued); color:var(--blue); }
.cal-ev.a { background:var(--amberd); color:var(--amber); }
.cal-ev.r { background:var(--redd); color:var(--red); font-weight:bold; }
.cal-ev.n { background:var(--bg-alt); color:var(--fg2); }
.cal-more { font-size:9.5px; color:var(--fg3); margin-top:2px; padding-left:2px; }
.cal-agenda { margin-top:14px; }
/* 日视图 */
.day-allday { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:10px; }
.day-allday .cal-ev { font-size:11px; padding:4px 10px; animation:rise .35s both; }
.day-row { display:flex; border-bottom:1px solid #F1F0EA; min-height:46px; }
.day-row:last-child { border-bottom:none; }
.day-h { width:56px; flex-shrink:0; font-size:10.5px; color:var(--fg3); text-align:right; padding:6px 10px 0 0; font-family:var(--mono); }
.day-body { flex:1; padding:5px 0; display:flex; flex-direction:column; gap:5px; }
.day-ev { font-size:11.5px; border-radius:var(--r); padding:5px 10px; border-left:3px solid; animation:rise .35s var(--ease) both; }
.day-ev.g { border-color:var(--acc); background:var(--accd); color:#24513F; }
.day-ev.b { border-color:var(--blue); background:var(--blued); color:#1D4FA8; }
.day-ev.a { border-color:var(--amber); background:var(--amberd); color:#8A5B06; }
.day-ev.r { border-color:var(--red); background:var(--redd); color:#B03030; }
.day-ev.n { border-color:var(--fg3); background:var(--bg-alt); color:var(--fg2); }
.day-ev .de-from { font-size:9.5px; opacity:.62; margin-left:7px; }
/* 年视图 */
.year-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }
.ym-card { background:rgba(255,255,255,.78); backdrop-filter:blur(8px); border:1px solid var(--line); border-radius:var(--r); padding:11px 12px; cursor:pointer; transition:transform .22s var(--spring), border-color .2s, box-shadow .22s; animation:rise .4s var(--ease) both; }
.ym-card:hover { border-color:var(--acc); transform:translateY(-2px); box-shadow:var(--shadow); }
.ym-card .t { font-size:12.5px; font-weight:bold; margin-bottom:7px; display:flex; align-items:baseline; }
.ym-cnt { margin-left:auto; font-size:9.5px; color:var(--green2); background:var(--accd); border-radius:var(--r); padding:1px 6px; font-weight:normal; }
.ym-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:1px; }
.ym-d { aspect-ratio:1; display:grid; place-items:center; font-size:8.5px; color:var(--fg3); border-radius:var(--r); position:relative; }
.ym-d.has { color:var(--fg); font-weight:bold; }
.ym-d.has::after { content:''; position:absolute; bottom:1px; width:3px; height:3px; border-radius:50%; background:var(--acc); }
.ym-d.hot::after { background:var(--red); }
.ym-d.td { background:var(--green); color:#fff; }
@media (max-width:1100px) { .year-grid { grid-template-columns:repeat(3,1fr); } }

.toast-zone { position:fixed; right:16px; bottom:16px; z-index:100; display:flex; flex-direction:column; gap:8px; }
.toast { background:var(--green); color:#EFF6F1; border-radius:var(--r); padding:10px 14px; font-size:12.5px; box-shadow:0 10px 28px rgba(27,58,45,.3); display:flex; align-items:center; gap:9px; min-width:230px; animation:toast-in .35s var(--spring) both; }
.toast.out { animation:toast-out .28s both; }
@keyframes toast-in { from { opacity:0; transform:translateX(36px); } }
@keyframes toast-out { to { opacity:0; transform:translateY(8px); } }
.toast .ti { color:#7FE7B6; flex-shrink:0; }
.toast .tt { font-size:10.5px; opacity:.7; margin-top:1px; }

/* ============ 工具 & 定时任务 ============ */
.tool-card { background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); animation:rise .45s var(--ease) both; margin-bottom:12px; }
.tool-card-hd { padding:13px 16px 10px; display:flex; align-items:center; gap:10px; }
.tool-card-hd .ico { width:32px; height:32px; border-radius:var(--r); display:grid; place-items:center; color:#fff; flex-shrink:0; }
.tool-card-hd .ico svg { display:block; }
.tool-card-hd .t { font-size:14px; font-weight:bold; }
.tool-card-hd .tag { margin-left:auto; }
.tool-card-bd { padding:0 16px 14px; font-size:13px; color:var(--fg2); line-height:1.7; }
.tool-card-bd b { color:var(--green2); }
.tool-card-bd ul { padding-left:18px; margin:6px 0; }
.tool-card-bd li { margin:3px 0; }
.tool-card-acts { display:flex; gap:8px; margin-top:10px; }

.cron-card { background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:13px 16px; margin-bottom:10px; animation:rise .45s var(--ease) both; display:flex; align-items:center; gap:12px; transition:border-color .2s, box-shadow .2s; }
.cron-ico { width:32px; height:32px; border-radius:var(--r); display:grid; place-items:center; flex-shrink:0; color:#fff; }
.cron-ico svg { display:block; }
.cron-info { flex:1; min-width:0; }
.cron-name { font-size:13.5px; font-weight:bold; }
.cron-desc { font-size:11.5px; color:var(--fg3); margin-top:1px; }
.cron-next { font-size:11px; color:var(--fg3); margin-top:2px; font-family:var(--mono); }
.cron-status { display:flex; align-items:center; gap:6px; flex-shrink:0; }
.cron-dot { width:8px; height:8px; border-radius:50%; }
.cron-dot.on { background:var(--acc); animation:pd 2s infinite; }
.cron-dot.off { background:var(--line2); }
.cron-label { font-size:11.5px; color:var(--fg3); }
.cron-acts { display:flex; gap:6px; flex-shrink:0; }
.cron-toggle { width:36px; height:20px; border-radius:10px; background:#D8D6CC; position:relative; cursor:pointer; transition:background .22s; border:none; padding:0; }
.cron-toggle.on { background:var(--acc); }
.cron-toggle::after { content:''; position:absolute; left:2px; top:2px; width:16px; height:16px; border-radius:50%; background:#fff; transition:transform .25s var(--spring); box-shadow:0 1px 3px rgba(0,0,0,.2); }
.cron-toggle.on::after { transform:translateX(16px); }
.cron-log { margin-top:8px; font-size:11.5px; color:var(--fg3); }
.cron-log-item { display:flex; gap:8px; padding:3px 0; border-bottom:1px solid #F1F0EA; }
.cron-log-item:last-child { border-bottom:none; }
.cron-log-time { font-family:var(--mono); color:var(--fg3); flex-shrink:0; }
.cron-log-msg { color:var(--fg2); }

/* ============ 即时通讯 ============ */
.im-layout { display:flex; height:calc(100vh - 94px); margin:-20px -24px; animation:rise .4s var(--ease) both; }
.im-list { width:280px; flex-shrink:0; border-right:1px solid var(--line); background:rgba(255,255,255,.5); backdrop-filter:blur(12px); display:flex; flex-direction:column; overflow:hidden; }
.im-list-hd { padding:14px 16px 10px; display:flex; align-items:center; justify-content:space-between; font-size:14px; font-weight:bold; border-bottom:1px solid var(--line); }
.im-add-btn { width:26px; height:26px; border-radius:var(--r); display:grid; place-items:center; color:var(--fg3); border:1px solid var(--line2); background:var(--card); transition:all .18s; }
.im-add-btn:hover { color:var(--green2); border-color:var(--acc); background:var(--accd); }
.im-item { display:flex; align-items:center; gap:10px; padding:10px 14px; cursor:pointer; transition:background .15s; border-bottom:1px solid #F5F4EF; animation:rise .35s var(--ease) both; }
.im-item:hover { background:var(--bg-alt); }
.im-item.on { background:var(--accd); box-shadow:inset 3px 0 0 var(--acc); }
.im-av { width:32px; height:32px; border-radius:var(--r); color:#fff; display:grid; place-items:center; font-size:12px; flex-shrink:0; font-weight:bold; }
.im-av.sm { width:26px; height:26px; font-size:10px; }
.im-av-group { display:flex; gap:2px; flex-shrink:0; }
.im-item-info { flex:1; min-width:0; }
.im-item-top { display:flex; align-items:baseline; gap:6px; }
.im-item-name { font-size:13px; font-weight:bold; }
.im-item-time { font-size:10px; color:var(--fg3); margin-left:auto; flex-shrink:0; }
.im-item-preview { font-size:11.5px; color:var(--fg3); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:2px; }
.im-unread { background:var(--red); color:#fff; font-size:10px; min-width:16px; height:16px; border-radius:8px; display:grid; place-items:center; padding:0 5px; flex-shrink:0; font-weight:bold; }

.im-chat { flex:1; display:flex; flex-direction:column; min-width:0; }
.im-hd { padding:12px 20px; border-bottom:1px solid var(--line); display:flex; align-items:center; gap:12px; background:rgba(255,255,255,.6); backdrop-filter:blur(10px); }
.im-hd-name { font-size:14px; font-weight:bold; }
.im-hd-sub { font-size:11.5px; color:var(--fg3); }
.im-hd-info { flex:1; }

.im-msgs { flex:1; overflow-y:auto; padding:16px 20px; display:flex; flex-direction:column; gap:10px; }
.im-msg { display:flex; gap:8px; align-items:flex-start; max-width:75%; animation:rise .3s var(--ease) both; }
.im-msg.self { margin-left:auto; }
.im-msg-body { display:flex; flex-direction:column; gap:3px; }
.im-msg.self .im-msg-body { align-items:flex-end; text-align:right; }
.im-msg-name { font-size:10.5px; color:var(--fg3); padding-left:2px; }
.im-msg-time { font-size:10px; color:var(--fg3); padding:0 2px; }
.im-bubble { background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:9px 13px; font-size:13px; line-height:1.65; color:var(--fg); max-width:100%; word-break:break-word; }
.im-msg.self .im-bubble { background:linear-gradient(135deg,#1E4434,#2E5E4E); color:#EFF6F1; border-color:transparent; }
.im-msg.self .im-msg-time { text-align:right; }
.im-bubble.ai { background:var(--accd); border-color:#D3E5DA; color:#24513F; }
.im-ai { align-self:center; max-width:90%; flex-direction:column; align-items:center; gap:4px; }
.im-ai-tag { font-size:10px; color:var(--acc); background:var(--accd); border-radius:var(--r); padding:2px 8px; letter-spacing:.5px; }
.im-empty { flex:1; display:grid; place-items:center; color:var(--fg3); font-size:13px; }

.im-input { border-top:1px solid var(--line); padding:8px 16px; background:rgba(255,255,255,.6); backdrop-filter:blur(10px); }
.im-input-bar { display:flex; gap:4px; margin-bottom:6px; }
.im-input-box { display:flex; gap:8px; align-items:center; }
.im-input-box input { flex:1; border:1px solid var(--line2); border-radius:var(--r); padding:8px 12px; font-size:13px; font-family:var(--sans); outline:none; background:var(--card); transition:border-color .2s; }
.im-input-box input:focus { border-color:var(--acc); }

/* 建群弹窗 */
.im-modal { position:fixed; inset:0; background:rgba(0,0,0,.3); backdrop-filter:blur(4px); z-index:200; display:flex; align-items:center; justify-content:center; animation:pop .2s var(--spring) both; }
.im-modal-box { background:var(--card); border:1px solid var(--line); border-radius:var(--r); width:400px; max-height:80vh; display:flex; flex-direction:column; box-shadow:0 20px 60px rgba(0,0,0,.18); animation:pop .25s var(--spring) both; }
.im-modal-hd { padding:16px 20px 12px; font-size:15px; font-weight:bold; border-bottom:1px solid var(--line); }
.im-modal-bd { padding:16px 20px; overflow-y:auto; flex:1; }
.im-modal-ft { padding:12px 20px; border-top:1px solid var(--line); display:flex; justify-content:flex-end; gap:8px; }
.im-label { font-size:12px; color:var(--fg2); font-weight:bold; display:block; margin-bottom:6px; }
.im-input-field { width:100%; border:1px solid var(--line2); border-radius:var(--r); padding:8px 12px; font-size:13px; font-family:var(--sans); outline:none; transition:border-color .2s; }
.im-input-field:focus { border-color:var(--acc); }
.im-member-list { display:flex; flex-direction:column; gap:4px; }
.im-member-check { display:flex; align-items:center; gap:10px; padding:7px 10px; border-radius:var(--r); cursor:pointer; transition:background .15s; }
.im-member-check:hover { background:var(--bg-alt); }
.im-member-check input { accent-color:var(--acc); }
.im-member-role { margin-left:auto; font-size:10.5px; color:var(--fg3); }

@media (max-width:900px) { .grid-2 { grid-template-columns:1fr; } }
