:root { --bg:#0e0f11; --card:#17191c; --line:#2a2d32; --txt:#e8e9eb; --mut:#8b9098; --red:#e31937; --ok:#3ecf8e; --warn:#f5a623; }
* { box-sizing: border-box; }
body { margin:0; background:var(--bg); color:var(--txt); font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif; }
header { display:flex; align-items:center; justify-content:space-between; padding:14px 20px; border-bottom:1px solid var(--line); }
.brand { color:var(--txt); text-decoration:none; font-weight:700; letter-spacing:.08em; }
.brand span { color:var(--red); } .brand small { color:var(--mut); font-weight:400; letter-spacing:0; margin-left:8px; }
.logout { display:flex; gap:10px; align-items:center; } .who { color:var(--mut); }
main { max-width:1000px; margin:0 auto; padding:20px 16px 60px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:20px; margin-bottom:20px; }
h1 { font-size:20px; margin:0 0 14px; } h2 { font-size:15px; margin:20px 0 10px; color:var(--mut); text-transform:uppercase; letter-spacing:.06em; }
label { display:flex; flex-direction:column; gap:4px; color:var(--mut); font-size:13px; }
label.check, .rcheck { flex-direction:row; align-items:center; gap:8px; color:var(--txt); font-size:14px; }
input, select { background:#0b0c0e; color:var(--txt); border:1px solid var(--line); border-radius:8px; padding:9px 11px; font:inherit; }
input:focus, select:focus { outline:2px solid var(--red); outline-offset:-1px; }
button, .button { background:var(--red); color:#fff; border:0; border-radius:8px; padding:9px 16px; font:inherit; font-weight:600; cursor:pointer; text-decoration:none; display:inline-block; }
button:disabled { opacity:.5; cursor:default; }
button.ghost { background:transparent; border:1px solid var(--line); color:var(--txt); font-weight:400; }
button.danger { background:#5a1320; } .button.small { padding:4px 10px; font-size:13px; }
.row { display:flex; gap:12px; flex-wrap:wrap; align-items:flex-end; margin:10px 0; } .row.end { justify-content:flex-end; align-items:center; }
.grow { flex:1; min-width:180px; }
.login { max-width:360px; margin:60px auto; display:flex; flex-direction:column; gap:14px; }
.err { color:#ff6b7d; } .warn { color:var(--warn); } .muted { color:var(--mut); } .mono { font-family:ui-monospace,Consolas,monospace; font-size:12px; }
.rlist { max-height:380px; overflow:auto; border:1px solid var(--line); border-radius:8px; padding:8px 12px; background:#0b0c0e; }
.rlist .rcheck { padding:3px 0; } details > summary { list-style:none; cursor:pointer; } details > summary::before { content:"▸ "; color:var(--mut); float:left; margin-right:4px; line-height:28px; }
details[open] > summary::before { content:"▾ "; } .sub { padding-left:22px; }
.chips { display:flex; flex-wrap:wrap; gap:6px; margin:8px 0; }
.chip { background:#2a1116; border:1px solid var(--red); color:var(--txt); padding:3px 10px; border-radius:20px; font-weight:400; font-size:13px; }
table.jobs { width:100%; border-collapse:collapse; } .jobs th, .jobs td { text-align:left; padding:8px 6px; border-bottom:1px solid var(--line); }
.jobs th { color:var(--mut); font-weight:500; font-size:13px; } .jobs a { color:var(--txt); }
a { color:var(--txt); }
.badge { display:inline-block; padding:2px 10px; border-radius:20px; background:var(--line); font-size:13px; }
.badge.done { background:#123d2a; color:var(--ok); } .badge.failed { background:#4a1119; color:#ff6b7d; } .badge.running { background:#3d2f10; color:var(--warn); }
.bar { height:8px; background:#0b0c0e; border-radius:4px; overflow:hidden; margin:14px 0; } #j-bar { height:100%; width:0; background:var(--red); transition:width .6s; }
.steps { padding-left:20px; color:var(--mut); } .steps li.ok { color:var(--ok); } .steps li.cur { color:var(--warn); font-weight:600; } .steps li.bad { color:#ff6b7d; }
.log { background:#0b0c0e; border:1px solid var(--line); border-radius:8px; padding:12px; max-height:380px; overflow:auto; font:12px/1.45 ui-monospace,Consolas,monospace; white-space:pre-wrap; }
@media (max-width:600px) { .jobs th:nth-child(4), .jobs td:nth-child(4) { display:none; } }
