:root{--bg:#f7f8fb;--surface:#fff;--surface-muted:#f1f4f9;--ink:#172033;--ink-soft:#41506a;--muted:#697386;--border:#dde2ea;--border-strong:#c7cfdc;--accent:#0e7c66;--accent-soft:#e3f2ed;--diag:#b23b2e;--diag-soft:#fbecea;--shadow:0 1px 2px #1720330f;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans:Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;color:var(--ink);background:var(--bg);font-family:var(--sans);font-synthesis:none;text-rendering:optimizelegibility;line-height:1.5}*{box-sizing:border-box}body{margin:0}button{cursor:pointer;font-family:inherit}.app{grid-template-rows:auto 1fr;height:100vh;display:grid}.topbar{border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:16px 24px;padding:14px 24px;display:flex}.brand{align-items:baseline;gap:10px;min-width:0;display:flex}.brand-mark{font-family:var(--mono);color:var(--accent);font-size:15px;font-weight:600}.brand-name{letter-spacing:-.01em;font-size:16px;font-weight:700}.brand-tag{color:var(--muted);font-size:13px}.brand-tag code{font-family:var(--mono);color:var(--ink-soft)}.controls{align-items:center;gap:10px;margin-left:auto;display:flex}.control{color:var(--muted);align-items:center;gap:6px;font-size:13px;display:flex}.control select,.control input{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--border-strong);border-radius:7px;padding:6px 9px;font-size:13px}.control input{width:130px;font-family:var(--mono)}.main{grid-template-columns:minmax(260px,320px) minmax(0,1.4fr) minmax(280px,1fr);min-height:0;display:grid}.panel{border-right:1px solid var(--border);flex-direction:column;min-width:0;min-height:0;display:flex}.panel:last-child{border-right:none}.panel-head{border-bottom:1px solid var(--border);background:var(--surface);justify-content:space-between;align-items:center;gap:12px;min-height:49px;padding:0 16px;display:flex}.panel-title{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-size:12px;font-weight:600}.sidebar{background:var(--surface)}.sidebar-tools{border-bottom:1px solid var(--border);background:var(--surface);padding:10px 12px}.search{width:100%;font:inherit;border:1px solid var(--border-strong);border-radius:8px;padding:8px 10px;font-size:13px}.bulk{gap:6px;display:flex}.linkbtn{border:1px solid var(--border-strong);background:var(--surface);color:var(--ink-soft);border-radius:7px;padding:4px 10px;font-size:12px;font-weight:500}.linkbtn:hover{border-color:var(--accent);color:var(--accent)}.tree{flex:1;padding:6px 8px 24px;overflow-y:auto}.pkg{border-radius:8px}.pkg-head{text-align:left;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;width:100%;padding:8px;display:flex}.pkg-head:hover{background:var(--surface-muted)}.pkg-head:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.chevron{background:var(--surface-muted);width:22px;height:22px;color:var(--ink-soft);border-radius:6px;flex-shrink:0;place-items:center;font-size:13px;line-height:1;transition:transform .12s,background .12s;display:grid}.pkg-head:hover .chevron{background:var(--accent-soft);color:var(--accent)}.pkg:not(.collapsed) .chevron{transform:rotate(90deg)}.pkg-name{font-family:var(--mono);color:var(--ink);white-space:nowrap;text-overflow:ellipsis;flex-shrink:1;font-size:13px;font-weight:500;overflow:hidden}.pkg-off .pkg-name{color:var(--muted)}.pkg-lang{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;font-size:10px;font-weight:500}.pkg-count{font-family:var(--mono);color:var(--muted);flex-shrink:0;margin-left:auto;font-size:11px}.switch{background:var(--border-strong);border:none;border-radius:999px;flex-shrink:0;width:34px;height:18px;padding:0;transition:background .15s;position:relative}.switch-knob{background:#fff;border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #1720334d}.switch[data-state=on]{background:var(--accent)}.switch[data-state=on] .switch-knob{transform:translate(16px)}.switch[data-state=partial]{background:var(--accent-soft)}.switch[data-state=partial] .switch-knob{box-shadow:0 1px 2px #1720334d, inset 0 0 0 1px var(--accent);transform:translate(8px)}.switch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.rules{padding:2px 0 10px 20px}.pkg.collapsed .rules{display:none}.rule{cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:5px 8px;display:flex}.rule:hover{background:var(--surface-muted)}.rule:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.rule input[type=checkbox]{pointer-events:none}.rule-name{font-family:var(--mono);color:var(--ink-soft);word-break:break-word;font-size:12px;line-height:1.4}.rule-off .rule-name{color:var(--muted);text-decoration:line-through;-webkit-text-decoration-color:var(--border-strong);text-decoration-color:var(--border-strong)}.rule-doc{color:var(--muted);flex-shrink:0;margin-left:auto;font-size:11px;text-decoration:none}.rule-doc:hover{color:var(--accent)}input[type=checkbox]{accent-color:var(--accent);cursor:pointer;flex-shrink:0;width:14px;height:14px}.editor{background:var(--surface)}.editor-host{flex:1;min-height:0;overflow:hidden}.editor-host .cm-editor{height:100%}.diagnostics{background:var(--surface)}.diag-count{font-family:var(--mono);color:var(--muted);font-size:12px}.diag-list{flex:1;padding:8px;overflow-y:auto}.diag{text-align:left;border:1px solid var(--border);border-left:3px solid var(--diag);background:var(--surface);width:100%;box-shadow:var(--shadow);border-radius:8px;margin-bottom:8px;padding:10px 12px;display:block}.diag:hover{border-color:var(--border-strong);border-left-color:var(--diag)}.diag-msg{color:var(--ink);margin-bottom:6px;font-size:13px}.diag-meta{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:11px;display:flex}.diag-rule{color:var(--accent)}.diag-loc{color:var(--muted)}.empty{color:var(--muted);text-align:center;padding:24px 16px;font-size:13px}.empty strong{color:var(--ink-soft)}.diag-error{font-family:var(--mono);color:var(--diag);word-break:break-word;margin-top:8px;font-size:12px}.loading{height:100vh;color:var(--muted);font-family:var(--mono);place-items:center;font-size:14px;display:grid}@media (max-width:900px){.app{height:auto}.main{grid-template-columns:1fr}.panel{border-right:none;border-bottom:1px solid var(--border)}.tree{max-height:320px}.editor-host{min-height:360px}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
