:root{--bg:#0f172a;--side:#1e293b;--card:#1e293b;--hover:#334155;--tx:#f8fafc;--mut:#94a3b8;--pri:#6366f1;--prih:#4f46e5;--ok:#10b981;--warn:#f59e0b;--err:#ef4444;--bd:#334155;--rad:12px;--f:'Outfit',system-ui,sans-serif}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:var(--f);background:var(--bg);color:var(--tx);height:100vh;overflow:hidden}
.hidden{display:none!important}.spacer{flex:1}.center{text-align:center}.muted{color:var(--mut)}.block{width:100%}
.boot{height:100vh;display:grid;place-items:center;color:var(--mut)}.boot i{font-size:2.5rem;color:var(--pri)}
.app-container{display:grid;grid-template-columns:260px 1fr;height:100%}
.sidebar{background:var(--side);border-right:1px solid var(--bd);padding:1.25rem;display:flex;flex-direction:column;gap:1.5rem;overflow:auto}
.brand{display:flex;align-items:center;gap:.6rem;color:var(--pri)}.brand h1{font-size:1.4rem;color:var(--tx)}.brand i{font-size:1.8rem}.brand.center{justify-content:center;margin-bottom:1rem}.ver{font-size:.8rem;color:var(--mut)}
.nav-menu{display:flex;flex-direction:column;gap:.4rem;flex:1}
.nav-item{display:flex;align-items:center;gap:.7rem;padding:.7rem .9rem;border-radius:var(--rad);background:transparent;border:0;color:var(--mut);font:inherit;cursor:pointer;text-align:left}
.nav-item:hover{background:var(--hover);color:var(--tx)}.nav-item.active{background:var(--pri);color:#fff}
.user-profile{display:flex;align-items:center;gap:.6rem;border-top:1px solid var(--bd);padding-top:1rem}
.avatar{width:38px;height:38px;border-radius:50%;background:var(--pri);display:grid;place-items:center;font-weight:700;color:#fff}
.info{display:flex;flex-direction:column;min-width:0}.name{font-weight:600}.role{font-size:.75rem;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.main-content{display:flex;flex-direction:column;min-width:0}
.top-bar{display:flex;align-items:center;gap:1rem;padding:1rem 1.5rem;border-bottom:1px solid var(--bd)}
.top-bar h2{flex:1}.actions{display:flex;align-items:center;gap:.8rem}
.icon-btn{background:var(--hover);border:0;color:var(--tx);width:38px;height:38px;border-radius:10px;cursor:pointer}
.sync-dot{width:10px;height:10px;border-radius:50%;background:var(--ok)}
.view{padding:1.5rem;overflow:auto;flex:1}
.auth-container{min-height:100vh;display:grid;place-items:center;padding:1rem}
.auth-card{background:var(--card);border:1px solid var(--bd);border-radius:16px;padding:2rem;width:min(420px,100%)}
.form-group{margin-bottom:1rem}.form-group label{display:block;margin-bottom:.35rem;color:var(--mut);font-size:.9rem}
.form-control{width:100%;padding:.65rem .8rem;border-radius:10px;border:1px solid var(--bd);background:var(--bg);color:var(--tx);font:inherit}
.form-control:focus{outline:2px solid var(--pri);outline-offset:1px}
.field-err,.error-text{color:var(--err);font-size:.85rem}.ok-text{color:var(--ok)}.warn{color:var(--warn);font-size:.9rem;margin-bottom:1rem}
.btn{border:0;border-radius:10px;padding:.65rem 1.1rem;font:inherit;cursor:pointer;background:var(--hover);color:var(--tx)}
.btn-primary{background:var(--pri);color:#fff}.btn-primary:hover{background:var(--prih)}
.btn-danger{background:var(--err);color:#fff}.btn-sm{padding:.4rem .7rem;font-size:.9rem}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:1.5rem}
.card{background:var(--card);border:1px solid var(--bd);border-radius:var(--rad);padding:1.1rem}
.card .k{color:var(--mut);font-size:.85rem}.card .v{font-size:1.6rem;font-weight:700;margin-top:.3rem}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1rem}
.panel{background:var(--card);border:1px solid var(--bd);border-radius:var(--rad);padding:1.1rem}
.panel h3{margin-bottom:.8rem}
table{width:100%;border-collapse:collapse}th,td{padding:.55rem .5rem;border-bottom:1px solid var(--bd);text-align:left;font-size:.95rem}
th{color:var(--mut);font-weight:500}
.badge{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.78rem;background:var(--hover)}
.badge.ok{background:#065f46}.badge.warn{background:#92400e}.badge.err{background:#7f1d1d}
.empty{text-align:center;color:var(--mut);padding:2rem 1rem}
.empty .btn{margin-top:1rem}
.empty-state{border:1px dashed var(--bd);border-radius:var(--rad);padding:1rem}
.error-state{border:1px solid var(--err);border-radius:var(--rad);padding:1rem;color:#fecaca}
.skel{height:90px;border-radius:var(--rad);background:linear-gradient(90deg,var(--card),var(--hover),var(--card));animation:pulse 1.2s infinite}
@keyframes pulse{50%{opacity:.6}}
.modal-overlay{position:fixed;inset:0;background:rgb(0 0 0/.6);display:grid;place-items:center;z-index:50;padding:1rem}
.modal{background:var(--card);border:1px solid var(--bd);border-radius:16px;padding:1.5rem;width:min(560px,100%);max-height:90vh;overflow:auto}
.toast-root{position:fixed;right:1rem;bottom:1rem;display:flex;flex-direction:column;gap:.5rem;z-index:60}
.toast{background:var(--card);border:1px solid var(--bd);border-left:4px solid var(--ok);padding:.7rem 1rem;border-radius:10px}
.toast.err{border-left-color:var(--err)}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:.4rem}
.cal .dow,.cal .cell{min-height:64px;border:1px solid var(--bd);border-radius:8px;padding:.3rem;font-size:.82rem}
.cal .dow{min-height:auto;text-align:center;color:var(--mut);background:none;border:0}
.cal .cell.dim{opacity:.35}
.cal .ev{display:block;background:var(--pri);border-radius:6px;padding:.05rem .3rem;margin-top:.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar{height:10px;background:var(--hover);border-radius:999px;overflow:hidden}.bar>i{display:block;height:100%;background:var(--ok)}
@media(max-width:760px){.app-container{grid-template-columns:1fr}.sidebar{position:fixed;z-index:40;width:250px;height:100%;transform:translateX(-100%);transition:.2s}.sidebar.open{transform:none}}
@media print{body{overflow:visible}.sidebar,.top-bar,.actions{display:none!important}.view{overflow:visible}}
