:root{--sidebar-bg:#0f1419;--sidebar-text:#8b949e;--sidebar-hover:#161b22;--sidebar-active:#21262d;--sidebar-divider:#21262d;--bg-body:#f6f8fa;--bg-card:#fff;--bg-hover:#f3f4f6;--bg-subtle:#f9fafb;--text-main:#1f2328;--text-secondary:#57606a;--text-muted:#8c959f;--green:#1a7f37;--green-light:#dafbe1;--red:#cf222e;--red-light:#ffebe9;--amber:#d4a72c;--amber-light:#fff8c5;--border:#d0d7de;--border-light:#e7e9eb;--radius:6px;--radius-md:10px;--radius-lg:12px;--radius-xl:16px;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Noto Sans SC", sans-serif;--font-mono:"SF Mono", "JetBrains Mono", "Cascadia Code", Consolas, monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-sans);background:var(--bg-body);color:var(--text-main);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}button{font-family:inherit}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translate(-50%,20px)}to{opacity:1;transform:translate(-50%)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.animate-fade-in{animation:.3s fadeIn}.animate-slide-up{animation:.3s slideUp}.animate-pulse{animation:1.5s infinite pulse}*{box-sizing:border-box}.project-overview-page{color:#1d2939;background-color:#f6f8fc;padding:48px;font-family:Microsoft YaHei,Inter,system-ui,sans-serif}.page-title{color:#101828;letter-spacing:.5px;margin-bottom:36px;font-size:28px;font-weight:600}.card-wrap{flex-direction:column;gap:20px;max-width:1200px;display:flex}.pro-card{cursor:pointer;background:#fff;border:1px solid #00000008;border-radius:14px;justify-content:space-between;align-items:center;gap:30px;width:100%;padding:24px 28px;transition:all .3s cubic-bezier(.2,0,.2,1);display:flex;position:relative;box-shadow:0 2px 16px #0000000a}.pro-card:hover{border-color:#534ab71f;transform:translateY(-3px);box-shadow:0 10px 28px #534ab71c}.del-tag{color:#d92d20;z-index:2;cursor:pointer;background:#fef3f3;border:none;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;font-size:16px;transition:all .24s;display:flex;position:absolute;top:20px;right:28px}.del-tag:hover{color:#fff;background:#d92d20}.card-left{flex:1}.card-left h3{color:#101828;margin-bottom:12px;font-size:20px;font-weight:600}.card-desc-text{color:#475467;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:12px;font-size:14px;line-height:1.6;display:-webkit-box;overflow:hidden}.card-date-text{color:#98a2b3;font-size:13px}.card-right{flex-shrink:0;align-items:center;gap:20px;display:flex}.data-item{text-align:center;min-width:80px}.data-num{color:#534ab7;font-size:20px;font-weight:600}.data-label{color:#667085;margin-top:4px;font-size:12px}.tag-group{flex-direction:column;gap:8px;display:flex}.hard-tag{color:#534ab7;background:#f0f4ff;border-radius:20px;padding:4px 10px;font-size:12px}.mask{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:999;background:#0000006b;justify-content:center;align-items:center;width:100vw;height:100vh;display:flex;position:fixed;top:0;left:0}.modal-box{background:#fff;border-radius:16px;width:860px;max-height:90vh;padding:34px;overflow-y:auto;box-shadow:0 8px 40px #0000001f}.modal-head{justify-content:space-between;align-items:center;margin-bottom:30px;display:flex}.modal-head h2{color:#101828;margin:0;font-size:23px;font-weight:600}.close-modal{cursor:pointer;background:#f2f4f7;border:none;border-radius:50%;width:34px;height:34px;font-size:18px;transition:all .2s}.close-modal:hover{background:#e4e7ec}.block{background:linear-gradient(145deg,#f7f9ff,#f3f6ff);border:1px solid #534ab714;border-radius:14px;margin-bottom:22px;padding:24px}.block h4{color:#2c2580;align-items:center;gap:8px;margin-bottom:20px;font-size:18px;font-weight:600;display:flex}.form-item{margin-bottom:18px}.form-item:last-child{margin-bottom:0}.form-item label{color:#344054;margin-bottom:8px;font-size:14px;display:block}.form-tip{color:#98a2b3;margin-top:4px;font-size:12px}.input-edit{background:#fff;border:1px solid #d0d5dd;border-radius:10px;width:100%;padding:11px 14px;font-size:14px;transition:border .24s}.input-edit:focus{border-color:#534ab7;outline:none;box-shadow:0 0 0 3px #534ab71f}textarea.input-edit{resize:vertical;min-height:110px;line-height:1.6}.input-readonly{color:#667085;cursor:not-allowed;background:#f2f4f7;border:1px solid #e4e7ec;border-radius:10px;width:100%;padding:11px 14px;font-size:14px}.modal-footer{justify-content:center;gap:18px;margin-top:36px;display:flex}.btn{cursor:pointer;border:none;border-radius:10px;padding:12px 30px;font-size:15px;transition:all .24s}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{color:#fff;background:#534ab7}.btn-primary:hover:not(:disabled){background:#463da3;box-shadow:0 4px 12px #534ab738}.btn-default{color:#344054;background:#f2f4f7}.btn-default:hover:not(:disabled){background:#e4e7ec}.btn-export{color:#344054;background:#fff;border:1px solid #d0d5dd}.btn-export:hover:not(:disabled){color:#534ab7;border-color:#534ab7}.confirm-box{width:440px;padding:30px}.confirm-box h3{color:#d92d20;margin:0 0 16px;font-size:20px}.confirm-desc{color:#475467;margin-top:16px;line-height:1.7}.confirm-btns{justify-content:flex-end;gap:14px;margin-top:28px;display:flex}.btn-danger{color:#fff;background:#d92d20}.btn-danger:hover:not(:disabled){background:#b62218}.tip{color:#fff;z-index:9999;background:#1d2939;border-radius:10px;padding:12px 28px;font-size:14px;position:fixed;top:40px;left:50%;transform:translate(-50%);box-shadow:0 4px 20px #00000026}.title-bar{justify-content:space-between;align-items:center;margin-bottom:30px;display:flex}.btn-create{color:#fff;cursor:pointer;background:#534ab7;border:none;border-radius:10px;padding:10px 20px;font-size:14px;font-weight:600;transition:all .24s}.btn-create:hover{background:#463da3;box-shadow:0 4px 12px #534ab738}.empty-state{text-align:center;color:#9ca3af;background:#fff;border:1px dashed #e5e7eb;border-radius:12px;padding:60px;font-size:14px}.loading-state,.error-state{text-align:center;padding:40px;font-size:14px}.loading-state{color:#9ca3af}.error-state{color:#dc2626;background:#fef2f2;border-radius:8px}
