:root{--bg:#f5f7fb;--card:#ffffff;--ink:#1b2538;--muted:#657187;--line:#e3e8f0;--blue:#2468d9;--blue-bg:#e8f0ff;--blue-ink:#1e56bd;--danger:#c13d3d;--green:#1a8f5c;--amber:#b9770e;--sidebar:#17243a}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;color:var(--ink);background:var(--bg);font-size:15px;line-height:1.6}a{color:inherit;text-decoration:none}.shell{display:flex;min-height:100vh}.sidebar{width:210px;background:var(--sidebar);color:#dbe6f7;padding:22px 12px;display:flex;flex-direction:column;gap:6px;flex-shrink:0}.sidebar .brand{font-size:18px;color:#fff;padding:4px 10px 20px;font-weight:600}.sidebar a.nav{padding:10px 12px;border-radius:7px;color:inherit;cursor:pointer}.sidebar a.nav.active,.sidebar a.nav:hover{background:#2c4264;color:#fff}.main{flex:1 1;padding:26px 28px;max-width:1200px}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.topbar h1{margin:0;font-size:24px}.topbar .user{color:var(--muted);font-size:14px;display:flex;align-items:center;gap:12px}.btn{font:inherit;border:0;border-radius:7px;padding:9px 15px;cursor:pointer;background:var(--blue);color:#fff}a.btn{display:inline-block;text-decoration:none}.btn:hover{opacity:.92}.btn.ghost{background:transparent;color:var(--blue);border:1px solid #bfd0f6;padding:7px 12px}.btn.danger{background:transparent;color:var(--danger);border:1px solid #f0c4c4}.btn.danger,.btn.sm{padding:5px 10px;font-size:13px}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:14px;gap:14px;margin-bottom:18px}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:17px}.card .num{font-size:30px;font-weight:650;margin:6px 0}.muted{color:var(--muted);font-size:13px}.panel{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:18px;margin-top:16px}.panel h2{margin:0 0 14px;font-size:17px}table{width:100%;border-collapse:collapse}td,th{border-bottom:1px solid #eef1f5;padding:10px 12px;text-align:left;font-size:14px;vertical-align:top}th{font-weight:500;color:var(--muted)}.badge,th{white-space:nowrap}.badge{background:var(--blue-bg);color:var(--blue-ink);padding:3px 9px;border-radius:99px;font-size:12px;display:inline-block}.badge.done{background:#e8f7ef;color:var(--green)}.badge.overdue{background:#fdeeee;color:var(--danger)}.field{margin-bottom:12px}.field label{font-size:13px;color:#3f4c60;display:block;margin-bottom:5px}.field input,.field select,.field textarea{width:100%;padding:9px;border:1px solid #cdd6e4;border-radius:6px;font:inherit;background:#fff}.field textarea{min-height:70px}.form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px;gap:12px}.actions{display:flex;gap:10px;align-items:center;margin-top:14px}.msg{color:var(--muted);font-size:13px}.msg.err{color:var(--danger)}.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.toolbar input,.toolbar select{padding:8px;border:1px solid #cdd6e4;border-radius:6px;font:inherit}.toolbar .spacer{flex:1 1}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg)}.login-box{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:32px;width:360px}.login-box h1{font-size:20px;margin:0 0 4px}.login-box .sub{color:var(--muted);font-size:13px;margin-bottom:22px}@media (max-width:720px){.cards,.form-grid{grid-template-columns:1fr}.sidebar{width:64px}.sidebar .brand,.sidebar a.nav{font-size:0}}.role-tag{background:#eef1f5;color:var(--muted);font-size:11px;padding:2px 7px;border-radius:99px;margin-left:6px}.role-tag.admin{background:#fdf3e3;color:var(--amber)}.badge.stage-new{background:var(--blue-bg);color:var(--blue-ink)}.badge.stage-doing{background:#fdf3e3;color:var(--amber)}.badge.stage-converted{background:#e8f7ef;color:var(--green)}.badge.stage-lost{background:#f1f2f4;color:var(--muted)}tr.child-row td:first-child{padding-left:34px;position:relative}tr.child-row td:first-child:before{content:"└";position:absolute;left:16px;color:#b6c1d2}.checks{display:flex;flex-wrap:wrap;gap:8px}.checks label{display:inline-flex;align-items:center;gap:5px;font-size:13px;border:1px solid #cdd6e4;border-radius:99px;padding:4px 11px;cursor:pointer;background:#fff}.checks label.on{border-color:var(--blue);background:var(--blue-bg);color:var(--blue-ink)}.checks input{width:auto;margin:0}.funnel{display:flex;flex-direction:column;gap:8px}.funnel-row{display:flex;align-items:center;gap:12px}.funnel-row .fname{width:110px;font-size:13px;color:#3f4c60;text-align:right;flex-shrink:0}.funnel-row .fbar-wrap{flex:1 1;background:#eef1f5;border-radius:6px;height:26px;overflow:hidden}.funnel-row .fbar{height:100%;background:linear-gradient(90deg,#2468d9,#5c92ec);border-radius:6px;min-width:2px;transition:width .3s}.funnel-row .fnum{width:90px;font-size:13px;color:var(--muted);flex-shrink:0}.kpi-sub{font-size:12px;color:var(--muted);margin-top:2px}.todo-banner{background:#fdf3e3;border:1px solid #f5ddae;color:#8a5a06;border-radius:8px;padding:10px 14px;margin-bottom:14px;font-size:14px}.todo-banner b{color:var(--danger)}.cards4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:14px;gap:14px;margin-bottom:18px}@media (max-width:900px){.cards4{grid-template-columns:repeat(2,1fr)}}.mbadge{display:inline-block;padding:2px 9px;border-radius:99px;font-size:12px;white-space:nowrap}.m-电话{background:#e8f0ff;color:#1e56bd}.m-微信{background:#e8f7ef;color:#1a8f5c}.m-邮件{background:#f3e9fd;color:#7a3ec9}.m-视频会议{background:#e0f4f6;color:#0e7f8a}.m-上门拜访{background:#fdeee2;color:#b95c0e}.m-其他{background:#f1f2f4;color:#657187}.detail-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:4px}.detail-head h1{margin:0;font-size:24px}.meta-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:10px 20px;gap:10px 20px}.meta-grid .k{font-size:12px;color:var(--muted)}.meta-grid .v{font-size:14px;margin-top:2px;word-break:break-all}@media (max-width:800px){.meta-grid{grid-template-columns:1fr 1fr}}.timeline{position:relative;padding-left:22px}.timeline:before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--line)}.tl-item{position:relative;padding:0 0 18px 6px}.tl-item:before{content:"";position:absolute;left:-21px;top:7px;width:10px;height:10px;border-radius:50%;background:var(--blue);border:2px solid #fff;box-shadow:0 0 0 2px var(--line)}.tl-time{font-size:12px;color:var(--muted);display:flex;gap:8px;align-items:center;flex-wrap:wrap}.tl-content{margin-top:4px;font-size:14px;background:#fafbfd;border:1px solid #eef1f5;border-radius:8px;padding:10px 12px}.tl-next{margin-top:6px;font-size:12px;color:var(--amber)}.cal-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}.cal-head .title{font-size:18px;font-weight:600;min-width:170px}.cal-grid{display:grid;grid-gap:6px;gap:6px}.cal-grid.month{grid-template-columns:repeat(7,1fr)}.cal-cell{border:1px solid var(--line);border-radius:8px;min-height:108px;padding:6px;background:#fff}.cal-cell.dim{background:#fafbfd}.cal-cell.today{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue) inset}.cal-cell .dnum{font-size:12px;color:var(--muted);margin-bottom:4px}.cal-cell.today .dnum{color:var(--blue);font-weight:700}.cal-evt{font-size:11px;border-radius:5px;padding:1px 5px;margin-bottom:2px;cursor:pointer;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fff}.cal-evt.ov{outline:2px solid var(--danger)}.more-link{font-size:11px;color:var(--blue);cursor:pointer;display:inline-block;padding:1px 5px;border-radius:4px;font-weight:600}.more-link:hover{background:#eaf1fd}.daypop-mask{position:fixed;inset:0;background:rgba(15,23,42,.35);z-index:80;display:flex;align-items:center;justify-content:center}.daypop{background:#fff;border-radius:12px;width:460px;max-width:92vw;max-height:72vh;overflow:auto;padding:16px 18px;box-shadow:0 12px 40px rgba(15,23,42,.25)}.daypop h3{margin:0 0 10px;font-size:16px}.daypop-item{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;padding:8px 10px;border-radius:8px;cursor:pointer}.daypop-item:hover{background:#f5f7fa}.daypop-item .tm{font-weight:700;width:46px;flex-shrink:0}.daypop-item .dot2{width:8px;height:8px;border-radius:50%;flex-shrink:0}.week-cols{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:6px;gap:6px}.week-col{border:1px solid var(--line);border-radius:8px;background:#fff;min-height:300px;padding:6px}.week-col.today{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue) inset}.week-col .wh{text-align:center;font-size:13px;color:var(--muted);border-bottom:1px solid #eef1f5;padding:4px 0 6px;margin-bottom:6px}.week-col.today .wh{color:var(--blue);font-weight:700}.week-col .cal-evt{white-space:normal;padding:5px 7px}.day-row{display:flex;border-bottom:1px solid #eef1f5;min-height:46px}.day-row .h{width:64px;flex-shrink:0;font-size:12px;color:var(--muted);padding:6px 8px;text-align:right}.day-row .slot{flex:1 1;padding:4px 6px;display:flex;flex-wrap:wrap;gap:5px;align-content:flex-start}.day-wrap{border:1px solid var(--line);border-radius:8px;background:#fff;overflow:hidden}.evt-card{border-radius:6px;padding:5px 9px;font-size:13px;color:#fff;cursor:pointer;max-width:320px}.evt-card .t{font-weight:700;margin-right:6px}.evt-card.ov{outline:2px solid var(--danger)}.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--muted);align-items:center}.legend .dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}.ev-电话{background:#2468d9}.ev-微信{background:#1a8f5c}.ev-邮件{background:#7a3ec9}.ev-视频会议{background:#0e8a96}.ev-上门拜访{background:#d9730d}.ev-其他{background:#8a93a5}.fu-expand-row td{background:#f8fafc;padding:0!important}.fu-expand{padding:8px 14px;display:flex;flex-direction:column;gap:4px}.fu-line{display:flex;align-items:center;gap:8px;font-size:12px}.fu-line .t{color:var(--muted);flex-shrink:0}.fu-line .c{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:520px}.fu-line .n{color:var(--blue);flex-shrink:0}.fu-all{font-size:12px;color:var(--blue);margin-top:2px}.wl-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}.wl-name{width:72px;flex-shrink:0;font-size:13px;font-weight:600;text-align:right}.wl-bars{flex:1 1;display:flex;flex-direction:column;gap:3px}.wl-bar{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted)}.wl-bar .bar{height:14px;border-radius:3px;min-width:2px}.wl-bar .bar.call{background:#2468d9}.wl-bar .bar.text{background:#1a8f5c}.wl-bar .bar.meeting{background:#e8890c}.wl-legend{display:flex;gap:14px;font-size:12px;color:var(--muted);margin-bottom:12px}.wl-legend .dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}