:root{--bg:#020604;--bg-soft:#05140b;--bg-panel:rgba(0, 20, 5, 0.82);--fg:#00ff41;--fg-dim:#00aa2b;--fg-accent:#80ff9e;--fg-warn:#f4c542;--fg-err:#ff5b5b;--fg-info:#66d9ef;--border:#0e4a23;--border-hi:#00ff41;--shadow:0 0 24px rgba(0, 255, 65, 0.18);--mono:"JetBrains Mono","Fira Code",Menlo,Consolas,monospace;--crt:"VT323",var(--mono)}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;background:var(--bg);color:var(--fg);font-family:var(--mono);font-size:14px;line-height:1.5;overflow-x:hidden}body{background:radial-gradient(ellipse at top,#061b0c 0,#020604 45%,#000 100%);animation:flicker 4.5s infinite}a{color:var(--fg-accent);text-decoration:none}a:hover{text-decoration:underline}kbd{background:#0a1f12;border:1px solid var(--border);padding:0 .35rem;border-radius:3px;font-size:.85em}.scanline{position:fixed;inset:0;pointer-events:none;z-index:20;background:repeating-linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,0) 2px,rgba(0,0,0,.16) 3px,rgba(0,0,0,0) 4px);mix-blend-mode:multiply}.crt{position:fixed;inset:0;pointer-events:none;z-index:21;background:radial-gradient(ellipse at center,rgba(0,0,0,0) 55%,rgba(0,0,0,.55) 100%)}@keyframes flicker{0%,100%,19.9%,22%,62.9%,64%,64.9%,70%{opacity:1}20%,21.9%,63%,63.9%,65%,69.9%{opacity:.96}}.hdr{display:flex;justify-content:space-between;align-items:center;padding:.6rem 1rem;border-bottom:1px solid var(--border);background:linear-gradient(180deg,#06170c,#020604);position:sticky;top:0;z-index:10}.hdr-left{display:flex;align-items:center;gap:.5rem}.hdr-title{margin-left:.5rem;color:var(--fg-accent);font-weight:600;letter-spacing:.5px}.dot{width:10px;height:10px;border-radius:50%;box-shadow:0 0 6px currentColor}.dot-red{background:#ff5b5b;color:#ff5b5b}.dot-yel{background:#f4c542;color:#f4c542}.dot-grn{background:#00ff41;color:#00ff41}.hdr-right{display:flex;align-items:center;gap:.9rem;font-family:var(--crt);font-size:1.15rem}.hdr-clock{color:var(--fg-dim);letter-spacing:1px}.status{padding:.15rem .55rem;border:1px solid var(--border);border-radius:3px;font-size:.85rem;font-family:var(--mono)}.status-idle{color:var(--fg-dim)}.status-busy{color:var(--fg-warn);border-color:var(--fg-warn);animation:blink 1s infinite}.status-ok{color:var(--fg-accent);border-color:var(--border-hi)}.status-err{color:var(--fg-err);border-color:var(--fg-err)}@keyframes blink{50%{opacity:.35}}.grid{display:grid;grid-template-columns:minmax(320px,420px) 1fr;gap:1rem;padding:1rem;min-height:calc(100vh - 110px)}@media (max-width:900px){.grid{grid-template-columns:1fr}}.panel{background:var(--bg-panel);border:1px solid var(--border);box-shadow:var(--shadow),inset 0 0 20px rgba(0,0,0,.5);padding:1rem;position:relative}.panel::before{content:"";position:absolute;inset:0;pointer-events:none;border:1px dashed rgba(0,255,65,.1);margin:4px}.panel-title{margin:0 0 .8rem;font-size:.95rem;letter-spacing:1px;color:var(--fg-accent);text-transform:uppercase;border-bottom:1px dashed var(--border);padding-bottom:.4rem}.tabs{display:flex;gap:.4rem;margin-bottom:.75rem}.tab{flex:1;background:0 0;border:1px solid var(--border);color:var(--fg-dim);padding:.45rem .5rem;font-family:var(--mono);font-size:.85rem;cursor:pointer;transition:all .15s ease}.tab:hover{color:var(--fg);border-color:var(--border-hi)}.tab-active{color:var(--bg);background:var(--border-hi);border-color:var(--border-hi);box-shadow:0 0 10px rgba(0,255,65,.5);font-weight:700}.tab-panel{display:none}.tab-panel-active{display:block}.lbl{display:block;margin:.6rem 0 .25rem;color:var(--fg-dim);font-size:.75rem;text-transform:uppercase;letter-spacing:1.5px}.inp{width:100%;background:#020a05;border:1px solid var(--border);color:var(--fg);padding:.5rem .65rem;font-family:var(--mono);font-size:.9rem;outline:0;transition:border-color .15s,box-shadow .15s}.inp:focus{border-color:var(--border-hi);box-shadow:0 0 0 2px rgba(0,255,65,.18)}.inp-area{resize:vertical;min-height:140px}select.inp{appearance:none;cursor:pointer}select.inp option{background:#020a05;color:var(--fg)}.btn-row{display:flex;gap:.5rem;margin-top:.9rem;flex-wrap:wrap}.btn{flex:1;min-width:110px;background:0 0;color:var(--fg);border:1px solid var(--border-hi);padding:.55rem .7rem;font-family:var(--mono);font-size:.88rem;cursor:pointer;letter-spacing:1px;transition:all .15s ease}.btn:hover{background:rgba(0,255,65,.12)}.btn-run{color:var(--fg-accent)}.btn-run:hover{background:var(--border-hi);color:var(--bg);font-weight:700}.btn-clear{color:var(--fg-dim);border-color:var(--border)}.btn[disabled]{opacity:.45;cursor:not-allowed}.module-help{margin-top:.8rem}.hint{color:var(--fg-dim);font-size:.8rem;margin:.4rem 0 0}.panel-term{display:flex;flex-direction:column}.panel-term-head{display:flex;justify-content:space-between;align-items:center;gap:.5rem;flex-wrap:wrap}.term-controls{display:flex;gap:.3rem}.btn-mini{background:0 0;border:1px solid var(--border);color:var(--fg-dim);font-family:var(--mono);font-size:.72rem;padding:.2rem .45rem;cursor:pointer;letter-spacing:1px}.btn-mini:hover{color:var(--fg);border-color:var(--border-hi)}.terminal{flex:1;min-height:60vh;max-height:calc(100vh - 190px);overflow-y:auto;background:#000;border:1px solid var(--border);padding:.8rem;font-size:.86rem;white-space:pre-wrap;word-break:break-word;scrollbar-width:thin;scrollbar-color:var(--border-hi) #000}.terminal::-webkit-scrollbar{width:8px}.terminal::-webkit-scrollbar-thumb{background:var(--border)}.terminal::-webkit-scrollbar-thumb:hover{background:var(--border-hi)}.term-line{padding:1px 0}.term-line-sys{color:var(--fg-dim)}.term-line-cmd{color:var(--fg-accent)}.term-line-ok{color:var(--fg)}.term-line-warn{color:var(--fg-warn)}.term-line-err{color:var(--fg-err)}.term-line-info{color:var(--fg-info)}.term-line-ws{color:var(--fg)}.ansi-black{color:#6b6b6b}.ansi-red{color:#ff6b6b}.ansi-green{color:#00ff41}.ansi-yellow{color:#f4c542}.ansi-blue{color:#6af}.ansi-magenta{color:#d17bff}.ansi-cyan{color:#6fe7ff}.ansi-white{color:#e6e6e6}.ansi-bright-black{color:#9a9a9a}.ansi-bright-red{color:#ff8b8b}.ansi-bright-green{color:#80ff9e}.ansi-bright-yellow{color:#ffd36a}.ansi-bright-blue{color:#8ec5ff}.ansi-bright-magenta{color:#e4a5ff}.ansi-bright-cyan{color:#b3f3ff}.ansi-bright-white{color:#fff}.term-line .ts{color:var(--fg-dim);margin-right:.5rem}.term-line .tag{display:inline-block;min-width:54px;margin-right:.4rem}.ansi-black .hl-counter,.ansi-black .hl-key,.ansi-black .hl-number,.ansi-black .hl-sep,.ansi-black .hl-tag,.ansi-black .hl-url,.ansi-blue .hl-counter,.ansi-blue .hl-key,.ansi-blue .hl-number,.ansi-blue .hl-sep,.ansi-blue .hl-tag,.ansi-blue .hl-url,.ansi-bright-black .hl-counter,.ansi-bright-black .hl-key,.ansi-bright-black .hl-number,.ansi-bright-black .hl-sep,.ansi-bright-black .hl-tag,.ansi-bright-black .hl-url,.ansi-bright-blue .hl-counter,.ansi-bright-blue .hl-key,.ansi-bright-blue .hl-number,.ansi-bright-blue .hl-sep,.ansi-bright-blue .hl-tag,.ansi-bright-blue .hl-url,.ansi-bright-cyan .hl-counter,.ansi-bright-cyan .hl-key,.ansi-bright-cyan .hl-number,.ansi-bright-cyan .hl-sep,.ansi-bright-cyan .hl-tag,.ansi-bright-cyan .hl-url,.ansi-bright-green .hl-counter,.ansi-bright-green .hl-key,.ansi-bright-green .hl-number,.ansi-bright-green .hl-sep,.ansi-bright-green .hl-tag,.ansi-bright-green .hl-url,.ansi-bright-magenta .hl-counter,.ansi-bright-magenta .hl-key,.ansi-bright-magenta .hl-number,.ansi-bright-magenta .hl-sep,.ansi-bright-magenta .hl-tag,.ansi-bright-magenta .hl-url,.ansi-bright-red .hl-counter,.ansi-bright-red .hl-key,.ansi-bright-red .hl-number,.ansi-bright-red .hl-sep,.ansi-bright-red .hl-tag,.ansi-bright-red .hl-url,.ansi-bright-white .hl-counter,.ansi-bright-white .hl-key,.ansi-bright-white .hl-number,.ansi-bright-white .hl-sep,.ansi-bright-white .hl-tag,.ansi-bright-white .hl-url,.ansi-bright-yellow .hl-counter,.ansi-bright-yellow .hl-key,.ansi-bright-yellow .hl-number,.ansi-bright-yellow .hl-sep,.ansi-bright-yellow .hl-tag,.ansi-bright-yellow .hl-url,.ansi-cyan .hl-counter,.ansi-cyan .hl-key,.ansi-cyan .hl-number,.ansi-cyan .hl-sep,.ansi-cyan .hl-tag,.ansi-cyan .hl-url,.ansi-green .hl-counter,.ansi-green .hl-key,.ansi-green .hl-number,.ansi-green .hl-sep,.ansi-green .hl-tag,.ansi-green .hl-url,.ansi-magenta .hl-counter,.ansi-magenta .hl-key,.ansi-magenta .hl-number,.ansi-magenta .hl-sep,.ansi-magenta .hl-tag,.ansi-magenta .hl-url,.ansi-red .hl-counter,.ansi-red .hl-key,.ansi-red .hl-number,.ansi-red .hl-sep,.ansi-red .hl-tag,.ansi-red .hl-url,.ansi-white .hl-counter,.ansi-white .hl-key,.ansi-white .hl-number,.ansi-white .hl-sep,.ansi-white .hl-tag,.ansi-white .hl-url,.ansi-yellow .hl-counter,.ansi-yellow .hl-key,.ansi-yellow .hl-number,.ansi-yellow .hl-sep,.ansi-yellow .hl-tag,.ansi-yellow .hl-url{color:inherit!important;text-decoration:inherit!important}.ftr{display:flex;gap:.6rem;align-items:center;padding:.4rem 1rem;border-top:1px solid var(--border);font-size:.75rem;color:var(--fg-dim)}.ftr .sep{opacity:.5}.dev-panel{margin-top:1rem}.dev-panel hr{border:0;border-top:1px dashed var(--border);margin:.6rem 0}.btn.btn-mini-wide{flex:1;min-width:0;padding:.35rem .45rem;font-size:.78rem;color:var(--fg-dim);border-color:var(--border)}.btn.btn-mini-wide:hover{color:var(--fg-accent);border-color:var(--border-hi);background:rgba(0,255,65,.08)}.live-dot{width:10px;height:10px;border-radius:50%;background:#2a2a2a;box-shadow:0 0 0 0 rgba(74,252,121,0);transition:background .2s ease}.live-dot.on{background:var(--fg-accent);animation:live-pulse 1.6s ease-in-out infinite}.live-dot.ping{animation:live-flash .55s ease-out 1,live-pulse 1.6s ease-in-out infinite .55s}@keyframes live-pulse{0%{box-shadow:0 0 0 0 rgba(0,255,65,.55)}70%{box-shadow:0 0 0 8px rgba(0,255,65,0)}100%{box-shadow:0 0 0 0 rgba(0,255,65,0)}}@keyframes live-flash{0%{transform:scale(1);filter:brightness(1.6)}100%{transform:scale(1);filter:brightness(1)}}.live-label{font-family:var(--crt);font-size:1rem;color:var(--fg-dim);letter-spacing:2px}.live-label.on{color:var(--fg-accent)}.live-label.err{color:var(--fg-err)}.activity{font-family:var(--mono);font-size:.78rem;color:var(--fg-info);letter-spacing:.5px;max-width:32ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-left:1px dashed var(--border);padding-left:.6rem}.activity::after{content:"";display:inline-block;width:1em;text-align:left;animation:act-dots 1.1s steps(4,end) infinite}@keyframes act-dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}100%{content:""}}.resume-banner{display:flex;align-items:center;gap:.7rem;padding:.4rem 1rem;background:rgba(244,197,66,.08);border-bottom:1px solid rgba(244,197,66,.35);font-size:.82rem;color:var(--fg-warn);letter-spacing:.5px}.resume-dot{width:8px;height:8px;border-radius:50%;background:var(--fg-warn);flex-shrink:0;animation:blink .9s infinite}.resume-banner .btn-mini{margin-left:auto;color:var(--fg-warn);border-color:rgba(244,197,66,.4);font-size:.72rem}.resume-banner .btn-mini:hover{background:rgba(244,197,66,.15);border-color:var(--fg-warn)}.term-dots{display:inline-block;position:relative;width:1em;height:1em;vertical-align:middle;margin:0 .25em}.term-dots::before{content:"";display:block;width:.75em;height:.75em;border:2px solid var(--fg-dim);border-top-color:var(--fg-accent);border-radius:50%;animation:term-spin .7s linear infinite;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes term-spin{to{transform:translate(-50%,-50%) rotate(360deg)}}.term-line-pending{opacity:.65;font-style:italic}.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh}.login-wrap{width:100%;max-width:440px;padding:1rem}.login-box{background:var(--bg-panel);border:1px solid var(--border);box-shadow:var(--shadow),inset 0 0 20px rgba(0,0,0,.5);padding:1.4rem 1.6rem 1.8rem;position:relative}.login-box::before{content:"";position:absolute;inset:0;pointer-events:none;border:1px dashed rgba(0,255,65,.1);margin:4px}.login-hdr{display:flex;align-items:center;gap:.45rem;margin-bottom:1.1rem;padding-bottom:.6rem;border-bottom:1px dashed var(--border)}.login-title{margin-left:.3rem;color:var(--fg-accent);font-size:.9rem;letter-spacing:.5px}.flash{padding:.45rem .7rem;margin-bottom:.8rem;font-size:.82rem;border-left:3px solid var(--fg-warn);color:var(--fg-warn);background:rgba(244,197,66,.07)}.flash.err{border-color:var(--fg-err);color:var(--fg-err);background:rgba(255,91,91,.07)}.flash.ok{border-color:var(--fg-accent);color:var(--fg-accent);background:rgba(0,255,65,.07)}.hdr-user{color:var(--fg-dim);font-size:.78rem;letter-spacing:.5px;max-width:14ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hdr-user::before{content:"[ ";color:var(--border-hi)}.hdr-user::after{content:" ]";color:var(--border-hi)}.login-gate{padding:1.2rem 1rem;border:1px dashed var(--border);text-align:center;margin-bottom:.8rem}.login-gate-msg{color:var(--fg-warn);font-size:.88rem;margin:0 0 .9rem;letter-spacing:.5px}.login-gate-icon{margin-right:.4rem}.hdr-login{display:inline-block;background:0 0;border:1px solid var(--border-hi);color:var(--fg-accent);font-family:var(--mono);font-size:.72rem;padding:.2rem .55rem;letter-spacing:1px;text-decoration:none;cursor:pointer}.hdr-login:hover{background:rgba(0,255,65,.12);text-decoration:none}.link-btn{background:0 0;border:none;color:var(--fg-accent);font-family:var(--mono);font-size:.82rem;cursor:pointer;padding:0;text-decoration:underline}.link-btn:hover{color:var(--fg)}.tg-btn{width:100%;justify-content:center}.auth-links{display:flex;align-items:center;gap:.5rem;margin-top:1rem;padding-top:.7rem;border-top:1px dashed var(--border);font-size:.78rem;flex-wrap:wrap}.auth-sep{color:var(--border-hi);opacity:.5}.hdr-points{font-family:var(--mono);font-size:.75rem;padding:.15rem .5rem;border:1px solid var(--border);color:var(--fg-accent);letter-spacing:.5px;min-width:4.5ch;text-align:center}.hdr-points-admin{color:var(--fg-dim);border-color:var(--border)}.hdr-points-low{color:var(--fg-warn);border-color:var(--fg-warn);animation:blink .9s infinite}.panel-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:.8rem;padding-bottom:.4rem;border-bottom:1px dashed var(--border)}.panel-title-row .panel-title{margin-bottom:0;padding-bottom:0;border-bottom:none}.points-badge{display:flex;align-items:center;gap:.3rem;padding:.3rem .7rem;border:1px solid var(--border-hi);background:rgba(0,255,65,.06);box-shadow:0 0 12px rgba(0,255,65,.22),inset 0 0 8px rgba(0,255,65,.05);animation:pts-pulse 3s ease-in-out infinite}.points-icon{color:var(--fg-accent);font-size:1rem;line-height:1;animation:pts-spin 4s linear infinite;display:inline-block}.points-value{font-family:var(--crt);font-size:1.35rem;color:var(--fg-accent);letter-spacing:1px;min-width:3ch;text-align:right;text-shadow:0 0 8px rgba(0,255,65,.7);transition:color .3s ease,text-shadow .3s ease}.points-label{font-size:.7rem;color:var(--fg-dim);letter-spacing:2px;text-transform:uppercase;align-self:flex-end;padding-bottom:.1rem}.points-badge.pts-low{border-color:var(--fg-warn);background:rgba(244,197,66,.06);box-shadow:0 0 12px rgba(244,197,66,.25),inset 0 0 8px rgba(244,197,66,.05);animation:pts-warn-pulse .9s ease-in-out infinite}.points-badge.pts-low .points-value{color:var(--fg-warn);text-shadow:0 0 8px rgba(244,197,66,.7)}.points-badge.pts-low .points-icon{color:var(--fg-warn)}.points-badge.pts-admin{border-color:var(--border);background:0 0;box-shadow:none;animation:none}.points-badge.pts-admin .points-value{color:var(--fg-dim);text-shadow:none}.points-badge.pts-admin .points-icon{color:var(--fg-dim);animation:none}@keyframes pts-pulse{0%,100%{box-shadow:0 0 12px rgba(0,255,65,.22),inset 0 0 8px rgba(0,255,65,.05)}50%{box-shadow:0 0 20px rgba(0,255,65,.45),inset 0 0 12px rgba(0,255,65,.1)}}@keyframes pts-warn-pulse{0%,100%{box-shadow:0 0 10px rgba(244,197,66,.25)}50%{box-shadow:0 0 22px rgba(244,197,66,.55)}}@keyframes pts-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}