:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#172033;background:#f4f7fb}
*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}
button{border:0;border-radius:8px;background:#1769e0;color:#fff;padding:9px 14px;cursor:pointer}
button:hover{filter:brightness(.95)}button.secondary{background:#e8eef7;color:#24324a}
button.danger{background:#c63b45}
input,select,textarea{border:1px solid #cad4e4;border-radius:8px;padding:9px;background:#fff}
label{display:grid;gap:6px;margin:12px 0}.hidden{display:none!important}.muted{color:#6e7b91}.break-all{word-break:break-all}
.auth-shell{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#eef4ff,#f8fbff)}
.card{background:#fff;border-radius:14px;box-shadow:0 15px 45px #183b7018;padding:30px}.auth-card{width:min(420px,90vw)}
.auth-card button{width:100%;margin-top:12px}.app{min-height:100vh;display:grid;grid-template-columns:230px 1fr}
aside{background:#172033;color:#fff;padding:22px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
aside nav{display:grid;gap:8px;margin-top:24px}aside nav button{text-align:left;background:transparent}
aside nav button.active{background:#ffffff1f}.aside-bottom{margin-top:auto;display:grid;gap:10px}
.content{padding:24px;min-width:0}.content header{display:flex;justify-content:space-between;align-items:center}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0}.toolbar input{min-width:260px;flex:1}
.table-wrap{overflow:auto;background:#fff;border-radius:10px;border:1px solid #dce4ef}
table{border-collapse:collapse;width:100%;font-size:13px}th,td{padding:9px 10px;border-bottom:1px solid #e7ecf4;text-align:left;white-space:nowrap}
th{background:#f7f9fc;position:sticky;top:0}td.actions{display:flex;gap:6px}.pager{display:flex;gap:12px;align-items:center;margin-top:12px}
.split{display:grid;grid-template-columns:minmax(240px,34%) 1fr;gap:14px}.key-list,pre{background:#fff;border:1px solid #dce4ef;border-radius:10px;min-height:400px;max-height:65vh;overflow:auto}
.key-list button{display:block;width:100%;text-align:left;border-radius:0;background:#fff;color:#24324a;border-bottom:1px solid #eef1f6;overflow:hidden;text-overflow:ellipsis}
.redis-detail-panel{display:grid;gap:8px;align-content:start}.redis-detail-panel>button{justify-self:end}
pre{padding:16px;white-space:pre-wrap;word-break:break-all}.toast{position:fixed;right:20px;top:20px;z-index:100;background:#172033;color:#fff;padding:12px 18px;border-radius:8px;box-shadow:0 8px 30px #0003}
dialog{border:0;border-radius:12px;padding:0;box-shadow:0 18px 70px #0004;width:min(720px,90vw)}
dialog form{padding:22px}dialog::backdrop{background:#0b132488}textarea{width:100%;min-height:380px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}code{display:block;padding:12px;background:#eef3fa;color:#172033;border-radius:8px;word-break:break-all;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.totp-qr-wrap{display:flex;justify-content:center;margin:14px 0}.totp-qr{width:220px;height:220px;border:1px solid #dce4ef;border-radius:10px;background:#fff;image-rendering:pixelated}
.totp-secret-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:stretch}.totp-secret-row code{min-width:0;display:flex;align-items:center;letter-spacing:1px}.totp-secret-row button{width:auto;margin:0}
@media(max-width:800px){.app{grid-template-columns:1fr}aside{height:auto;position:static}aside nav{display:flex;flex-wrap:wrap}.aside-bottom{margin-top:16px}.split{grid-template-columns:1fr}.content{padding:14px}}
