:root{--bg:#fff;--surface:#fff;--surface-2:#fafafa;--border:#18181b;--text:#18181b;--text-muted:#71717a;--text-faint:#a1a1aa;--primary:#18181b;--primary-hover:#3f3f46;--primary-soft:#f4f4f5;--primary-soft-text:#18181b;--danger:#dc2626;--danger-soft:#fef2f2;--success:#15803d;--success-soft:#f0fdf4;--warning:#b45309;--warning-soft:#fffbeb;--info:#0369a1;--info-soft:#f0f9ff;--neutral-soft:#f4f4f5;--ring:#0000001f;--shadow-sm:none;--shadow-md:0 2px 8px #0000000a;--shadow-lg:0 8px 30px #00000014;--radius-sm:6px;--radius-md:8px;--radius-lg:10px;--sidebar-w:280px;--sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, SFMono-Regular, Consolas, monospace;font-family:var(--sans);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5}*{box-sizing:border-box}body{min-height:100svh;margin:0}#root{min-height:100svh}h1,h2,h3,h4{color:var(--text);margin:0;font-weight:600;line-height:1.3}p{margin:0}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.btn{border-radius:var(--radius-sm);font:inherit;cursor:pointer;white-space:nowrap;border:2px solid #0000;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-size:14px;font-weight:500;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-outline{background:var(--primary);border-color:var(--primary);color:#fff}.btn-outline:hover:not(:disabled){background:var(--primary-hover);border-color:var(--primary-hover)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){filter:brightness(.9)}.btn-ghost{color:var(--text-muted);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--neutral-soft);color:var(--text)}.btn-sm{padding:4px 10px;font-size:13px}.btn .spinner{border-color:rgb(from currentColor r g b / .35);border-top-color:currentColor}.field{flex-direction:column;gap:6px;margin-bottom:16px;display:flex}.field label{color:var(--text);font-size:13px;font-weight:500}.field .hint{color:var(--text-faint);font-size:12px}.input,.select,.textarea{width:100%;font:inherit;color:var(--text);background:var(--surface);border:2px solid var(--border);border-radius:var(--radius-sm);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;outline:none;padding:8px 12px;font-size:14px;transition:box-shadow .15s}.select{background:var(--primary);border-color:var(--primary);color:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}option{background:var(--primary);color:#fff}.input:focus,.select:focus,.textarea:focus{box-shadow:0 0 0 3px var(--ring)}.input::placeholder,.textarea::placeholder{color:var(--text-faint)}.textarea{resize:vertical;min-height:90px}.field-error{color:var(--danger);font-size:12.5px}.card{background:var(--surface);border:2px solid var(--border);border-radius:var(--radius-lg)}.card-body{padding:20px}.card-danger{background:var(--danger);border-color:var(--danger);color:#fff}.card-danger h2{color:#fff}.card-danger p{color:#ffffffd9}.card-danger .btn-danger{color:var(--danger);background:#fff;border-color:#fff}.card-danger .btn-danger:hover:not(:disabled){filter:none;background:#ffffffe0}.card-danger .alert-error{color:var(--danger);background:#fff}.table-wrap{border-radius:var(--radius-lg);overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14px}.table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--text-faint);border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 16px;font-size:12px;font-weight:500}.table td{border-bottom:1px solid var(--border);vertical-align:middle;padding:12px 16px}.table tbody tr:last-child td{border-bottom:none}.table tbody tr.row-click{cursor:pointer}.table tbody tr.row-click:hover{background:var(--surface-2)}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:2px 10px;font-size:12px;font-weight:500;display:inline-flex}.badge-neutral{background:var(--neutral-soft);color:var(--text-muted)}.badge-primary{background:var(--primary-soft);color:var(--primary-soft-text)}.badge-success{background:var(--success-soft);color:var(--success)}.badge-warning{background:var(--warning-soft);color:var(--warning)}.badge-danger{background:var(--danger-soft);color:var(--danger)}.badge-info{background:var(--info-soft);color:var(--info)}.alert{border-radius:var(--radius-sm);margin-bottom:16px;padding:10px 14px;font-size:14px}.alert-error{background:var(--danger-soft);color:var(--danger)}.alert-success{background:var(--success-soft);color:var(--success)}.modal-overlay{z-index:50;background:#0000004d;justify-content:center;align-items:flex-start;padding:48px 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--surface);border:2px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:560px}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-header h3{font-size:16px}.modal-body{padding:20px}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:10px;padding:14px 20px;display:flex}.modal-close{color:var(--text-faint);cursor:pointer;background:0 0;border:none;padding:4px;font-size:20px;line-height:1}.modal-close:hover{color:var(--text)}.spinner{border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;width:18px;height:18px;animation:.7s linear infinite spin;display:inline-block}.spinner-lg{border-width:3px;width:32px;height:32px}@keyframes spin{to{transform:rotate(360deg)}}.loading-block{color:var(--text-muted);justify-content:center;align-items:center;gap:10px;padding:48px 0;display:flex}.empty-state{text-align:center;color:var(--text-muted);padding:48px 16px}.empty-state .empty-icon{margin-bottom:8px;font-size:32px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;display:flex}.page-header h1{font-size:22px}.page-header .subtitle{color:var(--text-muted);margin-top:2px;font-size:13.5px}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}.toolbar .grow{flex:1;min-width:160px}.pagination{border-top:1px solid var(--border);color:var(--text-muted);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;font-size:13.5px;display:flex}.pagination .pages{gap:6px;display:flex}.avatar{background:var(--primary-soft);width:30px;height:30px;color:var(--primary-soft-text);text-transform:uppercase;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12.5px;font-weight:700;display:inline-flex}.text-muted{color:var(--text-muted)}.text-faint{color:var(--text-faint)}.mono{font-family:var(--mono);font-size:12.5px}.card,.modal,.auth-card{--surface:#18181b;--surface-2:#26262b;--text:#fff;--text-muted:#ffffffa6;--text-faint:#ffffff73;--border:#ffffff2e;--neutral-soft:#ffffff1f;--primary:#fff;--primary-hover:#e4e4e7;--primary-soft:#ffffff1f;--primary-soft-text:#fff;--ring:#ffffff40;color:var(--text)}.card .btn-primary,.card .btn-outline,.modal .btn-primary,.modal .btn-outline,.auth-card .btn-primary,.auth-card .btn-outline{color:#18181b}.card .select,.modal .select,.auth-card .select{color:#18181b;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.card option,.modal option,.auth-card option{color:#18181b;background:#fff}.card .input,.card .textarea,.modal .input,.modal .textarea,.auth-card .input,.auth-card .textarea{color:#18181b;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:#fff;border-color:#fff}.card .input::placeholder,.card .textarea::placeholder,.modal .input::placeholder,.modal .textarea::placeholder,.auth-card .input::placeholder,.auth-card .textarea::placeholder{color:#a1a1aa}.auth-card .auth-logo{color:#18181b}.app-shell{min-height:100svh;display:flex}.sidebar{width:var(--sidebar-w);border-right:1px solid var(--border);background:#18181b;flex-direction:column;flex-shrink:0;height:100svh;display:flex;position:sticky;top:0}.sidebar-brand{border-bottom:1px solid #ffffff26;align-items:center;gap:10px;padding:18px 20px;display:flex}.sidebar-brand .logo{color:#18181b;background:#fff;border-radius:8px;justify-content:center;align-items:center;width:32px;height:32px;font-size:15px;font-weight:700;display:flex}.sidebar-brand .name{color:#fff;font-size:15px;font-weight:600;line-height:1.2}.sidebar-brand .sub{color:#ffffff80;font-size:11.5px}.sidebar-nav{flex-direction:column;flex:1;gap:2px;padding:12px;display:flex;overflow-y:auto}.sidebar-nav .nav-section{text-transform:uppercase;letter-spacing:.06em;color:#ffffff73;padding:14px 10px 6px;font-size:11px;font-weight:600}.nav-link{border-radius:var(--radius-sm);color:#ffffffb3;align-items:center;gap:10px;padding:9px 10px;font-size:14px;font-weight:500;text-decoration:none;display:flex}.nav-link:hover{color:#fff;background:#ffffff1a;text-decoration:none}.nav-link.active{color:#18181b;background:#fff}.nav-link .nav-icon{text-align:center;width:18px}.sidebar-footer{border-top:1px solid #ffffff26;flex-direction:column;gap:10px;padding:14px 16px;display:flex}.sidebar-footer .footer-user{align-items:center;gap:10px;min-width:0;display:flex}.sidebar-footer .u-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:600;overflow:hidden}.sidebar-footer .footer-links{align-items:center;gap:8px;font-size:13px;display:flex}.sidebar-footer .footer-links .dot{color:#ffffff4d}.footer-link{font:inherit;color:#ffffffb3;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;text-decoration:none}.footer-link:hover{color:#fff;text-decoration:underline}.footer-link.active{color:#fff}.app-main{flex:1;min-width:0;max-width:1200px;padding:28px 32px 48px}@media (width<=860px){.app-shell{flex-direction:column}.sidebar{flex-flow:wrap;align-items:center;width:100%;height:auto;position:static}.sidebar-nav{flex-direction:row;padding:8px 12px}.sidebar-nav .nav-section{display:none}.sidebar-footer{border-top:none;margin-left:auto}.app-main{padding:20px 16px 40px}}.auth-page{background:var(--bg);justify-content:center;align-items:center;min-height:100svh;padding:24px;display:flex}.auth-card{background:var(--surface);border:2px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:400px;padding:32px}.auth-card .auth-logo{background:var(--primary);color:#fff;border-radius:12px;justify-content:center;align-items:center;width:44px;height:44px;margin-bottom:16px;font-size:20px;font-weight:700;display:flex}.auth-card h1{margin-bottom:4px;font-size:20px}.auth-card .auth-sub{color:var(--text-muted);margin-bottom:24px;font-size:14px}.auth-card .auth-alt{text-align:center;color:var(--text-muted);margin-top:20px;font-size:13.5px}.grid-cards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;display:grid}.grid-cards .card-link{color:inherit;padding:18px;text-decoration:none;transition:border-color .15s,box-shadow .15s;display:block}.grid-cards .card-link:hover{background:var(--surface-2);text-decoration:none}.grid-cards .card-title{color:var(--text);justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;font-size:15.5px;font-weight:600;display:flex}.grid-cards .card-desc{color:var(--text-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:12px;font-size:13.5px;display:-webkit-box;overflow:hidden}.grid-cards .card-meta{color:var(--text-faint);font-size:12.5px}.tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:20px;display:flex}.tabs .tab{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:9px 14px;font-size:14px;font-weight:500}.tabs .tab:hover{color:var(--text)}.tabs .tab.active{color:var(--primary);border-bottom-color:var(--primary)}.breadcrumb{color:var(--text-faint);flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px;font-size:13px;display:flex}.filters-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.filters-row .select,.filters-row .input{width:auto}.detail-grid{grid-template-columns:2fr 1fr;align-items:start;gap:20px;display:grid}@media (width<=900px){.detail-grid{grid-template-columns:1fr}}.meta-list{flex-direction:column;gap:14px;display:flex}.meta-list .meta-item .meta-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-faint);margin-bottom:3px;font-size:12px;font-weight:600}.meta-list .meta-item .meta-value{color:var(--text);align-items:center;gap:8px;font-size:14px;display:flex}.task-title-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.description-box{white-space:pre-wrap;color:var(--text);font-size:14.5px}.subtask-list{flex-direction:column;gap:4px;display:flex}.subtask-item{padding:2px 0}.subtask-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.subtask-row .grow{flex:1}.subtask-toggle{color:var(--text-faint);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:13px;line-height:1}.subtask-toggle:hover{color:var(--text)}.subtask-title{font:inherit;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;padding:0;font-size:14px;font-weight:500}.subtask-title:hover{color:var(--primary)}.select-sm{width:auto;padding:4px 8px;font-size:13px}.subtask-body{border:1px solid var(--border);border-radius:var(--radius-sm);margin:8px 0 4px 24px;padding:10px 12px}.assignee-inline{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}.assignee-chip{background:var(--neutral-soft);color:var(--text);border-radius:999px;align-items:center;gap:6px;padding:2px 6px 2px 3px;font-size:13px;display:inline-flex}.assignee-chip .chip-remove{cursor:pointer;color:var(--text-faint);background:0 0;border:none;padding:0 2px;font-size:11px;line-height:1}.assignee-chip .chip-remove:hover:not(:disabled){color:var(--danger)}.avatar-sm{width:20px;height:20px;font-size:9.5px}.subtask-comments{border-top:1px solid var(--border);margin-top:10px;padding-top:10px}.subtask-children{margin:4px 0 2px 24px}.assignment-row{align-items:center;gap:10px;padding:6px 0;display:flex}.assignment-row .a-name{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:14px;overflow:hidden}.comment-item{border-top:1px solid var(--border);gap:10px;padding:12px 0;display:flex}.comment-item:first-of-type{border-top:none}.comment-item .c-body{flex:1;min-width:0}.comment-item .c-head{align-items:baseline;gap:8px;margin-bottom:2px;display:flex}.comment-item .c-author{color:var(--text);font-size:13.5px;font-weight:600}.comment-item .c-time{color:var(--text-faint);font-size:12px}.comment-item .c-content{white-space:pre-wrap;font-size:14px}
