/* 两端共用的视觉规范；不改变导航、数据与工作流。 */
.app { --line:#dce6f3; --muted:#73839d; }
.app .content { padding:22px 20px; }
.app .header h1 { font-size:clamp(21px,1.6vw,30px); letter-spacing:.3px; }
.app .header-tools { gap:10px; }
.app .header .icon-action { display:inline-grid;place-items:center;border:0;width:32px;height:32px;background:transparent;padding:0;position:relative; }
.app .header .icon-action .wb-icon { width:22px;height:22px; }
.app .header .icon-action:hover { background:#ffffff15; }
/* 顶栏刷新按钮忙碌态：转圈 + 变淡，让"点击已生效"看得见（2026-10-13） */
.app .header .icon-action.is-busy { opacity:.55; pointer-events:none; }
.app .header .icon-action.is-busy .wb-icon,
.app .header .icon-action.is-busy svg { animation:wb-refresh-spin .8s linear infinite; }
@keyframes wb-refresh-spin { to { transform:rotate(360deg); } }
.app .header .user-chip { cursor:pointer;border-radius:24px;gap:9px; }
.app .header .user-chip:focus-visible { outline:2px solid #8bc6ff;outline-offset:4px; }
.app .header .user-chip>span { width:38px;height:38px;display:grid;place-items:center;overflow:hidden;background:linear-gradient(145deg,#62baff,#1473ef);color:white;font-size:0; }
.app.manager-mode .user-chip>span::before { content:none; }
.app .header .user-chip>span .wb-icon { width:27px;height:27px; }
.app .user-chip img { width:100%;height:100%;object-fit:cover; }
.app .header .user-chip div { display:block; }
.app .header .user-chip strong { font-size:13px; }
.app .header .user-chip small { font-size:10px;opacity:.8; }
.app .auth-account-button { padding:7px 12px!important;font-size:12px;white-space:nowrap; }
.app .brand-icon img,.app .header-brand-icon img { width:100%;height:100%;object-fit:contain; }
.app .sidebar { background:linear-gradient(170deg,#082753,#051c42 75%); }
.app .sidebar .nav-btn { font-size:16px;height:56px;gap:15px;border-radius:7px;transition:background .15s; }
.app .sidebar .nav-btn.active { background:linear-gradient(110deg,#1683ff,#075fe9);box-shadow:0 5px 16px #006bff30; }
.app .sidebar .nav-btn:hover:not(.active) { background:#ffffff0d; }
.app .nav-icon { flex-shrink:0; }
.app .side-building { height:350px;background:url('/assets/workbench-skyline.svg') bottom center/cover no-repeat;opacity:.65;border:0;pointer-events:none; }
.app .side-building span { display:none; }
.app.manager-mode .header::after { inset:0 25% 0 37%;opacity:.25;background:url('/assets/workbench-skyline.svg') center 70%/190px auto repeat-x; }
.app .mgr-alerts .mgr-panel-head h3::before { content:none; }
.app .mgr-alerts .mgr-panel-head h3>.wb-icon { width:19px;height:19px;color:#ff4053; }
.app .workspace-page h2 { font-size:25px;letter-spacing:.2px;margin-bottom:20px; }
.app .workspace-panel,.app .panel,.app .mgr-panel { border-color:#dce6f3;border-radius:10px;box-shadow:0 2px 8px #183d7004; }
.app .workspace-panel>header,.app .panel-head,.app .mgr-panel-head { min-height:47px;gap:10px; }
.app .workspace-toolbar { gap:10px;flex-wrap:wrap; }
.app .workspace-toolbar input,.app .workspace-toolbar select { min-height:35px; }
.app .workspace-table { font-size:13px; }
.app .workspace-table th { font-size:12px;background:#f4f7fc;color:#355074;padding:12px; }
.app .workspace-table td { padding:13px 12px;line-height:1.65;border-color:#edf2f8; }
.app .workspace-table tr.selected,.app .workspace-list-item.selected { background:#edf5ff; }
.app .workspace-table tbody tr:hover { background:#f6f9ff; }
.app .workspace-table .name-cell { overflow-wrap:anywhere; }
.app .workspace-table .subline { line-height:1.6;margin-top:3px; }
.app .workspace-scroll { scrollbar-width:thin;scrollbar-color:#cbd8ec transparent; }
.app .btn { border-radius:6px;min-height:34px;line-height:1.4; }
.app .btn .wb-icon,.personal-dialog .btn .wb-icon { width:18px;height:18px;margin-right:5px;vertical-align:-4px; }
.app .table-btn { min-height:27px; }
.app button:focus-visible,.app input:focus-visible,.app select:focus-visible,.personal-dialog button:focus-visible { outline:2px solid #6dacf9;outline-offset:2px; }
.app .empty { padding:38px 20px;color:#8797ad;font-size:13px; }
.app .workspace-stat { display:grid;grid-template-columns:48px minmax(0,1fr);column-gap:14px;align-content:center;min-height:92px;border-radius:9px; }
.app .workspace-stat-icon { grid-row:1/3;display:grid;place-items:center;align-self:center;font-style:normal; }
.app .workspace-stat-icon .wb-icon { width:37px;height:37px; }
.app .workspace-stat strong { margin-top:4px;font-size:29px; }
.app .workspace-stat:nth-child(1) { --icon-detail:#1b71ef; }
.app .workspace-stat:nth-child(2) { --icon-detail:#119fed; }
.app .workspace-stat:nth-child(3) { --icon-detail:#ff9d1b; }
.app .workspace-stat:nth-child(4) { --icon-detail:#0bb59f; }
.app .workspace-stat:nth-child(5) { --icon-detail:#f85a6e; }
.app:not(.manager-mode) .workspace-stat { --icon-detail:#fff; }
.app .summary-grid.employee { grid-template-columns:repeat(5,minmax(0,1fr));gap:16px; }
.app .summary-grid.employee .summary-card { padding:19px 17px;min-height:98px; }
.app .summary-grid.employee .summary-icon { width:43px;flex:0 0 43px; }
.app .summary-grid.employee strong { font-size:30px;white-space:nowrap; }
.app .summary-grid.employee .summary-card>div>span { font-size:12px; }
.app .mgr-kpi { border-radius:9px; }
.app .mgr-mini-card { border-color:#e1e9f5;border-radius:8px; }
.app .mgr-alert-icon .wb-icon { width:20px;height:20px; }
.app .iq-panel { border-color:#dce6f3;padding:20px;border-radius:10px; }
.app .iq-panel>h3 { color:#17365e;font-size:17px; }
.app .iq-table td,.app .iq-table th { padding:10px 12px; }
.app .iq-table th { background:#f5f8fc; }
.personal-dialog { width:min(700px,calc(100vw - 32px));max-width:700px;max-height:90vh;padding:26px;border-radius:14px; }
.personal-dialog .modal-title { margin-bottom:16px; }
.personal-tabs { display:flex;gap:6px;border-bottom:1px solid #e3eaf4;margin-bottom:20px; }
.personal-tabs[hidden] { display:none; }
.personal-tabs button { padding:12px 18px;border:0;border-bottom:3px solid transparent;background:none;color:#6f7f96;font:inherit;cursor:pointer; }
.personal-tabs button.active { color:#0869ef;border-color:#0869ef;font-weight:700; }
.personal-dialog .security-form { margin-top:0;padding-top:0;border-top:0; }
.personal-dialog .security-form.hidden { display:none; }
.profile-avatar-row { display:flex;align-items:center;gap:22px;padding:20px;border-radius:10px;background:#f5f8ff;margin-bottom:22px; }
.profile-avatar { width:88px;height:88px;flex-shrink:0;background:linear-gradient(140deg,#61b5ff,#1267e9);border:4px solid #fff;box-shadow:0 3px 12px #1c62ae24;border-radius:50%;display:grid;place-items:center;color:#fff;overflow:hidden; }
.profile-avatar>img { width:100%;height:100%;object-fit:cover; }
.profile-avatar .wb-icon { width:52px;height:52px; }
.profile-avatar-row p,.profile-note { color:#7b8ba3;font-size:12px;line-height:1.7; }
.avatar-picker { position:relative;display:inline-block;cursor:pointer;overflow:hidden; }
.personal-dialog .security-form label.avatar-picker { display:inline-flex;flex-direction:row;align-items:center;gap:5px;padding:8px 13px;font-size:12px;margin:0 10px 0 0; }
.avatar-picker input,.platform-logo-upload input { position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%; }
.profile-info { display:grid;grid-template-columns:1fr 1fr;gap:18px; }
.profile-info label { margin:0; }
.profile-info input[readonly] { background:#f4f6fa;color:#8491a3; }
.personal-restricted { max-width:530px; }
.settings-heading { display:flex;align-items:center;justify-content:space-between;gap:16px; }
.settings-heading h2 { margin-bottom:6px!important; }
.settings-heading p { color:#8b99ae;font-size:12px;margin:0 0 18px; }
.settings-health { display:flex;align-items:center;gap:7px;color:#0aab77;font-size:14px;border:1px solid #dce6ee;border-radius:7px;padding:9px 12px;white-space:nowrap; }
.settings-health .wb-icon { width:20px;height:20px; }
.settings-tabs { display:flex;border-bottom:1px solid #e3eaf5;margin-bottom:20px;overflow-x:auto; }
.settings-tabs button { min-width:126px;padding:12px 18px;border:1px solid #e3eaf5;background:#f7f9fd;color:#526785;white-space:nowrap;cursor:pointer;font:inherit;font-size:14px; }
.settings-tabs button:first-child { border-radius:6px 0 0 6px; }
.settings-tabs button:last-child { border-radius:0 6px 6px 0; }
.settings-tabs button+button { border-left:0; }
.settings-tabs button.active { background:#0869ff;border-color:#0869ff;color:#fff; }
.reference-settings-grid { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:stretch; }
.setting-section { border:1px solid #dfe8f4;border-radius:9px;padding:16px;background:#fff;min-width:0; }
.setting-section[hidden] { display:none; }
.setting-section>h3 { font-size:17px!important;color:#143263;margin:0 0 15px!important; }
.setting-row { display:grid;grid-template-columns:23px minmax(0,1fr) auto;gap:9px;align-items:center;min-height:43px;border-bottom:1px solid #edf2fa;padding:6px 0; }
.setting-row:last-child { border-bottom:0; }
.setting-row-icon { color:#1674ff; }
.setting-row-icon .wb-icon { width:21px;height:21px;--icon-detail:#fff; }
.setting-row strong { font-size:13px;display:block;color:#233e65; }
.setting-row small { font-size:11px;display:block;color:#8594ad;line-height:1.6;margin-top:3px; }
.setting-state { font-size:11px;padding:4px 7px;border-radius:4px;white-space:nowrap;color:#0aa075;background:#edf9f4; }
.setting-state.muted { color:#8491a7;background:#f2f4f8; }
.setting-state.info { color:#2878df;background:#eef5ff; }
.settings-field { display:flex;flex-direction:column;gap:8px;font-size:13px;color:#496080;margin:12px 0; }
.settings-field input { width:100%;padding:10px;border:1px solid #d4dfef;border-radius:5px;font:inherit;color:#223d61; }
.settings-inline { flex-direction:row;align-items:center;justify-content:flex-end;font-size:12px; }
.settings-inline input { width:76px;padding:6px; }
.platform-logo-upload { display:flex;align-items:center;justify-content:center;gap:17px;position:relative;padding:18px 10px;min-height:106px;border:1px dashed #bfcee5;background:#f8faff;border-radius:6px;cursor:pointer; }
.platform-logo-upload.dragging { border-color:#1474ef;background:#edf5ff; }
#platformLogoPreview { width:58px;height:58px;flex-shrink:0;color:#1473ff; }
#platformLogoPreview img,#platformLogoPreview .wb-icon { width:100%;height:100%;object-fit:contain; }
.platform-logo-upload strong { font-size:13px;color:#33517b; }
.platform-logo-upload small { display:block;margin-top:9px;font-size:10px;color:#7e91ad; }
.setting-switch { display:block;width:38px;height:21px;position:relative;cursor:pointer; }
.setting-switch input { position:absolute;opacity:0;width:100%;height:100%;margin:0; }
.setting-switch span { display:block;width:100%;height:100%;background:#c8d3e3;border-radius:12px;pointer-events:none; }
.setting-switch span::before { content:'';position:absolute;left:3px;top:3px;width:15px;height:15px;background:#fff;border-radius:50%;box-shadow:0 1px 3px #31436433;transition:transform .15s; }
.setting-switch input:checked+span { background:#126bff; }
.setting-switch input:checked+span::before { transform:translateX(17px); }
.setting-switch input:focus-visible+span { outline:2px solid #6dacf9;outline-offset:3px; }
.risk-settings { padding:12px 0;font-size:13px;color:#354e70; }
.risk-settings p { font-size:11px;color:#8491a5;line-height:1.6; }
.risk-settings>div { display:grid;grid-template-columns:repeat(4,1fr);gap:8px; }
.risk-settings span { text-align:center;border:1px solid currentColor;border-radius:5px;padding:8px 3px; }
.risk-settings small { display:block;font-size:10px;margin-top:4px; }
.risk-A { color:#ed5263; }.risk-B { color:#f8942d; }.risk-C { color:#e3a122; }.risk-D { color:#13ac81; }
.settings-interfaces { grid-column:1/-1; }
.settings-interface-grid { display:grid;grid-template-columns:1fr 1fr;gap:18px; }
.settings-interface-grid>div { border:1px solid #e7eef7;background:#f9fbff;border-radius:6px;padding:15px; }
.settings-interface-grid strong { color:#2975d9;font-size:13px; }
.settings-interface-grid .wb-icon { width:19px;height:19px; }
.settings-interface-grid dl { display:flex;gap:24px;flex-wrap:wrap; }
.settings-interface-grid dt { font-size:11px;color:#8b98ad;margin-bottom:7px; }
.settings-interface-grid dd { margin:0;font-size:12px;color:#324e75;overflow-wrap:anywhere; }
.settings-footer { display:flex;justify-content:center;gap:18px;border-top:1px solid #e5ecf6;padding:20px 0 0;margin-top:20px; }
.settings-footer .btn { min-width:150px;padding:10px 20px; }
@media(max-width:1450px){.reference-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.app .summary-grid.employee{gap:10px}.app .summary-grid.employee .summary-card{padding:15px 11px;gap:9px}.app .summary-grid.employee strong{font-size:25px}.app .summary-grid.employee .summary-icon{width:32px;flex-basis:32px}.app .summary-icon .wb-icon{width:31px;height:31px}.app .header-tools{gap:6px}}
@media(max-width:1100px){.app .header .user-chip div{display:none}.app .sidebar .nav-btn{font-size:14px}.app .summary-grid.employee{grid-template-columns:repeat(3,minmax(0,1fr))}.reference-settings-grid{grid-template-columns:1fr}.settings-interface-grid{grid-template-columns:1fr}.app .workspace-stat{padding:14px;grid-template-columns:34px minmax(0,1fr);column-gap:9px}.app .workspace-stat-icon .wb-icon{width:29px;height:29px}}
@media(max-width:760px){.app .sidebar .nav-btn{padding:0;justify-content:center}.app .content{padding:12px}.app .summary-grid.employee{grid-template-columns:repeat(2,minmax(0,1fr))}.app .header-brand-icon{display:none!important}.app .header .user-chip{display:none}.app .header .icon-action{display:none}.app .header .auth-account-button{padding:6px!important}.app .header h1{font-size:17px;max-width:42vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-info{grid-template-columns:1fr}.profile-avatar-row{padding:12px;gap:12px}.profile-avatar{width:66px;height:66px}.personal-dialog{padding:18px}.settings-heading{align-items:flex-start}.settings-health{font-size:11px;padding:6px}.settings-tabs button{min-width:104px}.settings-footer .btn{min-width:120px}.app .mgr-dashboard{min-width:0}.app .mgr-summary{height:auto;grid-template-columns:repeat(2,minmax(0,1fr))}.app .mgr-kpi{min-height:84px}.app .mgr-main-grid,.app .mgr-bottom-grid{grid-template-columns:1fr}}
/* 调整项目状态弹窗：状态按钮放大 + 悬停变色提醒（2026-10-16）。
   注意：弹窗 #detailDialog 是 <body> 直接子元素，不在 .app 作用域内，故选择器以 .detail-modal 作用域，不能用 .app 前缀。 */
.detail-modal .state-opts { display:flex;flex-wrap:wrap;gap:12px;margin:6px 0 4px; }
.detail-modal .state-opt { min-width:130px;padding:14px 20px;font-size:15px;font-weight:600;border:1px solid #d4e0f2;background:#f6f9ff;color:#1f4f8a;transition:background .15s,color .15s,border-color .15s,transform .12s,box-shadow .15s;cursor:pointer; }
.detail-modal .state-opt:hover { background:#1f6feb;border-color:#1f6feb;color:#fff;transform:translateY(-1px);box-shadow:0 4px 12px #1f6feb40; }
.detail-modal .state-opt:active { transform:translateY(0);box-shadow:none; }

/* 2026-10-30：新建项目向导第②步「人工填写招标需求」的要求行 */
.wiz-req { display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 8px; }
.wiz-req > select[data-wiz-cat] { flex:0 0 168px;min-width:150px; }
.wiz-req > input[data-wiz-content] { flex:1 1 240px;min-width:180px; }
.wiz-req .wiz-req-critical { flex:0 0 auto;display:flex;align-items:center;gap:4px;white-space:nowrap; }

/* 2026-11-05：计分明细「调整计分」小按钮 */
.score-mini-btn{margin-top:8px;padding:4px 12px;font-size:12px;border:1px solid #c9d4e3;border-radius:8px;background:#fff;color:#3b5372;cursor:pointer;}
.score-mini-btn:hover{background:#eef3fa;border-color:#9db4d0;}