:root{--mint-50: #E6F7F3;--mint-100: #CCEFE7;--mint-500: #17B9A3;--mint-600: #13A18E;--mint-700: #0F8A79;--orange-500: #F59E0B;--red-500: #EF4444;--green-500: #10B981;--gray-50: #F9FAFB;--gray-100: #F3F4F6;--gray-200: #E5E7EB;--gray-300: #D1D5DB;--gray-400: #9CA3AF;--gray-500: #6B7280;--gray-600: #4B5563;--gray-700: #374151;--gray-900: #111827;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(0,0,0,.04);--shadow-md: 0 4px 12px rgba(0,0,0,.08);--font: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);color:var(--gray-900);background:var(--gray-50);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer;border:0;background:none;padding:0}code{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.sidebar{width:240px;flex:0 0 240px;background:#fff;border-right:1px solid var(--gray-200);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.sidebar-brand{padding:16px;display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--gray-200)}.brand-logo{width:32px;height:32px;border-radius:var(--radius-md);background:var(--mint-500);flex-shrink:0}.brand-title{font-weight:600;font-size:14px;color:var(--gray-900)}.brand-subtitle{font-size:12px;color:var(--gray-500);margin-top:2px}.sidebar-nav{flex:1;padding:12px;display:flex;flex-direction:column;gap:2px}.nav-item{padding:10px 12px;border-radius:var(--radius-md);color:var(--gray-700);font-size:14px;transition:background .15s,color .15s}.nav-item:hover{background:var(--gray-100)}.nav-item.active{background:var(--mint-500);color:#fff;font-weight:500}.sidebar-user{padding:12px 16px;border-top:1px solid var(--gray-200);display:flex;align-items:center;justify-content:space-between;gap:8px}.user-info{overflow:hidden}.user-name{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-role{font-size:11px;color:var(--gray-500)}.user-loading{font-size:12px;color:var(--gray-400)}.logout-btn{background:none;border:1px solid var(--gray-300);padding:4px 10px;font-size:12px;border-radius:var(--radius-sm);color:var(--gray-600);flex-shrink:0}.logout-btn:hover{background:var(--gray-100)}.app-shell{display:flex;min-height:100vh}.app-main{flex:1;padding:28px 40px;overflow-y:auto}.page-header{display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:24px;gap:16px}.page-title{margin:0 0 4px;font-size:24px;font-weight:600;color:var(--gray-900)}.page-subtitle{margin:0;font-size:14px;color:var(--gray-500)}.page-action{display:flex;gap:8px;align-items:center}.avatar{border-radius:50%;background:var(--mint-500);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:600;overflow:hidden;flex-shrink:0}.avatar img{width:100%;height:100%;object-fit:cover}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:var(--radius-md);font-weight:500;cursor:pointer;transition:background .15s,border-color .15s,color .15s;white-space:nowrap;-webkit-user-select:none;user-select:none;border:1px solid transparent}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-sm{padding:4px 12px;font-size:12px;min-height:28px}.btn-md{padding:8px 16px;font-size:14px;min-height:36px}.btn-primary{background:var(--mint-500);color:#fff}.btn-primary:hover:not(:disabled){background:var(--mint-600)}.btn-secondary{background:#fff;color:var(--gray-700);border-color:var(--gray-300)}.btn-secondary:hover:not(:disabled){background:var(--gray-100);border-color:var(--gray-400)}.btn-danger{background:#fff;color:var(--red-500);border-color:var(--red-500)}.btn-danger:hover:not(:disabled){background:var(--red-500);color:#fff}.btn-ghost{background:transparent;color:var(--gray-600)}.btn-ghost:hover:not(:disabled){background:var(--gray-100);color:var(--gray-900)}.chip{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:500;white-space:nowrap}.chip-mint{background:var(--mint-50);color:var(--mint-700)}.chip-gray{background:var(--gray-100);color:var(--gray-600)}.chip-orange{background:#fef3c7;color:#92400e}.chip-red{background:#fee2e2;color:#991b1b}.chip-green{background:#d1fae5;color:#065f46}.chip-blue{background:#dbeafe;color:#1e40af}.ui-input{width:100%;padding:8px 12px;font-size:14px;font-family:inherit;color:var(--gray-900);background:#fff;border:1px solid var(--gray-300);border-radius:var(--radius-md);transition:border-color .15s,box-shadow .15s}.ui-input::placeholder{color:var(--gray-400)}.ui-input:hover:not(:disabled){border-color:var(--gray-400)}.ui-input:focus{outline:none;border-color:var(--mint-500);box-shadow:0 0 0 3px #17b9a326}.ui-input:disabled{background:var(--gray-50);color:var(--gray-500);cursor:not-allowed}.ui-textarea{min-height:80px;resize:vertical}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#11182773;display:flex;align-items:center;justify-content:center;z-index:1000;padding:24px}.modal{background:#fff;border-radius:var(--radius-lg);box-shadow:0 24px 64px #00000040;width:100%;max-width:560px;max-height:calc(100vh - 48px);display:flex;flex-direction:column}.modal-header{padding:20px 24px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--gray-200)}.modal-title{margin:0;font-size:18px;font-weight:600}.modal-close{font-size:24px;color:var(--gray-400);line-height:1;padding:0 4px}.modal-close:hover{color:var(--gray-700)}.modal-body{padding:20px 24px;overflow-y:auto}.modal-footer{padding:16px 24px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--gray-200)}.ui-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns=%27http://www.w3.org/2000/svg%27 width=%2710%27 height=%276%27 viewBox=%270 0 10 6%27><path fill=%27none%27 stroke=%27%236B7280%27 stroke-width=%271.5%27 d=%27M1 1l4 4 4-4%27/></svg>");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px;cursor:pointer}.ui-table-wrap{background:#fff;border:1px solid var(--gray-200);border-radius:var(--radius-md);overflow:hidden}.ui-table{width:100%;border-collapse:collapse;font-size:14px}.ui-table thead th{background:var(--gray-50);text-align:left;padding:12px 16px;font-weight:600;color:var(--gray-600);font-size:12px;text-transform:uppercase;letter-spacing:.02em;border-bottom:1px solid var(--gray-200)}.ui-table tbody td{padding:14px 16px;border-bottom:1px solid var(--gray-100);vertical-align:middle}.ui-table tbody tr:last-child td{border-bottom:0}.ui-table tbody tr:hover td{background:var(--gray-50)}.table-empty{background:#fff;border:1px dashed var(--gray-300);border-radius:var(--radius-md);padding:60px;text-align:center;color:var(--gray-400);font-size:14px}.members-filters{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap}.sync-msg{background:var(--mint-50);color:var(--mint-700);padding:10px 16px;border-radius:var(--radius-md);margin-bottom:12px;font-size:13px}.cell-member{display:flex;align-items:center;gap:10px}.cell-name{font-weight:500;color:var(--gray-900)}.cell-sub{font-size:12px;color:var(--gray-500)}.edit-form{display:flex;flex-direction:column;gap:16px}.form-field{display:flex;flex-direction:column;gap:6px}.form-field label{font-size:12px;font-weight:500;color:var(--gray-700)}.form-field .readonly{padding:8px 12px;background:var(--gray-50);border:1px solid var(--gray-200);border-radius:var(--radius-md);color:var(--gray-600);font-size:14px}.form-field .readonly.mono{font-family:ui-monospace,Menlo,monospace;font-size:12px}.form-error{color:var(--red-500);font-size:13px}.ui-card{background:#fff;border:1px solid var(--gray-200);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.ui-card-padded{padding:20px 24px}.week-switcher{display:flex;gap:4px;align-items:center}.input-loading{padding:60px;text-align:center;color:var(--gray-400)}.input-card{margin-bottom:16px}.input-card-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}.input-card-head h3{margin:0;font-size:16px;font-weight:600}.input-card-head p{margin:4px 0 0;font-size:13px;color:var(--gray-500)}.input-card-count{font-size:13px;color:var(--gray-500);background:var(--gray-50);padding:2px 10px;border-radius:999px}.input-empty{padding:20px;text-align:center;color:var(--gray-400);font-size:13px;background:var(--gray-50);border-radius:var(--radius-md);margin-bottom:12px}.task-row{display:flex;gap:8px;align-items:flex-start;margin-bottom:8px}.task-row .ui-input{flex:1}.task-check{flex-shrink:0;width:22px;height:22px;margin-top:7px;border:1.5px solid var(--gray-300);border-radius:4px;background:#fff;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:700;line-height:1;cursor:pointer;transition:all .15s}.task-check.done{background:var(--mint-500);border-color:var(--mint-500)}.save-msg{padding:10px 16px;border-radius:var(--radius-md);font-size:13px;margin-top:12px}.save-msg.ok{background:var(--mint-50);color:var(--mint-700)}.save-msg.err{background:#fee2e2;color:#991b1b}.input-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#11182773;z-index:1000;display:flex;justify-content:flex-end}.drawer{background:#fff;height:100vh;display:flex;flex-direction:column;box-shadow:-16px 0 48px #0003;animation:slide-in .2s ease-out}@keyframes slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.drawer-header{padding:20px 24px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--gray-200);flex-shrink:0}.drawer-title{margin:0;font-size:18px;font-weight:600}.drawer-close{font-size:24px;color:var(--gray-400);line-height:1;padding:0 4px}.drawer-close:hover{color:var(--gray-700)}.drawer-body{padding:20px 24px;overflow-y:auto;flex:1}.drawer-footer{padding:16px 24px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--gray-200)}.history-filters{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap}.view-toggle{display:flex;gap:4px;background:var(--gray-100);padding:2px;border-radius:var(--radius-md)}.history-cards{display:flex;flex-direction:column;gap:16px}.history-week-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.history-week-head h3{margin:0;font-size:18px;font-weight:600}.history-week-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.history-chip{display:flex;align-items:center;gap:12px;padding:12px;background:var(--gray-50);border-radius:var(--radius-md);text-align:left;transition:background .15s;border:1px solid transparent}.history-chip:hover{background:var(--mint-50);border-color:var(--mint-500)}.chip-meta{flex:1;min-width:0}.chip-name{font-weight:500;margin-bottom:4px}.chip-sub{display:flex;gap:8px;align-items:center}.chip-sub .counts{font-size:12px;color:var(--gray-500)}.muted{color:var(--gray-500);font-size:13px}.detail-content{display:flex;flex-direction:column;gap:24px}.detail-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px;border-bottom:1px solid var(--gray-200);padding-bottom:6px}.detail-head h4{margin:0;font-size:14px;font-weight:600;color:var(--gray-700)}.detail-empty{color:var(--gray-400);font-size:13px;padding:8px 0}.detail-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.detail-list li{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:14px}.detail-meta{display:flex;justify-content:space-between;padding-top:12px;border-top:1px dashed var(--gray-200);font-size:13px}.history-chip:disabled{cursor:default;opacity:.5}.history-chip.loading{background:var(--mint-50);border-color:var(--mint-500);animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.8}50%{opacity:1}}.kpi-card{background:#fff;border:1px solid var(--gray-200);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:20px 24px;display:flex;justify-content:space-between;align-items:center;min-width:0}.kpi-body{min-width:0}.kpi-label{font-size:13px;color:var(--gray-500);margin-bottom:8px}.kpi-value{font-size:32px;font-weight:600;line-height:1;color:var(--gray-900)}.kpi-icon{width:44px;height:44px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}.kpi-gray .kpi-icon{background:var(--gray-100);color:var(--gray-600)}.kpi-mint .kpi-icon{background:var(--mint-50);color:var(--mint-700)}.kpi-orange .kpi-icon{background:#fef3c7;color:#92400e}.kpi-red .kpi-icon{background:#fee2e2;color:#991b1b}.kpi-green .kpi-icon{background:#d1fae5;color:#065f46}.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}@media (max-width: 900px){.kpis{grid-template-columns:repeat(2,1fr)}}.mytasks-filters{display:flex;gap:12px;margin-bottom:16px}.task-content .done{color:var(--gray-400);text-decoration:line-through}.overdue{color:var(--red-500);font-weight:500}.status-toggle{background:none;padding:0;cursor:pointer}.issues-filters{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap}.sync-msg{padding:10px 16px;border-radius:var(--radius-md);font-size:13px;margin-bottom:12px}.sync-msg.ok{background:var(--mint-50);color:var(--mint-700)}.sync-msg.err{background:#fee2e2;color:#991b1b}.issue-title-cell{min-width:0}.issue-title{font-weight:500;color:var(--gray-900)}.issue-sub{font-size:12px;color:var(--gray-500);margin-top:2px}.muted{color:var(--gray-400)}.issue-detail{display:flex;flex-direction:column;gap:20px}.issue-chips{display:flex;gap:8px;flex-wrap:wrap}.detail-section h4{margin:0 0 6px;font-size:13px;font-weight:600;color:var(--gray-700);text-transform:uppercase;letter-spacing:.02em;border-bottom:1px solid var(--gray-200);padding-bottom:6px}.detail-body{font-size:14px;color:var(--gray-700);white-space:pre-wrap;line-height:1.6}.issue-meta{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;background:var(--gray-50);padding:16px;border-radius:var(--radius-md)}.meta-label{font-size:12px;color:var(--gray-500);margin-bottom:4px}.meta-value{font-size:14px;color:var(--gray-900)}.issue-link{padding-top:12px;border-top:1px dashed var(--gray-200)}.issue-link a{color:var(--mint-700);font-size:13px}.issue-link a:hover{color:var(--mint-500);text-decoration:underline}
