:root{
  --bg:#070b14;
  --bg2:#0b1220;
  --panel:#0f1830;
  --panel2:#131f3d;
  --line:#1e2c4d;
  --text:#e6ecf7;
  --muted:#8295b8;
  --accent:#19d3c5;
  --accent2:#3b82f6;
  --amber:#f5a623;
  --danger:#ff5d6c;
  --ok:#2ee6a6;
  --radius:14px;
  --shadow:0 10px 40px rgba(0,0,0,.45);
  font-synthesis:none;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:"Segoe UI",system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif;
  background:var(--bg);color:var(--text);
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
small{font-size:.74rem}
h1,h2{margin:0}
.muted{color:var(--muted)}
.hidden{display:none!important}

/* ===================== Buttons ===================== */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.4rem;
  border:1px solid var(--line);background:var(--panel2);color:var(--text);
  padding:.62rem 1rem;border-radius:10px;font-weight:600;font-size:.86rem;
  cursor:pointer;transition:.15s ease;line-height:1;
}
.btn:hover{transform:translateY(-1px);border-color:#2e427a}
.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}
.btn.sm{padding:.42rem .7rem;font-size:.78rem}
.btn-block{width:100%}
.btn-primary{background:linear-gradient(135deg,var(--accent2),#2563eb);border-color:transparent;box-shadow:0 6px 20px rgba(37,99,235,.35)}
.btn-primary:hover{box-shadow:0 8px 26px rgba(37,99,235,.5)}
.btn-amber{background:linear-gradient(135deg,#f5a623,#e0890a);border-color:transparent;color:#1a1300}
.btn-ghost{background:transparent}
.btn-danger-ghost{background:transparent;color:var(--danger);border-color:#48202c}
.btn-danger-ghost:hover{background:rgba(255,93,108,.1)}
.btn-row{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:.4rem}
.btn-row.tight{margin-top:0}

/* ===================== Logo ===================== */
.logo-mark{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;width:34px;height:34px}
.logo-mark span{background:linear-gradient(180deg,var(--accent),var(--accent2));border-radius:3px;animation:pulse 2.4s infinite}
.logo-mark span:nth-child(2){animation-delay:.3s;opacity:.8}
.logo-mark span:nth-child(3){animation-delay:.6s;opacity:.6}
.logo-mark.sm{width:26px;height:26px}
@keyframes pulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.7)}}

/* ===================== Fields ===================== */
.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.85rem}
.field>span{font-size:.78rem;color:var(--muted);font-weight:600}
.field input,.field textarea,.field select{
  background:#0a1124;border:1px solid var(--line);color:var(--text);
  padding:.62rem .7rem;border-radius:10px;font-size:.88rem;font-family:inherit;width:100%;
  transition:.15s;
}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--accent2);box-shadow:0 0 0 3px rgba(59,130,246,.18)}
textarea{resize:vertical}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.6rem}
.hint{font-size:.74rem;color:var(--muted);margin:.2rem 0 0}

