@import url('https://fonts.googleapis.com/css2?family=Anton&family=Share+Tech+Mono&display=swap');

:root{
  --bg:#09060d;
  --bg2:#140a21;
  --ink:#050308;
  --purple:#9b2fe0;
  --purple2:#c026f2;
  --purple-dim:#3a1360;
  --green:#c6ff3a;
  --green-dim:#5c8c14;
  --magenta:#ff2f92;
  --cyan:#2fe8ff;
  --amber:#ffcf3d;
  --fg:#ece6fb;
  --muted:#8c7fae;
  --line:#331a52;
  --red:#ff3864;
  --font:"Share Tech Mono","Courier New",ui-monospace,Menlo,Consolas,monospace;
  --font-display:"Anton",Impact,"Arial Narrow Bold",sans-serif;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{
  background:
    radial-gradient(ellipse at 15% -10%, rgba(155,47,224,.28), transparent 55%),
    radial-gradient(ellipse at 110% 110%, rgba(47,232,255,.16), transparent 55%),
    var(--bg);
  color:var(--fg);
  font-family:var(--font);
  font-size:15px;
  line-height:1.4;
  overflow:hidden;
}
/* halftone + scanline + chromatic noise overlay */
body::before{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:9999;
  background:
    repeating-radial-gradient(circle at 0 0, rgba(255,255,255,.05) 0 1px, transparent 1px 4px),
    repeating-linear-gradient(0deg,rgba(0,0,0,0) 0px,rgba(0,0,0,0) 2px,rgba(0,0,0,.22) 3px,rgba(0,0,0,0) 4px),
    repeating-linear-gradient(115deg,rgba(255,47,146,.035) 0 2px,rgba(47,232,255,.035) 2px 4px,transparent 4px 7px);
  mix-blend-mode:overlay;
}
body::after{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:9998;
  background:radial-gradient(ellipse at center,rgba(0,0,0,0) 50%,rgba(8,2,16,.68) 100%);
}
.hidden{display:none!important}
.screen{position:fixed;inset:0}

/* torn poster-edge strip, always on top of the stack */
.shard-top{
  position:fixed;top:0;left:0;right:0;height:7px;z-index:10000;pointer-events:none;
  background:linear-gradient(90deg,var(--purple) 0%,var(--purple2) 30%,var(--magenta) 60%,var(--cyan) 100%);
  clip-path:polygon(0% 0%,100% 0%,100% 55%,96% 100%,90% 45%,84% 100%,78% 40%,72% 100%,66% 50%,60% 100%,
    54% 35%,48% 100%,42% 55%,36% 100%,30% 40%,24% 100%,18% 50%,12% 100%,6% 45%,0% 100%);
}

/* ---------- BOOT ---------- */
.boot-log{
  padding:28px;margin:0;color:var(--green);
  font-size:13.5px;white-space:pre-wrap;word-break:break-word;
  text-shadow:0 0 6px rgba(198,255,58,.45);
}

/* ---------- LOGIN ---------- */
#login{display:flex;align-items:center;justify-content:center;background:var(--bg)}
#login::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:url("GIFs-Assets/dedskullspin.gif") repeat;
  background-size:110px 110px;
  opacity:.6;
}
.login-box{
  padding:34px 42px;background:linear-gradient(165deg,#170b28,#0a0613);
  width:min(620px,92vw);transform:rotate(-.6deg);
}
.glitch-border{
  border:2px solid var(--ink);
  box-shadow:0 0 0 1px var(--purple-dim),8px 8px 0 var(--purple-dim),14px 14px 0 rgba(0,0,0,.55),
    0 0 40px rgba(155,47,224,.25) inset;
}
.login-logo{display:flex;flex-direction:column;align-items:center;margin:0 0 10px}
.login-skull{
  width:96px;height:auto;display:block;
  filter:drop-shadow(0 0 14px rgba(255,47,146,.45));
  animation:skullglitch 4s infinite steps(1);
}
.login-skull .ls-m{mix-blend-mode:screen}
@keyframes skullglitch{
  0%,88%,100%{transform:translate(0,0)}
  90%{transform:translate(-2px,1px)}
  93%{transform:translate(2px,-1px)}
  96%{transform:translate(-1px,0)}
}
.login-wordmark{
  margin-top:10px;font-family:var(--font-display);font-size:34px;letter-spacing:7px;
  color:var(--fg);text-transform:uppercase;line-height:1;
  text-shadow:2px 0 var(--magenta),-2px 0 var(--cyan);
  animation:logoglitch 4s infinite steps(1);
}
.login-tag{
  text-align:center;color:var(--magenta);letter-spacing:2px;font-size:12px;margin-bottom:22px;
  font-family:var(--font-display);text-transform:uppercase;letter-spacing:3px;
  animation:flick 3s infinite;
}
.login-field{display:flex;align-items:center;gap:10px;border-bottom:2px solid var(--purple-dim);padding-bottom:6px}
.prompt-sym{color:var(--green)}
.login-field input{flex:1;background:transparent;border:0;outline:0;color:var(--fg);font-family:var(--font);font-size:16px;caret-color:var(--green)}
.login-hint{margin-top:14px;color:var(--muted);font-size:12px;text-align:center}

/* ---------- OS ---------- */
#os{display:flex;flex-direction:column;background:var(--bg)}
.topbar{
  display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--ink);
  border-bottom:2px solid var(--purple);position:relative;font-size:13px;flex-wrap:wrap;
}
.topbar::after{
  content:"";position:absolute;left:0;right:0;bottom:-4px;height:4px;
  background:linear-gradient(90deg,var(--purple),var(--magenta),var(--cyan));
  clip-path:polygon(0 0,100% 0,100% 100%,92% 30%,84% 100%,76% 20%,68% 100%,60% 35%,52% 100%,
    44% 15%,36% 100%,28% 30%,20% 100%,12% 20%,0 100%);
}
.tb-logo{
  color:var(--fg);font-weight:400;letter-spacing:1px;font-family:var(--font-display);
  text-transform:uppercase;font-size:17px;letter-spacing:2px;
  text-shadow:1px 0 var(--magenta),-1px 0 var(--cyan);
}
.tb-sep{color:var(--muted)}
.tb-item{color:var(--muted);cursor:pointer;transition:.12s}
.tb-item:hover{color:var(--cyan)}
.tb-item.on{color:var(--green);text-shadow:0 0 8px var(--green)}
.tb-right{margin-left:auto;display:flex;gap:10px;align-items:center;color:var(--amber)}
#tb-rep{color:var(--magenta)}

