:root {
  --navy:#17365d; --blue:#2f75b5; --light:#eaf2f8; --line:#d7e0e8;
  --text:#1e2935; --muted:#667788; --green:#70ad47; --yellow:#ffc000;
  --red:#c00000; --surface:#fff; --bg:#f3f6f8;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 "Segoe UI","Microsoft YaHei",sans-serif}
button,.button,input,select,textarea{font:inherit}
button,.button{border:0;border-radius:6px;background:var(--blue);color:#fff;padding:8px 14px;cursor:pointer;text-decoration:none}
button:hover,.button:hover{filter:brightness(.94)}
.secondary{background:#fff;color:var(--blue);border:1px solid var(--blue)}
.topbar{display:flex;justify-content:space-between;align-items:center;padding:18px 28px;background:var(--navy);color:#fff}
.topbar h1{margin:0;font-size:22px}.topbar p{margin:3px 0 0;color:#cbd7e5}.top-actions{display:flex;gap:10px}
.tabs{display:grid;padding:4px 22px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.tab-row{display:flex;border-bottom:1px solid #edf1f4}.tab-row:last-child{border-bottom:0}
.tabs button{background:transparent;color:var(--muted);border-radius:0;padding:14px 18px;border-bottom:3px solid transparent}
.tabs button.active{color:var(--blue);border-bottom-color:var(--blue);font-weight:600}
main{padding:22px;max-width:1800px;margin:auto}.view{display:none}.view.active{display:block}
.toolbar,.section-head{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin-bottom:16px}.section-head{justify-content:space-between}
.inline-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.section-head h2,.panel h2{margin:0}.toolbar label{display:grid;gap:4px;color:var(--muted)}
input,select,textarea{border:1px solid #bdc9d4;border-radius:5px;padding:8px;background:#fff;color:var(--text)}
.cards{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:14px;margin-bottom:18px}
.card{background:#fff;border:1px solid var(--line);border-left:5px solid var(--blue);border-radius:8px;padding:16px}
.card span{color:var(--muted)}.card strong{display:block;font-size:28px;margin-top:4px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:18px}.panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px}
.monthly-panel,.project-team-panel{margin-bottom:18px}
.panel h2{font-size:17px;margin-bottom:14px}
.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:8px;max-height:calc(100vh - 200px)}
.dashboard-table{max-height:360px}.project-team-list{display:flex;align-items:center;gap:7px;flex-wrap:wrap;white-space:normal}.team-person{display:inline-flex;align-items:center;gap:5px}
table{width:100%;border-collapse:collapse;white-space:nowrap}th,td{padding:9px 10px;border-bottom:1px solid #e7edf2;text-align:left}
th{position:sticky;top:0;background:#e8f1f8;color:#284866;z-index:2}tr:hover td{background:#f7fafc}
.sort-button{display:flex;align-items:center;justify-content:space-between;gap:7px;width:100%;min-width:max-content;margin:-9px -10px;padding:9px 10px;border-radius:0;background:transparent;color:inherit;font-weight:600;text-align:left}
.sort-button:hover{background:#d9e8f3;filter:none}.sort-button:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}.sort-button.active{color:#145a91;background:#dfeef8}
.sort-indicator{min-width:12px;color:#7890a3;font-size:11px}.sort-button.active .sort-indicator{color:#145a91}
.actions{display:flex;gap:6px}.actions button{padding:4px 8px;font-size:12px}.danger{background:var(--red)}
.badge{display:inline-block;border-radius:999px;padding:3px 8px;background:#e9eef3;color:#49606f}
.badge.ok{background:#e2f0d9;color:#386c24}.badge.warn{background:#fff2cc;color:#8a6200}.badge.bad{background:#fce1e1;color:#9d1717}
.placeholder-row{background:#f8fafc;color:#6b7280}.placeholder-row td{border-bottom-style:dashed}
.loadbar{width:110px;height:8px;background:#e6ebef;border-radius:5px;overflow:hidden;display:inline-block;margin-right:8px}
.loadbar i{display:block;height:100%;background:var(--green)}.loadbar i.medium{background:var(--yellow)}.loadbar i.high{background:var(--red)}
dialog{border:0;border-radius:10px;padding:0;width:min(720px,92vw);box-shadow:0 18px 60px #0004}
dialog::backdrop{background:#17212b88}.dialog-head{display:flex;justify-content:space-between;align-items:center;padding:15px 18px;border-bottom:1px solid var(--line)}
.dialog-head h2{margin:0}.icon-button{background:transparent;color:#555;font-size:24px;padding:0 7px}.form-grid{padding:18px;display:grid;grid-template-columns:1fr 1fr;gap:13px}
.form-grid label{display:grid;gap:5px}.form-grid .wide{grid-column:1/-1}.dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding:14px 18px;border-top:1px solid var(--line)}
#toast{position:fixed;right:20px;bottom:20px;background:#20354a;color:#fff;border-radius:7px;padding:11px 16px;opacity:0;transform:translateY(8px);transition:.2s;pointer-events:none;z-index:20}
#toast.show{opacity:1;transform:none}
.gantt-wrap{overflow:auto;max-height:calc(100vh - 190px);background:#fff;border:1px solid var(--line);border-radius:8px}
.gantt{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%}.gantt th,.gantt td{min-width:29px;width:29px;padding:6px 3px;text-align:center;border-right:1px solid #edf0f2}
.gantt .entity{position:sticky;left:0;min-width:150px;width:150px;text-align:left;background:#fff;z-index:3}.gantt th.entity{background:#e8f1f8;z-index:4}
.gantt.details .detail-meta{position:sticky;text-align:left;background:#fff;z-index:3;overflow:hidden;text-overflow:ellipsis;border-right:1px solid #d7e0e8}
.gantt.details th.detail-meta{background:#e8f1f8;z-index:4}
.gantt.details .detail-project{left:0;min-width:180px;width:180px;max-width:180px;padding-left:10px}
.gantt.details .detail-person{left:180px;min-width:120px;width:120px;max-width:120px;padding-left:10px}
.gantt.details .detail-period{left:300px;min-width:190px;width:190px;max-width:190px;padding-left:10px}
.gantt.details .detail-status{left:490px;min-width:90px;width:90px;max-width:90px;text-align:center}
.gantt.details .pending-row .detail-meta{background:#f8fafc;color:#6b7280}
.gantt.details td.pending{background:#e2e8f0;color:#64748b;font-weight:600}
.gantt .weekend{background:#f2f4f5}.gantt .busy{background:#ffe699}.gantt .conflict{background:#f4cccc;color:#9c0006;font-weight:700}
.gantt.projects .busy{background:#bdd7ee}.gantt.projects .count2{background:#5b9bd5;color:#fff}.gantt.projects .conflict{background:#2f75b5;color:#fff}
.empty{padding:28px;color:var(--muted);text-align:center}
.settings-body{padding:18px}.settings-body h3{margin:0 0 4px}.settings-body p{color:var(--muted)}
.capability-row{display:flex;align-items:center;gap:9px;margin:8px 0}.capability-row span{width:72px;color:var(--muted)}
.capability-row input{flex:1}.capability-row button{padding:6px 10px}
.version-table{max-height:52vh}.version-table .actions{min-width:120px}
@media(max-width:900px){.split{grid-template-columns:1fr}.cards{grid-template-columns:repeat(2,1fr)}.topbar{align-items:flex-start;gap:12px}.form-grid{grid-template-columns:1fr}}
