*{box-sizing:border-box}
body{margin:0;font-family:"Source Sans Pro",-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:#454d55;color:#e9ecef;font-size:15px}
a{color:#6ea8fe}
body.center{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:16px}
.box{background:#343a40;border-radius:6px;padding:24px;width:100%;max-width:460px;border-top:3px solid #3f6791}
.box h2{margin-top:0}
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:6px;background:#fff;color:#555;height:52px;padding:0 12px;border-bottom:1px solid #ddd}
.top button{background:none;border:0;color:#666;cursor:pointer;font-size:20px;padding:8px}
.top .who{color:#777;margin-left:8px}
.grow{flex:1}
#side{position:fixed;top:0;left:-250px;width:240px;height:100%;background:#2b3035;z-index:40;transition:left .2s;padding-top:8px;overflow:auto}
#side.open{left:0}
#side .brand{padding:14px 18px;font-weight:700;font-size:18px;color:#fff}
#side a{display:block;padding:11px 18px;color:#c2c7d0;text-decoration:none}
#side a:hover,#side a.on{background:#3f6791;color:#fff}
#side .sep{padding:14px 18px 4px;font-size:12px;text-transform:uppercase;color:#7b848c}
#overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:30}
#overlay.show{display:block}
main{padding:14px;max-width:1300px;margin:0 auto}
.card{background:#343a40;border-radius:4px;border-top:3px solid #3f6791;margin-bottom:16px;box-shadow:0 0 1px rgba(0,0,0,.4),0 1px 3px rgba(0,0,0,.3)}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;border-bottom:1px solid #4b545c;font-size:17px}
.card-b{padding:16px}
.zone{max-width:60%;padding:5px 8px;border-radius:4px;border:1px solid #aaa;background:#fff;color:#333}
.bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0 12px}
.bar select,.bar input{background:#343a40;color:#fff;border:1px solid #6c757d;border-radius:4px;padding:5px 8px}
.bar input[type=search]{width:170px}
.tw{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th,.tbl td{border:1px solid #5a636b;padding:8px 7px;text-align:left;white-space:nowrap}
.tbl th{font-weight:700;user-select:none}
.tbl th[data-k]{cursor:pointer}
.tbl th[data-k]:after{content:"\2195";float:right;margin-left:8px;opacity:.35;font-size:12px}
.tbl th.asc:after{content:"\2191";opacity:1}
.tbl th.desc:after{content:"\2193";opacity:1}
.tbl tbody tr:hover{background:#3d444b}
.tbl tr.dis td:not(.act){opacity:.5;text-decoration:line-through}
.nw{white-space:nowrap}
.act{white-space:nowrap}
.ib{border:0;border-radius:4px;width:30px;height:30px;color:#fff;cursor:pointer;font-size:16px;margin-right:2px;vertical-align:middle}
.ib.reset{background:#e74c3c}
.ib.tog{background:#00bc8c}
.ib.tog.off{background:#6c757d}
.ib:disabled{opacity:.5;cursor:wait}
.pager{display:flex;flex-wrap:wrap}
.pager button{background:#343a40;color:#6ea8fe;border:1px solid #6c757d;margin-left:-1px;padding:6px 11px;cursor:pointer}
.pager button.cur{background:#3f6791;color:#fff;border-color:#3f6791}
.pager button:disabled{color:#7b848c;cursor:default}
.muted{color:#aab2ba}
.small{font-size:12px}
.btn{display:inline-block;background:#6c757d;color:#fff;border:0;border-radius:4px;padding:8px 14px;cursor:pointer;text-decoration:none;font-size:14px}
.btn-primary{background:#3f6791}
.btn-danger{background:#dc3545}
.btn-sm{padding:4px 9px;font-size:13px}
label{display:block;margin:10px 0 4px}
.fc{width:100%;padding:8px 10px;border-radius:4px;border:1px solid #6c757d;background:#2b3035;color:#fff;font-size:15px}
input[type=checkbox]{margin-right:6px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:4px 16px;align-items:start}
.alert{padding:10px 14px;border-radius:4px;margin-bottom:12px}
.a-ok{background:#1e6b4f;color:#fff}
.a-err{background:#8c2a33;color:#fff}
hr{border:0;border-top:1px solid #4b545c;margin:16px 0}
#toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);padding:10px 18px;border-radius:6px;color:#fff;display:none;z-index:99;max-width:90%}
#toast.ok{background:#1e8f6a}
#toast.err{background:#b02a37}
