:root{--bg:#f4f7f8;--panel:#fff;--ink:#162128;--muted:#66747c;--line:#dce4e7;--brand:#0b766e;--blue:#2563eb;--red:#c93434;--amber:#c87612;--green:#16845b}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 "Segoe UI","Microsoft YaHei",sans-serif;letter-spacing:0}.shell{width:100%;max-width:1720px;margin:auto;padding:22px 28px 48px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:16px}.topbar h1{font-size:25px;margin:0}.topbar p,.panel-head p{margin:3px 0 0;color:var(--muted)}.filters{display:flex;align-items:end;gap:9px}.filters label{display:grid;gap:4px}.filters label span{font-size:12px;color:var(--muted)}select,input,textarea,button{font:inherit;letter-spacing:0}select,input,textarea{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:6px;padding:8px 10px}button{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:6px;padding:8px 12px;cursor:pointer}button:hover{border-color:var(--brand);color:var(--brand)}button.primary,.filters>button{background:var(--brand);border-color:var(--brand);color:#fff}.source-strip{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);background:var(--panel);margin-bottom:14px}.source-item{padding:12px 15px;border-right:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.source-item:last-child{border:0}.source-item strong{display:block}.source-item small{color:var(--muted)}.source-state{font-size:12px;color:var(--green)}.source-state.missing{color:var(--amber)}.source-state button{font-size:12px;padding:4px 8px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}.metric{background:var(--panel);border:1px solid var(--line);padding:14px;min-height:94px}.metric span{color:var(--muted);font-size:12px}.metric strong{display:block;font-size:23px;margin-top:7px}.metric small{display:block;color:var(--muted);margin-top:2px}.metric.danger strong{color:var(--red)}.metric.warning strong{color:var(--amber)}.loading,.empty{grid-column:1/-1;text-align:center;color:var(--muted);padding:30px}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:4px 0 14px}.tabs button{border:0;border-bottom:3px solid transparent;border-radius:0;background:transparent;padding:11px 17px;color:var(--muted)}.tabs button.active{border-bottom-color:var(--brand);color:var(--ink);font-weight:700}.view{display:none}.view.active{display:block}.grid{display:grid;gap:14px;margin-bottom:14px}.grid.two{grid-template-columns:1fr 1fr}.panel{background:var(--panel);border:1px solid var(--line);padding:16px;margin-bottom:14px}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.panel h2{font-size:16px;margin:0}.chart{min-height:260px}.chart.wide{min-height:310px}.bars{display:grid;gap:12px}.bar-row{display:grid;grid-template-columns:minmax(115px,170px) 1fr 74px;align-items:center;gap:12px}.bar-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bar-track{height:22px;background:#edf2f3;position:relative}.bar-fill{height:100%;min-width:2px;background:var(--blue)}.bar-fill.red{background:var(--red)}.bar-fill.amber{background:var(--amber)}.bar-fill.green{background:var(--green)}.bar-value{text-align:right;font-variant-numeric:tabular-nums}.risk-bars{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.risk-count{border-left:4px solid var(--line);padding:16px;background:#f8fafb}.risk-count strong{font-size:30px;display:block}.risk-count.critical{border-color:var(--red)}.risk-count.warning{border-color:var(--amber)}.risk-count.closed{border-color:var(--green)}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px;border-bottom:1px solid var(--line);white-space:nowrap}th{font-size:12px;color:var(--muted);font-weight:600;background:#f8fafb;position:sticky;top:0}.table-panel{overflow:auto;max-height:620px}.number{text-align:right;font-variant-numeric:tabular-nums}.negative{color:var(--red)}.positive{color:var(--green)}.pill{display:inline-block;border:1px solid var(--line);padding:2px 7px;font-size:12px}.pill.critical{color:var(--red);border-color:#efbaba;background:#fff5f5}.pill.warning{color:var(--amber);border-color:#efd3aa;background:#fffaf1}.pill.ok{color:var(--green);border-color:#b7dfd0;background:#f3fbf7}.risk-list{display:grid;gap:8px}.risk-row{display:grid;grid-template-columns:68px minmax(260px,1fr) 150px 128px;align-items:center;gap:14px;border:1px solid var(--line);padding:12px}.risk-row.critical{border-left:4px solid var(--red)}.risk-row.warning{border-left:4px solid var(--amber)}.risk-row h3{font-size:14px;margin:0}.risk-row p{color:var(--muted);margin:3px 0 0}.risk-status{font-size:12px}.risk-actions{display:flex;justify-content:flex-end;gap:6px}.ticket-summary{display:grid;gap:8px}.ticket-row{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding:9px 0}dialog{width:min(680px,calc(100vw - 32px));border:0;padding:0;box-shadow:0 20px 70px rgba(25,42,50,.25)}dialog::backdrop{background:rgba(12,25,31,.5)}dialog form{padding:20px}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}.dialog-head h2{margin:0;font-size:19px}.dialog-head p{margin:3px 0;color:var(--muted)}.dialog-head>button{border:0;font-size:24px;padding:0 8px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-grid label{display:grid;gap:5px}.form-grid label span{font-size:12px;color:var(--muted)}.form-grid .full{grid-column:1/-1}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:#14242a;color:#fff;padding:10px 16px;border-radius:6px;opacity:0;pointer-events:none;transition:.2s}.toast.show{opacity:1}@media(max-width:1100px){.source-strip{grid-template-columns:1fr 1fr}.source-item:nth-child(2){border-right:0}.grid.two{grid-template-columns:1fr}.risk-row{grid-template-columns:60px 1fr 120px}}@media(max-width:700px){.shell{padding:16px}.topbar{align-items:flex-start;flex-direction:column}.filters{width:100%;flex-wrap:wrap}.metrics{grid-template-columns:1fr 1fr}.source-strip{grid-template-columns:1fr}.source-item{border-right:0;border-bottom:1px solid var(--line)}.tabs{overflow:auto}.risk-row{grid-template-columns:52px 1fr}.risk-status,.risk-actions{grid-column:2}.form-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}}
