.date-picker{display:inline-block;position:relative}.date-picker-trigger{border:1px solid var(--border,#e5e7eb);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border-radius:8px;align-items:center;gap:6px;min-width:160px;padding:6px 10px;font-size:13px;transition:border-color .15s;display:flex}.date-picker-trigger:hover{border-color:var(--primary,#007aff)}.date-picker-value{color:var(--text-primary,#111);white-space:nowrap;flex:1;font-weight:500}.date-picker-placeholder{color:var(--gray-400,#9ca3af);flex:1}.date-picker-icon{color:var(--gray-400,#9ca3af);flex-shrink:0}.date-picker-clear{color:var(--gray-400,#9ca3af);cursor:pointer;border-radius:3px;flex-shrink:0;padding:1px}.date-picker-clear:hover{color:var(--danger,#ef4444);background:var(--danger-light,#fef2f2)}.date-picker-dropdown{border:1px solid var(--border,#e5e7eb);box-sizing:border-box;background:#fff;border-radius:12px;width:300px;padding:12px;animation:.15s ease-out dp-fade-in;overflow:visible;box-shadow:0 10px 40px #0000001f,0 2px 8px #0000000f}@keyframes dp-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.date-picker-header{align-items:center;gap:4px;margin-bottom:8px;display:flex}.date-picker-nav-btn{cursor:pointer;width:28px;height:28px;color:var(--gray-600,#4b5563);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.date-picker-nav-btn:hover{background:var(--gray-100,#f3f4f6)}.date-picker-title{text-align:center;color:var(--text-primary,#111);flex:1;font-size:14px;font-weight:600}.date-picker-today-btn{background:var(--primary-light,#eff6ff);color:var(--primary,#007aff);cursor:pointer;border:none;border-radius:6px;flex-shrink:0;padding:3px 8px;font-size:11px;font-weight:600}.date-picker-today-btn:hover{background:var(--primary,#007aff);color:#fff}.date-picker-weekdays{grid-template-columns:repeat(7,1fr);gap:0;margin-bottom:4px;display:grid}.date-picker-weekday{text-align:center;color:var(--gray-400,#9ca3af);padding:4px 0;font-size:11px;font-weight:600}.date-picker-days{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.date-picker-day{cursor:pointer;height:32px;color:var(--text-primary,#111);-webkit-user-select:none;user-select:none;border-radius:8px;justify-content:center;align-items:center;font-size:13px;transition:all .1s;display:flex;position:relative}.date-picker-day:hover:not(.other-month){background:var(--gray-100,#f3f4f6)}.date-picker-day.other-month{color:var(--gray-300,#d1d5db);cursor:default}.date-picker-day.today{color:var(--primary,#007aff);font-weight:700}.date-picker-day.today:after{content:"";background:var(--primary,#007aff);border-radius:50%;width:4px;height:4px;position:absolute;bottom:2px;left:50%;transform:translate(-50%)}.date-picker-day.selected,.date-picker-day.range-start,.date-picker-day.range-end{background:var(--primary,#007aff);color:#fff;font-weight:600}.date-picker-day.today.selected,.date-picker-day.today.range-start,.date-picker-day.today.range-end{color:#fff}.date-picker-day.today.selected:after,.date-picker-day.today.range-start:after,.date-picker-day.today.range-end:after{background:#fff}.date-picker-day.in-range{background:var(--primary-light,#eff6ff);color:var(--primary,#007aff);border-radius:4px}.date-picker-day.hover-range{background:var(--gray-100,#f3f4f6);border-radius:4px}.date-picker-range-hint{background:var(--primary-light,#eff6ff);color:var(--primary,#007aff);text-align:center;border-radius:8px;margin-top:8px;padding:6px 10px;font-size:12px}.export-menu{display:inline-block;position:relative}.export-dropdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);z-index:100;min-width:240px;margin-top:4px;animation:.15s ease-out dropIn;position:absolute;top:100%;right:0;overflow:hidden;box-shadow:0 8px 24px #0000001f}@keyframes dropIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.export-dropdown-header{color:var(--text-secondary);border-bottom:1px solid var(--border);background:var(--gray-50);padding:10px 14px;font-size:12px}.export-dropdown button{width:100%;color:var(--text-primary);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:10px 14px;font-size:13px;transition:background .15s;display:flex}.export-dropdown button:hover{background:var(--gray-50)}.export-dropdown hr{border:none;border-top:1px solid var(--border);margin:4px 0}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.app-layout{min-height:100vh;display:flex}.app-sidebar{width:var(--sidebar-width);background:var(--surface);z-index:100;border-right:1px solid var(--border);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;left:0}.sidebar-resize-handle{cursor:col-resize;z-index:101;background:0 0;width:4px;transition:background .15s;position:absolute;top:0;bottom:0;right:0}.sidebar-resize-handle:hover,.sidebar-resize-handle:active{background:var(--primary,#2563eb)}.sidebar-nav{flex:1;padding:12px;overflow-y:auto}.nav-section{margin-bottom:8px}.nav-section-title{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;padding:12px 12px 8px;font-size:11px;font-weight:600}.nav-item{color:var(--text-secondary);cursor:pointer;border-radius:12px;align-items:center;gap:10px;margin-bottom:4px;padding:11px 14px;font-size:15px;font-weight:600;text-decoration:none;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.nav-item:hover{background:var(--primary-light);color:var(--primary);text-decoration:none;transform:translate(2px)}.nav-item.active{background:linear-gradient(135deg, var(--primary), var(--accent));color:#fff;box-shadow:0 4px 12px #007aff40}.nav-icon{text-align:center;width:22px;font-size:16px}.sidebar-footer{border-top:1px solid var(--border);color:var(--text-secondary);padding:16px;font-size:13px}.sidebar-user{align-items:center;gap:8px;display:flex}.sidebar-avatar{background:var(--primary-light);width:28px;height:28px;color:var(--primary);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:700;display:flex}.sidebar-user-info{flex:1;min-width:0}.sidebar-username{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.sidebar-role{color:var(--text-secondary);font-size:11px}.sidebar-logout{color:var(--text-secondary);cursor:pointer;padding:6px;font-size:14px}.sidebar-logout:hover{color:var(--danger)}.app-main{margin-left:var(--sidebar-width);height:100vh;width:calc(100% - var(--sidebar-width));flex-direction:column;display:flex;overflow:hidden}.page-header{z-index:50;-webkit-backdrop-filter:blur(20px)saturate(180%);height:var(--header-height);background:#ffffffa6;border-bottom:1px solid #ffffff80;justify-content:space-between;align-items:center;padding:0 24px;display:flex;position:sticky;top:0}.page-title{color:var(--gray-900);font-size:16px;font-weight:700}.page-actions{align-items:center;gap:8px;display:flex}.page-body{box-sizing:border-box;flex-direction:column;flex:1;width:100%;min-height:0;padding:24px;display:flex;overflow:hidden auto}.global-search-wrap{position:relative}.global-search-icon{color:var(--gray-400);pointer-events:none;align-items:center;display:flex;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.global-search-input{border:1.5px solid var(--gray-200);border-radius:var(--radius-sm);background:var(--gray-50);width:240px;color:var(--text-primary);outline:none;padding:8px 14px 8px 32px;font-size:14px;transition:all .2s}.global-search-input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 3px #007aff1a}.search-results-dropdown{background:var(--surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);border:1px solid var(--border);z-index:60;max-height:300px;margin-top:4px;position:absolute;top:100%;left:0;right:0;overflow-y:auto}.search-result-item{cursor:pointer;align-items:center;gap:8px;padding:10px 14px;transition:background .15s;display:flex}.search-result-item:hover{background:var(--gray-50)}.menu-toggle{background:var(--gray-100);cursor:pointer;width:36px;height:36px;color:var(--text-primary);border:none;border-radius:8px;justify-content:center;align-items:center;font-size:18px;display:none}@media (width<=768px){.menu-toggle{display:flex}.app-sidebar{transition:transform .3s;transform:translate(-100%)}.app-sidebar.open{transform:translate(0)}.app-main{width:100%;margin-left:0}.sidebar-overlay{z-index:99;background:#0000004d;display:none;position:fixed;inset:0}.sidebar-overlay.show{display:block}}.login-page{background:#f5f5f7;justify-content:center;align-items:center;min-height:100vh;display:flex;position:relative;overflow:hidden}.login-page:before{content:"";background:radial-gradient(circle at 25% 25%,#007aff0f 0%,#0000 45%),radial-gradient(circle at 75% 60%,#5856d60d 0%,#0000 45%),radial-gradient(circle at 50% 80%,#ff95000a 0%,#0000 40%);width:200%;height:200%;animation:25s ease-in-out infinite meshFloat;position:absolute;top:-50%;left:-50%}@keyframes meshFloat{0%,to{transform:translate(0)scale(1)}33%{transform:translate(-15px,10px)scale(1.01)}66%{transform:translate(10px,-15px)scale(.99)}}.login-card{z-index:10;-webkit-backdrop-filter:saturate(180%)blur(20px);background:#ffffffd1;border:1px solid #fff9;border-radius:18px;width:420px;max-width:90vw;padding:52px 44px 44px;animation:.7s cubic-bezier(.25,.46,.45,.94) cardFadeIn;position:relative;box-shadow:0 0 0 .5px #0000000a,0 4px 16px #0000000f,0 12px 40px #0000000f}@keyframes cardFadeIn{0%{opacity:0;transform:translateY(20px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.login-logo{text-align:center;margin-bottom:36px}.login-logo h1{color:#1d1d1f;letter-spacing:-.4px;font-size:22px;font-weight:700;line-height:1.3}.login-logo p{color:#86868b;margin-top:6px;font-size:14px;font-weight:400}.login-loading{color:#86868b;flex-direction:column;align-items:center;gap:10px;margin-bottom:16px;font-size:13px;display:flex}.login-card .form-group{margin-bottom:18px}.login-card .form-label{color:#1d1d1f;margin-bottom:6px;font-size:13px;font-weight:500;display:block}.login-card .form-control{color:#1d1d1f;box-sizing:border-box;background:#00000008;border:1px solid #0000001a;border-radius:12px;outline:none;width:100%;padding:12px 16px;font-family:inherit;font-size:15px;transition:all .25s}.login-card .form-control::placeholder{color:#c7c7cc}.login-card .form-control:focus{background:#fff;border-color:#007aff;box-shadow:0 0 0 3px #007aff1f}.login-btn{letter-spacing:-.2px;cursor:pointer;border-radius:12px;width:100%;margin-top:6px;padding:13px;font-size:15px;font-weight:600;transition:all .2s}.login-btn.btn-primary{color:#fff;background:#007aff;border-color:#0000}.login-btn.btn-primary:hover{background:#0a84ff}.login-btn.btn-primary:active{background:#0066d6;transform:scale(.985)}.login-btn.btn-primary:disabled{opacity:.45;cursor:not-allowed;transform:none}.login-toggle{text-align:center;color:#86868b;margin-top:24px;font-size:13px;line-height:1.8}.login-toggle a{color:#007aff;cursor:pointer;font-weight:500;text-decoration:none;transition:color .2s}.login-toggle a:hover{color:#0a84ff}.dashboard-page{flex-direction:column;gap:20px;display:flex}.dashboard-filter-bar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.filter-btn{background:var(--surface);border:1px solid var(--border);color:var(--text-primary);cursor:pointer;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:500;transition:all .2s}.filter-btn:hover{background:var(--gray-100)}.filter-btn.active{background:var(--primary);color:#fff;border-color:var(--primary)}.filter-info{color:var(--text-secondary);margin-left:auto;font-size:13px}.stats-grid{grid-template-columns:repeat(5,1fr);gap:20px;margin-bottom:0;display:grid}@media (width<=1200px){.stats-grid{grid-template-columns:repeat(3,1fr)}}@media (width<=900px){.stats-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=600px){.stats-grid{grid-template-columns:1fr}}.stat-card{-webkit-backdrop-filter:blur(30px);box-shadow:var(--shadow-md);background:#ffffffe6;border:1px solid #ffffffb3;border-radius:24px;padding:28px 24px;transition:all .4s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.stat-card:before{content:"";background:linear-gradient(90deg, var(--primary), var(--accent));opacity:0;height:4px;transition:opacity .3s;position:absolute;top:0;left:0;right:0}.stat-card:hover:before{opacity:1}.stat-card:hover{box-shadow:var(--shadow-xl);background:#fff;transform:translateY(-6px)scale(1.02)}.stat-label{color:var(--gray-600);letter-spacing:.5px;text-transform:uppercase;margin-bottom:12px;font-size:11px;font-weight:600}.stat-value{color:var(--gray-900);letter-spacing:-1px;margin-bottom:4px;font-size:36px;font-weight:800;line-height:1}.stat-sub{color:var(--gray-500);margin-top:8px;font-size:13px;font-weight:500}.stat-card.danger .stat-value{color:var(--danger)}.stat-card.danger:before{background:linear-gradient(90deg, var(--danger), #ff6b6b)}.stat-card.warning .stat-value{color:var(--warning)}.stat-card.warning:before{background:linear-gradient(90deg, var(--warning), #fc0)}.stat-card.success .stat-value{color:var(--success)}.stat-card.success:before{background:linear-gradient(90deg, var(--success), #5fd068)}.stat-card.primary .stat-value{color:var(--primary)}.stat-card.primary:before{background:linear-gradient(90deg, var(--primary), var(--accent))}.dashboard-grid{grid-template-columns:repeat(2,1fr);gap:20px;display:grid}@media (width<=1200px){.dashboard-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=900px){.dashboard-grid{grid-template-columns:1fr}}.dashboard-card{cursor:grab;transition:box-shadow .2s;position:relative}.dashboard-card.dragging{opacity:.5;transform:scale(.98)}.dashboard-card .drag-handle{cursor:grab;width:20px;height:20px;color:var(--gray-400);font-size:14px;position:absolute;top:12px;right:12px}.dashboard-card .drag-handle:hover{color:var(--gray-600)}.dashboard-card:hover{box-shadow:var(--shadow-md)}.chart-list{flex-direction:column;gap:0;display:flex}.chart-row{align-items:center;gap:10px;width:100%;margin-bottom:10px;display:flex}.chart-label{color:var(--gray-600);text-align:right;white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;min-width:60px;max-width:100px;font-size:12px;overflow:hidden}.chart-bar-wrap{background:var(--gray-100);border-radius:4px;flex:1;height:20px;overflow:hidden}.chart-bar{background:var(--primary);color:#fff;border-radius:4px;align-items:center;min-width:24px;height:100%;padding-left:6px;font-size:11px;font-weight:600;transition:width .4s;display:flex}.chart-count{color:var(--gray-500);width:30px;font-size:12px;font-weight:600}.data-table th{background:var(--gray-50);text-align:left;color:var(--gray-600);border-bottom:1px solid var(--gray-200);white-space:nowrap;z-index:1;padding:10px 14px;font-weight:600;position:sticky;top:0}.data-table td{border-bottom:1px solid var(--gray-100);color:var(--gray-800);vertical-align:middle;padding:10px 14px}.data-table tr:hover td{background:var(--gray-50)}.data-table tr.overdue td{background:#fff5f5}.table-wrap{border-radius:var(--radius);border:1px solid var(--gray-200);overflow-x:auto}.empty-state{color:var(--gray-400);flex-direction:column;justify-content:center;align-items:center;padding:60px 20px;display:flex}.empty-state .empty-icon{margin-bottom:12px;font-size:48px}.empty-state p{font-size:14px}.kanban-page{flex-direction:column;flex:1;gap:16px;min-height:0;display:flex}.kanban-filters{flex-wrap:wrap;align-items:center;gap:8px;display:flex;position:relative;overflow:visible}.kanban-filters .filter-input{flex:1;min-width:200px}.kanban-filters .filter-select{width:auto;min-width:130px}.kanban-board{flex:1;justify-content:stretch;gap:16px;min-height:0;padding-bottom:8px;display:flex;overflow-x:auto}.kanban-col{background:var(--gray-50);border-radius:var(--radius);flex-direction:column;flex:1;min-width:220px;max-height:100%;display:flex;overflow:hidden}.kanban-col-header{color:var(--text-primary);border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px;font-size:14px;font-weight:600;display:flex}.kanban-col-label{align-items:center;gap:6px;display:flex}.kanban-col-count{background:var(--gray-200);color:var(--gray-600);border-radius:10px;padding:1px 8px;font-size:12px;font-weight:500}.kanban-cards{border-radius:0 0 var(--radius) var(--radius);flex-direction:column;flex:1;gap:8px;min-height:100px;padding:8px;transition:background .2s;display:flex;overflow-y:auto}.kanban-cards.drag-over{background:#007aff0f}.kanban-empty{color:var(--gray-400);justify-content:center;align-items:center;padding:32px 16px;font-size:13px;display:flex}.task-card{background:var(--surface);border-radius:var(--radius-sm);border:1px solid var(--border);cursor:grab;padding:12px 14px;transition:all .15s;position:relative;box-shadow:0 1px 3px #0000000f}.task-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.task-card.dragging{box-shadow:var(--shadow-lg);opacity:.9;transform:rotate(2deg)}.task-card.overdue{border-left:3px solid var(--danger)}.task-card.task-highlight{border:2px solid var(--primary);box-shadow:0 0 0 4px #007aff26, var(--shadow-md);animation:2s ease-in-out 2 task-pulse}@keyframes task-pulse{0%,to{box-shadow:0 0 0 4px #007aff26}50%{box-shadow:0 0 0 8px #007aff14}}.overdue-badge{background:var(--danger-light);color:var(--danger);border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600;position:absolute;top:8px;right:8px}.task-card-top{align-items:center;gap:6px;margin-bottom:8px;display:flex}.task-status-tag{white-space:nowrap;border-radius:10px;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.task-batch-tag{color:var(--gray-500);background:var(--gray-50);white-space:nowrap;text-overflow:ellipsis;border-radius:4px;padding:1px 6px;font-size:10px;overflow:hidden}.task-card-title{color:var(--text-primary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:8px;font-size:14px;font-weight:500;line-height:1.4;display:-webkit-box;overflow:hidden}.task-card-person{align-items:center;gap:6px;margin-bottom:8px;padding:4px 0;display:flex}.person-avatar-sm{font-size:18px;line-height:1}.person-name-sm{color:var(--text-primary);font-size:13px;font-weight:500}.person-name-sm.unassigned{color:var(--gray-400);font-style:italic}.person-role-sm{color:var(--gray-400);background:var(--gray-50);border-radius:4px;padding:1px 6px;font-size:11px}.task-card-meta{flex-wrap:wrap;gap:4px;margin-bottom:8px;display:flex}.task-card-meta .tag{font-size:10px}.task-card-footer{justify-content:space-between;align-items:center;margin-top:4px;display:flex}.task-deadline{color:var(--gray-500);font-size:11px}.task-deadline.overdue{color:var(--danger);font-weight:500}.task-deadline.near{color:var(--warning);font-weight:500}.task-actions{opacity:0;gap:2px;transition:opacity .15s;display:flex}.task-card:hover .task-actions{opacity:1}.task-action-btn{cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;transition:background .15s;display:flex}.task-action-btn:hover{background:var(--gray-100)}.batch-section{background:var(--gray-50);border-radius:var(--radius-sm);padding:16px}.batch-section-title{color:var(--gray-600);align-items:center;gap:8px;margin-bottom:12px;font-size:13px;font-weight:500;display:flex}.batch-person-list{flex-direction:column;gap:4px;max-height:200px;display:flex;overflow-y:auto}.batch-person-item{cursor:pointer;border-radius:8px;align-items:center;gap:10px;padding:8px 12px;font-size:14px;transition:background .15s;display:flex}.batch-person-item:hover{background:var(--gray-100)}.batch-person-item.selected{background:var(--primary-light);color:var(--primary)}.batch-person-avatar{font-size:18px}.batch-person-name{flex:1;font-weight:500}.batch-person-role{color:var(--gray-500);font-size:12px}.batch-person-item input[type=checkbox]{display:none}.fab-add{background:var(--primary,#007aff);color:#fff;cursor:pointer;z-index:100;border:none;border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;font-size:28px;line-height:1;transition:transform .2s,box-shadow .2s;display:flex;position:fixed;bottom:32px;right:32px;box-shadow:0 4px 16px #007aff66}.fab-add:hover{transform:scale(1.1);box-shadow:0 6px 24px #007aff80}.fab-add:active{transform:scale(.95)}.col-status-dot{border-radius:50%;width:8px;height:8px;margin-right:4px;display:inline-block}.col-status-dot.todo{background:#6b7280}.col-status-dot.doing{background:#2563eb}.col-status-dot.review{background:#d97706}.col-status-dot.done{background:#16a34a}.kanban-toolbar{justify-content:space-between;align-items:center;padding:4px 0;display:flex}.kanban-toolbar-left{align-items:center;gap:12px;display:flex}.task-count-info{color:var(--gray-500);font-size:13px}.kanban-toolbar-right{align-items:center;gap:8px;display:flex}.view-toggle{background:var(--gray-100);border-radius:8px;gap:2px;padding:2px;display:flex}.view-toggle-btn{cursor:pointer;color:var(--gray-500);background:0 0;border:none;border-radius:6px;padding:5px 14px;font-size:13px;font-weight:500;transition:all .15s}.view-toggle-btn.active{background:var(--surface);color:var(--text-primary);box-shadow:0 1px 3px #00000014}.view-toggle-btn:hover:not(.active){color:var(--gray-700)}.list-view{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);flex:1;min-height:0;overflow:auto}.list-table{border-collapse:collapse;width:100%;font-size:13px}.list-table thead{z-index:1;position:sticky;top:0}.list-table th{background:var(--gray-50);color:var(--gray-600);text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 12px;font-size:12px;font-weight:600}.list-table td{border-bottom:1px solid var(--gray-100);vertical-align:middle;color:var(--text-primary);padding:10px 12px}.list-table tr:hover td{background:var(--gray-50)}.list-table tr.row-overdue td{background:#ef44440a}.list-table tr.row-overdue:hover td{background:#ef444414}.list-empty{text-align:center;color:var(--gray-400);font-size:14px;padding:48px 16px!important}.list-status-tag{white-space:nowrap;border-radius:10px;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.list-name-cell{cursor:pointer;max-width:240px}.list-name-cell:hover .list-task-name{color:var(--primary)}.list-task-name{color:var(--text-primary);font-weight:500;transition:color .15s;display:inline}.overdue-badge-sm{background:var(--danger-light);color:var(--danger);vertical-align:middle;border-radius:3px;margin-left:6px;padding:0 5px;font-size:10px;font-weight:600;display:inline-block}.list-person{white-space:nowrap;font-size:13px}.list-batch-cell{text-overflow:ellipsis;white-space:nowrap;max-width:160px;overflow:hidden}.list-batch-tag{color:var(--gray-600);font-size:12px}.list-actions-cell{white-space:nowrap}.list-actions-cell .task-action-btn{opacity:1}.batch-selected-count{background:var(--primary);color:#fff;border-radius:10px;margin-left:8px;padding:1px 8px;font-size:12px;font-weight:600}.batch-selected-chips{border-bottom:1px solid var(--gray-200);flex-wrap:wrap;gap:6px;margin-bottom:8px;padding:8px 0;display:flex}.batch-chip{background:var(--primary-light);color:var(--primary);border-radius:12px;align-items:center;gap:4px;padding:3px 8px;font-size:12px;font-weight:500;display:inline-flex}.batch-chip-remove{color:var(--primary);cursor:pointer;opacity:.7;background:0 0;border:none;padding:0 2px;font-size:10px}.batch-chip-remove:hover{opacity:1}.batch-chip-more{background:var(--gray-100);color:var(--gray-500);border-radius:12px;padding:3px 8px;font-size:12px}.batch-chip-clear{color:var(--danger);cursor:pointer;background:0 0;border:none;padding:3px 6px;font-size:12px}.batch-chip-clear:hover{text-decoration:underline}.batch-line-group-header{color:var(--gray-500);text-transform:uppercase;letter-spacing:.5px;align-items:center;gap:4px;padding:6px 12px 4px;font-size:12px;font-weight:600;display:flex}.batch-line-count{color:var(--gray-400);font-size:11px;font-weight:400}.task-card-dates{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;display:flex}.task-date-item{color:var(--gray-500);white-space:nowrap;font-size:11px}.task-overdue-tag{color:var(--danger,#dc2626);background:var(--danger-light,#ef44441a);white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:600}.list-overdue-tag{color:var(--danger,#dc2626);background:var(--danger-light,#ef44441a);white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:600}.person-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;display:grid}.today-page,.person-page,.line-page,.settings-page{flex-direction:column;gap:16px;display:flex;overflow:visible}.today-date-bar{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex;position:relative;overflow:visible}.today-date-display{font-size:16px;font-weight:600}.today-date-display span{color:var(--text-secondary);margin-left:8px;font-size:13px;font-weight:400}.line-group{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid var(--border);margin-bottom:8px;overflow:hidden}.line-group-header{cursor:pointer;justify-content:space-between;align-items:center;padding:14px 20px;transition:background .15s;display:flex}.line-group-header:hover{background:var(--gray-50)}.line-expand-icon{color:var(--gray-400);font-size:12px}.line-group-body{border-top:1px solid var(--border);padding:0}.tabs{background:var(--gray-100);border-radius:10px;gap:4px;padding:3px;display:inline-flex}.tab-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:6px 16px;font-size:13px;font-weight:500;transition:all .2s}.tab-btn:hover{color:var(--text-primary)}.tab-btn.active{background:var(--surface);color:var(--text-primary);box-shadow:0 1px 3px #00000014}.task-status-dropdown{position:relative}.task-status-tag.clickable{cursor:pointer;align-items:center;transition:opacity .15s;display:inline-flex}.task-status-tag.clickable:hover{opacity:.85}.task-status-dropdown-menu{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:140px;box-shadow:var(--shadow-lg);z-index:100;margin-top:4px;padding:4px;position:absolute;top:100%;left:0}.task-status-option{cursor:pointer;color:var(--text-primary);border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-size:13px;transition:background .1s;display:flex}.task-status-option:hover{background:var(--gray-100)}.task-status-option.active{background:var(--gray-50);font-weight:600}.status-dot-sm{border-radius:50%;flex-shrink:0;width:8px;height:8px}.table-wrap{max-height:600px;overflow:auto}.type-input-row{align-items:stretch;gap:10px;margin-bottom:20px;display:flex}.type-input-row .form-control{flex:1;max-width:320px}.type-list{flex-wrap:wrap;gap:10px;display:flex}.type-chip{background:var(--primary-light);color:var(--primary);border:1px solid #007aff26;border-radius:12px;align-items:center;gap:8px;padding:8px 14px;font-size:14px;font-weight:500;transition:all .2s;display:inline-flex}.type-chip:hover{background:#007aff26;border-color:#007aff4d}.type-chip-dot{background:var(--primary);border-radius:50%;flex-shrink:0;width:8px;height:8px}.type-chip-text{line-height:1}.type-chip-remove{color:#007aff80;cursor:pointer;background:0 0;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;margin-left:2px;transition:all .15s;display:flex}.type-chip-remove:hover{color:var(--primary);background:#007aff33}.type-empty{text-align:center;color:var(--gray-400);background:var(--gray-50);border-radius:var(--radius-sm);border:1px dashed var(--gray-200);padding:32px 20px;font-size:14px}.pw-section{max-width:480px}.pw-section-header{margin-bottom:20px}.pw-section-title{color:var(--gray-900);letter-spacing:-.3px;font-size:16px;font-weight:700}.pw-section-desc{color:var(--gray-500);margin-top:4px;font-size:13px}.pw-form{flex-direction:column;gap:16px;margin-bottom:20px;display:flex}.pw-field{width:100%}.pw-field .form-control{background:var(--gray-50);border-color:var(--gray-200)}.pw-field .form-control:focus{background:var(--surface);border-color:var(--primary)}.pw-submit-btn{min-width:140px}.avatar-edit-area{align-items:flex-start;gap:20px;padding:12px 0;display:flex}.current-avatar-display{flex-direction:column;align-items:center;gap:4px;display:flex}.avatar-preview-large{background:var(--primary-light);width:64px;height:64px;color:var(--primary);border:3px solid var(--primary);border-radius:50%;justify-content:center;align-items:center;font-size:28px;font-weight:600;display:flex;overflow:hidden}.avatar-preview-large img{object-fit:cover;width:100%;height:100%}.batch-card-root{padding:20px}.batch-header-row1{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.batch-icon-box{color:#6b9eca;background:#e3edf5;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;display:flex}.batch-title{color:var(--text-primary);letter-spacing:-.2px;font-size:15px;font-weight:700}.batch-meta{color:var(--text-secondary);margin-left:4px;font-size:12px}.batch-progress-text{font-size:18px;font-weight:700;line-height:1}.batch-rate{font-size:12px;font-weight:600}.batch-progress-bar-wrap{background:var(--gray-100);border-radius:4px;height:8px;margin-bottom:12px;overflow:hidden}.batch-progress-bar-fill{border-radius:4px;height:100%;transition:width .4s}.batch-header-row2{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:16px;display:flex}.batch-items-list{flex-direction:column;gap:16px;display:flex}.batch-item-card{border:1px solid var(--border);background:var(--surface);border-radius:10px;flex-direction:column;gap:10px;padding:14px 16px;line-height:1.5;transition:box-shadow .15s;display:flex}.batch-item-card:hover{box-shadow:0 2px 8px #0000000f}.batch-item-todo{border-left:3px solid #c4c4c4}.batch-item-doing{border-left:3px solid #6b9eca}.batch-item-overdue{border-left:3px solid #c4717a}.batch-item-done{border-left:3px solid #7daf74}.batch-item-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.batch-item-title{color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;line-height:1.5;overflow:hidden}.batch-edit-btn{color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:3px;padding:3px 8px;font-size:11px;transition:all .15s;display:inline-flex}.batch-edit-btn:hover{color:#6b9eca;background:#e3edf5;border-color:#b8cde0}.batch-item-status-row{align-items:center;gap:8px;display:flex}.batch-item-progress-wrap{background:var(--gray-200);border-radius:2px;width:60px;height:4px;overflow:hidden}.batch-item-progress-fill{border-radius:2px;height:100%;transition:width .3s}.batch-item-person-status{border-top:1px solid var(--border);flex-direction:column;gap:6px;padding-top:8px;display:flex}.batch-person-row{flex-wrap:wrap;align-items:flex-start;gap:8px;display:flex}.batch-person-type-label{white-space:nowrap;flex-shrink:0;align-items:center;gap:2px;min-width:48px;font-size:11px;font-weight:600;line-height:1.8;display:inline-flex}.batch-person-pills{flex-wrap:wrap;gap:4px;display:flex}@media (width<=480px){.batch-item-status-row{flex-direction:column;align-items:flex-start}.batch-item-progress-wrap{width:100%}}.week-page{box-sizing:border-box;width:100%;min-width:0;padding:0}.week-nav{background:var(--white,#fff);border-bottom:1px solid var(--border,#e5e7eb);border-radius:12px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding:16px 20px;display:flex;position:relative;overflow:visible}.week-nav-left{gap:8px;display:flex}.week-nav-center{text-align:center;flex:1}.week-nav-right{gap:8px;display:flex}.week-title{color:var(--text,#1f2937);font-size:18px;font-weight:700}.week-subtitle{color:var(--text-secondary,#6b7280);margin-top:2px;font-size:12px}.week-stats{background:var(--white,#fff);border:1px solid var(--border,#e5e7eb);border-radius:12px;gap:12px;margin-bottom:16px;padding:16px 20px;display:flex}.week-stat-item{text-align:center;background:var(--gray-50,#f9fafb);border-radius:8px;flex:1;padding:8px 4px}.week-stat-value{color:var(--text,#1f2937);font-size:22px;font-weight:700}.week-stat-item.done .week-stat-value{color:var(--success,#16a34a)}.week-stat-item.doing .week-stat-value{color:var(--primary,#2563eb)}.week-stat-item.todo .week-stat-value{color:var(--gray-500,#6b7280)}.week-stat-item.review .week-stat-value{color:var(--warning,#d97706)}.week-stat-label{color:var(--text-secondary,#6b7280);margin-top:2px;font-size:11px}.week-person-filter{background:var(--white,#fff);border:1px solid var(--border,#e5e7eb);border-radius:12px;margin-bottom:16px;padding:12px 16px}.week-person-filter-header{align-items:center;gap:8px;margin-bottom:8px;display:flex}.week-person-filter-label{color:var(--text,#1f2937);font-size:13px;font-weight:600}.week-person-filter-chips{flex-wrap:wrap;gap:6px;display:flex}.week-person-chip{border:1px solid var(--border,#e5e7eb);background:var(--gray-50,#f9fafb);cursor:pointer;color:var(--text,#1f2937);border-radius:16px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;transition:all .2s;display:inline-flex}.week-person-chip:hover{background:var(--gray-100,#f3f4f6);border-color:var(--gray-300,#d1d5db)}.week-person-chip.selected{border-color:var(--primary,#2563eb);color:var(--primary,#2563eb);background:#eff6ff;font-weight:600}.week-person-chip-avatar{font-size:14px;line-height:1}.week-person-chip-name{font-size:12px}.week-table-wrap{-webkit-overflow-scrolling:touch;background:var(--white,#fff);border:1px solid var(--border,#e5e7eb);border-radius:12px;width:100%;overflow-x:auto}.week-table{border-collapse:collapse;table-layout:fixed;width:100%}.week-th-person{z-index:3;background:var(--gray-50,#f9fafb);text-align:left;width:130px;min-width:130px;max-width:160px;color:var(--text-secondary,#6b7280);border-bottom:2px solid var(--border,#e5e7eb);white-space:nowrap;padding:10px 14px;font-size:12px;font-weight:600;position:sticky;left:0}.week-th-date{text-align:center;background:var(--gray-50,#f9fafb);border-bottom:2px solid var(--border,#e5e7eb);color:var(--text,#1f2937);vertical-align:middle;padding:8px 10px;font-weight:600}.week-th-date.today{border-bottom-color:var(--primary,#2563eb);background:#eff6ff}.week-th-date.holiday{background:#fffbeb}.week-th-date.today.holiday{background:#eff6ff}.week-th-date-main{font-size:13px;font-weight:700}.week-th-date-sub{color:var(--text-secondary,#6b7280);margin-top:1px;font-size:11px}.week-th-today-badge{color:#fff;background:var(--primary,#2563eb);border-radius:8px;margin-top:3px;padding:0 6px;font-size:9px;font-weight:700;display:inline-block}.week-crossday-bar-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.week-batch-row{background:linear-gradient(90deg,#f9fafb 0%,#f5f7fa 100%)}.week-td-batch-person{z-index:2;vertical-align:top;background:linear-gradient(135deg,#f3f4f6,#eef1f5);border-bottom:2px solid #e0e3e8;width:130px;min-width:130px;min-height:60px;padding:10px 14px;position:sticky;left:0}.week-batch-count{color:var(--text-secondary,#6b7280);white-space:nowrap;background:#6b72801a;border-radius:8px;margin-top:2px;padding:1px 7px;font-size:10px;font-weight:600;display:inline-block}.week-td-batch{border-bottom:2px solid var(--border,#e5e7eb)}.week-crossday-row{background:linear-gradient(90deg,#faf9fc 0%,#f7f5fa 100%)}.week-td-crossday-person{z-index:2;vertical-align:top;background:linear-gradient(135deg,#f3f1f7,#edeaf4);border-bottom:2px solid #e0dce8;width:130px;min-width:130px;min-height:80px;padding:10px 14px;position:sticky;left:0}.week-crossday-count{color:#8b7ec8;white-space:nowrap;background:#8b7ec81f;border-radius:8px;margin-top:2px;padding:1px 7px;font-size:10px;font-weight:600;display:inline-block}.week-crossday-bar{cursor:pointer;align-items:center;min-height:36px;padding:4px 10px;transition:transform .2s cubic-bezier(.25,.46,.45,.94),box-shadow .2s;display:flex;overflow:hidden;box-shadow:0 1px 3px #0000000f,inset 0 1px #ffffff4d}.week-crossday-bar:hover{z-index:5;transform:translateY(-1px);box-shadow:0 4px 12px #0000001a,inset 0 1px #ffffff59}.week-crossday-bar-content{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.week-crossday-bar-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 1px 2px #0000001a;align-items:center;gap:6px;font-size:12px;font-weight:600;line-height:1.3;display:flex;overflow:hidden}.week-crossday-bar-status{white-space:nowrap;border-radius:3px;flex-shrink:0;padding:0 5px;font-size:10px;font-weight:500;line-height:1.6}.week-crossday-bar-period{color:#ffffffc7;white-space:nowrap;flex-shrink:0;font-size:11px;font-weight:400}.week-batch-card{background:var(--gray-50,#f9fafb);border:1px solid var(--border,#e5e7eb);border-radius:6px;margin-bottom:2px;padding:6px 8px}.week-batch-card-top{justify-content:space-between;align-items:center;gap:6px;margin-bottom:4px;display:flex}.week-batch-card-name{color:var(--text,#1f2937);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:12px;font-weight:600;overflow:hidden}.week-batch-card-progress{flex-shrink:0;align-items:center;gap:6px;display:flex}.week-batch-progress-text{color:var(--gray-500,#6b7280);white-space:nowrap;font-size:10px}.week-batch-progress-bar{background:var(--gray-200,#e5e7eb);border-radius:2px;width:40px;height:4px;overflow:hidden}.week-batch-progress-fill{background:var(--primary,#2563eb);border-radius:2px;height:100%;transition:width .3s}.week-batch-card-persons{flex-wrap:wrap;gap:4px;display:flex}.week-batch-person-tag{white-space:nowrap;border-radius:3px;padding:0 5px;font-size:10px;line-height:1.6}.week-batch-person-tag.doing{color:var(--primary,#2563eb);background:#2563eb14}.week-batch-person-tag.done{color:var(--success,#16a34a);background:#16a34a14}.week-batch-person-tag.overdue{color:var(--danger,#dc2626);background:#dc262614;font-weight:600}.week-batch-bar-progress{align-items:center;gap:6px;display:flex}.week-batch-bar-persons{flex-wrap:wrap;gap:3px;display:flex}.week-td-person{z-index:2;background:var(--white,#fff);border-bottom:1px solid var(--border,#e5e7eb);vertical-align:top;width:130px;min-width:130px;padding:10px 14px;position:sticky;left:0}.week-person-cell{flex-direction:column;gap:2px;display:flex}.week-person-cell-avatar{font-size:20px;line-height:1}.week-person-cell-name{color:var(--text,#1f2937);white-space:nowrap;font-size:13px;font-weight:600}.week-person-cell-role{color:var(--text-secondary,#6b7280);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.week-td-task{border-bottom:1px solid var(--border,#e5e7eb);vertical-align:top;min-height:80px;padding:6px 8px}.week-td-task.today{background:#f8fbff}.week-td-task.holiday{background:#fffcf5}.week-td-task.today.holiday{background:#f8fbff}.week-td-task-list{flex-direction:column;gap:2px;display:flex}.week-td-empty{color:var(--gray-300,#d1d5db);padding:8px 0;font-size:13px}.week-td-empty-row{text-align:center;color:var(--gray-400,#9ca3af);padding:40px 20px;font-size:13px}.week-task-row{background:var(--gray-50,#f9fafb);border-radius:4px;align-items:center;gap:6px;min-height:28px;padding:5px 8px;font-size:12px;transition:background .15s;display:flex}.week-task-row:hover{background:var(--gray-100,#f3f4f6)}.week-task-row.task-done{opacity:.5}.week-task-status{white-space:nowrap;border-radius:3px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:500;line-height:1.5}.week-task-name{color:var(--text,#1f2937);text-overflow:ellipsis;white-space:nowrap;flex:1;line-height:1.4;overflow:hidden}.week-task-name.done-text{color:var(--text-secondary,#6b7280);text-decoration:line-through}@media (width<=768px){.week-nav{text-align:center;flex-direction:column;align-items:stretch}.week-nav-left,.week-nav-right{justify-content:center}.week-stats{flex-wrap:wrap}.week-stat-item{min-width:70px}.week-person-filter-chips{gap:4px}.week-person-chip{padding:3px 8px;font-size:11px}.week-crossday-bar{min-height:30px;padding:3px 6px}.week-crossday-bar-name{font-size:10px}.week-batch-card{padding:4px 6px}.week-batch-card-top{flex-direction:column;align-items:flex-start;gap:3px}.week-batch-card-persons{flex-direction:column;gap:2px}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--primary:#007aff;--primary-light:#e8f4ff;--primary-dark:#0056cc;--accent:#5856d6;--success:#34c759;--success-light:#e8f9ec;--success-dark:#2aa147;--danger:#ff3b30;--danger-light:#ffe8e6;--danger-dark:#d70015;--warning:#ff9500;--warning-light:#fff4e5;--warning-dark:#c93400;--info:#5ac8fa;--info-light:#e5f6ff;--info-dark:#007aff;--gray-50:#fafafa;--gray-100:#f5f5f7;--gray-200:#e5e5ea;--gray-300:#d1d1d6;--gray-400:#c7c7cc;--gray-500:#8e8e93;--gray-600:#636366;--gray-700:#48484a;--gray-800:#3a3a3c;--gray-900:#1c1c1e;--background:linear-gradient(135deg, #f5f7fa 0%, #e4e8f0 100%);--surface:#fff;--text-primary:#1c1c1e;--text-secondary:#8e8e93;--border:#00000014;--sidebar-width:260px;--header-height:64px;--radius:16px;--radius-sm:10px;--radius-lg:20px;--shadow:0 2px 8px #0000000a;--shadow-md:0 4px 20px #00000014;--shadow-lg:0 10px 40px #0000001f;--shadow-xl:0 20px 60px #00000026;--status-todo:#8e8e93;--status-todo-bg:#f2f2f7;--status-doing:#007aff;--status-doing-bg:#e8f4ff;--status-review:#ff9500;--status-review-bg:#fff4e5;--status-done:#34c759;--status-done-bg:#e8f9ec;--status-blocked:#ff3b30;--status-blocked-bg:#ffe8e6}body{background:var(--background);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;background-attachment:fixed;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.6}#root{min-height:100vh}.login-switch-btn:hover{color:#5ac8fa}.login-hint{text-align:center;color:#ffffff80;border-top:1px solid #ffffff1a;margin-top:20px;padding-top:16px;font-size:11px;line-height:1.6}.btn{cursor:pointer;white-space:nowrap;letter-spacing:-.3px;border:none;border-radius:16px;align-items:center;gap:8px;padding:12px 24px;font-family:inherit;font-size:15px;font-weight:600;text-decoration:none;transition:all .3s cubic-bezier(.4,0,.2,1);display:inline-flex;position:relative;overflow:hidden}.btn:before{content:"";background:linear-gradient(90deg,#0000,#fff3,#0000);width:100%;height:100%;transition:left .5s;position:absolute;top:0;left:-100%}.btn:hover:before{left:100%}.btn-primary{background:linear-gradient(135deg, var(--primary), var(--accent));color:#fff;box-shadow:0 4px 20px #007aff59}.btn-primary:hover{transform:translateY(-3px);box-shadow:0 8px 30px #007aff73}.btn-primary:active{transform:translateY(-1px)}.btn-secondary{background:var(--surface);color:var(--text-primary);box-shadow:var(--shadow-md);border:2px solid var(--gray-200)}.btn-secondary:hover{background:var(--gray-50);box-shadow:var(--shadow-lg);border-color:var(--gray-300);transform:translateY(-2px)}.btn-danger{background:var(--danger-light);color:var(--danger);border:2px solid #0000;box-shadow:0 2px 12px #ff3b3033}.btn-danger:hover{background:var(--danger);color:#fff;transform:translateY(-2px);box-shadow:0 4px 20px #ff3b3059}.btn-success{background:var(--success-light);color:var(--success);border:2px solid #0000;box-shadow:0 2px 12px #34c75933}.btn-success:hover{background:var(--success);color:#fff;transform:translateY(-2px);box-shadow:0 4px 20px #34c75959}.btn-sm{border-radius:12px;padding:8px 16px;font-size:13px}.btn-icon{box-shadow:var(--shadow);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:44px;height:44px;padding:10px;font-family:inherit;font-size:16px;line-height:1;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex}.btn-icon:hover{box-shadow:var(--shadow-md);border-color:var(--primary);background:var(--primary-light);color:var(--primary);transform:translateY(-1px)}.card{-webkit-backdrop-filter:blur(20px)saturate(180%);border-radius:var(--radius-lg);box-sizing:border-box;background:#fff9;border:1px solid #ffffff80;width:100%;transition:all .3s;box-shadow:inset 0 1px 1px #fffc,0 4px 24px #00000014}.card:hover{background:#ffffffbf;transform:translateY(-2px);box-shadow:inset 0 1px 1px #ffffffe6,0 8px 32px #0000001f}.card-header{border-bottom:1px solid var(--gray-100);justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.card-title{color:var(--gray-900);letter-spacing:-.3px;font-size:15px;font-weight:600}.card-body{box-sizing:border-box;width:100%;padding:24px}.page-container{width:100%}.page-title-bar{margin-bottom:24px}.page-heading{color:var(--text-primary);letter-spacing:-.5px;font-size:24px;font-weight:700}.page-desc{color:var(--text-secondary);margin-top:4px;font-size:14px}.placeholder-content{background:var(--surface);border-radius:var(--radius);border:2px dashed var(--gray-200);min-height:300px;color:var(--text-secondary);justify-content:center;align-items:center;font-size:16px;display:flex}.not-found-page{background:var(--background);justify-content:center;align-items:center;min-height:100vh;display:flex}.not-found-content{text-align:center;padding:60px}.not-found-icon{margin-bottom:16px;font-size:64px}.not-found-content h1{color:var(--gray-300);margin-bottom:8px;font-size:72px;font-weight:800;line-height:1}.not-found-content p{color:var(--text-secondary);margin-bottom:24px;font-size:18px}.badge{border-radius:12px;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.status-badge{white-space:nowrap;letter-spacing:.2px;border-radius:5px;flex-shrink:0;align-items:center;padding:2px 7px;font-size:10px;font-weight:700;line-height:1.5;display:inline-flex}.status-badge.status-todo{background:var(--status-todo-bg);color:var(--status-todo)}.status-badge.status-doing{background:var(--status-doing-bg);color:var(--status-doing)}.status-badge.status-review{background:var(--status-review-bg);color:var(--status-review)}.status-badge.status-done{background:var(--status-done-bg);color:var(--status-done)}.status-badge.status-blocked{background:var(--status-blocked-bg);color:var(--status-blocked)}.tag{background:var(--gray-100);color:var(--gray-600);border-radius:4px;align-items:center;padding:1px 6px;font-size:11px;font-weight:600;display:inline-flex}.tag-p0{color:#ef4444;background:#fee2e2}.tag-p1{color:#f97316;background:#ffedd5}.tag-p2{color:#3b82f6;background:#dbeafe}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--gray-300);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--gray-400)}.form-group{margin-bottom:16px}.form-label{color:var(--gray-700);letter-spacing:-.2px;margin-bottom:6px;font-size:13px;font-weight:600;display:block}.form-control{border:2px solid var(--gray-200);border-radius:var(--radius-sm);width:100%;color:var(--text-primary);background:var(--surface);outline:none;padding:10px 14px;font-family:inherit;font-size:14px;transition:all .2s}.form-control::placeholder{color:var(--gray-400)}.form-control:focus{border-color:var(--primary);box-shadow:0 0 0 4px #007aff1f}select.form-control{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%238E8E93' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:36px}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table thead{background:var(--gray-50)}.data-table th{text-align:left;color:var(--gray-500);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--gray-100);white-space:nowrap;padding:12px 20px;font-size:12px;font-weight:600}.data-table td{border-bottom:1px solid var(--gray-100);vertical-align:middle;padding:14px 20px}.data-table tbody tr{transition:background .15s}.data-table tbody tr:hover{background:#007aff08}.data-table tbody tr:last-child td{border-bottom:none}.tag{border-radius:8px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;font-weight:500;line-height:1.4;display:inline-flex}.modal-overlay{-webkit-backdrop-filter:blur(8px);z-index:1000;opacity:0;pointer-events:none;background:#0006;justify-content:center;align-items:center;transition:opacity .25s;display:flex;position:fixed;inset:0}.modal-overlay.open{opacity:1;pointer-events:auto}.modal{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);flex-direction:column;width:480px;max-height:85vh;transition:transform .25s cubic-bezier(.4,0,.2,1);display:flex;overflow:hidden;transform:scale(.95)translateY(10px)}.modal-overlay.open .modal{transform:scale(1)translateY(0)}.modal-header{border-bottom:1px solid var(--gray-100);justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.modal-title{color:var(--gray-900);letter-spacing:-.3px;font-size:17px;font-weight:700}.modal-close{background:var(--gray-100);width:32px;height:32px;color:var(--gray-500);cursor:pointer;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;transition:all .2s;display:flex}.modal-close:hover{background:var(--gray-200);color:var(--gray-700)}.modal-body{flex:1;padding:24px;overflow-y:auto}.modal-footer{border-top:1px solid var(--gray-100);justify-content:flex-end;align-items:center;gap:12px;padding:16px 24px;display:flex}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.mb-1{margin-bottom:4px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.mb-4{margin-bottom:16px}.font-semibold{font-weight:600}.font-bold{font-weight:700}.text-xs{font-size:12px}.text-secondary{color:var(--text-secondary)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.flex-shrink-0{flex-shrink:0}.btn-ghost{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:6px 12px;font-family:inherit;transition:all .15s}.btn-ghost:hover:not(:disabled){background:var(--gray-100);color:var(--text-primary)}.btn-ghost:disabled{opacity:.3;cursor:not-allowed}.batch-person-item{border:2px solid var(--gray-200);background:var(--surface);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:10px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;transition:all .2s;display:inline-flex}.batch-person-item:hover{border-color:var(--gray-300);background:var(--gray-50)}.batch-person-item.selected{border-color:var(--primary);background:var(--primary-light);color:var(--primary)}.batch-person-name{font-weight:500}
