/* Dependency Tree Viewer — Styles */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{
  --primary:#10B981;--primary-hover:#34D399;--primary-glow:rgba(16,185,129,0.15);
  --accent:#6366F1;--warning:#F59E0B;--error:#EF4444;
  --bg:#0B0E11;--bg-surface:#141921;--bg-elevated:#1C2333;
  --border:rgba(16,185,129,0.1);--border-focus:rgba(16,185,129,0.4);
  --text:#E2E8F0;--text-muted:#94A3B8;--text-dim:#475569;
  --radius:10px;--radius-sm:6px;--transition:200ms ease;
  --sans:'Inter',system-ui,sans-serif;--mono:'JetBrains Mono',monospace;
}
html{font-size:16px;-webkit-font-smoothing:antialiased}
body{font-family:var(--sans);background:var(--bg);color:var(--text);min-height:100vh;display:flex;flex-direction:column;line-height:1.5}

.header{background:var(--bg-surface);border-bottom:1px solid var(--border);padding:0.75rem 1.5rem}
.header-inner{max-width:1100px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.logo{font-size:1.1rem;font-weight:700}
.header-right{display:flex;align-items:center;gap:0.5rem}
.search-input{font-family:var(--sans);font-size:0.82rem;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);padding:0.45rem 0.75rem;width:180px;transition:border-color var(--transition)}
.search-input:focus{outline:none;border-color:var(--border-focus)}

.main{flex:1;padding:1.25rem;max-width:1100px;margin:0 auto;width:100%;display:flex;flex-direction:column;gap:1rem}

.upload-section{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.upload-zone{padding:2rem;text-align:center;cursor:pointer;border-bottom:1px solid var(--border);transition:background var(--transition)}
.upload-zone:hover{background:var(--bg-elevated)}
.upload-zone.drag-over{background:var(--primary-glow);border-color:var(--primary)}
.upload-icon{font-size:2.5rem;margin-bottom:0.5rem}
.upload-title{font-weight:600;font-size:1rem;margin-bottom:0.25rem}
.upload-title code{font-family:var(--mono);color:var(--primary);font-size:0.9rem}
.upload-hint{font-size:0.8rem;color:var(--text-dim)}
.json-input{font-family:var(--mono);font-size:0.82rem;width:100%;background:var(--bg);color:var(--text-muted);border:none;border-bottom:1px solid var(--border);padding:0.75rem 1rem;resize:vertical}
.json-input:focus{outline:none;color:var(--text)}
.primary-btn{display:block;width:calc(100% - 2rem);margin:1rem;font-family:var(--sans);font-size:0.88rem;font-weight:600;padding:0.65rem;border:none;border-radius:var(--radius-sm);background:linear-gradient(135deg,var(--primary),#059669);color:#fff;cursor:pointer;transition:all var(--transition)}
.primary-btn:hover{transform:translateY(-1px);box-shadow:0 4px 16px var(--primary-glow)}
.secondary-btn{font-family:var(--sans);font-size:0.82rem;font-weight:500;padding:0.45rem 0.85rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:none;color:var(--text-muted);cursor:pointer;transition:all var(--transition)}
.secondary-btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}
.secondary-btn:disabled{opacity:0.4;cursor:default}

.stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:0.75rem}
.stat{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:0.75rem;text-align:center}
.stat-val{display:block;font-size:1.6rem;font-weight:700;font-family:var(--mono);color:var(--primary)}
.stat-label{font-size:0.7rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;color:var(--text-dim)}

.tree-container{background:var(--bg-surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;overflow:auto;max-height:60vh}
.tree{font-family:var(--mono);font-size:0.82rem;line-height:1.4}
.tree-node{padding:0.15rem 0;cursor:pointer;display:flex;align-items:center;gap:0.35rem;transition:color var(--transition)}
.tree-node:hover{color:var(--primary)}
.tree-node.dep{color:var(--primary)}
.tree-node.dev{color:var(--accent)}
.tree-node.peer{color:var(--warning)}
.tree-node.hidden-node{display:none}
.tree-toggle{width:16px;text-align:center;cursor:pointer;user-select:none;color:var(--text-dim)}
.tree-name{font-weight:600}
.tree-version{color:var(--text-dim);font-size:0.75rem}
.tree-warn{color:var(--warning);font-size:0.72rem;font-weight:500}
.tree-children{padding-left:1.25rem;border-left:1px solid var(--border)}

.toast{position:fixed;bottom:2rem;left:50%;transform:translateX(-50%) translateY(20px);background:var(--bg-elevated);color:var(--text);padding:0.6rem 1.25rem;border-radius:var(--radius);border:1px solid var(--border);font-size:0.82rem;font-weight:500;box-shadow:0 8px 32px rgba(0,0,0,0.5);opacity:0;pointer-events:none;transition:all 300ms ease;z-index:999}
.toast.visible{opacity:1;transform:translateX(-50%) translateY(0)}

.footer{text-align:center;padding:0.75rem 1.5rem;border-top:1px solid var(--border);color:var(--text-dim);font-size:0.75rem}
.hidden{display:none!important}
@media(max-width:600px){.stats-row{grid-template-columns:repeat(2,1fr)} .header-right{width:100%} .search-input{flex:1}}
