@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&display=swap');

:root {
    --primary:#1a56db;--primary-light:#3b82f6;--primary-dark:#1e3a8a;--primary-bg:#eff6ff;
    --success:#059669;--success-bg:#ecfdf5;--warning:#d97706;--warning-bg:#fffbeb;
    --danger:#dc2626;--danger-bg:#fef2f2;--info:#0891b2;--info-bg:#ecfeff;
    --bg:#f1f5f9;--bg-card:#fff;--bg-sidebar:#0f172a;--bg-sidebar-hover:#1e293b;
    --text:#1e293b;--text-secondary:#64748b;--text-light:#94a3b8;
    --border:#e2e8f0;--radius:10px;--radius-sm:6px;
    --shadow:0 1px 3px rgba(0,0,0,.08);--shadow-md:0 4px 6px rgba(0,0,0,.07);
    --sidebar-w:250px;--font:'DM Sans',sans-serif;--font-mono:'Courier New',monospace;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{font-size:15px;}
body{font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;}
a{color:var(--primary);text-decoration:none;}

/* LOGIN */
.login-wrapper{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f172a,#1e3a8a,#1a56db);padding:2rem;}
.login-card{background:#fff;border-radius:14px;padding:2.5rem;width:100%;max-width:400px;box-shadow:0 10px 40px rgba(0,0,0,.2);}
.login-logo{text-align:center;margin-bottom:2rem;}
.login-icon{width:56px;height:56px;background:var(--primary);border-radius:14px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:1.5rem;margin-bottom:1rem;}
.login-logo h1{font-size:1.4rem;font-weight:700;}
.login-logo p{color:var(--text-secondary);font-size:.85rem;}
.login-hint{margin-top:1.5rem;text-align:center;font-size:.78rem;color:var(--text-light);}

/* LAYOUT */
.app-layout{display:flex;min-height:100vh;}
.sidebar{width:var(--sidebar-w);background:var(--bg-sidebar);position:fixed;top:0;left:0;bottom:0;z-index:100;display:flex;flex-direction:column;overflow-y:auto;transition:transform .3s;}
.sidebar-brand{padding:1.2rem 1.25rem;display:flex;align-items:center;gap:.75rem;border-bottom:1px solid rgba(255,255,255,.06);}
.brand-icon{width:36px;height:36px;background:var(--primary);border-radius:10px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:1rem;flex-shrink:0;}
.brand-text{color:#fff;font-weight:600;font-size:.95rem;}
.brand-sub{color:var(--text-light);font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;}
.sidebar-nav{padding:.75rem .6rem;flex:1;}
.nav-section{margin-bottom:1.25rem;}
.nav-title{color:var(--text-light);font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em;padding:0 .7rem;margin-bottom:.4rem;}
.nav-link{display:flex;align-items:center;gap:.7rem;padding:.55rem .7rem;color:#cbd5e1;border-radius:var(--radius-sm);font-size:.87rem;transition:all .15s;margin-bottom:1px;}
.nav-link:hover{background:var(--bg-sidebar-hover);color:#fff;}
.nav-link.active{background:var(--primary);color:#fff;font-weight:500;}
.nav-link i{width:18px;text-align:center;font-size:.9rem;opacity:.7;}
.nav-link.active i{opacity:1;}
.sidebar-footer{padding:.85rem 1rem;border-top:1px solid rgba(255,255,255,.06);}
.user-mini{display:flex;align-items:center;gap:.7rem;}
.user-avatar{width:34px;height:34px;border-radius:50%;background:var(--primary);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:.8rem;flex-shrink:0;}
.user-info{flex:1;}
.user-name{color:#fff;font-weight:500;font-size:.82rem;}
.user-role{color:var(--text-light);font-size:.68rem;text-transform:capitalize;}
.sidebar-footer a{color:var(--text-light);font-size:.9rem;}
.sidebar-footer a:hover{color:#fff;}

.main-content{flex:1;margin-left:var(--sidebar-w);min-height:100vh;}
.top-header{background:var(--bg-card);padding:1rem 1.75rem;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:50;}
.header-left{display:flex;align-items:center;gap:.75rem;}
.page-title{font-size:1.15rem;font-weight:600;}
.page-date{font-size:.78rem;color:var(--text-secondary);}
.content-body{padding:1.5rem 1.75rem;}

/* CARDS */
.card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow);}
.card-header{padding:.85rem 1.15rem;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.card-header h3{font-size:.95rem;font-weight:600;}
.card-body{padding:1.15rem;}
.card-body.p-0{padding:0;}
.card-footer{padding:.7rem 1.15rem;border-top:1px solid var(--border);background:#f8fafc;border-radius:0 0 var(--radius) var(--radius);}

/* STATS */
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:1.5rem;}
.stat-card{background:var(--bg-card);border-radius:var(--radius);padding:1.15rem;border:1px solid var(--border);display:flex;align-items:flex-start;gap:.85rem;transition:box-shadow .2s;}
.stat-card:hover{box-shadow:var(--shadow-md);}
.stat-icon{width:42px;height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:1.1rem;flex-shrink:0;}
.stat-icon.blue{background:var(--primary-bg);color:var(--primary);}
.stat-icon.green{background:var(--success-bg);color:var(--success);}
.stat-icon.orange{background:var(--warning-bg);color:var(--warning);}
.stat-icon.red{background:var(--danger-bg);color:var(--danger);}
.stat-info h4{font-size:.7rem;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;}
.stat-number{font-size:1.6rem;font-weight:700;line-height:1.2;}
.stat-info small{font-size:.78rem;color:var(--text-light);}

/* FORMS */
.form-group{margin-bottom:1.1rem;}
.form-group.mb-0{margin-bottom:0;}
.form-group label{display:block;font-size:.82rem;font-weight:500;margin-bottom:.3rem;}
.form-control{width:100%;padding:.55rem .8rem;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font);font-size:.88rem;color:var(--text);background:#fff;transition:border .15s,box-shadow .15s;}
.form-control:focus{outline:none;border-color:var(--primary-light);box-shadow:0 0 0 3px rgba(59,130,246,.1);}
select.form-control{cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2.5rem;}
textarea.form-control{min-height:80px;resize:vertical;}
.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.85rem;}
.section-title{font-size:.88rem;font-weight:600;color:var(--text-secondary);margin-bottom:.75rem;}
hr{border:none;border-top:1px solid var(--border);margin:1rem 0;}

/* BUTTONS */
.btn{display:inline-flex;align-items:center;gap:.4rem;padding:.55rem 1.1rem;border:none;border-radius:var(--radius-sm);font-family:var(--font);font-size:.85rem;font-weight:500;cursor:pointer;transition:all .15s;text-decoration:none;white-space:nowrap;}
.btn-primary{background:var(--primary);color:#fff;}.btn-primary:hover{background:var(--primary-dark);color:#fff;}
.btn-success{background:var(--success);color:#fff;}.btn-success:hover{background:#047857;color:#fff;}
.btn-warning{background:var(--warning);color:#fff;}.btn-warning:hover{background:#b45309;color:#fff;}
.btn-danger{background:var(--danger);color:#fff;}.btn-danger:hover{background:#b91c1c;color:#fff;}
.btn-outline{background:transparent;border:1.5px solid var(--border);color:var(--text);}.btn-outline:hover{background:var(--bg);color:var(--text);}
.btn-sm{padding:.3rem .65rem;font-size:.78rem;}
.btn-lg{padding:.7rem 1.6rem;font-size:.95rem;}
.btn-block{width:100%;justify-content:center;}
.btn-group{display:flex;gap:.4rem;flex-wrap:wrap;}

/* TABLES */
.table-responsive{overflow-x:auto;}
table{width:100%;border-collapse:collapse;}
table th,table td{padding:.65rem .9rem;text-align:left;font-size:.85rem;border-bottom:1px solid var(--border);}
table th{background:#f8fafc;font-weight:600;color:var(--text-secondary);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;}
table tr:hover td{background:#f8fafc;}
table tr:last-child td{border-bottom:none;}

/* BADGES */
.badge{display:inline-flex;align-items:center;padding:.18rem .55rem;border-radius:100px;font-size:.7rem;font-weight:600;}
.bg-success{background:var(--success-bg);color:var(--success);}
.bg-warning{background:var(--warning-bg);color:var(--warning);}
.bg-danger{background:var(--danger-bg);color:var(--danger);}
.bg-info{background:var(--info-bg);color:var(--info);}
.bg-primary{background:var(--primary-bg);color:var(--primary);}
.bg-purple{background:#faf5ff;color:#7c3aed;}
.bg-orange{background:#fff7ed;color:#ea580c;}
.bg-teal{background:#f0fdfa;color:#0d9488;}

/* ALERTS */
.alert{padding:.8rem 1.1rem;border-radius:var(--radius-sm);margin-bottom:1rem;font-size:.85rem;display:flex;align-items:center;gap:.65rem;animation:slideDown .3s;}
@keyframes slideDown{from{opacity:0;transform:translateY(-10px);}to{opacity:1;transform:translateY(0);}}
.alert-success{background:var(--success-bg);color:var(--success);border-left:3px solid var(--success);}
.alert-error{background:var(--danger-bg);color:var(--danger);border-left:3px solid var(--danger);}
.alert-warning{background:var(--warning-bg);color:var(--warning);border-left:3px solid var(--warning);}

/* TOOLBAR & FILTERS */
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;flex-wrap:wrap;}
.toolbar-search{position:relative;flex:1;max-width:300px;}
.toolbar-search input{padding-left:2.3rem;}
.search-icon{position:absolute;left:.8rem;top:50%;transform:translateY(-50%);color:var(--text-light);}
.filter-bar{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;margin-bottom:1rem;padding:.75rem 1rem;background:#f8fafc;border-radius:var(--radius-sm);border:1px solid var(--border);}
.filter-count{font-size:.82rem;color:var(--text-secondary);}

/* ATTENDANCE */
.att-header{display:grid;grid-template-columns:2fr repeat(4,1fr);gap:.4rem;padding:.4rem .6rem;font-size:.72rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;text-align:center;}
.att-header span:first-child{text-align:left;}
.att-row{display:grid;grid-template-columns:2fr repeat(4,1fr);gap:.4rem;align-items:center;padding:.55rem .6rem;border-radius:var(--radius-sm);background:#fff;border:1px solid var(--border);margin-bottom:.35rem;transition:box-shadow .15s;}
.att-row:hover{box-shadow:var(--shadow);}
.radio-group{display:flex;align-items:center;justify-content:center;}
.radio-btn{display:none;}
.radio-label{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;border:2px solid var(--border);font-size:.78rem;transition:all .15s;}
.radio-btn:checked+.lbl-p{background:var(--success);border-color:var(--success);color:#fff;}
.radio-btn:checked+.lbl-t{background:var(--warning);border-color:var(--warning);color:#fff;}
.radio-btn:checked+.lbl-a{background:var(--danger);border-color:var(--danger);color:#fff;}
.radio-btn:checked+.lbl-j{background:var(--info);border-color:var(--info);color:#fff;}

/* PAGINATION */
.pagination{display:flex;gap:.3rem;justify-content:center;margin-top:1.25rem;}
.page-link{padding:.35rem .7rem;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.82rem;transition:all .15s;}
.page-link:hover{background:var(--bg);color:var(--text);}
.page-link.active{background:var(--primary);color:#fff;border-color:var(--primary);}

/* MODAL */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:200;align-items:center;justify-content:center;backdrop-filter:blur(4px);padding:2rem;}
.modal-overlay.active{display:flex;}
.modal{background:var(--bg-card);border-radius:14px;width:100%;max-width:520px;max-height:90vh;overflow-y:auto;box-shadow:0 10px 40px rgba(0,0,0,.15);animation:modalIn .25s;}
.modal.modal-lg{max-width:700px;}
@keyframes modalIn{from{opacity:0;transform:scale(.95) translateY(10px);}to{opacity:1;transform:scale(1) translateY(0);}}
.modal-header{padding:1.1rem 1.3rem;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.modal-header h3{font-size:1rem;font-weight:600;}
.modal-close{background:none;border:none;font-size:1.3rem;cursor:pointer;color:var(--text-light);padding:.25rem;}
.modal-body{padding:1.3rem;}
.modal-footer{padding:.85rem 1.3rem;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:.5rem;}

/* UPLOAD */
.upload-zone{border:2px dashed var(--border);border-radius:var(--radius);padding:2rem;text-align:center;cursor:pointer;transition:all .2s;}
.upload-zone:hover{border-color:var(--primary-light);background:var(--primary-bg);}

/* PROGRESS */
.progress-bar{height:8px;background:var(--border);border-radius:4px;overflow:hidden;display:inline-block;width:100px;}
.progress-fill{height:100%;border-radius:4px;}

/* EMPTY STATE */
.empty-state{text-align:center;padding:2.5rem 1.5rem;color:var(--text-secondary);}
.empty-state i{font-size:2.5rem;opacity:.25;display:block;margin-bottom:.75rem;}
.empty-state h4{font-size:1rem;margin-bottom:.35rem;color:var(--text);}

/* UTILITY */
.text-center{text-align:center;}.text-muted{color:var(--text-secondary);}
.mb-0{margin-bottom:0;}.mb-1{margin-bottom:.5rem;}.mb-2{margin-bottom:1rem;}.mt-2{margin-top:1rem;}
.d-flex{display:flex;}.gap-1{gap:.5rem;}.items-center{align-items:center;}.flex-wrap{flex-wrap:wrap;}
code{font-family:var(--font-mono);font-size:.82rem;background:#f1f5f9;padding:.1rem .4rem;border-radius:3px;}
small{font-size:.8rem;}

/* QR SCANNER LAYOUT */
.qr-layout{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;}

/* RESPONSIVE */
.menu-toggle{display:none;background:none;border:none;font-size:1.3rem;cursor:pointer;color:var(--text);padding:.25rem;}

/* Sidebar overlay for mobile */
.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:99;}
.sidebar-overlay.active{display:block;}

/* TABLET (768px) */
@media(max-width:768px){
    .sidebar{transform:translateX(-100%);width:270px;}
    .sidebar.open{transform:translateX(0);}
    .main-content{margin-left:0;}
    .menu-toggle{display:block;}
    .content-body{padding:.85rem;}
    .top-header{padding:.75rem .85rem;}
    .page-title{font-size:1rem;}
    .page-date{font-size:.7rem;}
    
    /* Stats */
    .stats-grid{grid-template-columns:1fr 1fr;gap:.6rem;}
    .stat-card{padding:.85rem;gap:.6rem;}
    .stat-number{font-size:1.3rem;}
    .stat-icon{width:36px;height:36px;font-size:.95rem;}
    
    /* Forms */
    .form-row{grid-template-columns:1fr;}
    .toolbar{flex-direction:column;align-items:stretch;gap:.6rem;}
    .toolbar-search{max-width:100%;}
    .filter-bar{flex-direction:column;padding:.6rem;}
    .filter-bar .form-control{max-width:100%!important;}
    .btn-group{flex-wrap:wrap;}
    
    /* Tables */
    table th,table td{padding:.5rem .6rem;font-size:.78rem;}
    table th{font-size:.65rem;}
    .table-responsive{margin:0 -.85rem;padding:0 .85rem;}
    
    /* Attendance grid */
    .att-header{grid-template-columns:1.5fr repeat(4,1fr);font-size:.65rem;padding:.3rem .5rem;}
    .att-row{grid-template-columns:1.5fr repeat(4,1fr);padding:.45rem .5rem;font-size:.78rem;}
    .radio-label{width:28px;height:28px;font-size:.7rem;}
    
    /* Cards */
    .card-header{padding:.7rem .85rem;flex-wrap:wrap;gap:.5rem;}
    .card-header h3{font-size:.85rem;}
    .card-body{padding:.85rem;}
    
    /* Modals */
    .modal-overlay{padding:.5rem;}
    .modal,.modal.modal-lg{max-width:100%;max-height:95vh;border-radius:10px;}
    .modal-header{padding:.85rem 1rem;}
    .modal-body{padding:1rem;}
    .modal-footer{padding:.7rem 1rem;}
    
    /* QR Scanner layout: keep 2 columns on tablet, stack only on small mobile */
    
    /* Buttons */
    .btn{padding:.5rem .85rem;font-size:.8rem;}
    .btn-sm{padding:.3rem .55rem;font-size:.72rem;}
    .btn-lg{padding:.6rem 1.2rem;font-size:.88rem;}
    
    /* Tabs */
    .tabs-row{flex-wrap:wrap;}
    .tabs-row .btn{flex:1;min-width:0;justify-content:center;font-size:.75rem;padding:.45rem .5rem;}
    
    /* Pagination */
    .pagination{gap:.2rem;}
    .page-link{padding:.3rem .55rem;font-size:.75rem;}
    
    /* Upload zone */
    .upload-zone{padding:1.5rem 1rem;}
    
    /* Two column layout to single */
    .grid-2col{grid-template-columns:1fr!important;}
    
    /* Alert */
    .alert{font-size:.8rem;padding:.65rem .85rem;flex-wrap:wrap;}
}

/* MOBILE SMALL (480px) */
@media(max-width:480px){
    html{font-size:14px;}
    .content-body{padding:.65rem;}
    .top-header{padding:.6rem .65rem;}
    .stats-grid{grid-template-columns:1fr;gap:.5rem;}
    .stat-card{padding:.75rem;}
    .stat-number{font-size:1.4rem;}
    
    /* QR Scanner: stack on small phones - double important to beat inline */
    .qr-layout{display:grid!important;grid-template-columns:1fr!important;gap:1rem!important;}
    
    /* Attendance: make touch-friendly */
    .att-header{grid-template-columns:1fr repeat(4,40px);gap:.25rem;font-size:.6rem;}
    .att-header span:first-child{text-align:left;}
    .att-row{grid-template-columns:1fr repeat(4,40px);gap:.25rem;padding:.5rem;}
    .att-row>div:first-child strong{font-size:.82rem;}
    .radio-label{width:34px;height:34px;font-size:.75rem;}
    
    /* Table: card-like rows on tiny screens */
    table th{font-size:.6rem;padding:.4rem .5rem;}
    table td{padding:.4rem .5rem;font-size:.75rem;}
    
    /* Buttons stacked */
    .btn-group{width:100%;}
    .btn-group .btn{flex:1;justify-content:center;}
    
    /* QR scan result */
    #lastScan{padding:1rem!important;}
    #lastScan img{width:130px!important;height:130px!important;}
    
    /* Modal full screen on small devices */
    .modal-overlay{padding:0;}
    .modal,.modal.modal-lg{max-height:100vh;border-radius:0;min-height:100vh;}
    
    /* Card headers stack */
    .card-header{flex-direction:column;align-items:flex-start;gap:.4rem;}
    
    /* Hide less important columns */
    .hide-mobile{display:none!important;}
}

/* Touch improvements */
@media(hover:none){
    .btn,.radio-label,.nav-link,.page-link{-webkit-tap-highlight-color:transparent;}
    .radio-label{cursor:pointer;-webkit-touch-callout:none;user-select:none;}
    table tr:active td{background:var(--primary-bg);}
}

/* Safe area for notch phones */
@supports(padding: max(0px)) {
    .sidebar{padding-top:max(0px, env(safe-area-inset-top));}
    .content-body{padding-bottom:max(0.65rem, env(safe-area-inset-bottom));}
}

