:root{--text:#d8e0ea;--text-dim:#8b97a6;--text-h:#f2f6fb;--bg:#0d1117;--bg-soft:#131a23;--card:#151d27;--card-border:#232d3b;--code-bg:#0a0f15;--accent:#4cc2a9;--accent-soft:#4cc2a929;--danger:#ef6a6a;--danger-soft:#ef6a6a26;--blue:#64a6f5;--green:#58c98b;--red:#ea6d6d;--gray:#93a0ae;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, "Cascadia Code", Menlo, Consolas, monospace}@media (prefers-color-scheme:dark){:root{--bg:#0d1117}}*{box-sizing:border-box}html,body,#root{min-height:100svh;margin:0;padding:0}body{font:15px/1.5 var(--sans);color:var(--text);background:radial-gradient(1200px 500px at 80% -10%, #4cc2a912, transparent), var(--bg);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased}.btn{border:1px solid var(--card-border);font:inherit;color:var(--text);background:var(--bg-soft);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 16px;font-weight:600;transition:border-color .15s,background .15s,color .15s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{color:#06231c;background:var(--accent);border-color:#0000}.btn.primary:hover:not(:disabled){background:#63d2b8}.btn.ghost{color:var(--text-dim);background:0 0}.btn.ghost:hover:not(:disabled){color:var(--text-h);border-color:var(--accent)}.btn.danger{color:var(--danger);border-color:var(--danger-soft);background:0 0}.btn.danger:hover:not(:disabled){background:var(--danger-soft)}.btn.wide{width:100%}.btn.small{padding:4px 10px;font-size:13px}.field{flex-direction:column;gap:6px;display:flex}.field-label{letter-spacing:.4px;text-transform:uppercase;color:var(--text-dim);font-size:12px;font-weight:600}input,select{border:1px solid var(--card-border);font:inherit;color:var(--text-h);background:var(--bg-soft);border-radius:8px;outline:none;padding:8px 10px;transition:border-color .15s}:is(input,select):focus-visible{border-color:var(--accent)}:is(input,select):disabled{opacity:.6}select{cursor:pointer}input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;padding:0}.checkbox-field{color:var(--text);flex-direction:row;align-items:center;gap:8px;font-size:14px}.form-error{border:1px solid var(--danger-soft);color:var(--danger);background:var(--danger-soft);border-radius:8px;margin:0;padding:8px 12px;font-size:14px}.login-page{justify-content:center;align-items:center;min-height:100svh;padding:24px;display:flex}.login-card{border:1px solid var(--card-border);background:var(--card);border-radius:14px;width:100%;max-width:380px;padding:36px 32px;box-shadow:0 20px 60px #00000073}.login-card form{flex-direction:column;gap:16px;margin-top:24px;display:flex}.brand-mark{font:700 20px var(--mono);color:var(--accent);margin:0}.login-title{color:var(--text-h);margin:12px 0 4px;font-size:26px;font-weight:700}.login-subtitle{color:var(--text-dim);margin:0;font-size:14px}.dashboard{flex-direction:column;min-height:100svh;display:flex}.topbar{border-bottom:1px solid var(--card-border);background:var(--bg-soft);justify-content:space-between;align-items:center;gap:16px;padding:14px 28px;display:flex}.brand{align-items:center;gap:12px;display:flex}.brand h1{letter-spacing:-.2px;color:var(--text-h);margin:0;font-size:19px;font-weight:700}.user-box{align-items:center;gap:12px;display:flex}.username{font-family:var(--mono);color:var(--accent);font-size:14px}.content{flex:1;grid-template-columns:320px minmax(0,1fr);align-items:start;gap:20px;padding:24px 28px 32px;display:grid}.card{border:1px solid var(--card-border);background:var(--card);border-radius:12px;padding:20px}.form-card{flex-direction:column;gap:12px;display:flex}.card-title{letter-spacing:.3px;text-transform:uppercase;color:var(--text-h);margin:0 0 4px;font-size:15px;font-weight:700}.run-form{flex-direction:column;gap:14px;display:flex}.table-card,.log-card{grid-column:2}.log-card{grid-column:1/-1}.table-wrap{margin-top:10px;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px}table th{border-bottom:1px solid var(--card-border);letter-spacing:.4px;text-align:left;text-transform:uppercase;color:var(--text-dim);white-space:nowrap;padding:8px 10px;font-size:12px;font-weight:600}table td{text-align:left;vertical-align:middle;border-bottom:1px solid #232d3b8c;padding:9px 10px}table tbody tr{transition:background .12s}table tbody tr:hover{background:#4cc2a90d}.row-selected{background:var(--accent-soft)}.row-selected:hover{background:var(--accent-soft)}.cell-time{font-family:var(--mono);color:var(--text-dim);white-space:nowrap;font-size:13px}.command{max-width:420px;font:13px var(--mono);color:var(--accent);background:var(--code-bg);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;padding:3px 8px;display:inline-block;overflow:hidden}.cell-actions{white-space:nowrap}.cell-actions .btn+.btn{margin-left:6px}.cell-empty{color:var(--text-dim);text-align:center;font-style:italic}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-flex}.badge:before{content:"";background:currentColor;border-radius:50%;width:7px;height:7px}.badge-running{color:var(--blue);background:#64a6f524}.badge-running:before{animation:1.2s ease-in-out infinite pulse}.badge-succeeded{color:var(--green);background:#58c98b21}.badge-failed{color:var(--red);background:#ea6d6d24}.badge-stopped{color:var(--gray);background:#93a0ae21}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.log-header{align-items:center;gap:12px;display:flex}.log-header .btn{margin-left:auto}.log-pane{border:1px solid var(--card-border);background:var(--code-bg);border-radius:10px;height:280px;margin-top:12px;padding:14px;overflow-y:auto}.log-pane .log-text{font:13px/1.55 var(--mono);color:#b9d3c9;white-space:pre-wrap;word-break:break-word;margin:0}.log-empty{border:1px dashed var(--card-border);color:var(--text-dim);text-align:center;border-radius:10px;margin:16px 0 8px;padding:40px 16px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (width<=1100px){.content{grid-template-columns:1fr}.form-card,.table-card{grid-column:1}.topbar,.content{padding-inline:20px}}
