:root{--bg: #0b0f19;--panel: #111827;--panel-2: #172033;--border: #243044;--text: #dfe6ee;--muted: #8a97a8;--accent: #6ea8ff;--accent-2: #f5c04a;--danger: #ff6b6b;--ok: #4cd964;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--sans: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:13px;overflow:hidden}button{font:inherit;color:inherit;background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;cursor:pointer}button:hover{border-color:var(--accent)}button.primary{background:var(--accent);color:#051022;border-color:var(--accent);font-weight:700}button.ghost{background:transparent}input[type=text],input[type=search]{font:inherit;color:var(--text);background:#0d1320;border:1px solid var(--border);border-radius:6px;padding:8px 10px;width:100%;outline:none}input:focus{border-color:var(--accent)}.hidden{display:none!important}.muted{color:var(--muted)}.mono{font-family:var(--mono);font-size:12px}#app{display:grid;grid-template-columns:240px 1fr 340px;grid-template-rows:48px 1fr;height:100vh}#topbar{grid-column:1 / -1;display:flex;align-items:center;gap:16px;padding:0 14px;background:var(--panel);border-bottom:1px solid var(--border);z-index:5}.brand{font-weight:800;letter-spacing:.12em;white-space:nowrap;display:flex;align-items:center;gap:8px}.brand .logo{width:26px;height:26px;display:block}.brand .world-name{color:var(--muted);font-weight:500;letter-spacing:0;margin-left:6px}.search-wrap{flex:1;position:relative;max-width:620px}#search-results{position:absolute;top:40px;left:0;right:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;max-height:60vh;overflow:auto;z-index:20;box-shadow:0 10px 30px #00000080}.sr-item{padding:8px 12px;cursor:pointer;display:flex;gap:10px;align-items:baseline;border-bottom:1px solid #1c2537}.sr-item:hover,.sr-item.active{background:#1f2b44}.sr-kind{font-size:10px;letter-spacing:.08em;color:var(--muted);width:74px;flex:none;text-transform:uppercase}.sr-name{flex:1}.sr-ctx{color:var(--muted);font-size:11px}.controls{display:flex;align-items:center;gap:10px}.mode-toggle{display:flex;border:1px solid var(--border);border-radius:6px;overflow:hidden}.mode-toggle button{border:0;border-radius:0;padding:6px 12px;background:transparent;letter-spacing:.08em;font-weight:700}.mode-toggle button.active{background:var(--accent);color:#051022}#navigator,#inspector{background:var(--panel);border-right:1px solid var(--border);overflow:auto;padding:12px}#inspector{border-right:0;border-left:1px solid var(--border)}.panel-title{font-size:10px;letter-spacing:.18em;color:var(--muted);margin:6px 0 10px;font-weight:700}#viewport{position:relative;overflow:hidden}#canvas{width:100%;height:100%;display:block}#labels{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;touch-action:none;isolation:isolate;z-index:0}#labels>div{pointer-events:auto}.hint{position:absolute;left:12px;bottom:12px;background:#0b0f19bf;border:1px solid var(--border);border-radius:6px;padding:6px 10px;color:var(--muted);font-size:12px;pointer-events:none}#crosshair{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#fff;font-size:22px;pointer-events:none;text-shadow:0 0 4px #000}#walk-help{position:absolute;top:12px;left:50%;transform:translate(-50%);background:#0b0f19bf;border:1px solid var(--border);border-radius:6px;padding:6px 12px;color:var(--muted);font-size:12px}.lbl{color:#eef3f8;font-size:12px;font-weight:600;text-shadow:0 1px 2px #000,0 0 6px #000;white-space:nowrap;cursor:pointer;text-align:center}.lbl .sub{display:block;font-size:10px;font-weight:400;color:#b7c2cf}.lbl.district{font-size:15px;letter-spacing:.14em;text-transform:uppercase;color:#fff;opacity:.9}.lbl.district .sub{letter-spacing:0;text-transform:none}.lbl.small{font-size:11px;font-weight:500}.lbl.tiny{font-size:10px;font-weight:400;color:#cfd8e3}.lbl .badge{display:inline-block;margin-left:4px;padding:0 5px;border-radius:3px;font-size:10px;font-weight:700}.badge.isolated{background:#d9822b;color:#111}.badge.deprecated{background:#666;color:#eee}.badge.warn{background:var(--accent-2);color:#111}.lbl.dim{opacity:.25}.lbl.road{font-size:10px;color:#dfe6ee;font-weight:500;background:#0b0f198c;padding:1px 5px;border-radius:4px}.lbl.door{font-size:10px;font-family:var(--mono);background:#0b0f19b3;padding:1px 4px;border-radius:3px}.tree ul{list-style:none;margin:0;padding-left:12px}.tree>ul{padding-left:0}.tree li{margin:1px 0}.tree .row{display:flex;align-items:center;gap:6px;padding:3px 6px;border-radius:4px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree .row:hover{background:var(--panel-2)}.tree .row.selected{background:#22345a}.tree .row .ico{width:16px;text-align:center;flex:none}.tree .row .name{overflow:hidden;text-overflow:ellipsis}.tree .row .count{color:var(--muted);font-size:11px;margin-left:auto}.tree .row .status{font-size:10px;margin-left:4px}.tree .caret{width:12px;color:var(--muted);font-size:10px;flex:none}.tree li.collapsed>ul{display:none}.tree .district-dot{width:8px;height:8px;border-radius:2px;display:inline-block;flex:none}.legend{margin-top:18px;border-top:1px solid var(--border);padding-top:8px}.legend-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 8px;font-size:11px;color:var(--muted)}.legend-grid span{display:flex;align-items:center;gap:6px}.sw{width:10px;height:10px;border-radius:2px;display:inline-block}.ln{width:14px;height:3px;display:inline-block;border-radius:2px}.insp-title{font-size:17px;font-weight:800;margin:2px 0;line-height:1.2}.insp-sub{color:var(--muted);font-size:11px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:10px}.kv{display:grid;grid-template-columns:110px 1fr;gap:6px 10px;margin:8px 0}.kv .k{color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding-top:2px}.kv .v{word-break:break-word}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:10px 0}.stat{background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:8px;text-align:center}.stat b{display:block;font-size:18px}.stat span{font-size:10px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase}.section{margin-top:14px}.section>h4{margin:0 0 6px;font-size:10px;letter-spacing:.16em;color:var(--muted);text-transform:uppercase;display:flex;justify-content:space-between}.section>h4 .n{color:var(--text)}.list{display:flex;flex-direction:column;gap:2px}.item{padding:5px 8px;background:var(--panel-2);border-radius:5px;display:flex;gap:8px;align-items:center;cursor:pointer;border:1px solid transparent}.item:hover{border-color:var(--accent)}.item .m{font-family:var(--mono);font-size:10px;font-weight:700;padding:1px 5px;border-radius:3px;background:#333;flex:none}.item .t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item .r{color:var(--muted);font-size:11px;flex:none}.item.static{cursor:default}.item.static:hover{border-color:transparent}.m.GET{background:#1e6b3a}.m.POST{background:#1f4f9c}.m.PUT,.m.PATCH{background:#9c6a1f}.m.DELETE{background:#9c2f2f}.m.WS{background:#6b2f9c}.m.GRPC{background:#7a7a1f}.m.ANY,.m.PROXY{background:#555}.status-pill{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:700}.status-pill.ok{background:#143d24;color:#6ee59a}.status-pill.isolated{background:#4a2d10;color:#ffb367}.status-pill.deprecated{background:#333;color:#ccc}.actions{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}.actions button{padding:6px 10px;font-size:12px}.conf{display:inline-block;height:6px;width:60px;background:#223;border-radius:3px;overflow:hidden;vertical-align:middle;margin-right:6px}.conf i{display:block;height:100%;background:var(--accent)}.excerpt{color:var(--muted);font-size:12px;margin:4px 0 0}.crumbs{font-size:11px;color:var(--muted);margin-bottom:6px}.crumbs a{color:var(--accent);cursor:pointer}.field-list{font-family:var(--mono);font-size:11px;color:#c9d4e0;display:flex;flex-wrap:wrap;gap:4px}.field-list span{background:var(--panel-2);padding:1px 6px;border-radius:3px}.field-list span.pk{border:1px solid var(--accent-2)}.secret{color:var(--muted);letter-spacing:.1em}.tbl{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:11px}.tbl td{padding:3px 6px;border-bottom:1px solid #1c2537;vertical-align:top}.tbl td:first-child{color:var(--muted)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#04070edb;display:flex;align-items:center;justify-content:center;z-index:50}.dialog{width:560px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:28px 30px;box-shadow:0 30px 80px #0009}.dialog h1{margin:6px 0 8px;font-size:24px}.dialog label{display:block;font-size:11px;letter-spacing:.1em;color:var(--muted);margin:14px 0 6px;text-transform:uppercase}.dialog label.check{text-transform:none;letter-spacing:0;font-size:12px;display:flex;gap:8px;align-items:center}.dialog .row{display:flex;gap:10px;margin-top:18px}.dialog-brand{font-weight:800;letter-spacing:.12em}.dialog-brand span{color:var(--muted);font-weight:400;margin-left:6px;letter-spacing:0}.error{color:var(--danger);margin-top:10px;white-space:pre-wrap;font-family:var(--mono);font-size:11px}.loading-box{text-align:center}.spinner{width:42px;height:42px;border:3px solid #223;border-top-color:var(--accent);border-radius:50%;margin:0 auto 22px;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}#loading-lines{font-family:var(--mono);font-size:14px;color:var(--muted);min-height:120px}#loading-lines div{opacity:.5;animation:fadein .4s ease forwards}#loading-lines div:last-child{color:var(--text);opacity:1}@keyframes fadein{0%{opacity:0;transform:translateY(6px)}to{opacity:.55;transform:none}}.banner{position:fixed;top:38%;left:50%;transform:translate(-50%,-50%);white-space:nowrap;font-size:clamp(16px,2.6vw,34px);font-weight:900;letter-spacing:.3em;color:#fff;text-shadow:0 0 30px rgba(110,168,255,.8),0 2px 8px #000;z-index:60;pointer-events:none;animation:banner 3.4s ease forwards}@keyframes banner{0%{opacity:0;letter-spacing:.6em}15%{opacity:1;letter-spacing:.3em}80%{opacity:1}to{opacity:0}}.modal-box{width:min(1000px,92vw);max-height:88vh;background:var(--panel);border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;overflow:hidden}.modal-head{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--border);font-family:var(--mono);font-size:12px}#modal-body{overflow:auto;padding:0}.modal-actions{position:sticky;top:0;z-index:1;display:flex;justify-content:flex-end;padding:6px 10px;background:var(--panel);border-bottom:1px solid var(--border)}button.small{font-size:11px;padding:3px 8px}.code{font-family:var(--mono);font-size:12px;line-height:1.5}.code .cline{display:flex}.code .cline.hl{background:#1d2c4a}.code .no{width:56px;text-align:right;padding-right:12px;color:#4b5a70;-webkit-user-select:none;user-select:none;flex:none}.code pre{margin:0;white-space:pre}.md{padding:20px 26px;line-height:1.6;max-width:900px}.md h1,.md h2,.md h3{margin:18px 0 8px}.md code{font-family:var(--mono);background:#0d1320;padding:1px 4px;border-radius:3px}.md pre{background:#0d1320;padding:10px;border-radius:6px;overflow:auto}.md table{border-collapse:collapse}.md td,.md th{border:1px solid var(--border);padding:4px 8px}.enter-prompt{position:absolute;bottom:60px;left:50%;transform:translate(-50%);background:#0b0f19d9;border:1px solid var(--accent);padding:8px 14px;border-radius:6px;font-weight:700}.lbl.cargo{font-size:12px;font-weight:700;color:#ffe2a8;text-shadow:0 0 8px #ffb020,0 1px 2px #000}.lbl.cargo .sub{color:#ffd98a}.lbl.current{color:#fff}.lbl.current:after{content:"";display:block;width:6px;height:6px;margin:2px auto 0;border-radius:50%;background:#ffc14a;box-shadow:0 0 10px #ffc14a;animation:blink 1s infinite alternate}@keyframes blink{0%{opacity:.3}to{opacity:1}}#player{position:absolute;left:50%;bottom:14px;transform:translate(-50%);width:min(720px,92%);background:#0b0f19e0;border:1px solid var(--border);border-radius:12px;padding:10px 14px;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:4}#player .row1{display:flex;align-items:center;gap:8px}#player .row1 .title{flex:1;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#player .row1 .title .sub{color:var(--muted);font-weight:400;margin-left:6px;font-size:11px}#player button{padding:4px 9px}#player button.primary{min-width:84px}#player .steps{display:flex;align-items:center;gap:0;margin-top:8px;height:18px}#player .steps .dot{width:10px;height:10px;border-radius:50%;background:#2a3646;border:1px solid #3d4b60;cursor:pointer;flex:none}#player .steps .dot.done{background:#ffc14a;border-color:#ffc14a}#player .steps .dot.cur{background:#fff;border-color:#fff;box-shadow:0 0 8px #ffc14a;transform:scale(1.3)}#player .steps .seg{flex:1;height:2px;background:#2a3646}#player .steps .seg.done{background:#ffc14a}#player select{font:inherit;background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:3px 6px}#player .follow.on{border-color:var(--accent-2);color:var(--accent-2)}.conf-badge{display:inline-block;padding:1px 7px;border-radius:10px;font-size:10px;font-weight:700;letter-spacing:.04em}.conf-badge.confirmed{background:#143d24;color:#6ee59a}.conf-badge.likely{background:#2a3d14;color:#c9e56e}.conf-badge.inferred{background:#3d2f14;color:#e5c06e}.conf-badge.unknown{background:#3d1414;color:#e56e6e}.voyage-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;border:1px solid transparent}.voyage-item:hover{background:var(--panel-2);border-color:var(--accent)}.voyage-item.active{background:#22345a}.voyage-item .ico{font-size:16px;width:20px;text-align:center}.voyage-item .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.voyage-item .st{color:var(--muted);font-size:11px}.step-card{border:1px solid #3a4a66;background:#121a2b;border-radius:10px;padding:12px;margin:8px 0}.step-card .hdr{display:flex;justify-content:space-between;align-items:baseline;font-size:10px;letter-spacing:.16em;color:var(--muted)}.step-card .op{font-family:var(--mono);font-size:12px;color:#c9d4e0;margin:4px 0 8px}.step-card h3{margin:4px 0 2px;font-size:16px}.step-card .grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:8px 0}.step-card .box{background:#0d1320;border-radius:6px;padding:6px 8px}.step-card .box .lab{font-size:10px;letter-spacing:.12em;color:var(--muted);margin-bottom:4px}.step-card .box .val{font-family:var(--mono);font-size:11px}.step-card .box .val .plus{color:#6ee59a}.step-card .box .val .tilde{color:#ffc14a}.step-card .box .val .r{color:#8ab4ff}.step-card .box .val div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.step-card .next{margin-top:8px;color:var(--muted);font-size:11px}.step-card .next b{color:var(--text)}.evidence{background:#0d1320;border-left:3px solid var(--accent);padding:8px 10px;border-radius:4px;font-size:11px;margin-top:8px}.evidence .ek{font-size:10px;letter-spacing:.1em;color:var(--muted)}.evidence a{color:var(--accent);cursor:pointer;font-family:var(--mono)}.passport{border:1px dashed #4a5670;border-radius:10px;padding:10px;margin-top:10px}.passport .note{font-size:10px;color:#ffc14a;letter-spacing:.08em;margin-bottom:6px}.passport .fld{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:6px 4px;border-top:1px solid #1c2537;cursor:pointer;border-radius:4px}.passport .fld:hover,.passport .fld.active{background:#1a2438}.passport .fld .n{font-family:var(--mono);font-size:12px}.passport .fld .v{font-family:var(--mono);font-size:12px;color:#ffe2a8;text-align:right}.passport .fld .w{grid-column:1 / -1;font-size:10px;color:var(--muted)}.passport .fld .w b{color:#c9d4e0;font-weight:500}.done-card{text-align:center;padding:16px 8px;border:1px solid #3a4a66;border-radius:10px;background:linear-gradient(180deg,#152038,#101726)}.done-card h2{margin:0 0 8px;color:#6ee59a;letter-spacing:.1em}.done-card .stats{grid-template-columns:repeat(3,1fr)}.timeline{margin:6px 0;padding-left:12px;border-left:2px solid #3a4a66}.timeline .tl{position:relative;padding:2px 0 6px 8px;font-size:12px}.timeline .tl:before{content:"";position:absolute;left:-17px;top:6px;width:8px;height:8px;border-radius:50%;background:#ffc14a}.timeline .tl .k{font-size:10px;letter-spacing:.1em;color:var(--muted)}#minimap{position:absolute;top:12px;right:12px;width:190px;height:140px;background:#0b0f19cc;border:1px solid var(--border);border-radius:8px;z-index:3;cursor:crosshair}#minimap canvas{width:100%;height:100%;display:block;border-radius:8px}#layers-pop{position:absolute;top:160px;right:12px;background:#0b0f19eb;border:1px solid var(--border);border-radius:8px;padding:10px 12px;z-index:3;font-size:12px;min-width:190px}#layers-pop label{display:flex;gap:8px;align-items:center;padding:2px 0;cursor:pointer}#layers-pop .presets{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}#layers-pop .presets button{padding:3px 7px;font-size:11px}#ask{position:absolute;left:12px;top:12px;width:360px;background:#0b0f19eb;border:1px solid var(--border);border-radius:10px;z-index:4;padding:10px 12px}#ask input{margin-bottom:8px}#ask .answer{font-size:12px;line-height:1.5}#ask .answer .muted{display:block;margin-top:4px}#ask .chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}#ask .chips button{font-size:11px;padding:2px 8px}#sky-pop,#achievements-pop{position:absolute;top:160px;right:12px;width:300px;background:#111827f5;border:1px solid var(--border);border-radius:8px;padding:12px;z-index:6}#achievements-pop{width:340px;max-height:70vh;overflow:auto}.row-lbl{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}.avatars{display:flex;flex-wrap:wrap;gap:4px}.avatars button{font-size:18px;padding:4px 7px}.ach-list{display:flex;flex-direction:column;gap:4px}.ach{display:flex;gap:10px;align-items:center;padding:6px 8px;border-radius:6px;background:var(--panel-2);opacity:.45}.ach.on{opacity:1;border:1px solid #3d5a2f}.ach .ico{font-size:20px}.ach div{flex:1;display:flex;flex-direction:column}.ach div span{color:var(--muted);font-size:11px}.ach em{color:var(--accent-2);font-style:normal;font-size:11px}.toast{position:absolute;left:50%;bottom:90px;transform:translate(-50%,20px);background:#111827f5;border:1px solid var(--accent-2);border-radius:8px;padding:10px 16px;display:flex;flex-direction:column;gap:2px;opacity:0;transition:all .35s;z-index:30;pointer-events:none}.toast.show{opacity:1;transform:translate(-50%)}.toast span{color:var(--muted);font-size:12px}.lbl.traveller{font-size:11px;background:#111827bf;padding:2px 6px;border-radius:10px;border:1px solid #3a4658}.lbl.traveller .av{font-size:14px}.lbl.cargo.ghost{opacity:.8;font-size:10px}
