:root{
  --bg:#06070a; --bg2:#0b0d12; --bg3:#12151d; --line:#1d2230;
  --tx:#e8ecf3; --tx2:#8b93a7; --tx3:#5a6275;
  --ac:#00E676; --ac-dim:#00e67622; --blue:#4FC3F7; --warn:#FFB74D; --danger:#ff5470;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{background:var(--bg);color:var(--tx);font:14px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;overflow:hidden}
#app{height:100vh;display:flex;flex-direction:column}
a{color:var(--ac);text-decoration:none}
button{cursor:pointer;font:inherit}
input,select,textarea{font:inherit;color:var(--tx);background:var(--bg3);border:1px solid var(--line);border-radius:8px;padding:8px 10px;outline:none;width:100%}
input:focus,select:focus,textarea:focus{border-color:var(--ac)}
textarea{resize:vertical;min-height:90px;font-family:var(--mono);font-size:12.5px}
label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--tx2);margin:12px 0 4px}
.btn{background:var(--bg3);border:1px solid var(--line);color:var(--tx);border-radius:8px;padding:8px 14px;font-size:13px;transition:.15s}
.btn:hover{border-color:var(--ac);color:var(--ac)}
.btn.primary{background:var(--ac);border-color:var(--ac);color:#04150b;font-weight:600}
.btn.primary:hover{filter:brightness(1.1)}
.btn.danger{color:var(--danger);border-color:#3a2030}
.btn.danger:hover{background:#2a1420;border-color:var(--danger)}
.btn.sm{padding:4px 9px;font-size:12px;border-radius:6px}
.btn.active{background:var(--ac-dim);border-color:var(--ac);color:var(--ac)}
.muted{color:var(--tx2)} .tiny{font-size:11.5px}
.mono{font-family:var(--mono);font-size:12px}

/* ---------- topbar ---------- */
.topbar{display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--bg2);border-bottom:1px solid var(--line);z-index:20;flex-wrap:wrap}
.logo{display:flex;align-items:center;gap:8px;font-weight:700;letter-spacing:.02em;white-space:nowrap}
.logo .q{color:var(--ac)} .logo small{color:var(--tx3);font-weight:400}
.topbar .spacer{flex:1}
.navlink{color:var(--tx2);padding:6px 10px;border-radius:6px;font-size:13px}
.navlink:hover,.navlink.active{color:var(--ac);background:var(--ac-dim)}

/* ---------- login ---------- */
.center-wrap{flex:1;display:flex;align-items:center;justify-content:center;background:radial-gradient(1200px 600px at 70% -10%,#0e2018 0%,var(--bg) 55%)}
.card{background:var(--bg2);border:1px solid var(--line);border-radius:16px;padding:32px;width:380px;max-width:92vw}
.card h1{font-size:22px;margin-bottom:4px}
.card .sub{color:var(--tx2);font-size:13px;margin-bottom:18px}
.err{background:#2a1420;border:1px solid #52243a;color:#ff8fa8;padding:8px 12px;border-radius:8px;font-size:13px;margin-top:12px}

/* ---------- vaults ---------- */
.page{flex:1;overflow-y:auto;padding:28px;max-width:1100px;margin:0 auto;width:100%}
.page h2{font-size:20px;margin-bottom:4px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-top:18px}
.vault-card{background:var(--bg2);border:1px solid var(--line);border-radius:14px;padding:18px;cursor:pointer;transition:.15s;position:relative}
.vault-card:hover{border-color:var(--ac);transform:translateY(-2px)}
.vault-card h3{font-size:16px;margin-bottom:4px}
.vault-card .stats{display:flex;gap:14px;margin-top:12px;color:var(--tx2);font-size:12px}
.vault-card .stats b{color:var(--ac)}
.vault-new{border-style:dashed;display:flex;align-items:center;justify-content:center;min-height:120px;color:var(--tx2);font-size:14px}
.vault-new:hover{color:var(--ac)}

/* ---------- graph view ---------- */
.graph-wrap{flex:1;position:relative;overflow:hidden;background:var(--bg)}
#gcanvas{position:absolute;inset:0;cursor:grab}
#gcanvas.dragging{cursor:grabbing} #gcanvas.connecting{cursor:crosshair}
.gtoolbar{position:absolute;top:12px;left:12px;display:flex;gap:8px;z-index:10;flex-wrap:wrap;max-width:calc(100% - 380px)}
.gtoolbar .btn{background:#0b0d12ee;backdrop-filter:blur(6px)}
.gsearch{position:relative}
.gsearch input{width:220px;background:#0b0d12ee;backdrop-filter:blur(6px)}
.legend{position:absolute;left:12px;bottom:12px;background:#0b0d12ee;border:1px solid var(--line);border-radius:10px;padding:10px 12px;z-index:10;max-height:40vh;overflow-y:auto;backdrop-filter:blur(6px)}
.legend .lg-item{display:flex;align-items:center;gap:8px;padding:3px 0;cursor:pointer;font-size:12.5px;color:var(--tx2);user-select:none}
.legend .lg-item.off{opacity:.35;text-decoration:line-through}
.legend .dot{width:10px;height:10px;border-radius:50%;flex:none}
.gstats{position:absolute;right:12px;bottom:12px;color:var(--tx3);font-size:11px;z-index:5;font-family:var(--mono)}

/* ---------- side panel ---------- */
.side{position:absolute;top:0;right:0;bottom:0;width:360px;background:#0b0d12f5;border-left:1px solid var(--line);z-index:15;display:flex;flex-direction:column;backdrop-filter:blur(8px);transform:translateX(100%);transition:transform .2s}
.side.open{transform:none}
.side-head{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--line)}
.side-head h3{font-size:15px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-body{flex:1;overflow-y:auto;padding:14px 16px}
.side .close{background:none;border:none;color:var(--tx2);font-size:18px}
.side .close:hover{color:var(--tx)}
.chip{display:inline-block;background:var(--bg3);border:1px solid var(--line);border-radius:20px;padding:2px 10px;font-size:11.5px;color:var(--tx2);margin:0 4px 4px 0}
.chip.type{color:var(--ac);border-color:var(--ac-dim)}
.edge-row{display:flex;align-items:center;gap:6px;padding:5px 8px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;font-size:12.5px}
.edge-row .et{color:var(--warn);font-family:var(--mono);font-size:11px}
.edge-row .en{flex:1;color:var(--tx);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.edge-row .en:hover{color:var(--ac)}
.edge-row .x{background:none;border:none;color:var(--tx3);font-size:14px;padding:0 2px}
.edge-row .x:hover{color:var(--danger)}
.md{font-size:13px;line-height:1.6;color:#c9d1e0}
.md h1,.md h2,.md h3{margin:12px 0 6px;color:var(--tx)} .md h1{font-size:16px}.md h2{font-size:15px}.md h3{font-size:14px}
.md p{margin:6px 0} .md ul{margin:6px 0 6px 18px}
.md code{background:var(--bg3);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-family:var(--mono);font-size:11.5px}
.md pre{background:var(--bg3);border:1px solid var(--line);border-radius:8px;padding:10px;overflow-x:auto;margin:8px 0}
.md pre code{border:none;background:none;padding:0}
.md .wikilink{color:var(--ac);cursor:pointer;border-bottom:1px dashed var(--ac)}
.ck-item{display:flex;align-items:center;gap:7px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;font-size:12.5px}
.ck-item.resuelto .ck-text{color:var(--tx3);text-decoration:line-through}
.ck-item .ck-ico{flex:none}
.ck-item .ck-text{flex:1;line-height:1.35}
.ck-state{background:var(--bg3);border:1px solid var(--line);border-radius:20px;padding:2px 9px;font-size:10.5px;color:var(--tx2);white-space:nowrap}
.ck-item[data-estado="abierto"] .ck-state{color:var(--danger);border-color:#52243a}
.ck-item[data-estado="en_proceso"] .ck-state{color:var(--blue);border-color:#1c3a4d}
.ck-item[data-estado="resuelto"] .ck-state{color:var(--ac);border-color:var(--ac-dim)}
.ck-del{background:none;border:none;color:var(--tx3);font-size:13px;padding:0 2px}
.ck-del:hover{color:var(--danger)}
.ck-add{display:flex;gap:6px;margin-top:6px}
.impact-level{margin:8px 0}
.impact-level .lvl{font-size:11px;color:var(--tx3);text-transform:uppercase;letter-spacing:.06em}

/* ---------- tables ---------- */
table{width:100%;border-collapse:collapse;margin-top:14px;font-size:13px}
th{color:var(--tx2);text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.06em;padding:8px 10px;border-bottom:1px solid var(--line)}
td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
tr:hover td{background:#0e111a}

/* ---------- modal / toast ---------- */
.modal-bg{position:fixed;inset:0;background:#000a;display:flex;align-items:center;justify-content:center;z-index:100;backdrop-filter:blur(3px)}
.modal{background:var(--bg2);border:1px solid var(--line);border-radius:14px;padding:22px;width:420px;max-width:94vw;max-height:88vh;overflow-y:auto}
.modal h3{margin-bottom:6px}
.modal .row{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}
#toasts{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:var(--bg3);border:1px solid var(--ac);color:var(--tx);border-radius:10px;padding:10px 18px;font-size:13px;animation:pop .2s;box-shadow:0 8px 30px #000a}
.toast.error{border-color:var(--danger)}
@keyframes pop{from{opacity:0;transform:translateY(8px)}to{opacity:1}}
.copybox{display:flex;gap:8px;align-items:center;background:var(--bg3);border:1px solid var(--ac);border-radius:8px;padding:10px;font-family:var(--mono);font-size:12px;word-break:break-all;margin:10px 0}
.help-code{background:var(--bg3);border:1px solid var(--line);border-radius:10px;padding:14px;font-family:var(--mono);font-size:12px;overflow-x:auto;white-space:pre;margin:10px 0;line-height:1.7}
.pill{font-size:10.5px;padding:2px 8px;border-radius:20px;border:1px solid var(--line);color:var(--tx2)}
.pill.ok{color:var(--ac);border-color:var(--ac-dim);background:var(--ac-dim)}
.pill.bad{color:var(--danger);border-color:#52243a}
@media (max-width:760px){
  .side{width:100vw}
  .gtoolbar{max-width:calc(100% - 24px)}
  .gsearch input{width:150px}
}
