:root{--bg:#f7f7f5;--panel:#fff;--panel-2:#f1f1ee;--border:#e2e1dc;--text:#1f2328;--muted:#6b6f76;--accent:#2f6fdf;--accent-soft:#e6eefc;--same:#fff6d6;--fwd:#2f6fdf;--inv:#b4561b;--warn:#a15c00;--warn-bg:#fff4e0;--err:#b42318;--err-bg:#fdecea;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--c-spatial:#2f7d4f;--c-physical:#3a5bd9;--c-relationship:#b4561b;--c-material:#8a4fbf;--c-property:#0f7b8a;--c-geometry:#6d6f7a;--c-georef:#2e7d32;--c-unit:#8a6d1d;--c-type:#c03a6b;--c-metadata:#5a6b7d;--c-other:#9a9a9a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#16181c;--panel:#1d2025;--panel-2:#24272d;--border:#33373e;--text:#e4e6ea;--muted:#9aa0a8;--accent:#7aa7ff;--accent-soft:#23324d;--same:#3a3420;--fwd:#7aa7ff;--inv:#f0a46b;--warn:#f0b45b;--warn-bg:#3a2e1a;--err:#ff8a80;--err-bg:#3d1f1d;--c-spatial:#6cc68f;--c-physical:#8ea6ff;--c-relationship:#f0a46b;--c-material:#c79bf0;--c-property:#5fc9d6;--c-geometry:#aeb1bb;--c-georef:#7fd083;--c-unit:#d9bc61;--c-type:#f28bb0;--c-metadata:#a5b4c4;--c-other:#8a8a8a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.45 system-ui,-apple-system,Segoe UI,Noto Sans,Noto Sans CJK SC,sans-serif}button{font:inherit;color:inherit}.muted{color:var(--muted)}.small{font-size:11.5px}.mono{font-family:var(--mono)}.app{flex-direction:column;height:100%;display:flex}.app.dragging:after{content:attr(data-drop-label);border:2px dashed var(--accent);background:color-mix(in srgb, var(--accent-soft) 80%, transparent);pointer-events:none;border-radius:12px;place-items:center;font-size:18px;display:grid;position:fixed;inset:8px}.topbar{border-bottom:1px solid var(--border);background:var(--panel);justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;display:flex}.brand{font-size:14px;font-weight:650}.tagline{color:var(--muted);margin-left:8px;font-size:12px;font-weight:400}.topbar-right{align-items:center;gap:12px;display:flex}.btn,.btn-small{border:1px solid var(--border);background:var(--panel);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:5px 10px;display:inline-flex}.btn-small{padding:2px 8px;font-size:12px}.btn:hover,.btn-small:hover{background:var(--panel-2)}.icon-btn{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:4px;padding:3px;display:inline-flex}.icon-btn:hover:not(:disabled){background:var(--panel-2);color:var(--text)}.icon-btn:disabled{opacity:.35;cursor:default}.link{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:12px}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.landing{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:16px;padding:24px;display:flex}.dropzone{border:2px dashed var(--border);background:var(--panel);cursor:pointer;width:min(560px,100%);height:260px;color:var(--muted);border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex}.dropzone:hover{border-color:var(--accent);color:var(--text)}.dz-title{color:var(--text);font-size:16px;font-weight:600}.progress{background:var(--panel-2);border-radius:2px;width:60%;height:4px;overflow:hidden}.progress>div{background:var(--accent);height:100%;transition:width .2s}.landing-notes{max-width:560px;color:var(--muted)}.landing-notes svg{vertical-align:-2px}.error-box,.overlay-error{background:var(--err-bg);color:var(--err);border-radius:8px;max-width:560px;padding:8px 12px}.panes{flex:1;grid-template-columns:minmax(240px,300px) minmax(360px,1fr) minmax(340px,440px);min-height:0;display:grid}.pane{background:var(--panel);min-height:0;overflow:auto}.pane-left{border-right:1px solid var(--border)}.pane-right{border-left:1px solid var(--border)}.pane-center{background:var(--bg);flex-direction:column;display:flex;overflow:hidden}.pane-head{border-bottom:1px solid var(--border);background:var(--panel);align-items:center;gap:8px;min-height:34px;padding:6px 10px;display:flex}.pane-title{font-weight:600}.legend{align-items:center;gap:10px;margin-left:auto;display:flex}@media (width<=1000px){.panes{grid-template-rows:auto 60vh auto;grid-template-columns:1fr;overflow:auto}.pane{overflow:visible}.tagline,.topbar-right .muted{display:none}}.cat-icon{flex:none;display:inline-flex}.cat-spatial{color:var(--c-spatial)}.cat-physical{color:var(--c-physical)}.cat-relationship{color:var(--c-relationship)}.cat-material{color:var(--c-material)}.cat-property{color:var(--c-property)}.cat-geometry{color:var(--c-geometry)}.cat-georef{color:var(--c-georef)}.cat-unit{color:var(--c-unit)}.cat-type{color:var(--c-type)}.cat-metadata{color:var(--c-metadata)}.cat-other{color:var(--c-other)}.tag{border:1px solid var(--border);color:var(--muted);white-space:nowrap;border-radius:8px;align-items:center;gap:2px;padding:0 5px;font-size:10.5px;line-height:16px;display:inline-flex}.tag-virtual{border-style:dashed}.tag-inv{color:var(--inv);border-color:color-mix(in srgb, var(--inv) 40%, transparent)}.tag-backref{color:var(--inv);border-style:dashed}.tag-cycle{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 40%, transparent)}.tag-shared{color:var(--muted)}.tag-missing{color:var(--err);border-color:color-mix(in srgb, var(--err) 40%, transparent)}.count{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}.fwd{color:var(--fwd)}.inv{color:var(--inv)}.overview{padding:0 0 20px}.ov-block{border-bottom:1px solid var(--border);padding:10px 12px}.ov-block h3{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:10px 0 6px;font-size:11px}.ov-file{text-overflow:ellipsis;white-space:nowrap;margin-bottom:6px;font-size:14px;font-weight:600;overflow:hidden}.kv{grid-template-columns:auto 1fr;gap:2px 10px;margin:0;display:grid}.kv dt{color:var(--muted)}.kv dd{overflow-wrap:anywhere;margin:0}.warn-inline{color:var(--warn)}.warn-inline svg{vertical-align:-1px}.warn-box{background:var(--warn-bg);color:var(--warn);border-radius:6px;margin-top:8px;padding:6px 8px;font-size:12px}.ov-project{border:1px solid var(--border);background:var(--panel-2);cursor:pointer;text-align:left;border-radius:6px;align-items:center;gap:6px;width:100%;margin-top:8px;padding:6px 8px;display:flex}.search{border:1px solid var(--border);background:var(--panel);color:var(--muted);border-radius:6px;align-items:center;gap:6px;padding:4px 8px;display:flex}.search input{color:var(--text);font:inherit;background:0 0;border:none;outline:none;flex:1;min-width:0}.filter-pill{margin-top:6px;font-size:12px}.results{max-height:320px;margin-top:6px;overflow:auto}.result,.class-row,.cat{cursor:pointer;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:4px;align-items:center;gap:6px;width:100%;padding:3px 4px;display:flex;overflow:hidden}.result:hover,.class-row:hover,.cat:hover{background:var(--panel-2)}.result.active,.class-row.active,.cat.active{background:var(--accent-soft)}.cat .count,.class-row .count{margin-left:auto}.cats{flex-direction:column;display:flex}.tree{outline:none;flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.tree-scroll{flex:1;overflow:auto}.tree-error{background:var(--err-bg);color:var(--err);cursor:pointer;padding:4px 10px}.tree-links{pointer-events:none;position:absolute;inset:0}.tree-links path{fill:none;stroke:var(--border);stroke-width:1px}.row{white-space:nowrap;cursor:default;align-items:center;gap:5px;height:24px;padding-right:10px;display:flex;position:absolute;left:0;right:0}.row:hover{background:color-mix(in srgb, var(--panel-2) 70%, transparent)}.row.same{background:var(--same)}.row.active{background:var(--accent-soft);box-shadow:inset 2px 0 0 var(--accent)}.tree:focus-visible .row.active{outline:1px solid var(--accent);outline-offset:-1px}.twisty{width:16px;color:var(--muted);cursor:pointer;background:var(--bg);flex:none;justify-content:center;display:inline-flex}.row-type{font-weight:550}.row-id{color:var(--muted);font-family:var(--mono);font-size:11.5px}.row-name{text-overflow:ellipsis;overflow:hidden}.row-preview{color:var(--muted);font-family:var(--mono);text-overflow:ellipsis;font-size:11px;overflow:hidden}.row-edge{color:var(--fwd);align-items:center;gap:2px;font-size:11.5px;display:inline-flex}.row-attr{font-style:italic}.row-title{font-weight:600}.row-group{cursor:pointer}.doc-icon{color:var(--muted);flex:none}.dir{flex:none}.dir-fwd{color:var(--fwd)}.dir-inv{color:var(--inv)}.dir-sem{color:var(--c-spatial)}.row-sem{color:var(--c-spatial);font-weight:600}.row-sem,.row-semantic,.row-raw{cursor:pointer}.row-via{color:var(--muted);font-family:var(--mono);font-size:10.5px}.tag-attr{color:var(--fwd);border-color:color-mix(in srgb, var(--fwd) 40%, transparent)}.tag-sem{color:var(--c-spatial);border-style:dashed}.seg{border:1px solid var(--border);border-radius:6px;display:inline-flex;overflow:hidden}.seg button{background:var(--panel);cursor:pointer;border:none;padding:2px 10px;font-size:12px}.seg button+button{border-left:1px solid var(--border)}.seg-icon{color:var(--muted);align-self:center;margin:0 4px 0 6px}.seg button.on{background:var(--accent-soft);color:var(--accent);font-weight:600}.mode-note{color:var(--muted);background:var(--panel);border-bottom:1px solid var(--border);padding:4px 10px;font-size:11.5px}.more{color:var(--accent);cursor:pointer}.inspector{padding-bottom:24px}.inspector.is-loading{opacity:.6}.inspector-nav{border-bottom:1px solid var(--border);background:var(--panel);z-index:1;align-items:center;gap:4px;padding:6px 10px;display:flex;position:sticky;top:0}.inspector-actions{gap:4px;margin-left:auto;display:inline-flex}.inspector-head{align-items:center;gap:10px;padding:10px 12px 6px;display:flex}.inspector-title{font-size:15px;font-weight:650}.inspector-name{color:var(--muted);overflow-wrap:anywhere}.empty{color:var(--muted);padding:24px 16px}.warnings{background:var(--warn-bg);color:var(--warn);border-radius:6px;margin:4px 12px;padding:6px 8px;font-size:12px}.section{border-top:1px solid var(--border);padding:4px 12px 8px}.section>summary{cursor:pointer;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);padding:4px 0;font-size:12px;font-weight:600}.section>summary svg{vertical-align:-2px}.inheritance{margin-top:8px;font-size:11.5px;line-height:1.7}.inh-self{font-weight:650}.attrs{border-collapse:collapse;width:100%}.attrs td{border-top:1px solid var(--border);vertical-align:top;padding:4px}.attr-idx{color:var(--muted);font-variant-numeric:tabular-nums;width:1%;font-size:11px}.attr-name{overflow-wrap:anywhere;width:38%;font-weight:550}.attr-type{color:var(--muted);font-size:10.5px;font-weight:400;font-family:var(--mono)}.attr-value{overflow-wrap:anywhere}tr.extra td{background:var(--warn-bg)}.v-null,.v-derived,.v-missing{color:var(--muted);font-family:var(--mono)}.v-str{color:var(--text)}.v-enum,.v-num{font-family:var(--mono);font-size:12px}.v-typename{font-family:var(--mono);color:var(--c-type);font-size:11px}.v-list{flex-wrap:wrap;align-items:center;gap:3px;display:inline-flex}.v-listhead{color:var(--muted);font-size:11px}.chip{border:1px solid var(--border);background:var(--panel-2);cursor:pointer;white-space:nowrap;border-radius:10px;align-items:center;gap:4px;max-width:100%;padding:0 7px;font-size:11.5px;line-height:18px;display:inline-flex;overflow:hidden}.chip:hover{border-color:var(--accent)}.chip-id{font-family:var(--mono);color:var(--muted)}.chip-type{font-weight:550}.chip-name{color:var(--muted);text-overflow:ellipsis;overflow:hidden}.chip-missing{color:var(--err);cursor:default}.rel-head{margin:8px 0 4px;font-size:11.5px;font-weight:600}.rel{margin:4px 0 8px}.rel-title{flex-wrap:wrap;align-items:baseline;gap:6px;font-weight:550;display:flex}.rel-targets{flex-wrap:wrap;gap:3px;margin-top:3px;display:flex}.explain p{margin:6px 0}.explain h4{margin:10px 0 4px}.badge{border:1px solid var(--border);border-radius:10px;align-items:center;gap:4px;padding:0 8px;font-size:12px;display:inline-flex}.note{border-left:3px solid var(--border);margin:4px 0;padding:3px 8px;font-size:12.5px}.note-kind{text-transform:uppercase;letter-spacing:.04em;margin-right:4px;font-size:10px;font-weight:650}.note-schema{border-color:var(--c-spatial)}.note-schema .note-kind{color:var(--c-spatial)}.note-practice{border-color:var(--c-unit)}.note-practice .note-kind{color:var(--c-unit)}.note-viewer{border-color:var(--c-material)}.note-viewer .note-kind{color:var(--c-material)}.raw{font-family:var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;background:var(--panel-2);border-radius:6px;max-height:300px;margin:4px 0;padding:8px;font-size:11.5px;overflow:auto}.schema-head{flex-wrap:wrap;align-items:center;gap:6px;margin:4px 0 8px;display:flex}.schema-row{grid-template-columns:96px 1fr;gap:6px;margin:3px 0;font-size:12px;display:grid}.schema-label{color:var(--muted);letter-spacing:.03em;padding-top:1px;font-size:10.5px}.schema-list{flex-wrap:wrap;gap:2px 8px;display:flex}.class-link{font-size:inherit;padding:0;font-family:inherit}.schema-attrs tr.own .attr-name{color:var(--accent)}.typedecl{vertical-align:top;display:inline-block}.typedecl>summary{cursor:pointer;color:var(--c-type);list-style:none;display:inline}.typedecl>summary:after{content:" ▾";color:var(--muted)}.typedecl[open]>summary:after{content:" ▴"}.typedecl-body{border-left:2px solid var(--border);white-space:normal;color:var(--muted);margin:2px 0 4px 8px;padding-left:6px}.lens-bar{background:var(--panel);border-bottom:1px solid var(--border);gap:2px;padding:6px 8px 0;display:flex;overflow-x:auto}.lens-tab{cursor:pointer;color:var(--muted);white-space:nowrap;background:0 0;border:1px solid #0000;border-bottom:none;border-radius:6px 6px 0 0;align-items:center;gap:5px;margin-bottom:-1px;padding:5px 10px;display:inline-flex}.lens-tab:hover{color:var(--text)}.lens-tab.on{background:var(--bg);border-color:var(--border);color:var(--text);font-weight:600}.lens-note{color:var(--muted);background:var(--bg);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:6px 10px;font-size:12px;display:flex}.lens-note strong{color:var(--text)}.lens-note code{font-size:11px}.lens-option{align-items:center;gap:4px;display:inline-flex}.lens-note .legend{margin-left:auto}button.row-via{cursor:pointer;color:var(--muted);font-family:var(--mono);background:0 0;border:none;border-radius:3px;padding:0 2px;font-size:10.5px}button.row-via:hover{color:var(--accent);background:var(--accent-soft)}.row-value{font-family:var(--mono);color:var(--c-property);text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.row-note{font-family:var(--mono);color:var(--muted);font-size:11px}.row-lensRoot,.row-category,.row-class,.row-bucket,.row-typeGroup,.row-section,.row-relClass,.row-unplaced,.row-schemaClass{cursor:pointer}.lens-miss{color:var(--warn);background:var(--warn-bg);border-radius:4px;padding:0 6px}
