@font-face{font-family:Kalpurush;src:url(../fonts/Kalpurush.ttf) format('truetype');font-display:swap}
:root{--g:#006a4e;--gd:#00432f;--r:#d62839;--bg:#f4f7f3;--ink:#17261f;--line:#d7e0d9}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}
body{margin:0;font:17px/1.65 Kalpurush,'Noto Sans Bengali',sans-serif;background:var(--bg);color:var(--ink)}
h1{font-size:1.5rem;margin:.2rem 0 1rem}h2{font-size:1.15rem}a{color:var(--g)}
:focus-visible{outline:3px solid #f2b705;outline-offset:2px}
#side{position:fixed;inset:0 auto 0 0;width:250px;background:var(--gd);color:#fff;display:flex;flex-direction:column;padding:1rem;z-index:20}
.brand{font-size:1.4rem;padding-bottom:1rem;border-bottom:3px solid var(--r)}.brand small{display:block;font-size:.8rem;opacity:.8}
#side nav{display:flex;flex-direction:column;gap:.2rem;margin-top:1rem;flex:1}
#side nav a{color:#fff;text-decoration:none;padding:.6rem .8rem;border-radius:6px}#side nav a:hover{background:rgba(255,255,255,.12)}
.logout{display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.9rem}#side .btn.ghost{color:#fff}
main{margin-left:250px;padding:1.5rem;max-width:1200px}
.top{display:none;position:sticky;top:0;background:var(--gd);color:#fff;align-items:center;gap:.8rem;z-index:15;padding:max(.5rem,env(safe-area-inset-top)) 1rem .5rem}
.icon{background:none;border:0;color:#fff;font-size:1.6rem;min-width:44px;min-height:44px;cursor:pointer}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:1.2rem}
.btn{display:inline-block;background:var(--g);color:#fff;border:0;border-radius:8px;padding:.6rem 1.1rem;font:inherit;cursor:pointer;text-decoration:none;min-height:44px}
.btn:hover{background:var(--gd)}.btn.ghost{background:transparent;border:1px solid currentColor}main .btn.ghost{color:var(--g)}
.link{background:none;border:0;color:var(--g);font:inherit;cursor:pointer;padding:0}.danger{color:var(--r)}
input,select{width:100%;font:inherit;padding:.55rem .7rem;border:1px solid #b9c7be;border-radius:8px;background:#fff;min-height:44px}
label{display:block;font-size:.95rem}label input,label select{margin-top:.25rem}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}.full{grid-column:1/-1}
.row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.8rem}
.filters{display:flex;gap:.6rem;flex-wrap:wrap;margin:.5rem 0 1rem}.filters input{flex:2 1 220px}.filters select{flex:1 1 160px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem}
.big b{display:block;font-size:2.6rem;line-height:1.1;color:var(--g)}
.bar{display:grid;grid-template-columns:130px 1fr 50px;align-items:center;gap:.6rem;margin:.4rem 0}.bar i{display:block;height:14px;background:var(--g);border-radius:7px;min-width:3px}.bar em{font-style:normal}
.tbl{width:100%;border-collapse:collapse;background:#fff;border-radius:10px;overflow:hidden}
.tbl th,.tbl td{padding:.65rem .8rem;border-bottom:1px solid var(--line);text-align:left}.tbl th{background:#e6eee8}
.act{display:flex;gap:.8rem;flex-wrap:wrap}.act form{margin:0}
.pager{display:flex;gap:.3rem;flex-wrap:wrap;margin:1rem 0}.pager a{padding:.4rem .8rem;border:1px solid var(--line);border-radius:6px;text-decoration:none;background:#fff}.pager .on{background:var(--g);color:#fff}
.flash{background:#e1f3ea;border-left:5px solid var(--g);padding:.7rem 1rem;margin-bottom:1rem;border-radius:6px}
.err{background:#fde8ea;border-left:5px solid var(--r);padding:.7rem 1rem;border-radius:6px;list-style:none}
.empty,.muted{color:#5b6b62}.gpa{font-size:1.2rem}.gpa b{font-size:1.8rem;color:var(--g)}
.auth{display:grid;place-items:center;min-height:100vh;padding:1rem}.login{width:min(100%,400px);display:grid;gap:1rem}
@media(max-width:860px){
 .top{display:flex}#side{transform:translateX(-100%);transition:transform .2s}#side.open{transform:none}
 main{margin-left:0;padding:1rem}
 .tbl,.tbl tbody,.tbl tr,.tbl td{display:block}.tbl thead{display:none}
 .tbl tr{margin-bottom:.8rem;border:1px solid var(--line);border-radius:10px;padding:.4rem}
 .tbl td{border:0;display:flex;justify-content:space-between;gap:1rem;padding:.35rem .5rem}
 .tbl td::before{content:attr(data-l);color:#5b6b62}.tbl td input{max-width:130px}
 .bar{grid-template-columns:90px 1fr 40px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
