/* ==== AgentForge — dark futuristic theme ==== */
:root{
  --bg:#07090f;
  --bg2:#0b0e17;
  --panel:#0e1220;
  --panel2:#131829;
  --line:#1e2440;
  --txt:#e7ecf8;
  --dim:#8b93b0;
  --acc:#6c5ce7;
  --acc2:#00e5ff;
  --good:#2be6a8;
  --warn:#ffb020;
  --danger:#ff5470;
  --glow:0 0 24px rgba(108,92,231,.35);
  --radius:12px;
  font-size:15px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:"Space Grotesk",system-ui,sans-serif;
  background:
    radial-gradient(1200px 600px at 80% -10%, rgba(108,92,231,.16), transparent 60%),
    radial-gradient(900px 500px at 0% 110%, rgba(0,229,255,.10), transparent 60%),
    var(--bg);
  color:var(--txt);
  overflow:hidden;
}
button{font-family:inherit;cursor:pointer}
input,select,textarea{
  font-family:inherit;color:var(--txt);
  background:var(--bg2);border:1px solid var(--line);
  border-radius:8px;padding:.55rem .7rem;width:100%;
  outline:none;transition:border .15s;
}
input:focus,select:focus,textarea:focus{border-color:var(--acc)}
.hidden{display:none!important}