/* ===================== Login ===================== */
.login-body{height:100vh;overflow:hidden;position:relative}
.login-wrap{position:relative;z-index:5;height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem}
.login-card{
  width:100%;max-width:400px;background:rgba(13,21,42,.82);backdrop-filter:blur(14px);
  border:1px solid var(--line);border-radius:20px;padding:2.2rem;box-shadow:var(--shadow);
  animation:rise .6s ease;
}
@keyframes rise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.login-brand{display:flex;align-items:center;gap:.8rem;margin-bottom:1.6rem}
.login-brand h1{font-size:1.4rem;letter-spacing:.5px}
.login-brand h1 span{color:var(--accent)}
.login-brand p{margin:.15rem 0 0;font-size:.74rem;color:var(--muted);letter-spacing:1px;text-transform:uppercase}
.login-foot{margin-top:1.2rem;text-align:center;font-size:.74rem;color:var(--muted);display:flex;align-items:center;justify-content:center;gap:.4rem}
.alert{padding:.6rem .8rem;border-radius:10px;font-size:.82rem;margin-bottom:1rem}
.alert.error{background:rgba(255,93,108,.12);border:1px solid #4a2230;color:#ffb3bb}
.status-dot{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 8px var(--ok);display:inline-block;animation:pulse 1.8s infinite}

/* ===================== Data-center background ===================== */
.dc-bg{position:fixed;inset:0;z-index:1;overflow:hidden;background:
  radial-gradient(1200px 600px at 70% -10%,#0e2150 0%,transparent 60%),
  radial-gradient(900px 500px at 10% 110%,#0a2c44 0%,transparent 55%),
  linear-gradient(180deg,#060a13,#0a1326)}
.dc-grid{position:absolute;inset:0;background-image:
  linear-gradient(rgba(60,130,246,.07) 1px,transparent 1px),
  linear-gradient(90deg,rgba(60,130,246,.07) 1px,transparent 1px);
  background-size:46px 46px;mask-image:linear-gradient(180deg,transparent,#000 30%,#000 70%,transparent)}
.dc-floor{position:absolute;left:50%;bottom:-10%;width:200%;height:60%;transform:translateX(-50%) perspective(500px) rotateX(62deg);
  background-image:linear-gradient(rgba(25,211,197,.18) 1px,transparent 1px),linear-gradient(90deg,rgba(25,211,197,.18) 1px,transparent 1px);
  background-size:60px 60px;opacity:.5;mask-image:radial-gradient(ellipse at center,#000,transparent 70%)}
.rack{position:absolute;top:18%;width:54px;height:230px;border-radius:8px;
  background:linear-gradient(180deg,#0d1832,#0a1226);border:1px solid rgba(60,130,246,.25);
  display:flex;flex-direction:column;justify-content:space-around;align-items:center;padding:10px 0;
  box-shadow:0 0 30px rgba(20,40,90,.5);opacity:.85}
.rack .led{width:26px;height:7px;border-radius:2px;background:#13305a}
.rack .led:nth-child(2n){background:var(--accent);box-shadow:0 0 8px var(--accent);animation:blink 2.6s infinite}
.rack .led:nth-child(3n){background:var(--accent2);box-shadow:0 0 8px var(--accent2);animation:blink 3.4s infinite}
@keyframes blink{0%,100%{opacity:.3}50%{opacity:1}}
.rack-0{left:6%;transform:scale(.85);animation:float 7s ease-in-out infinite}
.rack-1{left:18%;height:280px;top:14%;animation:float 8s ease-in-out infinite .4s}
.rack-2{left:30%;transform:scale(.78);top:22%;animation:float 6.5s ease-in-out infinite .8s}
.rack-3{right:30%;height:300px;top:13%;animation:float 9s ease-in-out infinite .2s}
.rack-4{right:18%;animation:float 7.5s ease-in-out infinite .6s}
.rack-5{right:6%;transform:scale(.82);top:20%;animation:float 8.5s ease-in-out infinite 1s}
.rack-6{left:46%;height:260px;top:16%;transform:scale(.7);opacity:.5;animation:float 10s ease-in-out infinite}
@keyframes float{0%,100%{transform:translateY(0) scale(var(--s,1))}50%{transform:translateY(-12px)}}
.dc-scan{position:absolute;left:0;right:0;height:160px;background:linear-gradient(180deg,transparent,rgba(25,211,197,.08),transparent);animation:scan 6s linear infinite}
@keyframes scan{0%{top:-20%}100%{top:120%}}
.dc-glow{position:absolute;inset:0;background:radial-gradient(600px 300px at 50% 40%,rgba(25,211,197,.08),transparent 70%);pointer-events:none}

/* ===================== App layout ===================== */
.app-body{background:linear-gradient(180deg,#070b14,#0a1020);min-height:100vh}
.topbar{display:flex;align-items:center;justify-content:space-between;padding:.8rem 1.4rem;
  background:rgba(10,16,32,.85);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50}
.topbar-left{display:flex;align-items:center;gap:.7rem}
.topbar-left strong{display:block;font-size:.98rem}
.topbar-left small{color:var(--muted);font-size:.7rem;letter-spacing:.5px}
.topbar-right{display:flex;align-items:center;gap:.7rem;font-size:.82rem}
.layout{display:grid;grid-template-columns:1fr 380px;gap:1.1rem;padding:1.1rem;max-width:1480px;margin:0 auto}
.col{display:flex;flex-direction:column;gap:1.1rem}
@media(max-width:1050px){.layout{grid-template-columns:1fr}}

.card{background:linear-gradient(180deg,var(--panel),var(--bg2));border:1px solid var(--line);border-radius:var(--radius);padding:1.2rem;box-shadow:var(--shadow)}
.card-head{margin-bottom:1rem}
.card-head h2{font-size:1.05rem;letter-spacing:.3px}
.card-head p{margin:.25rem 0 0}
.row-between{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}

/* parsed chips */
.parsed-box{display:flex;flex-wrap:wrap;gap:.45rem;margin:-.2rem 0 1rem}
.chip{background:#0a1430;border:1px solid var(--line);color:var(--accent);font-size:.74rem;padding:.3rem .6rem;border-radius:999px;font-weight:600}

/* progress */
.progress{height:14px;background:#0a1124;border-radius:999px;overflow:hidden;border:1px solid var(--line)}
.progress-bar{height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent2));transition:width .3s ease;box-shadow:0 0 14px rgba(25,211,197,.5)}
.progress-meta{display:flex;justify-content:space-between;font-size:.78rem;color:var(--muted);margin:.5rem 0 1rem}
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.7rem}
@media(max-width:560px){.stat-grid{grid-template-columns:1fr 1fr}}
.stat{background:#0a1228;border:1px solid var(--line);border-radius:10px;padding:.7rem .6rem;text-align:center}
.stat-val{font-size:1.3rem;font-weight:700;color:var(--text)}
.stat-lbl{font-size:.68rem;color:var(--muted);margin-top:.2rem;letter-spacing:.3px}
.live-log{margin-top:1rem;max-height:160px;overflow:auto;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.74rem;background:#070d1c;border:1px solid var(--line);border-radius:10px;padding:.6rem}
.live-log .ok{color:var(--ok)}
.live-log .warn{color:var(--amber)}
.live-log .err{color:var(--danger)}
.live-log div{padding:.1rem 0;border-bottom:1px solid rgba(255,255,255,.03)}

/* token */
.token-row{display:flex;gap:.5rem}
.token-row input{flex:1;font-family:ui-monospace,monospace;font-size:.78rem}
#tokenInput{font-family:ui-monospace,monospace;font-size:.78rem}
.natural-mode{padding:.7rem .85rem;border:1px solid var(--border);border-radius:10px;background:rgba(16,185,129,.06)}
.switch-row{display:flex;align-items:center;gap:.55rem;cursor:pointer}
.switch-row input[type=checkbox]{width:auto;flex:0 0 auto;accent-color:var(--accent2);transform:scale(1.15)}
.switch-row>span{font-size:.85rem;color:var(--text);font-weight:600}

/* advanced */
.adv{margin:.4rem 0 1rem;border:1px solid var(--line);border-radius:10px;padding:.4rem .8rem;background:#0a1124}
.adv summary{cursor:pointer;font-size:.82rem;color:var(--muted);font-weight:600;padding:.3rem 0}
.adv .grid-2{margin-top:.6rem}

/* table */
.table-wrap{overflow:auto;max-height:460px;border:1px solid var(--line);border-radius:10px}
table{border-collapse:collapse;width:100%;font-size:.78rem;min-width:600px}
thead th{position:sticky;top:0;background:#0c1730;color:var(--accent);text-align:left;padding:.55rem .6rem;border-bottom:1px solid var(--line);white-space:nowrap;font-weight:700}
tbody td{padding:.5rem .6rem;border-bottom:1px solid rgba(255,255,255,.04);max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
tbody tr:hover{background:rgba(59,130,246,.06)}
.pager{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:.8rem}

/* jobs */
.jobs-list{display:flex;flex-direction:column;gap:.5rem;max-height:300px;overflow:auto}
.job-item{background:#0a1228;border:1px solid var(--line);border-radius:10px;padding:.6rem .7rem;font-size:.78rem}
.job-item .job-top{display:flex;justify-content:space-between;align-items:center;gap:.5rem}
.job-item b{font-size:.8rem}
.badge{font-size:.66rem;padding:.18rem .5rem;border-radius:999px;font-weight:700;text-transform:uppercase}
.badge.done{background:rgba(46,230,166,.15);color:var(--ok)}
.badge.running{background:rgba(59,130,246,.15);color:var(--accent2)}
.badge.new,.badge.stopped{background:rgba(245,166,35,.15);color:var(--amber)}
.badge.error{background:rgba(255,93,108,.15);color:var(--danger)}

/* toast */
.toast{position:fixed;bottom:1.4rem;left:50%;transform:translateX(-50%);background:#0c1730;border:1px solid var(--line);color:var(--text);padding:.8rem 1.2rem;border-radius:12px;box-shadow:var(--shadow);z-index:200;font-size:.85rem;max-width:90vw}
.toast.ok{border-color:#1c5a45}
.toast.err{border-color:#5a2230}
.toast.warn{border-color:#5a4520}
