*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{-webkit-font-smoothing:antialiased;background:#f5f5f3;color:#1a1a1a;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:15px}.page{max-width:900px}.page,.page-wide{margin:0 auto;padding:1rem 1rem 5rem}.page-wide{max-width:1100px}.nav{background:#fff;border-bottom:1px solid #00000014;height:52px;justify-content:space-between;padding:0 1rem;position:-webkit-sticky;position:sticky;top:0;z-index:50}.nav,.nav-brand{align-items:center;display:flex}.nav-brand{color:#1a1a1a;font-size:15px;font-weight:600;gap:8px}.nav-tabs{display:flex}.nav-tab{background:none;border:none;border-bottom:2px solid #0000;color:#888;cursor:pointer;font-family:inherit;font-size:13px;font-weight:500;height:52px;padding:0 14px;white-space:nowrap}.nav-tab:hover{color:#1a1a1a}.nav-tab.active{border-bottom-color:#1a1a1a;color:#1a1a1a}.nav-right{align-items:center;color:#888;display:flex;font-size:13px;gap:10px}.card{background:#fff;border:1px solid #00000014;border-radius:12px;padding:1.25rem}.card+.card{margin-top:.75rem}.card-title{color:#1a1a1a;font-size:14px;font-weight:600}.card-title,.field{margin-bottom:1rem}.label{color:#888;display:block;font-size:11px;font-weight:600;letter-spacing:.5px;margin-bottom:5px;text-transform:uppercase}input,select,textarea{-webkit-appearance:none;appearance:none;background:#fff;border:1px solid #00000026;border-radius:8px;color:#1a1a1a;font-family:inherit;font-size:15px;padding:10px 12px;width:100%}input:focus,select:focus,textarea:focus{border-color:#185fa5;box-shadow:0 0 0 3px #185fa51a;outline:none}textarea{line-height:1.5;min-height:80px;resize:vertical}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath fill='%23888' d='M6 8 0 0h12z'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:36px}.grid2{grid-gap:12px;display:grid;gap:12px;grid-template-columns:1fr 1fr}.grid3{grid-gap:10px;display:grid;gap:10px;grid-template-columns:1fr 1fr 1fr}.seg{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.seg-btn{background:#fff;border:1px solid #00000026;border-radius:8px;color:#666;cursor:pointer;font-family:inherit;font-size:13px;font-weight:500;padding:8px 14px}.seg-btn.active{background:#1a1a1a;border-color:#1a1a1a;color:#fff}.btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-family:inherit;font-size:14px;font-weight:600;gap:6px;padding:10px 18px;text-decoration:none}.btn:disabled{cursor:not-allowed;opacity:.45}.btn-primary{background:#1a1a1a;color:#fff}.btn-primary:hover:not(:disabled){background:#333}.btn-blue{background:#185fa5;color:#fff}.btn-blue:hover:not(:disabled){background:#1558b0}.btn-green{background:#2d7a1f;color:#fff}.btn-green:hover:not(:disabled){background:#267018}.btn-outline{background:#fff;border:1px solid #00000026;color:#1a1a1a}.btn-outline:hover{background:#f5f5f3}.btn-danger{background:#fff;border:1px solid #fca5a5;color:#dc2626}.btn-danger:hover{background:#fef2f2}.btn-sm{font-size:12px;padding:6px 12px}.btn-full{justify-content:center;width:100%}.btn-icon{border-radius:8px;padding:8px}.badge{border-radius:20px;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.2px;padding:3px 9px}.badge-blue{background:#dbeafe;color:#1d4ed8}.badge-green{background:#dcfce7;color:#166534}.badge-amber{background:#fef3c7;color:#92400e}.badge-gray{background:#f3f4f6;color:#4b5563}.badge-red{background:#fee2e2;color:#991b1b}.alert{border-radius:8px;font-size:13px;line-height:1.5;margin-bottom:12px;padding:10px 14px}.alert-success{background:#dcfce7;border:1px solid #bbf7d0;color:#166534}.alert-error{background:#fee2e2;border:1px solid #fecaca;color:#991b1b}.alert-info{background:#dbeafe;border:1px solid #bfdbfe;color:#1d4ed8}.tbl-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}table{border-collapse:collapse;font-size:13px;width:100%}th{border-bottom:1px solid #00000014;color:#888;font-size:11px;font-weight:600;letter-spacing:.4px;padding:8px 12px;text-align:left;text-transform:uppercase}td{border-bottom:1px solid #0000000d;padding:11px 12px;vertical-align:middle}tr:last-child td{border-bottom:none}tr.row-click{cursor:pointer}tr.row-click:hover td{background:#fafaf8}.cal-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.cal-title{font-size:17px;font-weight:600}.cal-grid{grid-gap:2px;display:grid;gap:2px;grid-template-columns:repeat(7,1fr)}.cal-day-hdr{color:#888;font-size:11px;font-weight:600;margin-bottom:2px;padding:6px 0;text-align:center;text-transform:uppercase}.cal-cell{background:#fff;border:1px solid #0000000f;border-radius:8px;cursor:default;min-height:80px;padding:6px}.cal-cell.today{background:#f0f7ff;border-color:#185fa5}.cal-cell.other{background:#fafaf8;opacity:.6}.cal-date{color:#aaa;font-size:12px;font-weight:600;margin-bottom:4px}.cal-date.today-num{color:#185fa5}.cal-event{background:#dbeafe;border-radius:4px;color:#1d4ed8;cursor:pointer;font-size:11px;font-weight:500;margin-bottom:2px;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;white-space:nowrap}.cal-event:hover{opacity:.85}.cal-event.in-progress{background:#fef3c7;color:#92400e}.cal-event.complete{background:#dcfce7;color:#166534}.dd-wrap{position:relative}.dd-list{background:#fff;border:1px solid #0000001f;border-radius:10px;box-shadow:0 4px 20px #0000001a;left:0;max-height:200px;overflow-y:auto;position:absolute;right:0;top:calc(100% + 4px);z-index:40}.dd-item{border-bottom:1px solid #0000000d;cursor:pointer;font-size:14px;padding:10px 14px}.dd-item:last-child{border-bottom:none}.dd-item:hover{background:#f5f5f3}.modal-bg{align-items:center;background:#0006;display:flex;inset:0;justify-content:center;padding:1rem;position:fixed;z-index:100}.modal{background:#fff;border-radius:16px;max-height:90vh;max-width:420px;overflow-y:auto;padding:1.5rem;width:100%}.spinner{animation:spin .6s linear infinite;border:2px solid #0000001a;border-radius:50%;border-top-color:#1a1a1a;display:inline-block;height:18px;vertical-align:middle;width:18px}.spinner-white{border-color:#fff #ffffff4d #ffffff4d}@keyframes spin{to{transform:rotate(1turn)}}.auth-wrap,.spin-page{align-items:center;display:flex;justify-content:center;min-height:100vh}.auth-wrap{background:#f5f5f3;padding:1rem}.auth-card{background:#fff;border:1px solid #00000014;border-radius:16px;max-width:380px;padding:2rem;width:100%}.auth-logo{margin-bottom:1.75rem;text-align:center}.auth-logo-icon{align-items:center;background:#dbeafe;border-radius:50%;display:flex;height:52px;justify-content:center;margin:0 auto 10px;width:52px}.auth-title{color:#1a1a1a;font-size:20px;font-weight:700}.auth-sub{color:#888;font-size:13px;margin-top:3px}.inst-header{background:#185fa5;color:#fff;padding:1rem}.inst-header-title{font-size:17px;font-weight:700}.inst-header-sub{font-size:12px;margin-top:2px;opacity:.8}.week-nav{align-items:center;background:#fff;border:1px solid #00000014;border-radius:12px;display:flex;justify-content:space-between;margin-bottom:1rem;padding:.875rem 1rem}.week-label{font-size:15px;font-weight:600}.week-total{color:#888;font-size:13px}.time-row{align-items:center;border-bottom:1px solid #0000000f;display:flex;gap:12px;padding:.875rem 0}.time-row:last-child{border-bottom:none}.time-date{color:#888;flex-shrink:0;font-size:12px;font-weight:600;width:36px}.time-info{flex:1 1;min-width:0}.time-name{font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.time-detail{color:#888;font-size:12px;margin-top:1px}.time-hours{color:#185fa5;flex-shrink:0;font-size:15px;font-weight:700}hr{border:none;border-top:1px solid #00000014;margin:1rem 0}.muted{color:#888}.text-sm{font-size:13px}.text-xs{font-size:11px}.fw600{font-weight:600}.link-box{background:#f5f5f3;border:1px solid #0000001a;border-radius:8px;color:#555;font-family:monospace;font-size:12px;padding:10px 12px;word-break:break-all}@media(max-width:600px){.nav-tabs{display:none}.grid2,.grid3{grid-template-columns:1fr}.modal{margin:0;max-width:100%}}
/*# sourceMappingURL=main.e3178414.css.map*/