.db-rolenote{background:#eff4ff;border:1px solid #c7dbff;border-radius:10px;padding:10px 16px;font-size:12.5px;color:#1e40af;margin-bottom:14px;line-height:1.7}.db-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:16px}.db-kpi{background:#fff;border:1px solid #e6eaf2;border-radius:10px;padding:14px 16px;cursor:pointer;transition:box-shadow .15s}.db-kpi:hover{box-shadow:0 2px 10px #00000012}.db-kpi .ant-statistic-title{font-size:13px;color:#6b7280;margin-bottom:2px}.db-kpi .ant-statistic-content{font-size:25px;font-weight:700;line-height:1.2}.db-kpi__desc{font-size:12px;color:#6b7280;margin-top:4px}.db-panel{background:#fff;border:1px solid #e6eaf2;border-radius:10px;padding:16px 18px;margin-bottom:16px}.db-panel__title{font-size:15px;font-weight:600;margin-bottom:4px}.db-panel__sub{font-size:12px;color:#6b7280;margin-bottom:12px}.db-waves{display:flex;flex-wrap:wrap;gap:12px}.db-wave-card{flex:0 0 auto;width:180px;border:1px solid #e6eaf2;border-radius:10px;padding:12px 14px;background:#f8fafc;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .05s}.db-wave-card:hover{border-color:#1677ff;box-shadow:0 2px 8px #1677ff26}.db-wave-card:active{transform:translateY(1px)}.db-wave-card:focus-visible{outline:2px solid #1677ff;outline-offset:1px}.db-wave-card__title{font-size:18px;font-weight:700;color:#1f2937;line-height:1.2}.db-wave-card__meta{margin-top:4px;font-size:12px;color:#6b7280}.db-wave-card__node{margin-top:8px}.db-wave-card__bar{display:flex;width:100%;height:8px;margin-top:8px;border-radius:4px;overflow:hidden;background:#e5e7eb}.db-wave-card__bar-risk{background:#ef4444}.db-wave-card__bar-safe{background:#22c55e}.db-wave-card__risk{margin-top:6px;font-size:12px;color:#6b7280}.db-waves-empty{border:1px dashed #d0d7e6;border-radius:10px;padding:18px 16px;text-align:center;color:#9aa3b2;font-size:13px}.db-matrix{width:100%;border-collapse:collapse;table-layout:fixed}.db-matrix th,.db-matrix td{border:1px solid #e6eaf2;padding:8px 4px;text-align:center;font-size:12.5px}.db-matrix th{background:#f8fafc;font-weight:600;color:#374151}.db-matrix__rowhead{white-space:nowrap}.db-matrix td.db-cell{cursor:pointer;font-weight:600}.db-matrix td.db-cell:hover{outline:2px solid #2563eb}.db-matrix td.db-c0{color:#c4cbd6;font-weight:400}.db-matrix td.db-cH{background:#fef2f2;color:#dc2626}.db-matrix td.db-cL{background:#ecfdf5;color:#059669}.db-matrix__legend{display:flex;gap:16px;font-size:12px;color:#6b7280;margin-top:10px}.db-matrix__legend i{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:-1px}.db-confirm__item{display:flex;gap:12px;align-items:flex-start;border:1px solid #e6eaf2;border-radius:10px;padding:10px 14px;margin-bottom:8px}.db-confirm__role{flex:0 0 96px;font-size:12px;font-weight:600;color:#1e40af;background:#eff4ff;border-radius:6px;padding:4px 8px;text-align:center;white-space:nowrap}.db-confirm__body{flex:1;min-width:0}.db-confirm__head{font-size:13px;font-weight:600}.db-confirm__oid{color:#2563eb}.db-confirm__node{font-size:12px;color:#6b7280;margin:2px 0}.db-confirm__detail{font-size:12.5px;color:#374151}.db-confirm__action{flex:0 0 auto;align-self:center}.db-confirm__ok{color:#059669;font-size:13px;padding:8px 0}.ct-* 冲突。 * 染色对齐 nodeHealth：done 正常绿 / risked 淡绿(曾有风险) / risk 红(当前卡点) / current 蓝(进行中) / pending 灰(未到)。 * Source: docs/requirements/01-lahuo-followup/requirements.md#r0152 · docs/design/01-detail-drawer-rework.md (MR-WD-7) */ .nf-tl{display:flex;flex-direction:column;gap:8px;padding:4px 2px 2px}.nf-stage{border:1px solid #e6eaf2;border-radius:10px;background:#fff;overflow:hidden}.nf-stage.is-current-stage{border-color:#91caff;box-shadow:0 0 0 2px #1677ff1f}.nf-stage__hd{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;background:#fafbfe;cursor:pointer;font-size:13px;text-align:left}.nf-stage.is-current-stage>.nf-stage__hd{background:#eef6ff}.nf-stage__caret{flex:0 0 auto;color:#6b7280;font-size:11px;width:12px}.nf-stage__name{font-weight:700;color:#1f2937}.nf-stage__range{color:#9ca3af;font-size:12px}.nf-stage__sum{margin-left:auto;font-size:12px;font-weight:600;padding:1px 8px;border-radius:10px;background:#f0f1f4;color:#6b7280}.nf-stage__sum--current{background:#e6f4ff;color:#1677ff}.nf-stage__sum--risk{background:#fff1f0;color:#dc2626}.nf-stage__sum--done{background:#f6ffed;color:#389e0d}.nf-stage__sum--risked{background:#fcfff5;color:#5b8c00}.nf-stage__sum--pending{background:#f4f4f6;color:#9ca3af}.nf-stage__body{padding:8px 10px 10px;border-top:1px solid #eef0f5}.nf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px}.nf-node{border:1.5px solid #e6eaf2;border-radius:10px;padding:8px 10px;background:#fff;font-size:12.5px;min-width:0}.nf-node__nm{font-weight:700;line-height:1.4;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.nf-node__dot{flex:0 0 auto;width:10px;height:10px;border-radius:50%}.nf-node__tag{font-weight:700;font-size:12px}.nf-node__times{display:flex;flex-wrap:wrap;gap:2px 12px;margin-top:3px;color:#6b7280}.nf-node__proj{color:#0e7490}.nf-node__act{color:#111827;font-weight:600}.nf-node__plan,.nf-node__proj,.nf-node__act{cursor:help;border-bottom:1px dotted #cbd5e1}.nf-tip{min-width:200px;max-width:320px;font-size:12px;line-height:1.6}.nf-tip__title{font-weight:600;margin-bottom:4px}.nf-tip__row{display:flex;justify-content:space-between;gap:12px}.nf-tip__k{color:#cbd5e1;white-space:nowrap}.nf-tip__v{text-align:right}.nf-node__seg{margin-top:4px;padding-top:4px;border-top:1px dashed #eef0f5;font-size:11px;color:#6b7280}.nf-seg__act{font-weight:600;color:#059669}.nf-seg__act.is-late{color:#dc2626}.nf-node--done{border-color:#b7eb8f;background:#f6ffed}.nf-node--risked{border-color:#d9f7be;background:#fcfff5}.nf-node--risk{border-color:#ffa39e;background:#fff1f0}.nf-node--current{border-color:#91caff;background:#e6f4ff}.nf-node--pending{border-style:dashed;color:#9ca3af}.nf-node.is-current{border-width:2px;box-shadow:0 0 0 3px #1677ff26}.nf-node--risk.is-current{box-shadow:0 0 0 3px #ffccc7}.nf-today{border:1px solid #ffccc7;background:#fff1f0;border-radius:10px;padding:10px 14px;font-size:12.5px;margin-top:12px;line-height:1.8}.nf-today.is-none{border-color:#b7eb8f;background:#f6ffed}.nf-today__list{margin:4px 0 0;padding-left:20px}.nf-legend{display:flex;gap:16px;font-size:12px;color:#666;margin-bottom:8px;flex-wrap:wrap}.nf-legend__item{display:inline-flex;align-items:center;gap:4px}.nf-legend__dot{width:12px;height:12px;border-radius:50%;display:inline-block}.ft-orders-card.ant-card{border-radius:10px;border:1px solid #e8edf5;box-shadow:0 1px 3px #0f1f3d0f}.ft-orders-role{font-size:12px;color:#64748b}.ft-tasks-card.ant-card{border-radius:10px;border:1px solid #e8edf5;box-shadow:0 1px 3px #0f1f3d0f}.ft-tasks-head{display:flex;align-items:baseline;gap:12px;margin-bottom:4px}.ft-tasks-title{margin:0;font-size:18px;font-weight:700;color:#1e293b}.ft-tasks-role{font-size:12px;color:#64748b}.ft-tasks-sub{font-size:12.5px;color:#64748b;line-height:1.7;margin-bottom:10px}.ft-tasks-note{color:#94a3b8}.ft-tasks-bar{display:flex;align-items:center;gap:12px;margin-bottom:14px}.ft-tasks-bar__sp{flex:1}.ft-tasks-stat{font-size:13px;font-weight:600;color:#334155}.ft-taskgroups{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px}.ft-tg{border:1px solid #e8edf5;border-radius:10px;padding:12px 14px;background:#fff}.ft-tg.is-active{border-color:#93b4f5;box-shadow:0 0 0 2px #2563eb1f}.ft-tg__head{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:14px}.ft-tg__role{font-weight:700;color:#1e293b}.ft-tg__active-tag{font-size:11px;color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe;border-radius:99px;padding:1px 8px}.ft-tg__cnt{margin-left:auto;font-size:12px;color:#64748b;font-weight:500}.ft-tg__overflow{font-size:12px;color:#94a3b8;padding:6px 2px 0}.ft-tg__buckets{display:flex;flex-direction:column;gap:8px}.ft-bucket{width:100%;display:flex;align-items:center;gap:8px;border:1px solid #e8edf5;border-left-width:3px;border-radius:8px;padding:8px 12px;background:#f8fafc;cursor:pointer;font-size:13px;text-align:left;transition:background .15s,border-color .15s}.ft-bucket:hover{background:#eef2f9;border-color:#cbd5e1}.ft-bucket:focus-visible{outline:2px solid #2563eb;outline-offset:1px}.ft-bucket.is-open{background:#fff}.ft-bucket__caret{flex:0 0 12px;color:#94a3b8;font-size:11px}.ft-bucket__label{flex:1;min-width:0;font-weight:600;color:#1e293b}.ft-bucket__cnt{flex:0 0 auto;min-width:22px;text-align:center;font-weight:700;font-size:12px;border-radius:99px;padding:1px 8px;background:#eff6ff;color:#2563eb}.ft-bucket.is-high{border-left-color:#dc2626}.ft-bucket.is-high .ft-bucket__cnt{background:#fef2f2;color:#dc2626}.ft-bucket.is-warn{border-left-color:#d97706}.ft-bucket.is-warn .ft-bucket__cnt{background:#fffbeb;color:#d97706}.ft-bucket.is-closed{border-left-color:#cbd5e1;opacity:.78}.ft-bucket.is-closed .ft-bucket__cnt{background:#f1f5f9;color:#64748b}.ft-bucket__rows{padding:8px 0 2px 10px}.ft-bucket__rows .ft-task:last-child{margin-bottom:0}.ft-task{border:1px solid #e8edf5;border-left-width:3px;border-radius:8px;padding:9px 12px;margin-bottom:8px;display:flex;gap:12px;align-items:flex-start;cursor:pointer;transition:background .15s,border-color .15s}.ft-task:hover{background:#f8faff;border-color:#cbd5e1}.ft-task:focus-visible{outline:2px solid #2563eb;outline-offset:1px}.ft-task.is-high{border-left-color:#dc2626}.ft-task.is-warn{border-left-color:#d97706}.ft-task.is-closed{border-left-color:#cbd5e1;opacity:.62}.ft-task__role{flex:0 0 64px;text-align:center;display:flex;flex-direction:column;gap:3px}.ft-task__sev{font-size:12px;font-weight:600;border-radius:6px;padding:5px 4px;background:#eff6ff;color:#2563eb}.ft-task.is-high .ft-task__sev{background:#fef2f2;color:#dc2626}.ft-task.is-warn .ft-task__sev{background:#fffbeb;color:#d97706}.ft-task.is-closed .ft-task__sev{background:#f1f5f9;color:#64748b}.ft-task__person{font-size:11px;color:#64748b}.ft-task__body{flex:1;min-width:0}.ft-task__act{font-weight:600;font-size:13px;color:#1e293b}.ft-task__meta{font-size:12px;color:#64748b;margin-top:3px;display:flex;flex-wrap:wrap;gap:5px}.ft-task__oid{color:#2563eb;font-weight:600}.ft-task__sep{color:#cbd5e1}.ft-task__due{flex:0 0 auto;text-align:right;font-size:12px;white-space:nowrap;color:#475569}.ft-task__due-row{line-height:1.6}.ft-task__due-empty{color:#94a3b8}.ft-bucket__more{flex:0 0 auto;font-size:11px;color:#94a3b8}.ft-bucket.is-open .ft-bucket__more{color:#2563eb;font-weight:600}.ft-task-detail{margin-top:16px;border:1px solid #e8edf5;border-radius:10px;padding:12px 14px;background:#fff}.ft-task-detail__head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.ft-task-detail__title{font-weight:700;font-size:14px;color:#1e293b}.ft-task-detail__cnt{font-size:12px;color:#64748b;font-weight:500}.ft-task-detail__close{border:1px solid #e2e8f0;background:#f8fafc;border-radius:6px;padding:3px 10px;font-size:12px;color:#475569;cursor:pointer}.ft-task-detail__close:hover{background:#eef2f9;border-color:#cbd5e1}.ft-task-detail__pager{display:flex;justify-content:flex-end;margin-top:10px}body{margin:0}.ct-app{min-height:100vh;background:#f5f7fa}.ct-header{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:14px;height:58px;padding:0 20px;background:#0f1f3d;color:#fff}.ct-title{margin:0;font-size:16px;font-weight:600;white-space:nowrap}.ct-tag{font-size:11px;background:#ffffff26;padding:2px 8px;border-radius:4px;white-space:nowrap}.ct-nav{display:flex;gap:2px}.ct-nav__tab{color:#cbd5e1;padding:8px 12px;font-size:13.5px;border-radius:6px;white-space:nowrap;text-decoration:none}.ct-nav__tab:hover{color:#fff}.ct-nav__tab.is-on{background:#ffffff2e;color:#fff;font-weight:600}.ct-rolebar{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:12px;color:#cbd5e1}.ct-rolebar__user{display:inline-flex;align-items:center;gap:6px;padding-left:8px;margin-left:4px;border-left:1px solid #3b5a82;white-space:nowrap;color:#fff}.ct-rolebar__userrole{background:#1e3a5f;border:1px solid #3b5a82;border-radius:10px;padding:1px 8px;font-size:12px;color:#cbd5e1}.ct-content{padding:24px}.ft-timeline{display:flex;gap:8px;overflow-x:auto;padding:8px 0 16px}.ft-timeline__node{flex:0 0 120px;text-align:center;position:relative}.ft-timeline__node:not(:last-child):after{content:"";position:absolute;top:14px;right:-8px;width:16px;height:2px;background:#e8e8e8}.ft-timeline__node.is-current{font-weight:600}.ft-timeline__dot{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;color:#fff;font-size:12px}.ft-timeline__label{margin-top:6px;font-size:13px}.ft-timeline__meta{margin-top:4px;font-size:11px;line-height:1.6;color:#555}.ft-legend{display:flex;gap:16px;font-size:12px;color:#666;margin-bottom:4px}.ft-legend__item{display:inline-flex;align-items:center;gap:4px}.ft-legend__dot{width:12px;height:12px;border-radius:50%;display:inline-block}.ft-wave{font-size:12px;color:#1f2937}.ft-nodes__legend{display:flex;gap:16px;padding:2px 0 8px;font-size:12px;color:#6b7280}.ft-nodes__legend-item{display:inline-flex;align-items:center;gap:5px}.ft-nodes__dot{width:10px;height:10px;border-radius:2px;display:inline-block}.ft-nodes__dot--safe{background:#1677ff}.ft-nodes__dot--risk{background:#ff4d4f}.ft-nodes__row{display:flex;align-items:center;gap:12px;padding:6px 0;cursor:pointer;border-bottom:1px dashed #f0f0f0}.ft-nodes__row:hover{background:#fafafa}.ft-nodes__name{flex:0 0 150px;font-size:13px}.ft-nodes__track{flex:1;height:12px;background:#f0f0f0;border-radius:6px;overflow:hidden}.ft-nodes__fill{height:100%;display:flex;border-radius:6px;overflow:hidden}.ft-nodes__seg{height:100%}.ft-nodes__seg--safe{background:#1677ff}.ft-nodes__seg--risk{background:#ff4d4f}.ft-nodes__count{flex:0 0 40px;text-align:right;font-variant-numeric:tabular-nums;font-weight:600}.ft-nodes__safe{flex:0 0 80px;text-align:right;font-size:12px;color:#1677ff;font-variant-numeric:tabular-nums}.ft-nodes__risk{flex:0 0 90px;text-align:right}.ft-heat{border-collapse:collapse;width:100%;font-size:12px}.ft-heat th,.ft-heat td{border:1px solid #f0f0f0;padding:6px 10px;text-align:center}.ft-heat__rowhead{text-align:left;white-space:nowrap}.ft-orderbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}.ft-orderbar__sp{flex:1}.ft-orderbar__sel{font-size:12px;color:#8c8c8c}.ft-oid{color:#1677ff;font-weight:600;white-space:nowrap}.ft-sub{font-size:12px;color:#8c8c8c;margin-top:2px}.ft-muted{color:#c4cbd6}.ft-pill{display:inline-block;padding:1px 8px;border-radius:99px;font-size:12px;font-weight:600;white-space:nowrap}.ft-pill--risk{background:#fef2f2;color:#dc2626}.ft-pill--ok{background:#ecfdf5;color:#059669}.ft-pill--node{background:#eff4ff;color:#2563eb;font-weight:500}.ft-pill--muted{background:#f3f4f6;color:#8c8c8c;font-weight:500}.ft-stuck{display:flex;flex-direction:column;gap:2px;line-height:1.3}.ft-stuck__node{display:inline-block;align-self:flex-start;padding:0 6px;border-radius:99px;background:#fef2f2;color:#dc2626;font-size:12px;font-weight:600;white-space:nowrap}.ft-stuck__risks{font-size:12px;color:#b91c1c;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:184px}.ft-stuck__owner{font-size:11px;color:#8c8c8c}.ft-qty{font-size:13px;color:#1f2937;font-variant-numeric:tabular-nums}.ft-listing{display:inline-flex;flex-direction:column;align-items:center;line-height:1.3}.ft-listing__date{font-size:13px;color:#1f2937}.ft-listing__delay{margin-top:2px;font-size:12px;font-weight:700;color:#cf1322}.ct-gate{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#0f1f3d;padding:24px}.ct-gate-card{width:360px;max-width:100%;box-shadow:0 8px 32px #00000040}.ct-gate-tip{margin:0 0 14px;color:#595959}.ct-gate-error{margin-top:8px;color:#ff4d4f;font-size:13px}.ct-login__dept{height:40px;border:1px solid #d9d9d9;border-radius:6px;padding:0 11px;font-size:14px;background:#fff}
