:root{--navy:#123247;--navy2:#0b2638;--cyan:#0d8dad;--paper:#f3f6f8;--card:#fff;--line:#d4dee5;--ink:#162733;--muted:#60727e;--ok:#08755c;--warn:#a35a00;--bad:#b23535;--shadow:0 8px 28px rgba(12,39,56,.08)}
*{box-sizing:border-box}html{font-size:16px}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.5 "Microsoft YaHei","PingFang SC",Arial,sans-serif}button,input,select{font:inherit}button{cursor:pointer}.topbar{background:linear-gradient(120deg,var(--navy2),var(--navy));color:#fff;border-bottom:4px solid var(--cyan)}.topbar-inner{max-width:1680px;margin:auto;padding:20px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px}.brand h1{font-size:25px;line-height:1.2;margin:0 0 5px}.brand p{margin:0;color:#b9d0dc;font-size:14px}.privacy{font-size:13px;color:#d6e8ef;border:1px solid #507286;border-radius:999px;padding:6px 11px;white-space:nowrap}.app{max-width:1680px;margin:0 auto;padding:20px 24px 36px}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px;box-shadow:var(--shadow)}.btn{border:1px solid transparent;border-radius:9px;padding:10px 15px;font-weight:700;background:#fff;color:var(--navy);transition:.16s}.btn:hover{transform:translateY(-1px)}.btn.primary{background:var(--cyan);color:#fff}.btn.dark{background:var(--navy);color:#fff}.btn.outline{border-color:#9db2be}.btn.danger{color:var(--bad);border-color:#e7bcbc}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.upload input{display:none}.spacer{flex:1}.file-name{color:var(--muted);font-size:14px;min-width:170px}.summary{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:12px;margin:14px 0}.metric{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px}.metric span{display:block;color:var(--muted);font-size:14px}.metric strong{font-size:26px;line-height:1.25;color:var(--navy)}.workspace{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}.workspace-head{padding:14px 16px;border-bottom:1px solid var(--line);display:flex;gap:10px;align-items:center;flex-wrap:wrap}.workspace-head input,.workspace-head select{height:40px;border:1px solid #b9c9d2;border-radius:8px;background:#fff;padding:0 11px;color:var(--ink)}.search{width:270px}.hint{color:var(--muted);font-size:13px}.matrix-wrap{overflow:auto;max-height:60vh;scrollbar-color:#6f8795 #e3e9ed;scrollbar-width:auto}.matrix-wrap::-webkit-scrollbar{height:15px;width:12px}.matrix-wrap::-webkit-scrollbar-track{background:#e3e9ed}.matrix-wrap::-webkit-scrollbar-thumb{background:#6f8795;border:3px solid #e3e9ed;border-radius:9px}.matrix{border-collapse:separate;border-spacing:0;min-width:2620px;width:max-content;font-size:14px}.matrix th,.matrix td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);height:48px;padding:6px 8px;text-align:center;background:#fff;white-space:nowrap}.matrix th{position:sticky;top:0;z-index:5;height:46px;background:#dcecf3;color:#244654;font-weight:700}.matrix tr:hover td{background:#f7fbfd}.matrix input,.matrix select{width:100%;height:34px;border:1px solid #c6d3da;border-radius:6px;padding:0 7px;background:#fff;color:var(--ink)}.matrix input:focus,.matrix select:focus{outline:2px solid #75c3d5;border-color:transparent}.fixed{position:sticky!important;z-index:3!important}.matrix th.fixed{z-index:8!important}.c-band{left:0;width:82px;min-width:82px}.c-code{left:82px;width:132px;min-width:132px}.c-name{left:214px;width:210px;min-width:210px}.c-plan{left:424px;width:126px;min-width:126px}.c-preview{left:550px;width:228px;min-width:228px;box-shadow:6px 0 8px rgba(11,38,56,.06)}.matrix th.c-band,.matrix th.c-code,.matrix th.c-name,.matrix th.c-plan,.matrix th.c-preview{background:#cbe1ea}.matrix td.c-band,.matrix td.c-code,.matrix td.c-name,.matrix td.c-plan,.matrix td.c-preview{background:#fff}.grade-col{width:54px;min-width:54px}.grade-toggle{appearance:none;width:28px!important;height:28px!important;padding:0!important;border:1px solid #9fb2bc!important;border-radius:7px!important;background:#fff!important;display:inline-grid;place-content:center;cursor:pointer}.grade-toggle:checked{background:var(--cyan)!important;border-color:var(--cyan)!important}.grade-toggle:checked:after{content:"1";color:#fff;font-weight:800}.grade-toggle:not(:checked):after{content:"0";color:#93a4ad}.row-actions{width:154px;min-width:154px}.mini{border:1px solid #b8cad3;background:#fff;color:var(--navy);border-radius:6px;padding:5px 8px;margin:2px;font-size:13px}.mini.red{color:var(--bad)}.empty{padding:48px;text-align:center;color:var(--muted)}.footer-panels{display:grid;grid-template-columns:minmax(300px,.7fr) minmax(430px,1.3fr);gap:14px;margin-top:14px}.panel{background:#fff;border:1px solid var(--line);border-radius:13px;padding:16px}.panel h2{font-size:18px;margin:0 0 10px}.checks{margin:0;padding:0;list-style:none;display:grid;gap:8px}.checks li{border-radius:8px;padding:9px 11px;background:#edf8f4;color:var(--ok)}.checks li.bad{background:#fff0f0;color:var(--bad)}.preview-wrap{overflow:auto;margin-top:9px}.preview-table{width:100%;border-collapse:collapse;font-size:14px}.preview-table th,.preview-table td{border-bottom:1px solid var(--line);text-align:left;padding:8px}.preview-table th{background:#edf5f8}.statusbar{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:13px;padding-top:10px}.status-dot{width:9px;height:9px;border-radius:50%;background:var(--ok)}.toast{position:fixed;right:22px;bottom:22px;z-index:30;max-width:min(440px,calc(100vw - 44px));background:var(--navy2);color:#fff;padding:13px 16px;border-radius:10px;box-shadow:0 12px 32px #001a29aa;transform:translateY(120px);opacity:0;transition:.22s}.toast.show{transform:none;opacity:1}.toast.error{background:#8e2929}.legend{display:flex;gap:16px;align-items:center;color:var(--muted);font-size:13px}.legend b{display:inline-block;width:14px;height:14px;border-radius:3px;background:var(--cyan);vertical-align:-2px;margin-right:5px}.mobile-note{display:none}.invalid{background:#fff0f0!important}.invalid input,.invalid select{border-color:#d77!important}
@media(max-width:900px){.topbar-inner{align-items:flex-start}.privacy{display:none}.app{padding:14px}.summary{grid-template-columns:1fr 1fr}.footer-panels{grid-template-columns:1fr}.mobile-note{display:block;color:var(--warn);font-size:13px}.workspace-head .spacer{display:none}.search{width:100%}}
@media(max-width:520px){.summary{grid-template-columns:1fr 1fr}.metric strong{font-size:21px}.btn{padding:9px 11px}.topbar-inner{padding:17px 15px}.app{padding:10px}.brand h1{font-size:21px}}
.dropzone{margin:14px 0;background:#fff;border:2px dashed #84aeba;border-radius:14px;padding:30px 20px;text-align:center;color:var(--muted);transition:.18s}.dropzone strong{display:block;color:var(--navy);font-size:19px;margin-bottom:5px}.dropzone.drag{background:#eaf7fa;border-color:var(--cyan)}.result-wrap{overflow:auto;max-height:58vh;scrollbar-color:#6f8795 #e3e9ed}.result-table{width:100%;border-collapse:collapse;min-width:940px;font-size:14px}.result-table th,.result-table td{border-bottom:1px solid var(--line);padding:10px 12px;text-align:left}.result-table th{position:sticky;top:0;background:#dcecf3;color:#244654;z-index:2}.result-table td:nth-child(1),.result-table td:nth-child(4){text-align:center}.result-table tr:hover td{background:#f6fbfd}.rules{margin:0;padding-left:24px;color:#425865}.rules li{margin:8px 0}
