:root{--side-w:250px;--brand:#0d6efd;--bg:#f4f6fb}
body{background:var(--bg);font-size:.95rem}
.app-shell{display:flex;min-height:100vh}
.sidebar{width:var(--side-w);background:#14213d;color:#cfd6e6;position:fixed;inset:0 auto 0 0;overflow-y:auto;z-index:1040;transition:transform .2s}
.sidebar-brand{display:flex;align-items:center;gap:.6rem;padding:1.1rem 1.25rem;color:#fff;font-weight:700;font-size:1.15rem}
.sidebar .nav-link{color:#cfd6e6;padding:.6rem 1.25rem;display:flex;gap:.6rem;align-items:center;border-left:3px solid transparent}
.sidebar .nav-link:hover{background:rgba(255,255,255,.07);color:#fff}
.sidebar .nav-link.active{background:rgba(13,110,253,.25);color:#fff;border-left-color:var(--brand)}
.nav-section{padding:1rem 1.25rem .3rem;font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:#7d89a8}
.main{margin-left:var(--side-w);flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;padding:.6rem 1.25rem;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.06);position:sticky;top:0;z-index:1030}
.content{padding:1.25rem}
.brand-badge{width:56px;height:56px;border-radius:14px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.6rem;font-weight:700}
.brand-badge.sm{width:34px;height:34px;font-size:1.1rem;border-radius:9px}
.stat-icon{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:1.3rem}
.login-bg{background:linear-gradient(135deg,#14213d,#274690)}
.login-card{width:100%;max-width:400px;border-radius:16px}
.sidebar-backdrop{display:none}
@media (max-width:991.98px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:none}
  .sidebar-backdrop.show{display:block;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1035}
  .main{margin-left:0}
}
th a.sort{color:inherit;text-decoration:none;white-space:nowrap}
th a.sort:hover{color:var(--brand)}
@media print{.sidebar,.topbar,.no-print,.breadcrumb,.toast-container{display:none!important}.main{margin:0}.content{padding:0}.card{box-shadow:none!important;border:0!important}body{background:#fff}}

.list-thumb{width:48px;height:48px;object-fit:cover;border-radius:8px;cursor:zoom-in;display:block}
.list-thumb.empty{background:#e9ecef;color:#adb5bd;display:flex;align-items:center;justify-content:center;cursor:default}
.photo-card{position:relative;border-radius:10px;overflow:hidden;background:#e9ecef}
.photo-thumb{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;cursor:zoom-in}
.photo-badge{position:absolute;top:8px;left:8px}
.photo-actions{position:absolute;bottom:6px;right:6px;display:flex;gap:4px}
.gallery-card img,.gallery-card .ph{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.gallery-card .ph{background:#e9ecef;color:#adb5bd;display:flex;align-items:center;justify-content:center;font-size:2rem}
.gallery-card{transition:transform .1s}.gallery-card:hover{transform:translateY(-2px)}

.gsearch{max-width:560px}
.gs-results{position:absolute;top:100%;left:0;right:0;margin-top:6px;background:#fff;border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.18);max-height:70vh;overflow-y:auto;z-index:1060}
.gs-item{display:flex;gap:.75rem;align-items:center;padding:.55rem .75rem;color:inherit;text-decoration:none;border-bottom:1px solid #f0f2f5}
.gs-item:hover{background:#f4f7ff}
.gs-item img,.gs-ph{width:44px;height:44px;border-radius:8px;object-fit:cover;flex:none;background:#e9ecef;color:#adb5bd;display:flex;align-items:center;justify-content:center}
.gs-body{min-width:0}.gs-body div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gs-more{display:block;text-align:center;padding:.6rem;font-size:.9rem;text-decoration:none;background:#f8f9fa}
a.stat-link{text-decoration:none;color:inherit;display:block}
a.stat-link .stat-card{transition:transform .1s,box-shadow .1s}
a.stat-link:hover .stat-card{transform:translateY(-2px);box-shadow:0 .4rem 1rem rgba(0,0,0,.1)!important}
.chart-box{position:relative;height:260px}
