:root{--primary-color: #2563eb;--primary-hover: #1d4ed8;--primary-light: #dbeafe;--primary-dark: #1e40af;--secondary-color: #64748b;--secondary-hover: #475569;--success-color: #10b981;--success-hover: #059669;--warning-color: #f59e0b;--warning-hover: #d97706;--error-color: #ef4444;--error-hover: #dc2626;--bg-primary: #ffffff;--bg-secondary: #f8fafc;--bg-tertiary: #f1f5f9;--bg-quaternary: #e2e8f0;--text-primary: #0f172a;--text-secondary: #334155;--text-tertiary: #64748b;--text-quaternary: #94a3b8;--border-color: #e2e8f0;--border-hover: #cbd5e1;--sidebar-width: 250px;--sidebar-width-collapsed: 80px;--header-height: 64px;--content-padding: 24px;--border-radius-sm: 6px;--border-radius: 8px;--border-radius-lg: 12px;--border-radius-xl: 16px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--transition-fast: .15s ease;--transition-normal: .3s ease;--transition-slow: .5s ease;--transition-bezier: .4, 0, .2, 1;--font-size-xs: 12px;--font-size-sm: 13px;--font-size-base: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-xxl: 24px;--font-size-xxxl: 32px;--line-height-xs: 1.2;--line-height-sm: 1.4;--line-height-base: 1.5;--line-height-md: 1.6;--line-height-lg: 1.8;--line-height-xl: 2;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700}*{box-sizing:border-box;margin:0;padding:0}html,body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:var(--font-size-base);line-height:var(--line-height-base);color:var(--text-primary);background-color:var(--bg-secondary);height:100%;overflow:hidden}#app{width:100%;height:100vh;overflow:hidden}.page-title{font-size:var(--font-size-xxl);font-weight:var(--font-weight-semibold);color:var(--text-primary);margin-bottom:var(--content-padding)}.main-content,.content-wrapper,.dashboard-container,.project-list,.user-management,.task-management,.system-settings,.system-logs,.home-container,.login-container,.project-detail,.management-dashboard{font-size:var(--font-size-base)}.card-header,.el-card__header{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--text-primary)}.el-table,.el-button{font-size:var(--font-size-base)}.el-form-item__label{font-size:var(--font-size-base);font-weight:var(--font-weight-medium);color:var(--text-primary)}.el-input__inner,.el-select__input,.el-textarea__inner,.el-tabs__item,.el-pagination{font-size:var(--font-size-base)}a{color:var(--primary-color);text-decoration:none;transition:color .2s}a:hover{color:var(--primary-hover)}::-webkit-scrollbar-thumb{background:var(--text-tertiary);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--secondary-color)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;font-size:var(--font-size-base);line-height:var(--line-height-base);color:var(--text-primary);background-color:var(--bg-primary)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-tertiary)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px;transition:background-color .2s ease}::-webkit-scrollbar-thumb:hover{background:var(--border-color-hover)}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-enter-active,.slide-leave-active{transition:all .3s ease}.slide-enter-from{transform:translateY(-20px);opacity:0}.slide-leave-to{transform:translateY(20px);opacity:0}.route-transition-enter-active,.route-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.25,1)}.route-transition-enter-from{opacity:0;transform:translate(10px)}.route-transition-leave-to{opacity:0;transform:translate(-10px)}.hover-lift{transition:all .3s ease}.hover-lift:hover{transform:translateY(-2px);box-shadow:var(--box-shadow-hover)}.click-ripple{position:relative;overflow:hidden}.loading-pulse{animation:pulse 1.5s infinite}@keyframes pulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.slide-up{animation:slideUp .5s ease-out forwards}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.fade-in{animation:fadeIn .3s ease-in forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.scale-in{animation:scaleIn .3s ease-out forwards}@keyframes scaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}
