:root{
  --bg:#f4f7fb;
  --surface:#ffffff;
  --surface-2:#eef3f9;
  --border:#d7e0eb;
  --text:#1b2634;
  --muted:#5c6b7e;
  --accent:#0b6bcb;
  --accent-strong:#0857a6;
  --error:#c62f33;
  --error-bg:#fdf1f1;
  --slow:#9a6700;
  --slow-bg:#fdf7ea;
  --ok:#0f7b46;
  --radius:10px;
  --mono:'JetBrains Mono',ui-monospace,Consolas,monospace;
  --display:'Space Grotesk',system-ui,sans-serif;
  --body:system-ui,-apple-system,'Segoe UI',sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{color-scheme:light}
body{background:var(--bg);color:var(--text);font-family:var(--body);font-size:15px;line-height:1.55}
a{color:var(--accent)}
button{font-family:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* ---------- header ---------- */
header{border-bottom:1px solid var(--border);background:var(--surface)}
.header-inner{max-width:1240px;margin:0 auto;padding:18px 24px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.logo{font-family:var(--display);font-weight:700;font-size:22px;letter-spacing:-.02em;display:flex;align-items:center;gap:10px;color:var(--accent-strong)}
.logo .lens{display:inline-block;width:26px;height:26px;border-radius:50%;border:3px solid var(--accent);position:relative;flex:none}
.logo .lens::after{content:'';position:absolute;right:-7px;bottom:-7px;width:10px;height:3px;background:var(--accent);border-radius:2px;transform:rotate(45deg)}
.logo small{font-family:var(--body);font-weight:400;font-size:13px;color:var(--muted);margin-left:2px}
.header-links{margin-left:auto;display:flex;gap:14px;align-items:center;font-size:13.5px}
.header-links a{color:var(--muted);text-decoration:none}
.header-links a:hover{color:var(--accent)}
.nav-btn{background:none;border:none;color:var(--muted);font-size:13.5px;padding:0}
.nav-btn:hover{color:var(--accent)}

/* ---------- about modal ---------- */
dialog.about{border:1px solid var(--border);border-radius:12px;padding:0;max-width:520px;width:calc(100% - 40px);background:var(--surface);color:var(--text);box-shadow:0 12px 40px rgba(16,42,77,.18)}
dialog.about::backdrop{background:rgba(20,35,55,.45)}
.about-inner{padding:24px 26px}
.about-inner h2{font-family:var(--display);font-size:19px;font-weight:700;margin-bottom:12px;color:var(--accent-strong)}
.about-inner p{font-size:14px;color:var(--text);margin-bottom:12px}
.about-inner p.small{font-size:13px;color:var(--muted)}
.about-divider{border:none;border-top:1px solid var(--border);margin:16px 0}
.about-close{position:absolute;top:14px;right:14px;background:none;border:none;color:var(--muted);font-size:18px;line-height:1;padding:6px}
.about-close:hover{color:var(--text)}

/* ---------- privacy banner ---------- */
.privacy{background:#e8f1fb;border-bottom:1px solid var(--border);font-size:13.5px;color:var(--muted)}
.privacy-inner{max-width:1240px;margin:0 auto;padding:9px 24px;display:flex;gap:8px;align-items:baseline}
.privacy strong{color:var(--text);font-weight:600}
.privacy .lock{flex:none;transform:translateY(1px)}

/* ---------- layout ---------- */
.wrap{max-width:1240px;margin:0 auto;padding:26px 24px 60px;display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:24px}
@media(max-width:960px){.wrap{grid-template-columns:1fr}}

/* ---------- input panel ---------- */
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 1px 3px rgba(16,42,77,.05)}
.input-panel{padding:18px}
.input-panel h1{font-family:var(--display);font-size:17px;font-weight:500;margin-bottom:4px}
.input-panel p.hint{color:var(--muted);font-size:13.5px;margin-bottom:12px}
textarea{width:100%;min-height:170px;resize:vertical;background:#fbfdff;color:var(--text);border:1px solid var(--border);border-radius:8px;padding:12px 14px;font-family:var(--mono);font-size:12.5px;line-height:1.6}
textarea::placeholder{color:#93a3b5}
textarea.dragover{border-color:var(--accent)}
.btn-row{display:flex;gap:10px;margin-top:12px;flex-wrap:wrap;align-items:center}
.btn{border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:9px 18px;font-size:14px;transition:background .15s,border-color .15s}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.btn.primary:hover{background:var(--accent-strong);color:#fff}
.btn.ghost{background:transparent;border-color:transparent;color:var(--muted)}
.btn.ghost:hover{color:var(--error);border-color:transparent}
.parse-note{font-size:12.5px;color:var(--ok);font-weight:600}

/* ---------- summary strip ---------- */
.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;margin:20px 0}
.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px;box-shadow:0 1px 3px rgba(16,42,77,.05)}
.stat .num{font-family:var(--display);font-size:26px;font-weight:700;line-height:1.1;color:var(--accent-strong)}
.stat .lbl{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-top:2px}
.stat.errors .num{color:var(--error)}
.stat.slow .num{color:var(--slow)}
.stat.ok .num{color:var(--ok)}

/* ---------- filter bar ---------- */
.filterbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.chip{border:1.5px solid var(--accent);background:#f0f7ff;color:var(--accent-strong);border-radius:999px;padding:9px 22px;font-size:14.5px;font-weight:600;box-shadow:0 1px 3px rgba(16,42,77,.08);transition:background .15s,box-shadow .15s,transform .1s}
.chip:hover{background:#e1efff;box-shadow:0 2px 6px rgba(16,42,77,.14)}
.chip:active{transform:translateY(1px)}
.chip.err{border-color:var(--error);background:var(--error-bg);color:var(--error)}
.chip.err:hover{background:#fbe4e4}
.chip.slw{border-color:var(--slow);background:var(--slow-bg);color:var(--slow)}
.chip.slw:hover{background:#faefd4}
.chip[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:#fff}
.chip.err[aria-pressed="true"]{background:var(--error);border-color:var(--error);color:#fff}
.chip.slw[aria-pressed="true"]{background:var(--slow);border-color:var(--slow);color:#fff}
.search{margin-left:auto;background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:7px 12px;font-size:13.5px;min-width:210px}
@media(max-width:640px){.search{margin-left:0;width:100%}}

/* ---------- execution list ---------- */
.exec-list{display:flex;flex-direction:column;gap:8px}
.exec{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);overflow:hidden;position:relative;box-shadow:0 1px 3px rgba(16,42,77,.05)}
.exec.status-error{border-left:3px solid var(--error);background:linear-gradient(90deg,var(--error-bg),var(--surface) 45%)}
.exec.status-slow{border-left:3px solid var(--slow);background:linear-gradient(90deg,var(--slow-bg),var(--surface) 45%)}
.exec.status-ok{border-left:3px solid var(--ok)}
.exec-head{display:flex;align-items:center;gap:12px;padding:11px 16px;width:100%;background:none;border:none;color:inherit;text-align:left;font-size:14px}
.exec-head:hover{background:var(--surface-2)}
.depth-rail{flex:none;display:flex;align-items:center;gap:0}
.rail-seg{width:16px;height:22px;border-left:1px solid #b9c8d9;flex:none}
.rail-elbow{width:14px;height:22px;border-left:1px solid #b9c8d9;border-bottom:1px solid #b9c8d9;border-bottom-left-radius:6px;transform:translateY(-9px);flex:none}
.status-dot{width:9px;height:9px;border-radius:50%;flex:none}
.status-ok .status-dot{background:var(--ok)}
.status-error .status-dot{background:var(--error)}
.status-slow .status-dot{background:var(--slow)}
.exec-name{font-family:var(--mono);font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.exec-meta{display:flex;gap:8px;align-items:center;margin-left:auto;flex:none}
.tag{font-size:11.5px;font-family:var(--mono);color:var(--muted);background:var(--surface-2);border:1px solid var(--border);border-radius:5px;padding:2px 7px;white-space:nowrap}
.tag.msg{color:var(--accent-strong)}
.tag.dur{color:var(--text)}
.status-slow .tag.dur{color:var(--slow);border-color:var(--slow);background:var(--slow-bg)}
.status-error .tag.exc{color:var(--error);border-color:var(--error);background:var(--error-bg)}
.caret{color:var(--muted);flex:none;transition:transform .15s}
.exec.open .caret{transform:rotate(90deg)}
.exec-body{display:none;border-top:1px solid var(--border);padding:14px 16px;font-size:13px}
.exec.open .exec-body{display:block}
.kv{display:grid;grid-template-columns:150px 1fr;gap:4px 14px;margin-bottom:12px}
.kv dt{color:var(--muted)}
.kv dd{font-family:var(--mono);font-size:12.5px;word-break:break-all}
.block-label{font-size:11.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:12px 0 6px}
pre.logblock{background:#f7fafd;border:1px solid var(--border);border-radius:8px;padding:12px 14px;font-family:var(--mono);font-size:12px;line-height:1.65;overflow-x:auto;white-space:pre-wrap;word-break:break-word;max-height:340px;overflow-y:auto}
pre.logblock.exception{border-color:#efb9ba;background:var(--error-bg);color:#7c1d20}
@media(max-width:640px){.exec-meta .tag.entity,.exec-meta .tag.msg{display:none}.kv{grid-template-columns:1fr}}

/* ---------- empty / error states ---------- */
.empty{border:1px dashed #b9c8d9;border-radius:var(--radius);padding:44px 24px;text-align:center;color:var(--muted)}
.empty b{color:var(--text);font-family:var(--display);font-weight:500;font-size:16px;display:block;margin-bottom:6px}
.parse-error{border:1px solid #efb9ba;background:var(--error-bg);border-radius:var(--radius);padding:16px 18px;font-size:14px;color:#7c1d20}

/* ---------- history sidebar ---------- */
.history h2{font-family:var(--display);font-size:15px;font-weight:500;display:flex;align-items:center;gap:8px}
.history .panel{padding:16px}
.history-head{display:flex;align-items:center;margin-bottom:12px}
.history-head .btn{margin-left:auto;padding:5px 12px;font-size:12.5px}
.history-note{font-size:12px;color:var(--muted);margin-bottom:12px}
.hist-list{list-style:none;display:flex;flex-direction:column;gap:8px;max-height:520px;overflow-y:auto}
.hist-item{border:1px solid var(--border);background:var(--surface);border-radius:8px;display:flex;align-items:stretch;overflow:hidden}
.hist-load{flex:1;background:none;border:none;color:inherit;text-align:left;padding:9px 12px;font-size:12.5px;min-width:0}
.hist-load:hover{background:var(--surface-2)}
.hist-load .when{color:var(--text);font-weight:600;display:block}
.hist-load .counts{color:var(--muted);font-family:var(--mono);font-size:11.5px}
.hist-load .counts .e{color:var(--error)}
.hist-load .counts .s{color:var(--slow)}
.hist-del{background:none;border:none;border-left:1px solid var(--border);color:var(--muted);padding:0 11px;font-size:14px}
.hist-del:hover{color:var(--error);background:var(--error-bg)}
.hist-empty{font-size:12.5px;color:var(--muted);text-align:center;padding:18px 6px}

footer{border-top:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:12.5px}
.footer-inner{max-width:1240px;margin:0 auto;padding:16px 24px;display:flex;gap:16px;flex-wrap:wrap}
.footer-inner span:last-child{margin-left:auto}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
