.app-loading{height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--text-secondary)}.loading-spinner{width:32px;height:32px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}.loading-spinner.small{width:20px;height:20px;border-width:2px}@keyframes spin{to{transform:rotate(360deg)}}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(135deg,#eef2ff,#f5f3ff,#faf5ff)}.login-card{width:100%;max-width:420px;background:var(--bg-card);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:var(--radius-xl);padding:48px 40px;box-shadow:var(--shadow-lg);border:1px solid rgba(255,255,255,.6);text-align:center}.login-logo{margin-bottom:24px}.logo-icon{width:80px;height:80px;margin:0 auto;background:linear-gradient(135deg,var(--gradient-start),var(--gradient-end));border-radius:20px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:40px;font-weight:600;box-shadow:0 8px 24px #6366f159}.logo-icon.small{width:36px;height:36px;font-size:18px;border-radius:10px;box-shadow:0 2px 8px #6366f14d}.login-title{font-size:28px;font-weight:700;margin-bottom:8px;background:linear-gradient(135deg,var(--gradient-start),var(--gradient-end));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.login-subtitle{font-size:15px;color:var(--text-secondary);margin-bottom:28px}.health-status{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:20px;font-size:13px}.health-status.ok{color:#10b981}.health-status.fail{color:#ef4444}.status-dot{width:10px;height:10px;border-radius:50%;background:currentColor;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.login-error{background:#ef44441a;color:#dc2626;padding:10px 14px;border-radius:var(--radius-sm);font-size:13px;margin-bottom:16px;text-align:left}.btn{width:100%;padding:14px 20px;border-radius:var(--radius-md);font-size:15px;font-weight:500;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:8px}.btn-primary{background:linear-gradient(135deg,var(--gradient-start),var(--gradient-end));color:#fff;box-shadow:0 4px 12px #6366f14d}.btn-primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 16px #6366f166}.btn-primary:active:not(:disabled){transform:translateY(0)}.btn-secondary{background:#fff;color:var(--text-primary);border:1px solid var(--border)}.btn-secondary:hover:not(:disabled){background:#f9fafb;border-color:var(--primary-light)}.btn-login{margin-bottom:8px}.btn-disabled{background:#f3f4f6;color:var(--text-muted);cursor:not-allowed}.feishu-icon{width:20px;height:20px;background:#00d6b9;color:#fff;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.login-divider{display:flex;align-items:center;gap:12px;margin:24px 0 16px;color:var(--text-muted);font-size:13px}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:var(--border)}.login-hint{font-size:12px;color:var(--text-muted);margin-top:20px;line-height:1.6}.login-api{font-size:11px;color:var(--text-muted);margin-top:12px;font-family:SF Mono,Monaco,monospace;word-break:break-all}.login-footer{margin-top:24px;font-size:12px;color:var(--text-muted)}.app-layout{display:flex;height:100vh;overflow:hidden}.sidebar{width:240px;background:var(--bg-sidebar);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0}.sidebar-logo{display:flex;align-items:center;gap:12px;padding:24px 20px;border-bottom:1px solid var(--border)}.logo-text{font-size:18px;font-weight:700;background:linear-gradient(135deg,var(--gradient-start),var(--gradient-end));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.sidebar-nav{flex:1;padding:16px 12px;overflow-y:auto}.nav-item{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:var(--radius-sm);cursor:pointer;transition:all .15s ease;color:var(--text-secondary);margin-bottom:4px}.nav-item:hover{background:#6366f10f;color:var(--text-primary)}.nav-item.active{background:linear-gradient(135deg,#6366f11f,#8b5cf61f);color:var(--primary-dark);font-weight:500}.nav-icon{width:20px;text-align:center;font-size:14px}.sidebar-footer{padding:16px;border-top:1px solid var(--border);position:relative}.user-info{display:flex;align-items:center;gap:12px;padding:8px;border-radius:var(--radius-sm);cursor:pointer;transition:background .15s ease}.user-info:hover{background:#6366f10f}.user-avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--gradient-start),var(--gradient-end));display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:600;overflow:hidden;flex-shrink:0}.user-avatar img{width:100%;height:100%;object-fit:cover}.user-detail{flex:1;min-width:0}.user-name{font-size:13px;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-dept{font-size:11px;color:var(--text-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-menu{position:absolute;bottom:60px;left:16px;right:16px;background:#fff;border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);border:1px solid var(--border);overflow:hidden;z-index:100}.menu-item{padding:10px 14px;font-size:13px;color:var(--text-primary);cursor:pointer;transition:background .15s ease}.menu-item:hover{background:#6366f10f}.main-content{flex:1;overflow-y:auto;padding:32px}.page-header{margin-bottom:24px}.page-header h2{font-size:24px;font-weight:700;color:var(--text-primary);margin-bottom:4px}.page-desc{font-size:13px;color:var(--text-muted)}.task-list{background:var(--bg-card);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.6);box-shadow:var(--shadow-md);overflow:hidden}.task-item{display:flex;align-items:center;gap:14px;padding:16px 20px;border-bottom:1px solid var(--border);transition:background .15s ease}.task-item:last-child{border-bottom:none}.task-item:hover{background:#6366f108}.task-checkbox{flex-shrink:0}.progress-ring{width:24px;height:24px;border-radius:50%;border:2px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:12px;color:transparent;transition:all .2s ease}.progress-ring.done{background:linear-gradient(135deg,var(--gradient-start),var(--gradient-end));border-color:transparent;color:#fff}.task-content{flex:1;min-width:0}.task-title{font-size:14px;color:var(--text-primary);margin-bottom:4px}.task-meta{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--text-muted)}.task-status{padding:2px 8px;border-radius:10px;background:#6366f11a;color:var(--primary-dark);font-size:11px}.loading-state,.error-state,.empty-state{padding:48px 20px;text-align:center;color:var(--text-muted)}.loading-state{display:flex;flex-direction:column;align-items:center;gap:12px}.error-state{color:#ef4444}.error-state .btn{width:auto;margin-top:12px;padding:8px 20px;font-size:13px}*{margin:0;padding:0;box-sizing:border-box}:root{--primary: #6366f1;--primary-light: #818cf8;--primary-dark: #4f46e5;--gradient-start: #6366f1;--gradient-end: #8b5cf6;--bg-page: #f5f5ff;--bg-card: rgba(255, 255, 255, .85);--bg-sidebar: rgba(255, 255, 255, .9);--text-primary: #1f2937;--text-secondary: #6b7280;--text-muted: #9ca3af;--border: rgba(99, 102, 241, .15);--shadow-sm: 0 1px 2px rgba(99, 102, 241, .05);--shadow-md: 0 4px 12px rgba(99, 102, 241, .08);--shadow-lg: 0 8px 32px rgba(99, 102, 241, .12);--radius-sm: 8px;--radius-md: 12px;--radius-lg: 20px;--radius-xl: 28px}html,body,#root{height:100%;width:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5;color:var(--text-primary);background:linear-gradient(135deg,#eef2ff,#f5f3ff,#faf5ff);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button{font-family:inherit;cursor:pointer;border:none;outline:none}button:disabled{cursor:not-allowed;opacity:.6}
