/* Hacker / terminal theme: overrides base.css. Also the confirm dialog, the tabs, section headings and run results. */
:root { --bg:#05070a; --panel:#0a0f14; --panel2:#0d141b; --line:#16222b; --text:#c9e4d6; --dim:#5f7a70;
        --neon:#00ff9c; --cyan:#22d3ee; --green:#00ff9c; --red:#ff3860; --yellow:#ffd23f; --blue:#22d3ee; }
body { font:13px/1.45 "JetBrains Mono","SF Mono",ui-monospace,Menlo,monospace; color:var(--text);
       background:
         repeating-linear-gradient(0deg, #ffffff05 0 1px, transparent 1px 3px),
         radial-gradient(900px 420px at 10% -10%, #00ff9c14, transparent 60%),
         radial-gradient(800px 400px at 100% 0%, #22d3ee10, transparent 60%), var(--bg);
       background-attachment:fixed; }
.wrap { padding:0 32px; }
header { background:#070b0fe6 !important; border-bottom:1px solid #00ff9c33; box-shadow:0 1px 24px #00ff9c0f; }
header .wrap { height:68px; gap:18px; }
header h1 { font-size:15px !important; letter-spacing:.08em; text-transform:uppercase; background:none; color:var(--neon);
            -webkit-text-fill-color:var(--neon); text-shadow:0 0 12px #00ff9c88; }
header h1::before { content:"> "; opacity:.7; }
header h1::after { content:"_"; animation:blink 1s steps(1) infinite; }
@keyframes blink { 50% { opacity:0; } }
.pill { background:#00ff9c0d; border:1px solid #00ff9c33; color:var(--dim); border-radius:6px; padding:4px 12px; }
.pill.ok b { text-shadow:0 0 8px var(--green); }
main.wrap { padding:36px 32px 56px; }
.wrap { max-width:none; }
#logs { position:fixed; inset:0; z-index:50; margin:0 !important; border-radius:0 !important; border:none; flex-direction:column; background:#030506; }
#logs .bar { padding:14px 24px; gap:14px; border-bottom:1px solid #00ff9c33; background:#070b0f; }
#logs .bar strong { color:var(--neon); font-size:14px; text-shadow:0 0 10px #00ff9c66; }
#logs .bar strong::before { content:"> "; opacity:.7; }
#logs .bar input[type=text] { width:320px; }
#logbody { flex:1; height:auto !important; padding:16px 24px; font-size:13px; }
.kbd { font-size:11px; padding:1px 6px; border:1px solid #1d2f38; border-radius:4px; color:var(--dim); }
col.c-port { width:104px !important; } col.c-env { width:280px !important; }
.name2 .chip { white-space:nowrap; }
.name2 .chip.pub { max-width:340px; overflow:hidden; text-overflow:ellipsis; }
tbody tr[data-id], tbody tr[data-target], tbody tr[data-file] { cursor:pointer; }
tbody tr[data-file]:hover td { background:#0e1a1a; }
tbody tr.sel td { background:#0f2420 !important; }
tbody tr.sel td:first-child { box-shadow:inset 3px 0 0 var(--neon); }
td.namecell { white-space:normal !important; overflow:visible !important; }
tbody tr:not(.group) td { height:60px; }
.name2 { display:flex; flex-direction:column; gap:5px; min-width:0; }
.name2 strong { font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.name2 .sub { display:flex; align-items:center; gap:8px; min-width:0; overflow:hidden; }
.name2 .sub:empty { display:none; }
.name2 .note { flex:1 1 0; }
.portlink { color:var(--cyan); font-weight:500; padding:3px 8px; border:1px solid #22d3ee33; border-radius:5px; background:#22d3ee0d; }
.portlink:hover { background:#22d3ee22; border-color:#22d3ee88; text-decoration:none; box-shadow:0 0 10px #22d3ee44; }
a.ib { display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; border:1px solid #16222b; border-radius:6px; background:#0b1117; color:var(--dim); }
a.ib.open { color:var(--cyan); } a.ib.open:hover { text-decoration:none; background:#22d3ee1a; border-color:#22d3ee88; box-shadow:0 0 12px #22d3ee55; }
a.ib.off { opacity:.3; pointer-events:none; }
col.c-act { width:216px !important; }
th, td { padding:0 14px !important; }
th:first-child, td:first-child { padding-left:22px !important; }
col.c-port { width:80px; } col.c-pid { width:96px; } col.c-up { width:100px; } col.c-status { width:170px; }
.card { background:#0a0f14ee; border:1px solid #00ff9c22; border-radius:10px !important; box-shadow:0 0 0 1px #000, 0 12px 50px #000a, 0 0 40px #00ff9c0a; }
th, td { padding:0 20px; height:52px; }
thead th { height:40px; color:var(--neon); opacity:.75; background:#08110f; letter-spacing:.14em; font-size:11px; }
tr.group td { height:34px; background:#0b1317; color:var(--cyan); border-left:3px solid var(--cyan); letter-spacing:.16em; }
tr.group td::before { content:"// "; opacity:.6; }
tbody tr:not(.group):hover td { background:#0e1a1a; box-shadow:inset 2px 0 0 var(--neon); }
button { background:#0c141a; border:1px solid #1d2f38; border-radius:6px; color:var(--text); font-family:inherit; }
button:hover:not(:disabled) { background:#122028; border-color:#00ff9c55; }
button.primary { background:#00ff9c18; border-color:#00ff9c88; color:var(--neon); }
button.primary:hover:not(:disabled) { background:#00ff9c30; box-shadow:0 0 14px #00ff9c44; }
button.danger { color:var(--red); } button.danger:hover:not(:disabled) { background:#ff386018; border-color:var(--red); box-shadow:0 0 14px #ff386044; }
.ib { border-color:#16222b; background:#0b1117; }
.ib.start:hover:not(:disabled) { box-shadow:0 0 12px #00ff9c55; background:#00ff9c1a; border-color:#00ff9c88; color:var(--neon); }
.ib.restart:hover:not(:disabled) { box-shadow:0 0 12px #22d3ee55; background:#22d3ee1a; border-color:#22d3ee88; color:var(--cyan); }
.ib.stop:hover:not(:disabled) { box-shadow:0 0 12px #ff386055; background:#ff38601a; border-color:var(--red); color:var(--red); }
.ib.logs:hover:not(:disabled) { box-shadow:0 0 12px #ffd23f44; background:#ffd23f14; border-color:#ffd23f88; color:var(--yellow); }
.acts { gap:8px; } col.c-act { width:176px; }
.up .dot { box-shadow:0 0 10px var(--green); } .up .st { color:var(--green); text-shadow:0 0 8px #00ff9c66; }
.st { text-transform:uppercase; letter-spacing:.08em; font-size:12px; }
.down .st, .crashed .st { color:var(--red); }
.chip { border-radius:4px; } .name .link { color:var(--cyan); }
select, #logs .bar input[type=text] { background:#070b0f; border:1px solid #1d2f38; color:var(--text); font-family:inherit; border-radius:6px; }
#logbody { background:#030506; color:#9fe8c4; }
#logs { margin-top:28px; }
#toast { background:#0a0f14 !important; border:1px solid #00ff9c66 !important; color:var(--neon); box-shadow:0 0 20px #00ff9c33 !important; }
#modal { display:none; position:fixed; inset:0; z-index:100; align-items:center; justify-content:center; background:#000b; backdrop-filter:blur(3px); }
#modal .box { width:min(480px, calc(100vw - 32px)); background:#0a0f14; border:1px solid #00ff9c44; border-radius:10px; padding:22px 24px;
              box-shadow:0 0 0 1px #000, 0 20px 70px #000c, 0 0 40px #00ff9c14; }
#modal .mtitle { color:var(--neon); font-weight:600; font-size:14px; letter-spacing:.08em; text-transform:uppercase; text-shadow:0 0 10px #00ff9c66; margin-bottom:14px; }
#modal .mtitle::before { content:"> "; opacity:.7; }
#modal .mmsg { color:var(--text); white-space:pre-wrap; line-height:1.55; margin-bottom:22px; }
#modal .mbtns { display:flex; justify-content:flex-end; gap:10px; }
#modal button:focus-visible { outline:2px solid var(--cyan); outline-offset:2px; }
nav.tabs { display:flex; gap:6px; margin-left:8px; }
nav.tabs a { padding:6px 14px; border:1px solid transparent; border-radius:6px; color:var(--dim); text-transform:uppercase; letter-spacing:.1em; font-size:12px; }
nav.tabs a:hover { text-decoration:none; color:var(--text); background:#0e1a1a; }
nav.tabs a.active { color:var(--neon); border-color:#00ff9c55; background:#00ff9c10; text-shadow:0 0 8px #00ff9c66; }
h2.sect { margin:34px 0 12px; font-size:12px; text-transform:uppercase; letter-spacing:.16em; color:var(--cyan); font-weight:600; }
h2.sect::before { content:"// "; opacity:.6; }
.res-succeeded { color:var(--green); } .res-FAILED, .res-interrupted { color:var(--red); } .res-cancelled { color:var(--yellow); }
.running-tag { color:var(--yellow); }