.workspace{flex:1;position:relative;overflow:hidden}
.app{position:absolute;inset:0;display:none;flex-direction:column;padding:10px 14px;overflow:auto}
.app.active{display:flex}

/* terminal */
.term-output{flex:1;overflow-y:auto;white-space:pre-wrap;word-break:break-word;padding-bottom:6px}
.term-inputline{display:flex;gap:8px;align-items:center;border-top:1px solid var(--line);padding-top:6px}
.term-prompt{color:var(--green);white-space:pre}
#term-input{flex:1;background:transparent;border:0;outline:0;color:var(--fg);font-family:var(--font);font-size:15px;caret-color:var(--green)}
.ln{display:block}
.c-green{color:var(--green)} .c-mag{color:var(--magenta)} .c-cyan{color:var(--cyan)}
.c-amber{color:var(--amber)} .c-red{color:var(--red)} .c-muted{color:var(--muted)}
.c-dim{color:var(--green-dim)}
.cmd-echo{color:var(--fg)}

/* panels */
.panel-head{
  color:var(--fg);border-bottom:1px solid var(--line);padding:4px 0 8px 10px;margin-bottom:10px;
  border-left:4px solid var(--purple);font-family:var(--font-display);letter-spacing:1.5px;
  text-transform:uppercase;font-size:15px;
}

/* ctos grid */
.ctos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.node{border:1px solid var(--line);padding:10px;cursor:pointer;background:var(--bg2);transition:.12s;position:relative}
.node:hover{border-color:var(--cyan);box-shadow:0 0 12px rgba(47,232,255,.25) inset}
.node .nt{color:var(--cyan);font-size:12px}
.node .nn{font-size:13px;margin:4px 0}
.node .ns{font-size:11px;color:var(--muted)}
.node.hacked{border-color:var(--magenta)}
.node.hacked .ns{color:var(--magenta)}
.ctos-detail{margin-top:14px;border:1px dashed var(--line);padding:12px;white-space:pre-wrap;min-height:120px;font-size:13px}

