:root{
  --brand:#1d4ed8; --brand-accent:#0ea5e9; --radius:10px;
  --ink:#0f172a; --ink-soft:#475569; --line:#e2e8f0; --surface:#ffffff; --canvas:#f1f5f9;
  --app-font:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  --sidebar-w:236px;
}
[data-bs-theme="dark"]{--ink:#e2e8f0;--ink-soft:#94a3b8;--line:#1e293b;--surface:#0f172a;--canvas:#020617;}

body{font-family:var(--app-font);background:var(--canvas);color:var(--ink);}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}

/* ---------- shell ---------- */
.app-shell{display:block;min-height:100vh}
.app-sidebar{
  position:fixed;inset:0 auto 0 0;width:var(--sidebar-w);display:flex;flex-direction:column;
  background:#0f172a;color:#cbd5e1;padding:18px 12px;z-index:1040;transition:transform .2s ease;
}
.sidebar-brand .app-sidebar{background:var(--brand)}
.sidebar-light .app-sidebar{background:#fff;color:#334155;border-right:1px solid var(--line)}
.app-sidebar .brand{display:flex;align-items:center;gap:10px;padding:4px 8px 18px}
.app-sidebar .brand img{max-height:36px;max-width:130px}
.brand-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:var(--radius);background:var(--brand);color:#fff;font-weight:700;font-size:14px}
.brand-name{font-weight:600;font-size:15px;color:inherit}
.side-nav{display:flex;flex-direction:column;gap:2px;overflow-y:auto}
.side-foot{margin-top:auto;padding-top:12px;border-top:1px solid rgba(148,163,184,.25)}
.side-link{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--radius);color:inherit;font-size:14px}
.side-link:hover{background:rgba(148,163,184,.16);text-decoration:none}
.side-link.active{background:var(--brand);color:#fff}
.sidebar-brand .side-link.active{background:rgba(255,255,255,.22)}
.side-link i{font-size:16px;width:18px;text-align:center}

.app-main{margin-left:var(--sidebar-w);display:flex;flex-direction:column;min-height:100vh}
.app-topbar{position:sticky;top:0;z-index:1020;display:flex;align-items:center;gap:12px;
  padding:12px 20px;background:var(--surface);border-bottom:1px solid var(--line)}
.page-title{font-size:17px;font-weight:600;margin:0}
.app-content{padding:20px;flex:1}
.app-footer{padding:14px 20px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-soft)}
.sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:1035}
body.nav-open .sidebar-backdrop{display:block}

@media (max-width:991.98px){
  .app-sidebar{transform:translateX(-100%)}
  body.nav-open .app-sidebar{transform:none}
  .app-main{margin-left:0}
  .app-content{padding:14px}
}

/* ---------- components ---------- */
.btn-brand{background:var(--brand);border-color:var(--brand);color:#fff}
.btn-brand:hover,.btn-brand:focus{background:color-mix(in srgb,var(--brand) 85%,#000);border-color:transparent;color:#fff}
.card.app-card{border:1px solid var(--line);border-radius:var(--radius);box-shadow:none;background:var(--surface)}
.app-card .card-header{display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:transparent;border-bottom:1px solid var(--line);font-weight:600;font-size:14px}
.app-card .card-footer{background:transparent;border-top:1px solid var(--line)}
.table thead th{font-size:12px;font-weight:600;color:var(--ink-soft);text-transform:none}
.form-label{font-size:13px;font-weight:500;margin-bottom:4px}
.app-tabs .nav-link{color:var(--ink-soft);font-size:14px;padding:6px 14px;border-radius:var(--radius)}
.app-tabs .nav-link.active{background:var(--brand);color:#fff}

.stat-card{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:16px;height:100%}
.stat-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:var(--radius);
  background:color-mix(in srgb,var(--brand) 12%,transparent);color:var(--brand);font-size:19px;flex:none}
.stat-value{font-size:19px;font-weight:700;line-height:1.2}
.stat-label{font-size:13px;color:var(--ink-soft)}
.stat-hint{font-size:11px;color:var(--ink-soft);opacity:.75}

.spark{display:flex;align-items:flex-end;gap:14px;height:180px}
.spark-col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;gap:6px}
.spark-bar{width:100%;max-width:46px;border-radius:calc(var(--radius) / 2) calc(var(--radius) / 2) 0 0;
  background:linear-gradient(180deg,var(--brand-accent),var(--brand))}
.spark-col span{font-size:11px;color:var(--ink-soft)}

.upload-preview{display:flex;align-items:center;gap:10px;padding:6px;border:1px dashed var(--line);border-radius:var(--radius)}
.upload-preview img{max-height:42px;max-width:110px}

/* ---------- auth ---------- */
.auth-body{min-height:100vh;display:grid;place-items:center;padding:24px;
  background:radial-gradient(1200px 600px at 15% 0%,color-mix(in srgb,var(--brand) 22%,#0f172a),#0f172a)}
.auth-card{width:100%;max-width:380px;background:#fff;border-radius:calc(var(--radius) + 4px);padding:28px}
.auth-brand{text-align:center;margin-bottom:20px}
.auth-brand img{max-height:52px;margin-bottom:10px}
.auth-brand h1{font-size:19px;font-weight:600;margin:0}
.auth-brand p{font-size:13px;color:#64748b;margin:4px 0 0}

@media print{.app-sidebar,.app-topbar,.app-footer{display:none}.app-main{margin:0}}
