:root{color:#17212b;background:#f6f8fb;font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh;background:#f6f8fb}.topbar{position:sticky;top:0;z-index:40;display:grid;grid-template-columns:300px 1fr auto;align-items:center;height:68px;border-bottom:1px solid #d8e0ea;background:#fffffff5;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.product-area{display:flex;align-items:center;gap:12px;padding-left:22px}.brand-mark{position:relative;display:grid;place-items:center;width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,transparent 0 42%,#0ea5e9 43% 58%,transparent 59%),linear-gradient(135deg,#24d6b3 0 45%,#2563eb 46% 100%);color:#fff;box-shadow:0 8px 18px #2563eb29}.brand-mark svg{filter:drop-shadow(0 1px 1px rgba(15,23,42,.28))}.product-area h1{margin:0;font-size:20px;line-height:1.1;letter-spacing:0}.product-area p{margin:4px 0 0;color:#66758a;font-size:12px}.top-tabs{display:flex;justify-content:center}.top-tabs button{min-width:104px;height:42px;border:1px solid #d5dee8;border-right:0;background:#fff;color:#2e3a49;font-weight:650}.top-tabs button:first-child{border-radius:8px 0 0 8px}.top-tabs button:last-child{border-right:1px solid #d5dee8;border-radius:0 8px 8px 0}.top-tabs button.active{position:relative;border-color:#8ab7ff;background:#f1f7ff;color:#1168e8;box-shadow:inset 0 0 0 1px #8ab7ff}.top-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding-right:20px;color:#465568;font-size:14px}.sync-pill,.toolbar-button{display:inline-flex;align-items:center;gap:7px;min-height:34px;border:1px solid #d7e1ec;border-radius:8px;background:#fff;color:#405166}.sync-pill{padding:0 11px}.sync-pill svg{color:#22c55e}.sync-pill.slim{min-width:72px}.toolbar-button{border-color:transparent;padding:0 7px}.toolbar-button:hover{border-color:#d7e1ec}.app-grid{display:grid;grid-template-columns:132px minmax(0,1fr);min-height:calc(100vh - 68px)}.side-nav{display:flex;flex-direction:column;justify-content:space-between;border-right:1px solid #d8e0ea;background:#fff}.nav-list{display:grid;gap:8px;padding:48px 12px 16px}.nav-list button,.collapse-nav{display:flex;align-items:center;gap:10px;min-height:46px;border:0;border-radius:8px;background:transparent;color:#536174;font-weight:650}.nav-list button{padding:0 13px}.nav-list button.active{background:#eaf3ff;color:#1168e8}.collapse-nav{margin:0 12px 18px;padding:0 12px}.risk-workspace{min-width:0}.calendar-page{min-width:0;min-height:calc(100vh - 68px);background:#fff}.calendar-actionbar{display:flex;align-items:center;gap:10px;min-height:44px;padding:0 14px;border-bottom:1px solid #d8e0ea;background:#fff;color:#405166;font-size:14px}.calendar-actionbar button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:30px;padding:0 9px;border:0;border-radius:6px;background:transparent;color:#405166;white-space:nowrap}.calendar-actionbar button:hover,.calendar-actionbar button:nth-child(2),.calendar-actionbar button:nth-child(4),.calendar-actionbar button:nth-child(5){background:#f0f4ff;color:#2458b8}.calendar-link-action{color:#1677ff!important;font-weight:750}.calendar-spacer{flex:1}.calendar-frame{--task-col: 350px;--owner-col: 160px;--day-width: 66px;--timeline-days: 45;display:grid;grid-template-columns:calc(var(--task-col) + var(--owner-col)) calc(var(--day-width) * var(--timeline-days));align-content:start;height:calc(100vh - 112px);overflow:auto;background:#fff;cursor:grab;overscroll-behavior:contain;scrollbar-color:#aeb9c8 #eef3f8;scrollbar-width:thin;touch-action:pan-x pan-y;-webkit-user-select:none;user-select:none}.calendar-frame::-webkit-scrollbar{width:12px;height:12px}.calendar-frame::-webkit-scrollbar-track{background:#eef3f8}.calendar-frame::-webkit-scrollbar-thumb{border:3px solid #eef3f8;border-radius:999px;background:#aeb9c8}.calendar-frame.is-dragging{cursor:grabbing}.calendar-frame button,.calendar-frame input,.calendar-frame select,.calendar-frame textarea{-webkit-user-select:none;user-select:none}.calendar-head-left,.calendar-head-right{position:sticky;top:0;z-index:8;background:#fff}.calendar-head-left{left:0;display:grid;grid-template-columns:var(--task-col) var(--owner-col);min-height:86px;border-right:1px solid #d8e0ea;border-bottom:1px solid #d8e0ea;box-shadow:8px 0 14px #0f172a0a}.calendar-head-left>div{display:flex;align-items:end;padding:0 12px 12px;border-right:1px solid #d8e0ea;color:#405166;font-size:13px;font-weight:750}.calendar-head-left>div:last-child{border-right:0}.calendar-head-right{min-width:calc(var(--day-width) * var(--timeline-days));border-bottom:1px solid #d8e0ea}.calendar-month-row{display:grid;grid-template-columns:auto auto 30px 30px 48px 48px minmax(160px,1fr) repeat(5,34px);align-items:center;gap:8px;height:42px;padding:0 12px;border-bottom:1px solid #eef2f6}.calendar-month-row strong{font-size:14px}.calendar-month-row button{height:28px;border:1px solid #d7e1ec;border-radius:6px;background:#fff;color:#536174}.calendar-month-row button.active{border-color:#8ab7ff;background:#eaf3ff;color:#1168e8;font-weight:800}.calendar-month-row .calendar-shift-button{border-color:#b9d3ff;color:#1168e8;font-size:12px;font-weight:750}.calendar-days-row{display:grid;grid-template-columns:repeat(var(--timeline-days),var(--day-width));height:44px}.calendar-days-row div{position:relative;display:grid;place-items:center;align-content:center;border-right:1px solid #e7edf4;color:#536174;font-size:12px}.calendar-days-row div.today:after{position:absolute;top:0;width:0;height:0;border-right:5px solid transparent;border-left:5px solid transparent;border-top:8px solid #ef4444;content:""}.calendar-days-row span{font-weight:750}.calendar-days-row em{color:#8a94a6;font-style:normal}.calendar-body{grid-column:1 / -1}.calendar-group{display:grid}.calendar-group-row{position:sticky;left:0;z-index:5;display:flex;align-items:center;gap:7px;width:calc(var(--task-col) + var(--owner-col));min-height:34px;padding:0 12px;border:0;border-bottom:1px solid #edf2f7;background:#fbfcfe;color:#17212b;text-align:left}.calendar-group-row strong{font-size:13px}.calendar-group-row em{color:#66758a;font-size:12px;font-style:normal}.calendar-task-row{display:grid;grid-template-columns:var(--task-col) var(--owner-col) calc(var(--day-width) * var(--timeline-days));min-height:36px;border-bottom:1px solid #edf2f7;cursor:pointer}.calendar-task-row.selected{background:#f4f8ff}.calendar-task-name,.calendar-owner{position:sticky;z-index:4;display:flex;align-items:center;gap:8px;min-width:0;padding:0 10px;border-right:1px solid #e0e7ef;color:#17212b;font-size:13px}.calendar-task-name{left:0;background:inherit}.calendar-owner{left:var(--task-col);background:inherit;box-shadow:8px 0 14px #0f172a09}.calendar-task-name>span{width:18px;color:#8a94a6;text-align:right}.calendar-task-name strong,.calendar-owner strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calendar-priority{display:inline-grid;place-items:center;min-width:22px;height:18px;border-radius:4px;background:#fff7e6;color:#c26200;font-size:10px;font-style:normal;font-weight:800}.calendar-priority.p0{background:#ef4444;color:#fff}.calendar-priority.p2{background:#e7f7ef;color:#14824c}.calendar-owner span{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:999px;background:#1aa59a;color:#fff;font-size:11px;font-weight:800}.calendar-gridline{position:relative;display:grid;grid-template-columns:repeat(var(--timeline-days),var(--day-width));min-width:calc(var(--day-width) * var(--timeline-days))}.calendar-gridline>i{border-right:1px solid #e7edf4;background:#fff}.calendar-gridline>i.weekend{background:#f7f8fa}.calendar-bar{z-index:2;align-self:center;display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;align-items:center;gap:8px;height:25px;margin:0 3px;padding:0 8px;border:1px solid #93d8c9;border-radius:6px;background:#dff8f3;color:#174f47;text-align:left}.calendar-bar.medium{border-color:#f5a333;background:#fff1dc;color:#8a4a00}.calendar-bar.high{border-color:#ff6b6b;background:#fff0f0;color:#991b1b}.calendar-bar.pending{border-color:#a8b2c1;background:#f8fafc;color:#334155}.calendar-bar span{min-width:0;overflow:hidden;font-size:12px;font-weight:750;text-overflow:ellipsis;white-space:nowrap}.calendar-bar em,.calendar-bar b{font-size:11px;font-style:normal;font-weight:650;white-space:nowrap}.calendar-loading,.calendar-error{display:flex;align-items:center;justify-content:center;gap:10px;min-height:320px;color:#66758a}.calendar-error{color:#b91c1c}.filter-row{display:flex;align-items:center;gap:22px;min-height:66px;padding:0 24px;border-bottom:1px solid #d8e0ea;background:#fff}.filter-select{display:inline-flex;align-items:center;gap:9px;color:#405166;font-size:15px;white-space:nowrap}.filter-select select{height:36px;min-width:92px;padding:0 30px 0 14px;border:1px solid #d6e0ea;border-radius:8px;background:#fff;color:#273544}.search-box{display:flex;align-items:center;gap:8px;width:min(280px,20vw);height:36px;padding:0 10px;border:1px solid #d6e0ea;border-radius:8px;color:#66758a}.search-box input{width:100%;min-width:0;border:0;outline:0;background:transparent}.check-filter{display:inline-flex;align-items:center;gap:8px;color:#405166;font-size:15px;white-space:nowrap}.check-filter input{width:20px;height:20px;accent-color:#1677ff}.risk-legend{display:flex;align-items:center;gap:18px;margin-left:auto;color:#405166;font-size:14px;white-space:nowrap}.risk-legend span{display:inline-flex;align-items:center;gap:7px}.collapse-panel-button{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 14px;border:1px solid #d6e0ea;border-radius:8px;background:#fff;color:#405166;font-weight:650;white-space:nowrap}.content-grid{display:grid;grid-template-columns:minmax(720px,1fr) 356px;min-height:calc(100vh - 134px)}.content-grid.panel-collapsed{grid-template-columns:minmax(720px,1fr)}.content-grid.panel-collapsed .map-stage{border-right:0}.map-stage{position:relative;min-width:0;overflow:auto;border-right:1px solid #d8e0ea;background:#fff}.risk-map{position:relative;min-width:900px;min-height:700px;padding:28px 22px 92px;transform-origin:top left;transition:transform .16s ease}.map-root-card{position:absolute;top:294px;left:28px;display:grid;gap:5px;width:142px;padding:14px 12px;border:1px solid #d7e1ec;border-radius:8px;background:#fff;box-shadow:0 6px 18px #0f172a0a}.map-root-card strong{font-size:18px}.map-root-card span{color:#ef4444;font-size:16px;font-weight:800}.map-root-card em{color:#66758a;font-size:13px;font-style:normal}.floating-create{position:absolute;top:24px;right:26px;z-index:3;display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 12px;border:1px solid #bfd6ff;border-radius:8px;background:#f4f8ff;color:#1168e8;font-weight:700}.map-lines{position:relative;z-index:2;display:grid;gap:22px;width:610px;margin-left:208px;padding-top:32px}.project-branch{display:grid;grid-template-columns:136px minmax(0,1fr);gap:16px;align-items:center;min-height:78px}.branch-title{position:relative;display:grid;gap:9px;justify-items:start;padding-left:8px}.branch-title:before{position:absolute;top:16px;left:-26px;width:23px;height:2px;background:#111827;content:""}.branch-title strong{color:#111827;font-size:15px}.branch-items{position:relative;display:grid;gap:8px;padding-left:20px}.branch-items:before{position:absolute;top:16px;bottom:16px;left:0;width:2px;background:#111827;content:""}.risk-task-node{position:relative;display:grid;grid-template-columns:12px 32px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:30px;width:100%;padding:0 10px;border:1px solid #b8dfc8;border-radius:6px;background:#f7fffa;color:#1f2937;text-align:left}.risk-task-node:before{position:absolute;top:15px;left:-20px;width:20px;height:2px;background:#111827;content:""}.risk-task-node.high{border-color:#ff5b5b;background:#fff8f8}.risk-task-node.medium{border-color:#f5a333;background:#fffaf0}.risk-task-node.pending{border-color:#a8b2c1;background:#fbfcfe}.risk-task-node.active{box-shadow:0 0 0 3px #1677ff21}.risk-task-node strong{color:#334155;font-size:13px;font-weight:750}.risk-task-node em{min-width:0;overflow:hidden;color:#17212b;font-size:13px;font-style:normal;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.node-signal,.risk-dot{width:9px;height:9px;border-radius:999px;background:#2fbf75}.risk-dot.low,.node-signal.low{background:#2fbf75}.risk-dot.medium,.node-signal.medium{background:#fb8c00}.risk-dot.high,.node-signal.high{background:#ff2f3d}.risk-dot.pending,.node-signal.pending{background:#8a94a6}.risk-tag{display:inline-flex;align-items:center;justify-content:center;height:22px;padding:0 8px;border:1px solid #a8dfbf;border-radius:4px;background:#edfff4;color:#17824a;font-size:12px;font-weight:750;white-space:nowrap}.risk-tag.medium{border-color:#ffd09a;background:#fff6e9;color:#d96a00}.risk-tag.high{border-color:#ffb4b8;background:#fff0f1;color:#e11d2e}.risk-tag.pending{border-color:#cbd5e1;background:#f7f9fc;color:#64748b}.risk-tag.compact{height:20px;padding:0 6px;font-size:11px}.hidden-count{display:inline-flex;align-items:center;justify-content:center;width:fit-content;min-height:28px;padding:0 10px;border:1px dashed #cbd5df;border-radius:6px;background:#fff;color:#66758a;font-size:12px}button.hidden-count:hover{border-color:#1677ff;color:#1168e8}.impact-nodes{display:none;position:absolute;z-index:2;top:94px;left:858px;gap:68px;width:292px}.impact-cluster{display:grid;gap:10px}.impact-cluster>span{color:#66758a;font-size:13px;font-weight:750}.impact-node{display:grid;grid-template-columns:12px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:36px;padding:0 9px;border:1px dashed #d4dde7;border-radius:8px;background:#fff;color:#17212b;text-align:left}.impact-cluster.high .impact-node{border-color:#ff5b5b;background:snow}.impact-cluster.medium .impact-node{border-color:#f5a333;background:#fffaf1}.impact-node strong{min-width:0;overflow:hidden;font-size:12px;text-overflow:ellipsis;white-space:nowrap}button.impact-node:hover{box-shadow:0 0 0 3px #1677ff1a}.relationship-layer{position:absolute;inset:0;z-index:1;width:100%;height:100%;pointer-events:none}.hierarchy-line{fill:none;stroke:#111827;stroke-linecap:round;stroke-width:2}.impact-line{display:none;fill:none;stroke-dasharray:7 7;stroke-linecap:round;stroke-width:1.7}.impact-line.high{stroke:#ff3f46}.impact-line.medium{stroke:#ff9b21}.map-legend{position:absolute;bottom:26px;left:232px;z-index:3;display:flex;align-items:center;gap:30px;min-height:46px;padding:0 28px;border:1px dashed #c9d4df;border-radius:8px;background:#ffffffdb;color:#536174;font-size:13px}.map-legend span{display:inline-flex;align-items:center;gap:10px;white-space:nowrap}.legend-line{width:46px;height:0;border-top:2px solid #111827}.legend-dot{width:9px;height:9px;border-radius:999px;background:#8a94a6}.legend-dot.high{background:#ff2f3d}.legend-dot.medium{background:#fb8c00}.legend-dot.pending{background:#8a94a6}.map-controls{position:sticky;bottom:14px;left:14px;z-index:10;display:inline-flex;align-items:center;gap:10px;margin:0 0 14px 14px}.map-controls button,.map-controls span{display:inline-grid;place-items:center;height:38px;border:1px solid #d7e1ec;background:#fff;color:#273544}.map-controls button{min-width:38px;border-radius:8px}.map-controls span{min-width:72px;border-radius:8px}.risk-panel{min-width:0;overflow:auto;padding:18px 18px 22px;background:#fff}.panel-title,.detail-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-title{margin-bottom:14px}.panel-title h2,.detail-card-head h2{margin:0;color:#17212b;font-size:17px;letter-spacing:0}.panel-title span{display:inline-grid;place-items:center;min-width:26px;height:24px;border-radius:999px;background:#f1f5f9;color:#334155;font-size:13px;font-weight:800}.risk-section{margin-bottom:14px;overflow:hidden;border:1px solid #e0e7ef;border-left:4px solid #94a3b8;border-radius:8px;background:#fff}.risk-panel .task-detail-card{margin-top:0;margin-bottom:14px;padding:0 0 16px;border-top:0;border-bottom:1px solid #e0e7ef}.risk-section.high{border-left-color:#ff2f3d;background:linear-gradient(90deg,#ff2f3d12,#fff0 38%)}.risk-section.medium{border-left-color:#fb8c00;background:linear-gradient(90deg,#fb8c0014,#fff0 38%)}.risk-section.pending{border-left-color:#8a94a6}.risk-section-title{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;width:100%;min-height:42px;padding:0 11px;border:0;background:transparent;color:#17212b;text-align:left}.risk-section-title svg{transition:transform .16s ease}.risk-section-title span{display:inline-flex;align-items:center;gap:8px;min-width:0;font-weight:800}.risk-section-title strong{font-size:14px}.risk-list{display:grid;gap:0;padding:0 12px 10px}.risk-list-item{display:grid;gap:6px;width:100%;padding:10px 0;border:0;border-top:1px solid #e5ebf2;background:transparent;color:#536174;text-align:left}.risk-list-item strong{overflow:hidden;color:#17212b;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.risk-list-item span{display:grid;grid-template-columns:64px minmax(0,1fr);gap:6px;font-size:12px}.risk-list-item em{overflow:hidden;color:#273544;font-style:normal;font-weight:650;text-overflow:ellipsis;white-space:nowrap}.view-all-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;width:100%;min-height:28px;border:0;border-top:1px solid #e5ebf2;background:transparent;color:#1677ff;font-size:12px}.notice-toast{position:fixed;right:380px;top:82px;z-index:60;max-width:360px;padding:9px 12px;border:1px solid #bfd6ff;border-radius:8px;background:#f4f8ff;color:#1259b5;font-size:13px;box-shadow:0 8px 18px #0f172a14}.empty-risk,.empty-detail,.risk-basis,.form-hint{color:#66758a;font-size:13px}.empty-risk{margin:0;padding:0 12px 12px}.task-detail-card{display:grid;gap:14px;margin-top:18px;padding-top:16px;border-top:1px solid #e0e7ef}.danger-action,.ghost-action{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:32px;padding:0 10px;border-radius:8px;background:#fff;font-size:13px}.danger-action{border:1px solid #fecaca;color:#b91c1c}.ghost-action{border:1px solid #d7e1ec;color:#536174}.danger-action:disabled,.save-button:disabled{cursor:not-allowed;opacity:.65}.selected-task-title{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:9px}.selected-task-title strong{color:#17212b;font-size:15px;line-height:1.45}.priority-badge{display:inline-flex;align-items:center;justify-content:center;min-width:31px;height:22px;border:1px solid #d7e1ec;border-radius:4px;background:#edf2f7;color:#334155;font-size:12px;font-weight:800}.priority-badge.p0{border-color:#ef4444;background:#ef4444;color:#fff}.priority-badge.p1,.priority-badge.p2{border-color:#f59e0b;background:#fff7e6;color:#a16207}.quick-facts{display:grid;gap:7px;padding:10px 0 2px;color:#5b6a7f;font-size:13px}.quick-facts span{display:inline-flex;align-items:center;gap:7px;min-width:0}.inspector-form{display:grid;gap:12px}.inspector-form label span{display:block;margin-bottom:6px;color:#66758a;font-size:12px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.inspector-form select,.inspector-form input,.inspector-form textarea{width:100%;border:1px solid #ccd8e5;border-radius:8px;background:#fff;color:#17212b}.inspector-form select,.inspector-form input{height:36px;padding:0 10px}.inspector-form textarea{min-height:74px;padding:9px 10px;line-height:1.5;resize:vertical}.save-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;border:0;border-radius:8px;background:#1677ff;color:#fff;font-weight:800}.risk-basis{margin:18px 0 0}.error-banner{position:absolute;top:18px;left:18px;z-index:20;max-width:560px;padding:10px 12px;border:1px solid #fecaca;border-radius:8px;background:#fff1f2;color:#991b1b}.loading-map{display:flex;align-items:center;justify-content:center;gap:10px;min-height:520px;color:#66758a}@media(max-width:1320px){.topbar{grid-template-columns:248px 1fr;height:auto;min-height:68px;padding:10px 0}.top-actions{grid-column:1 / -1;justify-content:center;padding:8px 20px 0}.content-grid{grid-template-columns:minmax(680px,1fr)}.risk-panel{border-top:1px solid #d8e0ea}}@media(max-width:920px){.app-grid{grid-template-columns:1fr}.side-nav{display:none}.topbar{grid-template-columns:1fr;gap:10px}.product-area,.top-actions{justify-content:center;padding:0 14px}.filter-row{align-items:stretch;flex-direction:column;gap:10px;padding:12px 14px}.search-box{width:100%}.risk-legend{margin-left:0}}
