html{--sans:"DM Sans", system-ui, -apple-system, sans-serif;--mono:"JetBrains Mono", ui-monospace, monospace;--heading:"DM Sans", system-ui, sans-serif;--graph-viewport:min(74vh, 720px);--graph-viewport-min:400px}html[data-theme=light]{--surface-page:#ececf0;--surface-card:#fff;--surface-muted:#f5f5f7;--border:#d8d8e0;--border-strong:#b8b8c4;--text:#3b3b45;--text-muted:#6b6b78;--text-strong:#101018;--accent:#4f46e5;--accent-hover:#4338ca;--on-accent:#fff;--danger:#b91c1c;--warn-bg:#fffbeb;--warn-border:#fcd34d;--warn-text:#854d0e;--error-bg:#fef2f2;--error-border:#fca5a5;--graph-chrome:#dedee6;--graph-canvas:#f2f2f6;--graph-frame-border:#c4c4d0;--graph-frame-shadow:0 8px 28px #00000014;--graph-tool-bg:#ffffffeb;--graph-tool-border:#0000001a;--graph-tool-fg:#3f3f46;--graph-tool-hover-bg:#fff;--graph-tool-hover-border:#00000029;--graph-accent-bg:#4f46e51f;--graph-accent-border:#4f46e559;--graph-accent-fg:#4338ca;--graph-accent-hover-bg:#4f46e533;--talker-active-bg:#eef2ff;--talker-active-border:#a5b4fc;--talker-active-shadow:0 0 0 1px #4f46e533;--hero-shadow:0 1px 3px #0000000f}html[data-theme=dark]{--surface-page:#050505;--surface-card:#0c0c0c;--surface-muted:#141414;--border:#262626;--border-strong:#404040;--text:#d4d4d4;--text-muted:#8c8c8c;--text-strong:#fafafa;--accent:#d4d4d4;--accent-hover:#f5f5f5;--on-accent:#0a0a0a;--danger:#f87171;--warn-bg:#1a1814;--warn-border:#92400e;--warn-text:#fbbf24;--error-bg:#1c1010;--error-border:#b91c1c;--graph-chrome:#0a0a0a;--graph-canvas:#000;--graph-frame-border:#1f1f1f;--graph-frame-shadow:inset 0 1px 0 #ffffff08, 0 16px 48px #000000a6;--graph-tool-bg:#0c0c0cf5;--graph-tool-border:#ffffff14;--graph-tool-fg:#c4c4c4;--graph-tool-hover-bg:#1a1a1a;--graph-tool-hover-border:#ffffff24;--graph-accent-bg:#ffffff14;--graph-accent-border:#fff3;--graph-accent-fg:#f0f0f0;--graph-accent-hover-bg:#ffffff1f;--talker-active-bg:#1f1f1f;--talker-active-border:#525252;--talker-active-shadow:0 0 0 1px #ffffff14;--hero-shadow:0 1px 0 #ffffff08}*{box-sizing:border-box}body{min-height:100vh;font-family:var(--sans);color:var(--text);background-color:var(--surface-page);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:16px}#root{min-height:100vh}h1,h2,h3{color:var(--text-strong);font-family:var(--heading);font-weight:600}strong{color:var(--text-strong);font-weight:600}@media (width<=720px){html{--graph-viewport:min(54vh, 600px);--graph-viewport-min:280px}}.page-shell{flex-direction:column;gap:1.5rem;width:min(1280px,100% - 2rem);margin:1.25rem auto 2.5rem;display:flex}.hero-banner{background:var(--surface-card);border:1px solid var(--border);box-shadow:var(--hero-shadow);border-radius:12px;padding:1.75rem 2rem;animation:.38s ease-out reveal-up}.hero-top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.15rem;display:flex}.hero-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.75rem;display:flex}.theme-switch{border:1px solid var(--border);border-radius:8px;flex-shrink:0;display:inline-flex;overflow:hidden}.theme-switch button{font-family:var(--sans);background:var(--surface-muted);color:var(--text-muted);cursor:pointer;border:none;margin:0;padding:.42rem .85rem;font-size:.8125rem;font-weight:600;transition:background .12s,color .12s}.theme-switch button:hover{color:var(--text-strong);background:var(--surface-card)}.theme-switch button.is-active{background:var(--accent);color:var(--on-accent)}.github-link{border:1px solid var(--border-strong);background:linear-gradient(180deg, var(--surface-card), var(--surface-muted));color:var(--text-strong);border-radius:10px;align-items:center;gap:.75rem;padding:.55rem .85rem;text-decoration:none;transition:transform .14s,border-color .14s,background .14s;display:inline-flex;box-shadow:0 1px #0000000a}.github-link:hover{border-color:var(--accent);background:var(--surface-card);transform:translateY(-1px)}.github-link__icon{fill:currentColor;width:1.15rem;height:1.15rem;color:var(--text-strong);flex-shrink:0}.github-link__content{flex-direction:column;align-items:flex-start;gap:.1rem;display:inline-flex}.github-link__label{letter-spacing:.01em;font-size:.8125rem;font-weight:700}.github-link__repo{color:var(--text-muted);font-size:.6875rem;font-family:var(--mono);word-break:break-all}.eyebrow{text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);margin:0;font-size:.6875rem;font-weight:600}.hero-banner h1{letter-spacing:-.02em;margin:.4rem 0 .35rem;font-size:1.75rem;font-weight:700}.intro{max-width:56ch;color:var(--text-muted);margin:0;font-size:.9375rem;line-height:1.55}.intro strong{color:var(--text-strong)}.control-panel{background:var(--surface-card);border:1px solid var(--border);border-radius:12px;grid-template-columns:auto 1fr;align-items:center;gap:.5rem 1.25rem;padding:1rem 1.25rem;animation:.44s ease-out reveal-up;display:grid}.upload-button{background:var(--accent);color:var(--on-accent);cursor:pointer;border:none;border-radius:8px;justify-content:center;align-items:center;padding:.55rem 1.1rem;font-size:.875rem;font-weight:600;transition:background .15s;display:inline-flex}.upload-button:hover{background:var(--accent-hover)}.file-input{clip:rect(0, 0, 0, 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.file-caption{font-family:var(--mono);color:var(--text-strong);margin:0;font-size:.8125rem}.hint{color:var(--text-muted);grid-column:1/-1;margin:0;font-size:.8125rem}.status{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-text);border-radius:8px;margin:0;padding:.65rem 1rem;font-size:.875rem}.status.error{background:var(--error-bg);border-color:var(--error-border);color:var(--danger)}.metrics{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;animation:.52s ease-out reveal-up;display:grid}.metrics article{border:1px solid var(--border);background:var(--surface-card);border-radius:10px;padding:1rem}.metrics h2{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:0;font-size:.6875rem;font-weight:600}.metrics p{color:var(--text-strong);font-family:var(--mono);margin:.35rem 0 0;font-size:1.125rem;font-weight:500}.export-card{padding:1.15rem 1.25rem}.export-card h2{margin:0;font-size:1.0625rem}.export-lead{color:var(--text-muted);max-width:72ch;margin:.4rem 0 .85rem;font-size:.8125rem;line-height:1.5}.export-actions{flex-wrap:wrap;gap:.5rem;display:flex}.export-btn{font-family:var(--sans);border:1px solid var(--border-strong);background:var(--surface-muted);color:var(--text-strong);cursor:pointer;border-radius:8px;padding:.45rem .85rem;font-size:.8125rem;font-weight:600;transition:background .12s,border-color .12s}.export-btn:hover{background:var(--surface-card);border-color:var(--accent);color:var(--text-strong)}.grid-layout{grid-template-columns:minmax(0,2fr) minmax(240px,1fr);align-items:stretch;gap:1rem;display:grid}.card{background:var(--surface-card);border:1px solid var(--border);border-radius:12px;padding:1.25rem;animation:.6s ease-out reveal-up}.card h2{margin:0;font-size:1.0625rem}.card p{color:var(--text-muted);margin-top:.45rem;font-size:.875rem;line-height:1.5}.graph-card{padding:1.25rem 1.25rem 1.35rem}.graph-card-header{margin-bottom:.15rem}.graph-card-lead{color:var(--text-muted);max-width:62ch;margin:.3rem 0 0;font-size:.8125rem;line-height:1.5}.dense-tip{color:var(--text-muted);background:var(--surface-muted);border:1px solid var(--border);border-radius:8px;margin:.65rem 0 0;padding:.55rem .75rem;font-size:.8125rem;font-weight:500}.graph-workspace{min-height:var(--graph-viewport);grid-template-columns:minmax(0,1fr) minmax(220px,270px);align-items:stretch;gap:1rem;margin-top:1rem;display:grid}.graph-frame{min-height:var(--graph-viewport);background:var(--graph-chrome);border:1px solid var(--graph-frame-border);box-shadow:var(--graph-frame-shadow);border-radius:10px;position:relative;overflow:hidden}.graph-toolbar{z-index:2;flex-wrap:wrap;justify-content:flex-end;gap:6px;max-width:calc(100% - 20px);display:flex;position:absolute;top:10px;right:10px}.graph-tool-btn{font-family:var(--sans);border:1px solid var(--graph-tool-border);background:var(--graph-tool-bg);color:var(--graph-tool-fg);cursor:pointer;border-radius:6px;padding:.35rem .6rem;font-size:.75rem;font-weight:600;transition:background .12s,border-color .12s,color .12s}.graph-tool-btn:hover{background:var(--graph-tool-hover-bg);border-color:var(--graph-tool-hover-border);color:var(--text-strong)}.graph-tool-btn--accent{background:var(--graph-accent-bg);border-color:var(--graph-accent-border);color:var(--graph-accent-fg)}.graph-tool-btn--accent:hover{background:var(--graph-accent-hover-bg);border-color:var(--accent);color:var(--graph-accent-fg)}.graph-canvas{width:100%;height:var(--graph-viewport);min-height:var(--graph-viewport-min);background:var(--graph-canvas);border:none;border-radius:0}.graph-inspector{border:1px solid var(--border);background:var(--surface-muted);border-radius:10px;flex-direction:column;gap:.6rem;min-height:0;padding:1rem;display:flex}.inspector-title{text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);font-size:.6875rem;font-family:var(--heading);margin:0;font-weight:600}.inspector-placeholder{color:var(--text-muted);margin:0;font-size:.8125rem;line-height:1.55}.inspector-ip{font-size:.875rem;font-weight:600;font-family:var(--mono);color:var(--text-strong);word-break:break-all;margin:0}.geo-loading{color:var(--accent);margin:0;font-size:.8125rem}.geo-info{background:var(--surface-card);border:1px solid var(--border);min-height:100px;font-family:var(--mono);color:var(--text);white-space:pre-wrap;word-wrap:break-word;border-radius:8px;flex:1;margin:0;padding:.75rem;font-size:.75rem;line-height:1.55;overflow:auto}.talkers-lead{color:var(--text-muted);margin:.3rem 0 0;font-size:.8125rem}.talkers-card{min-height:var(--graph-viewport);flex-direction:column;display:flex}.talker-list{flex-direction:column;flex:1;gap:.4rem;min-height:0;margin:.65rem 0 0;padding:0 4px 0 0;list-style:none;display:flex;overflow-y:auto}.talker-list li{margin:0}.talker-row{text-align:left;border:1px solid var(--border);background:var(--surface-muted);cursor:pointer;width:100%;font:inherit;color:inherit;border-radius:8px;padding:.6rem .75rem;transition:border-color .12s,background .12s,box-shadow .12s}.talker-row:hover{background:var(--surface-card);border-color:var(--border-strong)}.talker-row--active{background:var(--talker-active-bg);border-color:var(--talker-active-border);box-shadow:var(--talker-active-shadow)}.talker-row-main{justify-content:space-between;align-items:baseline;gap:.5rem;display:flex}.talker-row strong{font-family:var(--mono);font-size:.8125rem}.talker-bytes{font-family:var(--mono);color:var(--text-muted);flex-shrink:0;font-size:.8125rem}.talker-row small{color:var(--text-muted);margin-top:.3rem;font-size:.75rem;display:block}@keyframes reveal-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (width<=1120px){.grid-layout{grid-template-columns:1fr}.talkers-card{min-height:auto}.talker-list{max-height:400px}}@media (width<=720px){.page-shell{gap:1rem;width:min(100% - 1rem,1280px);margin:.75rem auto 1.5rem}.hero-banner{padding:1.25rem}.control-panel{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.graph-workspace{grid-template-columns:1fr;min-height:auto}.graph-frame{min-height:var(--graph-viewport)}.graph-canvas{height:var(--graph-viewport);min-height:var(--graph-viewport-min)}.graph-inspector{min-height:180px}}
