:root{--ink:#101828;--ink-2:#344054;--muted:#667085;--line:#e4e7ec;--surface:#ffffff;--canvas:#f7f8fa;--accent:#2e5aac;--accent-soft:#eaf0fb;--danger:#b42318;--warn:#b54708;--ok:#027a48;--radius:10px;--shadow:0 1px 2px rgba(16,24,40,0.06),0 4px 16px rgba(16,24,40,0.06);--space:#05070d;--space-2:#0b1020;--star:#cfd8ff}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%}body{background:var(--canvas);color:var(--ink);font:15px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{margin:0 0 .4em;line-height:1.25;letter-spacing:-.01em}h1{font-size:24px}h2{font-size:19px}h3{font-size:16px}button{font:inherit}.shell{display:flex;flex-direction:column;height:100vh}.tabbar{display:flex;align-items:center;gap:8px;padding:0 16px;height:56px;background:var(--surface);border-bottom:1px solid var(--line);flex:0 0 auto;z-index:20}.tabbar.dark{background:#080b14;border-bottom-color:#1a2338;color:#e7ecff}.brand{font-weight:700;letter-spacing:.18em;margin-right:12px}.brand,.tab{font-size:14px}.tab{padding:8px 14px;border-radius:999px;color:var(--muted);font-weight:600}.tab:hover{text-decoration:none;background:var(--canvas)}.tab.active{background:var(--accent-soft);color:var(--accent)}.tabbar.dark .tab{color:#8ea0c8}.tabbar.dark .tab:hover{background:#131a2c}.tabbar.dark .tab.active{background:#17223c;color:#cddcff}.spacer{flex:1 1}.usermenu{position:relative}.usermenu>button{display:flex;align-items:center;gap:8px;background:none;border:1px solid var(--line);border-radius:999px;padding:5px 12px 5px 5px;cursor:pointer;color:inherit}.tabbar.dark .usermenu>button{border-color:#24304d}.avatar{width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}.menu{position:absolute;right:0;top:44px;min-width:220px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:6px;z-index:50}.menu a,.menu button{display:block;width:100%;text-align:left;padding:8px 10px;border:0;background:none;border-radius:6px;color:var(--ink);cursor:pointer;font-size:14px}.menu a:hover,.menu button:hover{background:var(--canvas);text-decoration:none}.menu .menu-head{padding:8px 10px;color:var(--muted);font-size:12px;border-bottom:1px solid var(--line);margin-bottom:4px}.page{flex:1 1;min-height:0;overflow:auto}.page.flush{overflow:hidden}.container{max-width:1160px;margin:0 auto;padding:24px 20px 64px}.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:8px;padding:8px 14px;font-size:14px;font-weight:600;cursor:pointer}.btn:hover{background:var(--canvas)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.06)}.btn.danger{color:var(--danger);border-color:#f3c3bd}.btn.ghost{border-color:transparent;background:transparent}.btn.sm{padding:5px 10px;font-size:13px}.btn:disabled{opacity:.55;cursor:not-allowed}input[type=email],input[type=number],input[type=password],input[type=text],select,textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:9px 11px;font:inherit;color:var(--ink);background:var(--surface)}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}label.field{display:block;margin-bottom:12px}label.field>span{display:block;font-size:13px;font-weight:600;color:var(--ink-2);margin-bottom:5px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card.pad{padding:18px}.muted{color:var(--muted)}.small{font-size:13px}.row{gap:10px}.between,.row{display:flex;align-items:center}.between{justify-content:space-between;gap:12px}.stack{display:flex;flex-direction:column;gap:12px}.grid2{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px;gap:12px}.pill{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;background:var(--canvas);border:1px solid var(--line);color:var(--ink-2)}.pill .dot{width:8px;height:8px;border-radius:50%;background:var(--muted)}.pill.ok{color:var(--ok);border-color:#a6f4c5;background:#ecfdf3}.pill.warn{color:var(--warn);border-color:#fedf89;background:#fffaeb}.pill.err{color:var(--danger);border-color:#fecdca;background:#fef3f2}.banner{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);padding:12px 14px;font-size:14px}.banner.error{border-color:#fecdca;background:#fef3f2;color:#912018}.banner.info{border-color:#b2ccf4;background:var(--accent-soft);color:#1b3a70}table.data{width:100%;border-collapse:collapse;font-size:14px}table.data th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:10px 12px}table.data td,table.data th{border-bottom:1px solid var(--line)}table.data td{padding:11px 12px;vertical-align:middle}table.data tr:last-child td{border-bottom:0}.auth-wrap{min-height:100vh;display:grid;place-items:center;background:radial-gradient(1200px 600px at 50% -10%,#16204a 0,var(--space) 60%);padding:20px}.auth-card{width:100%;max-width:400px;background:#0d1424;border:1px solid #1e2a47;border-radius:14px;padding:28px;color:#e7ecff;box-shadow:0 20px 60px rgba(0,0,0,.5)}.auth-card h1{letter-spacing:.22em;font-size:20px;margin-bottom:4px}.auth-card .sub{color:#8ea0c8;font-size:14px;margin-bottom:20px}.auth-card label.field>span{color:#a9b8dc}.auth-card input{background:#111a2e;border-color:#22304f;color:#e7ecff}.auth-card .btn.primary{width:100%;justify-content:center;padding:11px}.explorer{display:grid;grid-template-columns:250px minmax(0,1fr);grid-gap:16px;gap:16px;align-items:start}.tree{padding:10px;position:-webkit-sticky;position:sticky;top:16px;max-height:calc(100vh - 120px);overflow:auto}.tree-row{display:flex;align-items:center;gap:2px;border-radius:6px;position:relative}.tree-row:hover{background:var(--canvas)}.tree-row.active{background:var(--accent-soft)}.tree-row.active .tree-item{color:var(--accent);font-weight:600}.tree-row.droptarget{background:var(--accent-soft);outline:2px dashed var(--accent);outline-offset:-2px}.tree-twisty{color:var(--muted);font-size:10px;padding:4px 2px;line-height:1}.tree-item,.tree-twisty{border:0;background:none;cursor:pointer}.tree-item{display:flex;align-items:center;gap:6px;flex:1 1;min-width:0;text-align:left;padding:6px 4px;border-radius:6px;font-size:14px;color:var(--ink-2)}.tree-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-count{margin-left:auto;font-size:12px;color:var(--muted)}.tree-menu-wrap{position:relative}.tree-more{border:0;background:none;cursor:pointer;color:var(--muted);padding:4px 6px;border-radius:6px;opacity:0;font-size:14px;line-height:1}.tree-more:focus-visible,.tree-row:hover .tree-more{opacity:1}.tree-menu{top:26px;right:0;min-width:160px}.menu-scrim{position:fixed;inset:0;z-index:40}.breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin-bottom:10px;font-size:13px}.breadcrumb button{border:0;background:none;color:var(--accent);cursor:pointer;padding:2px 4px;border-radius:5px;font-size:13px}.breadcrumb button:hover{background:var(--accent-soft)}.breadcrumb button.here{color:var(--ink);font-weight:600;cursor:default}.breadcrumb .sep{color:var(--muted)}.filerow .badges{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.filerow[draggable=true]{cursor:-webkit-grab;cursor:grab}.filerow[draggable=true]:active{cursor:-webkit-grabbing;cursor:grabbing}.filelist{overflow:hidden}.filerow{display:grid;grid-template-columns:minmax(0,1fr) minmax(210px,auto) 110px 100px;grid-gap:12px;gap:12px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line);cursor:pointer}.filerow.pickable{grid-template-columns:20px minmax(0,1fr) minmax(210px,auto) 110px 100px}.filerow .rowpick{width:16px;height:16px;margin:0;cursor:pointer}.filerow:hover{background:var(--canvas)}.filerow.selected{background:var(--accent-soft)}.filerow:last-child{border-bottom:0}.filename{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropzone{border:1.5px dashed var(--line);border-radius:var(--radius);padding:22px;text-align:center;color:var(--muted);background:var(--surface)}.dropzone.drag{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.detail{position:fixed;top:56px;right:0;bottom:0;width:380px;background:var(--surface);border-left:1px solid var(--line);padding:18px;overflow:auto;box-shadow:-8px 0 24px rgba(16,24,40,.06);z-index:30}.modal-backdrop{position:fixed;inset:0;background:rgba(16,24,40,.45);display:grid;place-items:center;z-index:60;padding:20px}.modal{background:var(--surface);border-radius:14px;width:100%;max-width:520px;padding:22px;max-height:88vh;overflow:auto}.modal.wide{max-width:760px}.modal.preview{width:min(1100px,92vw);max-width:min(1100px,92vw);height:80vh;display:flex;flex-direction:column}.sheet-table{border-collapse:collapse;font-size:13px;white-space:nowrap}.sheet-table td,.sheet-table th{border:1px solid var(--line);padding:4px 8px;text-align:left}.sheet-table th{position:-webkit-sticky;position:sticky;top:0;background:var(--canvas);font-weight:600}.galaxy-wrap{position:relative;height:100%;background:var(--space);overflow:hidden}.galaxy-canvas,.galaxy-empty{position:absolute;inset:0}.galaxy-empty{display:grid;place-items:center;color:#97a6cc;text-align:center;padding:32px}.promptbar{position:absolute;left:50%;transform:translateX(-50%);bottom:26px;width:min(760px,calc(100% - 40px));background:rgba(10,15,28,.86);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #24304d;border-radius:14px;padding:10px;z-index:12;box-shadow:0 18px 50px rgba(0,0,0,.5)}.promptbar .modes{display:flex;gap:6px;margin-bottom:8px}.mode{border:1px solid #24304d;background:transparent;color:#8ea0c8;border-radius:999px;padding:4px 12px;font-size:12px;font-weight:600;cursor:pointer}.mode.active{background:#17223c;color:#cddcff;border-color:#33456f}.promptbar form{display:flex;gap:8px}.promptbar input[type=text]{background:transparent;border:0;color:#e7ecff;font-size:15px}.promptbar input::placeholder{color:#6f80a8}.promptbar input:focus{outline:none}.promptbar .status{color:#8ea0c8;font-size:12px;padding:4px 4px 0}.answer{position:absolute;left:26px;bottom:130px;width:min(430px,calc(100% - 52px));background:rgba(10,15,28,.9);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #24304d;border-radius:14px;padding:16px;color:#dfe7ff;z-index:12;max-height:46vh;overflow:auto}.answer .cite{display:block;width:100%;text-align:left;background:none;border:0;border-top:1px solid #1d2946;color:#9fc0ff;padding:7px 0;cursor:pointer;font-size:13px}.answer .cite:hover{color:#cfe0ff}.node-panel{position:absolute;top:20px;right:20px;width:330px;background:rgba(10,15,28,.9);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #24304d;border-radius:14px;padding:16px;color:#dfe7ff;z-index:12;max-height:calc(100% - 190px);overflow:auto}.node-panel .tag{display:inline-block;border:1px solid #2a3a5f;border-radius:999px;padding:2px 9px;font-size:11px;color:#9fb2dd;margin:0 5px 5px 0}.close-x{background:none;border:0;color:#8ea0c8;font-size:18px;cursor:pointer;line-height:1}.galaxy-notice{position:absolute;top:20px;left:20px;z-index:12;background:rgba(10,15,28,.85);border:1px solid #24304d;color:#a9b8dc;border-radius:10px;padding:8px 12px;font-size:12px;max-width:340px}.view-toggle{position:absolute;top:18px;left:50%;transform:translateX(-50%);z-index:13;display:flex;padding:3px;gap:2px;background:rgba(10,15,28,.86);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid #24304d;border-radius:999px}.view-toggle button{border:0;background:transparent;color:#8ea0c8;border-radius:999px;padding:5px 16px;font-size:12px;font-weight:600;cursor:pointer}.view-toggle button.active{background:#17223c;color:#cddcff}.galaxy-wrap.jarvis{--jv:#4fd8ff;--jv-soft:rgba(79,216,255,0.35);--jv-faint:rgba(79,216,255,0.12);--jv-gold:#ffb547;--jv-ink:#dff8ff;--jv-muted:#6fb9d3;--jv-panel:rgba(1,16,26,0.78);--jv-mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;background:#01080f}.jarvis .galaxy-canvas:after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(180deg,rgba(79,216,255,.035) 0 1px,transparent 1px 3px)}.jarvis .answer,.jarvis .galaxy-notice,.jarvis .node-panel,.jarvis .promptbar,.jarvis .view-toggle,.jv-panel{background:var(--jv-panel);border:1px solid var(--jv-soft);box-shadow:0 0 22px rgba(79,216,255,.12),inset 0 0 18px rgba(79,216,255,.06);color:var(--jv-ink)}.jarvis .answer,.jarvis .galaxy-notice,.jarvis .node-panel,.jarvis .promptbar,.jv-panel{border-radius:4px}.jarvis .mode,.jarvis .view-toggle button{font-family:var(--jv-mono);text-transform:uppercase;letter-spacing:.1em;font-size:11px;color:var(--jv-muted)}.jarvis .mode.active,.jarvis .view-toggle button.active{background:var(--jv-faint);color:var(--jv-ink);box-shadow:inset 0 0 0 1px var(--jv-soft)}.jarvis .mode{border-color:var(--jv-soft);border-radius:3px}.jarvis .promptbar input[type=text]{color:var(--jv-ink);font-family:var(--jv-mono);font-size:14px}.jarvis .promptbar input::placeholder{color:#3f7f96}.jarvis .promptbar .status{color:var(--jv);font-family:var(--jv-mono);text-transform:uppercase;letter-spacing:.08em}.jarvis .btn.primary{background:var(--jv);border-color:var(--jv);color:#01131d;border-radius:3px;text-transform:uppercase;letter-spacing:.08em;font-size:12px;box-shadow:0 0 16px rgba(79,216,255,.4)}.jarvis .answer .cite{color:var(--jv-gold);border-top-color:var(--jv-faint);font-family:var(--jv-mono);font-size:12px}.jarvis .answer .cite:hover{color:#ffe2a8}.jarvis .node-panel h3{color:var(--jv-gold)!important}.jarvis .node-panel .tag{border-color:var(--jv-soft);color:var(--jv-muted);border-radius:3px}.jarvis .close-x{color:var(--jv-muted)}.jarvis .galaxy-notice{top:auto;left:auto;right:20px;bottom:140px;color:var(--jv-muted)}.jv-hud{position:absolute;inset:0;pointer-events:none;z-index:11;font-family:var(--jv-mono)}.jv-panel{position:absolute;padding:12px 14px;font-size:11px;color:var(--jv-muted);background-image:linear-gradient(var(--jv),var(--jv)),linear-gradient(var(--jv),var(--jv)),linear-gradient(var(--jv),var(--jv)),linear-gradient(var(--jv),var(--jv));background-size:12px 2px,2px 12px,12px 2px,2px 12px;background-position:0 0,0 0,100% 100%,100% 100%;background-repeat:no-repeat;background-color:var(--jv-panel)}.jv-panel h4{margin:0 0 8px;font-size:10px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--jv)}.jv-head{top:20px;left:20px;width:280px}.jv-title{color:var(--jv);font-size:15px;font-weight:700;letter-spacing:.22em;text-shadow:0 0 10px rgba(79,216,255,.7)}.jv-title span{color:var(--jv-muted);font-weight:400;font-size:11px;letter-spacing:.12em}.jv-clock{margin-top:4px;letter-spacing:.08em}.jv-status{margin-top:8px;display:flex;align-items:center;gap:8px;color:var(--jv-ink);text-transform:uppercase;letter-spacing:.16em}.jv-status i{width:8px;height:8px;border-radius:50%;background:var(--jv);box-shadow:0 0 8px var(--jv);animation:jv-blink 2.4s ease-in-out infinite}.jv-status.busy{color:var(--jv-gold)}.jv-status.busy i{background:var(--jv-gold);box-shadow:0 0 10px var(--jv-gold);animation-duration:.5s}.jv-query{margin-top:6px;color:var(--jv-ink);opacity:.8;overflow-wrap:anywhere}.jv-stats{top:158px;left:20px;width:280px}.jv-stats dl{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px 12px;gap:8px 12px;margin:0 0 10px}.jv-stats dt{text-transform:uppercase;letter-spacing:.12em;font-size:9px}.jv-stats dd{margin:0;color:var(--jv-ink);font-size:18px;text-shadow:0 0 8px rgba(79,216,255,.5)}.jv-bar{position:relative;display:flex;justify-content:space-between;padding:3px 0 6px}.jv-bar b{color:var(--jv-ink);font-weight:500}.jv-bar em{position:absolute;left:0;bottom:1px;height:2px;background:var(--jv);box-shadow:0 0 6px var(--jv);transition:width .6s ease}.jv-log{top:20px;right:20px;width:300px}.jv-log ol{list-style:none;margin:0;padding:0}.jv-log li{padding:3px 0;color:var(--jv-ink);opacity:.85;overflow-wrap:anywhere;animation:jv-in .4s ease}.jv-log li:first-child{opacity:1;color:var(--jv)}.jv-log time{color:var(--jv-muted);margin-right:6px}.jv-reticle{position:absolute;top:-40px;left:-40px;z-index:10;pointer-events:none;opacity:0;transition:opacity .3s;will-change:transform}.jv-reticle svg{display:block;overflow:visible;fill:none;stroke:var(--jv-gold);filter:drop-shadow(0 0 4px var(--jv-gold));animation:jv-spin 6s linear infinite}.jv-reticle-ring{stroke-width:1.2;stroke-dasharray:26 8}.jv-reticle-dash{stroke-width:.8;stroke-dasharray:2 5;opacity:.7}.jv-reticle path{stroke-width:1.4}.jv-reticle span{position:absolute;left:76px;top:30px;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#ffe2a8;text-shadow:0 0 6px rgba(255,181,71,.8);border-bottom:1px solid rgba(255,181,71,.6);padding-bottom:2px}@media (max-width:1080px){.jv-stats{display:none}}@media (max-width:920px){.jv-log{display:none}}@keyframes jv-spin{to{transform:rotate(1turn)}}@keyframes jv-blink{50%{opacity:.35}}@keyframes jv-in{0%{opacity:0;transform:translateX(-6px)}}@media (prefers-reduced-motion:reduce){.jv-reticle svg,.jv-status i{animation:none}}.editor-shell{max-width:900px;margin:0 auto}.toolbar{display:flex;flex-wrap:wrap;gap:4px;padding:8px;border:1px solid var(--line);border-bottom:0;border-radius:var(--radius) var(--radius) 0 0;background:var(--surface);position:-webkit-sticky;position:sticky;top:0;z-index:5}.toolbar button{border:1px solid transparent;background:none;border-radius:6px;padding:5px 9px;font-size:13px;cursor:pointer;color:var(--ink-2)}.toolbar button:hover{background:var(--canvas)}.toolbar button.on{background:var(--accent-soft);color:var(--accent);border-color:#c5d7f6}.editor-surface{border:1px solid var(--line);border-radius:0 0 var(--radius) var(--radius);background:var(--surface);padding:22px 26px;min-height:60vh}.editor-surface .ProseMirror{outline:none;min-height:55vh;line-height:1.65}.editor-surface .ProseMirror table{border-collapse:collapse;width:100%;margin:12px 0}.editor-surface .ProseMirror td,.editor-surface .ProseMirror th{border:1px solid var(--line);padding:7px 9px}.editor-surface .ProseMirror pre{background:#0d1424;color:#e7ecff;padding:12px;border-radius:8px;overflow:auto}.editor-surface .ProseMirror blockquote{border-left:3px solid var(--line);margin-left:0;padding-left:14px;color:var(--ink-2)}.editor-surface .ProseMirror img{max-width:100%}.prose h1,.prose h2,.prose h3{margin-top:1.2em}.prose table{border-collapse:collapse;width:100%}.prose td,.prose th{border:1px solid var(--line);padding:6px 9px}.prose pre{background:#0d1424;color:#e7ecff;padding:12px;border-radius:8px;overflow:auto}.empty-state{text-align:center;padding:48px 20px;color:var(--muted)}.empty-state h2{color:var(--ink)}.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media (max-width:900px){.explorer{grid-template-columns:1fr}.tree{position:static;max-height:220px}.detail{width:100%}.filerow{grid-template-columns:minmax(0,1fr) 100px}.filerow.pickable{grid-template-columns:20px minmax(0,1fr) 100px}.filerow .col-hide{display:none}.answer,.node-panel{left:20px;right:20px;width:auto}.galaxy-notice,.node-panel{top:64px}.view-toggle{top:14px}.jv-head{top:60px;left:12px;width:auto;max-width:calc(100% - 24px);padding:8px 10px}.jv-title{font-size:12px}.jv-query{display:none}}.portal{min-height:100%;background:var(--canvas)}.portal-wrap{max-width:980px;margin:0 auto;padding:32px 20px 64px}.portal-head{padding-bottom:16px;margin-bottom:20px;border-bottom:1px solid var(--line)}.portal-head h1{margin:0;font-size:22px}.portal-head p{margin:4px 0 0}.portal-body{display:grid;grid-template-columns:240px 1fr;grid-gap:24px;gap:24px;align-items:start}.portal-list{gap:6px}.portal-item{display:flex;flex-direction:column;gap:2px;text-align:left;border:1px solid transparent;background:transparent;border-radius:8px;padding:8px 10px;cursor:pointer}.portal-item.active,.portal-item:hover{background:var(--surface)}.portal-item.active{border-color:var(--line);box-shadow:var(--shadow)}@media (max-width:760px){.portal-body{grid-template-columns:1fr}}