/* network map — hacknet-style pivot graph */
.net-graph{position:relative;height:300px;border:1px solid var(--line);background:var(--bg2);overflow:hidden}
.net-edges{position:absolute;inset:0;width:100%;height:100%}
.net-edge{stroke:var(--line);stroke-width:2}
.net-edge.active{stroke:var(--magenta);stroke-width:2.5;filter:drop-shadow(0 0 4px var(--magenta))}
.net-node{
  position:absolute;transform:translate(-50%,-50%);min-width:92px;text-align:center;
  padding:6px 8px;border:1px solid var(--line);background:var(--bg);cursor:pointer;transition:.12s;
}
.net-node .nn-id{font-size:11px;letter-spacing:.5px;text-transform:uppercase;font-family:var(--font-display)}
.net-node .nn-ip{font-size:10px;color:var(--muted);margin-top:2px}
.net-node.locked{opacity:.45;border-style:dashed}
.net-node.reachable{border-color:var(--amber);box-shadow:0 0 10px rgba(255,207,61,.25)}
.net-node.reachable .nn-id{color:var(--amber)}
.net-node.breached{border-color:var(--green);box-shadow:0 0 12px rgba(198,255,58,.3)}
.net-node.breached .nn-id{color:var(--green)}
.net-node.here{outline:2px solid var(--cyan);outline-offset:2px}
.net-node.honeypot-known{border-color:var(--red)}
.net-node.honeypot-known .nn-id{color:var(--red)}
.net-node.honeypot-known::after{content:"⚠";position:absolute;top:-8px;right:-6px;font-size:11px;color:var(--red)}

/* profiler */
#app-profiler{
  background:
    linear-gradient(rgba(10,6,19,.6),rgba(10,6,19,.6)),
    url("GIFs-Assets/dedsecphoneclick.gif") repeat;
  background-size:auto, 120px auto;
}
.profiler-feed{display:flex;flex-direction:column;gap:8px;position:relative;z-index:1}
.pf-card{border:1px solid var(--line);padding:8px 10px;background:var(--bg2);display:flex;justify-content:space-between;gap:10px;align-items:center;animation:slidein .25s}
.pf-name{color:var(--cyan)}
.pf-tag{color:var(--muted);font-size:12px}
.pf-val{color:var(--amber);font-size:12px;text-align:right}
.pf-flag{color:var(--magenta)}

/* missions */
.missions-list{display:flex;flex-direction:column;gap:12px}
.mission{border:1px solid var(--line);padding:12px 14px;background:var(--bg2)}
.mission.done{opacity:.55;border-color:var(--green-dim)}
.m-title{color:var(--green);font-size:15px;margin-bottom:4px;font-family:var(--font-display);letter-spacing:1px;text-transform:uppercase}
.m-title .badge{font-size:11px;color:var(--magenta);margin-left:8px;font-family:var(--font)}
.m-desc{color:var(--fg);font-size:13px;margin-bottom:8px}
.m-steps{list-style:none;padding:0;margin:0;font-size:12.5px}
.m-steps li{padding:2px 0;color:var(--muted)}
.m-steps li.ok{color:var(--green)}
.m-steps li.ok::before{content:"[✔] "}
.m-steps li:not(.ok)::before{content:"[ ] "}
.m-reward{margin-top:8px;color:var(--amber);font-size:12px}

