:root{--bg: #f8fafc;--surface: #ffffff;--surface-2: #f1f5f9;--surface-3: #e2e8f0;--fg: #0f172a;--fg-2: #334155;--muted: #64748b;--border: #e2e8f0;--border-strong: #cbd5e1;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-soft: #eff6ff;--success: #16a34a;--success-soft: #f0fdf4;--warning: #d97706;--warning-soft: #fffbeb;--danger: #dc2626;--danger-soft: #fef2f2;--info: #0284c7;--info-soft: #f0f9ff;--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--shadow: 0 8px 24px rgba(15, 23, 42, .08);--sidebar-w: 220px;--sidebar-w-collapsed: 56px;--topbar-h: 60px;--content-max: 1600px;--font: "Microsoft YaHei", "Segoe UI", system-ui, -apple-system, sans-serif;--font-mono: ui-monospace, Consolas, "Courier New", monospace}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--fg);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}h1{font-size:20px;font-weight:600;margin:0 0 4px;letter-spacing:-.01em}h2{font-size:15px;font-weight:600;margin:24px 0 10px}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.shell{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr);min-height:100vh;background:var(--bg);transition:grid-template-columns .16s ease}.shell--collapsed{grid-template-columns:var(--sidebar-w-collapsed) minmax(0,1fr)}.main{min-width:0;display:flex;flex-direction:column}.content{flex:1;min-width:0}.content .page{max-width:var(--content-max);margin:0 auto;padding:24px 28px 56px}.sidebar{position:sticky;top:0;height:100vh;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.sidebar__brand{height:var(--topbar-h);flex:0 0 var(--topbar-h);display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden}.sidebar__mark{width:26px;height:26px;flex:0 0 26px;border-radius:8px;background:var(--primary);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}.sidebar__title{font-size:14px;font-weight:600;letter-spacing:-.01em}.sidebar__sub{font-size:11px;color:var(--muted)}.sidebar__nav{flex:1;padding:10px 8px;overflow-y:auto;overflow-x:hidden}.sidebar__group{font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--muted);text-transform:uppercase;padding:12px 10px 6px;white-space:nowrap}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;margin-bottom:2px;border-radius:var(--radius-sm);color:var(--fg-2);font-size:14px;white-space:nowrap;text-decoration:none;cursor:pointer}.nav-item:hover{background:var(--surface-2);text-decoration:none;color:var(--fg)}.nav-item:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.nav-item.is-active{background:var(--primary-soft);color:var(--primary);font-weight:600}.nav-item.is-disabled{color:var(--muted);opacity:.55;cursor:not-allowed}.nav-item.is-disabled:hover{background:transparent}.nav-item__icon{width:18px;height:18px;flex:0 0 18px;display:block}.nav-item__label{overflow:hidden;text-overflow:ellipsis}.sidebar__foot{border-top:1px solid var(--border);padding:8px}.sidebar__toggle{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;font-size:12px}.sidebar__toggle:hover{background:var(--surface-2);color:var(--fg)}.shell--collapsed .sidebar__title,.shell--collapsed .sidebar__sub,.shell--collapsed .nav-item__label,.shell--collapsed .sidebar__group,.shell--collapsed .sidebar__toggle span{display:none}.shell--collapsed .sidebar__brand{justify-content:center;padding:0}.shell--collapsed .nav-item{justify-content:center;padding:9px 0}.topbar{height:var(--topbar-h);flex:0 0 var(--topbar-h);position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:16px;padding:0 24px;background:#ffffffeb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border)}.topbar__title{font-size:15px;font-weight:600}.topbar__crumb{color:var(--muted);font-size:13px}.topbar__spacer{flex:1}.topbar__user{display:flex;align-items:center;gap:10px;font-size:13px}.topbar__signout{border:1px solid var(--border);background:var(--surface);color:var(--fg-2);padding:6px 12px;border-radius:var(--radius-sm);cursor:pointer;font-size:13px}.topbar__signout:hover{background:var(--surface-2);border-color:var(--border-strong)}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.page-header__text{min-width:0}.page-header__desc{color:var(--muted);font-size:13px;margin-top:2px}.page-header__actions{display:flex;gap:8px;flex:0 0 auto}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;box-shadow:var(--shadow-sm)}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.metric{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-sm);min-width:0}.metric--primary{border-color:#bfdbfe;background:linear-gradient(180deg,#fbfdff,#fff)}.metric__label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}.metric__value{font-size:26px;font-weight:650;letter-spacing:-.02em;margin-top:6px;font-variant-numeric:tabular-nums}.metric__value--null{font-size:15px;font-weight:500;color:var(--muted)}.metric__hint{font-size:12px;color:var(--muted);margin-top:4px}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:500;border:1px solid transparent;white-space:nowrap}.badge--neutral{background:var(--surface-2);color:var(--fg-2);border-color:var(--border)}.badge--primary{background:var(--primary-soft);color:var(--primary);border-color:#bfdbfe}.badge--success{background:var(--success-soft);color:var(--success);border-color:#bbf7d0}.badge--warning{background:var(--warning-soft);color:var(--warning);border-color:#fde68a}.badge--danger{background:var(--danger-soft);color:var(--danger);border-color:#fecaca}.badge--info{background:var(--info-soft);color:var(--info);border-color:#bae6fd}button{padding:7px 14px;border:1px solid var(--border);background:var(--surface);color:var(--fg-2);cursor:pointer;border-radius:var(--radius-sm);font-size:13px;font-family:inherit;transition:background .12s ease,border-color .12s ease}button:hover:not(:disabled){background:var(--surface-2);border-color:var(--border-strong)}button:disabled{opacity:.55;cursor:not-allowed}button:focus-visible{outline:2px solid var(--primary);outline-offset:1px}button.primary{background:var(--primary);color:#fff;border-color:var(--primary);font-weight:500}button.primary:hover:not(:disabled){background:var(--primary-hover);border-color:var(--primary-hover)}input,select{padding:7px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:13px;font-family:inherit;color:var(--fg);background:var(--surface);min-width:0}input{min-width:200px}input:focus,select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #2563eb1f}label{font-size:13px;color:var(--fg-2);white-space:nowrap}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:10px 0}.bar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}table{border-collapse:separate;border-spacing:0;width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;font-size:13px}thead th{background:var(--surface-2);color:var(--fg-2);font-weight:600;font-size:12px;text-align:left;padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap;position:sticky;top:0;z-index:1}tbody td{padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:top}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:#fafcff}.muted{color:var(--muted);font-size:12px}.mono{font-family:var(--font-mono);font-size:12px}.warn{color:var(--warning)}.err{color:var(--danger);background:var(--danger-soft);border:1px solid #fecaca;border-radius:var(--radius-sm);padding:8px 12px;margin:10px 0;font-size:13px}.skeleton{display:flex;flex-direction:column;gap:10px}.skeleton__bar{height:14px;border-radius:6px;background:linear-gradient(90deg,#eef2f7 25%,#f6f8fb 37%,#eef2f7 63%);background-size:400% 100%;animation:skeleton-shimmer 1.4s ease infinite}.skeleton__bar--lg{height:28px}.skeleton__bar--sm{height:10px;width:60%}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}@media (prefers-reduced-motion: reduce){.skeleton__bar{animation:none}}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:48px 24px;text-align:center;background:var(--surface);border:1px dashed var(--border-strong);border-radius:var(--radius)}.state__icon{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:var(--surface-2);color:var(--muted);margin-bottom:4px}.state__title{font-size:14px;font-weight:600}.state__desc{font-size:13px;color:var(--muted);max-width:420px}.state--error{border-color:#fecaca;background:var(--danger-soft)}.state--error .state__icon{background:#fee2e2;color:var(--danger)}.toast-layer{position:fixed;right:20px;bottom:20px;z-index:100;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast{pointer-events:auto;min-width:220px;max-width:380px;padding:10px 14px;border-radius:var(--radius);background:var(--fg);color:#fff;font-size:13px;box-shadow:var(--shadow);display:flex;align-items:flex-start;gap:10px;animation:toast-in .16s ease}.toast--success{background:#14532d}.toast--error{background:#7f1d1d}.toast__close{margin-left:auto;background:transparent;border:none;color:#ffffffb3;cursor:pointer;padding:0 2px;font-size:14px;line-height:1}.toast__close:hover{color:#fff;background:transparent}@keyframes toast-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.auth{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 600px at 50% -10%,#eef4ff 0%,transparent 60%),var(--bg)}.auth__card{width:100%;max-width:400px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:28px}.auth__brand{display:flex;align-items:center;gap:10px;margin-bottom:18px}.auth__title{font-size:18px;font-weight:650;letter-spacing:-.01em}.auth__sub{font-size:13px;color:var(--muted);margin-top:2px}.auth__form{display:flex;flex-direction:column;gap:10px}.auth__form input{width:100%}.auth__foot{margin-top:16px;font-size:12px;color:var(--muted)}@media (max-width: 1100px){:root{--sidebar-w: 200px}.content .page{padding:20px 20px 48px}}@media (max-width: 860px){.shell,.shell--collapsed{grid-template-columns:var(--sidebar-w-collapsed) minmax(0,1fr)}.shell .sidebar__title,.shell .sidebar__sub,.shell .nav-item__label,.shell .sidebar__group,.shell .sidebar__toggle span{display:none}.shell .sidebar__brand{justify-content:center;padding:0}.shell .nav-item{justify-content:center;padding:9px 0}.topbar{padding:0 16px}.content .page{padding:16px 16px 40px}.page-header{flex-direction:column;align-items:stretch}}@media (max-width: 560px){.topbar__crumb{display:none}.metric-grid{grid-template-columns:1fr}}.status-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:4px}.status-cell{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow-sm);min-width:0}.status-cell__label{font-size:12px;color:var(--muted)}.status-cell__value{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:16px;font-weight:600;margin-top:4px;font-variant-numeric:tabular-nums}.status-cell__hint{font-size:12px;color:var(--muted);margin-top:4px;line-height:1.4}.notice{margin-top:12px;padding:10px 14px;border-radius:var(--radius-sm);font-size:13px;border:1px solid transparent}.notice--warning{background:var(--warning-soft);border-color:#fde68a;color:#92400e}.notice--danger{background:var(--danger-soft);border-color:#fecaca;color:#991b1b}.caliber{margin-top:14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}.caliber>summary{cursor:pointer;font-size:13px;color:var(--fg-2);font-weight:500;list-style:none}.caliber>summary::-webkit-details-marker{display:none}.caliber>summary:before{content:"▸ ";color:var(--muted)}.caliber[open]>summary:before{content:"▾ "}.caliber ul{margin:8px 0 2px;padding-left:18px}.caliber li{font-size:12.5px;color:var(--muted);line-height:1.7}.missing-list{list-style:none;padding-left:0!important;margin:8px 0 0!important}.missing-list li{display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;padding:6px 0;border-top:1px dashed var(--border)}.section{margin-top:24px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;box-shadow:var(--shadow-sm)}.section__head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.section__title{margin:0;font-size:15px;font-weight:600}.section__desc{font-size:12px;color:var(--muted);margin-top:2px}.section__action{font-size:13px;white-space:nowrap}.chart-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-bottom:6px}.chart-legend__item{display:inline-flex;align-items:center;gap:6px}.chart-legend__dot{width:8px;height:8px;border-radius:50%;display:inline-block}.chart-legend__band{width:14px;height:10px;border-radius:2px;background:var(--surface-2);border:1px solid var(--border);display:inline-block}.chart-legend__unit{margin-left:auto}.change-list{display:flex;flex-direction:column}.change-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 2px;border-top:1px solid var(--border)}.change-row:first-child{border-top:none}.change-row__main{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}.change-row__company{font-weight:600;font-size:13px}.change-row__mid{color:var(--muted)}.change-row__meta{display:flex;align-items:center;gap:12px;flex:0 0 auto;color:var(--fg-2)}@media (max-width: 1280px){.status-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 720px){.status-strip{grid-template-columns:1fr}.change-row{flex-direction:column;align-items:flex-start;gap:4px}}.btn-link{display:inline-flex;align-items:center;padding:7px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--fg-2);font-size:13px;text-decoration:none}.btn-link:hover{background:var(--surface-2);border-color:var(--border-strong);text-decoration:none}.filter-bar{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow-sm)}.filter-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.filter-row+.filter-row{margin-top:10px;padding-top:10px;border-top:1px dashed var(--border)}.filter-row input[type=date]{min-width:150px}.list-head{display:flex;align-items:flex-end;justify-content:space-between;margin:18px 0 10px}.table-scroll{width:100%;overflow-x:auto}tbody tr.clickable{cursor:pointer}tbody tr.clickable:hover{background:#f3f7ff}tbody tr.clickable:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}.cell-clip{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nowrap{white-space:nowrap}.drawer-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:flex;justify-content:flex-end}.drawer-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f172a52}.drawer{position:relative;width:560px;max-width:100vw;height:100%;background:var(--surface);border-left:1px solid var(--border);box-shadow:-8px 0 24px #0f172a1f;display:flex;flex-direction:column;outline:none;animation:drawer-in .16s ease}@keyframes drawer-in{0%{transform:translate(16px);opacity:.6}to{transform:none;opacity:1}}@media (prefers-reduced-motion: reduce){.drawer{animation:none}}.drawer__head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--border)}.drawer__title{font-size:14px;font-weight:600}.drawer__close{border:none;background:transparent;font-size:20px;line-height:1;color:var(--muted);cursor:pointer;padding:2px 6px;border-radius:6px}.drawer__close:hover{background:var(--surface-2);color:var(--fg)}.drawer__body{flex:1;overflow-y:auto;padding:4px 18px 18px}.drawer__foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid var(--border);background:var(--surface)}.drawer-section{padding:14px 0;border-bottom:1px solid var(--border)}.drawer-section:last-child{border-bottom:none}.drawer-section__title{margin:0 0 10px;font-size:13px;font-weight:600;color:var(--fg-2)}.kv{display:grid;grid-template-columns:88px minmax(0,1fr);gap:6px 10px;margin:0}.kv dt{color:var(--muted);font-size:12.5px}.kv dd{margin:0;font-size:13px;word-break:break-all}.diff-grid{display:grid;grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr);gap:8px;align-items:start}.diff-arrow{text-align:center;color:var(--muted);padding-top:22px}.diff-box{margin-top:4px;min-height:44px;padding:8px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:12px;border:1px solid transparent;white-space:nowrap}.chip--neutral{background:var(--surface);border-color:var(--border);color:var(--fg-2)}.chip--add{background:var(--success-soft);border-color:#bbf7d0;color:#15803d}.chip--remove{background:var(--danger-soft);border-color:#fecaca;color:#b91c1c}.chip--keep{background:var(--surface-2);border-color:var(--border);color:var(--muted)}.chip-groups{display:flex;flex-direction:column;gap:6px;margin-top:10px}.chip-groups>div{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.timeline{list-style:none;margin:0;padding:0 0 0 12px;border-left:2px solid var(--border)}.timeline__item{position:relative;padding:0 0 12px 10px}.timeline__item:before{content:"";position:absolute;left:-17px;top:5px;width:8px;height:8px;border-radius:50%;background:var(--surface);border:2px solid var(--primary)}.timeline__head{display:flex;gap:10px;flex-wrap:wrap;align-items:baseline;font-size:12.5px}.timeline__tag{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:4px;font-size:12.5px}.evidence-list{margin:0;padding-left:18px}.evidence-list li{font-size:12.5px;line-height:1.7}.review-form{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px 10px;align-items:center}.review-form textarea{grid-column:2;width:100%;resize:vertical;padding:7px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;font-size:13px;color:var(--fg)}.review-form textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #2563eb1f}@media (max-width: 720px){.drawer{width:100vw}.kv{grid-template-columns:76px minmax(0,1fr)}.diff-grid{grid-template-columns:1fr}.diff-arrow{padding:0;text-align:left}}.chart-legend__hollow{width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--warning);display:inline-block}.lag-ok{color:var(--success);font-variant-numeric:tabular-nums}.lag-warn{color:var(--warning);font-weight:500;font-variant-numeric:tabular-nums}.lag-null{color:var(--muted)}.section+.section{margin-top:16px}@media (max-width: 720px){.filter-row input[type=month]{min-width:140px}}.chart-legend__bar{width:10px;height:10px;border-radius:2px;display:inline-block}td.mono.nowrap{white-space:nowrap}td .chip+.chip{margin-left:4px}.link-btn{border:none;background:transparent;padding:0;color:var(--primary);font-size:12px;font-family:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.link-btn:hover{background:transparent;color:var(--primary-hover)}.link-btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:3px}.missing-list--inline{margin:8px 0 0!important}.missing-list--inline li{font-size:12px}
