:root{--primary:#202938;--secondary:#3498db;--page-bg:#f4f6f8;--surface:#fff;--border:#d9dee7;--text:#202938;--muted:#64748b}*{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{min-height:100vh;color:var(--text);background:var(--page-bg);margin:0;font-family:Segoe UI,Arial,sans-serif;overflow-x:hidden}button,input,select{font:inherit}.app-shell{width:100%;max-width:1080px;margin:0 auto}.related-project{color:#e2e8f0;background:#172033;border:1px solid #26344d;border-radius:10px;justify-content:space-between;align-items:center;gap:16px;margin:12px 0 20px;padding:12px 14px;display:flex;box-shadow:0 8px 24px #0f172a14}.related-project-label{color:#93c5fd;letter-spacing:.06em;text-transform:uppercase;margin-bottom:2px;font-size:.62rem;font-weight:900;display:block}.related-project strong{color:#f8fafc;font-size:.84rem;display:block}.related-project p{color:#94a3b8;margin:3px 0 0;font-size:.7rem}.related-project a{color:#172033;white-space:nowrap;background:#93c5fd;border-radius:6px;flex:none;padding:8px 10px;font-size:.7rem;font-weight:900;text-decoration:none}.related-project a:hover{background:#bfdbfe}.related-project a:focus-visible{outline-offset:2px;outline:2px solid #f8fafc}.schedule-container{background:var(--surface);border-radius:0 0 8px 8px;width:100%;min-width:880px;position:relative;overflow:hidden;box-shadow:0 0 20px #0f172a1a}.tracker-toolbar{color:#fff;background:#0f172a;border-bottom:1px solid #1e293b;justify-content:space-between;align-items:center;gap:6px;min-height:32px;padding:3px 6px;display:flex}.profile-menu{z-index:20;position:relative}.profile-menu summary{color:#e2e8f0;cursor:pointer;background:#334155;border:1px solid #64748b;border-radius:50%;place-items:center;width:24px;height:24px;font-size:.6rem;font-weight:900;list-style:none;display:grid;overflow:hidden}.profile-menu summary::-webkit-details-marker{display:none}.profile-menu summary::marker{content:"";display:none}.profile-menu summary:focus-visible{outline-offset:1px;outline:2px solid #60a5fa}.profile-menu img{object-fit:cover;width:100%;height:100%}.profile-popover{background:#fff;border:1px solid #dbe3ef;border-radius:7px;gap:2px;width:124px;padding:4px;display:grid;position:absolute;top:calc(100% + 5px);left:0;box-shadow:0 10px 28px #0f172a33}.profile-popover form{margin:0}.profile-action{color:#1e293b;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:5px;width:100%;padding:6px 7px;font-size:.66rem;font-weight:800;text-decoration:none;display:block}.profile-action:hover{background:#eff6ff}.profile-sign-out{color:#b91c1c}.week-switcher{align-items:center;gap:1px;display:flex}.week-nav-button{color:#cbd5e1;cursor:pointer;background:0 0;border:0;border-radius:4px;place-items:center;width:24px;height:24px;padding:0;font-size:.92rem;font-weight:900;display:grid}.week-nav-button:hover:not(:disabled){color:#fff;background:#1e293b}.week-nav-button:disabled{color:#475569;cursor:not-allowed}.week-display{color:#f8fafc;text-align:center;white-space:nowrap;min-width:46px;font-size:.62rem;font-weight:900}.week-nav-button:focus-visible{outline-offset:1px;outline:2px solid #60a5fa}.tracker-error{color:#b91c1c;background:#fef2f2;border-bottom:1px solid #fecaca;margin:0;padding:8px 12px;font-size:.72rem;font-weight:800}.table-scroll{overscroll-behavior-inline:contain;-webkit-overflow-scrolling:touch;width:100%;overflow-x:auto}table{table-layout:fixed;border-collapse:collapse;width:100%;min-width:880px}th,td{text-align:center;border:1px solid var(--border);padding:9px 6px}thead th{z-index:3;color:#fff;background:var(--primary);font-size:.8rem;font-weight:700;position:sticky;top:0}.time-column{width:150px}thead .time-column{z-index:5;left:0}.time-label{z-index:2;color:#fff;background:var(--secondary);white-space:nowrap;font-weight:700;position:sticky;left:0}.class-slot-row{height:70px}.break-row{height:34px}.current-day-column{border-left:3px solid #f59e0b!important;border-right:3px solid #f59e0b!important}thead .current-day-column{background:#d97706}.course-cell{vertical-align:middle;cursor:pointer;background:#fff;transition:background .15s,box-shadow .15s;position:relative}.course-info{flex-direction:column;justify-content:center;align-items:center;gap:2px;min-height:40px;display:flex}.course-code{color:var(--muted);letter-spacing:.025em;font-size:.66rem;font-weight:800}.course-name{color:var(--text);font-size:.8rem;font-weight:700;line-height:1.2}.subject-regular-attendance{color:#166534;background:#dcfce7;border-radius:999px;padding:1px 5px;font-size:.58rem;font-weight:900;line-height:1.4}.instructor{color:#475569;font-size:.72rem;font-weight:600}.room{color:var(--secondary);font-size:.7rem;font-style:italic;font-weight:700}.empty-cell{background:repeating-linear-gradient(45deg,#fff,#fff 6px,#f1f5f9 6px 12px)}.break-cell{color:#a16207;letter-spacing:1px;background:#fff3cd;padding:5px;font-size:.68rem;font-weight:800}.ct-active{background:#fff1f2;box-shadow:inset 0 0 0 2px #fb7185}.ct-label{color:#fff;background:#be123c;border-radius:999px;justify-content:center;align-items:center;padding:2px 7px;font-size:.62rem;font-weight:800;display:inline-flex}.algorithm-lab{background:#dcfce7;box-shadow:inset 0 0 0 2px #4ade80}.numerical-lab{background:#fef3c7;box-shadow:inset 0 0 0 2px #fbbf24}.microprocessor-lab{background:#ede9fe;box-shadow:inset 0 0 0 2px #a78bfa}.technical-writing-lab{background:#fce7f3;box-shadow:inset 0 0 0 2px #f472b6}.attendance-cell:after{content:"A";color:#b91c1c;background:#fee2e2;border-radius:50%;place-items:center;width:18px;height:18px;font-size:.62rem;font-weight:900;display:grid;position:absolute;top:3px;right:3px}.attendance-cell.attendance-absent{box-shadow:inset 0 0 0 2px #fecaca;background:#fff7f7!important}.attendance-cell.attendance-present{box-shadow:inset 0 0 0 2px #86efac;background:#ecfdf5!important}.attendance-cell.attendance-present:after{content:"✓";color:#166534;background:#bbf7d0}.attendance-cell.algorithm-lab.attendance-absent{box-shadow:inset 0 0 0 2px #86efac,inset 0 -3px #4ade80;background:#f0fdf0!important}.attendance-cell.algorithm-lab.attendance-present{box-shadow:inset 0 0 0 2px #22c55e,inset 0 -3px #4ade80;background:#dcfce7!important}.attendance-cell.numerical-lab.attendance-absent{box-shadow:inset 0 0 0 2px #fde68a,inset 0 -3px #fbbf24;background:#fffbeb!important}.attendance-cell.numerical-lab.attendance-present{box-shadow:inset 0 0 0 2px #f59e0b,inset 0 -3px #fbbf24;background:#fef3c7!important}.attendance-cell.microprocessor-lab.attendance-absent{box-shadow:inset 0 0 0 2px #c4b5fd,inset 0 -3px #a78bfa;background:#f5f3ff!important}.attendance-cell.microprocessor-lab.attendance-present{box-shadow:inset 0 0 0 2px #8b5cf6,inset 0 -3px #a78bfa;background:#ede9fe!important}.attendance-cell.technical-writing-lab.attendance-absent{box-shadow:inset 0 0 0 2px #f9a8d4,inset 0 -3px #f472b6;background:#fdf2f8!important}.attendance-cell.technical-writing-lab.attendance-present{box-shadow:inset 0 0 0 2px #ec4899,inset 0 -3px #f472b6;background:#fce7f3!important}.attendance-cell.ct-active.attendance-absent{box-shadow:inset 0 0 0 2px #fda4af,inset 0 -3px #fb7185;background:#fff1f2!important}.attendance-cell.ct-active.attendance-present{box-shadow:inset 0 0 0 2px #f43f5e,inset 0 -3px #fb7185;background:#ffe4e6!important}.attendance-cell[data-session-type=ct]:after{box-shadow:0 0 0 2px #fecdd3}.attendance-cell:focus-visible{outline-offset:-3px;outline:3px solid #2563eb}.saving-dot{background:#2563eb;border-radius:50%;width:7px;height:7px;animation:.7s infinite alternate pulse;position:absolute;bottom:5px;left:5px}@keyframes pulse{to{opacity:.25}}.login-page{background:radial-gradient(circle at top, #dbeafe, transparent 45%), var(--page-bg);place-items:center;min-height:100vh;padding:20px;display:grid}.login-card{text-align:center;border:1px solid var(--border);background:#fff;border-radius:14px;width:min(390px,100%);padding:30px;box-shadow:0 24px 70px #0f172a24}.login-mark{color:#fff;background:var(--primary);border-radius:12px;place-items:center;width:52px;height:52px;margin:0 auto 16px;font-weight:900;display:grid}.login-eyebrow{color:var(--secondary);text-transform:uppercase;margin:0 0 5px;font-size:.72rem;font-weight:900}.login-card h1{margin:0;font-size:1.65rem}.login-description{color:var(--muted);margin:10px 0 22px;font-size:.86rem;line-height:1.5}.google-button{color:#fff;cursor:pointer;background:#1f2937;border:0;border-radius:7px;justify-content:center;align-items:center;gap:10px;width:100%;padding:11px 14px;font-weight:800;display:flex}.google-button:hover{background:#111827}.google-letter{color:#1f2937;background:#fff;border-radius:50%;place-items:center;width:22px;height:22px;font-weight:900;display:grid}.setup-notice{color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:7px;padding:11px 14px;font-size:.78rem;font-weight:800}.analytics-page{width:min(1080px,100%);min-height:100vh;margin:0 auto;padding:18px}.analytics-header{justify-content:space-between;align-items:center;gap:14px;margin-bottom:14px;display:flex}.analytics-header p,.subject-heading p{color:var(--secondary);letter-spacing:.06em;text-transform:uppercase;margin:0 0 3px;font-size:.68rem;font-weight:900}.analytics-header h1{margin:0;font-size:1.45rem}.back-link{color:#1e3a8a;background:#dbeafe;border-radius:6px;padding:7px 10px;font-size:.75rem;font-weight:800;text-decoration:none}.analytics-content{flex-direction:column;gap:12px;display:flex}.current-week-setting{color:#e2e8f0;background:#0f172a;border-radius:10px;align-items:flex-end;gap:10px;padding:12px;display:flex}.current-week-setting label{flex-direction:column;gap:4px;display:flex}.current-week-setting label span{color:#94a3b8;font-size:.68rem;font-weight:800}.current-week-setting select,.current-week-setting button{border:1px solid #475569;border-radius:6px;min-height:34px;padding:5px 9px;font-size:.76rem;font-weight:800}.current-week-setting select{color:#0f172a;background:#fff}.current-week-setting button{color:#fff;cursor:pointer;background:#2563eb}.current-week-setting button:disabled{opacity:.65;cursor:wait}.current-week-setting small{color:#cbd5e1;margin-left:auto;padding-bottom:7px;font-size:.66rem}.analytics-success{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:7px;margin:0;padding:9px 11px;font-size:.75rem;font-weight:700}.date-filter{border:1px solid var(--border);background:#fff;border-radius:10px;align-items:flex-end;gap:10px;padding:12px;display:flex}.date-filter label{flex-direction:column;gap:4px;display:flex}.date-filter label span{color:var(--muted);font-size:.68rem;font-weight:800}.date-filter input,.date-filter select{min-height:34px;color:var(--text);background:#f8fafc;border:1px solid #cbd5e1;border-radius:6px;padding:5px 8px;font-size:.76rem;font-weight:700}.date-filter small{color:var(--muted);margin-left:auto;padding-bottom:7px;font-size:.66rem}.date-arrow{color:var(--muted);padding-bottom:8px}.analytics-error{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:7px;margin:0;padding:9px 11px;font-size:.75rem;font-weight:700}.subject-section{border:1px solid var(--border);background:#fff;border-radius:10px;overflow:hidden}.subject-heading{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:13px 14px;display:flex}.subject-heading h2{margin:0;font-size:1rem}.subject-heading>span{color:var(--muted);font-size:.7rem;font-weight:800}.analytics-table-scroll{overflow-x:auto}.analytics-table{table-layout:auto;width:100%;min-width:650px}.analytics-table th,.analytics-table td{text-align:left;padding:10px 12px}.analytics-table th{color:#475569;text-transform:uppercase;background:#f8fafc;font-size:.67rem;position:static}.analytics-table th:not(:first-child),.analytics-table td:not(:first-child){text-align:center}.analytics-table td{font-size:.76rem}.analytics-table td:first-child strong,.analytics-table td:first-child small{display:block}.analytics-table td:first-child small{color:var(--muted);margin-top:2px;font-size:.62rem}.present-number{color:#15803d;font-weight:900}.absent-number{color:#b91c1c;font-weight:900}.percentage-cell{flex-direction:column;gap:4px;min-width:92px;display:flex}.percentage-cell strong{color:#1e3a8a;font-size:.75rem}.percentage-cell>span{background:#e2e8f0;border-radius:999px;width:100%;height:5px;overflow:hidden}.percentage-cell i{border-radius:inherit;background:#22c55e;height:100%;display:block}.empty-analytics{height:110px;color:var(--muted);text-align:center!important}@media (max-width:879px){body{padding:0}.app-shell{max-width:none}.related-project{flex-direction:column;align-items:flex-start;gap:9px;margin:8px 5px 14px}.related-project a{text-align:center;width:100%}.schedule-container{border-radius:0;min-width:0}.tracker-toolbar{min-height:30px;padding:3px 5px}.profile-menu summary{width:24px;height:24px}.profile-popover{top:calc(100% + 5px)}.week-nav-button{width:24px;height:24px}.week-display{min-width:44px;font-size:.6rem}table{min-width:650px}th,td{padding:4px 3px}thead th{font-size:.68rem}.time-column{width:86px}.time-label{font-size:.62rem}.class-slot-row{height:52px}.break-row{height:20px}.break-cell{letter-spacing:.5px;padding:1px 2px;font-size:.54rem}.course-info{gap:1px;min-height:32px}.course-code{font-size:.56rem}.course-name{font-size:.66rem;line-height:1.1}.instructor{font-size:.58rem;line-height:1.1}.room{font-size:.57rem}.ct-label{padding:1px 4px;font-size:.54rem}.attendance-cell:after{width:14px;height:14px;font-size:.5rem;top:2px;right:2px}.current-day-column{border-left-width:2px!important;border-right-width:2px!important}.analytics-page{padding:10px}.analytics-header{margin-bottom:10px}.analytics-header h1{font-size:1.15rem}.current-week-setting{flex-wrap:wrap;gap:7px;padding:9px}.current-week-setting label{flex:150px}.current-week-setting select,.current-week-setting button{width:100%}.current-week-setting small{width:100%;margin:0;padding:0}.date-filter{flex-wrap:wrap;gap:7px;padding:9px}.date-filter label{flex:125px}.date-filter input,.date-filter select{width:100%}.date-arrow{display:none}.date-filter small{width:100%;margin:0;padding:0}.subject-heading{padding:9px 10px}.analytics-table th,.analytics-table td{padding:7px 8px}}@media (max-width:420px){table{min-width:620px}.time-column{width:80px}.time-label{font-size:.58rem}.login-card{padding:24px 18px}}
