/* School ERP admin theme. Layered on the self-hosted Bootstrap 5.3 build in /assets/vendor.
   No inline styles anywhere (CSP): everything is class based. Legacy class names used by older views
   (.btn.primary, .badge.ok, .alert.success, .field, .stats ...) are mapped here so every page gets the same look. */
:root{
  --bs-primary:#3560d4;--bs-primary-rgb:53,96,212;
  --bs-success:#17a673;--bs-success-rgb:23,166,115;
  --bs-warning:#f4a21b;--bs-warning-rgb:244,162,27;
  --bs-danger:#e0483e;--bs-danger-rgb:224,72,62;
  --bs-info:#2f9bd6;--bs-info-rgb:47,155,214;
  --bs-link-color:#3560d4;--bs-link-color-rgb:53,96,212;--bs-link-hover-color:#2447ab;--bs-link-hover-color-rgb:36,71,171;
  --bs-body-bg:#f2f5fa;--bs-body-color:#27334a;--bs-border-color:#e3e8f0;
  --bs-body-font-family:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans","Noto Sans Devanagari",sans-serif;
  --bs-body-font-size:.925rem;
  --sb-bg:#111b2e;--sb-bg-2:#18253c;--sb-text:#a9b6cc;--sb-active:#fff;--sb-w:260px;--sb-w-min:72px;
  --card-shadow:0 1px 2px rgba(20,32,60,.05),0 4px 14px rgba(20,32,60,.05);
  --c-1:#3560d4;--c-2:#17a673;--c-3:#f4a21b;--c-4:#e0483e;--c-5:#7a5af5;--c-6:#2f9bd6;
}
html{font-size:16px}
body{background:var(--bs-body-bg);color:var(--bs-body-color);min-height:100vh;display:flex;flex-direction:column;font-size:var(--bs-body-font-size)}
h1,h2,h3,h4,h5{color:#18243b;font-weight:650}
h1{font-size:1.45rem;margin:0}h2{font-size:1.05rem;margin:0 0 .85rem}h3{font-size:.98rem}
a{text-decoration:none}a:hover{text-decoration:underline}
code{background:#edf1f8;color:#34456b;padding:.1rem .35rem;border-radius:4px;font-size:.88em}
.sr,.skip:not(:focus){position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.skip:focus{position:fixed;top:.5rem;left:.5rem;background:#fff;padding:.5rem 1rem;z-index:2000}
:focus-visible{outline:3px solid #f2a900;outline-offset:2px}
.muted{color:#6b7a93!important}.center{text-align:center}.top-gap{margin-top:1rem}.lead{font-size:1.15rem}.wrap-any{word-break:break-all}.secret{font-size:1.1rem;letter-spacing:.05em}

/* ---------- shell ---------- */
.app{display:flex;flex:1;min-height:0}
.sidebar{width:var(--sb-w);background:var(--sb-bg);color:var(--sb-text);flex-shrink:0;position:sticky;top:0;height:100vh;overflow-y:auto;z-index:1030;transition:width .18s ease;display:flex;flex-direction:column}
.sidebar::-webkit-scrollbar{width:6px}.sidebar::-webkit-scrollbar-thumb{background:#2b3b58;border-radius:3px}
.sb-brand{display:flex;align-items:center;gap:.7rem;padding:1.05rem 1.2rem;color:#fff;border-bottom:1px solid rgba(255,255,255,.07);min-height:68px}
.sb-brand:hover{text-decoration:none;color:#fff}
.sb-logo{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#4f7bf0,#3560d4);display:grid;place-items:center;font-size:1.05rem;flex-shrink:0;color:#fff}
.sb-name{font-weight:700;line-height:1.15;font-size:.98rem}.sb-name small{display:block;font-weight:400;font-size:.72rem;color:var(--sb-text);margin-top:2px}
.sb-group{padding:1.15rem 1.35rem .4rem;font-size:.68rem;letter-spacing:.09em;text-transform:uppercase;color:#62718d;font-weight:600}
.sb-list{list-style:none;margin:0;padding:0 .7rem}
.sb-list a{display:flex;align-items:center;gap:.8rem;padding:.6rem .8rem;margin:2px 0;border-radius:8px;color:var(--sb-text);font-weight:500;transition:background .12s,color .12s}
.sb-list a:hover{background:var(--sb-bg-2);color:#fff;text-decoration:none}
.sb-list a.active{background:var(--bs-primary);color:var(--sb-active);box-shadow:0 4px 12px rgba(53,96,212,.35)}
.sb-list .fa-solid{width:1.2rem;text-align:center;font-size:.95rem}
.sb-foot{margin-top:auto;padding:1rem 1.35rem;font-size:.72rem;color:#62718d;border-top:1px solid rgba(255,255,255,.07)}
body.sidebar-collapsed .sidebar{width:var(--sb-w-min)}
body.sidebar-collapsed .sb-name,body.sidebar-collapsed .sb-group,body.sidebar-collapsed .sb-label,body.sidebar-collapsed .sb-foot{display:none}
body.sidebar-collapsed .sb-list a{justify-content:center;padding:.7rem}
body.sidebar-collapsed .sb-brand{justify-content:center;padding:1rem .5rem}
.content{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{background:#fff;border-bottom:1px solid var(--bs-border-color);padding:.55rem 1.25rem;display:flex;align-items:center;gap:.75rem;position:sticky;top:0;z-index:1020;min-height:68px}
.tb-btn{border:0;background:#f0f3f9;color:#4a5b78;width:38px;height:38px;border-radius:9px;display:grid;place-items:center;cursor:pointer}
.tb-btn:hover{background:#e3e9f5}
.topbar .spacer{flex:1}
.tb-session{font-size:.78rem;color:#52627f;background:#eef2fa;border-radius:999px;padding:.25rem .75rem;white-space:nowrap}
.topbar select{max-width:13rem}
.user-chip{display:flex;align-items:center;gap:.6rem;background:none;border:0;padding:.2rem .4rem;border-radius:10px;color:inherit}
.user-chip:hover{background:#f0f3f9}
.avatar{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,#7a5af5,#3560d4);color:#fff;display:grid;place-items:center;font-weight:700;font-size:.85rem;flex-shrink:0}
.user-meta{text-align:left;line-height:1.15}.user-meta strong{display:block;font-size:.85rem;color:#18243b}.user-meta small{color:#6b7a93;font-size:.72rem}
.dropdown-menu{border:1px solid var(--bs-border-color);box-shadow:0 10px 30px rgba(20,32,60,.12);border-radius:12px;padding:.4rem}
.dropdown-item{border-radius:8px;padding:.5rem .8rem;font-size:.88rem}
.main{flex:1;padding:1.5rem;max-width:1500px;width:100%}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.25rem}
.crumbs{font-size:.8rem;color:#6b7a93;margin-top:.15rem}.crumbs a{color:#6b7a93}
.footer{padding:.9rem 1rem;text-align:center;color:#6b7a93;font-size:.82rem;border-top:1px solid var(--bs-border-color);background:#fff}

/* ---------- cards / panels ---------- */
.card,.panel{background:#fff;border:1px solid var(--bs-border-color);border-radius:14px;box-shadow:var(--card-shadow);padding:1.15rem 1.3rem;margin:0 0 1.25rem}
.card>.card-body{padding:0}
.card h2{padding-bottom:.65rem;border-bottom:1px solid #eef1f6}
.card.narrow{max-width:440px;margin:0 auto}
.panel-flush{padding:0;overflow:hidden}.panel-flush>h2{padding:1rem 1.3rem;margin:0}

/* ---------- stat tiles / dashboard ---------- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.1rem;margin-bottom:1.25rem}
.stat{display:flex;align-items:center;gap:1rem;background:#fff;border:1px solid var(--bs-border-color);border-radius:14px;box-shadow:var(--card-shadow);padding:1.1rem 1.2rem;color:var(--bs-body-color);transition:transform .12s,box-shadow .12s}
a.stat:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(20,32,60,.1);text-decoration:none}
.stat .ico{width:52px;height:52px;border-radius:14px;display:grid;place-items:center;font-size:1.3rem;color:#fff;flex-shrink:0}
.stat .n{font-size:1.65rem;font-weight:700;color:#18243b;line-height:1.1;display:block}
.stat .l{font-size:.8rem;color:#6b7a93}
.ico.c1{background:linear-gradient(135deg,#5b86f5,#3560d4)}.ico.c2{background:linear-gradient(135deg,#2ec99a,#17a673)}
.ico.c3{background:linear-gradient(135deg,#f8bc4c,#ee9210)}.ico.c4{background:linear-gradient(135deg,#ef7268,#d93a30)}
.ico.c5{background:linear-gradient(135deg,#9b82f9,#6b49e6)}.ico.c6{background:linear-gradient(135deg,#55b8ea,#2488c4)}
.dash-grid{display:grid;grid-template-columns:2fr 1fr;gap:1.25rem}
.dash-grid.even{grid-template-columns:1fr 1fr}
.quick{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}
.quick a{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1rem .5rem;border:1px dashed #cfd8e8;border-radius:12px;color:#34456b;font-weight:500;font-size:.85rem;text-align:center;background:#fafbfe}
.quick a:hover{background:#eef3ff;border-color:var(--bs-primary);color:var(--bs-primary);text-decoration:none}
.quick .fa-solid{font-size:1.35rem;color:var(--bs-primary)}
.chart-box{display:flex;align-items:center;justify-content:center;gap:1.5rem;flex-wrap:wrap}
.donut{width:150px;height:150px}.donut .track{stroke:#edf1f8}.donut .val{stroke:var(--c-2);transition:stroke-dasharray .4s}
.donut text{fill:#18243b;font-weight:700;text-anchor:middle}.donut .sub{fill:#6b7a93;font-size:3px;font-weight:400}
.bars{width:100%;max-width:640px;height:auto;display:block}.bars .lbl{fill:#52627f;font-size:5.4px}.bars .num{fill:#18243b;font-size:5.4px;font-weight:600}
.bars .bg{fill:#eef1f7}.bars .b1{fill:var(--c-1)}.bars .b2{fill:var(--c-2)}.bars .b3{fill:var(--c-3)}.bars .b4{fill:var(--c-4)}.bars .b5{fill:var(--c-5)}.bars .b6{fill:var(--c-6)}
.legend{list-style:none;padding:0;margin:0;font-size:.84rem}.legend li{display:flex;align-items:center;gap:.5rem;padding:.2rem 0}
.dot{width:10px;height:10px;border-radius:50%;display:inline-block}.dot.d1{background:var(--c-1)}.dot.d2{background:var(--c-2)}.dot.d3{background:var(--c-3)}.dot.d4{background:var(--c-4)}

/* ---------- forms ---------- */
.field{margin-bottom:1rem}.field label,.form-label{display:block;font-weight:600;margin-bottom:.3rem;font-size:.85rem;color:#33425e}
.field label.check,label.check{font-weight:400;display:flex;align-items:center;gap:.5rem;margin:.3rem 0;font-size:.9rem}
input,select,textarea{font:inherit}
.field input:not([type=checkbox]):not([type=radio]):not([type=color]),.field select,.field textarea,
.toolbar input:not([type=checkbox]),.toolbar select,.wrap-row input,.wrap-row select,.inline-form input:not([type=checkbox]),.inline-form select,
main input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=color]):not([type=hidden]):not(.dt-input),main select:not(.dt-input),main textarea{
  display:block;width:100%;padding:.52rem .75rem;font-size:.9rem;color:#27334a;background:#fff;border:1px solid #d3dbe8;border-radius:8px;transition:border-color .12s,box-shadow .12s}
.wrap-row input,.wrap-row select,.inline-form input:not([type=checkbox]),.inline-form select{width:auto;min-width:9rem}
main input:focus,main select:focus,main textarea:focus,.topbar select:focus{border-color:var(--bs-primary);box-shadow:0 0 0 .22rem rgba(53,96,212,.16);outline:0}
input[type=checkbox],input[type=radio]{width:1.05rem;height:1.05rem;accent-color:var(--bs-primary)}
input[type=file]{width:100%;padding:.4rem;border:1px dashed #b8c4d8;border-radius:8px;background:#fafbfe}
input[type=color]{width:100%;height:2.5rem;padding:.2rem;border:1px solid #d3dbe8;border-radius:8px}
.req{color:var(--bs-danger)}.help,.form-text{display:block;color:#6b7a93;font-size:.78rem;margin-top:.25rem}
.has-error input,.has-error select,.has-error textarea{border-color:var(--bs-danger)!important}
.error-text{color:var(--bs-danger);font-size:.8rem;margin-top:.25rem}
fieldset{border:1px solid var(--bs-border-color);border-radius:12px;margin:0 0 1.1rem;padding:.9rem 1.1rem;background:#fcfdff}
legend{font-weight:700;font-size:.9rem;padding:0 .5rem;float:none;width:auto;margin:0;color:#18243b}
.grid{display:grid;gap:0 1.1rem}.grid.two{grid-template-columns:repeat(2,1fr)}.grid.three{grid-template-columns:repeat(3,1fr)}.grid.four{grid-template-columns:repeat(4,1fr)}
.stack>*{display:block;margin-bottom:.5rem}
.toolbar{display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:1.1rem;background:#fff;border:1px solid var(--bs-border-color);border-radius:14px;box-shadow:var(--card-shadow);padding:.8rem 1rem}
.toolbar>div{display:flex;gap:.5rem;flex-wrap:wrap}
.wrap-row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}
.inline-form{display:inline-block}

main .wrap-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]):not([type=color]),main .wrap-row select,main .inline-form input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]):not([type=color]),main .inline-form select,main .toolbar .wrap-row input:not([type=checkbox]),main .toolbar .wrap-row select{width:auto;min-width:10rem}
main .inline-form select{min-width:0}
td .inline-form select,td .inline-form input:not([type=checkbox]),main table select,main table input:not([type=checkbox]):not([type=radio]):not([type=hidden]){padding:.3rem .5rem;font-size:.84rem;min-width:0;width:auto}

/* ---------- buttons (Bootstrap + legacy modifiers) ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;font-weight:550;font-size:.88rem;padding:.5rem 1rem;border-radius:8px;border:1px solid #cfd8e8;background:#fff;color:#34456b;line-height:1.3;cursor:pointer;width:auto;transition:background .12s,border-color .12s,box-shadow .12s}
.btn:hover{background:#f0f4fb;text-decoration:none;color:#27334a}
.btn.primary,.btn-primary{background:var(--bs-primary);border-color:var(--bs-primary);color:#fff;--bs-btn-bg:var(--bs-primary);--bs-btn-border-color:var(--bs-primary);--bs-btn-hover-bg:#2a4fb5;--bs-btn-hover-border-color:#2a4fb5;--bs-btn-active-bg:#2447ab;--bs-btn-active-border-color:#2447ab;--bs-btn-disabled-bg:var(--bs-primary);--bs-btn-disabled-border-color:var(--bs-primary)}
.btn.primary:hover,.btn-primary:hover{background:#2a4fb5;border-color:#2a4fb5;color:#fff;box-shadow:0 4px 12px rgba(53,96,212,.3)}
.btn.danger,.btn-danger{background:var(--bs-danger);border-color:var(--bs-danger);color:#fff;--bs-btn-bg:var(--bs-danger);--bs-btn-border-color:var(--bs-danger)}
.btn.danger:hover,.btn-danger:hover{background:#c63b32;border-color:#c63b32;color:#fff}
.btn-success{background:var(--bs-success);border-color:var(--bs-success);color:#fff;--bs-btn-bg:var(--bs-success);--bs-btn-border-color:var(--bs-success)}
.btn-outline-primary{--bs-btn-color:var(--bs-primary);--bs-btn-border-color:var(--bs-primary);--bs-btn-hover-bg:var(--bs-primary);--bs-btn-hover-border-color:var(--bs-primary)}
.btn.ghost{background:transparent}.btn.small,.btn-sm{padding:.28rem .65rem;font-size:.8rem;border-radius:7px}.btn.block{display:flex;width:100%}.btn.big{padding:.75rem 1.5rem;font-size:1rem}
.btn[disabled]{opacity:.6;cursor:not-allowed}
summary.btn{list-style:none}
.actions{white-space:nowrap}.actions form,.actions a{margin-right:.25rem}

/* ---------- tables ---------- */
.table{width:100%;margin-bottom:0;border-collapse:separate;border-spacing:0;background:#fff;--bs-table-bg:transparent;--bs-table-hover-bg:#f6f8fd;--bs-table-striped-bg:#fafbfe}
.table-wrap{background:#fff;border:1px solid var(--bs-border-color);border-radius:14px;box-shadow:var(--card-shadow);overflow:hidden;margin-bottom:1.25rem}
.table-scroll{overflow-x:auto}
.table-inline{border:1px solid var(--bs-border-color);border-radius:10px;overflow:hidden;margin:.2rem 0 1rem}
.table-inline .dt-bar{background:#fafbfe}
form.toolbar{justify-content:flex-start}
main>form:not(.toolbar):not(.inline-form):not(.wrap-row){background:#fff;border:1px solid var(--bs-border-color);border-radius:14px;box-shadow:var(--card-shadow);padding:1.3rem 1.4rem;margin-bottom:1.25rem}
main>form>h2{padding-bottom:.6rem;border-bottom:1px solid #eef1f6}
main>form fieldset{background:#fafbfe}
input[type=file]::file-selector-button{border:1px solid #cfd8e8;background:#fff;color:#34456b;border-radius:6px;padding:.3rem .7rem;margin-right:.7rem;font-weight:550;cursor:pointer}
input[type=file]::file-selector-button:hover{background:#eef3ff}
.table th{background:#f6f8fc;color:#55657f;font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;font-weight:650;padding:.8rem 1rem;border-bottom:1px solid var(--bs-border-color);white-space:nowrap;text-align:left}
.table td{padding:.78rem 1rem;border-bottom:1px solid #eef1f6;vertical-align:middle;text-align:left}
.table tbody tr:last-child td{border-bottom:0}
.table tbody tr:hover td{background:#f8faff}
.row-bad td{background:#fdf0ef!important}
.table th.sortable{cursor:pointer;user-select:none;padding-right:1.6rem;position:relative}
.table th.sortable::after{content:"\f0dc";font-family:"Font Awesome 6 Free";font-weight:900;font-size:.65rem;position:absolute;right:.6rem;top:50%;transform:translateY(-50%);opacity:.35}
.table th.sortable.asc::after{content:"\f0de";opacity:1;color:var(--bs-primary)}.table th.sortable.desc::after{content:"\f0dd";opacity:1;color:var(--bs-primary)}
.dt-bar{display:flex;justify-content:space-between;align-items:center;gap:.75rem;flex-wrap:wrap;padding:.8rem 1rem;border-bottom:1px solid #eef1f6;background:#fff}
.dt-bar.bottom{border-bottom:0;border-top:1px solid #eef1f6}
.dt-bar label{display:flex;align-items:center;gap:.5rem;font-size:.84rem;color:#52627f;margin:0}
.dt-bar .dt-input{width:auto!important;min-width:0;padding:.35rem .6rem!important;font-size:.84rem!important;border:1px solid #d3dbe8;border-radius:8px}
.dt-bar .dt-search{width:230px!important}
.dt-info{font-size:.82rem;color:#6b7a93}
.dt-empty td{text-align:center;color:#6b7a93;padding:2rem}
.pagination,.dt-pages{display:flex;gap:.25rem;list-style:none;margin:0;padding:0;flex-wrap:wrap}
.pager{display:flex;gap:.25rem;margin:0 0 1.25rem;flex-wrap:wrap}
.pg,.dt-pages button,.page-link{min-width:36px;height:36px;padding:0 .7rem;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--bs-border-color);border-radius:8px;background:#fff;color:#34456b;font-size:.84rem;cursor:pointer;text-decoration:none}
.pg:hover,.dt-pages button:hover{background:#eef3ff;text-decoration:none}
.pg.active,.dt-pages button.active,.page-item.active .page-link{background:var(--bs-primary);color:#fff;border-color:var(--bs-primary)}
.pg.disabled,.dt-pages button:disabled{color:#a3aec2;background:#f5f7fb;cursor:not-allowed}

/* ---------- badges / alerts ---------- */
.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.3rem .65rem;border-radius:999px;font-size:.72rem;font-weight:650;background:#e8edf5;color:#40506e;letter-spacing:.01em}
.badge.ok{background:#dcf5ec;color:#0d7f58}.badge.warn{background:#fdf0d6;color:#a7650a}.badge.bad{background:#fbe3e1;color:#b8322a}.badge.info{background:#e0effa;color:#1c6ea3}
.alert{padding:.8rem 1.1rem;border-radius:10px;margin-bottom:1.1rem;border:1px solid;display:flex;gap:.7rem;align-items:flex-start;font-size:.9rem}
.alert.success{background:#e8f8f1;border-color:#a7e0c8;color:#0b6a49}.alert.error{background:#fdeceb;border-color:#f3b4af;color:#a12b24}
.alert.warning{background:#fff6e0;border-color:#f1d28c;color:#85560a}.alert.info{background:#e8f1fc;border-color:#b0cdf0;color:#1f4f8a}
.alert .fa-solid{margin-top:.15rem}

/* ---------- misc components ---------- */
.kv{display:grid;grid-template-columns:max-content 1fr;gap:.5rem 1.4rem;margin:0}.kv dt{color:#6b7a93;font-weight:500}.kv dd{margin:0;font-weight:500}
.chips{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.4rem;margin:0}.chips li{background:#eef2fa;color:#34456b;padding:.28rem .7rem;border-radius:999px;font-size:.82rem}
.timeline{list-style:none;padding:0;margin:.75rem 0 0}.timeline li{padding:.55rem 0 .55rem 1.1rem;border-left:2px solid #dbe3f2;position:relative}.timeline li::before{content:"";position:absolute;left:-6px;top:.9rem;width:10px;height:10px;border-radius:50%;background:var(--bs-primary)}
.codes{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.5rem}.codes code{font-size:1.05rem;display:block;padding:.55rem;text-align:center}
.subnav{display:flex;gap:.35rem;flex-wrap:wrap;margin-bottom:1.1rem;padding:.35rem;background:#fff;border:1px solid var(--bs-border-color);border-radius:12px;width:fit-content;max-width:100%}
.subnav a{padding:.45rem .95rem;border-radius:8px;color:#52627f;font-weight:550;font-size:.86rem}.subnav a:hover{background:#f0f4fb;text-decoration:none}.subnav a.active{background:var(--bs-primary);color:#fff}
.editor-bar{display:flex;gap:.3rem;margin-bottom:.4rem;flex-wrap:wrap}
.seo-preview{border:1px solid var(--bs-border-color);border-radius:10px;padding:.7rem .9rem;background:#fff;margin-bottom:.9rem}.seo-t{color:#1a0dab;font-size:1.05rem}.seo-d{color:#4d5156;font-size:.88rem}
.cards{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:1rem}.cards img{max-width:100%;height:120px;object-fit:cover;border-radius:8px;display:block}
.hp{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}
.empty{text-align:center;color:#6b7a93;padding:2.2rem 1rem}.empty .fa-solid{font-size:2rem;opacity:.35;display:block;margin-bottom:.6rem}
.brand-line{margin:0 0 .5rem;color:#6b7a93;font-size:.9rem}

/* ---------- auth screens ---------- */
body.plain{background:linear-gradient(135deg,#0f1a2e 0%,#1d3566 55%,#3560d4 120%)}
.auth-wrap{flex:1;display:grid;place-items:center;padding:2rem 1rem}
.auth-card{width:100%;max-width:430px;background:#fff;border-radius:18px;padding:2rem 2rem 1.6rem;box-shadow:0 24px 60px rgba(5,12,30,.45)}
.auth-card.wide{max-width:640px}
.auth-logo{width:56px;height:56px;border-radius:16px;background:linear-gradient(135deg,#4f7bf0,#3560d4);display:grid;place-items:center;color:#fff;font-size:1.5rem;margin:0 auto .9rem;box-shadow:0 8px 20px rgba(53,96,212,.4)}
.auth-card h1{text-align:center;font-size:1.3rem;margin-bottom:.3rem}.auth-card .brand-line{text-align:center}
body.plain .footer{background:transparent;border:0;color:#b9c6e0}

@media (max-width:991px){
  .sidebar{position:fixed;top:0;bottom:0;left:0;transform:translateX(-100%);transition:transform .2s;width:var(--sb-w)!important}
  body.sidebar-open .sidebar{transform:none;box-shadow:4px 0 24px rgba(0,0,0,.3)}
  .table td{white-space:nowrap}
  body.sidebar-collapsed .sb-name,body.sidebar-collapsed .sb-group,body.sidebar-collapsed .sb-label,body.sidebar-collapsed .sb-foot{display:revert}
  body.sidebar-collapsed .sb-list a{justify-content:flex-start;padding:.6rem .8rem}
  .dash-grid,.dash-grid.even,.grid.two,.grid.three,.grid.four{grid-template-columns:1fr}
  .main{padding:1rem}.user-meta,.tb-session{display:none}
}
@media print{.topbar,.sidebar,.toolbar,.btn,.subnav,.dt-bar{display:none!important}.main{padding:0}.footer{border:0}.card,.table-wrap{box-shadow:none}}

/* late overrides */
main form.toolbar input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]):not([type=color]){width:auto;flex:1 1 260px;max-width:420px;min-width:10rem}
main form.toolbar select{width:auto;min-width:10rem}
.panel-flush .table-inline{border:0;border-radius:0;margin:0}
.wrap-row.inline-form{display:flex}
.toolbar>form.wrap-row{flex:1 1 auto}

/* ---------- accordion sidebar ---------- */
.sb-search{padding:.8rem .9rem .3rem}
.sb-search input{width:100%;background:var(--sb-bg-2);border:1px solid rgba(255,255,255,.08);color:#fff;border-radius:8px;padding:.5rem .75rem;font-size:.85rem}
.sb-search input::placeholder{color:#7d8ba6}
.sb-search input:focus{outline:2px solid var(--bs-primary);outline-offset:0}
.sb-top{padding-top:.7rem}
.sb-sec{padding:0 .7rem}
.sb-toggle{display:flex;align-items:center;gap:.8rem;width:100%;padding:.6rem .8rem;margin:2px 0;border:0;border-radius:8px;background:transparent;color:var(--sb-text);font-weight:500;text-align:left;cursor:pointer;transition:background .12s,color .12s}
.sb-toggle:hover{background:var(--sb-bg-2);color:#fff}
.sb-toggle .fa-solid:first-child{width:1.2rem;text-align:center;font-size:.95rem}
.sb-toggle[aria-expanded=true]{color:#fff}
.sb-caret{margin-left:auto;font-size:.7rem;transition:transform .15s}
.sb-toggle[aria-expanded=true] .sb-caret{transform:rotate(90deg)}
.sb-sub{padding:0 0 .35rem 1.2rem!important;margin:0}
.sb-sub a{padding:.42rem .7rem!important;font-size:.86rem;gap:.6rem!important;margin:1px 0!important}
.sb-sub .sb-dot{width:.7rem!important;font-size:.45rem!important;opacity:.7}
.sb-sub a.active{box-shadow:none;font-weight:600}
.sb-soon{margin-left:auto;font-size:.6rem;text-transform:uppercase;letter-spacing:.05em;background:rgba(255,255,255,.1);color:#9fb0cc;border-radius:999px;padding:.05rem .45rem}
body.sidebar-collapsed .sb-sub,body.sidebar-collapsed .sb-caret,body.sidebar-collapsed .sb-search{display:none!important}
body.sidebar-collapsed .sb-toggle{justify-content:center;padding:.7rem}
@media (max-width:991px){body.sidebar-collapsed .sb-search{display:block!important}body.sidebar-collapsed .sb-caret{display:revert!important}body.sidebar-collapsed .sb-toggle{justify-content:flex-start}}

/* ---------- module pages ---------- */
.form-actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:.6rem}
.split{display:flex;justify-content:space-between;gap:1.2rem;align-items:flex-start;flex-wrap:wrap}
.stats.mini{margin:0;grid-template-columns:repeat(3,minmax(130px,1fr))}
.stats.mini .stat{padding:.7rem .9rem}.stats.mini .n{font-size:1.1rem}
.table input{min-width:6.5rem}
small.err{display:block;color:var(--bs-danger);font-size:.75rem;margin-top:.2rem}
.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:.6rem 1.4rem;margin:1rem 0}
.kv dt{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:#6b7a93;font-weight:600}.kv dd{margin:0;font-weight:600}
.receipt{max-width:880px;margin-inline:auto}.receipt-head{text-align:center;border-bottom:1px solid var(--bs-border-color);padding-bottom:.6rem;margin-bottom:.6rem}
.receipt-credit{text-align:center;font-size:.75rem;color:#6b7a93;margin:1rem 0 0}
tr.struck td{text-decoration:line-through;color:#8795ac}tr.struck td .badge,tr.struck td small{text-decoration:none}
.lookup-tabs{display:flex;gap:.4rem;flex-wrap:wrap;margin-bottom:1rem}
@media print{.no-print{display:none!important}.sidebar,.topbar{display:none!important}}

/* ---------- polish ---------- */
.stats{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.stat{min-width:0}.stat>span:last-child{min-width:0}
.stat .n{font-size:1.45rem;white-space:nowrap}
main>form.bare:not(.toolbar):not(.inline-form):not(.wrap-row){background:none;border:0;box-shadow:none;padding:0;margin-bottom:1.25rem}
.split h2{border:0;padding:0;margin-bottom:.2rem}
.stats.mini{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));min-width:0;flex:1 1 360px;max-width:560px}
.stats.mini .n{font-size:1.05rem}
@media (max-width:991px){.stats.mini{max-width:none;flex-basis:100%}.stats.mini .stat{padding:.55rem .7rem}}
.receipt-note{margin:.2rem 0;font-size:.85rem;color:#4a5b78}

/* settings / appearance */
.span-all{grid-column:1/-1}.set-heading{font-size:1rem;margin:1rem 0 .25rem;padding-top:.75rem;border-top:1px solid var(--bs-border-color)}.set-heading:first-child{border-top:0;padding-top:0;margin-top:0}
.set-preview{margin:.25rem 0}.set-preview img{max-width:100%;height:48px;object-fit:contain;background:#fff;border:1px solid var(--bs-border-color);border-radius:6px;padding:2px}
.sb-logo-img,.auth-logo-img{width:100%;height:100%;object-fit:contain;border-radius:inherit}.auth-logo-img{max-height:64px;width:auto}
.auth-wrap{position:relative}.auth-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.35;z-index:0}.auth-card{position:relative;z-index:1}
.print-image{display:block;width:100%;max-height:120px;object-fit:contain;margin-bottom:.5rem}
html[data-accent=green]{--bs-primary:#17a673;--bs-primary-rgb:23,166,115;--bs-link-color:#128a5f;--bs-link-hover-color:#0d6b4a;--c-1:#17a673}
html[data-accent=purple]{--bs-primary:#7a5af5;--bs-primary-rgb:122,90,245;--bs-link-color:#6544e0;--bs-link-hover-color:#4f33b8;--c-1:#7a5af5}
html[data-accent=red]{--bs-primary:#e0483e;--bs-primary-rgb:224,72,62;--bs-link-color:#c4372e;--bs-link-hover-color:#9c2a23;--c-1:#e0483e}
html[data-accent=orange]{--bs-primary:#e8830c;--bs-primary-rgb:232,131,12;--bs-link-color:#c46c05;--bs-link-hover-color:#9a5504;--c-1:#e8830c}
html[data-accent=teal]{--bs-primary:#13929a;--bs-primary-rgb:19,146,154;--bs-link-color:#0f757c;--bs-link-hover-color:#0a5b61;--c-1:#13929a}
@media print{.auth-bg{display:none}}
.print-only{display:none}@media print{.print-only{display:block}}
.staff-head{display:flex;gap:1rem;align-items:center}.staff-head h2{margin:0}.staff-head p{margin:0}
.staff-photo{width:72px;height:72px;border-radius:50%;object-fit:cover;flex-shrink:0}.staff-photo.ph{display:grid;place-items:center;background:var(--bs-primary);color:#fff;font-size:1.8rem;font-weight:600}

/* v0.5.0 */
pre.plain { white-space: pre-wrap; word-break: break-word; font: inherit; margin: 0; }
.text-danger { color: var(--bad, #b42318); }
.sheet { page-break-after: always; break-after: page; max-width: 820px; margin-inline: auto; }
.sign-row { display: flex; justify-content: space-between; margin-top: 3rem; }
.sign-row span { border-top: 1px solid currentColor; padding-top: .25rem; min-width: 10rem; text-align: center; }
.text-center { text-align: center; }
.tt-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: .75rem; }
.tt-day { border: 1px solid var(--border, #dde3ee); border-radius: 8px; padding: .5rem; }
.tt-day h3 { font-size: .95rem; margin: 0 0 .5rem; }
.tt-slot { background: var(--surface-2, #f4f6fb); border-radius: 6px; padding: .4rem .5rem; margin-bottom: .4rem; font-size: .85rem; }
.cert { border: 6px double var(--card-accent, #1d4ed8); padding: 2rem; }
.cert-title { color: var(--card-accent, #1d4ed8); letter-spacing: .05em; }
.cert-body { margin: 2rem 0; font-size: 1.1rem; line-height: 1.9; text-align: center; }
.cert .sign-row { margin-top: 4rem; }
.id-grid { display: grid; grid-template-columns: repeat(auto-fill, 230px); gap: 14px; justify-content: center; }
.id-card { width: 230px; border: 1px solid #ccd3e0; border-radius: 10px; text-align: center; padding-bottom: .5rem; break-inside: avoid; background: #fff; color: #111; overflow: hidden; }
.id-card header { background: var(--card-accent, #1d4ed8); color: #fff; padding: .5rem; font-weight: 600; font-size: .85rem; }
.id-card header small { display: block; font-weight: 400; opacity: .9; }
.id-photo { width: 78px; height: 92px; margin: .6rem auto; background: #e8ecf5; border-radius: 6px; display: flex; align-items: center; justify-content: center; overflow: hidden; font-size: 2rem; color: #5a6a8a; }
.id-photo img { width: 100%; height: 100%; object-fit: cover; }
.id-card h3 { font-size: 1rem; margin: .2rem 0; }
.id-card p { margin: 0; font-size: .8rem; }
.id-note { margin-top: .3rem !important; color: #555; font-size: .72rem !important; }
.id-card footer { margin-top: .5rem; font-size: .75rem; color: #444; }

/* ---------- v0.6 data tables ---------- */
.dt .table-scroll{max-height:72vh;overflow:auto;scrollbar-width:thin}
.dt .table thead th{position:sticky;top:0;z-index:2;box-shadow:0 1px 0 var(--bs-border-color)}
.table tbody tr:nth-child(even) td{background:#fbfcfe}
.table tbody tr:hover td{background:#f1f5ff}
.table .col-off{display:none}
.dt.dense .table td,.dt.dense .table th{padding:.35rem .7rem;font-size:.84rem}
.dt-bar{align-items:center}
.dt-left,.dt-right{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.dt-input{border:1px solid #d5dcea;border-radius:8px;padding:.35rem .6rem;font-size:.88rem;background:#fff;color:#27324a;max-width:100%}
.dt-input:focus{outline:0;border-color:var(--bs-primary);box-shadow:0 0 0 .2rem rgba(53,96,212,.15)}
.dt-search{min-width:13rem}
.dt-actions{display:flex;gap:.3rem;flex-wrap:wrap}
.dt-btn{display:inline-flex;align-items:center;gap:.4rem;border:1px solid #d5dcea;background:#fff;color:#34456b;border-radius:8px;padding:.32rem .65rem;font-size:.82rem;font-weight:600;cursor:pointer;transition:background .12s,border-color .12s}
.dt-btn:hover{background:#eef3ff;border-color:#b9c8ee}.dt-btn.on{background:#e3ebff;border-color:var(--bs-primary);color:var(--bs-primary)}
.dt-menu-wrap{position:relative}
.dt-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:30;background:#fff;border:1px solid #d5dcea;border-radius:10px;box-shadow:0 12px 30px rgba(15,30,60,.18);padding:.4rem;min-width:200px;max-height:300px;overflow:auto}
.dt-menu-item{display:flex;align-items:center;gap:.35rem;padding:.3rem .5rem;border-radius:6px;font-size:.88rem;cursor:pointer;white-space:nowrap}.dt-menu-item:hover{background:#f1f5ff}
.dt-pages{display:flex;gap:.25rem;flex-wrap:wrap;align-items:center}
.dt-pages button{min-width:2.1rem;border:1px solid #d5dcea;background:#fff;border-radius:8px;padding:.28rem .55rem;font-size:.85rem;cursor:pointer;color:#34456b}
.dt-pages button:hover:not(:disabled){background:#eef3ff}.dt-pages button.active{background:var(--bs-primary);border-color:var(--bs-primary);color:#fff}.dt-pages button:disabled{opacity:.4;cursor:default}
.dt-gap{color:#8a96ad;padding:0 .2rem}
.dt-info{color:#5d6b86;font-size:.85rem}
.dt-nomatch td,.dt-empty td{text-align:center!important;color:#6a7790;padding:2.2rem 1rem!important;background:#fff!important}
.dt-nomatch td i,.dt-empty td i{display:block;font-size:1.8rem;opacity:.35;margin-bottom:.4rem}
.dt-nomatch td strong{display:block;color:#34456b}.dt-nomatch td span{font-size:.88rem}
.dt-toast{position:fixed;left:50%;bottom:1.5rem;transform:translateX(-50%);background:#1f2d4d;color:#fff;padding:.55rem 1.1rem;border-radius:999px;font-size:.88rem;box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:2000;transition:opacity .35s}.dt-toast.out{opacity:0}
.dt-credit{display:none}
@media print{
  body.dt-print-one *{visibility:hidden!important}
  body.dt-print-one .dt-printing,body.dt-print-one .dt-printing *{visibility:visible!important}
  body.dt-print-one .dt-printing{position:absolute;left:0;top:0;width:100%;border:0;box-shadow:none}
  body.dt-print-one .dt-printing .dt-bar{display:none!important}
  body.dt-print-one .dt-printing .table-scroll{max-height:none;overflow:visible}
  body.dt-print-one .dt-printing .dt-credit{display:block;text-align:center;font-size:.8rem;padding-top:.8rem}
  .dt .table thead th{position:static}
}

/* ---------- v0.6 responsive polish ---------- */
img,svg,video{max-width:100%;height:auto}
.main{min-width:0}
@media (max-width:991px){
  .toolbar{flex-direction:column;align-items:stretch}.toolbar>div,.toolbar .wrap-row{width:100%}
  .toolbar .btn,.toolbar select,.toolbar input:not([type=checkbox]){flex:1 1 auto}
  .dt-bar{flex-direction:column;align-items:stretch}.dt-left,.dt-right{width:100%}.dt-search{flex:1 1 100%;min-width:0}
  .dt-actions{width:100%}.dt-actions .dt-btn,.dt-menu-wrap{flex:1 1 auto}.dt-menu-wrap .dt-btn{width:100%;justify-content:center}
  .dt-menu{left:0;right:auto}
}
@media (max-width:640px){
  .main{padding:.75rem}
  .card,main>form:not(.toolbar):not(.inline-form):not(.wrap-row){padding:1rem}
  .dt-btn-label{display:none}.dt-btn{justify-content:center;padding:.45rem .7rem}
  .dt-bar.bottom{align-items:center;text-align:center}.dt-pages{justify-content:center}
  .dt .table-scroll{max-height:none;overflow:visible}
  /* tables become stacked cards */
  .table-stack{display:block;background:transparent}
  .table-stack thead{display:none}
  .table-stack tbody{display:block}
  .table-stack tbody tr{display:block;background:#fff;border:1px solid var(--bs-border-color);border-radius:12px;margin:.6rem .6rem;padding:.35rem .2rem;box-shadow:0 1px 3px rgba(15,30,60,.06)}
  .table-stack tbody tr[hidden]{display:none}
  .table-stack tbody td{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;padding:.45rem .8rem;border:0;text-align:right;white-space:normal!important;background:transparent!important}
  .table-stack tbody td::before{content:attr(data-label);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;font-weight:650;color:#6a7790;text-align:left;flex:0 0 38%}
  .table-stack tbody td[data-label=""]::before{display:none}
  .table-stack tbody td.col-off{display:none}
  .table-stack tbody tr.dt-nomatch td,.table-stack tbody tr.dt-empty td{display:block;text-align:center}
  .table-stack tbody tr.dt-nomatch td::before,.table-stack tbody tr.dt-empty td::before{display:none}
  .table-stack tbody tr.dt-nomatch,.table-stack tbody tr.dt-empty{border-style:dashed}
  .table-wrap,.table-inline{background:transparent;border:0;box-shadow:none}
  .table-wrap>.dt-bar,.table-inline>.dt-bar{background:#fff;border:1px solid var(--bs-border-color);border-radius:12px}
  .stats,.stats.mini{grid-template-columns:1fr}
  .page-head,.page-title{flex-direction:column;align-items:flex-start;gap:.5rem}
  .btn-row,.actions{flex-wrap:wrap}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
