*{box-sizing:border-box;margin:0;padding:0}
:root{
  --navy:#1a1006;--navy2:#241608;--blue:#3d2410;
  --cyan:#d8900c;--cyan2:#f2b13a;--accent:#a83c0c;
  --text:#f2e6d8;--text2:#c9ad8f;--text3:#8a6f56;
  --card:#2b1b10;--card2:#33200f;--border:#4a3420;--border2:#5c4128;
  --green:#2f8f5b;--red:#dc2626;--amber:#d8900c;--purple:#a855f7;--pink:#ec4899;--teal:#1f6fa8;
  --font:'Inter',system-ui,sans-serif;
}
body{background:var(--navy);color:var(--text);font-family:var(--font);min-height:100vh}
.main{padding:1.5rem 2rem;max-width:1500px;margin:0 auto}

/* Upload */
.upload-zone{border:2px dashed var(--border2);border-radius:14px;padding:2.5rem 2rem;text-align:center;cursor:pointer;transition:all .3s;background:var(--card);position:relative}
.upload-zone:hover,.upload-zone.drag{border-color:var(--accent);background:rgba(6,182,212,.04)}
.upload-icon{font-size:2.5rem;margin-bottom:.75rem;display:block}
.upload-zone h2{font-size:1.1rem;font-weight:600;margin-bottom:.4rem}
.upload-zone p{color:var(--text2);font-size:.82rem;margin-bottom:1.2rem}
.upload-btn{background:linear-gradient(135deg,var(--accent),var(--cyan));color:#fff;border:none;padding:.65rem 1.75rem;border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:opacity .2s}
.upload-btn:hover{opacity:.85}
#file-input{position:absolute;inset:0;opacity:0;cursor:pointer}
.fmt-row{display:flex;gap:.4rem;justify-content:center;margin-top:.75rem;flex-wrap:wrap}
.fmt{background:rgba(255,255,255,.05);border:1px solid var(--border);padding:.15rem .55rem;border-radius:4px;font-size:.68rem;color:var(--text2)}

/* Progress */
.prog-wrap{display:none;margin:1rem 0}
.prog-bar{background:var(--card);border-radius:6px;height:5px;overflow:hidden}
.prog-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--cyan2));width:0;transition:width .3s;border-radius:6px}
.prog-txt{text-align:center;font-size:.78rem;color:var(--text2);margin-top:.4rem}

/* Stats */
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:.75rem;margin:1.5rem 0}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:1rem;text-align:center}
.stat-card .lbl{font-size:.65rem;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.4rem}
.stat-card .val{font-size:1.65rem;font-weight:700;line-height:1}
.stat-card .sub{font-size:.65rem;color:var(--text2);margin-top:.25rem}
.c-cyan{color:var(--cyan2)}.c-green{color:var(--green)}.c-amber{color:var(--amber)}
.c-purple{color:var(--purple)}.c-pink{color:var(--pink)}.c-red{color:var(--red)}.c-teal{color:var(--teal)}

/* Tabs */
.tabs{display:flex;gap:2px;margin-bottom:1.25rem;border-bottom:1px solid var(--border);flex-wrap:wrap;overflow-x:auto}
.tab{padding:.55rem 1rem;border:none;background:none;color:var(--text2);font-size:.8rem;cursor:pointer;border-bottom:2px solid transparent;transition:all .2s;white-space:nowrap;border-radius:4px 4px 0 0}
.tab:hover{color:var(--text);background:rgba(255,255,255,.03)}
.tab.active{color:var(--cyan2);border-bottom-color:var(--cyan2);background:rgba(6,182,212,.06)}
.tab-panel{display:none}.tab-panel.active{display:block}

/* Panels */
.panels{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin-bottom:1.25rem}
.panels3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1.25rem;margin-bottom:1.25rem}
.panel{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1.1rem}
.panel h3{font-size:.78rem;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.07em;margin-bottom:.9rem;display:flex;align-items:center;gap:.4rem}
.pdot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}
.ch-wrap{position:relative;height:200px}
.ch-tall{height:260px}

