:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ink:#182230;--muted:#667085;--line:#e4e7ec;--surface:#fff;--canvas:#f4f6f8;--brand:#3157d5;--brand-dark:#2547b5;--danger:#c9362b;--success:#18794e;--warn:#9a5b08;--stage:#15191f;--stage-line:#303741}*{box-sizing:border-box}html,body{background:var(--canvas);min-height:100%;color:var(--ink);margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.52}a{color:inherit;text-decoration:none}kbd{font-family:inherit}.shell{min-height:100vh}.nav{border-bottom:1px solid var(--line);z-index:20;background:#fffffff5;align-items:center;gap:24px;height:60px;padding:0 28px;display:flex;position:relative}.brand{letter-spacing:-.2px;margin-right:auto;font-size:17px;font-weight:760}.nav a{color:var(--muted);font-size:14px}.nav a:hover{color:var(--brand)}.identity{color:var(--muted);border-left:1px solid var(--line);padding-left:8px;font-size:13px}.page{max-width:1760px;margin:0 auto;padding:16px 22px 30px}.card{background:var(--surface);border:1px solid var(--line);border-radius:12px}.button{background:var(--brand);color:#fff;border:1px solid #0000;border-radius:8px;min-height:38px;padding:8px 14px;font-size:13px;font-weight:680;transition:background .15s,border-color .15s,transform .15s}.button:hover:not(:disabled){background:var(--brand-dark)}.button:active:not(:disabled){transform:translateY(1px)}.button.secondary{color:#344054;background:#fff;border-color:#d0d5dd}.button.secondary:hover:not(:disabled){background:#f8fafc;border-color:#98a2b3}.button.danger{color:var(--danger)}.text-button{color:var(--muted);background:0 0;border:0;padding:9px 7px;font-size:13px}.text-button:hover{color:var(--brand)}.field{flex-direction:column;gap:6px;display:flex}.field label{color:#475467;font-size:12px;font-weight:650}.field input,.field select{height:38px;color:var(--ink);background:#fff;border:1px solid #d0d5dd;border-radius:8px;padding:0 10px}.field input:focus,.field select:focus{border-color:var(--brand);outline:3px solid #dce4ff}.filterbar{border:1px solid var(--line);background:#fff;border-radius:12px;justify-content:space-between;align-items:center;gap:18px;min-height:58px;margin-bottom:12px;padding:8px 12px;display:flex}.filter-primary{align-items:center;gap:8px;display:flex}.compact-field{grid-template-columns:auto 190px;align-items:center;gap:8px;display:grid}.compact-field label{color:var(--muted);white-space:nowrap}.compact-field select{height:36px}.status-field{grid-template-columns:auto 120px;margin-left:4px}.date-filter{position:relative}.date-filter summary{color:#344054;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #d0d5dd;border-radius:8px;align-items:center;height:36px;padding:0 12px;font-size:13px;list-style:none;display:flex}.date-filter summary::-webkit-details-marker{display:none}.date-filter summary:after{content:"⌄";color:var(--muted);margin-left:9px}.date-filter[open] summary{border-color:var(--brand);box-shadow:0 0 0 3px #e4eaff}.date-popover{z-index:30;gap:12px;width:290px;padding:14px;display:grid;position:absolute;top:44px;left:0;box-shadow:0 18px 48px #10182829}.filter-summary{color:var(--muted);white-space:nowrap;align-items:center;font-size:12px;display:flex}.source-dot{background:#12a36d;border-radius:50%;width:7px;height:7px;margin-right:7px;box-shadow:0 0 0 3px #dcf7ec}.summary-divider{background:var(--line);width:1px;height:15px;margin:0 10px}.review-workspace{grid-template-columns:minmax(0,1fr) 440px;align-items:start;gap:12px;display:grid}.photo-stage{background:var(--stage);border:1px solid #222831;border-radius:14px;min-width:0;overflow:hidden;box-shadow:0 10px 34px #10182817}.stage-header{color:#fff;border-bottom:1px solid var(--stage-line);justify-content:space-between;align-items:center;gap:16px;min-height:72px;padding:12px 16px;display:flex}.stage-title-line{align-items:center;gap:9px;display:flex}.stage-title-line h1{letter-spacing:-.2px;margin:0;font-size:18px}.status-pill{border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700}.status-pill.done{color:#86efc0;background:#18794e3b}.status-pill.pending{color:#cbd5e1;background:#94a3b824}.stage-header .meta-line{color:#939dac;margin-top:5px;font-size:12px}.stage-stats{color:#aeb7c4;flex-direction:column;align-items:flex-end;gap:5px;font-size:12px;display:flex}.photo-grid{background:var(--stage-line);grid-template-columns:1fr 1fr;gap:1px;display:grid}.photo-frame{background:#0f1318;flex-direction:column;min-width:0;min-height:calc(100vh - 276px);display:flex}.photo-title{color:#d6dbe3;border-bottom:1px solid var(--stage-line);background:#1d232b;justify-content:space-between;align-items:center;height:38px;padding:0 13px;font-size:12px;font-weight:650;display:flex}.photo-title em{color:#7d8795;font-size:11px;font-style:normal;font-weight:500}.image-shell{background:#10151b;flex:1;justify-content:center;align-items:center;min-height:460px;display:flex;position:relative;overflow:hidden}.photo-frame img{object-fit:contain;opacity:0;width:auto;max-width:100%;height:100%;transition:opacity .2s;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.photo-frame img.loaded{opacity:1}.image-skeleton{color:#7f8996;background:linear-gradient(100deg,#151a20 20%,#1c222a 45%,#151a20 70%) 0 0/250% 100%;place-items:center;font-size:13px;animation:1.4s linear infinite shimmer;display:grid;position:absolute;inset:0}@keyframes shimmer{to{background-position-x:-250%}}.empty-image{color:#8d96a4;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;min-height:460px;font-size:13px;display:flex}.photo-navigation{border-top:1px solid var(--stage-line);grid-template-columns:150px 1fr 150px;align-items:center;gap:14px;height:58px;padding:9px 14px;display:grid}.stage-button{color:#e6e9ee;background:#222932;border:1px solid #3b4551;border-radius:8px;height:38px;font-size:13px;font-weight:650}.stage-button:hover:not(:disabled){background:#29323d;border-color:#657181}.stage-button kbd{color:#8994a2;margin:0 5px;font-size:11px}.browse-note{text-align:center;color:#8893a1;font-size:12px}.browse-note strong{color:#f0c36c;font-weight:650}.issue-panel{border:1px solid var(--line);background:#fff;border-radius:14px;flex-direction:column;height:calc(100vh - 162px);min-height:560px;display:flex;position:sticky;top:14px;overflow:hidden;box-shadow:0 10px 34px #10182812}.issue-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;min-height:72px;padding:12px 15px;display:flex}.issue-heading h2{letter-spacing:-.15px;margin:0;font-size:17px}.issue-heading p{color:var(--muted);margin:4px 0 0;font-size:11px}.dirty-badge{color:#805400;background:#fff5d8;border:1px solid #f2db9b;border-radius:999px;flex:none;padding:4px 8px;font-size:11px;font-weight:700}.machine-summary{min-height:46px;color:var(--muted);border-bottom:1px solid var(--line);align-items:center;gap:7px;padding:7px 12px;font-size:12px;display:flex}.machine-summary strong{color:var(--brand)}.issue-tabs{background:#f2f4f7;border-radius:7px;margin-left:auto;padding:3px;display:flex}.issue-tabs button{height:27px;color:var(--muted);background:0 0;border:0;border-radius:5px;padding:0 9px;font-size:11px}.issue-tabs button.active{color:#344054;background:#fff;font-weight:650;box-shadow:0 1px 3px #1018281f}.issue-list{scrollbar-width:thin;scrollbar-color:#cbd0d8 transparent;flex:1;min-height:0;padding:7px;overflow-y:auto}.issue-row{border:1px solid #0000;border-bottom-color:#edf0f3;border-radius:8px;outline:none;grid-template-columns:minmax(0,1fr) 220px;align-items:center;gap:8px;min-height:64px;padding:7px 8px 7px 10px;transition:background .12s,border-color .12s;display:grid;position:relative}.issue-row:hover{background:#f8f9fb}.issue-row.focused{z-index:1;background:#f5f7ff;border-color:#b8c7f6;box-shadow:0 0 0 2px #e8edff}.issue-row.machine-detected:before{content:"";background:#e2a21b;border-radius:3px;width:3px;position:absolute;top:10px;bottom:10px;left:1px}.issue-name{min-width:0}.issue-name>div{align-items:center;gap:5px;min-width:0;display:flex}.issue-name span{text-overflow:ellipsis;white-space:nowrap;color:#253044;font-size:13px;font-weight:680;overflow:hidden}.issue-name em,.issue-name i{border-radius:4px;flex:none;padding:2px 4px;font-size:9px;font-style:normal;font-weight:700}.issue-name em{color:#8a5800;background:#fff4d5}.issue-name i{color:#3157d5;background:#e9eeff}.issue-name code{text-overflow:ellipsis;color:#98a2b3;white-space:nowrap;margin-top:4px;font-size:9px;display:block;overflow:hidden}.issue-guidance{color:#7a8493;margin:4px 0 0;font-size:10px;font-weight:500;line-height:1.35}.issue-guidance b{color:#566170;font-weight:700}.choice-group{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.choice{color:#667085;white-space:nowrap;background:#fff;border:1px solid #d9dde5;border-radius:7px;justify-content:center;align-items:center;gap:4px;height:36px;padding:0 3px;font-size:11px;display:flex}.choice kbd{color:currentColor;opacity:.65;font-size:9px;display:none}.issue-row.focused .choice kbd{display:inline}.choice:hover{background:#f8fafc;border-color:#aeb6c3}.choice.FAIL.active{color:var(--danger);background:#fff0ef;border-color:#e6aaa5;font-weight:700}.choice.PASS.active{color:var(--success);background:#edfaf2;border-color:#9fd2b3;font-weight:700}.choice.UNCLEAR.active{color:var(--warn);background:#fff7e5;border-color:#e6ca84;font-weight:700}.issue-empty{color:var(--muted);text-align:center;margin:26px 12px;font-size:13px}.shortcut-help{color:#7b8492;border-top:1px solid var(--line);background:#fafbfc;justify-content:center;align-items:center;gap:13px;min-height:34px;padding:6px 10px;font-size:10px;display:flex}.shortcut-help span{white-space:nowrap}.shortcut-help kbd,.save-primary kbd,.save-only kbd{color:#667085;background:#fff;border:1px solid #d0d5dd;border-bottom-width:2px;border-radius:4px;justify-content:center;align-items:center;min-width:18px;height:18px;margin-right:3px;padding:0 4px;font-size:9px;font-weight:650;display:inline-flex}.savebar{border-top:1px solid var(--line);grid-template-columns:1fr 1.12fr;gap:8px;padding:10px 12px 8px;display:grid}.savebar .button{min-height:42px}.save-primary kbd{color:#dce4ff;background:#ffffff1f;border-color:#ffffff57;margin:0 0 0 6px}.save-only{height:25px;color:var(--muted);background:0 0;border:0;grid-column:1/-1;font-size:11px}.save-only:hover:not(:disabled){color:var(--brand)}.save-only kbd{min-width:16px;height:16px;margin-left:3px}.notice{color:#254a9f;background:#edf3ff;border:1px solid #d4e0ff;border-radius:8px;margin:0 0 10px;padding:9px 12px;font-size:12px}.empty{text-align:center;color:var(--muted);padding:60px 24px}.login{width:min(420px,100% - 32px);margin:12vh auto;padding:34px}.login h1{margin:0 0 8px;font-size:26px}.login p{color:var(--muted);margin:0 0 26px;line-height:1.6}.login form{gap:18px;display:grid}.error{color:var(--danger);font-size:14px}.hint{color:var(--muted);font-size:13px}.settings{max-width:980px}.settings header{margin-bottom:20px}.settings h1{margin:0 0 7px;font-size:25px}.settings p{color:var(--muted);margin:0}.setting-list{overflow:hidden}.setting-row{border-bottom:1px solid var(--line);grid-template-columns:50px 1fr 160px 130px;align-items:center;gap:14px;padding:13px 16px;display:grid}.setting-row:last-child{border-bottom:0}.setting-row code{color:var(--muted);font-size:12px}.switch{align-items:center;gap:8px;font-size:13px;display:flex}.move{justify-content:flex-end;gap:6px;display:flex}.icon-button{background:#fff;border:1px solid #d5dae4;border-radius:6px;width:31px;height:31px}.settings-footer{align-items:center;gap:10px;margin-top:16px;display:flex}.stats-page{max-width:1320px}.stats-header{justify-content:space-between;align-items:flex-end;gap:18px;margin:14px 0 22px;display:flex}.stats-header h1{letter-spacing:-.35px;margin:0 0 7px;font-size:26px}.stats-header p{max-width:720px;color:var(--muted);margin:0;font-size:13px;line-height:1.55}.stats-actions{color:var(--muted);white-space:nowrap;align-items:center;gap:10px;font-size:12px;display:flex}.stat-cards{grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px;display:grid}.stat-card{border:1px solid var(--line);background:#fff;border-radius:12px;flex-direction:column;justify-content:center;min-height:132px;padding:20px;display:flex}.stat-card span,.stat-card small{color:var(--muted);font-size:12px}.stat-card strong{color:#202b3c;letter-spacing:-.7px;margin:6px 0 5px;font-size:32px;line-height:1}.stats-section{margin-top:16px;overflow:hidden}.stats-section>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;padding:16px 18px;display:flex}.stats-section h2{margin:0;font-size:17px}.stats-section>header span{color:var(--muted);font-size:12px}.stats-table-wrap{overflow-x:auto}.stats-table{border-collapse:collapse;width:100%;font-size:13px}.stats-table th{color:#667085;border-bottom:1px solid var(--line);text-align:left;background:#fafbfc;padding:10px 18px;font-size:11px;font-weight:700}.stats-table td{vertical-align:middle;border-bottom:1px solid #edf0f3;padding:11px 18px}.stats-table tr:last-child td{border-bottom:0}.stats-table td:first-child{min-width:330px}.stats-table strong{color:#344054;font-size:13px;display:block}.stats-table code{color:#98a2b3;margin-top:3px;font-size:10px;display:block}.verdict-counts{flex-wrap:wrap;gap:6px;display:flex}.verdict-counts span{border-radius:999px;padding:3px 7px;font-size:11px;font-weight:650}.verdict-counts .pass{color:var(--success);background:#edfaf2}.verdict-counts .fail{color:var(--danger);background:#fff0ef}.verdict-counts .unclear{color:var(--warn);background:#fff7e5}.annotator-list{display:grid}.annotator-row{border-bottom:1px solid var(--line)}.annotator-row:last-child{border-bottom:0}.annotator-row summary{cursor:pointer;grid-template-columns:minmax(180px,1fr) 130px 150px 130px;align-items:center;gap:12px;min-height:58px;padding:0 18px;list-style:none;display:grid}.annotator-row summary::-webkit-details-marker{display:none}.annotator-row summary:hover{background:#fafbfc}.annotator-row summary strong{color:#344054;font-size:14px}.annotator-row summary span{color:var(--muted);font-size:12px}.annotator-row summary .expand-mark{color:var(--brand);text-align:right}.annotator-row[open] summary{background:#f5f7ff;border-bottom:1px solid #dfe6ff}.annotator-row[open] summary .expand-mark{font-size:0}.annotator-row[open] summary .expand-mark:after{content:"收起";font-size:12px}.annotator-issues{background:#fbfcff;padding:8px 18px 14px}.annotator-issues .stats-table{background:#fff;border:1px solid #e2e7f0;border-radius:8px;overflow:hidden}.stats-empty{color:var(--muted);text-align:center;padding:45px;font-size:13px}@media (max-width:1180px){.review-workspace{grid-template-columns:minmax(0,1fr) 390px}.issue-row{grid-template-columns:1fr}.issue-name code{display:none}.photo-frame{min-height:530px}}@media (max-width:900px){.nav{gap:14px;padding:0 16px}.page{padding:12px}.filterbar{flex-direction:column;align-items:flex-start}.filter-primary{flex-wrap:wrap}.filter-summary{padding:0 4px 4px}.review-workspace{grid-template-columns:1fr}.issue-panel{height:720px;min-height:0;position:static}.issue-row{grid-template-columns:minmax(0,1fr) 220px}.photo-frame{min-height:500px}.stats-header{flex-direction:column;align-items:flex-start}.annotator-row summary{grid-template-columns:1fr 1fr;padding:12px 16px}.annotator-row summary .expand-mark{text-align:left}}@media (max-width:620px){.nav a:not(.brand),.identity{display:none}.compact-field,.status-field{flex:1;grid-template-columns:1fr;gap:4px;min-width:145px}.date-filter{align-self:end}.filter-summary{display:none}.photo-grid{grid-template-columns:1fr}.photo-frame,.image-shell,.empty-image{min-height:390px}.photo-navigation{grid-template-columns:1fr 1fr}.browse-note{grid-area:2/1/auto/-1}.issue-row{grid-template-columns:1fr}.stage-stats{display:none}.setting-row{grid-template-columns:40px 1fr 125px}.setting-row .move{grid-column:2/4;justify-content:start}.stat-cards{grid-template-columns:1fr}.stats-table td:first-child{min-width:250px}}
