:root{--color-primary:#0b233b;--color-primary-light:#1e88a8;--color-primary-lighter:#e3f0f5;--color-primary-dark:#081a2d;--color-accent:#ffd166;--color-accent-light:#ffd16652;--color-accent-subtle:#ffd1661a;--color-bg-page:#f8fbfd;--color-bg-surface:#fff;--color-bg-elevated:#f8fbfdd6;--color-bg-header-dark:linear-gradient(120deg, #0b233bf5, #124450f2);--color-bg-sidebar:linear-gradient(180deg, #f6fafff5, #e9f2f7f5);--color-bg-content:linear-gradient(180deg, #f8fbfd 0%, #edf4f8 100%);--color-bg-header-accent-radial:radial-gradient(circle at top right, #ffd16659, transparent 36%);--color-bg-sidebar-accent-radial:radial-gradient(circle at top left, #457b9d2e, transparent 36%);--color-bg-content-accent-radial:radial-gradient(circle at top right, #ffd1661f, transparent 28%);--color-border-subtle:#112c3c14;--color-border-light:#112c3c1a;--color-border-medium:#112c3c1f;--color-text-primary:#0b233b;--color-text-secondary:#5f7184;--color-text-muted:#7a8998;--color-text-inverse:#f7fbff;--color-status-open:#3b82f6;--color-status-open-bg:#3b82f614;--color-status-open-border:#3b82f633;--color-status-open-bg-start:#e8f2ff;--color-status-open-bg-end:#d4e8fc;--color-status-in-progress:#f59e0b;--color-status-in-progress-bg:#f59e0b1a;--color-status-in-progress-border:#f59e0b33;--color-status-in-progress-bg-start:#fef3cd;--color-status-in-progress-bg-end:#fde68a;--color-status-completed:#10b981;--color-status-completed-bg:#10b9811a;--color-status-completed-border:#10b98133;--color-status-completed-bg-start:#d1fae5;--color-status-completed-bg-end:#a7f3d0;--color-priority-p0:#dc2626;--color-priority-p0-bg:#fee2e2;--color-priority-p0-bg-subtle:#dc262614;--color-priority-p0-border:#dc262638;--color-priority-p1:#ea580c;--color-priority-p1-bg:#ffedd5;--color-priority-p1-bg-subtle:#ea580c14;--color-priority-p1-border:#ea580c33;--color-priority-p2:#ca8a04;--color-priority-p2-bg:#fef9c3;--color-priority-p2-bg-subtle:#ca8a0414;--color-priority-p2-border:#ca8a042e;--color-priority-p2-text:#a16207;--color-priority-p3:#6b7280;--color-priority-p3-bg:#f3f4f6;--color-priority-p3-bg-subtle:#6b728014;--color-priority-p3-border:#6b728029;--color-priority-p3-text:#4b5563;--color-category-bug:#dc2626;--color-category-bug-bg:#dc262614;--color-category-bug-border:#dc262624;--color-category-feature:#0d9488;--color-category-feature-bg:#0d948814;--color-category-feature-border:#0d948824;--color-category-task:#2563eb;--color-category-task-bg:#2563eb14;--color-category-task-border:#2563eb24;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--radius-sm:8px;--radius-md:14px;--radius-lg:20px;--radius-xl:24px;--radius-full:999px;--shadow-sm:0 1px 3px #112c3c14;--shadow-md:0 4px 14px #112c3c1a;--shadow-lg:0 14px 34px #112c3c1f;--shadow-xl:0 18px 40px #112c3c1f;--shadow-glow-open:0 0 0 4px #3b82f61f;--shadow-glow-in-progress:0 0 0 4px #f59e0b1f;--shadow-glow-completed:0 0 0 4px #10b9811f;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:"SF Mono", "Fira Code", "Fira Mono", Menlo, Consolas, monospace;--text-xs:10px;--text-sm:12px;--text-base:14px;--text-lg:18px;--text-xl:22px;--text-h1:22px;--text-h2:18px;--text-h3:16px;--text-h4:14px;--text-h5:12px;--line-height-heading:1.3;--line-height-body:1.5;--font-normal:400;--font-semibold:600;--font-bold:700;--font-extrabold:800;--transition-fast:.15s ease;--transition-normal:.2s ease}.app-shell{min-height:100vh}.app-header{background:var(--color-bg-header-dark);border-bottom:1px solid #ffffff14;justify-content:space-between;align-items:center;padding:0 24px;display:flex;position:relative}.app-header:after{content:"";background:var(--color-bg-header-accent-radial);pointer-events:none;position:absolute;inset:0}.app-brand{align-items:center;gap:12px;display:flex}.app-brand-mark{background:linear-gradient(135deg,#ffd166,#f07167);border-radius:999px;width:12px;height:12px;box-shadow:0 0 18px #ffd1668c}.app-brand-title.ant-typography{color:var(--color-text-inverse);letter-spacing:.02em;margin:0}.app-header-actions{align-items:center;gap:12px;display:flex}.app-header-user{color:var(--color-text-inverse)}.app-sider{background:var(--color-bg-sidebar);border-right:1px solid var(--color-border-subtle);transition:width var(--transition-normal);position:relative}.app-sider:after{content:"";background:var(--color-bg-sidebar-accent-radial);pointer-events:none;position:absolute;inset:0}.app-sider-top{justify-content:flex-end;padding:14px 12px 6px;display:flex}.app-collapse-btn.ant-btn{color:var(--color-primary-light)}.app-menu{background:0 0;padding:8px;border-inline-end:none!important}.app-menu .ant-menu-item{border-radius:var(--radius-md);height:44px;margin:6px 0;line-height:44px}.app-menu .ant-menu-item-selected{color:#143642;background:linear-gradient(135deg,#1e88a82e,#ffd16629);font-weight:600}.app-content{background:var(--color-bg-content-accent-radial), var(--color-bg-content);height:calc(100vh - 64px);padding:18px;overflow:hidden}.app-content-body{min-width:0;height:100%}.app-menu .ant-menu-item:hover{opacity:.85;transition:opacity .15s,background-color .15s}.app-menu .ant-menu-item:active{transition:transform .1s;transform:scale(.97)}.app-header-actions .ant-btn:hover{opacity:.85;transition:opacity .15s}.app-header-actions .ant-btn:active{transition:transform .1s;transform:scale(.95)}.app-collapse-btn.ant-btn:hover{opacity:.85;transition:opacity .15s}.app-collapse-btn.ant-btn:active{transition:transform .1s;transform:scale(.92)}@media (width<=960px){.app-sider{flex:0 0 84px!important;width:84px!important;min-width:84px!important;max-width:84px!important}.app-content{padding:12px}}@media (width<=768px){.app-header{padding:0 12px}.app-content{height:calc(100vh - 64px);padding:10px}}.app-mobile-menu-btn.ant-btn{color:var(--color-text-inverse);font-size:18px}.app-mobile-drawer-footer{border-top:1px solid var(--color-border-subtle);justify-content:space-between;align-items:center;margin-top:auto;padding:16px 24px;display:flex;position:absolute;bottom:0;left:0;right:0}.login-page{background:var(--color-bg-content);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-page .ant-card{border-radius:var(--radius-xl);width:400px;box-shadow:var(--shadow-xl)}.login-page__header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.login-page__header h3{margin:0}.login-page .ant-input,.login-page .ant-input-password .ant-input,.login-page .ant-input-affix-wrapper{border-color:var(--color-border-subtle);transition:border-color var(--transition-normal)}.login-page .ant-input:focus,.login-page .ant-input-focused,.login-page .ant-input-password .ant-input:focus,.login-page .ant-input-affix-wrapper:focus,.login-page .ant-input-affix-wrapper-focused{border-color:var(--color-primary-light)}.login-page .ant-btn-primary{background-color:var(--color-primary);width:100%;height:40px;font-size:var(--text-base)}@media (width<=480px){.login-page .ant-card{width:calc(100vw - 2 * var(--space-4))}}.todo-filter-bar{align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--color-bg-elevated);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);margin-bottom:var(--space-4);flex-wrap:wrap;display:flex}.todo-filter-bar .filter-control{height:34px}.todo-filter-bar .filter-control .ant-input{border-radius:var(--radius-sm);border-color:var(--color-border-light);height:34px;transition:border-color var(--transition-normal), background-color var(--transition-normal), box-shadow var(--transition-normal);line-height:34px}.todo-filter-bar .filter-control .ant-input-affix-wrapper{border-radius:var(--radius-sm);border-color:var(--color-border-light);height:34px;transition:border-color var(--transition-normal), background-color var(--transition-normal), box-shadow var(--transition-normal);align-items:center;display:inline-flex}.todo-filter-bar .filter-control .ant-input-affix-wrapper .ant-input{height:auto;line-height:1.5}.todo-filter-bar .filter-control .ant-select-selector{border-radius:var(--radius-sm)!important;border-color:var(--color-border-light)!important;flex-wrap:nowrap!important;align-items:center!important;height:34px!important;display:flex!important;overflow:hidden!important}.todo-filter-bar .filter-control.filter-active .ant-input,.todo-filter-bar .filter-control.filter-active .ant-input-affix-wrapper,.todo-filter-bar .filter-control.filter-active .ant-input-search .ant-input{border-color:var(--color-primary-light);background-color:var(--color-primary-lighter)}.todo-filter-bar .filter-control.filter-active .ant-select-selector{border-color:var(--color-primary-light)!important;background-color:var(--color-primary-lighter)!important}.todo-filter-bar .filter-clear-btn{border-radius:var(--radius-sm);border-color:var(--color-border-light);height:34px;transition:background-color var(--transition-normal), border-color var(--transition-normal)}.todo-filter-bar .filter-clear-btn:hover{background-color:var(--color-primary-lighter);border-color:var(--color-primary-light)}@media (width<=768px){.todo-filter-bar{flex-wrap:wrap}.todo-filter-bar .filter-control{min-width:120px}}.detail-panel{background:var(--color-bg-surface);border-radius:var(--radius-md);box-shadow:var(--shadow-md);flex-direction:column;height:100%;display:flex;overflow:hidden}.detail-panel-empty{height:100%;color:var(--color-text-secondary);justify-content:center;align-items:center;display:flex}.detail-panel-loading{justify-content:center;align-items:center;height:100%;display:flex}.detail-panel-content{padding:0 var(--space-4) var(--space-4) var(--space-4);height:100%;overflow:auto}.detail-panel-header{padding-bottom:var(--space-3);margin-bottom:var(--space-3);border-bottom:1px solid var(--color-border-subtle);background:var(--color-bg-surface);z-index:1;padding-top:var(--space-3);justify-content:space-between;align-items:flex-start;display:flex;position:sticky;top:0}.detail-panel-header .detail-panel-title{font-size:15px;font-weight:var(--font-bold);color:var(--color-text-primary);line-height:var(--line-height-heading)}.detail-panel-header .detail-panel-code{font-family:var(--font-mono);background:var(--color-primary-lighter);border-radius:var(--radius-sm);padding:2px 8px;font-size:13px;font-weight:600}.detail-panel-header .detail-panel-code-bug{color:var(--color-category-bug)}.detail-panel-header .detail-panel-code-feature{color:var(--color-category-feature)}.detail-panel-header .detail-panel-code-task{color:var(--color-category-task)}.detail-panel-tag-status-open{background-color:var(--color-status-open-bg);color:var(--color-status-open);border-color:var(--color-status-open)}.detail-panel-tag-status-in_progress{background-color:var(--color-status-in-progress-bg);color:var(--color-status-in-progress);border-color:var(--color-status-in-progress)}.detail-panel-tag-status-completed{background-color:var(--color-status-completed-bg);color:var(--color-status-completed);border-color:var(--color-status-completed)}.detail-panel-tag-category-bug{background-color:var(--color-category-bug-bg);color:var(--color-category-bug);border-color:var(--color-category-bug)}.detail-panel-tag-category-feature{background-color:var(--color-category-feature-bg);color:var(--color-category-feature);border-color:var(--color-category-feature)}.detail-panel-tag-category-task{background-color:var(--color-category-task-bg);color:var(--color-category-task);border-color:var(--color-category-task)}.detail-panel-tag-priority-p0{background-color:var(--color-priority-p0-bg-subtle);color:var(--color-priority-p0);border-color:var(--color-priority-p0)}.detail-panel-tag-priority-p1{background-color:var(--color-priority-p1-bg-subtle);color:var(--color-priority-p1);border-color:var(--color-priority-p1)}.detail-panel-tag-priority-p2{background-color:var(--color-priority-p2-bg-subtle);color:var(--color-priority-p2);border-color:var(--color-priority-p2)}.detail-panel-tag-priority-p3{background-color:var(--color-priority-p3-bg-subtle);color:var(--color-priority-p3);border-color:var(--color-priority-p3)}.detail-panel-btn-start{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.detail-panel-btn-start:hover{background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.detail-panel-btn-complete{background-color:var(--color-status-completed);border-color:var(--color-status-completed);color:var(--color-text-inverse)}.detail-panel-btn-complete:hover{opacity:.85}.detail-panel-btn-delete:hover{color:var(--color-priority-p0);border-color:var(--color-priority-p0)}.detail-panel-description{font-size:var(--text-base);line-height:1.6}.detail-panel-description .ant-typography{font-size:var(--text-base);margin-bottom:12px;line-height:1.6}.detail-panel-metadata .ant-descriptions-item-label{color:var(--color-text-secondary)}.detail-panel-dependencies{margin-bottom:12px}.detail-panel-dependencies a{color:var(--color-primary-light);transition:opacity var(--transition-fast);text-decoration:none}.detail-panel-dependencies a:hover{opacity:.8;text-decoration:underline}.detail-panel-dependencies-list{padding-left:var(--space-4)}.todo-list-page{flex-direction:column;height:100%;display:flex}.todo-list-page__header{margin-bottom:var(--space-3);justify-content:space-between;align-items:center;display:flex}.todo-list-page__header h2{color:var(--color-text-primary);font-size:var(--text-xl);font-weight:var(--font-bold);margin:0}.todo-list-page__body{gap:var(--space-4);min-height:0;margin-top:var(--space-3);flex:1;display:flex}.todo-list-page__table{flex:1;min-width:0;overflow:auto}.todo-list-page__table .ant-table{border-radius:var(--radius-md);box-shadow:var(--shadow-sm);border:1px solid var(--color-border-subtle);overflow:hidden}.todo-list-page__table .ant-table-row-selected>td{background-color:var(--color-primary-lighter)!important}.todo-list-page__table .ant-table-row{transition:background-color .15s}.todo-list-page__table .ant-table-row:hover>td{background-color:var(--color-bg-elevated)!important}.todo-list-page__table .ant-table-row.row-completed>td{opacity:.65}.todo-list-page__detail{border-left:1px solid var(--color-border-subtle);background:var(--color-bg-surface);border-radius:var(--radius-lg);min-width:0;box-shadow:var(--shadow-sm);flex:1;overflow:auto}.todo-list-page__table .btn-action-delete:hover{color:var(--color-priority-p0)!important}.todo-list-page__table .btn-action-complete:hover{color:var(--color-status-completed)!important}.todo-list-page__table .btn-action-start:hover{color:var(--color-status-in-progress)!important}.tag-status-open{background-color:var(--color-status-open)!important;color:var(--color-text-inverse)!important;border-color:var(--color-status-open)!important}.tag-status-in_progress{background-color:var(--color-status-in-progress)!important;color:var(--color-text-inverse)!important;border-color:var(--color-status-in-progress)!important}.tag-status-completed{background-color:var(--color-status-completed)!important;color:var(--color-text-inverse)!important;border-color:var(--color-status-completed)!important}.tag-priority-p0{background-color:var(--color-priority-p0)!important;color:var(--color-text-inverse)!important;border-color:var(--color-priority-p0)!important}.tag-priority-p1{background-color:var(--color-priority-p1)!important;color:var(--color-text-inverse)!important;border-color:var(--color-priority-p1)!important}.tag-priority-p2{background-color:var(--color-priority-p2)!important;color:var(--color-text-inverse)!important;border-color:var(--color-priority-p2)!important}.tag-priority-p3{background-color:var(--color-priority-p3)!important;color:var(--color-text-inverse)!important;border-color:var(--color-priority-p3)!important}.todo-code-badge{font-family:var(--font-mono);font-weight:var(--font-bold);font-size:var(--text-sm);background:var(--color-primary-lighter);border-radius:var(--radius-sm);padding:2px 8px}@media (width<=768px){.todo-list-page__body{flex-direction:column}.todo-list-page__detail{display:none}.todo-list-page__table{flex:1}}.todo-list-mobile-drawer .ant-drawer-body{padding:0}.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#777;--xy-background-pattern-lines-color-default:#777;--xy-background-pattern-cross-color-default:#777;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}.todo-graph-page{flex-direction:column;gap:16px;height:100%;min-height:0;display:flex}.todo-graph-hero{border-radius:var(--radius-xl);padding:var(--space-5) var(--space-6);background:radial-gradient(circle at 15% 15%, var(--color-accent-light), transparent 26%), radial-gradient(circle at 88% 22%, #1d4ed847, transparent 24%), linear-gradient(135deg, #0b233bf5, #144050f0);color:var(--color-text-inverse);position:relative;overflow:hidden;box-shadow:0 22px 50px #0a192933}.todo-graph-hero:after{content:"";border-radius:var(--radius-full);background:radial-gradient(circle,#ffffff21,#0000 60%);width:360px;height:360px;position:absolute;inset:auto -12% -60% auto}.todo-graph-hero-title.ant-typography,.todo-graph-hero-subtitle.ant-typography{color:inherit!important}.todo-graph-toolbar{gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);background:var(--color-bg-elevated);border:1px solid var(--color-border-light);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}.todo-graph-toolbar-group{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.todo-graph-toolbar-search{width:320px}.todo-graph-surface{border-radius:var(--radius-xl);border:1px solid var(--color-border-subtle);background:radial-gradient(circle at top left, var(--color-accent-subtle), transparent 24%), radial-gradient(circle at 85% 15%, #1d4ed814, transparent 18%), linear-gradient(180deg, #ffffffeb, #ecf4f8f0);min-height:0;box-shadow:var(--shadow-xl);flex:1;position:relative;overflow:hidden}.todo-graph-backdrop{pointer-events:none;background-image:linear-gradient(#112c3c09 1px,#0000 1px),linear-gradient(90deg,#112c3c09 1px,#0000 1px);background-size:44px 44px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(circle,#000 55%,#0000 100%);mask-image:radial-gradient(circle,#000 55%,#0000 100%)}.todo-graph-empty{height:100%;padding:var(--space-8);justify-content:center;align-items:center;display:flex}.todo-graph-empty-card{text-align:center;border-radius:var(--radius-xl);border:1px solid var(--color-border-subtle);background:var(--color-bg-elevated);max-width:440px;box-shadow:var(--shadow-lg)}.todo-graph-canvas{width:100%;height:100%}.todo-graph-surface .react-flow__attribution{display:none}.todo-graph-node{--node-status-color:var(--color-status-open);--node-selected-glow:var(--shadow-glow-open);border:1px solid #00000014;border-left:4px solid var(--node-status-color);cursor:pointer;background:#fff;border-radius:10px;width:260px;transition:transform .12s,box-shadow .18s;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 4px #0000000f}.todo-graph-node:before,.todo-graph-node__accent,.todo-graph-node__priority-bar,.todo-graph-node__root,.todo-graph-node__headline,.todo-graph-node__top,.todo-graph-node__meta,.todo-graph-node__chip,.todo-graph-node__footer,.todo-graph-node__metric,.todo-graph-node__metric-label,.todo-graph-node__metric-value{display:none}.todo-graph-node.status-open{--node-status-color:#3b82f6;--node-selected-glow:0 0 0 3px #3b82f626}.todo-graph-node.status-in_progress{--node-status-color:#f59e0b;--node-selected-glow:0 0 0 3px #f59e0b26}.todo-graph-node.status-completed{--node-status-color:#10b981;--node-selected-glow:0 0 0 3px #10b98126}.todo-graph-node:hover{transform:translateY(-1px);box-shadow:0 6px 16px #00000017}.todo-graph-node.is-selected{border-color:var(--node-status-color);border-left-color:var(--node-status-color);box-shadow:var(--node-selected-glow), 0 6px 16px #00000017}.todo-graph-node.is-neighbor{box-shadow:0 0 0 2px #3b82f61f,0 4px 12px #00000012}.todo-graph-node__body{flex-direction:column;gap:6px;width:100%;padding:12px 14px;display:flex}.todo-graph-node__title{color:#1a1a1a;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:15px;font-weight:700;line-height:1.4;display:-webkit-box;overflow:hidden}.todo-graph-node__title:before{display:none}.todo-graph-node__code{font-family:var(--font-mono);color:#374151;margin-right:6px;font-weight:700}.todo-graph-node__sub{align-items:center;gap:8px;margin-top:2px;display:flex}.todo-graph-node__stats{color:#9ca3af;gap:6px;font-size:11px;display:flex}.todo-graph-node__tags{gap:6px;margin-top:4px;display:flex}.todo-graph-node__tag{border-radius:4px;align-items:center;height:20px;padding:0 8px;font-size:11px;font-weight:600;display:inline-flex}.todo-graph-node__tag.tag-status.status-open{color:#2563eb;background:#eff6ff}.todo-graph-node__tag.tag-status.status-in_progress{color:#b45309;background:#fef3c7}.todo-graph-node__tag.tag-status.status-completed{color:#047857;background:#d1fae5}.todo-graph-node__tag.tag-priority.priority-p0{background:var(--color-priority-p0-bg);color:var(--color-priority-p0)}.todo-graph-node__tag.tag-priority.priority-p1{background:var(--color-priority-p1-bg);color:var(--color-priority-p1)}.todo-graph-node__tag.tag-priority.priority-p2{background:var(--color-priority-p2-bg);color:var(--color-priority-p2-text)}.todo-graph-node__tag.tag-priority.priority-p3{background:var(--color-priority-p3-bg);color:var(--color-priority-p3-text)}.todo-graph-node__tag.tag-category.category-bug{background:var(--color-category-bug-bg);color:var(--color-category-bug)}.todo-graph-node__tag.tag-category.category-feature{background:var(--color-category-feature-bg);color:var(--color-category-feature)}.todo-graph-node__tag.tag-category.category-task{background:var(--color-category-task-bg);color:var(--color-category-task)}.todo-graph-node.status-completed{opacity:.7}.todo-graph-node.status-completed .todo-graph-node__title{color:#6b7280;-webkit-text-decoration:line-through #0000004d;text-decoration:line-through #0000004d}.todo-graph-minimap{border:1px solid var(--color-border-medium);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);background:#ffffffd1;overflow:hidden}.todo-graph-drawer .ant-drawer-body{padding:0}.todo-graph-handle{background:0 0;border:none;width:6px;height:6px}@media (width<=960px){.todo-graph-toolbar{align-items:stretch}.todo-graph-toolbar-group{width:100%}.todo-graph-toolbar-search{width:100%;min-width:0}}