/* editor */
.editor-wrap{flex:1;display:flex;gap:14px;min-height:0}
.editor-evidence,.editor-timeline{flex:1;border:1px solid var(--line);padding:10px;background:var(--bg2);display:flex;flex-direction:column;min-height:0}
.ee-title{color:var(--cyan);font-size:12px;margin-bottom:8px}
.evidence-pool,.timeline{flex:1;overflow:auto;display:flex;flex-direction:column;gap:6px}
.timeline{border:1px dashed var(--line);padding:8px}
.clip{border:1px solid var(--green-dim);padding:6px 8px;font-size:12px;cursor:grab;background:#140a1f;color:var(--fg)}
.clip:hover{border-color:var(--green)}
.clip.locked{opacity:.4;cursor:not-allowed;border-style:dashed}
.render-btn{
  margin-top:10px;background:var(--magenta);border:2px solid var(--ink);color:var(--ink);
  font-family:var(--font-display);text-transform:uppercase;letter-spacing:2px;
  padding:10px;cursor:pointer;transition:.1s;box-shadow:4px 4px 0 var(--purple-dim);
}
.render-btn:hover{background:var(--cyan);transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--purple)}
.render-btn:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--purple)}

/* floating objective mini-window */
.objective-widget{
  position:fixed;right:16px;bottom:38px;width:230px;z-index:2000;
  background:var(--bg2);border:2px solid var(--ink);
  box-shadow:4px 4px 0 var(--purple-dim),0 0 24px rgba(0,0,0,.5);
  font-size:12px;
}
.ow-title{
  display:flex;align-items:center;gap:6px;padding:5px 6px;cursor:grab;user-select:none;touch-action:none;
  background:linear-gradient(90deg,var(--purple),var(--magenta));
}
.ow-title:active{cursor:grabbing}
.objective-widget.dragging{opacity:.88;box-shadow:6px 6px 0 var(--purple-dim),0 0 30px rgba(0,0,0,.6)}
.ow-dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);animation:blink 1.6s steps(1) infinite;flex:none}
.ow-name{
  flex:1;color:#fff;font-family:var(--font-display);letter-spacing:1px;
  font-size:11px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ow-toggle{
  flex:none;background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.6);color:#fff;
  font-family:var(--font);line-height:1;width:18px;height:16px;cursor:pointer;padding:0;
}
.ow-toggle:hover{background:rgba(0,0,0,.6)}
.ow-body{padding:10px;max-height:220px;overflow:hidden;transition:max-height .15s,padding .15s}
.objective-widget.collapsed .ow-body{max-height:0;padding:0 10px}
.ow-op-title{color:var(--green);font-family:var(--font-display);letter-spacing:.5px;text-transform:uppercase;font-size:13px;margin-bottom:4px}
.ow-progress{color:var(--amber);font-size:11px;margin-bottom:6px}
.ow-step{color:var(--fg);line-height:1.4}
.ow-done{color:var(--muted);font-size:11px;margin-top:2px}

/* uploaded gif/asset placements */
.boot-art{
  display:block;max-width:200px;margin:30px auto 0;position:relative;z-index:1;
  border-radius:6px;filter:drop-shadow(0 0 20px rgba(198,255,58,.3));
}
#logoreveal{
  background:#000;display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.logo-reveal-img{
  width:100%;height:100%;object-fit:cover;
  filter:drop-shadow(0 0 60px rgba(155,47,224,.45));
}
.logo-reveal-hint{
  position:absolute;bottom:28px;left:0;right:0;text-align:center;
  color:var(--muted);font-size:12px;letter-spacing:2px;text-transform:uppercase;
  animation:flick 3s infinite;
}
.login-accent{
  position:absolute;left:4%;bottom:5%;width:130px;border-radius:8px;opacity:.9;z-index:1;
  box-shadow:0 0 20px rgba(0,0,0,.6);filter:drop-shadow(0 0 14px rgba(198,255,58,.3));
}
.app-thumb{
  display:block;width:160px;max-width:40%;margin:0 0 10px;border-radius:4px;
  border:1px solid var(--line);opacity:.92;box-shadow:0 0 16px rgba(0,0,0,.5);
}

/* statusbar */
.statusbar{display:flex;gap:16px;padding:5px 12px;background:var(--ink);border-top:1px solid var(--line);font-size:12px}
#sb-user{color:var(--green)}
#sb-msg{color:var(--muted)}

