*{box-sizing:border-box}
body{margin:0;font-family:Inter,system-ui,sans-serif;color:#101828;background:#F6F7F9;font-size:14px}
a{color:#1D4ED8}a:hover{color:#1E3A8A}
.hidden{display:none!important}
.layout{display:flex;flex-wrap:wrap;min-height:100vh}
.side{flex:1 1 240px;max-width:260px;min-width:220px;background:#fff;border-right:1px solid #E4E7EC;padding:24px 16px;display:flex;flex-direction:column;gap:4px}
.side a{text-decoration:none;padding:10px 12px;border-radius:8px;color:#344054}
.side a.active{background:#EFF4FF;color:#1D4ED8;font-weight:500}
.side-foot{margin-top:auto;padding:12px;border-top:1px solid #E4E7EC;display:flex;flex-direction:column;gap:8px}
.brand{display:flex;align-items:center;gap:10px;padding:0 8px 24px;font-weight:600;font-size:16px}
.logo{width:32px;height:32px;border-radius:8px;background:#1D4ED8;color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px}
.main{flex:999 1 560px;min-width:0;padding:32px 40px;display:flex;flex-direction:column;gap:24px;max-width:1180px}
h1{margin:0;font-size:26px;font-weight:600}h2{margin:0;font-size:18px;font-weight:600}
.sub{margin:6px 0 0;font-size:15px;color:#475467}
.muted{color:#475467}.small{font-size:12px}
.card{background:#fff;border:1px solid #E4E7EC;border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:14px}
.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
.tile{background:#fff;border:1px solid #E4E7EC;border-radius:12px;padding:16px}.tile b{display:block;font-size:26px;font-weight:600;margin-top:4px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.between{justify-content:space-between}
label{font-size:13px;font-weight:500;color:#344054}
input[type=text],input[type=password],input[type=time],input[type=number],textarea,select{font:inherit;font-size:14px;border:1px solid #D0D5DD;border-radius:8px;padding:0 12px;min-height:44px;background:#fff;width:100%}
textarea{padding:10px 12px;resize:vertical}
.field{display:flex;flex-direction:column;gap:6px}
.btn{font:inherit;font-size:14px;font-weight:500;border-radius:8px;padding:0 18px;min-height:44px;cursor:pointer;border:1px solid #D0D5DD;background:#fff;color:#344054}
.btn.primary{background:#1D4ED8;border-color:#1D4ED8;color:#fff}
.btn.danger{color:#B42318}
.btn:disabled{opacity:.6;cursor:wait}
.link-btn{background:none;border:0;color:#1D4ED8;font:inherit;cursor:pointer;padding:0;text-align:left}
.pill{font-size:12px;font-weight:500;padding:3px 9px;border-radius:999px;white-space:nowrap}
.ok{background:#ECFDF3;color:#067647}.bad{background:#FEF3F2;color:#B42318}.warn{background:#FFFAEB;color:#B54708}.gray{background:#F2F4F7;color:#344054}
.tag{font-size:12px;font-weight:500;padding:3px 8px;border-radius:6px}.meta{background:#EFF4FF;color:#1D4ED8}.tg{background:#F0F9FF;color:#026AA2}
.table-wrap{background:#fff;border:1px solid #E4E7EC;border-radius:12px;overflow-x:auto}
table{width:100%;border-collapse:collapse;min-width:760px}
th{background:#F9FAFB;text-align:left;color:#475467;font-size:12px;font-weight:500;padding:12px 16px}
td{padding:14px 16px;border-top:1px solid #EAECF0;vertical-align:middle}
.num{text-align:right;font-variant-numeric:tabular-nums}
.mono{font-family:ui-monospace,monospace;font-size:12px;color:#475467}
.split{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}
.list{flex:1 1 260px;max-width:300px;background:#fff;border:1px solid #E4E7EC;border-radius:12px;padding:8px;display:flex;flex-direction:column;gap:2px}
.list a{text-decoration:none;padding:12px;border-radius:8px;color:#101828;display:block}.list a.active{background:#EFF4FF}
.detail{flex:999 1 520px;min-width:0;display:flex;flex-direction:column;gap:20px}
.source{border:1px solid #EAECF0;border-radius:10px;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.rule{border-top:1px solid #EAECF0;padding:12px 0;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.rule .what{flex:1 1 260px}
.rule input[type=number]{width:110px}
.error{color:#B42318;font-size:13px;min-height:1em;margin:0}
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{width:100%;max-width:380px}
.toast{position:fixed;bottom:24px;right:24px;background:#101828;color:#fff;padding:12px 16px;border-radius:10px;max-width:420px;z-index:10}
.empty{color:#475467;padding:20px;text-align:center}
@media (max-width:700px){.main{padding:20px 16px}.side{max-width:none}}
