/* ============ 光年内部工作台 样式 ============ */
:root{
  --primary:#2563eb; --primary-2:#6d5df6; --primary-soft:#eef2ff;
  --accent:#22d3ee;
  --grad:linear-gradient(120deg,#22d3ee 0%,#3b82f6 48%,#6366f1 100%);
  --grad-btn:linear-gradient(135deg,#2563eb 0%,#6d5df6 100%);
  --ink:#16203a; --ink-2:#46536e; --ink-3:#8a97b3;
  --bg:#eef2f8; --card:#ffffff; --line:#e4e9f2;
  --side:#0a1024; --side-2:#131c3d;
  --green:#16a34a; --amber:#d97706; --red:#dc2626; --blue:#2563eb; --purple:#7c3aed; --cyan:#0891b2;
  --radius:16px;
  --shadow:0 1px 2px rgba(16,24,64,.05), 0 16px 36px -20px rgba(16,24,64,.28);
  --ring:0 0 0 4px rgba(59,130,246,.15);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; font-family:"Segoe UI","Microsoft YaHei","PingFang SC",system-ui,sans-serif;
  background:
    radial-gradient(920px 480px at 10% -10%, rgba(34,211,238,.13), transparent 62%),
    radial-gradient(780px 430px at 94% -6%, rgba(99,102,241,.15), transparent 60%),
    linear-gradient(180deg,#f6f8fd 0%, #eef2f8 100%);
  color:var(--ink); font-size:14px; -webkit-font-smoothing:antialiased;
}
::selection{background:rgba(34,211,238,.35)}
button,input,select,textarea{font-family:inherit; font-size:inherit; color:inherit}
a{color:var(--primary); text-decoration:none}
code{background:#f1f5f9; padding:1px 5px; border-radius:5px}
.hidden{display:none !important}

/* ============ 登录页（深空科技风） ============ */
.login-screen{
  position:fixed; inset:0; display:flex; align-items:center; justify-content:center;
  background:
    radial-gradient(1000px 620px at 14% 8%, rgba(34,211,238,.16), transparent 60%),
    radial-gradient(880px 520px at 86% 92%, rgba(99,102,241,.24), transparent 58%),
    radial-gradient(700px 400px at 70% -6%, rgba(59,130,246,.16), transparent 60%),
    linear-gradient(160deg,#060a18 0%, #0a1130 55%, #111c4a 100%);
  overflow:auto; padding:32px 16px; z-index:50;
}
.login-screen::before{
  content:""; position:absolute; inset:0; pointer-events:none;
  background-image:
    linear-gradient(rgba(148,163,184,.08) 1px, transparent 1px),
    linear-gradient(90deg, rgba(148,163,184,.08) 1px, transparent 1px);
  background-size:46px 46px;
  -webkit-mask-image:radial-gradient(ellipse at 50% 42%, #000 18%, transparent 76%);
  mask-image:radial-gradient(ellipse at 50% 42%, #000 18%, transparent 76%);
}
.login-bg-shapes i{position:absolute; border-radius:50%; filter:blur(6px); background:radial-gradient(circle at 32% 30%, rgba(34,211,238,.5), rgba(59,130,246,.08) 72%); box-shadow:0 0 70px rgba(34,211,238,.32); animation:float 9s ease-in-out infinite}
.login-bg-shapes i:nth-child(1){width:260px;height:260px;top:-70px;left:-60px}
.login-bg-shapes i:nth-child(2){width:180px;height:180px;bottom:-40px;right:8%;animation-delay:1.4s; background:radial-gradient(circle at 32% 30%, rgba(129,140,248,.5), rgba(99,102,241,.08) 72%); box-shadow:0 0 70px rgba(99,102,241,.32)}
.login-bg-shapes i:nth-child(3){width:110px;height:110px;top:22%;right:16%;animation-delay:2.6s}
.login-bg-shapes i:nth-child(4){width:70px;height:70px;bottom:22%;left:14%;animation-delay:.8s}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-26px)}}
.login-card{
  position:relative; z-index:2; width:100%; max-width:430px; text-align:center;
  background:rgba(13,20,44,.68); border:1px solid rgba(148,163,184,.22);
  -webkit-backdrop-filter:blur(18px); backdrop-filter:blur(18px);
  border-radius:20px; padding:36px 32px 26px; color:#dbe4f5;
  box-shadow:0 44px 90px rgba(2,6,23,.62), inset 0 1px 0 rgba(255,255,255,.07);
}
.login-logo{width:56px; height:56px; margin:0 auto; border-radius:16px; display:grid; place-items:center; font-size:29px; background:var(--grad); box-shadow:0 12px 32px -8px rgba(59,130,246,.65)}
.login-card h1{margin:16px 0 6px; font-size:24px; letter-spacing:1.5px; font-weight:700;
  background:linear-gradient(90deg,#ffffff 20%,#bfe4ff 65%,#c4b5fd 100%); -webkit-background-clip:text; background-clip:text; color:transparent}
.login-sub{margin:0 0 22px; color:#93a4c8; font-size:13px; letter-spacing:.6px}
.inp{display:block; text-align:left; margin-bottom:14px}
.inp span{display:block; font-size:12.5px; color:#9fb0d4; margin-bottom:6px; letter-spacing:.5px}
.inp input{
  width:100%; height:46px; border:1px solid rgba(148,163,184,.26); border-radius:11px; padding:0 14px;
  background:rgba(255,255,255,.06); color:#fff; transition:.16s;
}
.inp input::placeholder{color:#64748b}
.inp input:focus{outline:none; border-color:#38bdf8; background:rgba(255,255,255,.1); box-shadow:0 0 0 4px rgba(56,189,248,.18)}
.login-error{background:rgba(220,38,38,.18); color:#fca5a5; border:1px solid rgba(248,113,113,.4); border-radius:9px; padding:9px 12px; font-size:13px; margin-bottom:12px; text-align:left}
.login-roles{display:flex; flex-wrap:wrap; gap:7px; justify-content:center; margin-top:18px}
.role-chip{font-size:12px; background:rgba(56,189,248,.12); color:#7dd3fc; border:1px solid rgba(56,189,248,.3); padding:5px 10px; border-radius:999px}
.demo-box{margin-top:16px; text-align:left; font-size:13px; border-top:1px dashed rgba(148,163,184,.28); padding-top:12px}
.demo-box summary{cursor:pointer; color:#7dd3fc; font-size:13px}
.demo-list{margin-top:9px; display:grid; gap:6px}
.demo-item{display:flex; align-items:center; gap:8px; background:rgba(255,255,255,.05); border:1px solid rgba(148,163,184,.2); border-radius:9px; padding:7px 10px; cursor:pointer; transition:.15s}
.demo-item:hover{border-color:#38bdf8; background:rgba(56,189,248,.14)}
.demo-item b{font-size:12.5px; color:#e2e8f0}
.demo-item span{color:#8fa0c9; font-size:12px; margin-left:auto; font-family:Consolas,monospace}
.demo-hint{color:#7c8cb0; font-size:12px; margin:9px 0 0}
.login-foot{margin:16px 0 0; font-size:11.5px; color:#7c8cb0}
.login-foot code{background:rgba(255,255,255,.1); color:#a5b4fc; padding:1px 5px; border-radius:5px}

/* ============ 布局 ============ */
.app{display:flex; min-height:100vh}
.sidebar{
  width:242px; flex:0 0 242px; background:linear-gradient(180deg,var(--side) 0%, var(--side-2) 100%);
  color:#c3cfe9; display:flex; flex-direction:column; position:sticky; top:0; height:100vh; transition:.2s;
  box-shadow:inset -1px 0 0 rgba(255,255,255,.05);
}
.sidebar::before{content:""; position:absolute; inset:0 0 auto 0; height:240px; pointer-events:none; z-index:0;
  background:radial-gradient(120% 100% at 50% 0%, rgba(59,130,246,.3), transparent 72%)}
.side-head,.side-nav,.side-foot{position:relative; z-index:1}
.app.mini .sidebar{width:66px; flex-basis:66px}
.app.mini .side-title,.app.mini .side-user-info,.app.mini .nav-label,.app.mini .nav-group-title,.app.mini .side-foot .btn{display:none}
.app.mini .side-head{justify-content:center}
.app.mini .side-nav a{justify-content:center}
.side-head{display:flex; align-items:center; gap:11px; padding:18px 16px 14px; border-bottom:1px solid rgba(255,255,255,.08)}
.side-logo{width:34px; height:34px; border-radius:10px; display:grid; place-items:center; font-size:17px; background:var(--grad); box-shadow:0 8px 20px -6px rgba(59,130,246,.7); flex:0 0 auto}
.side-title{display:flex; flex-direction:column; overflow:hidden}
.side-title strong{color:#fff; font-size:15px; white-space:nowrap; letter-spacing:.6px}
.side-title small{font-size:11px; color:#8fa0c9; white-space:nowrap; letter-spacing:.4px}
.side-nav{flex:1; overflow-y:auto; padding:10px 8px}
.side-nav::-webkit-scrollbar{width:6px}
.side-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15); border-radius:6px}
.nav-group-title{font-size:10.5px; color:#6d7ea8; padding:16px 11px 7px; letter-spacing:2.5px}
.side-nav a{
  display:flex; align-items:center; gap:10px; padding:10px 11px; border-radius:10px; color:#b8c4e2;
  margin-bottom:4px; transition:.16s; font-size:13.5px; position:relative;
}
.side-nav a i{font-style:normal; width:19px; text-align:center; font-size:15px}
.side-nav a:hover{background:rgba(148,163,184,.12); color:#fff}
.side-nav a.on{background:linear-gradient(90deg, rgba(37,99,235,.95), rgba(99,102,241,.85)); color:#fff; box-shadow:0 10px 22px -10px rgba(59,130,246,.95)}
.side-nav a.on::before{content:""; position:absolute; left:-8px; top:50%; transform:translateY(-50%); width:3px; height:56%; border-radius:0 3px 3px 0; background:var(--accent); box-shadow:0 0 12px rgba(34,211,238,.95)}
.nav-label{white-space:nowrap; overflow:hidden}
.nav-badge{margin-left:auto; background:linear-gradient(135deg,#f43f5e,#ef4444); color:#fff; font-size:10.5px; min-width:18px; height:18px; border-radius:9px; display:flex; align-items:center; justify-content:center; padding:0 5px}
.side-foot{padding:12px; border-top:1px solid rgba(255,255,255,.08)}
.side-user{display:flex; align-items:center; gap:9px; margin-bottom:10px}
.side-user-info{display:flex; flex-direction:column; overflow:hidden}
.side-user-info strong{color:#fff; font-size:13.5px}
.side-user-info small{color:#8fa0c9; font-size:11.5px}
.avatar{
  width:34px; height:34px; border-radius:10px; background:var(--grad);
  color:#fff; display:flex; align-items:center; justify-content:center; font-size:15px; font-weight:600; flex:0 0 auto;
}
.avatar.sm{width:26px; height:26px; font-size:12px; border-radius:8px}

.main{flex:1; min-width:0; display:flex; flex-direction:column}
.topbar{
  height:60px; background:rgba(255,255,255,.82); border-bottom:1px solid rgba(228,233,242,.9);
  -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px);
  display:flex; align-items:center; gap:12px; padding:0 20px; position:sticky; top:0; z-index:20;
}
.icon-btn{background:none; border:none; font-size:19px; cursor:pointer; color:var(--ink-2); padding:6px 8px; border-radius:9px; transition:.15s}
.icon-btn:hover{background:rgba(238,242,248,.9); color:var(--ink)}
.crumb{font-weight:700; font-size:15.5px; letter-spacing:.4px; position:relative; padding-left:13px}
.crumb::before{content:""; position:absolute; left:0; top:50%; transform:translateY(-50%); width:4px; height:17px; border-radius:3px; background:var(--grad); box-shadow:0 0 10px rgba(56,189,248,.55)}
.topbar-right{margin-left:auto; display:flex; align-items:center; gap:10px}
.date-chip{font-size:12.5px; color:var(--ink-2); background:#f1f5fb; padding:5px 12px; border-radius:999px; border:none; font-variant-numeric:tabular-nums}
.todo-chip{
  border:1px solid rgba(59,130,246,.28); background:var(--primary-soft); color:#2563eb; border-radius:999px;
  padding:5px 12px; font-size:12.5px; cursor:pointer; transition:.15s; font-weight:500;
}
.todo-chip:hover{background:#e0e7ff}
.todo-chip b{background:var(--grad-btn); color:#fff; border-radius:999px; padding:0 6px; margin-left:3px; font-size:11.5px}
.user-menu{position:relative}
.user-btn{display:flex; align-items:center; gap:7px; background:none; border:none; cursor:pointer; padding:5px 8px; border-radius:9px}
.user-btn:hover{background:var(--bg)}
.caret{font-style:normal; color:var(--ink-3); font-size:11px}
.user-drop{position:absolute; right:0; top:110%; background:#fff; border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow); min-width:210px; padding:7px; z-index:40}
.ud-row{display:flex; justify-content:space-between; padding:7px 10px; font-size:13px; color:var(--ink-2)}
.ud-item{display:block; width:100%; text-align:left; background:none; border:none; padding:9px 10px; border-radius:8px; cursor:pointer; font-size:13px}
.ud-item:hover{background:var(--bg)}
.ud-item.danger{color:var(--red)}

.content{flex:1; padding:24px 26px 48px; max-width:1560px; width:100%}

/* ============ 通用组件 ============ */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px; border-radius:11px; border:1px solid var(--line);
  background:#fff; color:var(--ink); padding:9px 16px; cursor:pointer; font-size:13.5px; font-weight:500;
  transition:.16s; white-space:nowrap; box-shadow:0 1px 2px rgba(16,24,64,.04);
}
.btn:hover{border-color:#c8d2e6; background:#f7f9fd}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.55; cursor:not-allowed; transform:none}
.btn-primary{background:var(--grad-btn); color:#fff; border:none; box-shadow:0 8px 20px -8px rgba(61,90,241,.75)}
.btn-primary:hover{filter:brightness(1.07); background:var(--grad-btn); transform:translateY(-1px); box-shadow:0 12px 26px -8px rgba(61,90,241,.85)}
.btn-primary:active{transform:none; filter:brightness(.98)}
.btn-danger{background:#fff; color:var(--red); border-color:#fbd5d5}
.btn-danger:hover{background:#fef2f2; border-color:#fca5a5}
.btn-ghost{background:transparent; border-color:rgba(255,255,255,.16); color:#c3cfe9; box-shadow:none}
.btn-ghost:hover{background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.3); color:#fff}
.btn-sm{padding:6px 11px; font-size:12.5px; border-radius:9px}
.btn-block{width:100%}
.btn-link{border:none; background:none; color:var(--primary); padding:4px 7px}
.btn-link:hover{background:var(--primary-soft)}

.card{background:var(--card); border:1px solid rgba(228,233,242,.95); border-radius:var(--radius); box-shadow:var(--shadow)}
.card-h{display:flex; align-items:center; gap:10px; padding:16px 20px; border-bottom:1px solid #edf1f7}
.card-h h3{margin:0; font-size:15.5px; letter-spacing:.3px}
.card-h .sub{color:var(--ink-3); font-size:12.5px}
.card-h .right{margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap}
.card-b{padding:18px 20px}

.grid{display:grid; gap:16px}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
.mt{margin-top:15px}
@media(max-width:1250px){.g4{grid-template-columns:repeat(2,1fr)} .g3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.g4,.g3,.g2{grid-template-columns:1fr} .content{padding:14px 12px 30px}}

/* KPI 卡 */
.kpi{background:#fff; border:1px solid rgba(228,233,242,.95); border-radius:var(--radius); padding:17px 18px 15px; box-shadow:var(--shadow); position:relative; overflow:hidden; transition:.2s}
.kpi::before{content:""; position:absolute; left:0; top:0; height:3px; width:100%; background:var(--grad); opacity:.9}
.kpi::after{content:""; position:absolute; right:-46px; top:-56px; width:170px; height:170px; border-radius:50%; background:radial-gradient(circle, rgba(59,130,246,.16), transparent 68%); pointer-events:none}
.kpi:hover{transform:translateY(-2px); box-shadow:0 18px 40px -22px rgba(37,99,235,.55)}
.kpi .k-label{font-size:12.3px; color:var(--ink-3); display:flex; align-items:center; gap:6px; letter-spacing:.6px}
.kpi .k-value{font-size:27px; font-weight:700; margin:9px 0 4px; letter-spacing:-.6px; font-variant-numeric:tabular-nums}
.kpi .k-foot{font-size:12px; color:var(--ink-2)}
.kpi.green .k-value{color:var(--green)} .kpi.red .k-value{color:var(--red)}
.kpi.blue .k-value{color:var(--blue)} .kpi.amber .k-value{color:var(--amber)}
.kpi.purple .k-value{color:var(--purple)}

/* 表格 */
.tbl-wrap{overflow:auto; max-height:calc(100vh - 300px)}
table.tbl{width:100%; border-collapse:collapse; font-size:13.2px}
.tbl th{position:sticky; top:0; background:rgba(245,247,252,.95); -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); text-align:left; padding:11px 12px; border-bottom:1px solid var(--line); color:var(--ink-2); font-weight:600; font-size:12.4px; letter-spacing:.4px; white-space:nowrap; z-index:2}
.tbl td{padding:10px 12px; border-bottom:1px solid #f1f4f9; vertical-align:top; max-width:340px; word-break:break-word}
.tbl tbody tr{transition:background .12s}
.tbl tbody tr:hover{background:#f7f9ff}
.tbl td.nowrap,.tbl th.nowrap{white-space:nowrap}
.tbl .empty{padding:34px; text-align:center; color:var(--ink-3)}
.tbl a.link{display:inline-block; max-width:190px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom}
.row-acts{display:flex; gap:2px; white-space:nowrap}
.tfoot{display:flex; align-items:center; gap:12px; padding:11px 16px; border-top:1px solid var(--line); color:var(--ink-2); font-size:13px; flex-wrap:wrap}
.tfoot .pager{margin-left:auto; display:flex; gap:6px; align-items:center}

/* 徽章 */
.badge{display:inline-block; padding:3px 10px; border-radius:999px; font-size:11.8px; line-height:1.5; white-space:nowrap; border:1px solid transparent; font-weight:500}
.b-gray{background:#eef1f6; color:#4a5875}
.b-green{background:#e6f7ee; color:#067647}
.b-amber{background:#fff5e2; color:#b54708}
.b-red{background:#feecec; color:#b42318}
.b-blue{background:#eaf1ff; color:#1d4ed8}
.b-purple{background:#f2edff; color:#6941c6}
.b-cyan{background:#e4faff; color:#0e7490}
.role-badge{font-size:11.5px; padding:3px 10px; border-radius:999px; background:var(--primary-soft); color:#2563eb; font-weight:600}

/* 工具条 */
.toolbar{display:flex; gap:9px; align-items:center; flex-wrap:wrap; margin-bottom:14px}
.search{position:relative}
.search input{height:38px; border:1px solid var(--line); border-radius:11px; padding:0 12px 0 33px; width:250px; background:#fff; transition:.15s}
.search input:focus{outline:none; border-color:#3b82f6; box-shadow:0 0 0 4px rgba(59,130,246,.14)}
.search::before{content:"🔍"; position:absolute; left:10px; top:9px; font-size:14px; opacity:.7}
select.sel,input.inp-t,textarea.inp-t{
  height:38px; border:1px solid var(--line); border-radius:11px; padding:0 11px; background:#fff; min-width:120px;
}
textarea.inp-t{height:auto; padding:9px 11px; resize:vertical; min-height:74px; line-height:1.55; width:100%}
select.sel:focus,input.inp-t:focus,textarea.inp-t:focus{outline:none; border-color:#3b82f6; box-shadow:var(--ring)}
.spacer{margin-left:auto}
.chip-tabs{display:flex; gap:5px; flex-wrap:wrap; background:#e9eef7; border:none; border-radius:12px; padding:5px}
.chip-tabs button{border:none; background:none; padding:7px 15px; border-radius:9px; cursor:pointer; font-size:13.2px; color:var(--ink-2); font-weight:500; transition:.15s}
.chip-tabs button:hover{color:var(--ink)}
.chip-tabs button.on{background:linear-gradient(135deg,#2563eb,#6d5df6); color:#fff; box-shadow:0 6px 14px -6px rgba(61,90,241,.75)}

/* 表单 */
.form-grid{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:13px 16px}
.form-grid .full{grid-column:1/-1}
@media(max-width:640px){.form-grid{grid-template-columns:1fr}}
.field label{display:block; font-size:12.5px; color:var(--ink-2); margin-bottom:6px; letter-spacing:.3px}
.field label .req{color:var(--red); margin-left:2px}
.field .hint{font-size:11.5px; color:var(--ink-3); margin-top:5px; line-height:1.5}
.field input,.field select,.field textarea{
  width:100%; border:1px solid #dfe5f0; border-radius:10px; padding:10px 12px; background:#fff; transition:.15s;
}
.field input:focus,.field select:focus,.field textarea:focus{outline:none; border-color:#3b82f6; background:#fff; box-shadow:0 0 0 4px rgba(59,130,246,.13)}
.field .money-in{position:relative}
.field .money-in::before{content:"¥"; position:absolute; left:11px; top:9px; color:var(--ink-3)}
.field .money-in input{padding-left:25px}
.err-text{color:var(--red); font-size:12px; margin-top:5px}

/* 模态框 */
.modal-mask{position:fixed; inset:0; background:rgba(9,14,33,.55); -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px); display:flex; align-items:flex-start; justify-content:center; padding:5vh 16px 30px; z-index:100; overflow:auto; animation:fade .16s}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:#fff; border-radius:18px; width:100%; max-width:760px; box-shadow:0 44px 90px -34px rgba(10,16,36,.6); animation:pop .18s; max-height:90vh; display:flex; flex-direction:column}
.modal.sm{max-width:460px} .modal.lg{max-width:1020px}
@keyframes pop{from{transform:translateY(14px) scale(.985); opacity:0}to{transform:none; opacity:1}}
.modal-h{display:flex; align-items:center; gap:10px; padding:17px 22px; border-bottom:1px solid #edf1f7}
.modal-h h3{margin:0; font-size:16.5px; letter-spacing:.4px}
.modal-h .x{margin-left:auto; border:none; background:none; font-size:21px; cursor:pointer; color:var(--ink-3); line-height:1; padding:2px 6px; border-radius:7px}
.modal-h .x:hover{background:var(--bg); color:var(--ink)}
.modal-b{padding:20px 22px; overflow:auto}
.modal-f{display:flex; gap:9px; justify-content:flex-end; padding:15px 22px; border-top:1px solid #edf1f7; background:#fafbfd; border-radius:0 0 18px 18px; flex-wrap:wrap}
.modal-f .left{margin-right:auto}

/* Toast */
.toast-root{position:fixed; right:18px; top:70px; z-index:200; display:flex; flex-direction:column; gap:9px}
.toast{background:rgba(13,20,44,.94); color:#fff; padding:12px 16px; border-radius:12px; border-left:3px solid var(--accent); -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); box-shadow:0 16px 40px -14px rgba(10,16,36,.7); font-size:13.3px; animation:slidein .2s; max-width:360px}
.toast.ok{background:rgba(4,120,87,.95); border-left-color:#6ee7b7} .toast.err{background:rgba(185,28,28,.95); border-left-color:#fca5a5}
@keyframes slidein{from{transform:translateX(40px); opacity:0}to{transform:none; opacity:1}}

/* 待办 */
.todo-list{display:flex; flex-direction:column; gap:9px}
.todo-item{display:flex; gap:11px; align-items:flex-start; background:#fff; border:1px solid var(--line); border-radius:13px; padding:11px 13px; transition:.16s}
.todo-item:hover{border-color:#c9d5f5; box-shadow:0 12px 26px -16px rgba(37,99,235,.6); transform:translateY(-1px)}
.todo-item.done{opacity:.55; background:#f8fafc}
.todo-item.done .t-title{text-decoration:line-through}
.todo-check{width:20px; height:20px; border:1.6px solid #cbd5e1; border-radius:6px; cursor:pointer; flex:0 0 auto; margin-top:2px; background:#fff; display:flex; align-items:center; justify-content:center; font-size:13px; color:transparent}
.todo-check.on{background:var(--green); border-color:var(--green); color:#fff}
.t-body{flex:1; min-width:0}
.t-title{font-size:13.6px; font-weight:600}
.t-meta{font-size:12px; color:var(--ink-3); margin-top:4px; display:flex; gap:9px; flex-wrap:wrap; align-items:center}
.t-side{display:flex; gap:6px; align-items:center; flex-wrap:wrap; justify-content:flex-end}
.overdue{color:var(--red); font-weight:600}
.tag{font-size:11px; background:var(--bg); border:1px solid var(--line); color:var(--ink-2); padding:2px 7px; border-radius:6px}

/* 图表 */
.chart-box{width:100%}
.chart-box svg{width:100%; height:auto; display:block}
.legend{display:flex; gap:14px; flex-wrap:wrap; font-size:12.3px; color:var(--ink-2); margin-top:9px}
.legend i{display:inline-block; width:11px; height:11px; border-radius:3px; margin-right:5px; vertical-align:-1px}

/* 分布条 */
.dist-row{display:flex; align-items:center; gap:10px; margin-bottom:9px; font-size:13px}
.dist-row .nm{width:88px; color:var(--ink-2); flex:0 0 auto}
.dist-bar{flex:1; height:15px; background:#eef2f7; border-radius:8px; overflow:hidden}
.dist-bar i{display:block; height:100%; border-radius:8px; background:var(--grad); box-shadow:0 0 12px rgba(56,189,248,.45)}
.dist-row .vl{width:44px; text-align:right; color:var(--ink-2); font-variant-numeric:tabular-nums}

/* 空状态 */
.empty-state{text-align:center; color:var(--ink-3); padding:44px 20px}
.empty-state .es-ico{font-size:40px; opacity:.7}
.empty-state p{margin:10px 0 0; font-size:13.5px}

/* 管理后台 */
.perm-grid{display:flex; gap:14px; flex-wrap:wrap}
.perm-box{border:1px solid var(--line); border-radius:10px; padding:10px 12px; background:#f8fafc; min-width:170px}
.perm-box h5{margin:0 0 8px; font-size:12.5px; color:var(--ink-2)}
.perm-box label{display:flex; align-items:center; gap:7px; font-size:13px; padding:3px 0; cursor:pointer}
.log-item{display:flex; gap:11px; padding:9px 4px; border-bottom:1px dashed var(--line); font-size:13px; align-items:baseline; flex-wrap:wrap}
.log-item .ts{color:var(--ink-3); font-size:12px; font-variant-numeric:tabular-nums; white-space:nowrap}
.log-item .who{font-weight:600}
.log-item .act{background:var(--primary-soft); color:var(--primary); border-radius:6px; padding:1px 7px; font-size:11.5px}
.fld-editor{border:1px solid var(--line); border-radius:11px; padding:12px; background:#f8fafc; margin-bottom:10px}
.fld-row{display:grid; grid-template-columns:1.3fr .9fr .9fr auto; gap:8px; align-items:center}
.fld-row input,.fld-row select{height:34px; border:1px solid var(--line); border-radius:8px; padding:0 9px; background:#fff; width:100%}
.opts-in{margin-top:8px; display:flex; gap:7px; align-items:center; flex-wrap:wrap}
.opts-in input{flex:1; min-width:180px; height:34px; border:1px solid var(--line); border-radius:8px; padding:0 9px}

/* 跟进记录（客户） */
.follow-item{display:flex; gap:10px; border:1px solid var(--line); border-radius:10px; padding:10px 12px; margin-bottom:9px; background:#f8fafc}
.follow-item .fdate{font-weight:700; color:var(--primary); white-space:nowrap; font-size:12.8px}
.follow-item .fbody{flex:1; font-size:13.2px; line-height:1.6; white-space:pre-wrap}
.follow-item img{max-width:180px; border-radius:8px; display:block; margin-top:6px; border:1px solid var(--line)}
.follow-add{display:grid; grid-template-columns:150px minmax(0,1fr) auto; gap:9px; align-items:start}
@media(max-width:640px){.follow-add{grid-template-columns:1fr}}
.img-thumb{max-width:100%; border-radius:9px; border:1px solid var(--line); margin-top:7px}

/* 详情行 */
.kv{display:grid; grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); gap:11px}
.kv .k{font-size:11.8px; color:var(--ink-3)}
.kv .v{font-size:13.4px; margin-top:3px; word-break:break-word; white-space:pre-wrap}
.list-rows{display:flex; flex-direction:column; gap:8px}
.list-row{display:flex; gap:10px; align-items:center; background:#fff; border:1px solid var(--line); border-radius:12px; padding:10px 13px; font-size:13.3px; transition:.16s}
.list-row:hover{border-color:#c9d5f5; box-shadow:0 10px 24px -16px rgba(37,99,235,.55)}
.list-row .grow{flex:1; min-width:0}
.list-row .muted{color:var(--ink-3); font-size:12.2px}
.money-pos{color:var(--green); font-weight:600}
.money-neg{color:var(--red); font-weight:600}
.tab-pane{animation:fade .18s}
.notice{background:#fffbeb; border:1px solid #fde68a; color:#92400e; border-radius:11px; padding:11px 14px; font-size:13px; line-height:1.6}
.notice.info{background:var(--primary-soft); border-color:#d7e0ff; color:#3730a3}
.section-title{display:flex; align-items:center; gap:12px; margin:24px 0 14px}
.section-title h2{margin:0; font-size:17px; letter-spacing:.5px}
.section-title .line{flex:1; height:2px; border-radius:2px; background:linear-gradient(90deg, rgba(34,211,238,.85), rgba(99,102,241,.4) 55%, transparent)}
.section-title .sub{color:var(--ink-3); font-size:13px}
/* ============ 侧栏遮罩（移动端） ============ */
.side-mask{position:fixed; inset:0; background:rgba(15,23,42,.55); z-index:55; backdrop-filter:blur(2px)}

/* ============ 移动端适配（手机 / 平板竖屏） ============ */
@media (max-width:900px){
  .sidebar{
    position:fixed; z-index:60; left:0; top:0; bottom:0; height:100vh; height:100dvh;
    width:272px; flex-basis:272px; transform:translateX(-105%);
    transition:transform .22s ease; box-shadow:0 0 60px rgba(0,0,0,.45);
  }
  .app.side-open .sidebar{transform:none}
  .app.mini .sidebar{width:272px; flex-basis:272px}
  .app.mini .side-title,.app.mini .side-user-info,.app.mini .nav-label,
  .app.mini .nav-group-title,.app.mini .side-foot .btn{display:block}
  .app.mini .nav-label{display:inline}
  .app.mini .side-nav a{justify-content:flex-start}
  .app.mini .side-head{justify-content:flex-start}

  .content{padding:14px 12px calc(46px + env(safe-area-inset-bottom))}
  .topbar{padding:0 10px; gap:8px; height:54px}
  .crumb{font-size:14.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:42vw}

  .grid{gap:11px}
  .grid.g4,.grid.g3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid.g2{grid-template-columns:1fr}

  .kpi{padding:12px 13px; border-radius:12px}
  .kpi .k-value{font-size:20px; margin:6px 0 2px}
  .kpi::after{width:62px; height:62px; right:-18px; top:-18px}
  .kpi .k-foot{font-size:11.5px}
  .card{border-radius:12px}
  .card-h{padding:12px 13px}
  .card-b{padding:12px 13px}
  .section-title{margin:16px 0 11px}
  .section-title h2{font-size:15.5px}

  .chip-tabs{overflow-x:auto; flex-wrap:nowrap; -webkit-overflow-scrolling:touch; scrollbar-width:none}
  .chip-tabs::-webkit-scrollbar{display:none}
  .chip-tabs button{white-space:nowrap; flex:0 0 auto; padding:8px 13px}

  .toolbar{gap:7px; margin-bottom:12px}
  .toolbar .search{flex:1 1 100%}
  .toolbar .search input{width:100%}
  .toolbar input.inp-t,.toolbar select.sel{flex:1 1 42%; min-width:0}
  .toolbar .btn{flex:0 1 auto}

  .form-grid{grid-template-columns:1fr}
  input,select,textarea,button{font-family:inherit}
  input,select,textarea{font-size:16px}          /* 防 iOS 聚焦自动放大 */
  .btn{min-height:40px; padding:10px 15px}
  .btn-sm{min-height:34px; padding:7px 12px}
  .inp input{height:46px}

  .modal-mask{padding:10px 8px calc(10px + env(safe-area-inset-bottom)); align-items:flex-start}
  .modal{max-width:none; border-radius:14px; max-height:94vh}
  .modal-b{padding:14px}
  .modal-f{padding:12px 14px calc(12px + env(safe-area-inset-bottom))}
  .modal-f .btn{flex:1 1 40%}

  .kv{grid-template-columns:1fr 1fr; gap:9px}
  .follow-add{grid-template-columns:1fr}
  .fld-row{grid-template-columns:1fr; gap:7px}
  .fld-row > div:last-child{justify-content:flex-start !important}
  .login-screen{padding:16px 10px}
  .login-card{padding:26px 20px 20px; border-radius:18px}

  .todo-item{flex-wrap:wrap; padding:11px}
  .t-side{width:100%; justify-content:flex-start; padding-left:31px; margin-top:7px}
  .list-row{flex-wrap:wrap; padding:10px 11px}
  .list-row .grow{flex:1 1 100%}

  .tbl-wrap{max-height:none; overflow:visible}
  .notice{padding:10px 12px; font-size:12.6px}
}

/* 手机：表格改为卡片式（逐字段显示，无需左右拖动） */
@media (max-width:720px){
  .tbl,.tbl tbody,.tbl tr,.tbl td{display:block; width:100%}
  .tbl thead{display:none}
  .tbl tbody tr{
    background:#fff; border:1px solid var(--line); border-radius:12px;
    margin-bottom:10px; padding:5px 3px; box-shadow:0 2px 10px rgba(15,23,42,.05);
  }
  .tbl tbody tr:hover{background:#fff}
  .tbl td{
    display:flex; gap:14px; align-items:flex-start; justify-content:space-between;
    border:none; border-bottom:1px dashed #eef2f7; padding:7px 10px;
    max-width:none; text-align:right; word-break:break-word;
  }
  .tbl tbody tr td:last-child{border-bottom:none}
  .tbl td::before{
    content:attr(data-label); color:var(--ink-3); font-size:12px; font-weight:600;
    flex:0 0 auto; text-align:left; white-space:nowrap;
  }
  .tbl td.empty{
    display:block; text-align:center; border:none; padding:26px 12px; color:var(--ink-3);
  }
  .tbl td.empty::before{display:none}
  .tbl td .row-acts{justify-content:flex-end; flex-wrap:wrap}
  .tbl td a.link{max-width:56vw}
  .tbl td:has(img){flex-direction:column; align-items:flex-end; gap:6px}
  .tbl td:has(img) img{max-width:60vw}
  .tfoot{font-size:12.5px; gap:8px}
  .tfoot .pager{margin-left:0; width:100%; justify-content:flex-end}
}

@media (max-width:640px){
  .date-chip{display:none}
  #topUserName{display:none}
  .user-btn{padding:4px 6px}
  .kpi .k-value{font-size:19px}
}
@media (max-width:430px){
  .grid.g4,.grid.g3{grid-template-columns:1fr 1fr}
  .todo-txt{display:none}
  .kv{grid-template-columns:1fr}
  .login-card h1{font-size:20px}
  .login-roles{gap:5px}
  .role-chip{font-size:11.5px; padding:4px 8px}
  .t-meta{font-size:11.5px}
}

/* ============ 一键录入（智能体） ============ */
.agent-page{animation:rise .3s ease both}
.agent-grid{display:grid; gap:16px; grid-template-columns:minmax(0,1fr)}
@media (min-width:1250px){.agent-grid{grid-template-columns:minmax(320px,430px) minmax(0,1fr)}}
.agent-hero{
  display:flex; align-items:center; gap:16px; padding:20px 24px; border-radius:18px; color:#eaf2ff;
  position:relative; overflow:hidden; margin-bottom:16px;
  background:linear-gradient(115deg,#0b1230 0%, #16266b 58%, #1d3a8a 100%);
  box-shadow:0 22px 48px -24px rgba(29,58,138,.85);
}
.agent-hero::before{
  content:""; position:absolute; inset:0; opacity:.55; pointer-events:none;
  background-image:linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px);
  background-size:34px 34px;
}
.agent-hero::after{
  content:""; position:absolute; right:-70px; top:-90px; width:300px; height:300px; border-radius:50%; pointer-events:none;
  background:radial-gradient(circle, rgba(34,211,238,.4), transparent 70%);
}
.ah-ico{
  width:54px; height:54px; border-radius:15px; display:grid; place-items:center; font-size:27px; flex:0 0 auto; z-index:1;
  background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.2);
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
  box-shadow:0 10px 30px -10px rgba(34,211,238,.7);
}
.ah-txt{flex:1; min-width:0; z-index:1}
.ah-txt h2{margin:0 0 5px; font-size:19px; letter-spacing:1px}
.ah-txt p{margin:0; font-size:13px; color:#b9c9f2; line-height:1.65}
.ah-tags{display:flex; gap:7px; flex-wrap:wrap; z-index:1}
.ah-tags span{font-size:11.5px; padding:4px 11px; border-radius:999px; white-space:nowrap;
  background:rgba(56,189,248,.16); border:1px solid rgba(56,189,248,.35); color:#7dd3fc}

.mic-btn{
  display:flex; align-items:center; justify-content:center; gap:10px; width:100%; padding:16px; border-radius:14px;
  cursor:pointer; border:1px dashed rgba(59,130,246,.55);
  background:linear-gradient(135deg, rgba(37,99,235,.09), rgba(99,102,241,.14));
  color:#1d4ed8; font-size:15px; font-weight:600; transition:.18s;
}
.mic-btn:hover:not(:disabled){border-style:solid; border-color:#3b82f6; transform:translateY(-1px); box-shadow:0 14px 30px -16px rgba(37,99,235,.9)}
.mic-btn:disabled{opacity:.55; cursor:not-allowed}
.mic-btn .mic-ico{font-size:21px}
.mic-btn.listening{
  border-style:solid; border-color:#f43f5e; color:#e11d48;
  background:linear-gradient(135deg, rgba(244,63,94,.1), rgba(244,63,94,.17));
  animation:pulse 1.4s ease-in-out infinite;
}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(244,63,94,.4)}50%{box-shadow:0 0 0 13px rgba(244,63,94,0)}}

.live-box{
  display:flex; align-items:flex-start; gap:9px; margin-top:11px; padding:10px 13px; border-radius:11px;
  background:#0b1230; font-size:13px;
}
.live-box .dot{width:8px; height:8px; border-radius:50%; background:#f43f5e; box-shadow:0 0 9px #f43f5e; animation:blink 1s ease-in-out infinite; flex:0 0 auto; margin-top:5px}
@keyframes blink{50%{opacity:.25}}
.live-box .live-text{color:#c9d8ff; line-height:1.6; max-height:76px; overflow:auto; word-break:break-word}
.agent-text{width:100%; margin-top:12px; min-height:150px; border-radius:12px; line-height:1.75}
.agent-actions{display:flex; gap:9px; margin-top:12px; flex-wrap:wrap}
.mic-hint{margin-top:10px; font-size:12px; color:var(--ink-3); line-height:1.65}
.mic-hint.warn{color:#b54708}

.hits-box{display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; max-width:68%}
.hit-chip{font-size:11.5px; padding:3px 10px; border-radius:999px; background:rgba(34,211,238,.14); color:#0e7490; border:1px solid rgba(34,211,238,.4); font-weight:500}
.hit-chip.title{background:var(--primary-soft); color:#2563eb; border-color:transparent}
.hit-chip.warn{background:#fff5e2; color:#b54708; border-color:#fde68a}
.agent-foot{display:flex; gap:10px; align-items:center; padding:15px 20px; border-top:1px solid #edf1f7; background:#fafbfd; border-radius:0 0 16px 16px; flex-wrap:wrap}
.agent-foot .foot-hint{font-size:12px; color:var(--ink-3); margin-left:auto}
.agent-cta{position:relative}

@media (max-width:900px){
  .agent-hero{flex-direction:column; text-align:center; padding:18px 16px}
  .ah-tags{justify-content:center}
  .hits-box{max-width:100%; justify-content:flex-start}
  .card-h .hits-box{order:3; width:100%}
  .agent-foot{padding:13px 14px calc(13px + env(safe-area-inset-bottom))}
  .agent-foot .btn{flex:1 1 45%}
  .agent-foot .foot-hint{display:none}
  .agent-actions .btn{flex:1 1 auto}
}

/* ============ 滚动条 / 动效 ============ */
::-webkit-scrollbar{width:10px; height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#c4cee2; border-radius:8px; border:2px solid transparent; background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:#a9b6d0; border:2px solid transparent; background-clip:content-box}

@keyframes rise{from{opacity:0; transform:translateY(10px)} to{opacity:1; transform:none}}
.content > *{animation:rise .34s ease both}
.content > *:nth-child(2){animation-delay:.05s}
.content > *:nth-child(3){animation-delay:.1s}
.content > *:nth-child(4){animation-delay:.15s}
.content > *:nth-child(5){animation-delay:.18s}
.content > *:nth-child(6){animation-delay:.2s}

@media (prefers-reduced-motion: reduce){
  *{animation:none !important; transition:none !important}
}