/* Table */
.tbl-wrap{overflow-x:auto;max-height:380px;overflow-y:auto}
table{width:100%;border-collapse:collapse;font-size:.77rem}
th{background:var(--card2);color:var(--text2);padding:.55rem .7rem;text-align:left;font-weight:500;position:sticky;top:0;z-index:1;border-bottom:1px solid var(--border);white-space:nowrap}
td{padding:.5rem .7rem;border-bottom:1px solid rgba(255,255,255,.035);color:var(--text);vertical-align:middle}
tr:hover td{background:rgba(255,255,255,.025)}
.pb{padding:.12rem .45rem;border-radius:4px;font-size:.68rem;font-weight:600;white-space:nowrap}
.p-tcp{background:rgba(14,165,233,.15);color:#38bdf8}
.p-udp{background:rgba(168,85,247,.15);color:#c084fc}
.p-icmp{background:rgba(245,158,11,.15);color:#fbbf24}
.p-dns{background:rgba(34,197,94,.15);color:#4ade80}
.p-http{background:rgba(236,72,153,.15);color:#f472b6}
.p-arp{background:rgba(239,68,68,.15);color:#f87171}
.p-tls{background:rgba(20,184,166,.15);color:#2dd4bf}
.p-dhcp{background:rgba(251,146,60,.15);color:#fb923c}
.p-other{background:rgba(100,116,139,.12);color:#94a3b8}

/* IP bars */
.ip-bar{display:flex;align-items:center;gap:.5rem;margin:.35rem 0}
.ip-lbl{font-size:.72rem;color:var(--text2);width:115px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}
.ip-track{flex:1;height:5px;background:rgba(255,255,255,.07);border-radius:3px}
.ip-fill{height:100%;border-radius:3px}
.ip-cnt{font-size:.68rem;color:var(--text3);min-width:38px;text-align:right}

/* Misc components */
.search-bar{width:100%;background:var(--card2);border:1px solid var(--border);border-radius:8px;padding:.55rem .9rem;color:var(--text);font-size:.82rem;margin-bottom:.9rem;outline:none}
.search-bar:focus{border-color:var(--accent)}
.empty{color:var(--text3);font-size:.78rem;text-align:center;padding:2rem;font-style:italic}

/* Stream viewer */
.stream-item{border:1px solid var(--border);border-radius:8px;margin-bottom:.5rem;overflow:hidden}
.stream-hdr{background:var(--card2);padding:.6rem .9rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:.78rem;user-select:none}
.stream-hdr:hover{background:rgba(255,255,255,.04)}
.stream-body{display:none;padding:.9rem;background:var(--navy)}
.stream-body.open{display:block}
.stream-content{font-family:monospace;font-size:.72rem;color:var(--green);white-space:pre-wrap;word-break:break-all;max-height:280px;overflow-y:auto;background:rgba(0,0,0,.3);padding:.75rem;border-radius:6px;line-height:1.6}
.stream-c2s{color:#38bdf8}.stream-s2c{color:#f472b6}
.chevron{transition:transform .2s;font-size:.7rem;margin-left:auto}
.chevron.open{transform:rotate(90deg)}

/* Hex dump */
.hex-modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:1000;align-items:center;justify-content:center}
.hex-modal.open{display:flex}
.hex-box{background:var(--card);border:1px solid var(--border2);border-radius:14px;padding:1.5rem;width:min(780px,95vw);max-height:85vh;overflow-y:auto}
.hex-box h3{font-size:.9rem;margin-bottom:1rem;color:var(--cyan2)}
.hex-dump{font-family:monospace;font-size:.72rem;line-height:1.8;white-space:pre;color:var(--text2)}
.hex-close{float:right;background:none;border:1px solid var(--border2);color:var(--text2);padding:.3rem .8rem;border-radius:6px;cursor:pointer;font-size:.78rem}
.hex-close:hover{background:rgba(255,255,255,.05)}
.hex-offset{color:var(--text3)}.hex-bytes{color:var(--cyan2)}.hex-ascii{color:var(--green)}
.hex-btn{background:rgba(6,182,212,.12);border:1px solid rgba(6,182,212,.3);color:var(--cyan2);padding:.15rem .5rem;border-radius:4px;font-size:.68rem;cursor:pointer;margin-left:.4rem}
.hex-btn:hover{background:rgba(6,182,212,.2)}

/* Credential */
.cred-item{border:1px solid rgba(239,68,68,.3);border-radius:8px;padding:.75rem;margin-bottom:.5rem;background:rgba(239,68,68,.04)}
.cred-proto{font-size:.68rem;font-weight:700;color:var(--red);margin-bottom:.3rem}
.cred-data{font-family:monospace;font-size:.75rem;color:var(--amber);word-break:break-all}
.cred-meta{font-size:.68rem;color:var(--text3);margin-top:.25rem}

/* ARP table */
.arp-conflict{border-left:3px solid var(--red)!important}
.arp-normal{border-left:3px solid var(--green)!important}

/* Flag */
.flag-item{display:flex;align-items:flex-start;gap:.65rem;padding:.6rem .75rem;border:1px solid var(--border);border-radius:8px;margin-bottom:.4rem;font-size:.77rem}
.fsev{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:3px}
.f-hi{background:var(--red)}.f-md{background:var(--amber)}.f-lo{background:var(--green)}
.flag-msg{color:var(--text);font-weight:500}
.flag-det{color:var(--text3);font-size:.7rem;margin-top:.15rem}

/* D3 graph */
#graph-svg{width:100%;border-radius:10px;background:var(--navy);overflow:hidden}
.node circle{cursor:pointer;stroke-width:1.5}
.node text{fill:var(--text2);font-size:10px;pointer-events:none}
.link{stroke:rgba(6,182,212,.25);stroke-width:1.5}
.link-thick{stroke:rgba(6,182,212,.55);stroke-width:3}

/* Heatmap */
.heatmap-cell{cursor:default}

/* Export */
.export-row{display:flex;gap:.75rem;flex-wrap:wrap;margin-bottom:1.25rem}
.exp-btn{background:var(--card2);border:1px solid var(--border2);color:var(--text);padding:.55rem 1.1rem;border-radius:8px;font-size:.8rem;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:.4rem}
.exp-btn:hover{border-color:var(--accent);color:var(--cyan2)}

/* DHCP */
.dhcp-item{border:1px solid var(--border);border-radius:8px;padding:.7rem;margin-bottom:.4rem;font-size:.77rem;display:grid;grid-template-columns:auto 1fr 1fr 1fr;gap:.5rem;align-items:center}

/* Scrollbar */
::-webkit-scrollbar{width:5px;height:5px}
::-webkit-scrollbar-track{background:var(--card2)}
::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(--border)}

/* GeoIP map placeholder */
.geomap-wrap{background:var(--navy);border-radius:10px;overflow:hidden;position:relative}
#world-svg{width:100%}
.geo-tooltip{position:absolute;background:var(--card2);border:1px solid var(--border2);border-radius:6px;padding:.4rem .7rem;font-size:.72rem;color:var(--text);pointer-events:none;display:none;z-index:10}

footer{text-align:center;padding:1.2rem;color:var(--text3);font-size:.7rem;border-top:1px solid var(--border);margin-top:2rem}
footer a{color:var(--cyan2);text-decoration:none}
@media(max-width:900px){.panels,.panels3{grid-template-columns:1fr}.main{padding:1rem}}

/* VirusTotal */
.vt-key-row{display:flex;gap:.6rem;margin-bottom:1.1rem;align-items:center}
.vt-key-input{flex:1;background:var(--card2);border:1px solid var(--border);border-radius:8px;padding:.5rem .9rem;color:var(--text);font-size:.82rem;outline:none;font-family:monospace}
.vt-key-input:focus{border-color:var(--accent)}
.vt-scan-btn{background:linear-gradient(135deg,var(--accent),var(--cyan));color:#fff;border:none;padding:.5rem 1.2rem;border-radius:8px;font-size:.82rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:opacity .2s}
.vt-scan-btn:hover{opacity:.85}
.vt-scan-btn:disabled{opacity:.45;cursor:not-allowed}
.vt-progress{font-size:.75rem;color:var(--text2);margin-bottom:.75rem}
.vt-card{border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem;margin-bottom:.55rem;display:grid;grid-template-columns:1fr auto;gap:.5rem;align-items:start}
.vt-card.vt-clean{border-left:3px solid var(--green)}
.vt-card.vt-malicious{border-left:3px solid var(--red)}
.vt-card.vt-suspicious{border-left:3px solid var(--amber)}
.vt-card.vt-unknown{border-left:3px solid var(--text3)}
.vt-ip{font-family:monospace;font-size:.82rem;color:var(--cyan2)}
.vt-meta{font-size:.68rem;color:var(--text3);margin-top:.2rem}
.vt-badge{padding:.2rem .6rem;border-radius:6px;font-size:.72rem;font-weight:700;text-align:center;min-width:70px}
.vt-badge.bad{background:rgba(239,68,68,.15);color:#f87171}
.vt-badge.warn{background:rgba(245,158,11,.15);color:#fbbf24}
.vt-badge.ok{background:rgba(34,197,94,.15);color:#4ade80}
.vt-badge.na{background:rgba(100,116,139,.12);color:#94a3b8}
.vt-detail{font-size:.7rem;color:var(--text2);margin-top:.3rem}
.vt-link{color:var(--cyan2);font-size:.68rem;text-decoration:none}
.vt-link:hover{text-decoration:underline}
.vt-notice{background:rgba(6,182,212,.06);border:1px solid rgba(6,182,212,.2);border-radius:8px;padding:.75rem 1rem;font-size:.77rem;color:var(--text2);margin-bottom:1rem}
.vt-single-btn{background:rgba(6,182,212,.1);border:1px solid rgba(6,182,212,.35);color:var(--cyan2);padding:.25rem .65rem;border-radius:6px;font-size:.73rem;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap}
.vt-single-btn:hover{background:rgba(6,182,212,.22);border-color:var(--accent)}
@keyframes vt-pulse{0%,100%{opacity:1}50%{opacity:.45}}

/* Image Reconstruction */
.img-item{border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:.75rem}
.img-hdr{background:var(--card2);padding:.6rem .9rem;display:flex;align-items:center;gap:.6rem;font-size:.78rem;cursor:pointer;user-select:none}
.img-hdr:hover{background:rgba(255,255,255,.03)}
.img-body{display:none;padding:1rem}
.img-body.open{display:block}
.img-preview{max-width:100%;max-height:400px;border-radius:6px;border:1px solid var(--border);display:block;margin:0 auto}
.img-dl-btn{background:rgba(6,182,212,.12);border:1px solid rgba(6,182,212,.3);color:var(--cyan2);padding:.3rem .8rem;border-radius:6px;font-size:.72rem;cursor:pointer;margin-top:.6rem}
.img-dl-btn:hover{background:rgba(6,182,212,.22)}
.img-stats{font-size:.7rem;color:var(--text3);margin-top:.4rem}
.img-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin-top:.75rem}
.img-thumb-card{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--card)}
.img-thumb-card img{width:100%;height:160px;object-fit:contain;background:#000;display:block}
.img-thumb-info{padding:.6rem .75rem}
.img-thumb-name{font-size:.72rem;color:var(--cyan2);font-family:monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.img-thumb-meta{font-size:.65rem;color:var(--text3);margin-top:.2rem}