/* ===== topbar ===== */
.topbar{
  display:flex;align-items:center;gap:1.2rem;
  height:56px;padding:0 1rem;
  background:rgba(11,14,23,.85);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
  position:relative;z-index:20;
}
.brand{display:flex;align-items:center;gap:.5rem;font-weight:700;font-size:1.05rem}
.brand-logo{
  width:32px;height:32px;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--acc),var(--acc2));
  border-radius:9px;font-size:1.1rem;color:#fff;box-shadow:var(--glow);
}
.brand-name em{font-style:normal;background:linear-gradient(90deg,var(--acc2),var(--acc));-webkit-background-clip:text;background-clip:text;color:transparent}
.topnav{display:flex;gap:.25rem;margin-left:.5rem}
.nav-btn{
  background:none;border:none;color:var(--dim);
  padding:.5rem .85rem;border-radius:8px;font-size:.92rem;font-weight:500;
}
.nav-btn:hover{color:var(--txt);background:var(--panel2)}
.nav-btn.active{color:var(--txt);background:var(--panel2);box-shadow:inset 0 0 0 1px var(--line)}
.topbar-actions{margin-left:auto;display:flex;gap:.5rem}
.btn{
  border:1px solid var(--line);background:var(--panel2);color:var(--txt);
  padding:.5rem .9rem;border-radius:9px;font-size:.9rem;font-weight:600;
  transition:transform .12s, box-shadow .12s;
}
.btn:hover{transform:translateY(-1px)}
.btn.primary{
  background:linear-gradient(135deg,var(--acc),#8e7bff);
  border-color:transparent;box-shadow:var(--glow);
}
.btn.ghost:hover{border-color:var(--acc)}

/* ===== layout ===== */
.view{display:none;height:calc(100vh - 56px)}
.view.active{display:flex}
#view-builder.active{display:grid;grid-template-columns:280px 1fr 320px}
.panel{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.right-panel{border-right:none;border-left:1px solid var(--line)}
.panel-head{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1rem .4rem}
.panel-head h2{font-size:.95rem;letter-spacing:.03em}
.pill{font-size:.72rem;color:var(--acc2);border:1px solid var(--line);border-radius:99px;padding:.1rem .5rem}
.search-wrap{padding:.4rem 1rem}
.cat-filters{display:flex;flex-wrap:wrap;gap:.35rem;padding:.3rem 1rem .6rem}
.cat-chip{
  font-size:.72rem;padding:.22rem .6rem;border-radius:99px;
  border:1px solid var(--line);background:none;color:var(--dim);
}
.cat-chip.active{color:#fff;background:var(--acc);border-color:var(--acc)}
.skill-list{overflow-y:auto;padding:.3rem .75rem 1rem;flex:1}
.skill-card{
  display:flex;gap:.6rem;align-items:flex-start;
  background:var(--panel2);border:1px solid var(--line);border-radius:var(--radius);
  padding:.6rem .7rem;margin-bottom:.5rem;cursor:grab;
  transition:border .15s, transform .12s;
}
.skill-card:hover{border-color:var(--acc);transform:translateX(2px)}
.skill-card:active{cursor:grabbing}
.skill-emoji{font-size:1.25rem;line-height:1.4}
.skill-card b{font-size:.88rem;display:block}
.skill-card small{color:var(--dim);font-size:.75rem;line-height:1.35;display:block;margin-top:.1rem}

/* ===== canvas ===== */
.canvas-wrap{display:flex;flex-direction:column;min-width:0;background:var(--bg2)}
.canvas-toolbar{
  display:flex;align-items:center;justify-content:space-between;
  padding:.45rem .9rem;border-bottom:1px solid var(--line);gap:1rem;
}
.canvas-hint{font-size:.75rem;color:var(--dim)}
.canvas-tools{display:flex;gap:.4rem}
.tool-btn{
  background:var(--panel2);border:1px solid var(--line);color:var(--dim);
  font-size:.78rem;padding:.3rem .6rem;border-radius:7px;
}
.tool-btn:hover{color:var(--txt);border-color:var(--acc)}
.canvas{
  position:relative;flex:1;overflow:hidden;
  background-image:
    radial-gradient(circle, rgba(120,130,180,.13) 1px, transparent 1px);
  background-size:26px 26px;
}
#wires{position:absolute;inset:0;pointer-events:none}
.wire{stroke:url(#wgrad);stroke-width:2.4;fill:none;filter:drop-shadow(0 0 5px rgba(0,229,255,.45))}
.wire-temp{stroke:var(--acc2);stroke-dasharray:6 5;stroke-width:2;fill:none;opacity:.8}
.canvas-empty{
  position:absolute;inset:0;display:grid;place-content:center;text-align:center;
  color:var(--dim);pointer-events:none;gap:.3rem;
}
.empty-glyph{font-size:3.4rem;opacity:.35;background:linear-gradient(135deg,var(--acc),var(--acc2));-webkit-background-clip:text;background-clip:text;color:transparent}
.empty-sub{font-size:.8rem;opacity:.7}

.node{
  position:absolute;width:190px;
  background:linear-gradient(180deg,var(--panel2),var(--panel));
  border:1px solid var(--line);border-radius:14px;
  padding:.65rem .75rem;user-select:none;cursor:grab;z-index:5;
  box-shadow:0 6px 24px rgba(0,0,0,.45);
  transition:border .12s, box-shadow .12s;
}
.node:hover{border-color:#3a4270}
.node.selected{border-color:var(--acc);box-shadow:var(--glow)}
.node-head{display:flex;align-items:center;gap:.45rem;font-weight:600;font-size:.86rem}
.node-cat{font-size:.68rem;color:var(--dim);margin-top:.2rem}
.node-del{
  position:absolute;top:6px;right:8px;background:none;border:none;color:var(--dim);
  font-size:.8rem;opacity:0;transition:opacity .12s;
}
.node:hover .node-del{opacity:1}
.node-del:hover{color:var(--danger)}
.port{
  position:absolute;width:14px;height:14px;border-radius:50%;
  background:var(--bg);border:2px solid var(--acc2);
  top:50%;transform:translateY(-50%);cursor:crosshair;z-index:6;
}
.port.out{right:-8px}
.port.in{left:-8px;border-color:var(--acc)}
.port:hover{box-shadow:0 0 10px var(--acc2)}

/* ===== right panel ===== */
.panel-tabs{display:flex;border-bottom:1px solid var(--line)}
.ptab{
  flex:1;background:none;border:none;color:var(--dim);
  padding:.7rem;font-size:.85rem;font-weight:600;border-bottom:2px solid transparent;
}
.ptab.active{color:var(--txt);border-bottom-color:var(--acc)}
.ptab-body{display:none;padding:1rem;overflow-y:auto;flex:1}
.ptab-body.active{display:block}
.field{display:block;margin-bottom:.9rem}
.field>span{display:block;font-size:.78rem;color:var(--dim);margin-bottom:.35rem;letter-spacing:.02em}
.perm-grid{display:grid;grid-template-columns:1fr 1fr;gap:.4rem}
.perm{
  display:flex;gap:.4rem;align-items:center;font-size:.8rem;
  background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:.4rem .5rem;
}
.perm input{width:auto}
.config-empty{color:var(--dim);font-size:.85rem;padding:1rem .2rem;text-align:center}
.cfg-head{display:flex;gap:.5rem;align-items:center;font-weight:700;margin-bottom:.8rem}

/* ===== marketplace / templates / agents ===== */
#view-marketplace,#view-templates,#view-myagents{
  flex-direction:column;overflow-y:auto;padding:1.6rem 2rem;gap:1.2rem;
}
.page-head h1{
  font-size:1.6rem;
  background:linear-gradient(90deg,var(--txt),var(--acc2));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.page-head p{color:var(--dim);margin-top:.25rem}
.market-search{max-width:420px;margin-top:.9rem}
.market-grid,.template-grid,.agents-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:1rem;
}
.mcard,.tcard,.acard{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:1rem;display:flex;flex-direction:column;gap:.5rem;
  transition:border .15s, transform .12s;
}
.mcard:hover,.tcard:hover,.acard:hover{border-color:var(--acc);transform:translateY(-2px)}
.mcard-top{display:flex;align-items:center;gap:.6rem}
.mcard-top .skill-emoji{font-size:1.5rem}
.mcard b{font-size:.95rem}
.mcard .dev{font-size:.72rem;color:var(--dim)}
.mcard p{font-size:.8rem;color:var(--dim);line-height:1.45;flex:1}
.mcard-meta{display:flex;align-items:center;gap:.7rem;font-size:.75rem;color:var(--dim)}
.stars{color:var(--warn)}
.mcard-foot{display:flex;gap:.5rem;margin-top:.3rem}
.mini-btn{
  flex:1;font-size:.78rem;padding:.42rem;border-radius:8px;font-weight:600;
  border:1px solid var(--line);background:var(--panel2);color:var(--txt);
}
.mini-btn.install{background:linear-gradient(135deg,var(--acc),#8e7bff);border-color:transparent}
.mini-btn.installed{color:var(--good);border-color:var(--good);background:none;cursor:default}
.tcard .t-emoji{font-size:1.8rem}
.tcard h3{font-size:1rem}
.tcard p{font-size:.8rem;color:var(--dim);line-height:1.45;flex:1}
.tcard .t-skills{display:flex;flex-wrap:wrap;gap:.3rem}
.t-skill-chip{font-size:.68rem;border:1px solid var(--line);border-radius:99px;padding:.15rem .5rem;color:var(--acc2)}
.acard h3{font-size:.98rem}
.acard .a-status{font-size:.7rem;padding:.15rem .55rem;border-radius:99px;width:fit-content}
.a-status.draft{border:1px solid var(--warn);color:var(--warn)}
.a-status.published{border:1px solid var(--good);color:var(--good)}
.acard .a-meta{font-size:.76rem;color:var(--dim)}
.acard-foot{display:flex;gap:.4rem;flex-wrap:wrap}
.empty-msg{color:var(--dim);font-size:.9rem}

/* ===== chat view ===== */
#view-chat.active{display:flex;flex-direction:column;padding:1.4rem 2rem;overflow:hidden}
.chat-shell{display:flex;flex-direction:column;flex:1;min-height:0;max-width:900px;width:100%;margin:0 auto;gap:.9rem}
.chat-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.chat-head h1{font-size:1.5rem;background:linear-gradient(90deg,var(--txt),var(--acc2));-webkit-background-clip:text;background-clip:text;color:transparent}
.chat-head p{color:var(--dim);margin-top:.25rem;font-size:.85rem;max-width:520px}
.chat-agent-select{max-width:260px}
.chat-agentbar{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;font-size:.75rem;color:var(--dim);min-height:1.2rem}
.chat-agentbar .chip{border:1px solid var(--line);border-radius:99px;padding:.15rem .55rem;color:var(--acc2)}
.chat-window{
  flex:1;min-height:0;overflow-y:auto;
  background:var(--bg2);border:1px solid var(--line);border-radius:14px;
  padding:1.1rem;display:flex;flex-direction:column;gap:.7rem;
}
.chat-empty{margin:auto;text-align:center;color:var(--dim);font-size:.9rem;max-width:340px}
.chat-empty .empty-glyph{font-size:2.6rem;margin-bottom:.4rem}
.bubble{max-width:78%;padding:.6rem .85rem;border-radius:14px;font-size:.88rem;line-height:1.5;white-space:pre-wrap}
.bubble.user{align-self:flex-end;background:linear-gradient(135deg,var(--acc),#8e7bff);color:#fff;border-bottom-right-radius:4px}
.bubble.agent{align-self:flex-start;background:var(--panel2);border:1px solid var(--line);border-bottom-left-radius:4px}
.bubble.trace{align-self:flex-start;background:none;border:1px dashed var(--line);color:var(--good);font-family:"JetBrains Mono",monospace;font-size:.72rem;max-width:88%}
.bubble .who{display:block;font-size:.66rem;color:var(--dim);margin-bottom:.2rem;letter-spacing:.03em}
.chat-input-row{display:flex;gap:.5rem}
.chat-input-row #chatInput{flex:1}
.typing{display:inline-flex;gap:3px}
.typing span{width:6px;height:6px;border-radius:50%;background:var(--dim);animation:blink 1.2s infinite}
.typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,60%,100%{opacity:.25}30%{opacity:1}}

/* ===== modals ===== */
.modal-backdrop{
  position:fixed;inset:0;background:rgba(4,6,12,.7);backdrop-filter:blur(4px);
  display:grid;place-items:center;z-index:50;
}
.modal{
  width:min(560px,92vw);max-height:80vh;display:flex;flex-direction:column;
  background:var(--panel);border:1px solid var(--line);border-radius:16px;
  box-shadow:0 20px 60px rgba(0,0,0,.6);
}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1.1rem;border-bottom:1px solid var(--line)}
.modal-close{background:none;border:none;color:var(--dim);font-size:1rem}
.modal-close:hover{color:var(--txt)}
.modal-body{padding:1rem 1.1rem;overflow-y:auto;font-size:.87rem;line-height:1.55;color:var(--dim)}
.test-log{
  flex:1;overflow-y:auto;padding:1rem 1.1rem;min-height:220px;max-height:46vh;
  font-family:"JetBrains Mono",monospace;font-size:.78rem;line-height:1.6;
}
.tl-user{color:var(--acc2)}
.tl-agent{color:var(--txt)}
.tl-sys{color:var(--dim);font-style:italic}
.tl-skill{color:var(--good)}
.modal-foot{display:flex;gap:.5rem;padding: .8rem 1.1rem;border-top:1px solid var(--line)}

/* ===== toast ===== */
.toast{
  position:fixed;bottom:24px;left:50%;transform:translate(-50%,80px);
  background:var(--panel2);border:1px solid var(--acc);color:var(--txt);
  padding:.6rem 1.1rem;border-radius:10px;font-size:.85rem;z-index:60;
  transition:transform .25s ease;box-shadow:var(--glow);
}
.toast.show{transform:translate(-50%,0)}

/* scrollbars */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#232b4d;border-radius:9px}
::-webkit-scrollbar-track{background:transparent}

@media (max-width:1080px){
  #view-builder.active{grid-template-columns:230px 1fr 270px}
}
@media (max-width:860px){
  #view-builder.active{display:flex;flex-direction:column;overflow-y:auto}
  .panel{border:none;border-bottom:1px solid var(--line)}
  .canvas{min-height:420px}
}
