:root{color-scheme:dark;--bg:#0b1018;--panel:#121a26;--line:#253247;--muted:#8c9bb1;--text:#edf3fb;--blue:#3689ff;--green:#2ecf8f;--red:#f0656a;--amber:#f4bd4f}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px "Microsoft YaHei UI","PingFang SC",sans-serif}button,input,select,textarea{font:inherit}.hidden{display:none!important}.login{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 50% 20%,#183154 0,#0b1018 45%)}.login-card{width:min(420px,calc(100% - 32px));padding:34px;background:rgba(18,26,38,.96);border:1px solid var(--line);border-radius:14px;box-shadow:0 30px 80px #0008}.brand{display:flex;align-items:center;gap:10px}.brand span{display:grid;place-items:center;width:34px;height:34px;border-radius:8px;background:linear-gradient(135deg,#4a9cff,#215dcc);font-weight:800}.login h1{margin:28px 0 6px;font-size:24px}.login p,.hint{color:var(--muted)}label{display:grid;gap:7px;margin:15px 0;color:#b8c5d8}input,select,textarea{width:100%;padding:10px 11px;color:var(--text);background:#0c131e;border:1px solid var(--line);border-radius:6px;outline:none}input:focus,select:focus,textarea:focus{border-color:var(--blue)}textarea{min-height:70px;resize:vertical}button{padding:10px 15px;border:0;border-radius:6px;background:var(--blue);color:white;cursor:pointer;font-weight:600}button:hover{filter:brightness(1.1)}.login button{width:100%;margin-top:12px}.app{display:grid;grid-template-columns:220px 1fr;min-height:100vh}aside{position:sticky;top:0;height:100vh;padding:20px 14px;border-right:1px solid var(--line);background:#0e1520;display:flex;flex-direction:column}aside .brand{padding:0 8px 22px}nav{display:grid;gap:5px}nav button{text-align:left;background:transparent;color:#aab8ca;font-weight:500}nav button.active{background:#1b2c45;color:#fff;border-left:3px solid var(--blue)}.aside-foot{margin-top:auto;display:grid;gap:8px;padding:10px 8px}.aside-foot small{color:var(--muted)}.ghost,.secondary{background:transparent;border:1px solid var(--line);color:#c6d2e2}main{min-width:0;padding:24px 28px}header{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}header h1{margin:0;font-size:24px}header p{margin:6px 0 0;color:var(--muted)}.stats{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:14px;margin-bottom:18px}.stats article,.panel{background:var(--panel);border:1px solid var(--line);border-radius:9px}.stats article{padding:18px}.stats span{display:block;color:var(--muted);margin-bottom:12px}.stats strong{font-size:27px}.ok{color:var(--green)}.panel{padding:18px;margin-bottom:16px}.panel h2{font-size:16px;margin:0 0 16px}.panel-head{display:flex;align-items:center;justify-content:space-between}.panel-head select{width:auto}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.warning{border-color:#594922;background:#1c1a15}.warning h2{color:var(--amber)}.narrow{max-width:600px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:11px 10px;border-bottom:1px solid #202c3d;white-space:nowrap}th{color:var(--muted);font-weight:500}td code{color:#99bce9}.tag{display:inline-block;padding:3px 7px;border-radius:10px;background:#26364d;color:#bcd2ed;font-size:12px}.tag.pending{background:#4a3b18;color:#ffd77a}.tag.approved,.tag.succeeded{background:#173e32;color:#72e3b7}.tag.rejected,.tag.failed,.tag.partially_failed{background:#482329;color:#ff9ba0}.actions{display:flex;gap:6px}.actions button{padding:6px 9px;font-size:12px}.danger{background:#b93c48}.success{background:#207b5c}.empty{padding:28px;text-align:center;color:var(--muted)}#toast{position:fixed;z-index:10;right:22px;top:18px;padding:12px 16px;border-radius:7px;background:#1f704f;color:#fff;opacity:0;transform:translateY(-10px);pointer-events:none;transition:.2s}#toast.show{opacity:1;transform:none}#toast.error{background:#a7353f}@media(max-width:900px){.app{grid-template-columns:72px 1fr}aside .brand b,nav button{font-size:0}nav button:before{font-size:18px;content:"•"}.aside-foot small{display:none}.stats{grid-template-columns:1fr 1fr}.grid2{grid-template-columns:1fr}main{padding:18px;overflow:auto}}@media(max-width:600px){.stats{grid-template-columns:1fr}.row{grid-template-columns:1fr}}
