*,*::before,*::after{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:#f4f6f9;color:#1a1a2e;line-height:1.5}
a{color:#4f46e5;text-decoration:none}
a:hover{text-decoration:underline}
.layout{display:flex;min-height:100vh}
.sidebar{width:220px;background:#1a1a2e;color:#fff;padding:1.5rem 0;flex-shrink:0}
.sidebar .brand{padding:0 1.5rem 1.5rem;font-size:1.25rem;font-weight:700}
.sidebar nav a,.sidebar nav .nav-link{display:block;padding:.6rem 1.5rem;color:#a0aec0}
.sidebar nav a:hover,.sidebar nav a.active,.sidebar nav .nav-link:hover,.sidebar nav .nav-link.active{background:#2d2d44;color:#fff;text-decoration:none}
.content{flex:1;padding:2rem;max-width:1200px}
h1{margin:0 0 1.5rem;font-size:1.75rem}
h2{margin:2rem 0 1rem;font-size:1.25rem}
.table{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.table th,.table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid #e8ecf1;font-size:.9rem}
.table th{background:#f8fafc;font-weight:600}
.table code{font-size:.8rem;background:#f1f5f9;padding:.15rem .4rem;border-radius:4px}
.row-error{background:#fef2f2}
.btn{display:inline-block;padding:.5rem 1rem;border-radius:6px;border:1px solid #d1d5db;background:#fff;cursor:pointer;font-size:.9rem;text-decoration:none;color:#374151}
.btn:hover{background:#f9fafb;text-decoration:none}
.btn-primary{background:#4f46e5;color:#fff;border-color:#4f46e5}
.btn-primary:hover{background:#4338ca;color:#fff}
.btn-danger{background:#ef4444;color:#fff;border-color:#ef4444}
.btn-sm{padding:.25rem .6rem;font-size:.8rem}
.btn-group{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:1rem}
.form label{display:block;margin-bottom:1rem}
.form input,.form select,.form textarea{width:100%;padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:6px;font-size:.95rem;margin-top:.25rem}
.form textarea{font-family:inherit}
.alert{padding:1rem;border-radius:6px;margin-bottom:1rem}
.alert-success{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0}
.alert-error{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}
.alert-warning{background:#fffbeb;color:#92400e;border:1px solid #fde68a}
.stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem;margin-bottom:2rem}
.stat-card{background:#fff;padding:1.25rem;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.08);text-align:center}
.stat-num{display:block;font-size:2rem;font-weight:700;color:#4f46e5}
.stat-label{font-size:.85rem;color:#6b7280}
.badge{display:inline-block;padding:.2rem .5rem;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}
.badge-active,.badge-completed{background:#d1fae5;color:#065f46}
.badge-pending,.badge-processing{background:#fef3c7;color:#92400e}
.badge-failed,.badge-error,.badge-revoked,.badge-expired{background:#fee2e2;color:#991b1b}
.info-box{background:#fff;padding:1.25rem;border-radius:8px;margin:1.5rem 0;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.info-box pre{background:#f8fafc;padding:1rem;border-radius:6px;overflow-x:auto;font-size:.85rem}
.filter-bar{margin-bottom:1rem}
.filter-bar a{margin-right:.5rem;padding:.4rem .8rem;border-radius:6px;background:#fff;border:1px solid #d1d5db}
.filter-bar a.active{background:#4f46e5;color:#fff;border-color:#4f46e5;text-decoration:none}
.pagination{margin-top:1rem}
.pagination a{margin-right:.25rem;padding:.3rem .6rem;border:1px solid #d1d5db;border-radius:4px;background:#fff}
.pagination a.active{background:#4f46e5;color:#fff}
.login-page,.install-page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:#f4f6f9}
.login-box,.install-box{background:#fff;padding:2rem;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.1);width:100%;max-width:480px}
.install-box{max-width:600px}
.req-list{list-style:none;padding:0}
.req-list li{padding:.4rem 0}
.req-list .ok{color:#059669}
.req-list .fail{color:#dc2626;font-weight:600}
@media(max-width:768px){.layout{flex-direction:column}.sidebar{width:100%}}
