:root{--bg: #f6f5f3;--surface: #ffffff;--ink: #1c1917;--muted: #57534e;--line: #e7e5e4;--brand: #5b21b6;--brand-soft: #f3e8ff;--brand-ink: #ffffff;--ok: #047857;--warn: #b45309;--danger: #b91c1c;--radius: 12px;--shadow: 0 1px 2px rgba(28, 25, 23, .06);--space: 8px;--control: 40px;--sidebar: 248px;font-family:Vazirmatn,sans-serif;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}a{color:inherit}.shell{display:flex;min-height:100vh}.sidebar{width:var(--sidebar);background:var(--surface);border-inline-start:1px solid var(--line);padding:calc(var(--space) * 2);display:flex;flex-direction:column;gap:calc(var(--space) * 2);position:sticky;top:0;height:100vh}.sidebar.collapsed{width:72px}.sidebar-brand{display:flex;align-items:center;gap:var(--space);padding:var(--space)}.brand-mark{width:32px;height:32px;border-radius:10px;background:var(--brand);color:var(--brand-ink);display:grid;place-items:center;font-weight:700}.brand-text{font-weight:700}.sidebar nav{display:flex;flex-direction:column;gap:4px;flex:1}.sidebar a.nav{display:flex;align-items:center;gap:var(--space);border:0;background:transparent;text-align:right;padding:var(--space) 12px;border-radius:10px;cursor:pointer;text-decoration:none;min-height:var(--control)}.sidebar a.nav.active{background:var(--brand-soft);color:var(--brand);font-weight:600}.sidebar-toggle{width:100%;justify-content:center;gap:var(--space)}.topbar{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;background:var(--surface);border-bottom:1px solid var(--line);min-height:calc(var(--control) + 16px)}.topbar-title{display:flex;flex-direction:column;gap:4px}.topbar-title small{color:var(--muted)}.main{flex:1;display:flex;flex-direction:column;min-width:0}.content{padding:24px;display:flex;flex-direction:column;gap:calc(var(--space) * 2)}.page-title{margin:0;font-size:1.5rem}.upload-row{display:flex;align-items:center;gap:calc(var(--space) * 2);min-height:40px}.upload-progress{width:240px;height:8px}.catalog-tree,.catalog-tree ul{margin:0;padding-inline-start:calc(var(--space) * 3)}.grid,.stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:calc(var(--space) * 2)}.chart-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:calc(var(--space) * 2)}.chart-card h2{margin:0 0 calc(var(--space) * 2);font-size:1rem}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:calc(var(--space) * 2)}.stat-card strong{display:block;font-size:28px;margin-top:var(--space);color:var(--brand)}.stat-label{color:var(--muted);font-size:.875rem}.note-card p{margin:0 0 var(--space);line-height:1.7}.muted{color:var(--muted);font-size:.875rem}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}table{width:100%;border-collapse:collapse;background:var(--surface)}th,td{padding:12px;border-bottom:1px solid var(--line);text-align:right}th{background:#fafaf9;font-weight:600;font-size:.875rem}tbody tr:last-child td{border-bottom:0}.badge{border-radius:999px;padding:2px 8px;font-size:12px;display:inline-block;white-space:nowrap}.badge-neutral{background:#f5f5f4;color:var(--muted)}.badge-success{background:#ecfdf5;color:var(--ok)}.badge-warn{background:#fffbeb;color:var(--warn)}.badge-danger{background:#fef2f2;color:var(--danger)}.btn{height:var(--control);border-radius:10px;border:1px solid var(--line);background:var(--surface);padding:0 16px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--space)}.btn.primary{background:var(--brand);color:var(--brand-ink);border-color:var(--brand)}.btn.ghost{background:transparent}.btn:hover:not(:disabled){background:#f5f5f4}.btn.primary:hover:not(:disabled){background:#4c1d95}.btn.ghost:hover:not(:disabled){background:var(--brand-soft)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.field{display:flex;flex-direction:column;gap:var(--space)}.field span{font-size:.875rem;color:var(--muted)}input,select,textarea{border:1px solid var(--line);border-radius:10px;background:#fff;font:inherit}input,select{height:var(--control);padding:0 12px}textarea{min-height:96px;padding:8px 12px;resize:vertical}.toolbar{max-width:360px}.section-title{margin:0 0 calc(var(--space) * 2);font-size:1rem}.section-lead{margin:0 0 calc(var(--space) * 2)}.stack-section{display:flex;flex-direction:column;gap:calc(var(--space) * 2)}.course-picks{grid-column:1 / -1;display:flex;flex-direction:column;gap:var(--space);margin:0;border:0;padding:0}.course-picks label{display:flex;gap:var(--space);align-items:center}.attach-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:calc(var(--space) * 2);align-items:end}.form-ok{margin:0}.pager{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--space) * 2);flex-wrap:wrap}.pager-meta{color:var(--muted);font-size:.875rem}.skeleton{display:flex;flex-direction:column;gap:var(--space);padding:calc(var(--space) * 2);border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.skeleton-bar{display:block;height:16px;border-radius:8px;background:#e7e5e4}.skeleton-bar:last-child{width:66%}@media (prefers-reduced-motion: no-preference){.skeleton-bar{animation:skeleton-pulse 1.2s ease-in-out infinite}}@keyframes skeleton-pulse{50%{opacity:.45}}.empty,.error,.block-error{padding:calc(var(--space) * 4);text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:var(--radius);background:var(--surface);margin:0}.error,.block-error{color:var(--danger);border-color:#fecaca;background:#fef2f2}.bar-chart{display:flex;flex-direction:column;gap:var(--space)}.bar-row{display:grid;grid-template-columns:88px 1fr 72px;align-items:center;gap:var(--space)}.bar-label{font-size:.75rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-track{height:12px;background:#f5f5f4;border-radius:999px;overflow:hidden}.bar-fill{height:100%;background:linear-gradient(90deg,#7c3aed,var(--brand));border-radius:999px;min-width:2px}.bar-value{font-size:.75rem;text-align:left;direction:ltr}.login{min-height:100vh;display:grid;place-items:center;padding:calc(var(--space) * 2)}.login-card{width:min(400px,92vw);display:flex;flex-direction:column;gap:12px}.login-card h1{margin:0;font-size:1.25rem}.login-lead{margin:0;color:var(--muted);font-size:.875rem}@media (max-width: 1100px){.grid,.stat-grid{grid-template-columns:1fr 1fr}.chart-grid{grid-template-columns:1fr}}@media (max-width: 640px){.grid,.stat-grid{grid-template-columns:1fr}.sidebar:not(.collapsed){position:fixed;inset:0 0 0 auto;z-index:20;box-shadow:var(--shadow)}}.overlay-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;background:#1c191766}.drawer-panel{position:fixed;inset-block:0;z-index:31;display:flex;flex-direction:column;width:min(400px,88vw);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow)}.drawer-left{left:0;border-radius:0 var(--radius) var(--radius) 0}.drawer-right{right:0;border-radius:var(--radius) 0 0 var(--radius)}.drawer-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space);padding:calc(var(--space) * 2);border-bottom:1px solid var(--line);min-height:calc(var(--control) + var(--space))}.drawer-title{margin:0;font-size:1rem}.drawer-close{width:var(--control);padding:0;flex-shrink:0}.drawer-body{padding:calc(var(--space) * 2);overflow:auto;flex:1}.detail-list{margin:0;display:flex;flex-direction:column;gap:calc(var(--space) * 2)}.detail-row{display:flex;flex-direction:column;gap:4px}.detail-row dt{margin:0;font-size:.875rem;color:var(--muted)}.detail-row dd{margin:0}.confirm-dialog{position:fixed;z-index:31;top:50%;left:50%;transform:translate(-50%,-50%);width:min(420px,92vw);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:calc(var(--space) * 3);display:flex;flex-direction:column;gap:calc(var(--space) * 2)}.confirm-title{margin:0;font-size:1.125rem}.confirm-message{margin:0;color:var(--muted);line-height:1.6}.confirm-actions{display:flex;justify-content:flex-end;gap:var(--space);flex-wrap:wrap}.confirm-danger{background:var(--danger);border-color:var(--danger)}
