@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--ink:#17233b;--muted:#8490a5;--primary:#6258d9;--line:#e9edf4;--bg:#f6f7fb}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:'DM Sans',sans-serif;font-size:14px}.app-shell{min-height:100vh}.sidebar{width:252px;position:fixed;inset:0 auto 0 0;background:#fff;border-right:1px solid var(--line);padding:27px 17px;display:flex;flex-direction:column;z-index:10}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink);font:800 20px Manrope,sans-serif;letter-spacing:-.8px;padding:0 10px 32px}.brand-icon{width:39px;height:39px;border-radius:12px;background:#6258d9;color:#fff;display:grid;place-items:center;font-size:21px}.brand-light{color:#6258d9}.brand small{display:block;font:700 8px 'DM Sans';letter-spacing:1.7px;color:#a0a8b8;margin-top:3px}.nav-caption{font-size:9px;letter-spacing:1.5px;font-weight:700;color:#a5adbd;padding:0 12px 9px}.nav-link{display:flex;align-items:center;gap:13px;color:#78849a;padding:11px 13px;border-radius:9px;text-decoration:none;font-weight:600;margin:2px 0;transition:.2s}.nav-link i{font-size:17px}.nav-link:hover,.nav-link.active{background:#f0efff;color:#5d53d2}.sidebar-bottom{margin-top:auto}.user-chip{border-top:1px solid var(--line);padding:17px 4px 0;display:flex;align-items:center;gap:10px}.avatar,.top-avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#e9e7ff;color:#5d53d2;font-weight:700}.user-chip strong{display:block;font-size:12px}.user-chip small{color:var(--muted);font-size:10px}.user-chip>a{margin-left:auto;color:#9aa4b6;font-size:17px}.main-area{margin-left:252px;min-height:100vh;display:flex;flex-direction:column}.topbar{height:104px;background:#fff;border-bottom:1px solid var(--line);padding:20px 36px;display:flex;align-items:center;justify-content:space-between}.eyebrow{font-size:9px;letter-spacing:1.4px;color:#a0a8b8;font-weight:700;margin-bottom:5px}.topbar h1{font:800 22px Manrope;margin:0;letter-spacing:-.7px}.topbar-right{display:flex;align-items:center;gap:15px}.date-pill{background:#f7f8fb;padding:9px 13px;border-radius:20px;color:#68758b;font-size:11px}.top-avatar{width:36px;height:36px}.content-area{padding:27px 36px;flex:1;max-width:1600px;width:100%;margin:0 auto}.app-footer{padding:17px 36px;color:#a3aaba;font-size:10px}.app-footer span{padding:0 7px}.welcome-banner{min-height:204px;border-radius:16px;background:linear-gradient(110deg,#5148c7,#766be6);color:#fff;padding:28px 34px;position:relative;overflow:hidden;display:flex;align-items:center}.banner-tag{font-size:9px;letter-spacing:1.6px;font-weight:700;opacity:.7}.welcome-banner h2{font:800 27px Manrope;margin:8px 0}.welcome-banner p{font-size:12px;opacity:.8;max-width:480px;margin-bottom:16px}.banner-art{position:absolute;right:7%;top:15px;height:180px;width:310px;opacity:.16}.banner-art i{position:absolute;font-size:100px;transform:rotate(-14deg)}.banner-art i:nth-child(2){left:95px;top:35px;font-size:85px}.banner-art i:nth-child(3){left:180px;top:0;font-size:115px}.stat-card,.panel{background:#fff;border:1px solid var(--line);border-radius:13px;padding:19px 20px}.stat-card{min-height:139px;position:relative}.stat-icon{width:35px;height:35px;border-radius:10px;display:grid;place-items:center;font-size:17px;margin-bottom:11px}.purple{background:#efedff;color:#685edb}.blue{background:#e9f4ff;color:#4c9be5}.green{background:#e8f8f0;color:#36ad7b}.orange{background:#fff2e5;color:#ed9b43}.stat-card>span{display:block;color:#8792a5;font-size:11px}.stat-card strong{font:800 25px Manrope;display:inline-block;margin-right:7px}.stat-card small{color:#a0a8b8;font-size:10px}.panel{padding:20px}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:15px}.panel h3,.panel-head h3{font:700 15px Manrope;margin:0 0 5px}.panel-head p,.section-sub{color:#98a1b1;font-size:11px;margin:0}.panel-head>a{color:var(--primary);font-size:11px;text-decoration:none;font-weight:600}.table{font-size:11px;margin:0}.table thead th{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:#a1aaba;font-weight:700;border-bottom:1px solid var(--line);padding:11px 10px;white-space:nowrap}.table td{padding:12px 10px;border-color:#f0f2f6;color:#67748a}.table td strong{color:#26334b;font-size:11px}.empty{text-align:center!important;color:#a0a8b8!important;padding:28px!important}.quick-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.quick-grid a{border:1px solid #edf0f5;border-radius:10px;padding:14px;text-decoration:none;color:var(--ink);display:flex;flex-direction:column}.quick-grid a>i{font-size:20px;color:var(--primary);margin-bottom:9px}.quick-grid a span{font-weight:700;font-size:11px}.quick-grid a small{font-size:9px;color:#a0a8b8;margin-top:3px}.section-title{font:800 19px Manrope;margin:0 0 4px;letter-spacing:-.5px}.count-badge{font:600 10px 'DM Sans';background:#efedff;color:#6258d9;padding:4px 7px;border-radius:12px;vertical-align:middle}.btn{font-size:11px;font-weight:600;border-radius:8px;padding:9px 13px}.btn-primary{background:#6258d9;border-color:#6258d9}.btn-primary:hover{background:#5148c7;border-color:#5148c7}.form-label{font-size:10px;font-weight:700;color:#6f7b91;margin-bottom:6px}.form-control,.form-select{border-color:#e5e9f0;border-radius:8px;font-size:11px;padding:10px 12px;color:#39465d}.form-control:focus,.form-select:focus{border-color:#aaa4f2;box-shadow:0 0 0 .18rem #6258d91a}.toolbar{display:flex;gap:9px;padding:0 0 15px}.search-box{position:relative;flex:1;max-width:520px}.search-box i{position:absolute;left:12px;top:10px;color:#a1aaba}.search-box input{width:100%;border:1px solid #e5e9f0;border-radius:8px;padding:9px 12px 9px 34px;font-size:11px;outline:0}.code-pill{background:#f2f3f8;padding:5px 7px;border-radius:5px;font:600 10px monospace;color:#5e6880}.availability{font-size:9px;padding:5px 8px;border-radius:15px;font-weight:700}.in-stock{background:#e9f8f1;color:#269b6c}.out-stock{background:#fff0ed;color:#d86b58}.icon-action{border:0;background:transparent;color:#7c88a0;padding:5px 7px;text-decoration:none}.icon-action.danger{color:#d47c7c}.table-foot{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding-top:13px}.muted{color:#9aa4b5}.status-dot{font-size:10px}.status-dot:before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:#35b27d;margin:0 6px 1px 0}.status-dot.inactive:before{background:#e1a04c}.live-pill{font-size:9px;color:#2da978;background:#eaf8f1;padding:7px 9px;border-radius:15px;font-weight:700;letter-spacing:.5px}.live-pill i{display:inline-block;width:6px;height:6px;border-radius:50%;background:#2da978;margin-right:5px}.scan-panel{background:#f8f9fc;border:1px dashed #dce1ec;border-radius:12px;min-height:220px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:15px;gap:8px}.scan-placeholder{display:flex;align-items:center;flex-direction:column;color:#9aa4b5}.scan-placeholder i{font-size:40px;color:#7770dc}.scan-placeholder strong{color:#4b5870;margin-top:5px}.scan-placeholder span{font-size:10px}.qr-guide{display:flex;gap:13px;padding:14px 0;border-bottom:1px solid var(--line)}.qr-mini{width:42px;height:42px;border-radius:10px;background:#f0efff;color:#655bd8;display:grid;place-items:center;font-size:21px;flex:none}.qr-mini.blue{background:#eaf5ff;color:#4e9be0}.qr-guide strong{font-size:12px}.qr-guide p{margin:4px 0;font-size:10px}.qr-guide small{color:#9aa4b5;font-size:10px}.report-tabs{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:15px}.report-tabs a{padding:8px 13px;border-radius:8px;text-decoration:none;color:#7d899e;font-size:10px;font-weight:600}.report-tabs a.selected{background:#efedff;color:#5d53d2}.print-heading{display:none}.backup-icon{width:48px;height:48px;border-radius:13px;background:#efedff;color:#6258d9;display:grid;place-items:center;font-size:23px;margin-bottom:15px}.backup-list{display:grid;gap:12px;margin:22px 0}.backup-list div{font-size:11px;color:#59667c}.backup-list i{color:#2eaf7d;margin-right:8px}.restore-steps{padding-left:20px;color:#66738a;font-size:11px;line-height:2.2}.label-info{background:#efedff;color:#5d53d2;border-radius:8px;padding:11px 14px;font-size:10px;margin-bottom:15px}.label-sheet{background:#fff;display:grid;grid-template-columns:repeat(3,1fr);gap:0;max-width:210mm;margin:auto;padding:8mm}.book-label{height:48mm;border:1px dashed #b9bfce;padding:7mm 6mm;display:flex;flex-direction:column;justify-content:space-between;break-inside:avoid}.label-brand{font-size:7px;color:#8d95a5;text-transform:uppercase;letter-spacing:1px}.label-title{font:800 12px Manrope;line-height:1.25;color:#202d45}.label-author{font-size:9px;color:#7e899c}.label-bottom{display:flex;justify-content:space-between;align-items:end}.label-bottom strong{font:700 9px monospace;display:block}.label-bottom small{font-size:7px;color:#8791a4;display:block;margin-top:3px}.qr{width:48px;height:48px}.qr img{width:48px;height:48px}.certificate-wrap{background:#f0f1f6;padding:22px;border-radius:12px}.certificate{position:relative;overflow:hidden;background:#fff;max-width:185mm;min-height:245mm;margin:auto;padding:22mm 19mm;border:8px double #c6bce9;text-align:center}.cert-top{display:flex;align-items:center;justify-content:center;gap:14px}.cert-seal{width:50px;height:50px;border-radius:50%;background:#6258d9;color:#fff;display:grid;place-items:center;font-size:24px}.cert-top h2{font:800 18px Manrope;margin:0}.cert-top p{font-size:9px;color:#9aa4b5;margin:4px}.cert-rule{height:2px;background:#6258d9;margin:22px 0}.cert-kicker{font-size:10px;letter-spacing:3px;color:#8177d9;font-weight:700}.certificate h1{font:800 30px Manrope;margin:10px 0 30px;color:#26334b}.cert-intro{font-size:13px;color:#7e899c}.cert-student{font:800 24px Manrope;color:#5148c7;border-bottom:1px solid #c9c2ee;display:inline-block;padding:0 25px 9px}.cert-meta{font-size:10px;color:#7e899c;margin-top:12px}.cert-body{font-size:13px;line-height:1.8;margin:28px auto;max-width:470px}.cert-status{display:inline-block;border-radius:20px;padding:10px 19px;font-size:11px;font-weight:800;letter-spacing:1px}.cert-status.good{background:#e8f8f0;color:#269b6c}.cert-status.not-good{background:#fff0ed;color:#d86b58}.cert-note{font-size:10px;color:#8c96a8;margin:15px auto;max-width:440px}.cert-footer{display:flex;justify-content:space-around;margin-top:60px}.cert-footer div{width:35%;display:flex;flex-direction:column}.cert-footer span{border-top:1px solid #aab2c1;margin-bottom:8px}.cert-footer strong{font-size:10px}.cert-footer small{font-size:9px;color:#9aa4b5}.cert-watermark{position:absolute;right:25px;bottom:20px;color:#f3f1fb;font-size:100px;z-index:0}.login-wrap{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#f4f3ff,#f7f9fc)}.login-card{background:#fff;width:min(420px,calc(100% - 32px));padding:38px;border-radius:18px;box-shadow:0 20px 70px #28345b12}.brand-mark{width:48px;height:48px;border-radius:14px;background:#6258d9;color:white;display:grid;place-items:center;font-size:25px;margin-bottom:23px}.login-card h2{font:800 23px Manrope}.login-card>p{font-size:12px;margin-bottom:25px}
@media(max-width:900px){.sidebar{width:70px;padding:20px 9px}.brand{padding:0 5px 30px}.brand>span:last-child,.nav-caption,.nav-link:not(.active){font-size:0}.brand-icon{flex:none}.nav-link{justify-content:center;padding:12px 5px;font-size:0}.nav-link i{font-size:19px}.nav-link.active{font-size:0}.user-chip>div:not(.avatar),.user-chip>a{display:none}.main-area{margin-left:70px}.content-area{padding:20px}.topbar{padding:17px 20px}}@media(max-width:600px){.topbar{height:auto}.topbar h1{font-size:18px}.date-pill{display:none}.content-area{padding:15px}.banner-art{display:none}.welcome-banner{padding:23px}.certificate{padding:15mm 9mm}.label-sheet{padding:3mm}.book-label{height:42mm;padding:4mm}}
@page{size:A4;margin:10mm}@media print{body{background:#fff!important;font-size:10pt}.sidebar,.topbar,.app-footer,.no-print,.alert,.panel-head,.report-tabs{display:none!important}.main-area{margin:0!important}.content-area{padding:0!important;max-width:none!important}.panel{border:0!important;padding:0!important}.print-heading{display:block;text-align:center;margin:0 0 12mm}.print-heading h2{font:700 17pt Manrope;margin:0}.print-heading h3{font:700 14pt Manrope;margin:5px}.print-heading p{font-size:9pt;color:#555}.table{font-size:8pt}.table thead th{color:#222!important;font-size:7pt}.table td{color:#222!important;padding:6px!important}.label-sheet{width:190mm;max-width:none;padding:0;gap:0}.book-label{height:48mm;border:1px dashed #888;padding:6mm;page-break-inside:avoid}.certificate-wrap{background:#fff;padding:0}.certificate{min-height:255mm;max-width:none;box-shadow:none;page-break-inside:avoid}.cert-watermark{color:#f6f4fc!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}.cert-status,.cert-seal{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* Explicit sign-out controls */
.logout-form { margin: 0; }
.logout-button { display:flex; align-items:center; gap:7px; border:0; background:transparent; color:inherit; padding:8px 10px; border-radius:10px; font:inherit; cursor:pointer; }
.logout-button:hover { background:rgba(127,127,127,.12); color:var(--bs-danger); }
.top-logout { margin:0 0 0 8px; }
@media (max-width: 575.98px) { .top-logout .btn { padding:.35rem .5rem; } }
/* Thermal barcode label layout */
.thermal-label-sheet{display:flex;flex-direction:column;align-items:flex-start;gap:0;background:#fff}.thermal-label{box-sizing:border-box;width:50mm;height:30mm;padding:2mm 2.5mm;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;background:#fff;color:#111;break-after:page;page-break-after:always}.thermal-school{font-size:6pt;font-weight:700;line-height:1;text-transform:uppercase;white-space:nowrap;overflow:hidden}.thermal-title{font-size:10pt;font-weight:800;line-height:1.1;max-height:8mm;overflow:hidden;color:#000!important}.thermal-author{font-size:6.5pt;line-height:1;white-space:nowrap;overflow:hidden}.title-barcode{display:block!important;width:100%!important;height:13mm!important;max-height:13mm!important;min-height:13mm;flex:none;overflow:visible;background:#fff}.barcode-human{text-align:center;font:700 8pt monospace;letter-spacing:.6px;line-height:1.1;color:#000!important;margin-top:1mm}.thermal-label-sheet:empty{display:none}
@media print{body:has(.thermal-label-sheet){background:#fff!important}.thermal-label-sheet{display:flex!important;gap:0!important;margin:0!important;padding:0!important;width:auto!important;max-width:none!important}.thermal-label{border:0!important;margin:0!important;padding:2mm 2.5mm!important;box-shadow:none!important}.thermal-label-sheet~*{display:none!important}body:has(.thermal-label-sheet) .app-shell{display:block!important}body:has(.thermal-label-sheet) .sidebar,body:has(.thermal-label-sheet) .topbar,body:has(.thermal-label-sheet) .app-footer,body:has(.thermal-label-sheet) .no-print{display:none!important}body:has(.thermal-label-sheet) .main-area{margin:0!important}body:has(.thermal-label-sheet) .content-area{padding:0!important;margin:0!important;max-width:none!important}body:has(.thermal-label-sheet) .thermal-label-sheet{display:flex!important}}

@media print{.thermal-label{color:#000!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}.thermal-label .title-barcode{display:block!important;width:100%!important;height:13mm!important;min-height:13mm!important;max-height:13mm!important;visibility:visible!important}.thermal-label .title-barcode rect{fill:#000!important}.barcode-human{color:#000!important;font-size:8pt!important;font-weight:800!important}}
