:root{--bg:#f3f5f8;--card:#fff;--ink:#1d2733;--mute:#5b6876;--line:#dde3ea;--brand:#16365c;--accent:#0b5cad;--ok:#1b7f4b;--warn:#a15c00;--err:#b3261e}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}
a{color:var(--accent)}
header.top{background:var(--brand);color:#fff}
header.top .wrap{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;padding:10px 20px}
header.top .brand{font-weight:700;font-size:18px;margin-right:12px}
header.top nav{display:flex;flex-wrap:wrap;gap:4px 14px;flex:1}
header.top a{color:#dce8f7;text-decoration:none}
header.top a:hover,header.top a.active{color:#fff;text-decoration:underline}
header.top form{margin:0}
main{max-width:1100px;margin:0 auto;padding:20px}
h1{font-size:24px;margin:.2em 0 .6em}h2{font-size:18px;margin:1.2em 0 .5em}
.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin-bottom:16px}
.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
table{border-collapse:collapse;width:100%}
th,td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--mute)}
label{display:block;font-weight:600;margin:12px 0 4px}
label.inline{display:inline-flex;gap:8px;align-items:center;font-weight:400;margin:6px 14px 6px 0}
label small,.hint{font-weight:400;color:var(--mute);font-size:13px}
input[type=text],input[type=password],input[type=number],input[type=email],input[type=url],select,textarea{width:100%;padding:8px 10px;border:1px solid #b9c3cf;border-radius:6px;font:inherit;background:#fff;color:var(--ink)}
textarea{min-height:110px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px}
textarea.tall{min-height:520px}
input:focus,select:focus,textarea:focus,button:focus{outline:2px solid var(--accent);outline-offset:1px}
button,.btn{display:inline-block;background:var(--accent);color:#fff;border:0;border-radius:6px;padding:8px 16px;font:inherit;cursor:pointer;text-decoration:none}
button.secondary,.btn.secondary{background:#e8edf3;color:var(--ink)}
button.danger{background:var(--err)}
button.link{background:none;color:#dce8f7;padding:0;text-decoration:underline}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:14px}
.flash{background:#e7f3ff;border:1px solid #b7d6f5;padding:10px 14px;border-radius:6px;margin-bottom:14px}
.error{background:#fdecea;border:1px solid #f5c2bd;color:#7a1b15;padding:10px 14px;border-radius:6px;margin-bottom:14px}
.warn{background:#fff6e5;border:1px solid #f1d49b;color:#6b4300;padding:10px 14px;border-radius:6px;margin-bottom:10px}
.okbox{background:#e8f6ee;border:1px solid #b5dfc7;color:#124d2d;padding:10px 14px;border-radius:6px;margin-bottom:14px}
.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:#e8edf3}
.badge.ok{background:#dcf2e5;color:var(--ok)}.badge.fail{background:#fbe0dd;color:var(--err)}.badge.warn{background:#fdecc8;color:var(--warn)}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px}
.center{max-width:440px;margin:60px auto}
.cols2{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
@media(max-width:700px){.cols2{grid-template-columns:1fr}}
iframe.report{width:100%;height:760px;border:1px solid var(--line);border-radius:8px;background:#fff}
pre.log{background:#0f1a26;color:#d6e2f0;padding:12px;border-radius:8px;overflow:auto;max-height:520px;font-size:12px}
.codes{columns:2;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:16px;background:#f6f9fc;padding:12px;border-radius:6px}
.qr{background:#fff;padding:8px;display:inline-block;border:1px solid var(--line)}
