:root{--bg:#0e1117;--bg-surface:#161b22;--bg-hover:#1c2129;--text:#e6edf3;--text-muted:#8b949e;--accent:#58a6ff;--accent-dim:#1f6feb33;--border:#30363d;--clade-saurischia:#f0883e;--clade-theropoda:#f47067;--clade-sauropodomorpha:#a5d6ff;--clade-ornithischia:#7ee787;--clade-thyreophora:#56d364;--clade-marginocephalia:#3fb950;--clade-pterosauria:#d2a8ff;--clade-default:#8b949e;--font-mono:"JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);height:100%;color:var(--text);font-family:var(--font-sans);overflow:hidden}header{z-index:100;background:var(--bg-surface);border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);justify-content:space-between;align-items:center;padding:12px 24px;display:flex;position:fixed;top:0;left:0;right:0}header h1{letter-spacing:.02em;color:var(--text);font-size:1.25rem;font-weight:600}.controls{align-items:center;gap:12px;display:flex}.search-wrapper{position:relative}#search{border:1px solid var(--border);background:var(--bg);width:240px;color:var(--text);border-radius:6px;outline:none;padding:6px 12px;font-size:.875rem;transition:border-color .15s}#search:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}#search-results{background:var(--bg-surface);border:1px solid var(--border);z-index:200;border-radius:6px;max-height:300px;margin-top:4px;list-style:none;display:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto}#search-results.open{display:block}#search-results li{cursor:pointer;border-bottom:1px solid var(--border);padding:8px 12px;font-size:.85rem;transition:background .1s}#search-results li:last-child{border-bottom:none}#search-results li:hover,#search-results li.active{background:var(--bg-hover)}#search-results li .rank{color:var(--text-muted);margin-left:8px;font-size:.75rem}.toggle-btn{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:6px;padding:6px 14px;font-size:.8rem;transition:all .15s}.toggle-btn:hover{background:var(--bg-hover);color:var(--text)}.toggle-btn.active{background:var(--accent-dim);color:var(--accent);border-color:var(--accent)}.zoom-controls{border:1px solid var(--border);border-radius:6px;align-items:center;gap:2px;padding:2px 4px;display:flex}.zoom-controls .zoom-label{color:var(--text-muted);-webkit-user-select:none;user-select:none;padding:0 4px;font-size:.7rem;font-weight:600}.zoom-controls button{width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:.9rem;line-height:1;transition:all .1s;display:flex}.zoom-controls button:hover{background:var(--bg-hover);color:var(--text)}.tree-controls{gap:6px;display:flex}.tree-controls button{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:6px;padding:6px 12px;font-size:.8rem;transition:all .15s}.tree-controls button:hover{background:var(--bg-hover);color:var(--text)}.view-toggle{border:1px solid var(--border);border-radius:6px;display:flex;overflow:hidden}.view-toggle button{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:6px 14px;font-size:.8rem;transition:all .15s}.view-toggle button.active{background:var(--accent-dim);color:var(--accent)}.view-toggle button:hover:not(.active){background:var(--bg-hover);color:var(--text)}main{padding-top:52px;position:absolute;inset:0}#viz,#viz svg{width:100%;height:100%}#tooltip{pointer-events:none;background:var(--bg-surface);border:1px solid var(--border);color:var(--text);opacity:0;z-index:300;border-radius:6px;max-width:280px;padding:8px 12px;font-size:.8rem;line-height:1.5;transition:opacity .12s;position:fixed;box-shadow:0 4px 12px #0006}#tooltip.visible{opacity:1}#tooltip .tt-name{font-style:italic;font-weight:600}#tooltip .tt-rank{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin-left:6px;font-size:.7rem}#tooltip .tt-time{color:var(--text-muted);margin-top:2px;font-size:.75rem}#detail-panel{background:var(--bg-surface);border:1px solid var(--border);z-index:150;border-bottom:none;border-radius:12px 12px 0 0;width:min(560px,100% - 48px);padding:24px;transition:transform .3s cubic-bezier(.16,1,.3,1);position:fixed;bottom:0;left:50%;transform:translate(-50%)translateY(100%);box-shadow:0 -8px 32px #0006}#detail-panel.visible{transform:translate(-50%)translateY(0)}#detail-panel.hidden{transform:translate(-50%)translateY(100%)}#detail-close{color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:4px;font-size:1.5rem;line-height:1;position:absolute;top:12px;right:16px}#detail-close:hover{color:var(--text)}#detail-name{margin-bottom:6px;font-size:1.4rem;font-style:italic;font-weight:600}.detail-badge{text-transform:uppercase;letter-spacing:.06em;background:var(--accent-dim);color:var(--accent);border-radius:999px;margin-bottom:12px;padding:2px 10px;font-size:.7rem;display:inline-block}#detail-description{color:var(--text-muted);margin-bottom:16px;font-size:.9rem;line-height:1.6}#detail-meta{grid-template-columns:auto 1fr;gap:4px 16px;font-size:.85rem;display:grid}#detail-meta dt{color:var(--text-muted);font-weight:500}#detail-meta dd{color:var(--text)}.link{fill:none;stroke:var(--border);stroke-width:1.5px;stroke-opacity:.6;transition:stroke .2s,stroke-opacity .2s}.link.highlighted{stroke-opacity:1;stroke-width:2.5px}.node circle{stroke-width:2px;cursor:pointer;transition:r .15s,stroke-width .15s}.node circle:hover{stroke-width:3px}.node.has-children circle{cursor:pointer}.node text{fill:var(--text);cursor:pointer;font-size:13px;transition:fill .2s}.node text:hover{fill:var(--accent)}.node text.label-clade{font-size:14px;font-weight:600}.node text.label-genus{font-style:italic}.node.collapsed circle{stroke-dasharray:3 2}.node.search-match circle{stroke-width:3px;filter:drop-shadow(0 0 6px var(--accent))}.node.search-match text{fill:var(--accent);font-weight:700}.node.dimmed circle,.node.dimmed text{opacity:.25}.link.dimmed{stroke-opacity:.1}
