:root{color-scheme:light;--bg: #f4f5f8;--surface: #ffffff;--surface-2: #f8f9fb;--sidebar: #181b2e;--sidebar-text: #b9bdd6;--sidebar-active: #2b3052;--border: #e2e5ee;--border-strong: #c9cedd;--text: #171a2b;--text-muted: #5b617a;--accent: #4b4fe0;--accent-hover: #3b3fc9;--accent-soft: #e9e9fd;--on-accent: #ffffff;--ok: #15803d;--ok-soft: #dcfce7;--warn: #92600a;--warn-soft: #fef3c7;--danger: #b42318;--danger-soft: #fee4e2;--danger-solid: #d92d20;--info: #1d63b8;--info-soft: #dbeafe;--neutral-soft: #eceef4;--chart-1: #4b4fe0;--chart-2: #d92d20;--chart-3: #d9961a;--chart-4: #8b92b8;--focus: #4b4fe0;--shadow: 0 1px 2px rgb(20 24 50 / .06), 0 4px 16px rgb(20 24 50 / .06);--shadow-lg: 0 10px 40px rgb(20 24 50 / .25);--radius: 10px;--radius-sm: 6px;--cell-y: .65rem;--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg: #0f1120;--surface: #171a2e;--surface-2: #1c2038;--sidebar: #0b0d19;--sidebar-active: #20254a;--border: #2a2f4d;--border-strong: #3b4166;--text: #e8eaf6;--text-muted: #9aa0c0;--accent: #8084ff;--accent-hover: #9a9dff;--accent-soft: #25295a;--on-accent: #0f1120;--ok: #4ade80;--ok-soft: #12361f;--warn: #fbbf24;--warn-soft: #3a2c08;--danger: #fda29b;--danger-soft: #3d1815;--danger-solid: #f04438;--info: #7cb4ff;--info-soft: #14284a;--neutral-soft: #262b49;--chart-1: #8084ff;--chart-2: #f97066;--chart-3: #f5b942;--chart-4: #6c739a;--focus: #9a9dff;--shadow: 0 1px 2px rgb(0 0 0 / .4);--shadow-lg: 0 10px 40px rgb(0 0 0 / .6)}}:root[data-theme=dark]{color-scheme:dark;--bg: #0f1120;--surface: #171a2e;--surface-2: #1c2038;--sidebar: #0b0d19;--sidebar-active: #20254a;--border: #2a2f4d;--border-strong: #3b4166;--text: #e8eaf6;--text-muted: #9aa0c0;--accent: #8084ff;--accent-hover: #9a9dff;--accent-soft: #25295a;--on-accent: #0f1120;--ok: #4ade80;--ok-soft: #12361f;--warn: #fbbf24;--warn-soft: #3a2c08;--danger: #fda29b;--danger-soft: #3d1815;--danger-solid: #f04438;--info: #7cb4ff;--info-soft: #14284a;--neutral-soft: #262b49;--chart-1: #8084ff;--chart-2: #f97066;--chart-3: #f5b942;--chart-4: #6c739a;--focus: #9a9dff;--shadow: 0 1px 2px rgb(0 0 0 / .4);--shadow-lg: 0 10px 40px rgb(0 0 0 / .6)}:root[data-density=compact]{--cell-y: .3rem}*,*:before,*:after{box-sizing:border-box}html{font-size:15px}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.45;-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0;line-height:1.2}h1{font-size:1.5rem;letter-spacing:-.01em}h2{font-size:1.1rem}h3{font-size:.95rem}code,.mono{font-family:var(--mono);font-size:.86em}.muted{color:var(--text-muted)}.small{font-size:.85rem}.right{text-align:right}.num{font-variant-numeric:tabular-nums;text-align:right}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:4px}.skip-link{position:absolute;left:.5rem;top:-3rem;background:var(--accent);color:var(--on-accent);padding:.5rem .9rem;border-radius:var(--radius-sm);z-index:100}.skip-link:focus{top:.5rem}.shell{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}.sidebar{background:var(--sidebar);color:var(--sidebar-text);padding:1.1rem .8rem;display:flex;flex-direction:column;gap:1rem;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:.6rem;color:#fff;font-weight:650;padding:0 .4rem}.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,#6a6ef5,#a06bf0);display:grid;place-items:center;font-size:.8rem}.nav-section{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;padding:.6rem .6rem .2rem;opacity:.7}.nav-link{display:flex;align-items:center;gap:.65rem;padding:.5rem .6rem;border-radius:var(--radius-sm);color:inherit;text-decoration:none;font-size:.93rem}.nav-link svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.nav-link:hover{background:#ffffff0f;color:#fff}.nav-link[aria-current=page]{background:var(--sidebar-active);color:#fff}.sidebar :focus-visible{outline-color:#a9acff}.sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:.4rem}.sidebar .btn{background:transparent;color:var(--sidebar-text);border-color:#ffffff29;justify-content:flex-start}.sidebar .btn:hover{background:#ffffff12;color:#fff}.content{padding:1.4rem clamp(1rem,3vw,2.2rem) 4rem;min-width:0;max-width:1500px;width:100%}.crumbs{font-size:.82rem;color:var(--text-muted);margin-bottom:.3rem}.crumbs span+span:before{content:"/";margin:0 .4rem;opacity:.6}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.1rem}.page-head p{margin:.3rem 0 0;color:var(--text-muted);max-width:70ch}@media(max-width:900px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;padding:.6rem .8rem;gap:.4rem}.sidebar nav{display:flex;flex-wrap:wrap;gap:.2rem;order:3;width:100%}.nav-section{display:none}.sidebar-foot{margin:0 0 0 auto;flex-direction:row}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;font:inherit;font-size:.9rem;font-weight:550;padding:.45rem .85rem;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;transition:background .12s,border-color .12s;white-space:nowrap}.btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--text-muted)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn.danger{background:var(--danger-solid);border-color:var(--danger-solid);color:#fff}.btn.danger:hover:not(:disabled){filter:brightness(.92);background:var(--danger-solid)}.btn.danger-ghost{color:var(--danger)}.btn.ghost{border-color:transparent;background:transparent}.btn.sm{padding:.25rem .55rem;font-size:.82rem}input[type=text],input[type=search],input[type=password],input[type=date],input:not([type]),select,textarea{font:inherit;font-size:.92rem;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:.45rem .65rem;min-width:0}input::placeholder{color:var(--text-muted);opacity:.8}input[type=checkbox],input[type=radio]{accent-color:var(--accent);width:1rem;height:1rem;margin:0}.field{display:flex;flex-direction:column;gap:.25rem;font-size:.82rem;color:var(--text-muted);font-weight:550}.field input,.field select{font-weight:400}.toolbar{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-bottom:.8rem}.toolbar .grow{flex:1 1 220px}.toolbar .spacer{margin-left:auto}.seg{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface)}.seg button,.seg label{font:inherit;font-size:.84rem;padding:.35rem .7rem;border:0;background:transparent;color:var(--text-muted);cursor:pointer;border-left:1px solid var(--border)}.seg>:first-child{border-left:0}.seg button[aria-pressed=true],.seg label:has(input:checked){background:var(--accent-soft);color:var(--accent);font-weight:600}.seg label:has(input:disabled){opacity:.4;cursor:not-allowed}.seg label:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:-2px}.seg input{position:absolute;opacity:0;pointer-events:none}.seg label{position:relative}.seg.on label:has(input:checked){background:var(--ok-soft);color:var(--ok)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.card-pad{padding:1rem 1.1rem}.card-head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.8rem 1.1rem;border-bottom:1px solid var(--border)}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.8rem;margin-bottom:1rem}.stat{padding:.8rem 1rem}.stat .label{font-size:.78rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.stat .value{font-size:1.55rem;font-weight:650;font-variant-numeric:tabular-nums}.stat .sub{font-size:.8rem;color:var(--text-muted)}.stat.bad .value{color:var(--danger)}.badge{display:inline-flex;align-items:center;gap:.25rem;font-size:.72rem;font-weight:600;padding:.1rem .5rem;border-radius:999px;background:var(--neutral-soft);color:var(--text-muted);white-space:nowrap}.badge.ok{background:var(--ok-soft);color:var(--ok)}.badge.warn{background:var(--warn-soft);color:var(--warn)}.badge.danger{background:var(--danger-soft);color:var(--danger)}.badge.info{background:var(--info-soft);color:var(--info)}.badge.off{background:var(--neutral-soft);color:var(--text-muted);text-decoration:line-through}.chip{display:inline-flex;align-items:center;gap:.3rem;font-family:var(--mono);font-size:.76rem;padding:.1rem .2rem .1rem .5rem;border-radius:999px;border:1px solid var(--border);background:var(--surface-2)}.chip.add{border-color:var(--ok);color:var(--ok)}.chip.rm{border-color:var(--danger);color:var(--danger)}.chip button{border:0;background:none;color:inherit;cursor:pointer;font-size:.95rem;line-height:1;padding:0 .3rem;border-radius:50%}.table-wrap{overflow:auto;max-height:70vh;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.card>.table-wrap{border:0;border-radius:0 0 var(--radius) var(--radius)}table{border-collapse:separate;border-spacing:0;width:100%;font-size:.9rem}th,td{padding:var(--cell-y) .8rem;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}thead th{position:sticky;top:0;z-index:2;background:var(--surface-2);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);white-space:nowrap}th.num{text-align:right}th button.sort{all:unset;cursor:pointer;display:inline-flex;gap:.3rem;align-items:center}th button.sort:focus-visible{outline:2px solid var(--focus);border-radius:3px}th .arrow{font-size:.7rem;opacity:.35}th[aria-sort] .arrow{opacity:1;color:var(--accent)}tbody tr:hover{background:var(--surface-2)}tbody tr:last-child td{border-bottom:0}tr.row-bad td:first-child{box-shadow:inset 3px 0 var(--danger-solid)}td.actions{text-align:right;white-space:nowrap}td.actions .btn+.btn{margin-left:.3rem}.tool-name{font-family:var(--mono);font-size:.85rem;word-break:break-all}.pager{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.6rem .2rem;font-size:.85rem;color:var(--text-muted);flex-wrap:wrap}.pager .btns{display:flex;gap:.4rem}.alert{border-radius:var(--radius-sm);padding:.7rem .95rem;font-size:.9rem;margin-bottom:1rem;display:flex;gap:.8rem;align-items:flex-start;justify-content:space-between;border:1px solid transparent}.alert.error{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}.alert.warn{background:var(--warn-soft);color:var(--warn);border-color:var(--warn)}.alert.info{background:var(--info-soft);color:var(--info);border-color:var(--info)}.empty{text-align:center;padding:2.5rem 1rem;color:var(--text-muted)}.empty strong{display:block;color:var(--text);margin-bottom:.2rem}.skeleton{display:block;height:.9em;border-radius:4px;background:linear-gradient(90deg,var(--neutral-soft) 25%,var(--surface-2) 50%,var(--neutral-soft) 75%);background-size:200% 100%;animation:shimmer 1.3s infinite linear}@keyframes shimmer{to{background-position:-200% 0}}.toasts{position:fixed;right:1rem;bottom:1rem;display:flex;flex-direction:column;gap:.5rem;z-index:200;max-width:min(420px,calc(100vw - 2rem))}.toast{display:flex;gap:.7rem;align-items:flex-start;justify-content:space-between;background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--ok);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);padding:.7rem .9rem;font-size:.9rem;animation:slide-in .18s ease-out}.toast.error{border-left-color:var(--danger-solid)}.toast button{border:0;background:none;color:var(--text-muted);cursor:pointer;font-size:1.1rem;line-height:1}@keyframes slide-in{0%{transform:translateY(8px);opacity:0}}dialog.confirm{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);box-shadow:var(--shadow-lg);padding:0;width:min(520px,calc(100vw - 2rem))}dialog.confirm::backdrop{background:#080a198c}dialog.confirm .body{padding:1.2rem 1.3rem .6rem}dialog.confirm .body p{margin:.5rem 0 0;color:var(--text-muted)}dialog.confirm ul{margin:.6rem 0 0;padding-left:1.1rem;font-size:.88rem;max-height:30vh;overflow:auto}dialog.confirm .foot{display:flex;justify-content:flex-end;gap:.5rem;padding:.9rem 1.3rem 1.1rem}.picker{position:relative;min-width:260px}.picker input{width:100%}.picker ul{position:absolute;z-index:20;left:0;right:0;top:calc(100% + 4px);margin:0;padding:.25rem;list-style:none;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow-lg);max-height:280px;overflow:auto}.picker li button{all:unset;box-sizing:border-box;display:block;width:100%;padding:.4rem .6rem;border-radius:4px;cursor:pointer;font-size:.88rem}.picker li button:hover,.picker li button[data-active=true]{background:var(--accent-soft)}.picked{display:inline-flex;align-items:center;gap:.5rem;padding:.3rem .4rem .3rem .7rem;background:var(--accent-soft);color:var(--accent);border-radius:999px;font-size:.88rem;font-weight:600}.split{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:1rem;align-items:start}.split aside{position:sticky;top:1rem;display:flex;flex-direction:column;gap:1rem}@media(max-width:1100px){.split{grid-template-columns:1fr}.split aside{position:static;order:-1}}.group{border-bottom:1px solid var(--border)}.group:last-child{border-bottom:0}.group-head{display:flex;align-items:center;gap:.6rem;padding:.55rem .9rem;background:var(--surface-2);position:sticky;top:0;z-index:1}.group-head .toggle{all:unset;cursor:pointer;flex:1;display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:.9rem}.group-head .toggle:focus-visible{outline:2px solid var(--focus);border-radius:4px}.chev{display:inline-block;transition:transform .12s;font-size:.7rem}.chev.open{transform:rotate(90deg)}.tool-row{display:grid;grid-template-columns:1.4rem minmax(180px,280px) auto 1fr;gap:.7rem;align-items:center;padding:var(--cell-y) .9rem;border-top:1px solid var(--border);font-size:.88rem;cursor:pointer}.tool-row:hover{background:var(--surface-2)}.tool-row.changed-add{background:var(--ok-soft)}.tool-row.changed-rm{background:var(--danger-soft)}.tool-row.is-disabled{cursor:default;opacity:.7}.tool-row .desc{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.badges{display:inline-flex;gap:.3rem;flex-wrap:wrap}@media(max-width:760px){.tool-row{grid-template-columns:1.4rem 1fr}.tool-row .desc{grid-column:2;white-space:normal}}.meter{height:8px;border-radius:999px;background:var(--neutral-soft);overflow:hidden}.meter>div{height:100%;background:var(--ok);border-radius:999px;transition:width .2s}.meter.warn>div{background:var(--chart-3)}.meter.bad>div{background:var(--danger-solid)}.diff-list{display:flex;flex-wrap:wrap;gap:.3rem;max-height:170px;overflow:auto;margin-top:.4rem}.savebar{display:flex;gap:.5rem}.savebar .btn.primary{flex:1}.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:1rem;margin-bottom:1rem}.hbar{display:grid;grid-template-columns:minmax(80px,38%) 1fr auto;gap:.6rem;align-items:center;font-size:.84rem;padding:.2rem 0}.hbar .label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:.8rem}.hbar .track{height:10px;background:var(--neutral-soft);border-radius:999px;overflow:hidden;display:flex}.hbar .track>span{display:block;height:100%}.legend{display:flex;gap:1rem;font-size:.8rem;color:var(--text-muted);flex-wrap:wrap}.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:.35rem}svg.chart text{fill:var(--text-muted);font-size:11px;font-family:var(--font)}svg.chart .grid{stroke:var(--border);stroke-width:1}.login{min-height:100vh;display:grid;place-items:center;padding:1rem}.login .card{width:min(380px,100%);padding:1.6rem}.login form{display:flex;flex-direction:column;gap:.9rem;margin-top:1.1rem}.login input{width:100%}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
