:root{--bg: #f6f7f9;--bg2: #ffffff;--panel: #ffffff;--panel2: #f4f5f7;--line: rgba(15, 23, 42, .08);--line2: rgba(15, 23, 42, .16);--ink: #1e1e1e;--muted: #6b7280;--faint: #9ca3af;--accent: #d99229;--accent2: #b87a18;--accent-soft: rgba(217, 146, 41, .1);--st-todo: #94a3b8;--st-build: #2563eb;--st-test: #9333ea;--st-done: #16a34a;--shadow: 0 8px 24px -10px rgba(15, 23, 42, .15), 0 1px 3px rgba(15, 23, 42, .08);--shadow-strong: 0 18px 40px -18px rgba(15, 23, 42, .25), 0 2px 8px -2px rgba(15, 23, 42, .15);--dot: rgba(15, 23, 42, .13);--chat-w: 320px;--panel-w: 372px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;overflow:hidden;background:var(--bg);font-family:Hanken Grotesk,system-ui,sans-serif;color:var(--ink);-webkit-font-smoothing:antialiased}.mono{font-family:IBM Plex Mono,monospace}.app{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;grid-template-columns:var(--chat-w) 1fr 0px;grid-template-rows:100%;height:100vh;transition:grid-template-columns .25s ease}.app.panel-open{grid-template-columns:var(--chat-w) 1fr var(--panel-w)}.app>.chat,.app>main,.app>.panel{min-height:0;min-width:0;height:100%;overflow:hidden}.workzone{width:100%;height:100%}.chat{background:var(--bg2);border-right:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}.chat-head{padding:14px 16px;border-bottom:1px solid var(--line)}.chat-head b{font-family:Fraunces,serif;font-size:15px}.chat-head span{font-size:11px;color:var(--muted);display:block;margin-top:2px}.chat-body{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:28px;text-align:center;color:var(--faint);font-size:13px;line-height:1.55}.chat-body .lock{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px 20px;max-width:100%;width:100%}.chat-body .lock b{color:var(--ink);display:block;margin-bottom:6px;font-family:Fraunces,serif;font-size:14px}.key-input{width:100%;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:9px;padding:9px 11px;font-family:IBM Plex Mono,monospace;font-size:12.5px;outline:none;margin:12px 0 10px}.key-input:focus{border-color:var(--accent)}.key-err{color:#b91c1c;font-size:12px;margin-top:8px;text-align:left;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;padding:6px 8px}.chat-msgs{flex:1;overflow-y:auto;padding:12px 14px;display:flex;flex-direction:column;gap:12px}.chat-empty{color:var(--faint);font-size:12.5px;line-height:1.55;text-align:center;padding:24px 8px}.chat-thinking{font-size:12px;color:var(--muted);font-style:italic;padding-left:6px}.msg{display:flex;flex-direction:column;gap:4px}.msg-role{font-size:10px;font-family:IBM Plex Mono,monospace;text-transform:uppercase;letter-spacing:.08em;color:var(--faint)}.msg-user .msg-role{color:var(--accent)}.msg-assistant .msg-role{color:var(--st-build)}.msg-body{font-size:13px;line-height:1.5;color:var(--ink);background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:9px 11px;white-space:pre-wrap;word-break:break-word}.msg-user .msg-body{background:var(--accent-soft);border-color:#d992294d}.msg-ops{font-size:10.5px;display:flex;gap:8px;margin-top:2px}.ops-ok{color:var(--st-done)}.ops-err{color:#e57676}.chat-anchor{display:flex;gap:6px;align-items:center;padding:8px 14px;border-top:1px solid var(--line);background:var(--panel);font-size:11.5px;color:var(--muted)}.chat-anchor b{color:var(--accent2);font-weight:600}.chat-attachments{padding:8px 14px 0;display:flex;flex-wrap:wrap;gap:6px}.attachment-chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:4px 10px;font-size:11.5px;color:var(--muted)}.attachment-chip button{background:none;border:none;color:var(--faint);cursor:pointer;font-size:14px;line-height:1;padding:0;margin-left:2px}.chat-input{display:flex;gap:7px;align-items:flex-end;padding:10px 12px 14px;border-top:1px solid var(--line)}.chat-input textarea{flex:1;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:9px 11px;font-size:13px;line-height:1.45;font-family:inherit;outline:none;resize:none;max-height:140px}.chat-input textarea:focus{border-color:var(--line2)}.btn-send{background:var(--accent);border:none;color:#0b0e15;border-radius:9px;width:34px;height:34px;cursor:pointer;font-size:18px;font-weight:700;flex:none;transition:.12s}.btn-send:hover:not(:disabled){background:var(--accent2)}.btn-send:disabled{opacity:.4;cursor:not-allowed}.workzone{position:relative;overflow:hidden}.viewport{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;cursor:grab;background-color:var(--bg);background-image:radial-gradient(var(--dot) 1.4px,transparent 1.4px);background-size:22px 22px;background-position:0 0}.viewport.grabbing{cursor:grabbing}.canvas{position:absolute;top:0;left:0;transform-origin:0 0}.edges{position:absolute;top:0;left:0;overflow:visible;pointer-events:none}.node{position:absolute;display:flex;align-items:center;gap:10px;background:#fff;border:1.5px solid rgba(15,23,42,.15);border-radius:12px;padding:0 14px;box-shadow:0 4px 12px -4px #0f172a26,0 1px 3px #0f172a14;cursor:pointer;overflow:hidden;transition:opacity .25s ease,border-color .15s,transform .12s,box-shadow .15s}.node:hover{border-color:#0f172a4d;transform:translateY(-2px);box-shadow:0 12px 24px -8px #0f172a40,0 2px 6px #0f172a1f}.node .bar{position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--st-todo)}.node.st-todo .bar{background:var(--st-todo)}.node.st-build .bar{background:var(--st-build)}.node.st-test .bar{background:var(--st-test)}.node.st-done .bar{background:var(--st-done)}.node .ncontent{flex:1;min-width:0}.node .ntitle{font-weight:600;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.node .nmeta{font-size:11px;color:var(--muted);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-height:0;opacity:0;transition:max-height .2s,opacity .2s}.node.showmeta .nmeta{max-height:16px;opacity:1}.node .ndot{width:10px;height:10px;border-radius:50%;flex:none;background:var(--st-todo);box-shadow:0 0 0 3px #94a3b826}.node.st-todo .ndot{background:#94a3b8;box-shadow:0 0 0 3px #94a3b82e}.node.st-build .ndot{background:#2563eb;box-shadow:0 0 12px #2563eb99,0 0 0 3px #2563eb26}.node.st-test .ndot{background:#9333ea;box-shadow:0 0 12px #9333ea99,0 0 0 3px #9333ea26}.node.st-done .ndot{background:#16a34a;box-shadow:0 0 12px #16a34a99,0 0 0 3px #16a34a26}.node .nchip{font-family:IBM Plex Mono,monospace;font-size:10px;color:var(--faint);border:1px solid var(--line);border-radius:20px;padding:1px 7px;flex:none}.node.lvl1{border:1.5px solid rgba(15,23,42,.12);box-shadow:0 8px 16px -6px #0f172a1f,0 2px 4px -1px #0f172a0f}.node.lvl1 .ntitle{font-size:16px;font-weight:600;color:#0f172a}.node.lvl1 .nmeta{font-size:12px}.node.lvl2{border-radius:10px;border:1px solid rgba(15,23,42,.1);box-shadow:0 4px 8px -3px #0f172a1a}.node.lvl2 .ntitle{font-size:13.5px;font-weight:500;color:#1e293b}.node.lvl0{flex-direction:column;align-items:flex-start;justify-content:center;gap:8px;padding:22px 26px;border:2.5px solid #d99229;border-radius:16px;background:linear-gradient(160deg,#fef3c7f2,#fff 60%);box-shadow:0 28px 56px -20px #d9922959,0 12px 24px -8px #0f172a2e,0 2px 6px #0f172a14,inset 0 1px #fffc}.node.lvl0 .bar{width:0}.node.lvl0:hover{border-color:#b87a18;transform:translateY(-3px);box-shadow:0 36px 64px -22px #d9922973,0 16px 32px -10px #0f172a40,0 4px 10px #0f172a1f}.node.lvl0 .pnum{font-family:IBM Plex Mono,monospace;font-size:12.5px;letter-spacing:.22em;color:#b87a18;font-weight:600;text-transform:uppercase}.node.lvl0 .ptitle{font-family:Fraunces,serif;font-weight:700;font-size:32px;line-height:1.05;letter-spacing:-.015em;color:#0f172a}.node.lvl0 .prow{display:flex;align-items:center;gap:12px;margin-top:6px;width:100%}.node.lvl0 .pbar{flex:1;height:7px;border-radius:8px;background:#0f172a14;overflow:hidden;max-width:180px}.node.lvl0 .pbar i{display:block;height:100%;background:linear-gradient(90deg,#d99229,#f59e0b);box-shadow:0 0 8px #d9922966;border-radius:8px;transition:width .4s ease}.node.lvl0 .ppct{font-family:IBM Plex Mono,monospace;font-size:12px;color:#475569;font-weight:500}.node.sel{border-color:var(--accent)!important;box-shadow:0 0 0 2px var(--accent-soft),0 0 20px #d9922940,var(--shadow)}.node.hidden{opacity:0;pointer-events:none}.node.dim{opacity:.28}.top{position:absolute;top:0;left:0;right:0;z-index:30;display:flex;align-items:center;gap:14px;padding:11px 16px;background:linear-gradient(180deg,rgba(246,247,249,.95),rgba(246,247,249,.7) 70%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);pointer-events:none;border-bottom:1px solid rgba(15,23,42,.05)}.top>*{pointer-events:auto}.brand{display:flex;flex-direction:column;line-height:1.1;margin-right:4px}.brand b{font-family:Fraunces,serif;font-weight:600;font-size:17px;letter-spacing:-.01em}.brand span{font-size:11px;color:var(--muted)}.search{position:relative}.search input{width:230px;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:9px 12px 9px 32px;font-size:13px;font-family:inherit;outline:none}.search input:focus{border-color:var(--line2)}.search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);opacity:.5}.sres{position:absolute;top:42px;left:0;width:300px;background:var(--panel2);border:1px solid var(--line2);border-radius:10px;box-shadow:var(--shadow);overflow:hidden;display:none;z-index:40;max-height:300px;overflow-y:auto}.sres.open{display:block}.sres div{padding:9px 12px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--line)}.sres div:hover{background:var(--accent-soft)}.sres div small{color:var(--muted);font-size:11px}.spacer{flex:1}.legend{display:flex;gap:13px;align-items:center;font-size:11px;color:var(--muted)}.legend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:-1px}.ctrls{display:flex;align-items:center;gap:6px}.btn-ic{background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:9px;width:34px;height:34px;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.12s}.btn-ic:hover{border-color:var(--line2);background:var(--panel2)}.btn-txt{background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:9px;height:34px;padding:0 13px;font-size:12.5px;font-family:inherit;cursor:pointer;transition:.12s}.btn-txt:hover{border-color:var(--line2)}.node.link-target{border-color:var(--accent2)!important;box-shadow:0 0 0 2px var(--accent),0 0 30px #e8b04b66,var(--shadow)!important}.node.connectable{cursor:crosshair!important}.node.connectable:hover{border-color:#2563eb!important;box-shadow:0 0 0 3px #2563eb26,0 8px 18px -6px #2563eb4d!important}.node.connect-source{border-color:#2563eb!important;box-shadow:0 0 0 3px #2563eb40,0 0 24px #2563eb73!important;animation:pulse-source 1.4s ease-in-out infinite}@keyframes pulse-source{0%,to{box-shadow:0 0 0 3px #2563eb40,0 0 24px #2563eb73}50%{box-shadow:0 0 0 6px #2563eb26,0 0 32px #2563eb99}}.connect-mode-bar{position:absolute;top:64px;left:50%;transform:translate(-50%);z-index:31;background:#2563eb;color:#fff;padding:8px 16px;border-radius:24px;font-size:13px;font-weight:600;display:flex;align-items:center;gap:16px;box-shadow:0 8px 24px -6px #2563eb80;animation:slide-down .2s ease}@keyframes slide-down{0%{opacity:0;transform:translate(-50%,-10px)}to{opacity:1;transform:translate(-50%)}}.connect-step{font-family:IBM Plex Mono,monospace;letter-spacing:.02em}.connect-cancel{background:#fff3;border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:14px;padding:3px 10px;font-family:inherit;font-size:12px;cursor:pointer}.connect-cancel:hover{background:#ffffff4d}.btn-txt.is-active{background:#2563eb;color:#fff;border-color:#2563eb}.btn-txt.is-active:hover{background:#1d4ed8}.btn-deepen{background:linear-gradient(135deg,#16a34a,#15803d);color:#fff;border:1px solid #15803d;font-weight:600}.btn-deepen:hover:not(:disabled){background:linear-gradient(135deg,#15803d,#14532d);border-color:#14532d}.btn-deepen:disabled{background:#94a3b8;border-color:#94a3b8;cursor:wait;opacity:.8}.btn-build{background:linear-gradient(135deg,#d99229,#b87a18);color:#fff;border:1.5px solid #b87a18;font-weight:700;box-shadow:0 4px 12px -3px #d9922966}.btn-build:hover:not(:disabled){background:linear-gradient(135deg,#b87a18,#92610e);border-color:#92610e;box-shadow:0 6px 16px -3px #d992298c}.btn-build:disabled{background:#94a3b8;border-color:#94a3b8;cursor:wait;box-shadow:none;opacity:.85}.btn-audit{background:linear-gradient(135deg,#9333ea,#7e22ce);color:#fff;border:1px solid #7e22ce;font-weight:600}.btn-audit:hover:not(:disabled){background:linear-gradient(135deg,#7e22ce,#6b21a8);border-color:#6b21a8}.btn-audit:disabled{background:#94a3b8;border-color:#94a3b8;cursor:wait;opacity:.8}.btn-prepare{background:linear-gradient(135deg,#0f172a,#1e293b);color:#fff;border:1.5px solid #0f172a;font-weight:700;box-shadow:0 4px 12px -3px #0f172a66}.btn-prepare:hover:not(:disabled){background:linear-gradient(135deg,#1e293b,#334155);border-color:#334155;box-shadow:0 6px 16px -3px #0f172a8c}.btn-prepare:disabled{background:#94a3b8;border-color:#94a3b8;cursor:wait;box-shadow:none;opacity:.85}.build-progress-panel{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:70;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 48px -16px #0f172a40,0 8px 16px -6px #0f172a26;padding:16px 22px;min-width:380px;max-width:540px;animation:build-pop .25s ease}@keyframes build-pop{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}.build-progress-head{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);margin-bottom:12px;text-transform:uppercase;letter-spacing:.06em}.build-progress-head b{color:var(--ink);font-weight:600}.build-progress-body{display:flex;gap:14px;align-items:flex-start}.build-emoji{font-size:32px;line-height:1;flex:none;filter:drop-shadow(0 4px 8px rgba(15,23,42,.1))}.build-stage{font-family:Fraunces,serif;font-weight:600;font-size:16px;color:var(--ink);margin-bottom:4px}.build-sub{font-size:13px;color:var(--muted);margin-bottom:8px}.build-sub b{color:var(--accent2);font-weight:600}.build-bar{height:6px;background:#0f172a14;border-radius:4px;overflow:hidden;position:relative;margin-top:4px}.build-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent2));border-radius:4px;transition:width .4s ease}.build-bar span{position:absolute;right:0;top:8px;font-size:10.5px;font-family:IBM Plex Mono,monospace;color:var(--muted)}.spinner-sm{width:11px;height:11px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;display:inline-block;vertical-align:-1px;margin-right:4px}.zlabel{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--muted);min-width:42px;text-align:center}.dock{position:absolute;left:16px;bottom:16px;z-index:30;background:#fffffff2;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:13px;padding:12px 15px;box-shadow:var(--shadow);width:248px}.dock .dh{font-size:11px;color:var(--muted);letter-spacing:.04em;text-transform:uppercase;margin-bottom:8px}.dock .dbar{height:8px;border-radius:6px;background:#0f172a14;overflow:hidden}.dock .dbar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--st-done),#4ade80);transition:width .4s}.dock .dnum{display:flex;justify-content:space-between;align-items:baseline;margin-top:8px}.dock .dnum b{font-family:Fraunces,serif;font-size:22px}.dock .dnum span{font-size:11px;color:var(--muted)}.dock-nodes{margin-top:8px;padding-top:8px;border-top:1px solid var(--line);font-size:10.5px;color:var(--muted);font-family:IBM Plex Mono,monospace;letter-spacing:.01em}.canvas-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:20;text-align:center;color:var(--muted);max-width:360px;pointer-events:none}.canvas-empty svg{color:var(--faint);opacity:.5;margin-bottom:16px}.canvas-empty h3{font-family:Fraunces,serif;font-weight:600;font-size:20px;color:var(--ink);margin:0 0 8px}.canvas-empty p{font-size:14px;line-height:1.55;margin:0}.canvas-empty b{color:var(--ink)}.panel{height:100%;background:var(--panel);border-left:1px solid var(--line);box-shadow:-8px 0 24px -10px #0f172a1f;display:flex;flex-direction:column;overflow:hidden}.ph{padding:18px 20px 14px;border-bottom:1px solid var(--line)}.ph .crumb{font-size:11px;color:var(--accent);font-family:IBM Plex Mono,monospace;margin-bottom:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ph .titlewrap{display:flex;align-items:flex-start;gap:8px}.ph .title{flex:1;background:transparent;border:none;color:var(--ink);font-family:Fraunces,serif;font-weight:600;font-size:21px;line-height:1.15;outline:none;border-bottom:1px solid transparent;padding:2px 0;width:100%}.ph input.title:focus{border-bottom-color:var(--line2)}.pclose{background:none;border:none;color:var(--muted);font-size:22px;cursor:pointer;line-height:1;padding:2px 4px}.pclose:hover{color:var(--ink)}.pbody{padding:18px 20px;overflow-y:auto;flex:1}.seclabel{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin:0 0 9px}.status-tag{display:inline-flex;align-items:center;gap:7px;background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:6px 10px;font-size:12px;color:var(--ink)}.status-tag i{width:8px;height:8px;border-radius:50%}.status-seg{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:22px}.status-seg button{background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:9px;padding:9px 8px;font-size:12px;font-family:inherit;cursor:pointer;display:flex;align-items:center;gap:7px;transition:.12s}.status-seg button i{width:9px;height:9px;border-radius:50%}.status-seg button:hover{border-color:var(--line2)}.status-seg button.on{color:var(--ink)}.status-seg button.on.s-todo{border-color:var(--st-todo);box-shadow:0 0 0 1px var(--st-todo)}.status-seg button.on.s-build{border-color:var(--st-build);box-shadow:0 0 0 1px var(--st-build)}.status-seg button.on.s-test{border-color:var(--st-test);box-shadow:0 0 0 1px var(--st-test)}.status-seg button.on.s-done{border-color:var(--st-done);box-shadow:0 0 0 1px var(--st-done)}textarea.notes,textarea.abstract-input{width:100%;background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:11px 12px;font-family:inherit;outline:none;resize:vertical;margin-bottom:22px}textarea.abstract-input{min-height:50px;font-size:13px;line-height:1.45}textarea.notes{min-height:140px;font-size:13.5px;line-height:1.55;font-family:IBM Plex Mono,monospace}textarea.notes:focus,textarea.abstract-input:focus{border-color:var(--line2)}.linkrow{display:flex;gap:7px;margin-bottom:22px}.linkrow select{flex:1;background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:9px;padding:8px 10px;font-size:12.5px;font-family:inherit;outline:none}.addbtn{background:var(--accent-soft);border:1px solid rgba(232,176,75,.35);color:var(--accent2);border-radius:9px;padding:9px 12px;font-size:12.5px;font-family:inherit;cursor:pointer;width:100%;margin-bottom:10px;transition:.12s}.addbtn:hover{background:#e8b04b33}.delbtn{background:#fef2f2;border:1px solid #fecaca;color:#dc2626;border-radius:9px;padding:9px 12px;font-size:12.5px;font-family:inherit;cursor:pointer;width:100%;transition:.12s}.delbtn:hover{background:#fee2e2;border-color:#ef4444}.deterministic-box{background:#4c9be80a;border:1px dashed rgba(76,155,232,.18);border-radius:10px;padding:10px 12px;font-family:IBM Plex Mono,monospace;font-size:11.5px;line-height:1.55;color:var(--muted);white-space:pre-wrap;margin-bottom:22px}.abstract-box{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:13px;line-height:1.5;color:var(--ink);margin-bottom:22px}.body-md{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:13.5px;line-height:1.55;color:var(--ink);margin-bottom:22px;white-space:pre-wrap;word-break:break-word;font-family:IBM Plex Mono,monospace}.chips{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:14px}.chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel2);border:1px solid var(--line);border-radius:20px;padding:6px 11px;font-size:12px;cursor:pointer;transition:.12s}.chip:hover{border-color:var(--accent);color:var(--accent2)}.chip i{width:7px;height:7px;border-radius:50%;background:var(--accent)}.chip.sub i{background:var(--st-todo)}.empty-hint{color:var(--faint);font-size:12px;line-height:1.5;margin-top:8px}.hint-badge{position:absolute;right:16px;bottom:16px;z-index:25;background:#fffffff2;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:11px;padding:10px 13px;max-width:260px;font-size:11.5px;color:var(--muted);line-height:1.5;box-shadow:var(--shadow)}.hint-badge b{color:var(--ink);font-weight:600}.center-msg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:14px}.proj-switcher{position:relative}.proj-switcher-btn{display:inline-flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:9px;height:34px;padding:0 10px 0 12px;font-size:13px;font-family:inherit;cursor:pointer;font-weight:500;transition:.12s;max-width:260px}.proj-switcher-btn:hover{border-color:var(--line2);background:var(--panel2)}.proj-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.proj-count{background:var(--accent-soft);color:var(--accent2);border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600;font-family:IBM Plex Mono,monospace}.proj-popover{position:absolute;top:calc(100% + 8px);left:0;z-index:40;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px -8px #0f172a40;width:320px;overflow:hidden;animation:pop-in .15s ease}@keyframes pop-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.proj-popover-head{padding:12px 14px;border-bottom:1px solid var(--line);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600}.proj-list{list-style:none;margin:0;padding:6px;max-height:320px;overflow-y:auto}.proj-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px;border-radius:8px;cursor:pointer;transition:background .1s}.proj-item:hover{background:var(--panel2)}.proj-item.is-current{background:var(--accent-soft)}.proj-item.is-current svg{color:var(--accent2)}.proj-item-main{flex:1;min-width:0}.proj-item-name{font-size:13.5px;font-weight:500;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-item-meta{font-size:11.5px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.proj-create-btn{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;border-top:1px solid var(--line);padding:11px 14px;font-family:inherit;font-size:13px;color:var(--accent2);cursor:pointer;font-weight:500;text-align:left;transition:background .1s}.proj-create-btn:hover{background:var(--accent-soft)}.proj-create-btn svg{color:var(--accent)}.proj-create-form{border-top:1px solid var(--line);padding:12px 14px;display:flex;flex-direction:column;gap:8px}.proj-create-form input{background:var(--panel);border:1.5px solid #e2e8f0;color:var(--ink);border-radius:8px;padding:9px 11px;font-family:inherit;font-size:13.5px;outline:none}.proj-create-form input:focus{border-color:#0f172a;box-shadow:0 0 0 4px #0f172a14}.proj-err{font-size:11.5px;color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;padding:6px 8px}.proj-create-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center}.btn-link{background:none;border:none;color:var(--muted);font-family:inherit;font-size:12.5px;cursor:pointer;padding:4px 8px}.btn-link:hover{color:var(--ink)}.btn-primary-sm{background:#0f172a;color:#fff;border:none;border-radius:8px;padding:8px 14px;font-family:inherit;font-size:12.5px;font-weight:600;cursor:pointer;transition:.12s}.btn-primary-sm:hover:not(:disabled){background:#1e293b}.btn-primary-sm:disabled{opacity:.5;cursor:not-allowed}.version-stamp{position:fixed;bottom:8px;right:12px;z-index:5;font-size:10.5px;color:#0f172a59;font-family:IBM Plex Mono,monospace;pointer-events:none;-webkit-user-select:none;user-select:none;letter-spacing:.02em}.build-banner{position:fixed;top:0;left:0;right:0;z-index:100;background:linear-gradient(90deg,#16a34a,#22c55e);color:#fff;font-family:IBM Plex Mono,monospace;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-align:center;padding:5px 12px;box-shadow:0 2px 8px -2px #16a34a4d;display:flex;align-items:center;justify-content:center;gap:12px}.build-banner .check{width:14px;height:14px;background:#fff3;border-radius:50%;display:inline-flex;align-items:center;justify-content:center}.build-banner button{background:#ffffff2e;border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:4px;padding:1px 8px;font-family:inherit;font-size:10.5px;cursor:pointer;font-weight:600}.build-banner button:hover{background:#ffffff4d}body.has-build-banner .auth-shell,body.has-build-banner .app{top:26px!important;height:calc(100vh - 26px)!important}.toast-bar{position:fixed;left:50%;bottom:28px;transform:translate(-50%);z-index:80;background:var(--panel2);border:1px solid var(--accent);color:var(--ink);padding:11px 18px;border-radius:10px;font-size:13px;box-shadow:var(--shadow),0 0 0 4px #e8b04b26;animation:toast-in .25s ease}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}.auth-shell{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;grid-template-columns:1fr 1fr;background:#fbfbfc}.auth-aside{background:radial-gradient(circle at 0% 100%,rgba(217,146,41,.08),transparent 50%),radial-gradient(circle at 100% 0%,rgba(15,23,42,.04),transparent 50%),linear-gradient(180deg,#fafbfc,#f4f5f7);border-right:1px solid rgba(15,23,42,.06);padding:56px;display:flex;align-items:stretch;position:relative;overflow:hidden}.auth-aside:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(rgba(15,23,42,.06) 1.2px,transparent 1.2px);background-size:28px 28px;mask-image:radial-gradient(ellipse at 100% 100%,black 0%,transparent 70%);-webkit-mask-image:radial-gradient(ellipse at 100% 100%,black 0%,transparent 70%);pointer-events:none}.auth-aside-inner{position:relative;display:flex;flex-direction:column;width:100%;max-width:480px;margin:0 auto}.auth-brand{display:flex;align-items:center;gap:14px;color:#0f172a}.auth-brand-mark{font-family:Fraunces,serif;font-weight:600;font-size:22px;letter-spacing:-.01em;color:#0f172a;line-height:1}.auth-brand-sub{font-size:12px;color:#64748b;margin-top:3px}.auth-pitch{margin-top:64px;margin-bottom:48px}.auth-pitch h1{font-family:Fraunces,serif;font-weight:600;font-size:48px;line-height:1.05;color:#0f172a;margin:0 0 18px;letter-spacing:-.02em}.auth-pitch p{font-size:15.5px;line-height:1.6;color:#475569;margin:0;max-width:380px}.auth-pitch em{color:#b87a18;font-style:normal;font-weight:500}.auth-features{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.auth-features li{display:flex;align-items:center;gap:10px;font-size:13.5px;color:#334155}.auth-features .dot{width:5px;height:5px;border-radius:50%;background:#d99229;flex:none}.auth-aside-footer{margin-top:auto;font-size:12px;color:#94a3b8;display:flex;gap:8px;align-items:center}.auth-aside-footer .dotsep{opacity:.6}.auth-main{display:flex;align-items:center;justify-content:center;padding:32px 56px;background:#fff}.auth-form-wrap{width:100%;max-width:380px}.auth-brand-mobile{display:none;align-items:center;gap:10px;margin-bottom:32px;color:#0f172a;font-family:Fraunces,serif;font-weight:600;font-size:20px}.auth-form-head{margin-bottom:28px}.auth-form-head h2{font-family:Fraunces,serif;font-weight:600;font-size:28px;line-height:1.15;letter-spacing:-.01em;color:#0f172a;margin:0 0 8px}.auth-form-head p{font-size:14px;color:#64748b;margin:0}.auth-form{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:12.5px;font-weight:500;color:#334155;letter-spacing:.01em;display:flex;justify-content:space-between;align-items:center}.field-hint{font-size:11.5px;font-weight:400;color:#94a3b8}.field input{background:#fff;border:1.5px solid #e2e8f0;color:#0f172a;border-radius:9px;padding:11px 14px;font-family:inherit;font-size:14px;outline:none;transition:border-color .15s,box-shadow .15s;-webkit-appearance:none}.field input:hover{border-color:#cbd5e1}.field input:focus{border-color:#0f172a;box-shadow:0 0 0 4px #0f172a14}.field input::placeholder{color:#cbd5e1}.input-with-action{position:relative;display:flex;align-items:center}.input-with-action input{width:100%;padding-right:42px}.input-action{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;color:#94a3b8;cursor:pointer;transition:.12s}.input-action:hover{color:#475569;background:#0f172a0a}.btn-primary-lg,.btn-primary-md{display:inline-flex;align-items:center;justify-content:center;gap:10px;background:#0f172a;color:#fff;border:none;border-radius:10px;font-family:inherit;font-weight:600;cursor:pointer;transition:background .15s,transform .08s,box-shadow .15s;letter-spacing:.01em}.btn-primary-lg{padding:13px 18px;font-size:14.5px;margin-top:6px}.btn-primary-md{padding:11px 16px;font-size:13.5px;width:100%}.btn-primary-lg:hover:not(:disabled),.btn-primary-md:hover:not(:disabled){background:#1e293b;box-shadow:0 6px 20px -8px #0f172a59}.btn-primary-lg:active:not(:disabled),.btn-primary-md:active:not(:disabled){transform:scale(.98)}.btn-primary-lg:disabled,.btn-primary-md:disabled{opacity:.55;cursor:not-allowed}.btn-primary-md.is-ok{background:#16a34a!important;color:#fff;opacity:1}.spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.auth-err{display:flex;align-items:center;gap:8px;background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;border-radius:8px;padding:10px 12px;font-size:13px}.auth-switch{text-align:center;font-size:13px;color:#64748b;margin-top:4px}.auth-switch button{background:none;border:none;color:#0f172a;font-weight:600;cursor:pointer;font-family:inherit;font-size:inherit;padding:0;margin-left:4px;text-decoration:underline;text-underline-offset:3px}.auth-trust{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:32px;padding-top:24px;border-top:1px solid #f1f5f9}.trust-pill{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:20px;padding:4px 10px;font-family:IBM Plex Mono,monospace}@media (max-width: 880px){.auth-shell{grid-template-columns:1fr}.auth-aside{display:none}.auth-brand-mobile{display:flex}.auth-main{padding:24px}}.keygate{flex:1;overflow-y:auto;padding:26px 22px 22px;display:flex;flex-direction:column;gap:18px}.keygate-head{text-align:left}.keygate-icon{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,#fef3c7,#fde68a);color:#b87a18;display:flex;align-items:center;justify-content:center;margin-bottom:14px;border:1px solid rgba(217,146,41,.25)}.keygate h2{font-family:Fraunces,serif;font-weight:600;font-size:22px;line-height:1.2;letter-spacing:-.01em;color:#0f172a;margin:0 0 6px}.keygate-head p{font-size:13.5px;line-height:1.5;color:#475569;margin:0}.keygate-field{display:flex;flex-direction:column;gap:6px}.keygate-field label{font-size:12px;font-weight:500;color:#334155}.keygate-input input{background:#fff;border:1.5px solid #e2e8f0;color:#0f172a;border-radius:9px;padding:11px 14px;font-family:IBM Plex Mono,monospace;font-size:13px;outline:none;transition:border-color .15s,box-shadow .15s}.keygate-input input:hover{border-color:#cbd5e1}.keygate-input input:focus{border-color:#0f172a;box-shadow:0 0 0 4px #0f172a14}.keygate-input input::placeholder{color:#cbd5e1}.keygate-input input:disabled{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.keygate-err{display:flex;align-items:flex-start;gap:6px;background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;border-radius:8px;padding:9px 11px;font-size:12.5px;line-height:1.4}.keygate-err svg{flex:none;margin-top:2px}.keygate-trust{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:14px 16px;margin-top:4px}.trust-title{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.keygate-trust ul{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.keygate-trust li{display:flex;align-items:flex-start;gap:8px;font-size:12px;line-height:1.45;color:#334155}.keygate-trust li b{color:#0f172a;font-weight:600}.check-icon{color:#16a34a;flex:none;margin-top:1px}.keygate-help{display:inline-flex;align-items:center;gap:5px;align-self:flex-start;color:#64748b;font-size:12px;text-decoration:none;padding:4px 0;border-bottom:1px solid transparent;transition:.12s}.keygate-help:hover{color:#0f172a;border-bottom-color:currentColor}.user-chip{display:flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line);border-radius:9px;height:34px;padding:0 10px 0 4px;font-size:12px;color:var(--muted)}.user-chip b{color:var(--ink);font-weight:500}.user-avatar{width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:600;font-size:12px}.btn-logout{background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:9px;height:34px;padding:0 14px;font-size:12.5px;font-family:inherit;cursor:pointer;transition:.12s;font-weight:500}.btn-logout:hover{background:#fee2e2;border-color:#ef4444;color:#dc2626}.presence{font-size:11px;color:var(--muted);margin-right:6px;display:inline-flex;align-items:center;gap:4px}.presence i{width:7px;height:7px;border-radius:50%;background:var(--st-done);box-shadow:0 0 8px var(--st-done)}.presence.offline i{background:var(--st-todo);box-shadow:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;z-index:90;display:flex;align-items:center;justify-content:center;padding:24px}.modal-card{background:var(--panel);border:1px solid var(--line2);border-radius:14px;width:min(720px,100%);max-height:80vh;display:flex;flex-direction:column;box-shadow:var(--shadow)}.modal-head{padding:14px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.modal-head b{font-family:Fraunces,serif;font-size:16px}.modal-body{padding:14px 20px;overflow-y:auto;flex:1}.rev-row{padding:12px 0;border-bottom:1px solid var(--line)}.rev-row:last-child{border:none}.rev-meta{font-size:11.5px;color:var(--muted);display:flex;gap:10px;margin-bottom:6px}.rev-title{font-weight:500;color:var(--ink)}.rev-body{margin-top:6px;font-size:12.5px;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px 10px;max-height:120px;overflow-y:auto;font-family:IBM Plex Mono,monospace;white-space:pre-wrap}.export-modal{width:min(900px,100%);max-height:88vh}.export-tabs{display:flex;gap:0;border-bottom:1px solid var(--line);background:var(--bg2)}.export-tab{flex:1;background:none;border:none;color:var(--muted);padding:12px 16px;font-family:inherit;font-size:13px;cursor:pointer;border-bottom:2px solid transparent;transition:.12s}.export-tab small{color:var(--faint);margin-left:5px;font-size:11px}.export-tab:hover{color:var(--ink);background:var(--panel)}.export-tab.active{color:var(--accent2);border-bottom-color:var(--accent);background:var(--panel)}.export-body{flex:1;min-height:380px;max-height:60vh;padding:14px 16px;display:flex;overflow:hidden}.export-textarea{flex:1;width:100%;background:var(--bg);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:12px 14px;font-family:IBM Plex Mono,monospace;font-size:12px;line-height:1.55;outline:none;resize:none}.export-status{color:var(--muted);padding:24px;text-align:center;width:100%}.export-footer{padding:12px 16px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.export-meta{color:var(--muted);font-size:12px}.export-meta b{color:var(--ink);font-weight:500}.btn-txt.btn-primary{background:var(--accent);color:#0b0e15;border-color:var(--accent);font-weight:600}.btn-txt.btn-primary:hover{background:var(--accent2)}.export-hint{padding:10px 16px;background:var(--bg2);border-top:1px solid var(--line);font-size:11.5px;color:var(--muted);border-radius:0 0 14px 14px;line-height:1.5}.export-hint b{color:var(--ink);font-weight:500}.history-btn{background:var(--panel2);border:1px solid var(--line);color:var(--muted);border-radius:9px;padding:7px 12px;font-size:12px;font-family:inherit;cursor:pointer;width:100%;margin-bottom:10px;transition:.12s}.history-btn:hover{border-color:var(--line2);color:var(--ink)}@media (max-width: 880px){.app{grid-template-columns:0px 1fr 0px}.chat,.legend,.dock{display:none}.search input{width:140px}}
