:root{--nav:#203a56;--nav2:#294b6b;--bg:#f4f7fb;--card:#fff;--line:#dde6f0;--text:#172b46;--muted:#708096;--blue:#2488f5;--blue-soft:#edf6ff;--green:#10a463;--green-soft:#e8f8f0;--orange:#f59b23;--orange-soft:#fff6e9;--red:#f04444;--red-soft:#fff0f0;--shadow:0 8px 24px rgba(30,55,82,.07)}
*{box-sizing:border-box}body{margin:0;color:var(--text);background:var(--bg);font:14px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif}.app-shell{display:grid;grid-template-columns:205px minmax(0,1fr);min-height:100vh}.sidebar{background:linear-gradient(180deg,#203b57,#1d354d);color:#dbe9f6;position:sticky;top:0;height:100vh;overflow:auto}.brand{height:58px;padding:17px 22px;color:#fff;border-bottom:1px solid rgba(255,255,255,.12);font-size:21px;font-weight:800}.nav-group>span{display:block;padding:13px 20px 5px;color:#94abc0;font-size:13px}.nav-group a,.nav-item{display:flex;width:100%;height:34px;align-items:center;border:0;border-left:4px solid transparent;padding:0 27px;color:#eef6ff;background:transparent;text-decoration:none;font:inherit;cursor:pointer;text-align:left}.nav-group a:hover,.nav-item:hover,.nav-item.is-active{color:#4da6ff;background:rgba(8,30,52,.3);border-left-color:#4da6ff}.topbar{height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.env-pill{padding:4px 10px;border:1px solid #bddcff;border-radius:16px;color:#1877d8;background:#f0f7ff;font-weight:700}.top-actions{display:flex;align-items:center;gap:12px}.top-actions label{display:flex;align-items:center;gap:7px;color:var(--muted)}select,input,textarea{font:inherit;color:var(--text);border:1px solid #cfdbe8;border-radius:4px;background:#fff;outline:0}select:focus,input:focus,textarea:focus{border-color:#73b4fa;box-shadow:0 0 0 2px rgba(36,136,245,.1)}.top-actions select{height:32px}.top-actions a,.link-btn,.back-link{color:var(--blue);text-decoration:none}.divider{height:18px;border-left:1px solid #ccd6e1}.content{padding:18px 22px 34px;max-width:1600px;margin:auto}.demo-banner,.info-line,.warning-line{border:1px solid #b9dafd;background:#edf6ff;color:#40709f;border-radius:5px;padding:8px 12px;margin-bottom:14px}.demo-banner{border-color:#f2d29e;background:#fff8e8;color:#855d1f}.view{display:none}.view.is-active{display:block}.page-head,.detail-heading{display:flex;align-items:flex-start;justify-content:space-between;margin:5px 0 14px}.page-head h1,.detail-heading h1{margin:0 0 3px;font-size:24px}.page-head p{margin:0;color:var(--muted)}button{font:inherit}.btn{min-height:35px;padding:6px 16px;border:1px solid #cdd9e7;border-radius:4px;background:#fff;color:#334960;font-weight:600;cursor:pointer}.btn:hover{border-color:#78b6f8;color:#1676da}.btn.primary{color:#fff;background:var(--blue);border-color:var(--blue)}.btn.primary:hover{background:#1479e5}.btn.primary.outline{color:var(--blue);background:#fff}.btn.ghost{background:transparent}.btn.small{min-height:30px;padding:4px 10px}.btn:disabled{cursor:not-allowed;color:#9ba9b8;background:#edf1f5;border-color:#e1e7ee}.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:15px}.stat{background:#fff;border:1px solid var(--line);border-radius:5px;text-align:center;padding:12px;box-shadow:var(--shadow)}.stat.is-active{border-color:#74b8ff;background:linear-gradient(135deg,#fff,#edf6ff)}.stat span{display:block;color:#64778f}.stat b{display:block;font-size:25px;color:#14263e}.panel{background:var(--card);border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);margin-bottom:13px;overflow:hidden}.panel-title{min-height:46px;padding:10px 15px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.panel-title h2{font-size:17px;margin:0}.panel-title span{font-size:12px;color:var(--muted)}.panel-title small,.subhead small{color:var(--muted);font-weight:400}.filters{display:grid;grid-template-columns:1.2fr repeat(4,1fr);gap:12px 18px;padding:13px 16px 16px}.filters label,.form-grid label{display:grid;grid-template-columns:82px 1fr;align-items:center;gap:8px;white-space:nowrap}.filters input,.filters select,.form-grid input,.form-grid select{height:34px;padding:0 9px;min-width:0}.filter-actions{display:flex;gap:9px;align-items:center}.table-wrap{width:100%;overflow:auto}table{width:100%;border-collapse:collapse;white-space:nowrap}th{padding:9px 11px;background:#f7f9fc;color:#53677e;text-align:left;font-weight:600;border-bottom:1px solid var(--line)}td{padding:9px 11px;border-bottom:1px solid #e8edf3;color:#38506a}tbody tr:hover{background:#f6faff}tbody tr.is-selected{background:#edf6ff;box-shadow:inset 3px 0 var(--blue)}.table-action{border:0;background:none;color:var(--blue);cursor:pointer;padding:0;font-weight:600}.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600}.tag.green{color:#078b50;background:var(--green-soft);border:1px solid #bce9d1}.tag.orange{color:#db7a08;background:var(--orange-soft);border:1px solid #ffd39e}.tag.red{color:#e33a3a;background:var(--red-soft);border:1px solid #ffc2c2}.tag.blue{color:#177cdc;background:var(--blue-soft);border:1px solid #badcff}.tag.gray{color:#77889a;background:#f1f4f7;border:1px solid #dce3ea}.pagination{display:flex;justify-content:space-between;align-items:center;padding:11px 15px}.pagination button{height:31px;min-width:34px;border:1px solid #d4dfea;background:#fff;color:#60748b;margin-left:5px;border-radius:4px}.pagination button.current{color:#fff;background:var(--blue);border-color:var(--blue)}.lock-line{margin-top:13px}.back-link,.link-btn{border:0;background:none;cursor:pointer;padding:0}.detail-heading{align-items:center}.project-meta{display:flex;gap:26px;color:#52677e}.latest-status{display:flex;gap:9px;align-items:center}.latest-status>span{height:24px;border-left:1px solid var(--line)}.steps{display:grid;grid-template-columns:repeat(4,1fr);background:#fff;border:1px solid var(--line);border-radius:6px;margin-bottom:13px;padding:13px 18px}.step{position:relative;padding-left:35px}.step:before{content:attr(data-index);position:absolute;left:0;top:1px;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;color:#fff;background:#9aacbf;font-weight:700}.step:after{content:"";position:absolute;left:28px;right:9px;top:13px;border-top:2px solid #d8e1eb}.step:last-child:after{display:none}.step.done:before{content:"✓";background:var(--green)}.step.current:before{background:var(--blue)}.step b,.step span{position:relative;z-index:1;background:#fff;padding-right:8px}.step span{display:block;color:var(--muted);font-size:12px}.detail-grid{display:grid;grid-template-columns:44% 56%;gap:12px}.compact th,.compact td{padding:8px 10px}.completeness{padding:10px 14px;color:var(--red);font-weight:700}.upload-panel{padding-bottom:12px}.upload-row{display:grid;grid-template-columns:180px 1fr auto;gap:10px;padding:14px}.upload-row select{padding:0 8px}.file-picker{height:36px;display:flex;align-items:center;border:1px solid #cfdbe8;border-radius:4px;overflow:hidden;color:var(--muted);cursor:pointer}.file-picker:before{content:"选择文件";padding:7px 12px;border-right:1px solid #cfdbe8;color:#38506a;background:#f7f9fc}.file-picker input,.directory-picker input{display:none}.file-picker span{padding:0 10px;overflow:hidden;text-overflow:ellipsis}.microcopy{margin:0 14px;color:#8b9aae;font-size:12px}.warning-line{margin:10px;border-color:#f7d9ad;background:#fff7e9;color:#a86d17}.run-meta{margin:12px;display:flex;gap:28px;padding:10px;background:#f6f9fc;border:1px solid #e3eaf2}.result-actions{display:flex;align-items:center;justify-content:space-between;padding:0 12px}.result-actions h3,.result-actions p{margin:0}.result-actions p{font-size:12px;color:var(--muted)}.risk-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:10px 12px}.risk-stat{padding:10px 13px;border:1px solid var(--line);border-radius:5px;background:#f7f9fc}.risk-stat b{font-size:22px;display:block}.risk-stat.red{background:var(--red-soft);color:var(--red)}.risk-stat.orange{background:var(--orange-soft);color:var(--orange)}.risk-stat.blue{background:var(--blue-soft);color:var(--blue)}.result-panel>h3{padding:0 12px;margin:5px 0}.risk-review{display:grid;grid-template-columns:2fr 1fr;margin:11px;border:1px solid var(--line)}#riskDetail,.human-review{padding:11px}.human-review{border-left:1px solid var(--line)}.human-review h3{margin:0 0 7px}.human-review small{color:var(--muted);font-weight:400}.radio-row{display:flex;gap:10px;font-size:12px}.human-review textarea{width:100%;height:86px;margin-top:10px;padding:8px;resize:none}.counter{text-align:right;color:var(--muted);font-size:12px}.review-footer{display:flex;gap:9px;padding:0 11px 12px}.review-footer #approveProject{margin-left:auto}.rules-grid{display:grid;grid-template-columns:360px minmax(0,1fr);gap:12px}.mini-filters{display:flex;gap:8px;padding:11px}.mini-filters>*{height:34px;min-width:0;padding:0 8px;flex:1}.version-card,.skill-card{padding:14px;border-top:1px solid var(--line);cursor:pointer}.version-card:hover,.version-card.is-active,.skill-card:hover,.skill-card.is-active{background:#edf6ff;box-shadow:inset 3px 0 var(--blue)}.version-card h3,.skill-card h3{margin:0 0 6px}.version-card p,.skill-card p{margin:3px 0;color:var(--muted)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px}.form-grid label{grid-template-columns:100px 1fr}.form-grid .wide{grid-column:1/-1}.form-grid textarea{height:58px;padding:8px}.subhead{display:flex;align-items:center;justify-content:space-between;padding:2px 14px 10px}.subhead h3{margin:0}.rule-footer{display:flex;align-items:center;justify-content:space-between;padding:13px;color:var(--muted)}.rule-footer .btn{margin-left:8px}.numbered{margin-top:12px}.skills-grid{display:grid;grid-template-columns:370px minmax(0,1fr);gap:12px}.skill-heading{display:flex;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line)}.skill-heading h2{margin:0 0 5px}.skill-heading h2 span{font-weight:400}.skill-meta{color:var(--muted)}.version-note{display:flex;gap:18px;margin:10px 15px;padding:9px 12px;background:#f7f9fc;border:1px solid var(--line)}.skill-actions{display:flex;justify-content:flex-end;gap:8px;padding:0 15px 10px}.skill-browser{display:grid;grid-template-columns:260px minmax(0,1fr);margin:0 15px;border:1px solid var(--line);min-height:390px}.skill-tree{padding:10px;border-right:1px solid var(--line)}.skill-tree h3{margin:0 0 8px}.tree-folder{padding:5px}.tree-file{display:block;width:100%;text-align:left;padding:6px 8px;border:0;background:none;color:#36516d;cursor:pointer;border-radius:3px}.tree-file.indent{padding-left:28px}.tree-file:hover,.tree-file.is-selected{background:#ddecfc;color:#086fcf}.file-view{min-width:0}.file-tabs{height:43px;padding:6px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}pre{margin:0;padding:15px;height:346px;overflow:auto;white-space:pre-wrap;color:#234;line-height:1.7;font-family:Consolas,"Microsoft YaHei",monospace}.skill-summary{display:grid;grid-template-columns:1.25fr 1fr 1fr;gap:10px;padding:10px 15px 14px}.skill-summary>div{border:1px solid var(--line);padding:11px}.skill-summary h3{display:flex;justify-content:space-between;margin:0}.skill-summary ul{list-style:none;padding:0;margin:8px 0;color:var(--green)}.big-number{font-size:25px;font-weight:800;margin-top:14px}.big-number small{font-size:13px;font-weight:400}.modal{display:none;position:fixed;inset:0;z-index:50;background:rgba(17,31,49,.45);align-items:center;justify-content:center;padding:24px}.modal.is-open{display:flex}.modal-card{width:min(680px,100%);max-height:92vh;overflow:auto;background:#fff;border-radius:7px;box-shadow:0 20px 80px rgba(0,0,0,.25)}.wide-modal{width:min(1060px,100%)}.preview-modal{width:min(1000px,100%)}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line)}.modal-head h2,.modal-head p{margin:0}.modal-head p{color:var(--muted)}.icon-btn{border:0;background:none;font-size:28px;color:#60738a;cursor:pointer}.catalog-filters{display:grid;grid-template-columns:1.4fr repeat(3,1fr) auto;gap:9px;padding:13px}.catalog-filters>*{height:35px;padding:0 8px}.modal-foot{display:flex;justify-content:space-between;align-items:center;padding:13px 16px;border-top:1px solid var(--line)}.modal-foot .btn{margin-left:8px}.document-preview{display:grid;grid-template-columns:2fr 1fr;background:#eef2f6;min-height:600px}.paper{margin:20px;padding:36px 45px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.1);font-family:serif;line-height:2}.paper h2{text-align:center}.paper .highlight{background:#fff0b8;border-left:4px solid var(--orange);padding:4px 9px}.document-preview aside{margin:20px 20px 20px 0;background:#fff;border-left:4px solid var(--red);padding:18px}.history-list{padding:15px}.history-item{display:grid;grid-template-columns:110px 1fr auto;gap:10px;padding:12px;border-bottom:1px solid var(--line)}.toast{position:fixed;z-index:80;right:26px;bottom:26px;max-width:390px;padding:12px 18px;color:#fff;background:#243f5b;border-radius:5px;box-shadow:0 8px 28px rgba(0,0,0,.2);transform:translateY(90px);opacity:0;transition:.25s}.toast.show{transform:translateY(0);opacity:1}
@media(max-width:1100px){.app-shell{grid-template-columns:180px minmax(0,1fr)}.filters{grid-template-columns:repeat(3,1fr)}.detail-grid,.rules-grid,.skills-grid{grid-template-columns:1fr}.detail-right{min-width:0}.stats{grid-template-columns:repeat(3,1fr)}}
@media(max-width:760px){.app-shell{display:block}.sidebar{position:static;height:auto}.sidebar nav{display:none}.topbar{position:static}.content{padding:12px}.stats{grid-template-columns:repeat(2,1fr)}.filters,.form-grid{grid-template-columns:1fr}.filters label,.form-grid label{grid-template-columns:1fr}.form-grid .wide{grid-column:auto}.detail-grid{display:block}.steps{grid-template-columns:1fr;gap:10px}.step:after{display:none}.skill-browser,.risk-review,.document-preview{grid-template-columns:1fr}.skill-tree{border-right:0;border-bottom:1px solid var(--line)}.human-review{border-left:0;border-top:1px solid var(--line)}.catalog-filters{grid-template-columns:1fr}.top-actions label{display:none}}
