*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#0a0a0a;color:#fff}.app{min-height:100vh;background:linear-gradient(135deg,#0a0a0a,#1a1a1a);padding:2rem}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh}.login-card{background:#111;border:1px solid #222222;border-radius:16px;padding:3rem;width:100%;max-width:420px;box-shadow:0 20px 60px #00000080}.login-title{font-size:2.5rem;font-weight:700;margin-bottom:.5rem;background:linear-gradient(135deg,#fff,#888);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.login-subtitle{color:#666;margin-bottom:2rem;font-size:.95rem}.login-form{display:flex;flex-direction:column;gap:1.5rem}.input-group{display:flex;flex-direction:column;gap:.5rem}.input-group label{font-size:.875rem;font-weight:500;color:#999}.input-group input{background:#1a1a1a;border:1px solid #333333;border-radius:8px;padding:.875rem 1rem;color:#fff;font-size:1rem;transition:all .2s}.input-group input:focus{outline:none;border-color:#fff;background:#222}.input-group input::placeholder{color:#555}.input-group input:disabled{opacity:.5;cursor:not-allowed}.error-message{background:#2a1515;border:1px solid #442222;color:#f66;padding:.875rem;border-radius:8px;font-size:.875rem}.login-btn{background:#fff;color:#000;border:none;border-radius:8px;padding:1rem;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s;margin-top:.5rem;display:flex;align-items:center;justify-content:center;gap:.5rem}.login-btn:hover:not(:disabled){background:#e0e0e0;transform:translateY(-1px);box-shadow:0 4px 12px #fff3}.login-btn:disabled{opacity:.6;cursor:not-allowed}.spinner{width:16px;height:16px;border:2px solid #333333;border-top-color:#000;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.login-footer{margin-top:2rem;text-align:center;color:#555;font-size:.75rem}.container{max-width:1400px;margin:0 auto}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:3rem;padding-bottom:1.5rem;border-bottom:1px solid #222222}.header h1{font-size:2rem;font-weight:700;margin-bottom:.25rem}.student-id{color:#666;font-size:.875rem}.header-actions{display:flex;gap:.75rem;align-items:center}.share-btn{background:#1a1a1a;color:#fff;border:1px solid #333333;border-radius:8px;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:.5rem}.share-btn:hover{background:#222;border-color:#444}.share-icon{font-size:1rem}.refresh-btn{background:#1a1a1a;color:#fff;border:1px solid #333333;border-radius:8px;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:.5rem}.refresh-btn:hover:not(:disabled){background:#222;border-color:#444}.refresh-btn:disabled{opacity:.6;cursor:not-allowed}.refresh-icon{font-size:1.25rem;display:inline-block;transition:transform .3s}.refresh-btn:hover:not(:disabled) .refresh-icon{transform:rotate(180deg)}.logout-btn{background:#1a1a1a;color:#fff;border:1px solid #333333;border-radius:8px;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.logout-btn:hover{background:#222;border-color:#444}.stats-grid{display:flex;flex-wrap:wrap;gap:1.5rem;margin-bottom:3rem;justify-content:center}.stats-grid>.stat-card{flex:1 1 320px;max-width:400px}.stat-card{background:#111;border:1px solid #222222;border-radius:12px;padding:1.5rem;transition:all .2s}.stat-card:hover{border-color:#333;transform:translateY(-2px);box-shadow:0 8px 24px #0000004d}.stat-header{margin-bottom:1.5rem}.stat-header h3{font-size:1.125rem;font-weight:600;margin-bottom:.5rem;line-height:1.4}.module-code{font-size:.75rem;color:#666;font-family:Courier New,monospace}.attendance-circle{position:relative;width:160px;height:160px;margin:0 auto 1.5rem}.attendance-circle svg{width:100%;height:100%;transform:rotate(-90deg)}.attendance-progress{animation:fillCircle .8s ease-out forwards;stroke-dashoffset:282.7}@keyframes fillCircle{0%{stroke-dashoffset:282.7}to{stroke-dashoffset:0}}.attendance-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.attendance-percent{font-size:2rem;font-weight:700}.stat-details{display:flex;flex-direction:column;gap:.75rem}.check-punch-btn-desktop{width:100%;background:#1a1a1a;color:#fff;border:1px solid #333333;border-radius:8px;padding:.75rem;font-size:.875rem;font-weight:600;cursor:pointer;transition:all .2s;margin-top:.5rem}.check-punch-btn-desktop:hover:not(:disabled){background:#222;border-color:#444;transform:translateY(-1px)}.check-punch-btn-desktop:disabled{opacity:.6;cursor:not-allowed}.stat-row{display:flex;justify-content:space-between;align-items:center;padding:.75rem;background:#1a1a1a;border-radius:8px}.stat-row span:first-child{color:#999;font-size:.875rem}.stat-value{font-weight:600;color:#fff}.stat-row.warning{background:#2a1515;border:1px solid #442222}.stat-row.warning .stat-value{color:#f66}.stat-row.success{background:#152a1a;border:1px solid #224422}.stat-row.success .stat-value{color:#0f8}.stat-row.danger{background:#3a1515;border:1px solid #552222;animation:pulse 2s infinite}.stat-row.danger span:first-child{color:#f44;font-weight:600}.stat-row.danger .stat-value{color:#f66}.stat-row.info{background:#1a1f2a;border:1px solid #2a3444}.stat-row.info .stat-value{color:#8af}@keyframes pulse{0%,to{border-color:#522}50%{border-color:#722}}.summary{background:#111;border:1px solid #222222;border-radius:12px;padding:2rem}.summary h2{font-size:1.5rem;font-weight:700;margin-bottom:1.5rem}.summary-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.5rem}.summary-item{display:flex;flex-direction:column;gap:.5rem;padding:1.25rem;background:#1a1a1a;border-radius:8px}.summary-label{color:#666;font-size:.875rem;font-weight:500}.summary-value{font-size:2rem;font-weight:700}.mobile-summary{margin-bottom:2rem}.summary-title{font-size:1.5rem;font-weight:700;margin-bottom:1.5rem}.mobile-cards{display:flex;flex-direction:column;gap:1rem}.mobile-card{background:#111;border:1px solid #222222;border-radius:12px;padding:1.25rem;cursor:pointer;transition:all .2s}.mobile-card:active{transform:scale(.98)}.mobile-card:hover{border-color:#333;background:#151515}.mobile-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1rem}.mobile-card-header h3{font-size:1rem;font-weight:600;margin-bottom:.25rem}.module-code-mobile{font-size:.75rem;color:#666;font-family:Courier New,monospace}.attendance-badge{padding:.5rem .875rem;border-radius:8px;font-size:1.125rem;font-weight:700}.mobile-card-content{display:flex;flex-direction:column;gap:.75rem}.quick-stat{display:flex;justify-content:space-between;padding:.75rem;background:#1a1a1a;border-radius:8px}.quick-label{color:#999;font-size:.875rem}.quick-value{font-weight:600;color:#fff}.danger-text{background:#2a1515;border:1px solid #442222;color:#f66}.warning-text{background:#2a1f15;border:1px solid #443322;color:#fa6}.success-text{background:#152a1a;border:1px solid #224422;color:#0f8}.mobile-card-footer{margin-top:.5rem;padding-top:.75rem;border-top:1px solid #222222;display:flex;justify-content:space-between;align-items:center}.check-punch-btn{background:#1a1a1a;color:#fff;border:1px solid #333333;border-radius:6px;padding:.5rem 1rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.check-punch-btn:hover{background:#222;border-color:#444}.check-punch-btn:disabled{opacity:.6;cursor:not-allowed}.details-link{color:#666;font-size:.875rem;font-weight:500}.mobile-detail{animation:slideIn .2s ease-out}.mobile-detail-header{margin-bottom:1.5rem}.back-btn{background:#1a1a1a;color:#fff;border:1px solid #333333;border-radius:8px;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.back-btn:hover{background:#222;border-color:#444}.mobile-detail-card{max-width:100%}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.punch-details-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem;animation:fadeIn .2s ease-out}.punch-details-modal{background:#111;border:1px solid #222222;border-radius:12px;width:100%;max-width:500px;max-height:80vh;display:flex;flex-direction:column;animation:slideUp .3s ease-out}.punch-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem;border-bottom:1px solid #222222}.punch-header h3{font-size:1.125rem;font-weight:600;margin:0}.close-btn{background:transparent;border:none;color:#666;font-size:1.5rem;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}.close-btn:hover{background:#222;color:#fff}.punch-list{overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.75rem}.punch-item{background:#1a1a1a;border:1px solid #222222;border-radius:8px;padding:.875rem}.punch-date-time{display:flex;justify-content:space-between;margin-bottom:.75rem;padding-bottom:.75rem;border-bottom:1px solid #222222}.punch-date{font-weight:600;color:#fff;font-size:.875rem}.punch-time{color:#666;font-size:.875rem}.punch-info{display:flex;flex-direction:column;gap:.5rem}.punch-status-row{display:flex;justify-content:space-between;align-items:center}.punch-status{padding:.25rem .625rem;border-radius:4px;font-size:.75rem;font-weight:600}.punch-status.present{background:#152a1a;color:#0f8}.punch-status.absent{background:#2a1515;color:#f66}.punch-in-time{font-size:.875rem;color:#999}.punch-details-row{display:flex;justify-content:space-between;font-size:.875rem}.faculty-name{color:#ccc}.classroom{color:#888}.session-mode{font-size:.75rem;color:#666;padding:.25rem .5rem;background:#222;border-radius:4px;align-self:flex-start}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.app{padding:1rem}.login-card{padding:2rem}.login-title{font-size:2rem}.header{flex-direction:column;align-items:flex-start;gap:1rem}.stats-grid,.summary-stats{grid-template-columns:1fr}}
