/* FALYS online documentation — theme layer. Self-contained; safe to drop into falys.io/docs/ */
:root{
  --bg:#050b1f; --bg2:#0a1a44; --card:rgba(16,29,66,.55); --card-solid:#0d1838;
  --line:rgba(255,255,255,.10); --fg:#e6ecff; --muted:#93a4d3;
  --cyan:#2dd4ee; --violet:#9161f5; --code:#0a1330;
  --red:#ff6b70; --amber:#f5a524; --green:#2fb673;
  --sidebar:300px;
  --navbar-height:70px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:90px}
body{margin:0;color:var(--fg);font:16px/1.7 "Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  background:radial-gradient(900px 500px at 85% -5%,rgba(45,212,238,.14),transparent 60%),
             radial-gradient(700px 500px at 0% 100%,rgba(145,97,245,.16),transparent 60%),
             linear-gradient(160deg,var(--bg),var(--bg2) 55%,#07122e);
  background-attachment:fixed;min-height:100vh}
a{color:var(--cyan);text-decoration:none}
a:hover{text-decoration:underline}

/* ---------- top navbar ---------- */
header{
  position:relative;
  z-index:100;
  width:100%;
  height:var(--navbar-height);
  background:rgba(5,11,31,.90);
  backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
.navbar{
  width:100%;
  height:100%;
  padding:0 40px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:30px;
}
.navbar .logo{
  display:flex;
  align-items:center;
  gap:10px;
  flex-shrink:0;
}
.navbar .logo-box{
  width:38px;
  height:38px;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:9px;
  background:linear-gradient(135deg,var(--violet),var(--cyan));
  color:#04102b;
  font-weight:700;
}
.navbar .logo span{
  font:700 18px "Unbounded",sans-serif;
  color:#fff;
  letter-spacing:.5px;
}
.nav-links{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:28px;
  min-width:0;
}
.nav-links a{
  color:var(--muted);
  font-size:14px;
  font-weight:600;
  white-space:nowrap;
}
.nav-links a:hover{
  color:var(--cyan);
  text-decoration:none;
}

/* ---------- sidebar ---------- */
#side{
  position:fixed;
  top:var(--navbar-height);
  bottom:0;
  left:0;
  width:var(--sidebar);
  overflow-y:auto;
  padding:22px 18px 40px;
  background:rgba(5,11,31,.72);
  backdrop-filter:blur(14px);
  border-right:1px solid var(--line);
  z-index:20;
}
#side::-webkit-scrollbar{width:6px}#side::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:6px}
.brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.brand img{height:40px;background:#fff;border-radius:10px;padding:3px 8px}
.brand b{font:600 13px "Unbounded",sans-serif;letter-spacing:.5px}
.brand small{display:block;color:var(--muted);font-size:11px}
.back{display:inline-block;margin:10px 0 14px;font-size:13px;color:var(--muted)}
.back:hover{color:var(--cyan);text-decoration:none}
#search{width:100%;padding:9px 12px;margin-bottom:14px;border-radius:10px;border:1px solid var(--line);
  background:rgba(255,255,255,.05);color:var(--fg);font:14px inherit;outline:none}
#search:focus{border-color:var(--cyan);box-shadow:0 0 0 3px rgba(45,212,238,.15)}
#toc ul{list-style:none;margin:0;padding:0}
#toc>ul>li{margin:2px 0}
#toc>ul>li>a{display:block;padding:8px 10px;border-radius:10px;color:var(--fg);font-weight:600;font-size:14.5px}
#toc>ul>li>a:hover{background:rgba(255,255,255,.06);text-decoration:none}
#toc>ul>li>a::before{content:"•";display:inline-block;width:1.7em}
#toc a[href="#introduction"]::before{content:"👋"}
#toc a[href="#installation"]::before{content:"🛠️"}
#toc a[href="#using-the-dashboard"]::before{content:"📊"}
#toc a[href="#customization"]::before{content:"🎨"}
#toc a[href="#postgresql-setup"]::before{content:"🐘"}
#toc a[href="#agent-deployment"]::before{content:"🛰️"}
#toc a[href="#file-event-attribution"]::before{content:"🕵️"}
#toc a[href="#detection-engine"]::before{content:"🧠"}
#toc a[href="#dynamic-ip-discovery"]::before{content:"📡"}
#toc a[href="#credits"]::before,#toc a[href="#credits--third-party-licenses"]::before{content:"💙"}
#toc>ul>li.active>a{background:linear-gradient(135deg,rgba(45,212,238,.18),rgba(145,97,245,.18));color:#fff}
#toc li ul{display:none;margin:2px 0 8px 22px;padding-left:10px;border-left:1px dashed var(--line)}
#toc li.active>ul,#toc.searching li ul{display:block}
#toc li ul a{display:block;padding:3px 8px;font-size:13px;color:var(--muted);border-radius:6px}
#toc li ul a:hover{color:var(--cyan);text-decoration:none}
#toc li ul a.cur{color:var(--cyan);background:rgba(45,212,238,.08)}
#toc li.hide{display:none}

/* ---------- main ---------- */
main{margin-left:var(--sidebar);max-width:1040px;padding:34px 44px 90px}
.hero{position:relative;padding:34px 34px 30px;margin-bottom:34px;border-radius:24px;overflow:hidden;
  border:1px solid var(--line);background:linear-gradient(135deg,rgba(45,212,238,.12),rgba(145,97,245,.14))}
.hero::after{content:"";position:absolute;right:-60px;top:-60px;width:260px;height:260px;border-radius:50%;
  background:radial-gradient(circle,rgba(45,212,238,.35),transparent 70%)}
.hero h1{margin:0 0 8px;font:700 clamp(28px,4vw,44px)/1.1 "Unbounded",sans-serif;
  background:linear-gradient(90deg,#fff,var(--cyan) 60%,var(--violet));-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p{margin:0 0 18px;color:var(--muted);max-width:640px;font-size:17px}
.badges{display:flex;flex-wrap:wrap;gap:8px;position:relative;z-index:1}
.badges span{padding:5px 13px;border-radius:999px;font-size:13px;font-weight:600;
  border:1px solid rgba(45,212,238,.45);background:rgba(45,212,238,.09);color:#c7f6ff}
.badges span:first-child{background:linear-gradient(135deg,var(--violet),var(--cyan));color:#04102b;border:0}
.author{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:38px}
.author div{padding:14px 16px;border-radius:16px;border:1px solid var(--line);background:var(--card)}
.author small{display:block;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.8px;margin-bottom:2px}
.author b{font-weight:600}
section{margin-bottom:26px;padding:8px 30px 20px;border-radius:22px;border:1px solid var(--line);background:var(--card);
  backdrop-filter:blur(6px)}
section>h1{font:700 clamp(22px,3vw,30px)/1.2 "Unbounded",sans-serif;margin:22px 0 14px;padding-bottom:12px;
  border-bottom:2px solid transparent;border-image:linear-gradient(90deg,var(--cyan),var(--violet),transparent) 1}
h2{margin:2.2rem 0 .6rem;font:600 21px "Unbounded",sans-serif;color:#fff}
h2::before{content:"# ";color:var(--cyan)}
h3{margin:1.6rem 0 .4rem;font-size:18px;color:var(--cyan)}
h4{color:var(--violet)}
p,li{color:#d3dcf7}
code{font:.88em "IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;background:var(--code);color:#a8f0ff;
  padding:.14em .42em;border-radius:6px;border:1px solid var(--line);word-break:break-word}
pre{position:relative;background:var(--code);border:1px solid var(--line);border-radius:14px;padding:16px 18px;overflow-x:auto}
pre code{background:none;border:0;padding:0;color:#dbe6ff;word-break:normal}
.copy{position:absolute;top:8px;right:8px;font:600 11px "IBM Plex Mono",monospace;padding:4px 10px;border-radius:8px;
  border:1px solid var(--line);background:rgba(255,255,255,.07);color:var(--muted);cursor:pointer}
.copy:hover{color:var(--cyan);border-color:var(--cyan)}
table{border-collapse:separate;border-spacing:0;display:block;overflow-x:auto;max-width:100%;margin:1.1rem 0;
  border:1px solid var(--line);border-radius:14px}
th,td{padding:10px 14px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line)}
tr:last-child td{border-bottom:0}
th{background:rgba(45,212,238,.10);color:#fff;font-weight:600;white-space:nowrap}
tbody tr:hover td{background:rgba(255,255,255,.03)}
blockquote{margin:1.1rem 0;padding:.7rem 1.1rem .7rem 3rem;position:relative;border-radius:14px;
  border:1px solid rgba(145,97,245,.4);background:rgba(145,97,245,.10);color:#dcd0ff}
blockquote::before{content:"💡";position:absolute;left:14px;top:10px;font-size:20px}
blockquote p{color:inherit;margin:.3rem 0}
img{max-width:100%;height:auto;display:block;margin:.9rem 0;border-radius:14px;border:1px solid var(--line);
  box-shadow:0 14px 40px rgba(0,0,0,.45),0 0 40px rgba(45,212,238,.08)}
hr{border:0;border-top:1px solid var(--line);margin:2rem 0}
footer{margin-top:44px;text-align:center;color:var(--muted);font-size:14px}
footer b{color:var(--cyan)}

/* ---------- widgets ---------- */
#menu{display:none;position:fixed;top:14px;right:14px;left:auto;z-index:110;padding:9px 14px;border-radius:12px;border:1px solid var(--line);
  background:rgba(5,11,31,.9);color:var(--fg);font-weight:600;cursor:pointer}
#top{position:fixed;right:22px;bottom:22px;width:44px;height:44px;border-radius:50%;border:0;cursor:pointer;font-size:18px;
  background:linear-gradient(135deg,var(--violet),var(--cyan));color:#04102b;box-shadow:0 8px 24px rgba(45,212,238,.35);
  opacity:0;pointer-events:none;transition:.25s;z-index:30}
#top.show{opacity:1;pointer-events:auto}

@media(max-width:1100px){
  .navbar{padding:0 24px}
  .nav-links{gap:18px}
  .nav-links a{font-size:13px}
}
@media(max-width:940px){
  header{height:60px}
  .navbar{padding:0 18px}
  .nav-links{display:none}
  #side{top:0;transform:translateX(-100%);transition:transform .25s;width:min(86vw,320px);z-index:120}
  body.open #side{transform:none}
  #menu{display:block}
  main{margin-left:0;padding:70px 16px 70px}
  section{padding:6px 18px 16px}
}
@media print{
  #side,#menu,#top{display:none}
  main{margin:0;max-width:none}
  body{background:#fff;color:#000}
}