/* overlay */
.overlay{
  position:fixed;inset:0;z-index:5000;display:flex;align-items:center;justify-content:center;padding:30px;
  background:
    linear-gradient(rgba(4,1,9,.88),rgba(4,1,9,.88)),
    url("GIFs-Assets/dedsecfranken.png") center/cover no-repeat,
    rgba(4,1,9,.94);
}
#overlay-content{
  max-width:760px;width:100%;border:2px solid var(--magenta);background:var(--bg2);padding:30px;
  box-shadow:8px 8px 0 var(--purple-dim),0 0 40px rgba(255,47,146,.3);
  white-space:pre-wrap;max-height:88vh;overflow:auto;
}

/* cursor */
.cursor{display:inline-block;width:9px;height:16px;background:var(--green);animation:blink 1s steps(1) infinite;vertical-align:middle;box-shadow:0 0 8px var(--green)}
@keyframes blink{50%{opacity:0}}
@keyframes flick{0%,97%,100%{opacity:1}98%{opacity:.3}99%{opacity:.8}}
@keyframes slidein{from{transform:translateX(-12px);opacity:0}to{transform:none;opacity:1}}
@keyframes logoglitch{
  0%,92%,100%{text-shadow:2px 0 var(--magenta),-2px 0 var(--cyan)}
  93%{text-shadow:-3px 0 var(--cyan),3px 0 var(--purple)}
  95%{text-shadow:3px 1px var(--magenta),-2px -1px var(--purple2)}
  97%{text-shadow:-2px 0 var(--green),2px 0 var(--magenta)}
}
.glitch{animation:glitch .3s steps(2) infinite}
@keyframes glitch{0%{text-shadow:2px 0 var(--magenta),-2px 0 var(--cyan)}50%{text-shadow:-2px 0 var(--purple2),2px 0 var(--green)}100%{text-shadow:2px 0 var(--magenta),-2px 0 var(--cyan)}}

/* halftone skull / hooded-figure watermarks */
.skull-bg{position:absolute;pointer-events:none;opacity:.3;z-index:0;
  filter:drop-shadow(0 0 25px rgba(155,47,224,.25))}
.sk-m{mix-blend-mode:screen}
.login-box{position:relative;z-index:1}
.boot-log{position:relative;z-index:1}
.skull-boot{width:210px;height:252px;right:16px;bottom:0;opacity:.16}
.skull-overlay{width:300px;height:360px;top:-28px;right:-22px;opacity:.26;
  animation:skullpulse 2.4s ease-in-out infinite}
#overlay-content{position:relative;z-index:1}
.expose-gif{display:block;width:100%;max-width:340px;margin:0 auto 20px;border:2px solid var(--magenta);
  box-shadow:0 0 24px rgba(255,47,146,.4);image-rendering:pixelated}
.tb-skull{width:16px;height:18px;display:inline-block;vertical-align:-3px;margin-right:6px;opacity:.9}
@keyframes skullpulse{
  0%,100%{opacity:.2;filter:drop-shadow(0 0 18px rgba(47,232,255,.3))}
  50%{opacity:.4;filter:drop-shadow(0 0 32px rgba(255,47,146,.5))}
}

/* repeating stamp-pattern collage wallpaper */
.stamp-wallpaper{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}

/* comic shout-burst sticker */
.comic-burst{
  position:absolute;width:170px;height:132px;background:#f2ecff;z-index:5;
  clip-path:polygon(50% 0%,61% 22%,85% 12%,78% 36%,100% 46%,80% 58%,90% 82%,65% 72%,
    54% 98%,42% 74%,15% 85%,24% 58%,0% 48%,22% 36%,14% 12%,39% 22%);
  display:flex;align-items:center;justify-content:center;text-align:center;
  font-family:var(--font-display);color:var(--ink);text-transform:uppercase;
  font-size:16px;line-height:1.15;letter-spacing:.5px;padding:16px;pointer-events:none;
}
.comic-burst::before{content:"";position:absolute;inset:-7px;background:var(--ink);clip-path:inherit;z-index:-1}
.music-widget{left:16px;right:auto;bottom:38px;width:300px}
.music-body{padding:8px}
.music-body iframe{display:block;border-radius:4px;width:100%}

.burst-login{top:6%;right:4%;transform:rotate(-7deg)}
.burst-overlay{top:-22px;left:-16px;transform:rotate(-9deg);width:140px;height:108px;font-size:13px}

/* scrollbars */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--purple)}
::-webkit-scrollbar-track{background:transparent}
